48979193b9
Milestone-fieldtest friction: a single-OOS-window walk-forward printed "all 1 walk-forward windows recorded zero trades" (captured RED evidence: fieldtests/milestone-stderr-honesty/captured/ example2_singular.err). The message text moves into a pure zero-trade_note_text builder — singular "the single walk-forward window recorded zero trades", plural unchanged so the existing e2e phrase pins hold — with a unit pin on both forms. refs #278
66 lines
2.3 KiB
Rust
66 lines
2.3 KiB
Rust
//! Stable stderr class markers (C14): `aura: note: <text>` for benign
|
|
//! diagnostics on a continuing run (exit code unaffected),
|
|
//! `aura: warning: <text>` for recorded faults the run survives.
|
|
//! Error lines that accompany a non-zero exit — and plain info lines
|
|
//! such as the run-record summary — keep the bare `aura:` prefix; for
|
|
//! errors, the exit-code partition is the machine contract.
|
|
|
|
macro_rules! note {
|
|
($($arg:tt)*) => {
|
|
eprintln!("aura: note: {}", format_args!($($arg)*))
|
|
};
|
|
}
|
|
|
|
macro_rules! warning {
|
|
($($arg:tt)*) => {
|
|
eprintln!("aura: warning: {}", format_args!($($arg)*))
|
|
};
|
|
}
|
|
|
|
pub(crate) use {note, warning};
|
|
|
|
/// The zero-trade note's message text (#313), pluralization-aware — the
|
|
/// milestone fieldtest tripped over "all 1 walk-forward windows"
|
|
/// (captured: `fieldtests/milestone-stderr-honesty/captured/
|
|
/// example2_singular.err`). Pure over the count so the wording is
|
|
/// unit-pinned.
|
|
fn zero_trade_note_text(n_windows: usize) -> String {
|
|
if n_windows == 1 {
|
|
"the single walk-forward window recorded zero trades".to_string()
|
|
} else {
|
|
format!("all {n_windows} walk-forward windows recorded zero trades")
|
|
}
|
|
}
|
|
|
|
/// The #313 zero-trade note, shared by both walk-forward paths (the
|
|
/// synthetic-blueprint path in `main.rs` and the `--real` sugar path in
|
|
/// `verb_sugar.rs`) so the wording AND the condition live in exactly one
|
|
/// place. Takes the per-window trade counts; a no-op unless there is at
|
|
/// least one window and every one of them traded zero times.
|
|
pub(crate) fn note_zero_trade_windows(mut window_trades: impl ExactSizeIterator<Item = u64>) {
|
|
let n_windows = window_trades.len();
|
|
if n_windows > 0 && window_trades.all(|n| n == 0) {
|
|
note!("{}", zero_trade_note_text(n_windows));
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::zero_trade_note_text;
|
|
|
|
#[test]
|
|
/// #278 fieldtest friction: the single-window form must read as
|
|
/// grammatical English while the plural form keeps the exact phrase
|
|
/// the e2e pins grep for.
|
|
fn zero_trade_note_pluralizes() {
|
|
assert_eq!(
|
|
zero_trade_note_text(1),
|
|
"the single walk-forward window recorded zero trades"
|
|
);
|
|
assert_eq!(
|
|
zero_trade_note_text(3),
|
|
"all 3 walk-forward windows recorded zero trades"
|
|
);
|
|
}
|
|
}
|