MRMain RoadGuru release practice
Post–Beta 2 compaction

Sutra scales down to zero. The useful boundaries survive.

Move product orchestration back into NestJS and internal extraction. Keep small provider-facing services only where containing a credential or trust boundary earns its existence.

Change the boundary

Remove the middle. Keep the locks.

TodayGlobal execution service
NestJS Product orchestration
Sutra Models · workflows · queues · R2 · containers · lineage
Mistral
R2
Textract

One deployment and health boundary carries many unrelated reasons to change.

TargetProduct-owned orchestration
NestJS + internal Python Decide · orchestrate · validate · persist
Mistral capsule
R2 capsule
Textract capsule

Each remote boundary exists for one provider credential, not to own product behavior.

Credential capsule

A small lockbox, not another brain.

A capsule can sign a request, constrain capability and record provider-level telemetry. The application still decides what happens and why.

01

One trust boundary

One provider or tightly related credential set. Narrow scopes and rotation stay outside application containers.

02

Typed, narrow operations

Explicit OCR, transcription or artifact operations—not arbitrary upstream URLs and not generic prompt execution.

03

Stateless by default

No product workflow, conversation ownership, queue backlog or business persistence.

04

Failure stays local

The application is not globally “unready” because an optional provider capability cannot answer.

Local development

No local Cloudflare.

Running Guru locally should mean running the frontend, NestJS and the internal Python services. Hosted capsules provide credentialed capabilities; deterministic fixtures cover provider-free tests.

Your machine Frontend NestJS Internal Python Fast tests · fixtures · fakes
authenticated HTTPS
Hosted lockboxes R2 Mistral Textract · temporary
Gone from the local critical path Wrangler runtimeMiniflare persistenceDurable ObjectsCloudflare QueuesWorkflowsContainers
Preferred direction

R2 stays. AWS extraction leaves.

Storage and extraction are separate decisions. R2 remains the canonical artifact store. Textract remains only while its credential capsule provides practical value.

Keep

R2 artifact storage

Sources, evidence and results live in the preferred store through a narrow native-binding capsule.

Move

Mistral OCR + internal extraction

Complete the post–Beta 2 migration to provider OCR and deterministic product-owned extraction.

Retire

Textract + AWS storage paths

Remove the bridge when the migration completes. Until then it remains a credential container, not a product service.

Fast cutover

Compact in hours, not weeks.

Git history is the rollback. Preserve outcome contracts, cut the path, verify the live behavior, then delete the obsolete machinery.

  1. 1
    Pin the outcomes

    Keep backend contract and integration coverage for ChatMo, voice, documents and retained evidence.

  2. 2
    Move orchestration home

    NestJS and internal Python call the narrow provider and R2 capsules directly.

  3. 3
    Cut and verify

    Deploy to a review room; run regression journeys, provider smokes and artifact checks.

  4. 4
    Scale Sutra to zero

    Remove readiness coupling, routes, queues, workflows, containers, configuration and local runtime.

Operating model

Three rooms make the release path tangible.

Return to review rooms