// ---
// tags: nox, rust
// crystal-type: source
// crystal-domain: comp
// ---
//! execution trace โ 16-column register table, one row per reduce() call
//!
//! r[0] = pattern tag (0-17)
//! r[1] = object particle
//! r[2] = formula particle
//! r[3] = result particle (NIL on halt/error)
//! r[4..8] = pattern-specific operands (filled by pattern; zero otherwise)
//! r[8] = budget before step
//! r[9] = budget after step
//! r[10] = error kind on error rows; pattern-specific witness on success rows
//! r[11..16] = pattern-specific (bit decomp, step counter, etc.)
extern crate alloc;
use Vec;
pub const COLS: usize = 16;
/// One row of the execution trace = zheng witness for one reduce() call
/// (or one step of a multi-row pattern).
///
/// The internal array is `pub(crate)` so only nox can construct/mutate rows;
/// external consumers (e.g., zheng) read via [`TraceRow::r`] or [`TraceRow::col`].
/// zero-overhead tracer for non-proof paths (CLI, tests)
;
/// accumulating tracer โ collects all rows into a Vec.
///
/// Row count is bounded in practice by the budget passed to reduce():
/// each pattern consumes at least 1 budget unit before emitting a row,
/// so the trace never exceeds `budget` rows. Callers that pass untrusted
/// budgets should cap the budget before calling reduce().
;