# FN-411 — Recon-to-Implementation Scoping Output **Date:** 2026-05-16 **Inputs:** - `MANIFEST.md` (FN-400 recon over FN-367 / VIN decoder) - `MANIFEST-FN-403.md` (FN-403 recon over FN-368 / parts panel) **Output:** Two new triage tasks created. Both classified **mechanical** per memory `recon-to-implementation-scoping-pattern` — no FN-406-style UX-spec precursor required. --- ## Spawned tasks ### FN-415 — FN-367 VIN-decode retry verification + hit-target audit - **Parent:** FN-367 (shipped `e274e02`). - **Route:** `/dashboard/search` (`apps/web/src/routes/dashboard/search.tsx`). - **New spec file:** `apps/web/e2e/vin-decode-retry.spec.ts` (location subject to repo Playwright dir convention; selectors are canonical). - **Production edit (conditional):** Retry button hit-target widen to ≥44 px if measurement on `375 × 667` viewport fails the Apple HIG / Material baseline. - **AC anchors:** locator stability (data-faro + role/name), retry-render guard (NOT rendered on `"abone olun"` / `"tanınamadı"` branches), PostHog `vin_decode_retry_clicked`, hit-target ≥44 px, no line-number assertions. - **UX-spec precursor:** Not required. ### FN-416 — FN-368 parts-panel verification + hit-target audit - **Parent:** FN-368 (shipped `0ce68a7`). - **Component:** `apps/web/src/components/schema/parts-panel.tsx`. - **Mount routes (4):** `vehicles_/$id/categories_/$categoryId`, `catalog_/$brandName_/$modelId/categories_/$categoryId`, `catalog_/emex/$catalogCode_/$vehicleId_/groups/$groupId`, `catalog_/pcat/$catalogId_/$modelId_/$carId_/groups/$groupId`. - **New spec file:** `apps/web/e2e/parts-panel.spec.ts`. - **Production edits (conditional):** OEM copy button (≈18 px today), parts row vertical (≈36 px today), "Geri don" empty-state escape (≈40 px today) — widen to ≥44 px via minimal Tailwind token swap. Escalate to UX-spec precursor if any widen forces layout reflow. - **AC anchors:** inert-row no-op (FN-368 core fix), available-row toggle + scrollIntoView, OEM copy `stopPropagation` + clipboard + PostHog + `/analytics/oem-copy`, loading skeleton count = `SKELETON_ROW_KEYS.length`, empty-state `Geri don` → `history.back()`, no line-number assertions. - **UX-spec precursor:** Not required for verification + hit-target widen. Required IF scope drifts into inline error UI on `` (currently bubbles `use-parts` failures to `` skeleton — design-novel). --- ## Classification rationale Both follow-ups satisfy the **Mechanical** criteria from memory `recon-to-implementation-scoping-pattern`: 1. Playwright/E2E verification of an already-shipped, UX-reviewed fix. 2. Hit-target widening to a published platform baseline (44 px). 3. Locator-stability assertions that consume existing `data-faro-user-action-name` + ARIA hooks — no new hook attributes requested. Neither task introduces new copy, color, layout primitives, or skeleton dimensions. Anything that would (e.g. an inline error UI on PartsPanel for `use-parts` failures) is explicitly carved out as out-of-scope and gated on a separate FN-406-style UX-spec precursor. ## Rubric scoring (FN-395 P1) Per memory `rubric-scoring-for-verification-follow-ups`: both tasks inherit their parent's P1 gate rather than competing on the FN-395 shortlist. Scored for visibility, not gated on the 6-point floor. ## Drift hardening Acceptance criteria in both child tasks refer to selectors by `data-faro-user-action-name`, ARIA role/name, or visible text — never by line number. FN-400 → FN-403 already demonstrated the cost of line-number coupling (`schema-viewer.tsx:69-83` → `:72-86` shift in 2 days). See memory `manifest-drift-convention`. --- ## Non-goals (for this scoping task — FN-411) - No implementation. FN-411 is scoping only. - No baseline/PostHog work (that's FN-396's surface). - No EMEX/PL24/PartsCatalogs fetch-layer work.