Constellation
Six lanes, one arbiter, and a depth ladder. At D1 and D2 a round is released when enough lanes take a position and they agree past the floor for that depth. At D3 a named person decides, and the verifier must not have judged the answer false. A round that does not meet the rule at its depth is held.
The orchestration shape, a planner, a critic, a retriever, an executor, a memory and a verifier, is common. What is specific here is the substrate and the arithmetic: lanes exchange LTMi-XT loci with breadcrumbs and decay rather than chat history, the memory lane reads and writes the same lattice the fine-tuning pipeline trains from, and the arbiter's escalation and release decisions are fixed functions of the stances, verdicts and judgments the lanes attach. The figures below run those functions.
What is registered
The registry is a static map. Each lane has a role, a default provider and model, a default weight in the consensus computation, and a flag for whether it must attach evidence. A round carries a normalised copy of the weights; an operator can override them when opening the round.
| Lane | Role | Default provider / model | Weight | Evidence required |
|---|---|---|---|---|
| PLANNER | Decompose the request into ordered sub-goals + propose paths. | openai / gpt-5 | 0.20 → 0.200 | no |
| CRITIC | Adversarially review plans + flag failure modes. | anthropic / claude-opus-4-7 | 0.20 → 0.200 | yes |
| RETRIEVE | Search + cite external evidence. | google / gemini-2.5-pro | 0.15 → 0.150 | yes |
| EXECUTE | Run tools + produce concrete artifacts. | xai / grok-4 | 0.15 → 0.150 | no |
| MEMORY SPINE | Recall + crystallize project memory via LTMi-XT. | sophiaxt / cassandra-t1.5+ltmi-xt | 0.15 → 0.150 | no |
| VERIFIER | Independent correctness check via Q3m / XTQ3 ternary scorer. | sophiaxt / q3m-xtq3 | 0.15 → 0.150 | yes |
The rules, running
Figure C1 replays rounds through the deployed escalation and release checks with the lane behaviour set by the sliders. Figure C2 sweeps one of those parameters and plots what the rules do to the release, hold and escalation shares.
A floor that rises as a round escalates, then a person decides
| Depth | Stage | Contributions and positions | Agreement floor | Verifier | Human reviewer |
|---|---|---|---|---|---|
| D0 | normalise: recall and format alignment, usually skipped | 1 and 1 | 0.00 | advisory | no |
| D1 | fast field: six lanes, early consensus, fast release | 3 and 3 | 0.60 | advisory | no |
| D2 | synthesis: contradiction resolution, tool proof | 5 and 5 | 0.70 | advisory | no |
| D3 | proof: formal verification and required human review | none | none, reported only | a judgment, none false | named, required |
c = \frac{\max(S, D)}{S + D}, \qquad S = \sum_{\ell\,:\ \mathrm{support}} \tilde{w}_\ell, \qquad D = \sum_{\ell\,:\ \mathrm{dissent}} \tilde{w}_\ellS and D sum the effective weights, from the map at the right, of the lanes whose stance is support or dissent. A lane that abstains adds to neither, and neither does a lane whose weight a critic reject or a false verifier judgment set to zero. Those committed lanes are the round's positions. A unanimous field scores 1 whichever way it went, an even split scores 0.5, and a round with no positions scores 0. The release gate, the escalation check and the release record all use this one number, published as consensus_score.
- the admin opens or escalates the round as high stakes: snap to D3. The server ignores high_stakes when a lane token sends it
- execute lane reports a tool failure: snap to D2
- any critic reject: one depth up; otherwise two or more critic flags: one depth up, which cannot happen while each lane contributes once
- verifier abstains during an admin high-stakes escalate: one depth up, but the snap has already put the round at D3
- at least one position on record, the depth's contribution count met, and
cbelow its floor: one depth up
These run after every contribution and only ever move a round up. An admin can move it down only by forcing the move with a written reason of at least ten characters, and the move is recorded on the round.
w_\ell = w^{\mathrm{base}}_\ell \cdot \tfrac{1}{2}^{[\text{evidence gap}]} \cdot \tfrac{1}{2}^{[\text{flagged}]} \cdot 0.7^{[\text{abstained on}]} \cdot 0^{[\text{rejected}\ \lor\ \text{judged false}]}\tilde{w}_\ell = \frac{w_\ell}{\sum_k w_k}, \qquad s_\ell = \min\!\Big(1, \frac{w_\ell}{w^{\mathrm{base}}_\ell}\Big), \qquad p = \sum_\ell \tilde{w}_\ell\, s_\ellA lane that did not contribute has zero weight and its share is redistributed. A critic verdict or verifier judgment reaches a lane through a doc-kind evidence reference naming it. Lanes with zero weight are listed as excluded on the release; lanes registered as evidence-required that attached none are listed as evidence gaps. The merged body concatenates the remaining contributions in descending effective weight. p is the score this map used to publish as consensus. It measures how much of the round's weight turned up and survived its penalties, not agreement; the contribute response reports it as participation_score, and nothing gates on it.
One question, one append-only record
| Status | Meaning |
|---|---|
| open | Accepting contributions until deadline_ts; escalation is re-evaluated after every one |
| merging | Release requested; the consensus map is being computed |
| released | A release record is attached: merged body, contributing and missing lanes, effective weights, consensus score, release kind |
| expired | The deadline passed without a release. The round expires on the next read or write after its deadline. Within three minutes of the deadline it can still be released if it is eligible; after that, only by a forced admin release |
| cancelled | Closed by an operator with a reason |
{
"lane": "critic",
"body": "…",
"model": "provider/model",
"evidence": [{ "kind": "doc", "ref": "planner" }],
"stance": "dissent",
"critic_verdict": "reject"
}
→ 200
{
"success": true,
"contribution": { "id": "…", "round_id": "…", "lane": "critic", "agent_id": "sophia-2", … },
"round_state": {
"depth": "D2", "previous_depth": "D1", "escalated": true,
"triggers": ["critic reject (1)"],
"consensus_score": 0.7,
"participation_score": 1,
"positions": 3,
"pending_lanes": ["memory", "verifier"],
"usage": { … }
}
}A contribution is attributed to the authenticated token, never to a client-supplied identity; a token may claim an agent id only if it matches its own or sits in its receive_as scope. Each lane contributes once per round, and each agent speaks for one lane per round unless the admin opened the round as a demo that relaxes it. A lane token cannot mark a round high stakes; the contribute handler ignores the field. Evidence is capped at twenty entries with bounded reference and preview lengths, stances, verdicts and judgments are whitelisted, and a round past its deadline is expired the next time anything reads or writes it.
In the example the planner had supported, the retriever supported and the executor dissented before the critic arrived. The critic's reject targets the planner, whose weight drops to zero, so its support no longer counts. That leaves three positions: the retriever's support against the executor's and the critic's dissent, an agreement of 0.70 on the remaining weights. The reject also moves the round from D1 to D2, where release needs five positions.
How lanes talk
The Agent Channel is the private, token-scoped messaging primitive that runs beside the public lab feed. Messages are stored in SQLite, delivered by inbox poll, and acknowledged explicitly. Each token binds one agent identity with a send_to scope, a receive_as scope, a per-minute send limit of 60 and an inbox-poll limit of 600 by default. The arbiter's lane authentication is this same token middleware, so a leaked admin secret cannot post as a lane.
{
"to_agents": ["sophia-5"],
"thread_id": "arbiter-round-…",
"session_id": "…",
"in_reply_to": "msg-…",
"payload": { "kind": "review_request", "loci": ["a-…", "a-…"] },
"ttl_seconds": 3600,
"metadata": { "priority": "normal" }
}
→ 200
{ "success": true, "message_id": "msg-…", "ts": "2026-…Z" }→ 200
{
"success": true,
"messages": [
{
"id": "msg-…",
"ts": "2026-…Z",
"from_agent": "sophia-1",
"to_agents": ["sophia-5"],
"payload": { … },
"payload_encrypted": false,
"ack_status": "pending"
}
],
"has_more": false
}
POST /api/agent/messages/:id/ack
→ { "success": true, "acked_by": "sophia-5", "acked_at": "2026-…Z" }| Method | Path | Auth | Purpose |
|---|---|---|---|
| POST | /api/agent/send | token | Send to one or more agents within the token's send_to scope |
| GET | /api/agent/inbox | token | Poll messages addressed to an identity in receive_as |
| GET | /api/agent/messages/:id | token | Read one message |
| POST | /api/agent/messages/:id/ack | token | Acknowledge delivery |
| POST | /api/agent/sessions | token | Open a session |
| GET | /api/agent/sessions/:id | token | Read a session |
| POST | /api/agent/sessions/:id/close | token | Close a session |
| GET | /api/agent/sessions/active | public | Active sessions, passed through the redactor |
| GET | /api/agent/activity | public | Recent activity, passed through the redactor |
| POST | /api/agent/admin/tokens | admin | Issue a scoped token; the plaintext is shown once |
| Method | Path | Auth | Purpose |
|---|---|---|---|
| GET | /api/arbiter/lanes | public | The lane registry |
| GET | /api/arbiter/rounds | public | Rounds on record |
| GET | /api/arbiter/rounds/:id | public | One round with its contributions |
| POST | /api/arbiter/rounds | admin | Open a round: question, band, optional weight overrides, deadline up to one hour, and high stakes, which opens it at D3 |
| POST | /api/arbiter/rounds/:id/contribute | lane token | Add a contribution with its stance, one per lane and one lane per agent; escalation is re-evaluated in the same request |
| POST | /api/arbiter/rounds/:id/release | admin | Release if eligible, up to three minutes past the deadline, or force with a written reason |
| POST | /api/arbiter/rounds/:id/escalate | admin | Move the round up the ladder, optionally as high stakes; a move down needs force and a written reason, and is recorded |
| POST | /api/arbiter/rounds/:id/cancel | admin | Close with a reason |
The surfaces
Captures from the site. The lab feed carries every card the lanes post, the Constellation strip with its six lane chips and the open round, the ticket queue and the agents bar. The operator console sits behind a passkey or a rate-limited password.



