Implements the 4-phase documentation reorganization master plan. - Consolidation: Merged brief/, handoff/, planning/, and decisions/ into briefs/, handoffs/, plans/, and adr/ respectively (101 ADRs relocated) - Root Cleanup: Relocated HANDOFF-gpt55-*.md and key top-level docs (runtime_contracts.md, etc.) to canonical folders. Added superseded alerts. - Indices & Navigation: Created docs/README.md navigation document, docs/sessions/README.md index, docs/adr/README.md index - Note: Also includes prior commit adding ADR-0200+ corpus hygiene governance (ADR-0225, dependency map, backfilled cross-references)
7.7 KiB
ADR-0113 — Rename expert-demo → audit-passed; Reserve expert for Future Capability Tier
Status: Accepted Date: 2026-05-22 Author: CORE agents + reviewers Depends on: ADR-0106, ADR-0109, ADR-0110, ADR-0111, ADR-0112
Context
ADR-0106 introduced the expert-demo ledger status as a contract-gated
promotion above reasoning-capable. ADR-0110 / ADR-0111 promoted
mathematics_logic and physics to that status. ADR-0112 added a
runnable per-domain showcase (core demo expert --domain <id>).
The word "expert" carried an unintended implication: that a domain at
expert-demo had been demonstrated at expert-level capability (i.e.
raw task performance comparable to a human domain expert). The gate
does not verify that. The gate verifies that a domain has cleared
the CORE claim contract:
- Domain Pack Contract v1 — all nine ADR-0091 predicates pass.
- A reviewer-signed evidence-bundle SHA-256 reproduces byte-for-byte from on-disk lane result files (ADR-0106 §1.5).
- The lane outputs satisfy CORE-specific claim shapes:
- signed digest — every claim reproduces from disk
- replay determinism — same inputs → byte-equal trace_hash
- typed refusal — fabrication is refused, not paraphrased
- exact recall — no ANN, no cosine, no attention-bottleneck
- grounding-source provenance — every surface tags its origin
These are claim shapes a transformer-based LLM structurally cannot produce, regardless of how high its raw accuracy is on the same benchmark. A frontier LLM might score higher on the raw answers but cannot pass this contract because it cannot produce a digest that re-derives, cannot guarantee typed refusal, cannot emit a trace hash bound to a deterministic execution, cannot replay byte-equal.
That is the load-bearing claim. "Expert-demo" obscured it. "Audit-passed" names it.
The framing is due to Codex's review (see PR #125 thread): the real story is not "this domain is expert-level" — it is "this domain's results have been audited against the CORE claim contract, signed, and are replay-reproducible."
Decision
Rename (semantics-only scope)
The following user-visible identifiers are renamed:
| Surface | Before | After |
|---|---|---|
| Ledger status string | "expert-demo" |
"audit-passed" |
| Predicate key on ledger row | predicates.expert_demo |
predicates.audit_passed |
| Reason key on ledger row | expert_demo_reason |
audit_passed_reason |
docs/reviewers.yaml top-level key |
expert_demo_claims |
audit_passed_claims |
| CLI demo target | core demo expert --domain X |
core demo audit-passed --domain X |
| Generated artifact JSON name | expert_demo.json |
audit_passed.json |
| Generated artifact HTML name | expert_demo.html |
audit_passed.html |
| Default output directory | evals/expert_demos/<id>/ |
evals/audit_passed/<id>/ |
| HTML title | CORE Expert-Demo: <id> |
CORE Audit-Passed: <id> |
Kept (internal Python identifiers, not user-facing)
The following internal names are deliberately unchanged to minimize churn under this ADR's "semantics-only" scope:
- Module names:
core/capability/expert_demo.py,core/demos/expert_demo.py - Function names:
evaluate_expert_demo,derive_evidence_digest,build_expert_demo,run_expert_demo,_load_registry_for_expert_demo - Class names:
ExpertDemoClaim,ExpertDemoVerdict - Method names on
ReviewerRegistry:expert_demo_claim_for - Dataclass field names:
ReviewerRegistry.expert_demo_claims - ADR file titles: ADR-0106 / ADR-0107 / ADR-0110 / ADR-0111 / ADR-0112 retain their "expert-demo" titles as historical records
- Test class/method names that include "expert_demo": Python identifiers, retained
A future ADR may rename these internal identifiers if desired; that is explicitly out of scope here.
Future expert namespace reserved
The word expert (and any "expert" ledger status string above
"audit-passed") is reserved for an actual raw-capability claim
backed by a domain-specific capability lane with a human-expert-calibrated
threshold. The current ADR establishes no such tier and no such gate.
ADR-0114+ may define it when there is evidence to gate on.
The status ordering remains a 5-tuple:
blocked → seeded → grounded → reasoning-capable → audit-passed
A future expert tier would extend this to 6 entries; that extension
requires its own ADR and is out of scope here.
Invariants
adr_0113_ledger_status_string_is_audit_passed
ledger_report() reports "audit-passed" (not "expert-demo") for
every domain whose contract gate passes. Pinned by every existing
ADR-0110 / ADR-0111 / capability-reports test that was updated to the
new vocabulary.
adr_0113_yaml_key_is_audit_passed_claims
load_reviewer_registry reads from the audit_passed_claims YAML key.
The legacy expert_demo_claims key is not accepted (hard cut, no
backwards-compat read). Tested by test_reviewer_registry.py.
adr_0113_audit_passed_does_not_imply_capability
The audit-passed status string carries no claim about raw task
performance vs. external benchmarks. It is a CORE-claim-contract
compliance status. This invariant is documentary (enforced by the
README + ADR text, not by code).
adr_0113_expert_namespace_reserved
No ledger row carries predicates.expert and no "expert" status
string is emitted by ledger_report(). Tested by the existence of
exactly five statuses in _EXPERT_DOMAIN_STATUSES.
Acceptance evidence
Accepted when:
_EXPERT_DOMAIN_STATUSES[-1] == "audit-passed"incore/capability/reporting.pypredicates.audit_passed(notexpert_demo) is the key on every ledger rowdocs/reviewers.yamltop-level key isaudit_passed_claimscore demo audit-passed --domain mathematics_logicand--domain physicsboth produceall_claims_supported=Truewith digest match- All test suites that previously asserted the old strings now assert the new strings (or accept both in transitional cases like the historical ratification tests)
- README, ADR-0091..0112 narrative refs, runtime_contracts,
capability_roadmap updated to the new vocabulary (with explicit
gloss on what
audit-passedactually means) - Generated artifacts are renamed (
audit_passed.{json,html}); the default output directory isevals/audit_passed/<id>/
Consequences
- The ledger now tells the honest story.
audit-passedaccurately names the load-bearing CORE-vs-LLM claim (audit-shape compliance) and reserves "expert" for an actual capability claim if/when one ever lands. - External readers can no longer infer "this domain is expert-level" from the status string. They must read the gloss: audit-passed = signed digest + replay determinism + typed refusal + exact recall — claim shapes a transformer cannot structurally produce.
- The future
experttier has clean namespace. ADR-0114 may define it paired with a domain-specific capability lane (e.g. GSM8K for math). - ADR-0106 + ADR-0109 contract bodies are unchanged. The gate's mechanics are identical; only the names move.
- Generated artifacts under
evals/audit_passed/<id>/are still gitignored per ADR-0112.
Out of scope
- Renaming internal Python identifiers (module / function / class names). A separate ADR may do that.
- Defining the
experttier aboveaudit-passed. ADR-0114+. - Backward-compatibility reading of the old
expert_demo_claimsYAML key. Hard cut. The repo is the single source of truth and ships with the new key. - Re-rendering the ADR-0099 public showcase. That demo composes pre-existing scene adapters and is unaffected.
- The
core demo expertCLI command. Replaced bycore demo audit-passed. No alias.