Test all the things!

Break the whole app
Test the whole path
Locally, in CI, and in production.

The alternative to testing the whole path is discovering failures by breaking the whole app. This hackathon project makes the same core scenarios runnable locally, in CI, and in production.

The Idea: Confidence on all levels

01

Local runtime

Real or mocked integrations

β†’
02

CI

Deterministic UI E2E

β†’
03

Production

Continuous synthetic checks

The goal is not one giant test. It is one reusable flow at three confidence levels: fast local feedback, deterministic CI coverage, and continuous confirmation against production.

Synthetic Monitoring

Section divider for the Synthetic Monitoring work.

We DO have Synthetics for the Agent?

ClickOps meme
Shell implementation
First page of the grep meme.
Quote
Second page of the grep meme.

How we set it up.

01GitChecks colocated with code
02Local & CIVerifies & Deploys whenever the check changes
05Env-AwareConfiguration across environments via doppler
03Browser POCHistory β€” We'll never break it again
…or we will know when we do
The check is versioned in Git and gcx deploys it only when it changes. History is the first browser-based proof of concept because it is valuable and easy to forget. The same setup can run locally, while Doppler supplies environment-specific configuration.

E2E

with variable ends

Section divider for end-to-end testing with selectable integration depth.

Let's test the core of our App

Contentful UI
β†’
WebSocket
β†’
Analytics Agent
β†’
Cube
Cubemockreal
LLMmockreal
Contentfulmockreal
The improved local runtime gives us a real application, transport, worker, and session path. Expensive or unstable dependencies can be swapped between mocks and real services. The Cube mock server is useful now and can also protect the migration away from Cube later.

Different Depths for different Purposes

Local

Full stack

Real worker + transport

PR

Fast

Mock Cube + model

Pre-Merge

Pre-merge & On-deploy checks

Prevent the incident

Scheduled

Production

Real UI + agent + data

The Playwright scaffold lets us choose the integration depth for the purpose: full local exploration, fast PR feedback, pre-merge incident prevention, and scheduled production verification can all share the same UI flow.
Deeper meme
Meme transition before the UI E2E and Cube Mock-Server demo.
Demo: UI E2E Tests & Cube Mock-Server
Placeholder for the UI E2E Tests and Cube Mock-Server demo.

Blue/Green Deployment

Section divider for Blue/Green deployment findings.

Blue / Green Deployments

Kubernetes / ArgoCD

Rollouts already installed

cf-argocd enables Argo Rollouts in ninetailed-staging and ninetailed-production.

Cloudflare Workers

Gradual rollout supported

Deploy v2 promotes services when smoke-tests/run.ts exists.

Probe candidates

Coverage gap remains

  • Synthetic Monitoring depends on deployed services
  • Bruno covers ~40%; the rest need another strategy
ConclusionThe building blocks are there. Scope a promotion gate β€” ideally within one sprint.
Both Kubernetes clusters already have Argo Rollouts through the central cf-argocd. Cloudflare Deploy v2 can perform a gradual rollout when a service supplies smoke-tests/run.ts. The open problem is probe coverage: Synthetic Monitoring depends on other deployed services, and Bruno covers only around forty percent of applications. Scope whether the remaining work fits into one sprint.

Next Steps

Section divider for the remaining work.

Next Steps

Synthetic Monitoring

  • Proper token setup
  • Verify stability

E2E

  • Define integration-depth profiles
  • Establish coverage guidelines
  • Make the DX delightful
  • Verify stability

Blue / Green Deploys

  • POC with a meaningful service
  • Plan implementation
β†’ Tasks will be added to the backlog
Close with the work that remains. Each stream needs a small amount of hardening or design before it becomes routine. Convert these next steps into backlog tasks after the hackathon.