Skip to content

test(e2e): cover the slow-runner timeout and reconcile message - #112

Merged
sgardoll merged 1 commit into
hardening/deploy-resiliencefrom
hardening/e2e-timeout-path
Oct 4, 2026
Merged

sgardoll merged 1 commit into
hardening/deploy-resiliencefrom
hardening/e2e-timeout-path

Conversation

@sgardoll

@sgardoll sgardoll commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

What

Adds e2e/deploy-timeout-reconcile.spec.js covering: a provisioning that outlives the UI bound is UNCONFIRMED (never a fabricated failure), and after the bound the reconcile re-read reports which classes actually landed instead of a dead-end 'go check yourself'.

Why

Commit 5231e76 raised the deploy UI bound to 840s and added reconcileUnconfirmedProvision, which re-reads the project and reports what landed. These browser tests lock that behavior in: the timeout path stays reachable in test time by stalling the mocked runner and shortening the bound to milliseconds (not 840 real seconds), and the reconcile message is rendered through the real __CCC_RENDER_DEPLOY_TERMINAL__ entry point.

Tests

  • npx playwright test deploy-timeout-reconcile.spec.js — 2 passed.
  • node --test src/*.test.js — 399 passed.
  • npx playwright test stu380-deploy.spec.js — runs, but 6 pre-existing failures: stu380's project-source-cache tests count exportCalls and were not updated for the new reconcile re-read that commit 5231e76 introduced (reconcile now makes an extra exportCode call on unconfirmed provisioning). Those tests/semantics are owned by the app.js workstream; I did not touch them.

Devin Review

The 840s UI bound keeps the live progress view alive on routine deploys,
but when a provision response is still lost or expired the app re-reads
the project and reports which classes actually landed instead of leaving
the user on a dead-end. These browser tests drive the real provisioning
transport against a stalled mocked runner at a millisecond bound and
render the reconcile outcome through the real terminal renderer, locking
in that the timeout is UNCONFIRMED — never a fabricated failure — and
that the modal names the project and a next step.
@greptile-apps

greptile-apps Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

This PR does not match any of the 1 configured review trigger rule.

@devin-ai-integration devin-ai-integration 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.

Devin Review found 2 potential issues.

Devin Review

Comment on lines +99 to +107
await page.route("**/exportCode", async (route) => {
await route.fulfill({
status: 200,
contentType: "application/json",
body: JSON.stringify({
value: { project_zip: await projectZipWithClassLanded() },
}),
});
});

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.

🔍 Reconciliation fixture skips the initial project state

The export always contains GaugeModel, while the hook receives no remoteFiles. A real deploy reads that export first and skips provisioning an existing class. Model the class appearing after the stalled request to exercise the claimed journey.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +151 to +156
window.__CCC_RENDER_DEPLOY_TERMINAL__({
success: false,
unconfirmed: true,
targetIdentity,
error: message,
});

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.

🔍 Timeout outcome does not drive modal classification

The test supplies unconfirmed: true rather than deriving it from the caught error. A broken production error-to-result mapping can still leave this modal test passing.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

@sgardoll
sgardoll merged commit 0350ce3 into hardening/deploy-resilience Oct 4, 2026
1 of 2 checks passed
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