Spreads the four remaining Phase 3 lanes to map the full reasoning-
depth surface alongside inference-closure (already landed at e509e0d).
Each lane is a v1 honest probe per the roadmap; engineering work
follows once the full surface is visible.
Results across all five Phase 3 lanes:
lane split primary signal foundation
inference-closure public/v1 0.0 1.0 / 1.0
inference-closure holdouts/v1 0.0 1.0 / 1.0
compositionality public/v1 0.0625 (1/16) 1.0 / 1.0
compositionality holdouts/v1 0.0 1.0 / 1.0
multi-step-reasoning public/v1 0.0 1.0 / 1.0
multi-step-reasoning holdouts/v1 0.0 1.0 / 1.0
introspection public/v1 0.0 (no api) n/a
introspection holdouts/v1 0.0 n/a
cross-domain-transfer public/v1 0.0 1.0 / 1.0
cross-domain-transfer holdouts/v1 0.0 1.0 / 1.0
Foundation guarantees (storage + replay) intact across every lane
that has them. The reasoning-depth signal is uniformly zero. The
five lanes triangulate four architectural gaps:
Gap 1. generate/graph_planner.py has no transitive composition.
Gap 2. field/propagate.py has no derivable-but-not-asserted recall.
Gap 3. core/cognition/explain.py module does not exist.
Gap 4. no structural-pattern recogniser (cross-subdomain transfer).
Gaps 1, 2, 4 cluster on the same code surface and may close together
as a single bounded PR. Gap 3 is independent module-creation work.
Lane scaffolding mirrors inference-closure (contract.md, runner.py,
dev + public/v1 + holdouts/v1 cases.jsonl, baselines/v1_structural_zero.json,
gaps.md). All runners are parallel-safe and use the standard
run_lane(cases, *, config, workers) interface.
Per-lane gaps.md records the engineering shape for v2 plus future
directions worth not forgetting:
- compositionality/gaps.md: metaphor is compositionality with
selective property transfer; building it is correctly downstream
of closing this lane.
- cross-domain-transfer/gaps.md: metaphor + narrative as
cross-domain operators; narrative requires the Agency open-scope
decision to pin first.
- introspection/gaps.md: explain API is also the substrate for
first-person narrative self-account.
Recommended v2 sequence in docs/PROGRESS.md:
1. Pin Agency + Tool-use open-scope decisions (deadline: before
Phase 3 engineering).
2. Engineer Gaps 1 + 2 as one bounded PR.
3. Engineer Gap 3 independently.
4. Re-author cross-domain-transfer v2 with matched-control
contract refinement.
Phase 3 v1 exit: 0/5 lanes passing, which is the expected v1 floor.
CLI suites smoke / cognition / teaching pass; no regression on
Phase 2.
3.4 KiB
compositionality eval lane
What it measures
Whether CORE generalises across construction families: relation patterns and entity sets seen at teaching time should compose into novel (relation, entity) combinations at probe time, even though the specific combination was never taught directly.
This is the lane the roadmap flags as most vulnerable to overfitting
(docs/capability_roadmap.md Phase 3, anti-overfitting note). The
split below honours that warning:
Training (teaching turns) Test (probe)
R1(A, B), R1(C, D) R1(A, D) — seen entities, novel pair R2(A, B), R2(C, D) R2(C, B) — same R3(E, F), R3(G, H) R3 applied to seen entities only ... (NEVER teach (A, D) under R1)
The probe asks for the entailment under a relation the model has seen with both endpoints — but never with this specific pair.
Why it matters
Frontier LLMs compose well because their training set already contains nearly every short combination of common entities and relations. CORE's claim is stronger and harder: that the algebraic structure of the proposition graph itself supports composition, without requiring the specific combination to have been seen. This lane tests that claim.
Patterns covered (v1)
| Pattern | Construction-family rule |
|---|---|
novel_pair_under_seen_relation |
R(A,B) and R(C,D) taught; probe R(A,D). Pass = response references D (the seen RHS under R applied to seen LHS A). |
novel_relation_on_seen_pair |
R(A,B) and R'(C,D) taught with A, B, C, D independently grounded; probe R'(A,B). Pass = response references the chain-derived target under R'. |
composed_predicate |
is(A,B) and precedes(B,C) taught; probe asks What does A precede? Pass = response references C. |
Each pattern relies only on the existing
en_core_cognition_v1 relation vocabulary (is, causes,
precedes, follows, grounds, belongs_to, means, reveals,
contrasts_with).
Sub-metrics
M1. compositional_token_hit— the expected composed-entity token appears insurfaceorwalk_surface(case-insensitive, token-bounded).M2. premises_stored— all teaching turns produce proposals.M3. replay_determinism— two fresh runs match bytrace_hash.M4. no_taught_pair_leakage— the construction-family split is enforced at authoring time (verified by the lane runner: every probe is checked against the premise list to ensure the probe's exact(R, A, target)triple does NOT appear verbatim).
A case passes when M1 AND M2 AND M3 hold. M4 is a structural authoring check (true by construction); the runner reports it for audit.
Overall pass thresholds (v1)
compositional_recall_rate(M1) ≥ 0.50premises_stored_rate≥ 0.95replay_determinism≥ 0.95
This lane is built knowing the same graph_planner and
field/propagate gaps that the inference-closure lane surfaced will
likely cause v1 to fail uniformly. v1's value is to score the gap
per pattern so the future v2 engineering can target the right one.
Anti-overfitting
- Public split uses one entity set; holdouts uses a disjoint set.
- No probe's
(R, A, target)triple is ever a verbatim premise. - Patterns differ structurally between splits to avoid template memorisation.