# FreeCut v1 PR #30 evaluation result

## Status

**FAIL**

Exact evaluated head: `925ebf37b01692c4b066407a9ee6a8563fd8028f` in clean worktree `/Users/lightninglu10/Q5/.worktrees/freecut/pr30-frontend-qa-head`.

The minimum behavioral contract cannot pass because B4 contiguous trim, B9 keyboard/accessibility, B11 390px responsive usability, and B12 zero-error observability fail. No unevaluated row was converted to advisory evidence or PASS.

## Evaluation steps, commands, expected, and actual

| Step | Command / action | Expected | Actual | Result |
| --- | --- | --- | --- | --- |
| 1. Read governing inputs | Completely read `plan.md`, `implement-result.md`, `behavioral-contract.md`, repo instructions, frontend-QA skill, and existing Playwright/browser fixtures | Exact acceptance scope understood before action | Completed; contract was not weakened | PASS |
| 2. Exact-head preflight | `git rev-parse HEAD`; `git status --short` | SHA `925ebf37...`, clean tree | Exact SHA; empty status | PASS |
| 3. Runtime bootstrap | Node 22 `npm ci`; `npx playwright install chromium`; start real app in owned helper tab | Reproducible dependencies and real Chromium/app | Node 22.20.0, npm 11.8.0, Playwright 1.60.0 Chromium r1223; app on port 5199 | PASS |
| 4. LOAD | Real OPFS project import/load with generated distinct A/V; inspect pixels/store/logs | Deterministic 30fps frame-aligned load; no invalid source/stale overlay/errors | Correct active picture and aligned timeline data; invalid source 0, stale skim 0, page errors 0, bad HTTP 0 | PASS |
| 5. SEEK | Real pointer clicks on ruler, empty lane, and clip; timed transition trace around queued hover | Exactly one seek to expected frame; stale hover cannot roll back; fresh hover previews then clears | One frame transition to expected frame; settled unchanged at 250ms; fresh preview and clear observed | PASS |
| 6. PLAYBACK | Real playback across contiguous red/440Hz → blue/880Hz media | Monotonic frames, matching visual/source/audio identity, no early wrap | Boundary at frame 61; sampled `57,60,62,65,67`; red then blue pixels and matching A/V IDs; EOF clamps at 120 | PASS |
| 7. CUT/RIPPLE/TRIM | Real pointer Razor/trim, shortcut, history buttons, ripple operation on contiguous fixture | Discoverable split, undo/redo, one-command gap close, adjacency-preserving contiguous trim | Razor/hotkey/undo/redo and ripple delete passed; isolated trim passed; no trim handle appeared at contiguous cut for either selected neighbor | **FAIL** |
| 8. LOCK49 | Run existing exact-head 49-row live/store lock matrix | 49/49 including required ancestry, caption, linked, async, transition/keyframe, selection/history/dirty rows | 49/49 passed with exact snapshots and valid nested undo. Legacy optional UI add-on fixture was stale and separately failed; matrix result remains complete | PASS |
| 9. DRAG45 | Run existing exact-head 45-row real-pointer/store linked-cohort matrix | 45/45 plus exact rollback, click release, one-command undo | 45/45 passed; ordinary post-reject click proof recorded; check/build passed | PASS |
| 10. SHORTCUTS | Real settings/runtime interaction plus focused integrated ownership/alias tests | Defaults/remaps/conflicts/labels/aliases/J-K-L/native ownership/source labels | Current UI 7/7; integrated relevant tests pass within 233/233 suite | PASS |
| 11. HOST SHORTCUTS | Controlled deferred mounted runtime tests | Resolve/reject/retry/replacement/external update/epoch/persistence/cleanup | 20/20 host shortcut tests passed | PASS |
| 12. KEYBOARD/A11Y | Real DOM focus traversal; Enter/Space; locked item; section scrollbars | Unique focusable clip roots, local activation, locked no-op, keyboard-scrollable sections | 23 clip roots lacked role/name/tab stop; Tab reached 0/23; locked clip unfocusable; section scrollbars `tabIndex=-1`; local activation impossible | **FAIL** |
| 13. EXPORT | Real export through EOF; save MP4; ffprobe/frame/audio analysis; inspect integrated cleanup tests | Continuous moving video and active audio through exclusive end; no frozen tail; robust cleanup | MP4 valid: 121 video frames/4.033333s; audio 4.117333s; monotonic timestamps; final-second 27/27 unique frame hashes; final active audio -21.1dB; cleanup tests pass | PASS |
| 14. RESPONSIVE | Interact/capture desktop and 390px editor/settings/source monitor | Core controls visible and usable without clipping | Desktop passed. At 390px timeline x≈652 width 0, core controls offscreen, source monitor hidden; programmatically opened settings dialog fit | **FAIL** |
| 15. PACKAGE | Verify committed tarball hash; fresh consumer install/render | Version 0.3.9, reproducible identity, consumer renders | SHA matched `59012ac...b6f1`; installed `@quantfive/freecut-editor-surface@0.3.9`; 2/2 passed | PASS |
| 16. OBSERVABILITY | Aggregate complete console/page/request/HTTP and named-signal JSONL logs | Zero unexpected warnings/errors, failed product requests, bad HTTP, invalid source, stale skim | 3 errors, 628 warnings, 5 request failures (2 product-origin lifecycle aborts), 0 HTTP >=400, 0 page errors, 0 invalid source, 0 stale skim; product worker fallback signals present | **FAIL** |
| 17. Artifact review/publication | Review every visual and upload visuals, traces, reports/manifests | No secrets/personal data; durable public URLs | 83 visual/video/MP4 assets and 8 traces reviewed and uploaded; supporting bundle uploaded; public mappings retained | PASS |
| 18. Cleanup/final identity | Delete owned helper; stop owned server/browser; `lsof`/`ps`; final `git` checks | No owned runtime remains; exact clean source | Helper deleted; no port 5199 listener/owned browser-server process; exact SHA and empty status | PASS |

