core/docs/handoff/NEXT-SUBJECTS-CHATGPT-HANDOFF.md
Shay 95bf0dfa60 docs(handoff): next-subjects readiness brief for ChatGPT (GitHub-connector lane)
Execution-free brief for the read-only GitHub-connector lane: comprehension-
primitive inventory, question-layer gap survey, subject-readiness recommendation,
then gated capability-axis/ADR/corpus drafts. Proposal-only; serving stays frozen
(wrong=0, pinned lanes). Companion to the Claude execute/validate/commit lane.
2026-05-31 08:19:12 -07:00

204 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Handoff: Next-Subjects Readiness (ChatGPT / GitHub-connector lane)
**Audience:** ChatGPT operating with **read-only GitHub access** (mobile).
**Author:** Claude Code session, 2026-05-30.
**Status:** Active brief. Self-contained — read this file, then execute one task at a time.
---
## 0. What you (ChatGPT) can and cannot do here
You have a **GitHub connector** and nothing else. That means:
- ✅ You can **read and search** any file in `AssetOverflow/core`.
- ✅ You can **reason, synthesize, and draft** new content.
- ❌ You **cannot** run code, run tests, run the CLI, or prove anything empirically.
- ❌ You **cannot** change serving behaviour or evaluation scores.
Therefore **every deliverable in this brief is an execution-free artifact**:
a Markdown analysis, a taxonomy, a draft spec, or a draft data file. Empirical
validation (running `core test`, checking the `wrong=0` invariant, wiring code)
happens **later, in the Claude Code lane, on WiFi**. Your job is the read →
analyze → draft half. Claude's job is the execute → validate → commit half.
### How to return work
For each deliverable, output a **complete file** in a fenced code block, with the
intended repo path on the first line as a comment/heading, e.g.:
````
# FILE: docs/analysis/comprehension-primitive-inventory.md
<full contents>
````
The operator (Shay) will paste it into the repo, or hand it to Claude to land.
**If — and only if — your connector can open issues or PRs**, you may instead
file each deliverable as a GitHub issue titled `[next-subjects] <task id>`; do
**not** push commits directly.
---
## 1. What CORE is (orientation — read `CLAUDE.md` for the full version)
CORE is a **deterministic cognitive engine**: `listen → comprehend → recall →
think → articulate → learn → replay`. It is **not** an LLM wrapper. It decodes
structure that is already present in the input; it does not sample text.
Load-bearing invariants you must respect in everything you draft:
1. **`wrong = 0` is sacred.** On the real-GSM8K serving metric the engine is
allowed to *refuse* but never to answer *wrong*. Current serving score:
**6 correct / 44 refused / 0 wrong** on `evals/gsm8k_math/train_sample/v1`.
Nothing you propose may create a path that could answer wrong.
2. **Serving is frozen until ratified.** The serving path is pinned by
`scripts/verify_lane_shas.py` and `CLAIMS.md`. Do not propose edits to
serving modules; propose **new** files only.
3. **Decoding, not generating.** Every proposal must answer: *does this teach
the engine to find/comprehend structure better* — not *does this store another
canned answer*. (See the project thesis: "decoding, not generating.")
4. **No synthetic-corpus overfitting.** Hand-authored corpora are
**validation-only / held-out probes**, rich in hard negatives. They are never
training/tuning targets. (A past lesson: a 150-case templated set moved the
synthetic metric massively but real GSM8K barely moved — surface-cue overfit.)
5. **Proposal-only.** ADR drafts are `Status: Proposed (draft)`, never
`Accepted`. Corpora go under a `proposed/` subfolder. Nothing is wired.
6. **ADR numbers collide easily.** The highest ADR is currently **0195**.
Many operators work in parallel. **Do not hard-assign a number.** Title your
ADR drafts `ADR-XXXX — <title>` and let Claude assign the number at land time.
(We just spent a session fixing a real 0194 collision. Don't recreate one.)
---
## 2. Why we're doing "next subjects" now (and the honest caveat)
The math (GSM8K) frontier is currently **composition-bound**: single-capability
widenings are metric-inert; the wall is *composing* comprehension primitives and,
specifically, the **question-extraction layer**. The heavy lifting there needs
the CLI + test lanes (WiFi + Claude).
So while that waits, this lane does work that is **(a) genuinely safe** (read +
draft, reversible, touches nothing live) and **(b) opportunistically chosen to
feed back into the math** by clarifying which comprehension primitives are
subject-general vs math-specific.
**Honest caveat (do not skip):** `CLAUDE.md` explicitly warns against *"broad
docs-first churn."* This brief is scoped to avoid that. The early tasks are
**analysis that directly informs the math frontier** (high leverage, low volume).
Corpus/ADR drafting is a **gated later phase** that only proceeds if the analysis
shows it's warranted. If you find yourself generating large volumes of
speculative scaffolding, **stop and flag it** — that's the failure mode.
---
## 3. Map of what already exists (read these first; don't reinvent)
- `CLAUDE.md` — the constitution. Read it.
- `docs/decisions/` — all ADRs (0001…0195) + `README.md` narrative.
- `evals/` already contains:
- `gsm8k_math/``train_sample/` (the real metric), `practice/` (sealed),
`confusers/` (discrimination probes). **This is your structural template.**
- `math_capability_axes/``G1_verb_classes`, `G2_comparatives`,
`G3_numerics`, `G4_multi_clause`, `G5_aggregate` (+ `README.md`). The
capability-axis pattern already exists — extend its shape, don't invent a new one.
- `symbolic_logic/` — a logic lane **already exists**. Survey it before
proposing any logic work.
- `identity_divergence/`, `calibration/`, `confusers/`.
- `generate/derivation/` — the comprehension composer:
`extract.py` (quantity/lexeme extraction), `clauses.py` (segmentation),
`compose.py` / `accumulate.py` (referent-scoped combination),
`multistep.py` / `search.py` (bounded search), `verify.py` (the `wrong=0`
self-verification gate), `pool.py`, `product_bridge.py`.
- `generate/math_candidate_graph.py`, `generate/math_candidate_parser.py`,
`generate/recognizer_anchor_inject.py` — the serving recognizer→injection→graph spine.
- `CLAIMS.md` + `scripts/verify_lane_shas.py` + `scripts/generate_claims.py`
the serving-frozen gate.
> Note: `binding_graph` is **in-flight in branches, not on `main`**. Do not cite
> it as an existing path; if you see it referenced, treat it as future work.
---
## 4. The tasks (do them in order; one deliverable each)
### TASK A — Comprehension-Primitive Inventory & Cross-Subject Leverage Map *(highest priority; directly helps math)*
**Read:** `generate/derivation/*.py`, `generate/math_candidate_parser.py`,
`generate/recognizer_anchor_inject.py`, `generate/math_candidate_graph.py`,
and skim the ADRs they reference.
**Produce:** `docs/analysis/comprehension-primitive-inventory.md` — a table of
every reusable comprehension primitive the math substrate uses
(entity extraction, quantity extraction, unit grounding, clause segmentation,
referent/pronoun binding, question-frame parsing, completeness gate, round-trip
filter, branch-disagreement gate, …). For each: a one-line description, the file
it lives in, and a column **"subject-general vs math-specific?"** with a short
justification. End with a 5-bullet **"what transfers to other subjects"** summary.
**Why it helps math:** it makes the composition wall legible and tells us which
primitives a new subject could exercise for free.
**Definition of done:** every primitive maps to a real file/function you actually
read; no invented APIs.
### TASK B — Question-Layer Gap Survey *(directly helps math)*
**Read:** the question-parsing logic in `generate/math_candidate_graph.py` and
related parsers; `evals/gsm8k_math/train_sample/v1/report.json` (the per-case
`reason` strings for the 44 refused cases).
**Produce:** `docs/analysis/question-layer-gap-survey.md` — group the 44 refused
cases by **why the question clause failed to parse/bind** (e.g. aggregate "how
many… in total", residual "how many are left", rate "how much per…", multi-step,
comparative target, …). Rank the groups by (count × estimated tractability).
This is the prioritized backlog for the math question-layer work.
**Definition of done:** every refused case id is assigned to exactly one group;
counts sum to 44; no claim that a case "would pass" — only *why it currently doesn't*.
### TASK C — Subject Readiness Survey + Recommendation *(decides scope for D+)*
**Read:** `evals/symbolic_logic/`, `evals/math_capability_axes/`,
`docs/decisions/README.md`, and ADRs touching logic (search "0123") and
capability axes (search "0131").
**Produce:** `docs/analysis/next-subjects-readiness.md` — for each candidate
subject below, state: what substrate already exists, which primitives from
Task A it would reuse, what's missing, and a **risk-to-`wrong=0`** note. Then
recommend an ordering. Candidate subjects to assess (you may add one, with
justification):
1. **Deductive / symbolic logic** (extend `evals/symbolic_logic/` — coherence-aligned, deterministic).
2. **Reading comprehension / referent binding** (exercises exactly the math composition-wall primitives: coreference, clause binding, question frames).
3. **Measurement / geometry math axis** (natural extension of `math_capability_axes`).
**Definition of done:** a clear recommended order with the cross-leverage to the
math frontier made explicit. **Stop here and wait for the operator to confirm the
subject before doing Task D.**
### TASK D — Capability-Axis Spec for the chosen subject *(gated on C)*
**Only after the operator confirms a subject.** Mirror the
`evals/math_capability_axes/` shape: produce `docs/analysis/<subject>-capability-axes.md`
enumerating the axes (analogous to G1…G5), each with: the primitive it tests, a
refusal-first acceptance note, and 23 illustrative items. **No corpus files yet.**
### TASK E — Draft ADR for the chosen subject *(gated on D)*
Produce `ADR-XXXX — <subject> comprehension lane (proposed)` as a Markdown draft
in the repo's ADR style (read 23 recent ADRs first for format). `Status:
Proposed (draft)`. It must state the `wrong=0` trust boundary, the eval lane it
would add (validation-only, sealed), and the invariant that proves the field
stays valid. **Leave the number as `XXXX`.**
### TASK F (optional, small) — Held-out probe corpus draft *(gated on E)*
A **small** (≤20 item) `evals/<subject>/proposed/cases.jsonl` draft, hard-negative
rich, mirroring the `gsm8k_math` case schema (read
`evals/gsm8k_math/train_sample/v1/cases.jsonl` for the exact field shape).
Clearly marked validation-only. Keep it small — this is a shape demo, not a corpus.
---
## 5. Hard "do not" list
- ❌ Do not propose edits to anything under `generate/`, `core/`, `chat/`,
`field/`, `vault/`, `algebra/`, or any serving/eval-scoring path.
- ❌ Do not modify `evals/gsm8k_math/**`, `CLAIMS.md`, or `report.json`.
- ❌ Do not assign a concrete ADR number.
- ❌ Do not mark anything `Accepted`/`Implemented`.
- ❌ Do not author large corpora or tune anything to surface cues.
- ❌ Do not claim empirical results ("this passes", "wrong stays 0") — you can't
run anything. Say "expected, to be verified in the Claude lane."
## 6. Handback checklist (what Claude picks up on WiFi)
For each artifact you return, Claude will: assign ADR numbers, run
`core test --suite smoke -q` + the relevant lanes, verify `wrong=0`, and land via
PR. Make that easy: keep each deliverable a single self-contained file with its
target path on line 1, and list at the bottom of each artifact the **"open
questions for the Claude lane"** you couldn't resolve read-only.