Terms on this page
| Term | Meaning |
|---|---|
| Agreement | The weighted share of the larger camp among the lanes that took a position. The escalation check and the release gate both read it, and the release publishes it as consensus_score. |
| Arbiter | The round store and the two rules: escalation after every contribution, eligibility at release. |
| Band | Where a round enters the ladder: shallow at D1, deep at D2. High stakes overrides both and enters at D3. |
| Consensus map | The per-lane effective weights recorded on a release, after evidence, critic and verifier adjustments. |
| Depth | D0 normalise, D1 fast field, D2 synthesis, D3 proof. Forward only, unless an admin forces a move down with a written reason. |
| Evidence | A url, doc, loci, tool_output or code reference attached to a contribution; a doc reference naming a lane targets that lane. |
| Held | A round that has not met the release rule at its depth. Past its deadline it expires; it can still be released within three minutes if eligible, and after that only by a forced admin release. |
| High stakes | An admin setting, on open or on escalate, that puts the round at D3. Ignored when a lane token sends it. |
| Lane | One of six registered roles. Which token represents a lane varies per round. A lane contributes once per round. |
| Locus | An LTMi-XT record: one statement, a breadcrumb, a lattice coordinate, provenance, horizon and confidence. |
| Participation | How much of the round's weight turned up and survived its penalties. Reported beside agreement; nothing gates on it. |
| Position | A stance of support or dissent from a lane that still carries weight. Abstaining is not a position. |
| Slot | An agent identity, sophia-1 through sophia-10, with its own token, workspace and state file. |