## Acceptance criteria disposition

1. **PASS:** deterministic multi-clip 30fps load; no off-grid rejection, invalid source, stale overlay, or masked active picture.
2. **PASS:** ruler/empty/clip real-pointer seek occurs once; stale deferred hover cannot roll back; fresh hover clears.
3. **PASS:** distinct visual/audio boundary playback is monotonic and source-correct without early wrap.
4. **FAIL:** Razor, undo/redo, and one-history-command ripple delete pass, but contiguous adjacency-preserving trim cannot be initiated because no handle is exposed.
5. **PASS:** full 49-row lock invariant matrix passes.
6. **PASS:** full 45-row linked-cohort drag matrix passes with cancellation/click-ownership proof.
7. **PASS:** defaults/remaps/conflicts/labels/platform aliases and native ownership are covered by real UI and focused integrated tests.
8. **PASS:** host settings deferred/retry/remount/external-update/cleanup contract passes 20/20.
9. **FAIL:** clip roots and independent section scrollbars are not keyboard accessible; local Enter/Space behavior cannot be reached.
10. **PASS:** real MP4 has moving final-segment video, active final audio, continuous timestamps, and integrated abort/error cleanup coverage.
11. **FAIL:** core timeline/source/export controls are inaccessible at 390px.
12. **FAIL:** product runtime warnings/errors and request aborts are nonzero, despite zero page errors, HTTP >=400, invalid source, and stale skim.
13. **PASS:** 0.3.9 tarball identity and fresh consumer render reproduced.

## Errors and blockers

### Keyboard/accessibility

- `qa-item-01 is missing role=button`.
- Tab traversal reached `0/23` clip roots.
- Locked clip had no accessible role/name/disabled state and was not focusable.
- Video/audio section scrollbars were not Tab reachable (`tabIndex=-1`).

### Contiguous trim

- Selecting either neighbor at the exact red→blue boundary did not expose a left/right rolling-trim handle. The fixture remained contiguous and ripple editing was independently proven, so this is not explained by an initial gap.

### Responsive

- At a 390px viewport, the timeline geometry started around x=652 with width 0; export/keyboard controls were offscreen and source-monitor controls were hidden.

### Observability

- 11 WaveformCache warnings: blob URL source not registered in worker.
- 1 VideoFrameExtractor fallback warning.
- 1 export worker `WORKER_REQUIRES_MAIN_THREAD:audio-context` error before successful main-thread fallback.
- Aggregate errors also include two known fake-font harness errors in DRAG evidence; they are retained in the complete log.
- Two product-origin module requests were aborted during direct harness navigation; there were no HTTP >=400 responses.

## Evidence

- Main report: `/tmp/frontend-qa/frontend-qa-report.md`
- Local manifest: `/tmp/frontend-qa/artifact-manifest.json`
- Published URL manifest: `/tmp/frontend-qa/published-artifact-manifest.json`
- Supporting bundle: [public tarball](https://codepress-pr-assets-production.s3.us-west-2.amazonaws.com/codepress/quantfive__codepress/86e591f0-599f-44a0-8c39-5fe43fab17af-pr30-supporting-artifacts.tar.gz), SHA-256 `df3fd63eb5b6e81297224dc0cc919bd25bdd27ee37cc9c0797cc47fbbe7b53e9`
- Exported MP4: [public MP4](https://codepress-pr-assets-production.s3.us-west-2.amazonaws.com/codepress/quantfive__codepress/e854b36b-0ac3-4393-bf34-7a24453f0623-moving-audio-export.mp4), SHA-256 `e2ad2ca9dc79d4bbebeacda3c446989ea260c5a89cd349058ffa93aeb90179ff`

All screenshot/video/trace URLs and SHA-256 values are recorded in the published/local manifests. Raw evidence remains under `/tmp/frontend-qa`.
