artifact · 9 of 11
QA
The engineering receipts and, from Phase 11, the gate results: what ran, what failed, what the fix changed.
design/QA.md · 11,375 B · Phases 5 → 11
QA — ultraweb showcase
Gate results land here in Phase 11. Earlier entries are engineering receipts.
CORRECTION — the hooks ARE registered (2026-08-14 18:2x, Phase 6)
Phase 0 recorded "write-time hooks NOT registered (negative probe)". That conclusion was WRONG, and the probe was invalid: it wrote a .md file in the session scratchpad, but hooks/antislop.sh is deliberately scoped to source files only (*.tsx|*.ts|*.jsx|*.css|*.mdx), never design/, and only inside a tree with a design/BRIEF.md ancestor — the probe was outside its jurisdiction twice over. Empirical evidence this build: (1) design/studio-log.jsonl exists and carries this session's real agent launches/stops (studio-log.sh, PostToolUse Task + SubagentStop); (2) antislop.sh fired with blocking feedback on app/(site)/craft/_components/banned-wall.tsx — the one surface DIRECTION.md's named exception licenses; the specialist kept the licensed content and reported the firing. Consequences applied: /session, /skills, /receipts, /studio copy corrected from "capability, not evidence" to the truthful "fired during this build"; the original wrong claim stays in the record (REVIEWS.md CP4 block, PROGRESS history) with this correction beside it. Note for gate-antislop: the write-time hook has NO data-quoted-slop carve-out (by design — it's a 30ms grep); its one firing on the quotation wall is expected and is not a violation.
Phase 5 — scaffold smoke test (2026-08-14 17:33)
npx create-next-app@latest . --yesIN PLACE at repo root (user-mandated variant: design/ moved aside and back; no nested git init occurred; history intact).- Versions landed: next 16.3.1 · react 19.2.8 · tailwindcss ^4 (resolves 4.3.x) — minor drift vs manifest (16.2.10 / 19.2.7), allowed per drift protocol.
- motion pinned 12.42.2 deliberately: npm latest is 13.1.0 (MAJOR); STACK.md's API facts are verified for 12 only — unverified major not adopted mid-build. Re-verify before any future upgrade.
- next-themes NOT installed — single dark world (DIRECTION.md / SYSTEM.md), no theme switch exists.
- shadcn CLI 4.18.0 init:
-b radix -p vega -y(first attempt stalled on interactive preset picker; preset irrelevant — tokens replaced wholesale). components.json: tailwind.config blank, css → app/globals.css, lucide. globals.css = design/tokens.css verbatim, exactly one:root. - npm 12 blocked
unrs-resolverpostinstall (allowScripts) — watch ESLint; escalate to stack-doctor only if lint breaks. - tsconfig strict: true (verified, untouched).
npm run build— clean; route table: ○ / · ○ /_not-found · ○ /icon.svg · ƒ /studio(+feed,shot).- Dev server: PID 28444, port 3000, owner: Lead —
GET / 200,GET /studio 200,GET /mockups/a-data-utilitarian.html 200, zero errors in log. /studiois exempt from all gates (it is the construction site, not the site) — recorded here so no later run "discovers" it.- Scaffold ledger: init OK · design-move OK · shadcn OK · deps OK · tokens-wired OK · folders OK · strip OK · brand+mockups-to-public OK · studio OK · smoke OK.
Phase 6 — build receipts (2026-08-14 18:31)
- Homepage Lead-built; CP4 approved round 1 (REVIEWS.md). Inner pages: 5 Opus specialists in parallel, each self-verified (tsc exit 0 + route 200 + eslint clean + banned-pattern greps); Lead re-verified integrated:
npx tsc --noEmitexit 0,npm run buildclean — 20 static pages (5 rooms + 11 artifacts + 404 + icon) + 3 dynamic /studio routes. - Lead visual sweep at 1440 of all five rooms + one artifact page (design/screenshots/p6/). Two defects found and fixed by the Lead during integration:
- Hero terminal Edge Bleed overshot viewport ~290px (grid-item % margin resolves against grid area) → exact viewport-edge calc. (Pre-CP4.)
Reveal(motion whileInView) SSR'd inlineopacity:0— content gated on JS/animation for no-JS users, and invisible in full-page captures → rewritten visible-by-construction (IO + 2s failsafe, zero motion import). Verified: 3/3 evidence images visible, 0 opacity-0 divs post-window.
- Known flags for gates: /receipts contact-sheet imgs have no width/height (below-fold CLS — gate-performance); /receipts/direction renders the banned list as document text inside
data-artifact-document(gate-antislop scoping note, alongsidedata-quoted-slopon /craft); lazy thumbnails may appear unloaded in stitched full-page captures (capture artifact, not defect). - 404 verified: real 404 status + designed terminal frame. ⌘K palette + header affordance built (keyboard verification due in gate-accessibility).
Phase 7 — backend verification (2026-08-14 18:35)
Brief demanded content-cms territory only; everything else stays rejected. Verified: 0 use server occurrences, no app/api directory, no database/auth/email/payments/storage/analytics/consent code. The content layer as built: lib/data/roster.ts (typed ROSTER transcription), lib/data/mockups.ts, lib/data/artifacts.ts (registry + fs loader), lib/markdown.tsx (dependency-free subset renderer), lib/receipts.ts — now zod-validated at the one data boundary (RECEIPTS.json shape drift fails the build loudly; also retires the unused-dep flag on zod). Build green after the change (20/20 static pages).
Phase 9 — motion pass (2026-08-14 18:44)
Intensity level 2 held; motion stays scarce and semantic. Applied: chrome-level pass completed (::selection + scrollbar-color existed; caret-color added); three Reveal placements on evidence moments only (home report-card stats, /craft banned wall, /receipts instrument stats) — the Reveal is the integration-rewritten visible-by-construction IO wrapper (rung-2-adjacent; rung-1 CSS animation-timeline: view() was considered and DECLINED because scrub timelines leave below-fold content at from-state in stitched full-page captures, and this site's captures are themselves the product; the 2s failsafe guarantees visibility everywhere). Hidden-craft: ONE gesture — console signature (ASCII monogram + two lines, colors imported from lib/tokens, no secrets, once on mount) + humans.txt (zero-cost sibling; served 200). Declined with reasons: arrow-nudge icon motion (second hover motif — bg/color step is THE motif), count-up stats (composite strings like "6/12" — ticking adds no meaning), page transitions + Lenis + parallax + sticky sequences (level-3/uncommissioned), Konami egg (one-gesture cap). Terminal caret blink remains the licensed dev-native flourish, reduce-gated. Build green (20/20).
Phase 11 — gate results (running table; 2026-08-14, evening)
| Gate | Status | Fix rounds | Receipt |
|---|---|---|---|
| anti-slop | PASS | 0 | 11 grep rows + 6 screenshot checks, zero unjustified hits; all 9 licensed quotations confined to the data-quoted-slop component; exception ledger written (agent report) |
| code | PASS | 1 | build/tsc/eslint exit 0; 17/17 routes 200; 10 client files (≤12); zero relics/boundary hits. Minors fixed: stale eslint-disable removed; tw-animate-css uninstalled; shadcn→devDependencies; popover-foreground put to use; staged twin re-synced. Accepted-with-reason: canonical semantic aliases kept (SYSTEM.md declares the set); artifacts.ts Turbopack tracing warning (build-time fs read is the design) |
| content | PASS | 1 | 24/24 routes 200; titles unique ≤60; internal 20/20 + external 7/7 links OK; measured-table honesty verified (licensed /install mention only, dated, numberless). Fixed: 11 artifact canonicals (were inheriting "/"); 3 descriptions to 140–160 (155/154/140); 404 room-count copy; contact-sheet alt text humanized. Accepted: H2 "This" deictic (works in its two-column layout — judgment logged) |
| responsive | PASS | 2 | 24 route×width combos: zero overflow, zero real console errors, mobile menu verified (Escape + focus return). Fix r1: 44px floors — footer nav, artifact rail, 404 lines (whole-line anchors), terminal input h-11, evidence + arrow-exit links. Fix r2 (re-measure residuals): /receipts ledger source links, reading-room back-link, rail min-width; re-measured 44px (back-link 149×44, rail 304×44). 26+5 captures in design/qa/ |
| accessibility | PASS | 2 | Fix r1 root cause: StrictMode-broken focus guard stole focus on load (buried skip link, hijacked palette focus-return) → previous-pathname guard; terminal Tab trap (WCAG 2.1.2) → completes only over typed input, Esc clears, documented in the caption. Re-verified by agent: skip link first stop + Enter→#main; trap gone with completion intact; palette Escape returns to trigger; landmarks deduped (mobile nav "Menu"); /install aria-current added. Contrast 5 rendered pairs 6.07–8.27:1 (alpha-composited); reduced-motion emulated: zero hidden content, caret static; 1.4.12 override: no blowout, no clipping (screenshots). Fix r2: terminal input focus ring (the one indicator-less stop). axe-core: not run standalone (no new dep mid-gate) — Lighthouse's axe-powered a11y audit covers it in the performance gate; recorded, not hidden |
| visual | PASS (round 3) | 3 | Two adversarial Opus judges across 3 rounds. R1: FIX-THEN-SHIP — 3 blockers (detached signature caret; 404 misalignment at 375; capture-integrity: dev overlay + mixed builds) + 10 items → all fixed. R2: FIX-THEN-SHIP — resting-state caret still wrong; evidence imagery never photographed loaded → fixed + full production re-shoot (a stale-listener incident en route, see above). R3: PASS — every fix confirmed in pixels, zero banned-list hits, no page under 7 on any axis; ruling praised the signature as "actually built and actually honest." 7 non-blocking defects from R3 all applied as post-pass polish (caption bars, tier-blurb wrap, secondary command stack, error-color contract, OG optical alignment, 404 dash cell) + a final evidence-integrity re-shoot so design/qa/ matches the shipped build frame-for-frame |
| performance | PASS | 0 | Lighthouse mobile on next start production, all 6 rooms: perf 96–99 · a11y 96–97 · bp 100 · seo 100 · CLS 0 everywhere · TBT ≤30ms. Bundle: largest client chunk 71.7KB gzip (framework), app chunks ≤44KB — no client creep (10 "use client" files). The a11y deduction is axe's color-contrast on two deliberately decorative, aria-hidden elements (step numerals at primary/25; the footer watermark at foreground/10) — exempt as pure decoration under WCAG 1.4.3, accepted with this citation. axe-powered audit here also closes the accessibility gate's deferred axe item |
Phase 11 — gate-visual round 3 incident (2026-08-14 ~19:5x)
The first round-3 evidence pass measured four "regressions" — all real measurements of a STALE build: the production listener survives as a process named next-server (vX), which a pgrep "next start" does not match; the kill hit the wrapper, the rebuilt server died on EADDRINUSE (prodserver.log), and :3001 kept serving pre-round-2 code. Diagnosed via served-HTML diff (source had caret-before-hint; served HTML had hint-before-caret), ss -tlnp (listener pid 159270), and the EADDRINUSE log line. Stale listener killed by pid from ss; fresh build verified live by grepping the served SSR markup for the fixed caret order. Lesson recorded: verify the SERVED build, not the restart command — and match the listener by port, not process name.