%% SCRAP: experiments/campaigns/shape_validation/README
%% SOURCE: docs/working/experiments/campaigns/shape_validation/README.md
%% STATUS: CURRENT
%% FITS: experiments/ch-factorial
%% EDITORIAL: lifted — prose rewritten to press voice

\section{Workload Shape Validation Experiment}

This experiment tests how a single StarForth configuration responds to
four distinct workload patterns (``shapes''), validating that the adaptive
runtime adjusts appropriately to workload characteristics rather than
locking to a fixed operating point.

\textbf{Configuration tested:} C37 (binary \texttt{0100101}) — L2
(Rolling Window), L5 (Window Inference), and L7 (Adaptive Heartrate)
enabled; all other loops off.
\textbf{Recommended replicates:} 100--300 per workload.
\textbf{Reference commit:} \texttt{161a3667}.

\subsection{Workload Shapes}

\begin{description}
  \item[Baseline (\texttt{init.4th}).]
        Standard DoE benchmark. Mixed arithmetic and control flow, moderate
        complexity, predictable pattern. Expected: moderate window size
        ($\sim$1{,}024--2{,}048) and stable heartbeat ($\sim$1\,ms ticks).

  \item[Square Wave (\texttt{init-1.4th}).]
        Alternates between simple and complex operations on every other
        iteration. Expected: larger window to capture the alternation
        pattern; more frequent heartbeats during transitions.

  \item[Triangle Wave (\texttt{init-2.4th}).]
        Gradually increasing then decreasing complexity (ramp up, ramp
        down). Expected: window size tracking the complexity ramp; heartbeat
        slowing during stable ramps and accelerating at the inflection point.

  \item[Damped Sine (\texttt{init-3.4th}).]
        Oscillating complexity that decreases over time via amplitude
        damping. Expected: window shrinking as amplitude decays; heartbeat
        rate increasing as the workload stabilizes.
\end{description}

\subsection{Running the Experiment}

\begin{lstlisting}[language=bash]
cd experiments/shape_validation

# Standard validation (100 reps x 4 workloads = 400 runs)
./run_shapes.sh 100

# Quick exploratory (30 reps, ~5 minutes)
./run_shapes.sh 30

# High precision (300 reps x 4 = 1200 runs)
./run_shapes.sh 300
\end{lstlisting}

Results land in \texttt{shape\_run\_<TIMESTAMP>/shape\_results.csv}.

\subsection{Expected Results}

\begin{center}
\begin{tabular}{llll}
\toprule
Workload    & Expected ns/word & Expected Window & Expected CV \\
\midrule
Baseline    & $\sim$125        & 1{,}024--2{,}048 & $\sim$0.02 \\
Square Wave & $\sim$130+       & $\geq$2{,}048    & $>$0.03 \\
Triangle    & $\sim$128        & 1{,}536          & $\sim$0.025 \\
Damped Sine & $\sim$122        & 2{,}048 → 512   & $\sim$0.018 \\
\bottomrule
\end{tabular}
\end{center}

Key validation: window width must vary significantly across shapes
(ANOVA $p < 0.05$), demonstrating that L5 responds to workload dynamics
rather than holding a fixed window.

\subsection{Success Criteria}

\begin{enumerate}
  \item L5 (Window Inference) produces statistically distinct window widths
        across shapes (ANOVA $p < 0.05$).
  \item Square-wave workload yields a larger window than baseline.
  \item Damped-sine workload yields a smaller window than baseline.
  \item CV remains below 10\% for all shapes (no instability).
\end{enumerate}
