What exists on disk, who writes it, who reads it. The ledger is the one record
everything meta computes over; manifests are the commissioning contract; everything else is
the slow, additive knowledge plane. If a fact about the system's behavior is not derivable
from the ledger, the system does not know it.
↳ system/specs/LEDGER.md · system/specs/CHANNELS.md · system/ops/DEPLOYMENT.md §2
candidate-registered §3.1
Written the moment a proposal enters any gate's field of view. Registration precedes judgment; nothing is judged that was not first registered.
key fields: gate · direction_key · proposal_ref · epoch
↳ system/specs/LEDGER.md:80
verdict §3.2
The output of any orienter — gate script, reviewer, values gate, tier-arbiter.
verdict ∈ {pass, kill, block}: pass = survived elimination; kill = eliminated on the standard;
block = stopped by boundary (values, budget, cooldown, console hold) — blocks name their blocker in reason.
key fields: gate · direction_key · verdict · standard_version · reason · counted · distinct_runs · distinct_provenance · pairs
KILL RULE a verdict with no standard_version is invalid
↳ system/specs/LEDGER.md:89
commit / decommit §3.3
Permanent state changed: a page published, a worker commissioned, a directive updated, a standard amended. decommit is its reversal (retirement, unpublish, rollback).
key fields: artifact_id · artifact_kind · gate · qualified_ref
↳ system/specs/LEDGER.md:104
outcome §3.4
Post-publication ground truth — the substrate of all improvement measurement.
event is an observable: an impression count, a click, a ranking position, a citation, a backlink acquired, a 404, a Core Web Vitals number.
key fields: artifact_id · event · value · observed_at · source
KILL RULE opinion-typed outcome records are KILLED at ingest
↳ system/specs/LEDGER.md:114
alarm §3.5
A meter crossed a baseline: drift, staleness, canary degradation, invalid-record kill, loop-closure hole.
severity ∈ {info, warn, critical}. Bad news survives compression: alarms are never deleted, downgraded, or reworded by downstream condensers (V3).
key fields: meter · baseline_ref · observed · threshold · severity
↳ system/specs/LEDGER.md:129
trial §3.6
Two records, strictly ordered: pre-registration, then result.
key fields: phase · trial_id · hypothesis · champion · challenger · metric · sample_size · win_margin · samples · champion_score · challenger_score · verdict · margin_achieved
VOID the pre-registration must exist in the ledger BEFORE the first trial sample is collected; a result whose trial_id has no earlier pre-registration record is invalid and the trial is VOID
VOID sample_size and win_margin are frozen at pre-registration; a result reporting a different sample size or a post-hoc margin is invalid · verdict ∈ {champion-holds, challenger-wins, void}
↳ system/specs/LEDGER.md:135
escalation-forward §3.7
A decision moved up the ladder.
key fields: escalation_id · from · to · category · evidence_refs · deadline_epochs
BLOCKED the four ML contact categories are enforced here: an escalation-forward with to: "ML" and a category outside the four is itself blocked and alarmed
↳ system/specs/LEDGER.md:154
escalation-bounce §3.7
A decision returned down the ladder with instructions — the bounce half of escalation-forward / escalation-bounce.
key fields: escalation_id · from · to · category · evidence_refs · deadline_epochs
↳ system/specs/LEDGER.md:154
grant §3.8
Access changed hands. action ∈ {granted, revoked, released}. granted_by is always ML or a key custodian ML named — access is granted, never derived (V4). Grants have no silent renewals; expiry emits an alarm if the grantee still holds the credential.
key fields: grantee · scope · action · granted_by · expires
↳ system/specs/LEDGER.md:160
heartbeat §3.9
status ∈ {ok, degraded} + detail. The only type permitted an empty provenance list. Silence-detecting workers are never retired on silence; heartbeats are how silence is measured.
key fields: status · detail
↳ system/specs/LEDGER.md:166
A worker is three artifacts — and exists only when all three do
cron job
the heartbeat — schedule is a valve setting read from ramp config, not a constant
+
manifest
manifests/<worker>.yaml — the commissioning record, a COMMIT: class, model assignment, channels, death condition, consequence tier
+
directive
.workers/directives/<worker>.md — the job know-how the worker owns; improved only through the gated improvement loop
An unwired worker is not commissioned. Uncommissioned = any undefined endpoint:
one missing, null, or unverifiable channel key and the worker does not run — schedulers refuse to schedule it,
gates kill its proposals as malformed:uncommissioned-proposer, and its existence is a census finding.
There is no partially-wired grace state.
↳ system/ops/DEPLOYMENT.md:90–124 · system/specs/CHANNELS.md:143–146
The four channels — CLOSED, not undefined
| Channel | Direction | Carries |
broadcast_up | worker → its manager | Reports, findings, proposals, heartbeats, escalations. Captured — the manager (or a condenser) provably consumes it; broadcast into a void is uncommissioned. |
listen_up | manager → worker | Directives, verdicts on the worker's proposals, bounced escalations, config. |
broadcast_down | worker → its reports | Assignments, standards, delegated verdicts. CLOSED for leaves. |
listen_down | reports → worker | Subordinate output the worker consumes. CLOSED for leaves. |
Every worker has exactly four channel endpoints — not three, not "whatever it needs."
A leaf worker does not omit its down-channels; it declares them CLOSED. Closed is a wired state; undefined is a defect —
undefined is where information leaks. Sideways is up-then-down: peer-to-peer channels are forbidden; coordination between
cousins routes up to the lowest common ancestor and back down. Workers communicate by verdicts, never shared memory.
↳ system/specs/CHANNELS.md:12–31
Discord = display mirror, never transport. RESOLVED (ML, F8 — reversed from the draft lean):
the broadcast surface into Discord is deliberately GIGANTIC. Every worker's broadcast-up is mirrored to a
Discord channel so ML can watch the whole workforce work — it aids visualization and evaluation of the workforce.
Discord mirrors are display, never transport: the captured path/ledger endpoint
remains the endpoint of record that parents and the funnel read; a Discord outage loses nothing. The default is
everything visible.
↳ system/specs/CHANNELS.md:66 · system/ops/DEPLOYMENT.md §5
Directives
The per-worker job know-how — one job, adjacent jobs excluded. Referenced by the worker prompt every run.
lives: .workers/directives/<worker>.md
writes: the gated improvement loop only (directive updates are commits)
reads: the worker itself, every scheduled run
↳ ops/DEPLOYMENT.md §3
Playbooks
Domain playbooks including the security playbook — which ships with the system, not discovered per-deployment.
lives: docs/playbooks/
writes: gated merges from the improvement loop; blitz research cold-starts them
reads: workers whose directives reference them; the red team files findings here
↳ ops/DEPLOYMENT.md §2 · seo/SECURITY.md §7
Metrics & baselines
Quality series on the ledger plus commit-time baselines — what drift sentinels compare against.
lives: data/ (ledger-derived series) + scripts/ meters
writes: monitoring-layer scripts (measure-it, arithmetic over the ledger)
reads: drift sentinels, diagnosers, the funnel's condensers
↳ corpus/LOOP-CLOSURE.md §3 · ops/DEPLOYMENT.md §2
Condition reports
All self-knowledge findings aggregated mechanically — SK-18 Condition-Compiler; findings, never actions.
lives: self-knowledge output consumed by the funnel
writes: SK-18 Condition-Compiler (mechanical aggregation only)
reads: the Executive Brief's condensers, the command center
↳ corpus/BLUEPRINT.md SK-18
Qualified queues
Gate output that survived elimination, appended never overwritten (fixes the v1 clobber race, audit R9). Force-passed keys enter with forced: true and full ledger mirroring.
lives: data/gates/qualified/<gate>.jsonl
writes: gatelib write_qualified, gate scripts only
reads: executors — consuming a direction marks it consumed
↳ specs/GATES.md §3
Console files
ML's console: force-pass, hold, demote, steer — available always, required never. Every console act is ledger-mirrored.
lives: data/gates/console/
writes: ML only
reads: every gate via apply_console, on every run
↳ specs/GATES.md · ops/DEPLOYMENT.md §2
Manifests
One per worker — the commissioning record: class, model assignment (a commit), channels, death condition, consequence tier. Retired manifests are marked retired:, never deleted.
lives: manifests/<worker>.yaml
writes: the commissioning routine, after the commissioning gate passes
reads: podrun preflight, the census audit, the wiring drift audit
↳ ops/DEPLOYMENT.md §3 · specs/CHANNELS.md §2
Channel files
Append-only JSONL with the same discipline as the ledger: one message per line, UTC timestamps, no mutation. Channels carry work; the ledger carries record.
lives: data/channels/<worker>/…jsonl
writes: exactly the declared writer (permission-checked, preflight C3)
reads: the declared captured_by counterpart of record
↳ specs/CHANNELS.md §2
The ledger itself
THE record — append-only verdicts + outcome records. Everything meta reads here: monitoring is arithmetic over this file, self-knowledge is set reconciliation over it, the Executive Brief is compression of it.
lives: data/ledger/ledger.jsonl + segments/YYYY-MM-DD.jsonl
writes: one writer per stream, lockfile-guarded, append + fsync
reads: everything meta — monitors, SK sweeps, condensers, gates
↳ specs/LEDGER.md §1 · ops/DEPLOYMENT.md §2