Skip to content

Publish acceptance-tested screenshots for the website - #1924

Merged
stefan-burke merged 12 commits into
mainfrom
feature/cucumber-screenshot-evidence
Jul 26, 2026
Merged

stefan-burke merged 12 commits into
mainfrom
feature/cucumber-screenshot-evidence

Conversation

@stefan-burke

@stefan-burke stefan-burke commented Jul 25, 2026

Copy link
Copy Markdown
Member

What changed

  • Added deno task specs:evidence to run declared Cucumber stories one at a time and capture the real rendered page before its test data is removed.
  • Added a small versioned manifest with stable story, rule, case, and capture IDs, the exact app commit, image hashes, and browser details.
  • Reused one screenshot system for browser launch, page readiness, device profiles, full-page capture, and image trimming.
  • Kept captures local and repeatable by allowing only the loopback app server and inline data. External requests fail the capture.
  • Added direct tests for evidence selection, capture, authentication, request blocking, cleanup, manifest generation, and task orchestration.
  • Added real-browser contracts that hold an external SVG pending until page readiness waits for it and prove tall captures do not change responsive styles.
  • Added a workflow that validates evidence on pull requests, publishes it from main, refreshes it monthly, and keeps each artifact for 90 days.

The website consumer and first imported servicing screenshot are live in chobbledotcom/tickets-site commits df6af7b and 1cf1f77.

Why

Website screenshots can now be tied to successful acceptance stories instead of separate setup scripts that can drift from tested behaviour. The website still controls captions, placement, and social images, and its normal build stays offline.

Verification

  • Merged the latest main commit 865202fe and resolved the combined type-check task without dropping either command.
  • deno task precommit passed after the merge, including type checks, duplication checks, builds, all tests, and 100% coverage.
  • deno task test:screenshot-contract passed both real-browser contracts.
  • deno task specs:evidence passed: 1 scenario and 6 steps.
  • deno task precommit:mutation found no changed src files.
  • Every PR review thread has a direct reply and is resolved.

Setup after merge

Add a fine-grained TICKETS_EVIDENCE_TOKEN secret to the website repository with Actions read access to chobbledotcom/tickets. GitHub limits its built-in workflow token to the website repository, so it cannot download the app artifact.

Summary by CodeRabbit

  • New Features
    • Added a “Specification evidence” CI workflow and a deno task specs:evidence task to run evidence-declared specs and generate versioned evidence outputs.
    • Implemented the evidence capture pipeline for mobile screenshots, including deterministic styling and per-case evidence manifests + PNG assets.
  • Documentation
    • Updated README and AGENTS to describe evidence-only execution and the reports/evidence/manifest.json + assets contract.
  • Bug Fixes
    • Improved screenshot readiness timing and element screenshot trimming for more consistent output.
  • Tests
    • Added extensive coverage for evidence capture/run, manifest generation, hook behavior, and screenshot utilities.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 45 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cd6df867-a7ab-4c81-baae-d52507a866fe

📥 Commits

Reviewing files that changed from the base of the PR and between 1bbfe98 and 622fa4a.

📒 Files selected for processing (9)
  • scripts/specs/evidence/capture.ts
  • scripts/specs/evidence/hook.ts
  • scripts/specs/evidence/manifest.ts
  • scripts/specs/evidence/run.ts
  • scripts/specs/evidence/schema.ts
  • test/scripts/specs/evidence-hook.test.ts
  • test/scripts/specs/evidence-manifest.test.ts
  • test/scripts/specs/evidence-schema.test.ts
  • test/scripts/specs/evidence-server.test.ts
📝 Walkthrough

Walkthrough

Adds a specification-evidence pipeline that selects tagged Cucumber cases, captures deterministic screenshots, builds validated manifests, uploads evidence artifacts in CI, and refactors shared screenshot and checksum utilities.

Changes

Specification evidence pipeline

