Skip to content

ADR-0004: The Crown — seat the Telos Layer over the Truth Engine - #52

Merged
mdheller merged 2 commits into
mainfrom
feat/crown-adr-telos-truth
Aug 3, 2026
Merged

ADR-0004: The Crown — seat the Telos Layer over the Truth Engine#52
mdheller merged 2 commits into
mainfrom
feat/crown-adr-telos-truth

Conversation

@mdheller

@mdheller mdheller commented Aug 3, 2026

Copy link
Copy Markdown
Member

What

Authors the Crown ADR (docs/adr/0004-crown-telos-truth-constitution.md) — the constitutional layer that seats the estate's Telos Layer over the Truth Engine, per the owner's flow diagram "Telos Layer (Divine Plan as Objectives+Constraints) → Truth Engine (Falsifiable, Auditable)" — plus a small deterministic conformance validator with teeth.

Consume-not-fork. This seats already-merged pieces by reference; it does not edit them.

How it seats the layers

Role Seated piece (merged)
Keter — objective "intelligence serves human flourishing", constraints non-domination/consent/dignity welfare-annealing WEA-1 (economic-prophet PR #59), the welfare-max-over-conserved-energy model — NOT control-max. Live data: prophet-platform apps/agentic-os-api/app/data.py
Da'at — acceptable-proof weights, harm-raises-burden thresholds; sets weights, cannot assert truth omnirisk/outcome-pricing weights + the-assay grades + counter-test-gate
Truth Engine — Artifact→Claim→Test-Obligation→Witness→Truth Record (multi-valued/temporal/adversary-aware) ts/src/discourse.ts + spec 14 + SILENT epistemic firewall (evidence-intake-kernel #2/#3) + Noetica counter-test detectors (PR #570) + Truth = Law × Evidence

The teeth (scripts/check-constitution.mjs, stdlib-only, no deps)

Cross-layer invariants that no single discourse.ts function sees, checked both directions (admit and void, for the declared reason):

  • VERIFIES a TruthRecord with a TestObligation + Witness/Attestation that is multi-valued+temporal+adversary-aware.
  • REJECTS D1 — Da'at asserting truth: a policy/weight record that manufactures a POS/true verdict is void (same rule as the firewall's affirming-the-consequent guard, eik Harden repo governance and add spec traceability #3).
  • REJECTS K1 — a control-telos is unconstitutional: a control/domination Keter objective (the SILENT-vs-welfare inversion) is void.
  • REJECTS a TruthRecord with no TestObligation (T1, unfalsifiable), no Witness (T2), or single-valued/atemporal (T3).
  • Refuses a degenerate corpus so D1/K1 can't be quietly removed while the check stays green.

Local run:

✓ constitution upheld — 10 records: 3 admitted, 7 voided, each by its declared invariant.
  Da'at-cannot-assert-truth (D1) and control-telos-unconstitutional (K1) both fired.

A negative control (flipping the control-max fixture to admit) turns the check red, confirming the teeth bite.

Wiring

  • check:constitution npm script; new constitution job in ts-ci.yml (no path filter, no install).
  • ADR + checker added to the required-governance-files gate in ci.yml.

Follow-ups (also filed as issues, seated under this constitution)

  1. Hygiene runtime is standard-rich/runtime-poor — no CTEST runner, no bias/calibration-passport producer, and an id-namespace drift (LOGFALL.ADHOMINEM.V1 0.1.0 vs LOGFALL.ADHOM.V2 1.3.0).
  2. XSEDE-PEP → estate program-execution-plan, seated under this constitution.

Seat the estate's constitutional layer per the owner's flow diagram
(Telos Layer: objectives+constraints -> Truth Engine: falsifiable,
auditable), consume-not-fork over already-merged pieces:

- Keter (Crown) objective = welfare-annealing WEA-1 (economic-prophet
  PR #59), NOT control-max; constraints non-domination/consent/dignity.
- Da'at = policy weights/thresholds (omnirisk/outcome-pricing, the-assay
  grades, counter-test-gate); it CANNOT assert truth.
- Truth Engine = ts/src/discourse.ts + spec 14 + SILENT epistemic
  firewall (evidence-intake-kernel #2/#3) + Noetica counter-test
  detectors (PR #570) + Truth = Law x Evidence.

Add scripts/check-constitution.mjs (deterministic, stdlib-only) + a
fixtures corpus as the teeth, wired into CI. It enforces the cross-layer
invariants no single discourse.ts function sees, both directions:
- REJECTS Da'at asserting a POS/true verdict (D1, = firewall
  affirming-the-consequent guard).
- REJECTS a control/domination Keter telos as unconstitutional (K1,
  SILENT-vs-welfare inversion).
- REJECTS a TruthRecord with no TestObligation / no Witness /
  single-valued+atemporal; ADMITS a falsifiable, witnessed,
  multi-valued+temporal+adversary-aware record.
- Refuses a degenerate corpus so D1/K1 can't be silently removed.

Records two follow-up gaps under this constitution: Hygiene runtime
(no CTEST runner / no passport producer / LOGFALL id drift) and
XSEDE-PEP -> estate program-execution-plan.
…(self-maintaining)

build-and-verify-dist is the only REQUIRED check on main and was pinned to the
self-hosted pool, which is currently online-but-not-dispatching (idle runners,
queued jobs) — stalling every PR incl. this constitutional ADR. It is a plain
node build (checkout/setup-node@20/npm install+typecheck+test+build+dist-verify)
with no self-hosted dependency, so it runs identically on GitHub-hosted runners
and is no longer blocked by the runner backlog. Same for the stdlib constitution
validator. This is the Day-2 self-maintaining fix: deterministic required checks
must not depend on a flaky pool.
@mdheller
mdheller merged commit 22c35c3 into main Aug 3, 2026
10 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant