Chronos/DBWaitlist

Reference

Errors

SQLSTATE codes and HTTP statuses, what causes each, and what to do.

SoonThese pages describe Chronos Cloud, which opens from the waitlist. Running Chronos yourself? Self-host docs

Where errors show

ClientGets
Postgres (your app, psql)an error with its SQLSTATE (C), message, and where it has them detail, hint, position, and the schema, table, column and constraint a violation names. A constraint error’s hint names the row: Row bookings/7 already has this key.
MCP (agents)a normal result with isError: true and the message, which says how to fix the call
Platform APIan HTTP status and {"error": "<code>", "message"}: see Platform API
App authan HTTP status and {"error", "message"}: see Auth

Merges and worlds

CodeMeansDo
40001rows changed on both sides since the fork; or both changed one table’s columnsread the dry run, then settle (BY COLUMNS, RESOLVE, USING) or redo the work on a fresh fork. See Conflicts
23505both sides added rows with the same unique valuedrop or change one side’s row
23503the merged result has a row pointing at one the other side deletedmerge the deletion’s world after fixing the reference
23514a CHECK, or a merge check found rows in the result (they’re in the message)change the world until the check finds nothing
55000the world isn’t at the AT VERSION given; a missing or wrong CONFIRM DELETES; a world open when the server stoppedread the diff again; give the count the message names; check DIFF then CONFIRM
3D000no such world (also a Postgres connection to a database name that isn’t one)SHOW WORLDS
42710a world with that name existspick another name, or drop it
2BP01dropping a world that has forksmerge or drop them, or DROP WORLD … CASCADE
25001a world statement inside BEGIN … COMMITrun it outside the transaction
25006a write to a world as it was (name@when)write to the world itself
42601a world name with a dash, unquoted (task-1)quote it: "task-1"
42602, 42939a world name that’s empty, has @, starts _tx_, or is a MERGE keywordpick another name
0A000merging or dropping mainmain has no parent

Agents and rules

CodeMeansDo
42501an agent may not do this: it lacks the right (the message names it), the world isn’t its own, or it’s disableddo it as a person, or change the agent’s rights
42501merging w needs a person’s review (merge policy p: …): its policy holds the merge; it’s queuednothing is wrong: approve or discard it in Reviews
42501a direct write to main by an agent keeping to a policywrite in a world and merge it
42501outside the world’s declared scopewiden the scope (a person), or redo the work within it
40001… read rows that changed since it forked: a stale readredo the work in a new world forked from now

Limits

CodeMeansDo
53400past the plan’s open worlds, or an agent writing too fastdrop worlds you’re done with; slow down
53300too many connections or statements at onceuse a pool; lower its size
53200a query past its memorynarrow it, or add a LIMIT
53100disk full: past the plan’s storagedelete data or worlds you don’t need
57014statement_timeout passed, or canceledindex the filter, or raise the timeout for that session
54001a regular expression that backtracks too long; recursion too deepsimplify the pattern; add a stop condition

History

CodeMeansDo
22023a moment outside the history window (older than the plan keeps, or in the future)pick a moment within it; restore a backup for older
22P02AS OF given something that isn’t a time'-15 minutes', '2026-10-20 09:00', a timestamp, or a parameter
55000RESTORE to before the world’s last rebasefork the past and merge what you need instead

Postgres errors

Everything else is Postgres’s own code, with Postgres’s message:

CodeMeans
23502, 23503, 23505, 23514not null, foreign key, unique, check
42P01, 42703, 42883, 42704no such table, column, function, object (the message lists what there is)
42601syntax error, with its position
42804, 22P02a value of the wrong type, or text that isn’t one
22003, 22012out of range, division by zero
25P02a statement after an error in the same transaction: roll back
0A000a feature Chronos doesn’t have yet: see Known gaps
28000, 28P01TLS required (sslmode=require), or a wrong password

Reading an error

A merge refused

  • The message always ends with what happened to the data: nothing was merged.
  • It names up to 10 rows (orders/7, orders/9), and a dry run lists them all.
  • A held merge names every broken rule: it changes 40 rows (at most 3); it deletes 2 rows (at most 0).
Errors · Chronos