M0 — Trace contract (chatty-trace)
Linear: AGE-5 · Crate:
chatty-trace · Promotion: pending
No single paper — this is the contract layer every optimizer reflects on.
Why it exists
AFlow, GEPA, ACE, and DGM all optimize against traces, not final answers alone. Chatty already ships a ReAct loop, ATIF v1.6 export, and token budgeting. M0 adds:
- Per-module attribution — which prompt produced each step (GEPA credit assignment)
- ATIF round-trip —
Deserializepath so reflection reads trajectories back in FeedbackFn— scalar + natural-language feedback per module (GEPA’sµ_f)
Chatty mapping
| Paper concept | Chatty location | Status |
|---|---|---|
Trajectory (thought, action, observation)* | chatty-trace::Trajectory | Reserved — human writes |
Action::Language (ReAct’s  = A ∪ L) | chatty-trace::Action | Reserved |
Per-step ModuleId | Extension over AtifStep | To build |
| ATIF export | chatty-core exporters (Serialize-only today) | Round-trip in M0 |
| Trace retention | Recorder trait, no-op in release | To build |
| Train vs validation rollouts | RolloutBudget over token_budget/ | To build |
Capture attaches to the existing loop via rig-agent hooks + rig-tap — no
hand-rolled agent loop.
Eval protocol
Stage A: HotpotQA run produces a Trajectory that round-trips; two seeded runs on a
warm cache are byte-identical.
Stage B: Harbor runs consume exported ATIF; attribution must survive export/import.
Production landing
| Mechanism | Likely promotion |
|---|---|
No-op Recorder in release | Default |
| Full step retention | Setting (TrainingSettingsModel.atif_auto_export already exists) |
FeedbackFn implementations | Offline / optimizer only |
Reserved symbols (human only)
Trajectory, Step, Action, Outcome, FeedbackFn — see RESERVED.md.
Depends on
Further reading
chatty-traceREADME — crate scope (the pre-Stage-A promise page is archived)- Production bar (AGE-26)