core/evals/deduction_serve
Shay 0a17c49693 refactor(learning): extract the ratified-ledger bridge from its three instances (ADR-0263)
Phase 3.3 of the generalization arc. Estimation (ADR-0175), deduction
serving (ADR-0256) and curriculum serving (ADR-0262) had each written the
same seal -> ratify -> SHA-verify -> serve-gate machinery. core/ratified_ledger.py
now owns it and states the four rules once: only sealed practice writes;
tamper-evidence is structural (a load that cannot reproduce content_sha256
REFUSES); ceilings are not negotiable at the call site; absent evidence is
never a license.

Each capability keeps a thin adapter that names its artifact and preserves
its public API. One real difference is now declared rather than implied:
missing_ok distinguishes a ledger a capability SHIPS with (absence = broken
deployment, refuse) from one whose practice volume is still being built
(absence = nothing earned yet, serve disclosed) — curriculum serving is the
second kind today.

Safety property is byte-identity, asserted not assumed: re-sealing the
committed 25-band deduction ledger through the bridge reproduces it
byte-for-byte, so no artifact and no lane pin moves.

Effect: a new subject arena now needs a gold corpus and a band key, not a
re-implementation of ratification — which is what §3 meant by sequencing
the bridge ahead of the second subject.

[Verification]: tests/test_ratified_ledger_bridge.py 8 passed; core test
--suite deductive 252 passed; estimation/license test set 355 passed;
committed deduction ledger byte-identical after reseal.
2026-07-24 14:45:16 -07:00
..
practice refactor(learning): extract the ratified-ledger bridge from its three instances (ADR-0263) 2026-07-24 14:45:16 -07:00
v1 feat(deduction-serve): Band v2-EN — natural-English argument serving, earned licenses (ADR-0257) 2026-07-23 14:37:50 -07:00
v2_condmem feat(deduction-serve): Band v4-CM — conditional-membership fusion, decided (ADR-0259) 2026-07-24 10:14:00 -07:00
v2_en feat(deduction-serve): Band v3-MEM — member-chain band, Socrates syllogism decided (ADR-0258) 2026-07-23 19:21:41 -07:00
v2_exist feat(deduction-serve): Band v6-EX — existential witnesses, decided (ADR-0261) 2026-07-24 14:14:37 -07:00
v2_member feat(deduction-serve): Band v6-EX — existential witnesses, decided (ADR-0261) 2026-07-24 14:14:37 -07:00
v2_verb feat(deduction-serve): Band v5-VP — verb-predicate arguments, decided (ADR-0260) 2026-07-24 12:51:36 -07:00
__init__.py feat(deduction-serve): Phase 2 — end-to-end eval lane, SHA-pinned wrong=0 gate 2026-07-23 12:36:59 -07:00
contract.md feat(deduction-serve): Band v6-EX — existential witnesses, decided (ADR-0261) 2026-07-24 14:14:37 -07:00
report.json feat(deduction-serve): Band v6-EX — existential witnesses, decided (ADR-0261) 2026-07-24 14:14:37 -07:00
runner.py feat(deduction-serve): Band v6-EX — existential witnesses, decided (ADR-0261) 2026-07-24 14:14:37 -07:00