Layer / File(s) Summary
Reusable screenshot infrastructure
scripts/screenshots.ts, scripts/screenshots/*, scripts/browser-options.ts, test/scripts/screenshots-*
Screenshot server startup, browser profiles, readiness checks, element trimming, Chromium launch behavior, and PNG capture are split into reusable modules and tested.
Evidence contracts and scenario resolution
scripts/specs/evidence/schema.ts, scripts/specs/evidence/resolve.ts, scripts/specs/evidence/declarations.ts, scripts/specs/evidence/style.ts, test/scripts/specs/evidence-resolve.test.ts, test/scripts/specs/evidence-schema.test.ts
Evidence declarations and manifests receive strict schemas; Cucumber pickles resolve to stable catalog cases; evidence paths, CSS, and scenario fixtures are defined and tested.
Scenario evidence capture lifecycle
scripts/specs/evidence/capture*.ts, scripts/specs/evidence/hook.ts, test/specs/support/*, test/specs/steps/servicing-hold.ts
Evidence-mode hooks capture selected scenario pages in isolated Chromium contexts, attach PNGs, preserve cleanup, and populate servicing-event values for the evidence route.
Manifest bundling and CI runner
scripts/specs/evidence/manifest.ts, scripts/specs/evidence/execute.ts, scripts/specs/evidence/run.ts, scripts/specs/run.ts, .github/workflows/spec-evidence.yml, README.md, AGENTS.md, deno.json, test/scripts/specs/evidence-*
Evidence runs execute selected cases serially, validate Cucumber attachments, write deterministic manifests and PNG assets, and upload the output through GitHub Actions.

Shared checksum utility

Layer / File(s) Summary
Shared SHA-256 hashing
scripts/checksum.ts, scripts/static-cdn.ts, test/scripts/checksum.test.ts
Introduces sha256Hex and uses it for CDN release hashes, upload headers, verification, and checksum testing.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CucumberAfterHook
  participant captureScenarioEvidence
  participant captureCurrentScenarioEvidence
  participant Chromium
  participant EvidenceWorld
  CucumberAfterHook->>captureScenarioEvidence: run in evidence mode
  captureScenarioEvidence->>captureCurrentScenarioEvidence: load and execute capture
  captureCurrentScenarioEvidence->>Chromium: navigate and capture prepared page
  Chromium-->>captureCurrentScenarioEvidence: PNG bytes
  captureCurrentScenarioEvidence->>EvidenceWorld: attach PNG evidence
  CucumberAfterHook-->>CucumberAfterHook: clean up scenario resources
Loading
sequenceDiagram
  participant runEvidenceSpecs
  participant runSpecs
  participant CucumberMessages
  participant buildEvidenceBundle
  participant EvidenceOutput
  runEvidenceSpecs->>runSpecs: execute selected evidence cases
  runSpecs-->>runEvidenceSpecs: catalog and Cucumber messages
  runEvidenceSpecs->>buildEvidenceBundle: build validated bundle
  buildEvidenceBundle->>CucumberMessages: resolve attachments and scenarios
  buildEvidenceBundle->>EvidenceOutput: write manifest.json and assets
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: publishing acceptance-tested screenshot evidence for the website.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/cucumber-screenshot-evidence
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch feature/cucumber-screenshot-evidence

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/screenshots.ts (1)

196-213: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated readiness/capture/write pipeline.

capture() (Lines 209-213) and captureScenario() (Lines 265-272) both now implement the identical waitForScreenshotPagecapturePreparedPageDeno.writeFile sequence, differing only in the elementSelector/fullPage args and the logging/social-variant follow-up. Worth extracting a small shared helper (e.g. captureAndWrite(page, outputPath, elementSelector?, fullPage?)) to keep the two capture paths from silently diverging as this pipeline evolves.

♻️ Suggested helper extraction
+const captureAndWrite = async (
+  page: Page,
+  outputPath: string,
+  elementSelector?: string,
+  fullPage?: boolean,
+): Promise<Rgb> => {
+  await waitForScreenshotPage(page);
+  const screenshot = await capturePreparedPage(page, elementSelector, fullPage);
+  await Deno.writeFile(outputPath, screenshot.png);
+  return screenshot.background;
+};

Then both capture() and captureScenario() call captureAndWrite(...) instead of repeating the three-line sequence.

Also applies to: 256-282

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/screenshots.ts` around lines 196 - 213, Extract the shared wait,
screenshot capture, and file-writing pipeline from capture and captureScenario
into a helper such as captureAndWrite, accepting page, outputPath,
elementSelector, and fullPage as needed. Replace the duplicated sequences in
both functions with calls to this helper while preserving each function’s
existing arguments, return values, logging, and follow-up behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/spec-evidence.yml:
- Around line 23-24: Pin every third-party action in
.github/workflows/spec-evidence.yml to its reviewed immutable full commit SHA:
update actions/checkout at lines 23-24, actions/cache at lines 29-30 and 46-48,
and actions/upload-artifact at lines 64-65, replacing mutable version tags while
preserving the existing workflow behavior.

In `@scripts/screenshots/capture.ts`:
- Line 1: Add mock-based unit tests covering the screenshot branches in capture,
app-server, and browser: verify crop behavior, startup timeout and build-failure
handling, and environment-variable plus Nix fallback behavior. Mock Playwright,
subprocess/server startup, and relevant environment or filesystem dependencies
so these tests exercise the branches directly without launching real browsers or
processes.

In `@scripts/specs/evidence/capture.ts`:
- Line 24: Review the sequential capture flow in captureCurrentScenarioEvidence
and its After-hook timeout configuration in hook.ts, ensuring the total
declaration×profile capture budget remains within EVIDENCE_HOOK_TIMEOUT_MS as
EVIDENCE_CAPTURES grows. Adjust the per-capture timeout or execution strategy as
needed while preserving each page operation’s timeout guarantee.
- Around line 109-116: Remove the waitUntil: "networkidle" option from the
page.goto call in the evidence navigation flow, allowing the existing
waitForScreenshotPage(page) readiness check to control synchronization while
preserving the navigation URL and blocked-request assertion.
- Around line 149-153: Extract the duplicated Chromium screenshot launch setup
from the screenshot entry points into a shared helper, reusing
browserLaunchOptions, chromiumExecutable, and the CDPScreenshotNewSurface
disable flag. Update the launch flow in capture.ts and the corresponding flow in
scripts/screenshots.ts to call the helper so both remain aligned.

In `@scripts/specs/evidence/declarations.ts`:
- Around line 8-21: Remove the unused CSS custom properties from the :root
declaration in SERVICING_STUDIO_CSS: --border-radius, --color-bg,
--color-bg-secondary, --color-link, --color-secondary-accent, --color-table,
--color-text, --color-text-secondary, and --font-family. Keep --color-secondary,
--color-shadow, and --color-accent unchanged because they are consumed by
var(...) references.

---

Outside diff comments:
In `@scripts/screenshots.ts`:
- Around line 196-213: Extract the shared wait, screenshot capture, and
file-writing pipeline from capture and captureScenario into a helper such as
captureAndWrite, accepting page, outputPath, elementSelector, and fullPage as
needed. Replace the duplicated sequences in both functions with calls to this
helper while preserving each function’s existing arguments, return values,
logging, and follow-up behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 7ef0850f-e49d-4c15-b77f-84a7fe86b3c1

📥 Commits

Reviewing files that changed from the base of the PR and between 67c03d8 and 2baa575.

📒 Files selected for processing (40)
  • .github/workflows/spec-evidence.yml
  • AGENTS.md
  • README.md
  • deno.json
  • scripts/checksum.ts
  • scripts/run-spec-evidence.ts
  • scripts/screenshots.ts
  • scripts/screenshots/app-server.ts
  • scripts/screenshots/browser.ts
  • scripts/screenshots/capture.ts
  • scripts/screenshots/image.ts
  • scripts/screenshots/profile.ts
  • scripts/screenshots/readiness.ts
  • scripts/specs/evidence/browser.ts
  • scripts/specs/evidence/capture.ts
  • scripts/specs/evidence/declarations.ts
  • scripts/specs/evidence/hook.ts
  • scripts/specs/evidence/manifest.ts
  • scripts/specs/evidence/resolve.ts
  • scripts/specs/evidence/run.ts
  • scripts/specs/evidence/schema.ts
  • scripts/specs/evidence/style.ts
  • scripts/specs/run.ts
  • scripts/specs/selection.ts
  • scripts/specs/types.ts
  • scripts/static-cdn.ts
  • specs/servicing/hold-and-cost.feature
  • test/scripts/checksum.test.ts
  • test/scripts/screenshots-capture.test.ts
  • test/scripts/specs/evidence-capture.test.ts
  • test/scripts/specs/evidence-fixture.ts
  • test/scripts/specs/evidence-hook.test.ts
  • test/scripts/specs/evidence-manifest.test.ts
  • test/scripts/specs/evidence-resolve.test.ts
  • test/scripts/specs/evidence-schema.test.ts
  • test/scripts/specs/evidence-style.test.ts
  • test/scripts/specs/run-execution.test.ts
  • test/specs/steps/servicing-hold.ts
  • test/specs/support/hooks.ts
  • test/specs/support/world.ts

Comment thread .github/workflows/spec-evidence.yml
Comment thread scripts/screenshots/capture.ts
Comment thread scripts/specs/evidence/capture.ts Outdated
Comment thread scripts/specs/evidence/capture.ts Outdated
Comment thread scripts/specs/evidence/capture.ts Outdated
Comment thread scripts/specs/evidence/declarations.ts
@stefan-burke

Copy link
Copy Markdown
Member Author

Re: outside-diff comment on scripts/screenshots.ts L196-213 (duplicated readiness/capture/write pipeline)

Extracted captureAndWrite(page, outputPath, elementSelector?, fullPage?) in commit 398302f. Both capture() and captureScenario() now use this helper for the capturePreparedPage → Deno.writeFile sequence. The waitForScreenshotPage call stays separate in each because capture() needs to run scene.verify?.(page) between it and the capture.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/scripts/screenshots-capture.test.ts`:
- Around line 134-178: Split the combined chromiumExecutable test into four
independent tests covering the environment override, Nix-path fallback, absent
executable, and filesystem-error propagation. Move each case’s Deno.env and
Deno.stat stubs into its own test with isolated setup and cleanup, while
preserving the existing expectations and behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 50b924f4-f0ae-4522-b42d-0c9ca4e7003b

📥 Commits

Reviewing files that changed from the base of the PR and between 2baa575 and 398302f.

📒 Files selected for processing (6)
  • .github/workflows/spec-evidence.yml
  • scripts/browser-options.ts
  • scripts/screenshots.ts
  • scripts/specs/evidence/capture.ts
  • scripts/specs/evidence/declarations.ts
  • test/scripts/screenshots-capture.test.ts
💤 Files with no reviewable changes (1)
  • scripts/specs/evidence/declarations.ts

Comment thread test/scripts/screenshots-capture.test.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 398302f6d2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/browser-options.ts Outdated
Comment thread scripts/specs/evidence/manifest.ts
Comment thread scripts/specs/evidence/capture.ts Outdated
Comment thread scripts/specs/evidence/schema.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 42c22b3a0b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/screenshots/capture.ts
Comment thread scripts/specs/evidence/capture.ts Outdated
Codex's second review of PR #1924 left two unresolved threads (both on
commit 42c22b3):

P1 — capturePreparedPage had no direct unit coverage. Add direct tests
for its whole decision tree (no-element path, fullPage passthrough,
viewport-resize math for tall and short elements, viewport-null and
box-null error cases, viewport restoration in finally when the screenshot
throws) plus direct coverage of readBodyBackground's inner evaluate fn
(both branches: valid style and missing style). The mock page invokes
the inner fns Playwright would normally run in the browser, so the lines
they hold are exercised in-process too and the coverage gate stays green.

P2 — serveHandler in src/serve-app.ts runs its memoized initialize()
the first time a request hits the capture's loopback server, which flips
the N+1 guard to notify-only. specs:evidence runs scenarios serially
(parallel: 0), so a flipped guard would leak into the next scenario and
silence its N+1 checks. captureScenarioEvidence's cleanup now restores
the default throw mode, with regression tests that set the guard to
notify-only, run a capture (success and failure), and verify the next
N+1 violation throws via the shared reportGuardViolation path.

The regression tests fail without the reset, confirming they catch the
leak they claim to.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2a1b4396fe

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/specs/evidence/capture.ts Outdated
@stefan-burke
stefan-burke added this pull request to the merge queue Jul 25, 2026
@stefan-burke
stefan-burke removed this pull request from the merge queue due to a manual request Jul 25, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3b9122663c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/specs/evidence/schema.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e5357447dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/specs/evidence/capture.ts Outdated
Comment thread scripts/specs/evidence/hook.ts
@stefan-burke stefan-burke changed the title Publish tested screenshots from Cucumber stories Publish acceptance-tested screenshots for the website Jul 26, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/specs/evidence/schema.ts`:
- Around line 139-146: Remove the duplicated repository literal by defining or
retaining a single exported REPOSITORY constant in schema.ts, using it in
EvidenceManifestSchema, and updating manifest.ts to import and reuse that
constant instead of defining its own.

In `@test/scripts/specs/evidence-server.test.ts`:
- Around line 6-21: Extend the lifecycle test around defineLoopbackServer and
server.close() to verify that the closed server no longer accepts connections
after close resolves. Keep the existing request and cleanup assertions, and make
the post-close connection attempt assert the expected rejection or unavailable
state.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 43af015e-62f7-4326-b53e-dca867bbaeec

📥 Commits

Reviewing files that changed from the base of the PR and between 2a1b439 and 1bbfe98.

📒 Files selected for processing (34)
  • .github/workflows/spec-evidence.yml
  • AGENTS.md
  • README.md
  • deno.json
  • scripts/browser-options.ts
  • scripts/screenshots.ts
  • scripts/screenshots/capture.ts
  • scripts/screenshots/readiness.ts
  • scripts/specs/evidence/capture-flow.ts
  • scripts/specs/evidence/capture.ts
  • scripts/specs/evidence/declarations.ts
  • scripts/specs/evidence/execute.ts
  • scripts/specs/evidence/git.ts
  • scripts/specs/evidence/manifest.ts
  • scripts/specs/evidence/run.ts
  • scripts/specs/evidence/schema.ts
  • scripts/specs/evidence/server.ts
  • scripts/specs/run.ts
  • scripts/specs/types.ts
  • test/scripts/browser-options.test.ts
  • test/scripts/screenshots-browser.contract.ts
  • test/scripts/screenshots-browser.test.ts
  • test/scripts/screenshots-capture.test.ts
  • test/scripts/screenshots-fixture.ts
  • test/scripts/screenshots-image.test.ts
  • test/scripts/screenshots-profile.test.ts
  • test/scripts/screenshots-readiness.test.ts
  • test/scripts/specs/evidence-capture.test.ts
  • test/scripts/specs/evidence-execute.test.ts
  • test/scripts/specs/evidence-git.test.ts
  • test/scripts/specs/evidence-manifest.test.ts
  • test/scripts/specs/evidence-schema.test.ts
  • test/scripts/specs/evidence-server.test.ts
  • test/scripts/specs/evidence-style.test.ts

Comment thread scripts/specs/evidence/schema.ts
Comment thread test/scripts/specs/evidence-server.test.ts
@stefan-burke
stefan-burke added this pull request to the merge queue Jul 26, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 26, 2026
@stefan-burke
stefan-burke added this pull request to the merge queue Jul 26, 2026
Merged via the queue into main with commit a972cb9 Jul 26, 2026
3 checks passed
@stefan-burke
stefan-burke deleted the feature/cucumber-screenshot-evidence branch July 26, 2026 03:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant