Grammar unification — plan of record (CORE cannot read its own writing: 0/280) #128

Merged
core-labs merged 2 commits from docs/grammar-unification-plan into main 2026-07-26 23:19:00 +00:00
Owner

Docs-only. Plan of record for the grammar-unification arc, plus one finding that is a live user-visible defect on a ratified band.

The headline

CORE cannot read its own writing. 0/280, all refusing no_template_match. All six readers refuse all writer output — including CORE's own live served surfaces (24 refusals, 0 comprehensions).

Measured on main @ 9696443a

finding number
the writer that actually serves 8 format strings, no morphology/agreement/clause-joining
the good realizer (render_step, 232 ln) eval-only — 149 green fluency cases score a function that never speaks
linguistic word-tables 35 reading vs 9 writing, Jaccard 0.083
_IRREGULAR_PLURALS copies 3, all divergent — two of them both on the reading side
plural-subject agreement 9 of 26 WRONG (all wolves is defined a mammal)
fluency instrument passes "banana does the." on all 5 content predicates
eval cases exercising quantifier × copular 0 of 280 — the bug is structurally invisible to the suite

§1.7 — a ratified band serves malformed English today

in : All dogs are mammals. All mammals are animals. Therefore all dogs are animals.
out: Given: all dog are mammal; all mammal are animal. That's valid — all dog are animal follows.

render.py::_CATEGORICAL_PHRASE uses plural syntax ("all {s} are {p}") but interpolates the reader's singularized entity ids, with no re-pluralization — because reader and renderer sit on opposite sides of the §1.3 seam. Affects every plural noun, regular or irregular; 4 of 47 ratified corpus cases that serve a categorical clause (ds-v1-0023/0024/0026/0028).

wrong=0 is not threatened — every verdict is correct. This is purely surface.

Compounding: the reader's plural table has 8 entries where the v3-MEM band's has 29, so wolves→wolve, knives→knive, leaves→leave, lives→live, +4 more. CORE's two readers disagree on 12 of 20 plurals. The wrong singulars don't break soundness (uniform deterministic bijection) but they're why the fix needs a shared table rather than a patch to one side.

Why this arc, not more curriculum

Six ratified, flag-ON deduction bands are reachable only through looks_like_deductive_argument = sentence-initial "therefore". "It rains. So the ground is wet, right?" → token dump. Each band widened what CORE can decide; none widened what a person can ask. The keyhole is a reading problem.

The central design decision

The instrument is the fix. Grammaticality cannot be measured without a grammar, so heuristic predicates will always fail the way §1.5 already does. Round-trip forces one artifact to both parse and generate. Positive and negative corpora are both load-bearing — round-trip proves mutual intelligibility, not English quality, and the plan says so explicitly so no future reader cites it as evidence of prose quality.

A correction I made to my own draft

An earlier draft asserted "Phases 1–3 cannot change serving behaviour." That was wrong, and it's the same shape as the mistakes this arc exists to fix: I classified a table as off-serving without asking which callers reach it. reader.py::_IRREGULAR_PLURALS is serving-reachable. Phase 2 is now split into 2A (off-serving, byte-identical lane SHAs) and 2B (serving tables + render fix, authorization-gated), and 2A ships a caller-provenance test so the check lives in the tree rather than in a reviewer's head.

Phases and gates

phase changes served output? gate
1 — instrument no local smoke/deductive
2A — off-serving tables no byte-identical lane SHAs
2B — serving tables + render fix yes authorization
3 — agreement defect no 26/26 oracle
4 — which realizer serves yes authorization
5 — round-trip + diversity yes authorization

§6 makes the next direction a measured fork, not an argument: if read_rate rises from unification alone, Phase 5 is next; if it stays near zero, the barrier is the MeaningGraph vs PropositionGraph type mismatch and the next arc is a graph-model ADR, explicitly not an extension of this plan. The plan pre-commits to the second being likelier, so the arc may honestly end at an ADR rather than at fluid prose.

Scope discipline

Phase 5 is deliberately unestimated until Phase 1 reports — the previous arc acquired an unreachable exit criterion by doing the opposite. The plan also does not claim Phases 1–4 produce human-like prose.

[Verification]: docs-only, no code touched. Numbers reproducible via scripts/measure_grammar_seam.py (lands with Phase 1).

Stacked: Phase 1 (feat/grammar-roundtrip-instrument) builds on this. Merge this first.

Docs-only. Plan of record for the grammar-unification arc, plus one finding that is a **live user-visible defect on a ratified band**. ## The headline CORE cannot read its own writing. **0/280**, all refusing `no_template_match`. All six readers refuse all writer output — including CORE's own live served surfaces (24 refusals, 0 comprehensions). ## Measured on `main` @ `9696443a` | finding | number | |---|---| | the writer that actually serves | **8** format strings, no morphology/agreement/clause-joining | | the *good* realizer (`render_step`, 232 ln) | **eval-only** — 149 green fluency cases score a function that never speaks | | linguistic word-tables | **35** reading vs **9** writing, **Jaccard 0.083** | | `_IRREGULAR_PLURALS` copies | **3**, all divergent — two of them *both on the reading side* | | plural-subject agreement | **9 of 26 WRONG** (`all wolves is defined a mammal`) | | fluency instrument | passes `"banana does the."` on all 5 content predicates | | eval cases exercising quantifier × copular | **0 of 280** — the bug is structurally invisible to the suite | ## §1.7 — a ratified band serves malformed English today ``` in : All dogs are mammals. All mammals are animals. Therefore all dogs are animals. out: Given: all dog are mammal; all mammal are animal. That's valid — all dog are animal follows. ``` `render.py::_CATEGORICAL_PHRASE` uses plural syntax (`"all {s} are {p}"`) but interpolates the reader's **singularized** entity ids, with no re-pluralization — because reader and renderer sit on opposite sides of the §1.3 seam. Affects every plural noun, regular or irregular; **4 of 47** ratified corpus cases that serve a categorical clause (`ds-v1-0023/0024/0026/0028`). **`wrong=0` is not threatened** — every verdict is correct. This is purely surface. Compounding: the reader's plural table has 8 entries where the v3-MEM band's has 29, so `wolves→wolve`, `knives→knive`, `leaves→leave`, `lives→live`, +4 more. **CORE's two readers disagree on 12 of 20 plurals.** The wrong singulars don't break soundness (uniform deterministic bijection) but they're why the fix needs a *shared* table rather than a patch to one side. ## Why this arc, not more curriculum Six ratified, flag-ON deduction bands are reachable only through `looks_like_deductive_argument` = *sentence-initial "therefore"*. `"It rains. So the ground is wet, right?"` → token dump. Each band widened what CORE can **decide**; none widened what a person can **ask**. The keyhole is a reading problem. ## The central design decision **The instrument is the fix.** Grammaticality cannot be measured without a grammar, so heuristic predicates will always fail the way §1.5 already does. Round-trip forces one artifact to both parse and generate. Positive *and* negative corpora are both load-bearing — round-trip proves mutual intelligibility, **not** English quality, and the plan says so explicitly so no future reader cites it as evidence of prose quality. ## A correction I made to my own draft An earlier draft asserted "Phases 1–3 cannot change serving behaviour." **That was wrong**, and it's the same shape as the mistakes this arc exists to fix: I classified a table as off-serving without asking which callers reach it. `reader.py::_IRREGULAR_PLURALS` *is* serving-reachable. Phase 2 is now split into **2A** (off-serving, byte-identical lane SHAs) and **2B** (serving tables + render fix, **authorization-gated**), and 2A ships a caller-provenance test so the check lives in the tree rather than in a reviewer's head. ## Phases and gates | phase | changes served output? | gate | |---|---|---| | 1 — instrument | no | local smoke/deductive | | 2A — off-serving tables | no | byte-identical lane SHAs | | 2B — serving tables + render fix | **yes** | **authorization** | | 3 — agreement defect | no | 26/26 oracle | | 4 — which realizer serves | **yes** | **authorization** | | 5 — round-trip + diversity | **yes** | **authorization** | §6 makes the next direction a **measured fork**, not an argument: if `read_rate` rises from unification alone, Phase 5 is next; if it stays near zero, the barrier is the `MeaningGraph` vs `PropositionGraph` type mismatch and the next arc is a graph-model **ADR**, explicitly not an extension of this plan. The plan pre-commits to the second being likelier, so the arc may honestly *end* at an ADR rather than at fluid prose. ## Scope discipline Phase 5 is **deliberately unestimated** until Phase 1 reports — the previous arc acquired an unreachable exit criterion by doing the opposite. The plan also does not claim Phases 1–4 produce human-like prose. `[Verification]`: docs-only, no code touched. Numbers reproducible via `scripts/measure_grammar_seam.py` (lands with Phase 1). Stacked: Phase 1 (`feat/grammar-roundtrip-instrument`) builds on this. Merge this first.
core-labs added 2 commits 2026-07-26 22:52:46 +00:00
CORE cannot read its own writing. Measured on main @ 9696443a:

