augment-it is deployed — Railway, not DigitalOcean, and augment.didi.sh is live
Steps 9 and 10 of the humain-vc unlock build order: augment-it's single-tenant instance is live at augment.didi.sh, on Railway instead of the originally-prepped DigitalOcean droplet — a platform switch made after the droplet's real numbers didn't match the plan, and validated against Railway's actual multi-service project model.
Why Care?
The humain-vc flow needed a real, hosted URL — everything before this was local. It's live now: https://augment.didi.sh, single-tenant, behind the same didi.sh sign-in wall proven locally, with the cookie actually shared across the .didi.sh domain for real. Getting there meant switching platforms mid-plan and finding four real bugs that only exist once code leaves localhost.
What's New?
augment-it is live at
https://augment.didi.sh. 8 services on Railway (nats,workspace-service,record-surrealdb-resolver,content-ingest,prompt-runner,shell,strategy-curator,chat), one project, verified with headless-browser checks against the real deployed URLs — anonymous visitor gets the full sign-in wall, zero unexpected console errors.Platform: Railway, not the prepped DigitalOcean droplet. Re-checked the DO box's live numbers before starting Step 9 and found ~112MB free RAM (before running anything of ours) and a leftover
coolify-proxycontainer still squatting on ports 80/443 — the "prepped, ready to go" state from three days earlier had drifted. Given very few users and Railway's closer match to this repo's actual multi-service docker-compose shape, switched platforms rather than patch the drift.Custom domain, cookie-correct.
augment.didi.sh(shell) andws.augment.didi.sh(workspace-service — the one every federated remote connects to directly) both live under*.didi.sh, required for thedidi_sessioncookie to actually attach.id-didi-sh's production CORS allowlist — which turned out to have been silently empty since it first deployed, never surfaced until something tried to call it cross-origin — now includeshttps://augment.didi.sh.
The Story
Four real bugs surfaced by actually deploying, none of which local dev would ever catch:
Railway's Railpack builder auto-detected this repo as a turborepo (
turbo.jsonexists at root) and ran the rootpnpm buildscript unconditionally for every frontend, ignoring per-service build-command overrides.turbowas never an actually-installed binary here —dev.sh's own comments already knew this. Fixed by givingshell,strategy-curator, andchattheir own Dockerfiles, matching the pattern already proven for the four backend services.A Docker
ARGthat's declared but never passed resolves to an empty string, notundefined—?? defaultdoesn't catch it. Caught locally (deliberately docker-built before pushing) asTypeError: object null is not iterabledeep in rspack's Module Federation code — an empty remote URL, not a missing one. Switched four??fallbacks to||.Federated sub-chunks need their own
output.assetPrefix, not justdev.assetPrefix. Without it,chat's andstrategy-curator's async chunks resolved as relative paths against the shell's origin instead of their own — 404ing into the shell's SPA-fallback HTML, which the browser then tried toevalas JavaScript (SyntaxError: Unexpected token '<'). This one only reproduces cross-origin; local federation dev never surfaces it. Found via a live browser check against the actual deployedaugment.didi.sh, not a local test.nats-servergenuinely does not accept-max_payloadas a CLI flag (this repo's ownnats.confcomment already knew that, from months back) — needed an inline-generated config file, and the first attempt (printfwith embedded\nescapes) corrupted somewhere across the Railway CLI → GraphQL → containersh -cchain. The fix that survived: aechoper line, no embedded newline escapes at all.
Also hit and worked around: Railway's CLI environment edit --service-config (dot-path form) silently no-ops in the version used this session — switched to the JSON-patch form, which works reliably. railway volume add panics outright — created volumes via a direct GraphQL mutation instead.
flowchart LR
A[DO droplet: 112MB free,\nstale ports] -->|re-checked before Step 9| B[Switch to Railway]
B --> C[8 services, 2 volumes]
C --> D[Railpack turborepo\nauto-detect breaks builds] --> E[Dockerfiles for\nthe 3 frontends]
C --> F[assetPrefix gap] --> G[federated chunks fixed]
C --> H[custom augment.didi.sh\n+ CORS fix]What's Next
Step 12 — the dress rehearsal. Two things still open: Aniel's membership still isn't seeded on prod (his address was never confirmed, carried over from Step 2), and nobody has completed an actual human sign-in against augment.didi.sh yet — id.didi.sh's dev-token echo is deliberately off in production, so this genuinely needs a person clicking a real magic-link email, not another script. Step 11 (corpus sync to R2) needs a Railway-native redesign before it's real — the plan as written assumed a DO box's filesystem a cron job could rclone from directly.
Related
context-v/plans/Build-Order-Humain-VC-Unlock-Flow.md— Steps 9-10, now done (revised in place — was DigitalOcean, now Railway)context-v/plans/Unlock-Humain-VC-Team-Access-To-Augment-It.md(ai-labs level) — item 4, "Deploy augment-it single-tenant"
