fix(cli): qualify the desugaring claims to the --real path; loud vocabulary-resolve invariant

Independent post-cycle review (opus, fresh context) on the branch diff
returned one Minor and one Nit; both adjudicated against the source and
fixed:

- Minor: the concepts paragraph and the sweep/walkforward/mc long helps
  claimed the document desugaring unconditionally, but only the --real
  branches route through verb_sugar — the synthetic branches execute
  in-process and register no documents. The claims now carry the --real
  qualifier (and the paragraph names the in-process synthetic path).
  generalize keeps the unconditional wording: its only mode is --real
  (usage requires it), so the claim is true as stated.
- Nit: the vocabulary listing's `None` fallback would have silently printed
  a bare, C29-incomplete row if a rostered type id ever failed to resolve.
  Replaced with a loud expect — an invariant breach should not degrade into
  exactly the surface this cycle exists to remove.

refs #315
This commit is contained in:
2026-07-24 10:19:50 +02:00
parent 162bf849ce
commit d26f0c84a4
2 changed files with 18 additions and 16 deletions
+14 -12
View File
@@ -1032,9 +1032,10 @@ const CONCEPTS_HELP: &str = "\
Author, backtest, and validate trading strategies — research CLI.
Two layers, one vocabulary: the research verbs are the convenience surface —
sweep, walkforward, mc, and generalize each write registered process/campaign
documents and execute them (run is their single-backtest sibling). That
document data plane is directly authorable: `aura process` / `aura campaign`
over --real data, sweep, walkforward, mc, and generalize desugar to
registered process/campaign documents and execute them (run is their
single-backtest sibling; synthetic runs execute in-process). That document
data plane is directly authorable: `aura process` / `aura campaign`
(validate | introspect | register | run), growing a document from a bare {}
via `introspect --unwired`.
@@ -1075,17 +1076,17 @@ enum Command {
Graph(GraphCmd),
/// Sweep a parameter grid over a strategy or a loaded blueprint.
///
/// Sugar over the document layer: desugars to a registered process
/// (std::sweep) + campaign pair — author the documents directly via
/// `aura process` / `aura campaign`.
/// Sugar over the document layer: over --real data this desugars to a
/// registered process (std::sweep) + campaign pair — author the documents
/// directly via `aura process` / `aura campaign`.
Sweep(SweepCmd),
/// Walk-forward validation over a strategy or a loaded blueprint. Over --real, the
/// fixed 90/30-day roller fits to a --from/--to window shorter than it, preserving
/// the 3:1 IS:OOS ratio, instead of refusing the window outright.
///
/// Sugar over the document layer: desugars to a registered process
/// ([std::grid, std::walk_forward]) + campaign pair — author the documents
/// directly via `aura process` / `aura campaign`.
/// Sugar over the document layer: over --real data this desugars to a
/// registered process ([std::grid, std::walk_forward]) + campaign pair —
/// author the documents directly via `aura process` / `aura campaign`.
Walkforward(WalkforwardCmd),
/// Grade one candidate across multiple instruments.
///
@@ -1097,9 +1098,10 @@ enum Command {
/// --real, the fixed 90/30-day walk-forward roller fits to a --from/--to window
/// shorter than it, preserving the 3:1 IS:OOS ratio, instead of refusing outright.
///
/// Sugar over the document layer: desugars to a registered process
/// ([std::grid, std::walk_forward, std::monte_carlo]) + campaign pair —
/// author the documents directly via `aura process` / `aura campaign`.
/// Sugar over the document layer: over --real data this desugars to a
/// registered process ([std::grid, std::walk_forward, std::monte_carlo]) +
/// campaign pair — author the documents directly via `aura process` /
/// `aura campaign`.
Mc(McCmd),
/// List or inspect recorded run families.
Runs(RunsCmd),