- round-trip is 0/280 (0.0%) — all 280 writer-produced surfaces refuse
  with no_template_match; all six readers refuse all writer output,
  including CORE's own live served surfaces (24 refusals, 0 comprehensions)
- 35 word-tables on the reading path vs 9 on the writing path,
  Jaccard 0.083; three divergent _IRREGULAR_PLURALS tables, two of them
  both on the reading side
- 9 of 26 predicates produce wrong plural agreement
  ("all wolves is defined a mammal"); two single-point root causes
- the fluency instrument is decorative: "banana does the." passes all
  five content predicates, and 0 of 280 eval cases exercise the
  quantifier x copular combination that breaks
- the good realizer (render_step, 232 lines) is eval-only; 149 green
  fluency cases score a function that never serves

Central design decision: the instrument IS the fix. Grammaticality cannot
be measured without a grammar, so round-trip forces one artifact to both
parse and generate. Positive AND negative corpora are both load-bearing —
round-trip proves mutual intelligibility, not English quality.

Phases 1-3 cannot change serving; Phase 4 is authorization-gated. Phase 5
is deliberately unestimated until Phase 1 reports. Section 6 makes the
next direction a measured fork rather than an argument, and pre-commits to
the reading that the graph-model mismatch (MeaningGraph vs
PropositionGraph are not type-compatible) is the likelier barrier.

Refs: ADR-0264, ADR-0071/0072 (seeded variation reused for diversity)
Two additions found while designing Phase 1's projection.

1. NEW §1.7 — band v1b serves malformed surfaces today, user-visible:

     in : All dogs are mammals. All mammals are animals.
          Therefore all dogs are animals.
     out: Given: all dog are mammal; all mammal are animal.
          That's valid — all dog are animal follows.

   render.py::_CATEGORICAL_PHRASE uses plural syntax ("all {s} are {p}")
   but interpolates the reader's SINGULARIZED entity ids, with no
   re-pluralization step — because reader and renderer sit on opposite
   sides of the §1.3 seam. Affects every plural noun, regular or
   irregular; 4 of 47 ratified corpus cases that serve a categorical
   clause (ds-v1-0023/0024/0026/0028). wrong=0 is NOT threatened — every
   verdict is correct; this is purely surface.

   Compounding cause: the reader's plural table has 8 entries where the
   v3-MEM band's has 29, so wolves->wolve, knives->knive, leaves->leave,
   lives->live, halves->halve, loaves->loave, thieves->thieve,
   elves->elve. CORE's two readers disagree on 12 of 20 plurals. The
   wrong singulars do not break soundness (uniform deterministic
   bijection) but they are why cause 2 needs a SHARED table.

2. CORRECTED §4 — the earlier draft claimed "Phases 1-3 cannot change
   serving behaviour." That was wrong, and it is the same shape as the
   mistakes this arc exists to fix: I classified a table as off-serving
   without asking which callers reach it. reader.py::_IRREGULAR_PLURALS
   IS serving-reachable (comprehend -> to_syllogism -> v1b ->
   deduction_grounded_surface).

   New rule: a table is off-serving only when EVERY caller is proven
   eval-only. Phase 2 splits on that test into 2A (off-serving,
   byte-identical) and 2B (serving tables + the render fix,
   authorization-gated). Phase 2A now ships a caller-provenance test so
   this check lives in the tree, not in a reviewer's head.

Refs: ADR-0256 (band v1b), ADR-0258 (v3-MEM plural table)
core-labs merged commit 041c620283 into main 2026-07-26 23:19:00 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: core-labs/core#128
No description provided.