Implement the eval infrastructure defined in ADR-0016 before building new eval lanes. This establishes the discipline that governs the entire capability roadmap. - Generic eval framework (evals/framework.py): lane discovery, versioned scoring, result persistence - Cognition lane retrofitted into new convention: 45 cases split into stratified dev (13) / public v1 (13) / holdout (19) sets with contract, runner, and recorded results - Generalized `core eval <lane>` CLI: dynamic lane discovery, --list, --version, --split, --save, --json flags - Holdout runner scaffold: plaintext fallback, encryption interface ready - Baseline runner scaffold: pluggable frontier model interface - Fix: CognitiveTurnPipeline.run() crashed on turn_log[-1] when the unknown-domain gate returned a stub without appending to turn_log - ADR-0016, eval_methodology.md, PROGRESS.md, capability gates session log Phase 0 exit audit found two methodology issues: 1. Pipeline turn_log crash (fixed here) 2. Versor drift in multi-turn sessions (pre-existing, under investigation)
340 lines
21 KiB
Markdown
340 lines
21 KiB
Markdown
# Capability Roadmap — Phased Plan to the Verifiable Competence Gates
|
||
|
||
**Status:** Draft, derived from `docs/sessions/SESSION-2026-05-15-capability-gates.md`
|
||
**Owner:** Joshua Shay
|
||
**Last updated:** 2026-05-15
|
||
|
||
This document walks CORE from its present state through the gating framework defined in the 2026-05-15 session. It is organized into six phases. Each phase has entry criteria, work items, exit criteria, and a benchmark discipline contract.
|
||
|
||
The benchmark discipline is the spine of the plan. Without it, the phases become aspirational. With it, "are we there yet" becomes a CLI question.
|
||
|
||
---
|
||
|
||
## Part I — Benchmark Discipline (read first)
|
||
|
||
The gates are only meaningful if the evals that prove them are honest. Five rules govern every eval lane in this roadmap. They apply uniformly; no exceptions per phase.
|
||
|
||
### Rule 1 — Three-set split per lane
|
||
|
||
Every lane maintains three disjoint corpora:
|
||
|
||
- **Dev set.** Freely visible during development. Used to iterate.
|
||
- **Public test set.** Visible, but tuning against it is forbidden. Scored at version-cut time only. Drift in dev-vs-public scores is a red flag for overfitting.
|
||
- **Private holdout.** Sealed. Never read by Claude, never committed in plaintext, only scored by a clean-room runner at release events. Stored encrypted in `evals/holdouts/` with key held by the human reviewer.
|
||
|
||
If a lane has only a dev set, it does not count as a gate. It is exploration.
|
||
|
||
### Rule 2 — Versioned difficulty escalation
|
||
|
||
Each lane has versions: `v1`, `v2`, `v3`, … with monotonically harder distributions. Passing a version is not a terminal state; it is a checkpoint that unlocks generating the next version.
|
||
|
||
- **v1** — baseline competence demonstration. The construction is shown clearly.
|
||
- **v2** — distributional shift: longer chains, deeper nesting, rarer vocabulary, paraphrased surface forms.
|
||
- **v3** — adversarial: items generated specifically by inspecting model failures on v2.
|
||
- **v4+** — out-of-distribution: items drawn from domains, registers, or constructions not present at training time.
|
||
|
||
Score is always reported as a tuple `(v1_score, v2_score, v3_score, …)`, never collapsed to a single number. A model that scores 99% on v1 and 12% on v3 is not a "99% model."
|
||
|
||
### Rule 3 — Adversarial regeneration on pass
|
||
|
||
When a model passes a version (e.g., ≥95% on the public test set with ≥90% on private holdout), the next version is *generated by adversarial process*:
|
||
|
||
- Human review finds construction families the model handled accidentally rather than structurally.
|
||
- A separate generator (could be a different model, could be programmatic) produces items targeting the weakest decile of the previous version.
|
||
- The new version is reviewed for legitimacy — no impossible items, no ambiguous items, no items that depend on world knowledge the system was never given.
|
||
|
||
This is the protection against silent overfitting: every passed version triggers the construction of a harder one, so "progress" requires continuously rising scores against continuously harder tests.
|
||
|
||
### Rule 4 — Frontier baseline tracking
|
||
|
||
For each lane, a baseline score is computed for at least one frontier transformer-based model (e.g., Claude Opus 4.7, GPT-5, Gemini 3 Ultra) on the *same* public test set. Baselines are:
|
||
|
||
- Re-scored every time a version is cut.
|
||
- Published alongside CORE's score.
|
||
- Never tuned, never prompted-engineered to maximize — the prompt is the eval task as written.
|
||
|
||
This serves two purposes: (a) it makes CORE's structural wins visible (frontier models score near zero on provenance, monotonic learning, etc.); (b) it prevents self-congratulation on lanes where CORE merely matches an LLM that was given no advantage.
|
||
|
||
### Rule 5 — Honest reporting
|
||
|
||
- Failures are reported with the same prominence as passes.
|
||
- Confidence intervals on every score (bootstrapped over the test set).
|
||
- Per-construction breakdowns published — never a single aggregate hiding structural failures.
|
||
- Regressions across versions are surfaced, never silently dropped.
|
||
- "Did not test" is a valid result; "tested and failed" is preferred over "did not test."
|
||
|
||
If a number cannot be reported honestly under these rules, the lane is not ready. Do not ship the lane.
|
||
|
||
### Eval contract template
|
||
|
||
Every eval lane lives in `evals/<lane_name>/` with this layout:
|
||
|
||
```
|
||
evals/<lane_name>/
|
||
contract.md # what the lane measures, scoring rubric, pass thresholds
|
||
dev/ # dev set, freely visible
|
||
public/v1/ # public test set, version 1
|
||
public/v2/ # public test set, version 2
|
||
...
|
||
holdouts/ # encrypted, sealed
|
||
runner.py # deterministic scorer
|
||
baselines/ # frontier model scores per version
|
||
results/ # CORE scores per version per release
|
||
```
|
||
|
||
A lane without a `contract.md` does not run.
|
||
|
||
---
|
||
|
||
## Part II — The Phases
|
||
|
||
### Phase 0 — Benchmark methodology lock-in
|
||
|
||
**Entry criteria.** Today.
|
||
|
||
**Goal.** Build the discipline infrastructure before building any new eval. Doing this first prevents the entire roadmap from drifting into vibes-based progress.
|
||
|
||
**Work items.**
|
||
|
||
1. Implement `evals/` layout convention above.
|
||
2. Implement `core eval <lane>` CLI subcommand that loads contracts, runs the runner, writes results.
|
||
3. Implement the holdout-runner: a sandboxed process that decrypts the sealed test set, scores, writes only the aggregate score (never item-level results) back to the working tree.
|
||
4. Implement baseline-runner: a thin adapter that queries a frontier model on the public test set and records its score.
|
||
5. Write the methodology page in `docs/eval_methodology.md` (this Part I, extracted).
|
||
6. Pick one *existing* eval (the current `core eval cognition`) and retrofit it into the new convention as a forcing function. Versions become explicit; holdout is split out; results are reported per-version.
|
||
|
||
**Exit criteria.**
|
||
|
||
- `core eval cognition` runs under the new convention, with v1 public + private holdout + baseline.
|
||
- No new lane is allowed to be merged that does not follow the convention.
|
||
- The retrofit revealed at least one item-level methodology issue (silent ambiguity, leaked dev item, unstated assumption) — caught and documented. If the retrofit found nothing, the audit was not real.
|
||
|
||
**Duration estimate.** 1–2 weeks of focused work.
|
||
|
||
---
|
||
|
||
### Phase 1 — Foundational Triple
|
||
|
||
**Entry criteria.** Phase 0 exit complete.
|
||
|
||
**Goal.** Implement and pass the three gates that determine whether CORE is ready to move from engineering into curriculum:
|
||
|
||
- **grammatical-coverage** (fluency)
|
||
- **zero-code-domain-acquisition** (engineering-vs-learning phase shift)
|
||
- **identity-divergence** (identity is load-bearing)
|
||
|
||
**Work items.**
|
||
|
||
**1.1 grammatical-coverage**
|
||
|
||
- Enumerate target grammatical constructions for English v1: simple declarative, negation, conjunction, disjunction, embedded clause, relative clause, quantification (universal/existential), basic tense (past/present/future), basic aspect (perfective/imperfective).
|
||
- For each construction, write contract test pairs: `PropositionGraph → expected surface family`. "Expected surface family" is a set of acceptable surfaces, not a single string, with a deterministic acceptance predicate.
|
||
- Implement v1 dev/public/holdout (target: ~50/50/50 items).
|
||
- Engineer `realizer.py` to pass v1.
|
||
- Once v1 ≥95% public and ≥90% holdout, generate v2 (deeper nesting, rare vocabulary substitution, longer sentences).
|
||
- Repeat for Hebrew and Koine Greek using their respective pack morphology.
|
||
|
||
**1.2 zero-code-domain-acquisition**
|
||
|
||
- Define three "surprise domains" never touched in development: pick from {kinship relations, basic arithmetic, simple spatial relations, color taxonomy, calendar relations}.
|
||
- Each domain has a pack-only authoring kit: vocabulary, relation predicates, axiom list, ~20 reviewed teaching examples, ~30 articulation prompts.
|
||
- Test: an author who knows the system but is forbidden from editing Python attempts to bring CORE to ≥80% articulation accuracy on the prompts using only pack + teaching loop.
|
||
- Each Python edit required is a logged "engineering gap" that goes onto the closing list.
|
||
|
||
**1.3 identity-divergence**
|
||
|
||
- Define two identity axis sets, deliberately oriented to produce different stances on the same proposition (e.g., axis-A weights novelty highly, axis-B weights tradition highly; or axis-A is precision-first, axis-B is generosity-first).
|
||
- Curate a shared curriculum: ~100 reviewed teaching events, identical for both agents.
|
||
- Curate a prompt set where identity should produce measurably different articulations.
|
||
- Scoring: an automated divergence metric (e.g., proposition-graph difference) plus a coherence metric (each output must be internally consistent with its own axes).
|
||
- Pass: divergence above floor, coherence above floor, *both required*.
|
||
- Also: identity-stripped baseline. The same curriculum with identity disabled should produce articulations whose divergence is at noise floor — proving identity is doing the work.
|
||
|
||
**Exit criteria.**
|
||
|
||
- All three lanes pass v1 on public + holdout.
|
||
- The engineering-gap list from 1.2 is either empty or has a documented closing plan.
|
||
- v2 generation has been attempted for at least one of the three.
|
||
|
||
**Duration estimate.** 4–8 weeks. The realizer work in 1.1 is the bottleneck and may expose deeper engineering gaps.
|
||
|
||
---
|
||
|
||
### Phase 2 — Structural Wins Made Visible
|
||
|
||
**Entry criteria.** Phase 1 exit complete.
|
||
|
||
**Goal.** Build the lanes where CORE's architecture wins by design. These should pass relatively early *for CORE* and fail catastrophically *for frontier baselines*. The purpose is to publish the contrast.
|
||
|
||
**Lanes:**
|
||
|
||
- **provenance** — every articulated claim back-points to vault entries / teaching events / pack axioms; replay reproduces trace bit-for-bit.
|
||
- **monotonic-learning** — after N teaching cycles across unrelated domains, competence on domain 1 does not regress. Longitudinal: ≥10 teaching cycles, scored at each step.
|
||
- **calibration** — out-of-pack queries produce typed "no grounding" responses; in-pack queries do not. Distinguish "I don't know" / "incoherent" / "contradicts known."
|
||
- **symbolic-logic** — nested negation, modal operators (must/may/possible/necessary), counterfactual conditionals. Target ≥99% on v1.
|
||
- **adversarial-identity** — 1,000-turn red-team corpus; identity drift below noise floor.
|
||
|
||
**Work items.**
|
||
|
||
- Build each lane following the convention.
|
||
- Compute frontier baselines for each. Expected outcomes:
|
||
- **provenance** — CORE: pass. Frontier: near-zero (no model can produce verifiable per-claim provenance).
|
||
- **monotonic-learning** — CORE: pass by construction. Frontier: regression visible after fine-tuning rounds (this requires the frontier baseline to actually be fine-tuned, which complicates the comparison — may be reported as "not directly comparable, structural argument applies").
|
||
- **calibration** — CORE: high if calibration is wired; frontier: confabulates on most OOD prompts.
|
||
- **symbolic-logic** — CORE: target ≥99% v1; frontier: ~80% v1, collapses on v3.
|
||
- **adversarial-identity** — CORE: target drift below noise; frontier: persona erodes within ~50–100 turns.
|
||
- Publish results page with per-lane comparison.
|
||
|
||
**Anti-overfitting note.** The structural wins are *structural* — the temptation to declare victory after v1 is large. Discipline: v2 and v3 must still be generated and scored. A "structural win" that fails on v3 is a structural claim that was actually a v1 coincidence.
|
||
|
||
**Exit criteria.**
|
||
|
||
- All five lanes have v1 + v2 results published with frontier baselines.
|
||
- At least two lanes have v3 results.
|
||
- The contrast page is honest about which results are "directly comparable" vs. "structural argument."
|
||
|
||
**Duration estimate.** 8–12 weeks. provenance and monotonic-learning may require new instrumentation in `vault/` and `teaching/`.
|
||
|
||
---
|
||
|
||
### Phase 3 — Reasoning Depth
|
||
|
||
**Entry criteria.** Phase 2 exit complete. This is the hardest phase. Expect engineering surprises.
|
||
|
||
**Goal.** Lanes that probe whether CORE actually *thinks* rather than retrieves and articulates.
|
||
|
||
**Lanes:**
|
||
|
||
- **compositionality** — novel combinations of taught primitives. SCAN/COGS-style splits adapted to proposition graphs.
|
||
- **inference-closure** — derive entailments never directly asserted (transitive, spatial, temporal, causal chains).
|
||
- **introspection** — `explain(turn_id)` produces a natural-language account that round-trips: a separate run conditioned on the explanation predicts the same articulation.
|
||
- **multi-step-reasoning** — pipeline produces and consumes intermediate proposition-graph states for problems whose solution requires ≥3 inferential hops.
|
||
- **cross-domain-transfer** — competence in domain B rises after teaching only in domain A, via shared structural elements.
|
||
|
||
**Work items.**
|
||
|
||
These will almost certainly expose engineering gaps. Expected gaps:
|
||
|
||
- `generate/graph_planner.py` may need an intermediate-state stack rather than a single planning pass (multi-step-reasoning).
|
||
- `field/propagate.py` may need to expose derivable-but-not-asserted recall paths (inference-closure).
|
||
- A new `cognition/explain.py` module may be needed for introspection.
|
||
- Cross-domain transfer may require examining how proposition graphs share structural sub-units, which may be a pack-design question more than a code question.
|
||
|
||
For each gap discovered, the work splits: (a) write the eval, (b) confirm it fails, (c) close the engineering gap, (d) re-run.
|
||
|
||
**Anti-overfitting note.** Compositionality is *the* lane most vulnerable to overfitting. The training-test split must be done by *construction family*, not by sampling. If the model has seen `R(A,B)` and `R(C,D)`, the test set must use a *novel relation R'* applied to seen entities — not a fresh `(A,B)` pair under a seen `R`.
|
||
|
||
**Exit criteria.**
|
||
|
||
- All five lanes have v1 results with honest scores (which may be failing — that's acceptable for v1).
|
||
- Each failure has either a closed engineering gap or a documented architectural deferral.
|
||
- At least two lanes are passing v1 by phase exit.
|
||
|
||
**Duration estimate.** 12–24 weeks. This is the phase that decides whether CORE's design lives up to its philosophical claims.
|
||
|
||
---
|
||
|
||
### Phase 4 — Scale and Efficiency
|
||
|
||
**Entry criteria.** Phase 3 exit complete. Phases 1–3 are pass/fail; this phase is *quantitative curves*.
|
||
|
||
**Goal.** Make CORE's quantitative behavior visible: how fast does it learn, how does cost scale, how does it compose at scale.
|
||
|
||
**Lanes:**
|
||
|
||
- **sample-efficiency** — corrections-to-competence curves across ten unrelated concepts. Plot, do not threshold.
|
||
- **long-context-cost** — vault size vs. per-turn latency curve at 10³, 10⁴, 10⁵, 10⁶ entries. Identify the asymptotic complexity. Decide indexing strategy if super-linear.
|
||
- **multi-agent-composition** — two CORE instances with different identities cooperate on a shared task; each maintains its own deterministic replay. Measure: task completion, replay determinism preserved per agent, no identity bleed.
|
||
|
||
**Work items.**
|
||
|
||
- Build infrastructure for longitudinal measurement (Phase 2's monotonic-learning runner is a starting point).
|
||
- Sample-efficiency requires running the teaching loop programmatically with controlled correction budgets.
|
||
- Long-context-cost may surface that the current `vault/store.py` is insufficient at scale — the response is exact indexing (B-tree, suffix array, signature-based bucketing), not approximate recall.
|
||
- Multi-agent composition surfaces orchestration questions that may justify a new module (`society/` or similar) — defer unless the eval forces it.
|
||
|
||
**Anti-overfitting note.** Curves don't overfit the way thresholds do, but they can be selectively reported. Discipline: publish the full curve, not just the best operating point. Confidence intervals at each data point.
|
||
|
||
**Exit criteria.**
|
||
|
||
- Sample-efficiency curves published for ≥10 concepts.
|
||
- Vault cost curve published with asymptotic analysis. Indexing strategy decided.
|
||
- Multi-agent composition demonstrated for ≥2-agent cooperation with replay preserved.
|
||
|
||
**Duration estimate.** 8–16 weeks.
|
||
|
||
---
|
||
|
||
### Phase 5 — Curriculum Era
|
||
|
||
**Entry criteria.** Phase 4 exit complete. From this point forward, engineering changes are exceptional, not routine. The work is curriculum design, reviewed teaching, and domain-specific evals.
|
||
|
||
**Goal.** Acquire human-comparable competence across school-level subjects, classical literature, foundational sciences, and the three foundational languages at fluency.
|
||
|
||
**Structure.**
|
||
|
||
The phase has no single exit criterion. Instead, each domain becomes its own sub-phase with its own evals:
|
||
|
||
- **5.1 English fluency** — pack + curriculum sufficient that grammatical-coverage v5 (out-of-distribution registers: legal, poetic, technical, conversational) passes.
|
||
- **5.2 Hebrew fluency** — analogous, with attention to root-and-pattern morphology.
|
||
- **5.3 Koine Greek fluency** — analogous, with attention to case and aspect.
|
||
- **5.4 Elementary mathematics** — number, arithmetic, basic algebra, geometry. Each topic becomes a pack + a domain-specific competence eval.
|
||
- **5.5 Foundational physics** — kinematics, conservation, basic mechanics.
|
||
- **5.6 Foundational biology** — taxonomy, cell, system.
|
||
- **5.7 Classical literature** — reading comprehension at increasing complexity, eventually approaching the John 1:1–2 grounding case as a depth probe.
|
||
- *(further sub-phases as curriculum expands)*
|
||
|
||
**Discipline during this phase.**
|
||
|
||
- Every new domain ships with its own competence eval following the convention.
|
||
- The Phase 1–4 lanes are re-run on every release. A new domain that causes regression in a foundational gate is a curriculum bug, not a curriculum success.
|
||
- Frontier baselines are re-scored periodically; the contrast remains visible.
|
||
|
||
**This phase has no estimated duration.** It is the phase the project lives in after the engineering era ends. Frontier-LLM parity on breadth happens *inside* this phase if it happens at all — likely measured in years, not weeks, and at whatever sample efficiency Phase 4 demonstrated.
|
||
|
||
---
|
||
|
||
## Part III — Cross-Cutting Considerations
|
||
|
||
### Versioning of the framework itself
|
||
|
||
This roadmap is `v1`. As phases complete, the framework may itself need amendment — new lanes added, methodology refined. Treat the roadmap with the same discipline as the evals: version it, never silently rewrite it. Each amendment is dated and explained.
|
||
|
||
### Scope decisions deferred
|
||
|
||
Two scope decisions named in the 2026-05-15 session remain open and will be pinned before they cause drift:
|
||
|
||
- **Agency** — responsive vs. goal-directed. Defaulting to *responsive* for Phases 0–4. Phase 5 may revisit.
|
||
- **Embodiment** — symbolic-only vs. sensorimotor. ADR-0013 establishes the sensorium protocol; this roadmap does not assume sensorium-dependent gates in Phases 0–4. Phase 5 may add sensorium-dependent sub-phases.
|
||
|
||
Two further questions emerged during Phase planning that should be decided early:
|
||
|
||
- **Tool use.** Is the pipeline extensible to typed deterministic operators (calculator, search, code execution)? Decision needed before Phase 3, since multi-step-reasoning may benefit from operator delegation.
|
||
- **Code generation.** Is code a first-class proposition-graph articulation target? Decision needed before Phase 5 if computer-science is a curriculum domain.
|
||
|
||
### What this roadmap is not
|
||
|
||
- Not a list of features. The features fall out of the gates.
|
||
- Not a competitive roadmap against frontier LLMs. The contrast is a side effect, not a target.
|
||
- Not a commitment to dates. The duration estimates are calibration aids, not deliverable schedules.
|
||
- Not a substitute for the work-sequencing list in `CLAUDE.md`. That list governs daily work; this document governs the arc.
|
||
|
||
### Failure modes to watch for
|
||
|
||
- **Vibes-based progress.** "It feels smarter" is not a gate.
|
||
- **Demo-driven development.** Crafting a single impressive interaction is not progress; passing a sealed holdout is.
|
||
- **Teaching-set leakage.** If the same content appears in pack, teaching, and eval, scores are uninterpretable.
|
||
- **Frontier envy.** Trying to match frontier LLMs on lanes where they structurally win (e.g., long-tail stylistic breadth) compromises the lanes where CORE structurally wins.
|
||
- **Lane proliferation.** Adding lanes is cheap; maintaining honest holdouts is expensive. Resist new lanes unless they probe a distinct capability.
|
||
|
||
---
|
||
|
||
## Part IV — Immediate Next Actions
|
||
|
||
1. Decide whether this roadmap is promoted to an ADR (likely `ADR-0016`).
|
||
2. Stub `docs/eval_methodology.md` as the extracted Part I (it's the contract every lane inherits).
|
||
3. Begin Phase 0: implement `evals/` convention, retrofit `core eval cognition` into it.
|
||
4. Pin the *agency* scope decision in writing before Phase 3 begins.
|
||
5. Pin the *tool use* scope decision in writing before Phase 3 begins.
|
||
|
||
Phase 0 starts when the human reviewer signs off on this roadmap. The first measurable signal of progress is the `core eval cognition` retrofit landing under the new convention.
|