# RoofHero homeowner kernel v4 — independent QA receipt

**Verdict: PASS**  
**Audited candidate:** `RoofHero_Homeowner_App_kernel_surgical_v4.html`  
**Frozen SHA-256:** `a63dc5ef991750b34e46d0627b69c6bf493609cfd84b01a497c56eb63e2d6a04`  
**QA date:** 2026-08-18 (Pacific)  
**Deployment:** not performed

The frozen candidate passes the locked homeowner-kernel acceptance gate. All 24 states were inspected at the iPhone 16 Pro Max viewport, and the full critical journey passed 41 independent behavior assertions.

## Integrity

| Artifact | SHA-256 | Result |
|---|---|---|
| Frozen v4 candidate | `a63dc5ef991750b34e46d0627b69c6bf493609cfd84b01a497c56eb63e2d6a04` | exact frozen SHA before and after QA |
| Preserved v3 baseline | `1876e001a7f706fb5f57b40157173c32eb56919f560b00c6cbb3d515fa1639dd` | unchanged |
| Original backup | `b23ed16ce9f1e0e965db644d793d64934994b298cebdccc6ea57737e94d728df` | unchanged |
| Supplied behavior evidence | `e1d6cae1aa6a5dc79cbe267f07182d08385234600507ff1317bf16321d03b108` | 33/33 supplied checks, independently challenged |
| Screen-state manifest | `36a7f3ea76b627db3be3d6e6dd5e6e2f686c4769d86038ad2f34ad4c2c91f614` | read |
| Sorted PNG evidence manifest | `9900517f2d5d5caa0571152b7603c5de959a02afade8f1453462a89917b1f40a` | 24 beats plus 3 transition captures |

The v3 and original files have different hashes because v3 was already a separate preserved artifact; neither changed during this audit. The v3-to-v4 delta remains a bounded surgical update in the standalone HTML.

## Authority and method

Reviewed against:

- `outputs/RoofHero_kernel_walkthrough_locks_v3.md`
- `work/roover-start-kernel-review-notes.md`
- `outputs/Roover_Start_Kernel_v1_0.docx`
- `outputs/kernel_independent_qa_v1/acceptance-register.md`
- the latest walkthrough rulings: explicit **Build my Job Brief** after the scoped attribute reveal, and identity reveal after formal-pricing acceptance

Execution:

- inspected all 24 homeowner states and the three Job Brief transition captures at **440 × 956**
- exercised the end-to-end homeowner path in isolated headless Chrome 151 at **440 × 956**
- checked wide review notes at 1200 × 956
- ran 41 independent assertions; **41 passed, 0 failed**
- independently checked browser errors, critical actions, phase-aware navigation, alternate booking slots, material truth, and horizontal overflow
- treated the supplied `33/33` behavior file as evidence only, not as the verdict

## Material lock register

| Lock | Independent result | Evidence |
|---|---|---|
| Start and correction path | PASS | Address action advances; “Not my place” returns to Start |
| Property scan and scope | PASS | All structures remain visible; alternate-area and help actions work |
| Scoped attribute reveal | PASS | Eight attributes precede explicit **Build my Job Brief** CTA |
| Job Brief construction | PASS | Complete 10-field template starts empty, fills 7 known facts, leaves 3 open |
| Logical homeowner questions | PASS | Job → Reason → Truck access; exact answers persist |
| Edit and confirmation | PASS | Edit resets to Job, all three answers can be revised, Confirm enters Project Room |
| Project Room live preparation | PASS | Permanent source-of-truth framing; no premature Prices tab |
| Measuring truth | PASS | Preparation stays blueprint/mapping; no premature “measured” state or fake timer |
| Measurement update | PASS | Genuine ready event unlocks material choice |
| 3D and explicit material | PASS | No silent selection; confirm captures True Oak Corrugate — Ironsand |
| Job Pack complete | PASS | Distinct complete state exists; Home says nothing sent; optional request boundary preserved |
| Visualiser edit continuity | PASS | Editing after completion returns to completed Job Pack, not matching |
| Anonymous matching | PASS | Seven anonymous candidates; no interest or band implied |
| Interest and bands | PASS | Five real interest states reveal five bands; one-to-five selection works |
| Formal-pricing request progress | PASS | Delivered/open/review/accepted states; only accepted roofers are named |
| Formal prices | PASS | Four named returned prices, one unresolved anonymous request, details expandable |
| Compare and site visit | PASS | Compare remains inside Prices; no dead Ask action; one site visit only |
| Booking choices | PASS | Monday and Wednesday both update CTA and persist into booked Home |
| Phase-aware navigation | PASS | Home/My roof/Prices return to the current meaningful state rather than rewinding |
| Activity chronology and truth | PASS | Future events are filtered; the actual confirmed material is recorded via `lookLabel()` |
| Mobile layout | PASS | No horizontal overflow; all critical controls fit within 440 × 956 |
| Review annotations | PASS | Hidden on homeowner mobile; visible on wide review surface |
| City aerial | PASS WITH DECLARED LIMIT | Remains explicitly pending Mike's supplied asset; no substitute introduced |
| Timing and guarantee claims | PASS | No unsupported active timer, turnaround, or price-hold promise in the v4 journey |
| Runtime stability | PASS | No material page or console errors; only a non-material missing favicon request |

## Explicit regression proof

- Confirming **True Oak Corrugate — Ironsand** in the visualiser lands directly on **Job Pack complete**.
- Reopening and reconfirming the material stays in the completed-project phase and never silently enters matching.
- Home at that point states that nothing has been sent and keeps the price request optional.
- Activity records **True Oak Corrugate — Ironsand**, not the old Basalt fixture value.
- Edit my details reopens Job and permits Job, Reason and Truck access to be revised in order.
- Monday and Wednesday appointment choices update the booking action and persist into booked Home.
- At the booked phase, Home/My roof/Prices/Activity retain the current project era rather than rewinding.

## QA receipt

- Candidate is **ready for Mike's kernel review** at this exact SHA.
- PASS means the fixture kernel matches the locked journey; it is not evidence of live integrations, real marketplace events, production data, or deployment readiness.
- No HTML, baseline, backup, or hosted surface was edited by independent QA.
- No deployment was performed.
