左=验证器(读草图出卷 30 题,双通道体检,失败项组装成 QA 报告)· 右=修复模型在原对话续写修订版。全程无人工介入。


| sketchcomponent | Discover header The visible title is ` Discover `, not the required visible `Discover Templates` title, although `btnMenu` and `btnBell` do hav |
| sketchcomponent | Category selector tiles The `More` tile is ` |
| sketchinteraction | Featured template card opens Template Details Featured-card clicks call `openResults(t.cat)`, not `openDetails(t.id)`: `const t = byId(el.dataset.id); openResults(t.cat);`. |
| sketchinteraction | Back to Results or Discover `openDetails(id)` unconditionally executes `push('results')`; it does not record whether entry was from Discover versus Results. |
| contractcontract | Data-driven lists Although featured cards are rendered from `FEATURED`/`TEMPLATES`, their handlers call `openResults(t.cat)` rather than the id-accepting `openDetails` |
| contractcontract | Honest handling of out-of-scope controls Several drawn controls are inert, including preview header Menu (` |
Automated verification found the following failures. Each is labeled [sketch] (drawn in the sketch but not implemented/wired) or [contract] (an explicit build-quality requirement). Fix each so the prototype fully matches the sketch and the contract; keep everything that already works. Do NOT add screens, features, or flows the sketch does not draw — a drawn control with no drawn target should answer with an honest toast, nothing more. - [sketch/component] Discover header: code check failed (The visible title is `Discover`, not the required visible `Discover Templates` title, although `btnMenu` and `btnBell` do have handlers.) — expected: The Discover view contains a header with a menu button, visible Discover Templates title, and notification button; both buttons have click handlers rather than being inert. - [sketch/component] Category selector tiles: code check failed (The `More` tile is `

| sketchcomponent | Curated Collections section Collection cards have no specified drawn collection destination but are routed to Results rather than an honest acknowledgment: el.addEventListener('c |
| contractcontract | Honest handling of out-of-scope controls Not every undrawn control uses acknowledgment/local state: collection cards call openResults(...), and drawer Wishlist invokes openResults('', { wishO |
| contractcontract | No invented features The source adds undrawn feature transitions such as drawer Wishlist/All Templates and collection-to-results: if (act === 'wishlist') openResults('', { |
Automated verification found the following failures. Each is labeled [sketch] (drawn in the sketch but not implemented/wired) or [contract] (an explicit build-quality requirement). Fix each so the prototype fully matches the sketch and the contract; keep everything that already works. Do NOT add screens, features, or flows the sketch does not draw — a drawn control with no drawn target should answer with an honest toast, nothing more.
- [sketch/component] Curated Collections section: code check failed (Collection cards have no specified drawn collection destination but are routed to Results rather than an honest acknowledgment: el.addEventListener('click', () => openResults(COLLECTIONS[+el.dataset.i].q)).) — expected: The Discover view contains a Curated Collections section with a wired See All control and rendered collection cards; any card lacking a drawn destination is bound to an honest acknowledgment.
- [contract/contract] Honest handling of out-of-scope controls: code check failed (Not every undrawn control uses acknowledgment/local state: collection cards call openResults(...), and drawer Wishlist invokes openResults('', { wishOnly:true }) rather than nope()/toast.) — expected: Every drawn control without a drawn target, including applicable menu, notification, collection, storefront-header, or preview-tab controls, is bound to a lightweight honest acknowledgment such as a shared toast; controls with implied local state instead perform only that local state change.
- [contract/contract] No invented features: code check failed (The source adds undrawn feature transitions such as drawer Wishlist/All Templates and collection-to-results: if (act === 'wishlist') openResults('', { wishOnly:true }); collection cards also call openResults(...).) — expected: The source defines only the four specified primary views and their specified transitions; handlers do not create or navigate to additional screens, checkout flows, account flows, collection-detail flows, or other undrawn destinations.