Two-session arc where engine derives connective+object from corpus decomposition; operator ratifies rather than authors. Distinguishes from learning-loop (operator-authored) and directly exercises W-018 checkpoint contemplation and W-017 auto-proposal provenance path.
3.3 KiB
ADR-0152 — Learning-Arc Demo (core demo learning-arc)
Status: Accepted
Implements: W-019
Depends on: ADR-0150 (W-018 checkpoint contemplation), ADR-0151 (W-017 auto-proposal)
Context
ADR-0055..0057 ships core demo learning-loop, which demonstrates the full cold-turn
→ discovery → operator-authored proposal → accept → grounded surface arc. In that
demo the operator supplies the connective, object, and evidence reference for the
proposed chain.
W-018 and W-017 together enable a new capability: the engine enriches discovery candidates through autonomous contemplation at checkpoint and can generate proposal structures without operator-crafted connective or object.
A new demo is needed to make this distinction observable and falsifiable.
Decision
core demo learning-arc (evals/learning_arc/run_demo.py) scripts five scenes:
-
S1 — Cold session:
ChatRuntime(auto_contemplate=True, engine_state_path=tmpdir)turns with an ungrounded prompt. Checkpoint enriches the emitted candidate viacontemplate()and persists toengine_state/discovery_candidates.jsonl. -
S2 — Checkpoint enrichment: Read the persisted candidate. Assert it carries
polarity,claim_domain, andsub_questionspopulated bycontemplate(). Assert the engine's_decompose()enumerated(narrative, cause, reveals, meaning)as a candidate chain from existing corpus shapes. -
S3 — Engine-authored proposal: Build the full chain candidate using the engine-derived connective (
reveals) and object (meaning) from_decompose()output. Add the corpus evidence reference (cause_creation_reveals_meaning) that the engine found as the shape template.propose_from_candidatewithsource.kind="contemplation". Replay gate runs. -
S4 — Operator ratifies:
accept_proposalagainst a transient corpus. Active corpus is byte-identical before and after. Provenance:adr-0057:discovery_promoted. -
S5 — Session 2 grounded: Same prompt against transient corpus →
grounding_source == "teaching", surface contains subject / connective / object.
The distinction from learning-loop
| learning-loop | learning-arc | |
|---|---|---|
| Connective source | operator | engine (_decompose) |
| Object source | operator | engine (_decompose) |
| Evidence ref | operator | engine (corpus shape match) |
source.kind |
"operator" |
"contemplation" |
| Operator action | author + ratify | ratify only |
Trust boundary
- Writes only to
tempfile.mkdtemp()directories (engine state, proposal log, transient corpus) - Active corpus on disk is byte-identical before and after (
active_corpus_byte_identicalasserted) - No LLM calls, no stochastic sampling, no approximation
Falsifiable claims
test_learning_arc_demo.py (11 tests) pins:
learning_arc_closed— before grounding_source ≠ "teaching", after == "teaching"active_corpus_byte_identical— no corpus mutationengine_chain_foundin S2 — decomposition found(narrative, cause, reveals, meaning)source_kind == "contemplation"in S3replay_equivalentin S3 — replay gate passed, no regressiontransient_lines_after == transient_lines_before + 1in S4before["surface"] != after["surface"]— measurable change on same prompt