What it does
CurtainCheck helps developers inspect browser behavior before approving a code-change rehearsal. GitLab Duo reads a merge request and an approved journey catalogue, then recommends which user journey deserves attention. A trusted Playwright runner compares the pinned baseline and candidate, captures screenshots, traces and videos, and checks the evidence before a human-authorized approval job records the result.
Why this project
AI can help developers move faster, but reviewers still need concrete evidence of what changed. CurtainCheck makes that evidence part of the merge-request workflow while keeping the final decision with a person.
How it was built
This fresh project uses JavaScript, Node.js, Playwright, GitLab CI/CD and a custom GitLab Duo Agent Platform flow. The bounded flow reads fixed inputs and produces a structured selection. In this Assisted prototype, the authentic selection is manually copied into the merge request and the comparison job is started manually. The runner executes all three mandatory persistence journeys regardless of the AI focus selection.
The evidence gate checks commit identity, suite identity, required artifacts and test results. The approval receipt records approval for the tested comparison only. It does not deploy the application or certify production safety.
Working results
A real Duo session selected the create-and-persist journey for a controlled task-board change. The GitLab comparison pipeline passed 168 tests, browser comparisons and the evidence gate. A separate human-authorized job recorded the rehearsal approval. The under-three-minute demo shows genuine recorded baseline/candidate browser runs and GitLab results on labeled synthetic task-board data.
Challenges and lessons
The flow had to fit the schema actually accepted by GitLab. A bounded selection-only design kept its responsibilities clear. Evidence checks were strengthened to require screenshots, traces and videos for every expected browser context. AI-selected focus changes execution order without skipping mandatory coverage. Historical session exports were partially truncated, so those limitations are documented rather than presented as complete provenance.
Current scope and next steps
This entry is Fresh / Assisted. The manual handoff is explicit, and manual provenance is not machine-authenticated. Existing test receipts apply to the frozen tested candidate, not automatically to later documentation or merge commits. Future work would automate the validated handoff and broaden the journey catalogue while preserving reviewable evidence and human approval.
Source code and reproducible instructions are provided under the MIT license.
Built With
- gitlab
- javascript
- playwright

Log in or sign up for Devpost to join the conversation.