Control plane
The Enoch control plane is the runtime authority for queued work. It owns dispatch decisions, pause and maintenance controls, worker preflight, publication automation, events, and the bounded read models that the operator dashboard consumes. For current runtime topology and storage authority, see current runtime snapshot. When the store backend is Postgres, the same operator questions are answered from bounded SQL read models rather than full-table scans. Raw states still exist for debug and compatibility, but they should not drive the first-screen workflow.What it owns
- Queue and run state — queue items move through execution, callback, blocked, paused, and terminal states.
- Dispatch safety —
/control/dispatch-nextchecks whether a candidate can launch and supports dry-run requests. - Pause and maintenance controls —
/control/pause,/control/resume, and the related state expose operator intent. - Worker preflight —
/control/api/preflightand/control/worker/preflightcall the worker-gate API before live dispatch. - Publication automation — paper records and automation records support drafting, checklist updates, status transitions, finalization packaging, and artifact reads.
- Bounded read models —
/control/dashboardand/control/api/v1/*answer operator questions with paginated, capped views. - Events and projections — the control plane stores audit events and exposes control-plane projections, with legacy Notion compatibility views only when that sync path is enabled.
What the dashboard shows first
Dashboard V2 (/control/dashboard-v2) is the canonical React/TypeScript operator shell, merged to main as of 2026-05-21. It leads with bounded operator cards:
- What needs my attention?
- What is running?
- What can be written?
- What can be finalized?
- What is ready to publish?
- What is already imported?
/control/api/v1/* read models.
Read-model semantics
The dashboard and the v1 read models separate operator questions from raw evidence.operator_countsandoperator_detail_countsdrive the primary cards and drill-downs.paper_pipeline.write_neededmeans actionable positive paper work only.paper_pipeline.raw_completed_no_paper_candidatesis informational/debug only.paper_pipeline.not_writable_by_decision_gatecounts completed rows that the decision gate rejects.paper_pipeline.publish_readymeans finalized drafts that still need a corpus-import ledger row.paper_pipeline.published_importedmeans the paper is already represented in the corpus-import ledger.