Verb front-end asymmetry: sweep defaults the stop, walkforward/mc require it #217

Closed
opened 2026-07-07 10:45:38 +02:00 by Brummel · 1 comment
Owner

Surfaced by the milestone "Verb dissolution" (#210) close fieldtest (2026-07-07).

aura sweep --strategy r-sma --real GER40 --fast 3,5 --slow 12,20 runs and defaults the stop to 3 / 2.0. The identically-shaped walkforward / mc invocation is refused: "walkforward requires --fast --slow --stop-length --stop-k". The required-knob contract is inconsistent across sibling verbs, and no doc flags the difference — exercising "the r-sma real path" uniformly across the verbs forces the consumer to learn a per-verb knob-requirement rule by trial and error.

Pre-existing front-end behaviour, surfaced by uniform use across the verbs.

Resolution (one of): align the required-knob contract across the verbs (either all default the stop or all require it), or document the per-verb difference in the usage strings.

Surfaced by the milestone "Verb dissolution" (#210) close fieldtest (2026-07-07). `aura sweep --strategy r-sma --real GER40 --fast 3,5 --slow 12,20` runs and defaults the stop to 3 / 2.0. The identically-shaped `walkforward` / `mc` invocation is refused: "walkforward requires --fast --slow --stop-length --stop-k". The required-knob contract is inconsistent across sibling verbs, and no doc flags the difference — exercising "the r-sma real path" uniformly across the verbs forces the consumer to learn a per-verb knob-requirement rule by trial and error. Pre-existing front-end behaviour, surfaced by uniform use across the verbs. Resolution (one of): align the required-knob contract across the verbs (either all default the stop or all require it), or document the per-verb difference in the usage strings.
Author
Owner

Design decision (derived): align by defaulting the stop

The issue offers three resolutions: (a) all verbs default the stop, (b) all
verbs require it, (c) document the per-verb difference. Resolved as (a),
derived:

  • (b) rejected: requiring a stop on sweep would break sweep's shipped,
    test-pinned contract (a dissolved sweep binds NO regime; the member runner
    resolves the default — the manifest stamps stop_length=3/stop_k=2.0) and
    would shift every sweep campaign document's content id. The heavier break
    for the same consistency gain.
  • (c) rejected as primary: documenting the asymmetry labels the
    trial-and-error friction the close fieldtest flagged; it does not remove it.
  • (a) chosen: --stop-length/--stop-k become optional on
    walkforward/mc/generalize; each missing flag independently defaults to the
    single-sourced constants (length 3, k 2.0) — the exact regime the campaign
    member runner already resolves for an unbound regime (stop_rule_for_regime,
    #219). The generated campaign document still binds the regime explicitly, so
    a default invocation produces a byte-identical document (same content id) to
    an explicit --stop-length 3 --stop-k 2.0 invocation — no content-id churn,
    no change to any pinned grade. The multi-value stop refusal ("the stop is a
    single risk regime") is unchanged. Sweep is untouched. Usage strings name
    the defaults. R-yardstick provenance is preserved regardless: every member
    manifest stamps the resolved stop values (C18), and the risk regime remains
    the structural, compared-not-selected campaign axis (C10/C20 — decision of
    2026-07-06).

Independent per-flag defaulting mirrors mc's existing knob defaults
(--block-len/--resamples/--seed default independently). Status: design
settled — behaviour is pinnable as an executable spec.

## Design decision (derived): align by defaulting the stop The issue offers three resolutions: (a) all verbs default the stop, (b) all verbs require it, (c) document the per-verb difference. Resolved as **(a)**, derived: - **(b) rejected:** requiring a stop on sweep would break sweep's shipped, test-pinned contract (a dissolved sweep binds NO regime; the member runner resolves the default — the manifest stamps stop_length=3/stop_k=2.0) and would shift every sweep campaign document's content id. The heavier break for the same consistency gain. - **(c) rejected as primary:** documenting the asymmetry labels the trial-and-error friction the close fieldtest flagged; it does not remove it. - **(a) chosen:** `--stop-length`/`--stop-k` become optional on walkforward/mc/generalize; each missing flag independently defaults to the single-sourced constants (length 3, k 2.0) — the exact regime the campaign member runner already resolves for an unbound regime (`stop_rule_for_regime`, #219). The generated campaign document still binds the regime explicitly, so a default invocation produces a byte-identical document (same content id) to an explicit `--stop-length 3 --stop-k 2.0` invocation — no content-id churn, no change to any pinned grade. The multi-value stop refusal ("the stop is a single risk regime") is unchanged. Sweep is untouched. Usage strings name the defaults. R-yardstick provenance is preserved regardless: every member manifest stamps the resolved stop values (C18), and the risk regime remains the structural, compared-not-selected campaign axis (C10/C20 — decision of 2026-07-06). Independent per-flag defaulting mirrors mc's existing knob defaults (--block-len/--resamples/--seed default independently). Status: design settled — behaviour is pinnable as an executable spec.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Brummel/Aura#217