-
Notifications
You must be signed in to change notification settings - Fork 2
Concepts
The model in one page. Everything else is detail.
Blueprint first, model second. TRON's founding principle: a deterministic blueprint — a closed trigger grammar and an explicit event table — decides the flow; the model is called only to build and to answer two bounded judgments, never to choose a step. Everything here follows from it.
Your work is a pipeline of blocks. Each block ties to a spec (by ID) and carries a status:
| Status | Meaning |
|---|---|
pending |
exists, not yet cleared |
cleared |
architect-cleared — the only dispatchable status |
in-progress |
a worker is building it |
blocked |
walled, awaiting your decision |
done |
built + released |
abandoned |
you dropped it |
Pipeline order is your preference; a spec's dependencies are the hard gate.
-
Architect — one persistent agent, excluded from the worker pool, draining a FIFO queue.
It is forward-looking only: it reviews the work ahead and marks the next block
cleared(forward-review), and it turns reviewer findings into upcoming blocks (log-review). It never reopens a done block — remediation is always a new block ahead. It's also the standing peer-consult. - Engineers — build one cleared block each: read the spec, work on their branch, validate against every acceptance criterion, report done. Fresh worker per block.
- Reviewers — dispatched on a cadence; deliver a findings log for one lens (code / security / data / …).
Engineers and reviewers share the worker pool (size = worker_count). The architect does not.
A reviewer doesn't pass/fail anything. It hands back a findings log; the architect's log-review decides what (if anything) becomes a new block. The fleet keeps moving.
Reviewers aren't fired on a timer. A per-type counter ticks on every completed block; when it reaches
that type's threshold, the dispatch loop pulls a reviewer and resets the counter. You set the
thresholds (cadence: {code: 3, …}).
The engine spine is code, never an LLM call:
- PULSE — the standing loop. It runs at start and on every completion signal.
-
SWITCHBOARD — what PULSE runs each tick, in order:
- Fill slots — for each free worker slot, dispatch in priority: oldest cleared adhoc block → a due cadence reviewer → next cleared block.
- Clear ahead — enqueue the architect to clear every pending block (keeps the buffer ahead).
- Wait — nothing dispatchable right now; re-enter on the next signal.
- Session end — only when the whole pipeline is settled.
A block is dispatchable iff cleared; dispatch flips it cleared → in-progress.
Anything no worker can clear — an operator-only task (deploys, secrets, production), an external
blocker, human eyes on a screen, a true impasse after the architect was consulted — is walled.
The block parks blocked, its slot frees, and TRON contacts you. You reply: resume, amend
(re-clear via the architect), or abandon. A blocked block holds the session open, not closed.
The LLM is asked exactly two questions into the flow, both schema-in / schema-out:
-
classify_message— put an inbound worker/operator message in exactly one tag. -
assess_wall— for an ambiguous input, is this really the operator's problem?
It never returns prose that steers a transition. Review verdicts, findings triage, and stall detection are not LLM calls — they're the architect's job or the engine's.
Each wake is one bounded tick: read inbound, advance as far as signals allow, persist atomically, exit. Dispatch intent is committed before any spawn, and messages are processed at-least-once — a crashed wake retries cleanly without double-spawning or losing work.
See also: Architecture · Operations.