Skip to content
The foundation under itDurable operations

Work that finishes

A transcript extraction survives a restart, and you watch it happen.

Reading a meeting transcript, drafting content, preparing a data export: none of that fits inside a click. Growth-OS records the job the moment it accepts it, reports real states while it runs, and picks it up again after a restart. When it genuinely fails, it says so and can be retried instead of disappearing.

1
transaction to accept a job for good
6
honest job states, no fake spinners
3
levels of who can see a job

Product example

See it working

This is the same visual component used by the authenticated app, rendered with deterministic sample data.

Scenario
viewport
surface theme
mode

Running

The current stage, progress, item counts, milestones and the cancel command you can use.

Inert sample data · no network access

Current state

archive notes

In progress

Archiving documents in replay-safe batches

Archiving documents in replay-safe batches684 of 1000
x

Results

Confirmed item outcomes reported by this process.
Successful
680
Failed
4
Skipped
0

Preview ready

The problem this solves

Without a shared foundation, every team rebuilds these edge cases, differently.

The extraction lost to a redeploy

You paste a transcript, the analysis starts, and the server restarts mid-way. Without a durable record there is nothing to resume and nothing to prove it was ever asked for. Here acceptance is a committed row before any worker is involved.

The progress bar driven by a timer

With no real job record the page has to guess. Spinners that never resolve, bars that fill at a constant rate, a status that contradicts what the worker actually did. Each state here comes from a checkpoint the worker wrote.

Slow work killed and run twice

A naive health check decides that a long analysis is dead and starts it again. Now two runs write results over each other. Telling late apart from lost is exactly the code nobody wants to write twice, so it lives in one place.

Highlights

Why it matters

Accepted means written down

The job, its status record and its trigger commit in one transaction. You see queued straight away, even if the queue itself is unreachable.

Six real states, no fake spinner

Queued, running, waiting, succeeded, failed, canceled. Each one is reported by the worker doing the work, not by a timer in the page.

Nothing fails in silence

Retries are finite. Work that keeps failing lands in the control center, where one click requeues it safely.

How it works

The mechanism end to end, as implemented in the repository.

  1. 1

    Accept in one step

    The server checks the request, then commits the record, its process run, its outbox event and its receipt together. You see queued immediately.

  2. 2

    Hand off safely

    A publisher moves the job to the queue after the commit. Attempts are bounded, and a job that keeps failing lands in a visible dead state instead of retrying forever.

  3. 3

    Work with checkpoints

    Workers hold an expiring lease and update the record at each real stage. Large artifacts go to storage; the queue only carries small references.

  4. 4

    Stream the truth

    Status streams live, scoped to your organization and project. Late work reads as waiting rather than failed, and a completion notification cannot send twice.

Engineering guarantees

What this does and does not promise

Safety boundary

The preview on this page runs on sample data. Real behavior needs our database, queue and sync services running with migrations applied, so a green check on a laptop says nothing about the deployment.

Implementation evidence

The boundary above is code, not a claim. These files carry the contract:

  • docs/PROCESS-SYSTEM.md
  • src/features/processes/lifecycle.ts
  • src/features/processes/realtime-shape.server.ts
Questions

Frequently asked questions

What work that finishes rests on

The docs describe the same contracts this page demonstrates.