Why
Post-trained RLM roots learn against a scaffold, not against an abstract "RLM" interface. Prompt templates, REPL globals, capability names, terminal semantics, truncation, errors, and budgets jointly form the model-facing ABI. A rollout is not reproducible or safe to use for training unless it records that resolved contract.
Droste already has versioned runner/source protocols, prompt-pack identity, and a unified Trace ABI. The missing public contract is one immutable, content-addressed manifest that identifies the exact scaffold and inference configuration that produced a rollout or that a checkpoint expects.
Scope
- Define a strict, versioned
ScaffoldManifest / RolloutManifest schema containing at least:
- Droste engine version and source revision when available;
- runner, source, kernel/capability, trace, and prompt-pack ABI versions;
- resolved prompt-pack ID, revision, profile, and content hash;
- model-visible globals/capability manifest and its hash;
- terminal, output-truncation, refinement, repair, and extraction contract identities;
- root and subcall model IDs/immutable revisions;
- sampling parameters, output limits, budgets, timeout, concurrency, and seed;
- parent/child identity semantics for subcalls.
- Produce the manifest once at run start after all defaults and overrides resolve.
- Include its ID/hash in startup, result/replay, and terminal run evidence without copying sensitive prompt or data content into durable telemetry.
- Add a compatibility check that can compare a checkpoint's declared scaffold requirements with a resolved run and return a typed mismatch before inference.
- Define an extension/join seam for trainer-owned task, split, verifier, reward, and authorization metadata. Keep those evaluation facts outside Droste's generic runtime trace.
- Document canonical serialization, hashing, optional-field rules, and compatibility behavior.
Design constraints
- Do not couple Droste to a trainer, model registry, database, or product.
- Do not treat trace retention as permission to train.
- Do not make prompt text, user context, code, stdout, or answers part of content-free durable telemetry.
- Do not duplicate PromptPack, capability, Trace ABI, or runner-protocol types; compose their identities.
- Adding a trainer adapter must not change the engine's pure runtime contract.
Tests
- Equivalent resolved runs serialize byte-identically and yield the same hash.
- A material prompt-pack, capability, terminal-contract, model-revision, sampling, or budget change changes the hash.
- Dictionary ordering and irrelevant host metadata do not change the hash.
- Missing/incompatible checkpoint requirements fail with a typed, actionable error before an LLM request.
- Durable evidence remains content-free; replay remains retention-controlled.
- Native and runner/Pyodide paths resolve the same manifest for the same effective configuration.
Acceptance criteria
Related public work
Why
Post-trained RLM roots learn against a scaffold, not against an abstract "RLM" interface. Prompt templates, REPL globals, capability names, terminal semantics, truncation, errors, and budgets jointly form the model-facing ABI. A rollout is not reproducible or safe to use for training unless it records that resolved contract.
Droste already has versioned runner/source protocols, prompt-pack identity, and a unified Trace ABI. The missing public contract is one immutable, content-addressed manifest that identifies the exact scaffold and inference configuration that produced a rollout or that a checkpoint expects.
Scope
ScaffoldManifest/RolloutManifestschema containing at least:Design constraints
Tests
Acceptance criteria
Related public work