# Programs That Learn — Methodology

Sub-hub of /pub/krons/research/. Same method as /pub/krons/agents/ (read
agents/CLAUDE.md first), applied to one question: when an LLM must make a
system better, should it write a program that learns, or edit weights?

## Core thesis

**Each approach brings exactly one orthogonal component.** The component
decides where the gradient stops, what the judge is, and what gets kept.
The rest follows.

## Research approach

1. Read the paper's method section and the code, not the abstract.
2. Name the orthogonal component. One sentence. If two approaches share
   it, one of them does not get a page.
3. Trace the loop: who proposes, what is fitted and by which optimizer,
   who judges, what is kept (single best, archive, library).
4. Find where it broke. Benchmarks ceilings, ablations, audits, failed
   replications, forgetting curves. Sourced. Every page has this section.
5. Compare cross-sectionally on the concept pages, never in a vacuum.

## Distillation rule

An approach earns a page only if it adds one component to one slot of
the loop. Name the component as a mechanism (noun phrase a builder can
pick up: "evaluation cascade", "trace reflection", "adjoint through the
solver"), then state what it gives, what it needs, and where it broke,
each in one sentence with a number. The reader's job is to combine
components; the page's job is to make each one liftable.

## Five lenses

Every approach page answers these, in this order:

1. **Orthogonal component** — the one thing no other approach has.
2. **Where the gradient stops** — the boundary between the continuous
   part (fitted by gradient or least squares) and the discrete part
   (searched by evolution, reflection, or enumeration). What crosses it:
   a score, a residual, text feedback.
3. **Data regime** — where it beats a black box (little data, hard
   constraints, exact evaluator) and where scale beats it.
4. **Validated usefulness** — numbers with table or figure cited.
   Independent replication if any. Production use if any.
5. **Where it failed** — minimum two sourced items. "No failure found"
   is allowed only after a search for critiques, and says so.

## Lanes

- **program-loop** — model fixed, program changes (FunSearch, AlphaEvolve,
  LLM-SR, DGM, ADAS, GEPA, DSPy/TextGrad, ASI-Arch).
- **weight-loop** — program fixed, weights change (SEAL, Titans/TTT,
  ROME/MEMIT).
- **substrate** — what makes a program fittable (SINDy, Neural ODE/JAX-MD,
  Scallop/DeepProbLog, DreamCoder/BPL, mechanistic biology).
- **cautionary** — documented failures (AI Scientist audit, model-editing
  collapse, LLM-SRBench ceiling).

## What gets emphasized

- The orthogonal component and what it forces.
- Numbers with sources. Ceilings as loudly as wins.
- Convergence: what several approaches agree on (archive of variants,
  exact evaluator, reflection over traces).
- Unsolved: the closed loop LLM → mechanism code → gradient fit →
  residual → LLM in a differentiable simulator. Nobody has claimed it.

## What gets omitted

- Marketing language. Feature lists. Claims from abstracts only.
- Anything that does not touch the loop (proposer, optimizer, judge, store).

## Writing

Shock over summary: lead with what surprises an expert. Invert to reveal
structure: "DGM edits code. SEAL edits weights. Same outer loop." Co-locate
evidence: each number next to its table. Terse. ASD-STE100: one word one
meaning, active voice, no idiom.

## Content structure

- `index.html` — Level-1 hub as a KIT: five loop slots (proposer, fitter,
  judge, store, signal), one card per approach = one component with
  gives / needs / breaks, then "combinations that exist" and "nobody has
  built" tables, then a by-lane glossary. Source of the cards:
  `~/workspace/programs-that-learn/components.py` (hand-distilled; edit
  there, never in HTML). A new approach needs an entry in `components.py`
  AND a `research/<slug>.md`; the slot is the one mechanism it adds.
- `map/` — the sourced overview (the original 2026-11-03 page).
- `<slug>/` — one approach page per orthogonal component, from
  `~/workspace/programs-that-learn/research/<slug>.md`, built by
  `~/workspace/programs-that-learn/build.py`. Edit the markdown, rebuild.
- `judge/`, `structure-search/`, `gradient-boundary/`, `forgetting/`,
  `data-regime/` — concept pages, cross-sectional.
- `comparison/` — decision matrix: "if you need X, use Y".
- `patterns/` — reusable loop patterns observed in more than one approach.
- `updates/` — dated entries; same protocol as agents/updates.

## Updates protocol

Research-worthy: new approach with a new orthogonal component; a
documented failure of an existing one; a replication result; a new
cross-approach pattern. Inline correction: numbers, links, versions.

## Style

hub.css only. Standard header: theme-toggle, back-btn. Components:
tldr-box, insights-box, insight, card, vs-grid, glossary, callout,
hub-footer. border-radius 3px. Trailing slashes on every internal link.
`krons:type research`, `krons:date` stamped on every page. Regenerate the
archive after changes:
`cd ~/public_html && uv run --python 3.14 --with jinja2 tools/catalogue/catalogue.py`.

## LLM-authored banner

One disclaimer, one shape: the `research-banner` that `assets/hub.js` injects under `.hub-subtitle`. Text is four words: `LLM-authored` tag + "Human-prompted, machine-assembled, unedited." It appears on every page with `<meta name="krons:type" content="research">` or `<meta name="krons:authored" content="llm">`. Never hard-code a disclaimer in HTML; never write another variant. New LLM-assembled hub, guide or research pages get one of the two meta tags. Human-written and art pages get neither.
