packages/cua-driver/docs/e2e-results-summary-design.md
Historical design record. The implemented reporting contract is documented
in e2e-ci-reporting.md.
This document specifies the GitHub Actions presentation built from the Rust v2
case and result contract. Field semantics live in e2e-ci-reporting.md; the
convergence sequence lives in test-harness-convergence-plan.md.
The typed artifacts and run summary together must answer:
Cargo test names and lane exit codes do not answer these questions and are not behavioral rows.
The generated Markdown starts with aggregate behavioral totals, followed by a declared-coverage grid and the detailed rows:
# CUA Driver E2E
**Result:** 42 delivered, 3 refused, 2 failed, 0 skipped
**Source SHA:** `0123456789abcdef0123456789abcdef01234567`
## Declared Coverage
## Detailed Results
Environment readiness and source identity live in environment.jsonl, the
generated summary, and the workflow metadata. An environment failure prevents
behavioral cells and makes the reporter fail; it is not converted into a
partial green summary.
One row represents one declared cell_id:
| Cell | Harness | Action | Targeting | Delivery | Route | Expected | Observed | Oracles | Status | Time | Evidence |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---: | --- |
| linux-electron-left-click-ax-background | Electron | Left click | AX | Background | AT-SPI action | Refuse | Refused | Focus, z-order, no leak | PASS | 1.5s | [recordings/.../recording.mp4] |
| linux-electron-left-click-ax-foreground | Electron | Left click | AX | Foreground | AT-SPI action | Deliver | Delivered | Fixture | PASS | 2.1s | [recordings/.../recording.mp4] |
The row does not label a refusal as pass unless the case declaration expects refusal and every required no-side-effect oracle passed.
The reporter also renders declared coverage. A dash means that the Rust catalog does not declare that combination; it is not a pass or an inferred result:
| Harness | Action | AX/BG | AX/FG | PX/BG | PX/FG | Page | NotApplicable |
| --- | --- | --- | --- | --- | --- | --- | --- |
| electron | left_click | REFUSED | PASS | REFUSED | PASS | - | - |
| electron | drag | - | - | REFUSED | PASS | - | - |
The detailed table remains the authority for route, contract, oracle, and failure information for every declared cell.
The reporter fails before publishing a green summary when it finds:
finalized after setup/posture;The reporter validates the exact video it renders. It records the trajectory path but does not currently validate that file independently. Workflow summary jobs may concatenate validated platform summaries, but they do not recalculate results.
Each internal workflow lane uploads one archive. Every cell owns a stable
subdirectory derived from cell_id inside that archive:
recordings/<cell-label>-pid<pid>-<sequence>/
|-- recording.mp4
|-- trajectory.json
|-- session.json
|-- cursor.jsonl
`-- turn-*/
|-- action.json
`-- screenshot.png
GitHub artifact archives do not provide stable URLs to individual files. The row therefore links its exact MP4 path text to the owning lane archive; the trajectory rollup links the same archive and reports its video count. A future static report may provide inline playback; it is not required for the GitHub summary. Cargo target logs sit at the lane root and diagnose runner or test failures; they are not invented as per-cell evidence.
Unit, schema, transport, and CLI tests remain separate workflow output. They do not share the behavioral case schema, appear as invented behavioral rows, or require desktop video.