9124275bf3
Binary-only milestone fieldtest for milestone 36 (self-description): a
fieldtester agent bootstrapped from the release binary (d26f0c8) alone —
no engine sources, no repo docs, no bootstrap card — and drove five
end-to-end scenarios: cold bootstrap -> author -> validate (green,
synthetic + real EURUSD, 3944 trades), execution semantics +
latch/edge-pulse idiom (green), vocabulary breadth (33 nodes / 7 folds /
17 metrics / 6+6 blocks, every entry with a meaning), document ramp from
a bare {} (green, 3 members), trace/measurement path (dead-ends,
tracked).
Verdict: the bootstrap card (#267, closed as superseded) is empirically
redundant for the bootstrap->author->validate spine. Two seams keep the
promise short of end-to-end, both tracked outside M1: the declared-tap
drop on the registration path (#327, the missing mechanism of #312/M6)
and the sugar<->document axis namespace (#328, prerequisite of the #319
retirement). Friction routed: #329 #330 #331; evidence comments on #312
and #324. Milestone 36 closed with this adjudication; the fieldtest spec
remains the usual git-ignored working file.
refs #267, refs #312, refs #319
2.3 KiB
2.3 KiB
s4 — document-first ramp (grow from {} to a runnable campaign)
Protected property: using only --unwired introspection and validation
diagnostics, a consumer can grow a process document and a campaign document from a
bare {} to a registered, runnable state, and run the campaign green.
Trail (binary-only)
echo '{}' > x.json; aura process introspect --unwired x.json— lists the whole envelope (format_version,kind,name,pipeline).- Grow
process.json:--unwiredon a doc withpipeline:[]says "a process needs at least one stage"; a stage{}is toldpipeline[0].block (required, block id)→ correct shape is{"block":"std::sweep"}.aura process validate→ valid;aura process register→ content id. - Grow
campaign.jsonsimilarly (aura campaign introspect --unwired,--block std::*).aura campaign validatepasses all three tiers (intrinsic / referential / executable);register→ content id;campaign run <id>→ 3 members, green.
process.json and campaign.json in this dir are the final registered forms;
ema_open.oplist.json is the strategy authored with an open fast.length
param (see friction 2).
Frictions recorded
process.refshape under-documented.campaign introspect --block std::process_refand--unwiredboth describe it as "content id of a process document" (reads as a bare string), but the validator rejects the bare string:unknown variant '<id>', expected 'content_id' or 'identity_id'— the tagged{"content_id": "<id>"}form is required and appears nowhere in the introspection. Recoverable only via the validate error.- Two-layer axis-namespace seam.
aura sweep <bp> --list-axespresentsgraph.fast.lengthas sweepable (overriding the bound default, #246), and the sugaraura sweep --axis graph.fast.length=…accepts it. But the canonical document form rejects that same name:axis "graph.fast.length" is not in the param space— a campaign axis must be an open param, named without thegraph.prefix (fast.length, pergraph introspect --params, which prints nothing for a fully-bound blueprint). The name a consumer learns from the sugar (graph.fast.length) is not the name the document layer wants (fast.length), and no surface reconciles the two.