pdombkins puts guardrails around Rose Lawyer's split deployment

This fork turns a run of production deployment failures into checks that make releases easier to trust.

infrastructureworkflow

Rose Lawyer runs its back end on Railway and its front end on Cloudflare Workers, a hosted platform for running web applications close to users. pdombkins has concentrated on the unglamorous but valuable work of making that arrangement fail loudly instead of quietly.

  • A release check blocks a front-end deployment if it contains static assets but no working application server.
  • A public version-status page shows which release, branch and deployment time are actually live, answering the question that a basic health check could not.
  • Large document-viewing and export features now load only when needed, reducing the risk of hitting the front-end platform's size limits.

The remaining fixes remove conflicting build-tool signals that had led the hosting service to choose the wrong installer. This is a practical reliability pass for legal teams that need confidence that a production update is genuinely live.

So what Teams operating legal products across separate hosting services should care because it makes release failures visible before clients discover them.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

9 commits from pdombkins/rose_lawyer, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
f2e226bf chore: remove stray root package-lock.json Peter Dombkins 2026-07-04 ↗ GitHub
5a480ed2 Remove stray bun.lock files (force npm for Railway/OpenNext build detection) Peter Dombkins 2026-07-23 ↗ GitHub
760c0422 Update wrangler compatibility_date; remove stray bun.lock files Peter Dombkins 2026-07-24 ↗ GitHub
9f0913b5 Lazy-load heavy doc-viewer/export libs to fix Worker bundle size Peter Dombkins 2026-07-24 ↗ GitHub
f60683d7 chore: ignore .fuse_hidden* artefacts Peter Dombkins 2026-07-28 ↗ GitHub
80ec2f39 fix(deploy): refuse to deploy an assets-only Worker Peter Dombkins 2026-07-31 ↗ GitHub
commit body
A deploy on 31 Jul shipped the rose-lawyer Worker with no script. Rose is
entirely Worker-rendered, so every page 404'd and the only thing left to serve
at the root was the K&S app staged at /firm - the site looked like it had been
replaced by Kendry & Slate. wrangler tail named it: 'Cannot tail a Worker which
only has assets'. Recovered with wrangler rollback.

The cutover script now asserts .open-next/worker.js is non-empty before
deploying, and smoke-tests /library for a 200 afterwards.
ac7c1dd7 docs: record the real cause of the assets-only outages Peter Dombkins 2026-08-02 ↗ GitHub
commit body
Cloudflare Workers Builds was connected to the repo and deploying on every
push with no build command and root directory '/', so opennextjs-cloudflare
build never ran and the Worker shipped with no script. Builds completed in
zero seconds, and deployment history alternated between good manual Wrangler
deploys and broken git ones.

My 31 Jul diagnosis blamed a bare 'wrangler deploy' and the guard I wrote for
the cutover script could never have caught this, because the deploy did not
run locally.

Both integrations are now disconnected: Cloudflare Workers Builds, and the
Supabase GitHub app on the OLD K&S project which had 'deploy to production'
pointed at a database we migrated off.
d7b2f560 docs: git auth is SSH over port 443 Peter Dombkins 2026-08-02 ↗ GitHub
Port 22 is blocked on Peter's network, which presents as 'Connection closed by
<ip> port 22' rather than a permission error. ~/.ssh/config routes github.com
via ssh.github.com:443. The PAT is no longer used for anything.
e7016d2f feat(backend): GET /version; stop tracking K&S build output Peter Dombkins 2026-08-02 ↗ GitHub
commit body
Twice today a deploy could not be confirmed from outside. /health reports that
the process is up, not what code it runs, so 'did this reach production?' was
answered by guessing from behaviour. /version returns the Railway commit SHA,
branch, deploy time and process start time, unauthenticated - a check you must
authenticate for is a check nobody runs.

Also gitignores frontend/public/firm/ and removes its 90 tracked files from the
index. It is K&S build output regenerated by build:firm on every build, so it
was never source; tracking it churned ~100 hashed bundles into every diff.

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-927.md from inside the repo you want the changes in.

⬇ Download capture-thread-927.md