Skip to content

fix(ci): retain fixture screenshots and document local captures - #2626

Merged
schlessera merged 3 commits into
mainfrom
fix/1903-screenshot-boundaries-044
Oct 22, 2026
Merged

schlessera merged 3 commits into
mainfrom
fix/1903-screenshot-boundaries-044

Conversation

@schlessera

Copy link
Copy Markdown
Owner

Refs #1903

What changed

Artifact-recovery layout cases keep their existing fixture-owned artifact-*.png captures and retain the exact returned bytes in unique packages/ui-react/.vitest-attachments/artifact-recovery/capture-* directories. The existing unit-worker handoff and unit artifact upload already collect that directory. The testing policy now explicitly accounts for all three remaining destination classes: retain those fixture captures, keep caller-directed opt-in exports local, and keep standalone navigation/software diagnostics local with source-based reasons.

Why this shape

The fixture screenshots precede later zoom and keyboard assertions, so losing them during fixture teardown also loses useful hosted failure evidence. Unique directories preserve repeated filenames without moving existing review captures. Opt-in exports are manual destinations outside the collector's ownership. The navigation probe is not invoked by hosted proof; software screenshots follow every assertion and provide successful-state review convenience.

No workflow paths, gates, pins, hidden-file settings, failure collection, seven-day retention, assertions, deadlines or test populations change. No changeset: only unshipped test fixtures, regression proof and contributor documentation change. No contract or provider-history impact.

Proof

Final head 22e739970ae924a3687e402e6ce4e2d8206a3ccc; branch started at 19ecff0808de356584049ff91bd331921ab7d5a9, then merged main 3125574b81b6c1b62f490ac88b946fa0e2f05576 to include the new runtime invocation wrapper.

  • bun run check:pr --base origin/main: PASS on the final committed head against base 3125574b81b6c1b62f490ac88b946fa0e2f05576: 522 fast tests and 43 import-graph affected tests (including all 32 artifact runtime cases), with lint, environment and changeset gates passing.
  • bunx tsc --noEmit: PASS on the final head. Lint passes; final preflight repeats it.
  • Offline focused regression, unchanged hygiene retention, citation and real worker handoff suites: 56 pass, 0 fail, 762 assertions. The worker fixture now includes the exact new nested attachment class; success, failure and cleanup controls preserve its producer bytes.
  • Failing first: with a helper stub preserving the original scratch-only behavior, artifact recovery retains exact captures after later failure and fixture teardown fails at ARTIFACT_CAPTURES_SURVIVE_FIXTURE_TEARDOWN: expected two files, received zero. Implemented retention passes, including exact bytes, unchanged scratch path and independent repeated filenames after a deliberate later child failure and teardown.
  • Mutation: remove the retained-byte write; the same named assertion fails with expected two / received zero. Repeated on the final head after the main merge. Restore the write: pass, with a clean tracked diff. This controlled child failure is a handoff test, not a generated automatic browser-failure screenshot.
  • Real offline Chrome: both existing dark-320 and light-1280 artifact-layout cases pass, with the original downstream assertions intact. Repeated after the main merge using the new attested runtime wrapper. That invocation started at cfef279fb6f1e8d7816111930f9fd89f28a159c9 plus the citation-only working change committed as the final head; browser/test sources are identical. Both runs retain their files after fixture teardown: four valid PNGs, two per variant, with PNG chunk CRCs, decompressed raster payloads, dimensions and SHA-256 checked. Dark: 320×800, 20,557 bytes; light: 1280×800, 56,766 bytes. The repeat has identical hashes and preserves the earlier files.
  • .github/workflows/ci.yml and scripts/unit-workers.ts are unchanged from the merged base. The existing hidden attachment collection/handoff carries the new files.

The accepted dated issue audit records downloaded ZIP/digest/CRC/PNG verification of the earlier deliveries, including main run 39757864766 containing #2545. That evidence covers criteria 2, 3, 5 and module-settings retention in criterion 4; it is not relabeled as execution of this PR.

Checklist

  • Focused local preflight/behavioral receipts and complete selected hosted proof passed; actual head/base/job checkout evidence is in Proof.
  • Acceptance criteria from the issue are all met, or the gap is named below.
  • The PR and completed/advanced issues have verified release milestones under docs/process/github.md.
  • A changeset is included, or this changes nothing a consumer can see.
  • No personal data anywhere in the diff — the leakage gate covers the whole tree.
  • The integration contract index or relevant component is updated in this same commit, or nothing in the machine surface moved.
  • Docs under docs/ reflect the change, or nothing documented moved.
  • Provider history stays append-only (docs/decisions/provider-history.md): the provider-history guard passes, or nothing on a turn's path changed.

Anything left open

Keep this PR draft. Coordinator-owned hosted proof/download verification must confirm the new fixture artifact-*.png copies in the selected unit artifact, with the actual job/worker checkout and nonempty PNG dimensions/bytes. This PR uses Refs until that evidence is available; all three remaining destination classes are implemented or explicitly justified.

Generated automatic Vitest failure screenshots remain absent, as explicitly reported in the accepted issue audit. Criterion 4 allows that report; no deliberately failing browser run or new screenshot behavior is introduced. The separate hygiene retry investigation remains #2544.

No ready transition, integration confirmation/reservation or merge is requested by this worker.

@schlessera schlessera added this to the 0.44.0 milestone Oct 22, 2026
@schlessera schlessera added type: fix Something is broken and must behave the way it is documented. area: ui-react React chat/files/voice components, stores, WebSocket transport. area: ci CI workflows, the gates they run, release scripts, packaging. labels Oct 22, 2026
@schlessera
schlessera marked this pull request as ready for review October 22, 2026 11:15
@schlessera
schlessera merged commit 444174d into main Oct 22, 2026
12 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, the gates they run, release scripts, packaging. area: ui-react React chat/files/voice components, stores, WebSocket transport. type: fix Something is broken and must behave the way it is documented.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant