%% SCRAP: experiments/02-experiments/L8_WIRING_PLAN
%% SOURCE: docs/working/experiments/02-experiments/L8_WIRING_PLAN.md
%% STATUS: HISTORICAL
%% FITS: experiments/ch-l8
%% EDITORIAL: lifted — prose rewritten to press voice

\section{L8 Control-Wiring Plan}
\label{sec:l8-wiring-plan}

Prior to the wiring implementation, the L8 Jacquard Steady State Machine
(SSM) computed a 4-bit mode signal and set Boolean flags in
\texttt{vm->ssm\_config}, but the feedback loops L2, L3, L5, and L6 ran
unconditionally — the selector was, in the source's words, ``a supervisor
without authority.'' This plan defined the four code locations requiring gates
and specified the recommended implementation order.

\subsection{Loop Status Before Wiring}

\begin{center}
\begin{tabular}{clll}
\toprule
Loop & Name & Pre-wiring status & Control signal \\
\midrule
L1 & Heat tracking     & Compile-time disabled & — (harmful in 86\% of configs) \\
L2 & Rolling window    & Always on (needed gating) & L8 bit~3 (entropy-driven) \\
L3 & Linear decay      & Always on (needed gating) & L8 bit~2 (temporal locality) \\
L4 & Pipelining metrics & Compile-time disabled & — (harmful in 100\% of configs) \\
L5 & Window inference  & Always on (needed gating) & L8 bit~1 (CV-driven) \\
L6 & Decay inference   & Always on (needed gating) & L8 bit~0 (CV + temporal) \\
L7 & Adaptive heartrate & Always on & — (beneficial in 71\% of configs) \\
L8 & Jacquard selector & Implemented & 4-bit mode controller (C0--C15) \\
\bottomrule
\end{tabular}
\end{center}

\subsection{Required Code Changes}

Four locations required modification, spanning three source files and
approximately 40--60 lines of new conditional logic.

\paragraph{L3 gate — \texttt{src/physics\_metadata.c}:176}
Insert an early-return check after the frozen-word and minimum-interval
guards in \texttt{physics\_metadata\_apply\_linear\_decay()}. The gate is
internal to the function, keeping call sites unchanged.

\paragraph{L5 gate — \texttt{src/inference\_engine.c}:538}
Replace the unconditional call to \texttt{find\_variance\_inflection()} with a
conditional block that preserves the previous \texttt{adaptive\_window\_width}
when L5 is off. A fallback to legacy mode (no \texttt{ssm\_config}) ensures
backward compatibility.

\paragraph{L6 gate — \texttt{src/inference\_engine.c}:546}
Symmetric to the L5 gate, guarding \texttt{infer\_decay\_slope\_q48()}.
Previous \texttt{adaptive\_decay\_slope} is preserved when L6 is off.

\paragraph{L2 gate — \texttt{src/vm.c}:1652}
Call-site gate in the hot path of \texttt{execute\_colon\_word()}, wrapping
\texttt{rolling\_window\_record\_execution()} in a null check on
\texttt{vm->ssm\_config} and a Boolean read. This option (Option~A) was
preferred over an internal gate inside the rolling-window subsystem for
separation-of-concerns reasons.

\subsection{Implementation Order}

The plan recommended proceeding from simplest to most complex:

\begin{enumerate}
  \item L3 (linear decay) — internal gate, single function.
  \item L5 (window inference) — preserve previous value, medium complexity.
  \item L6 (decay inference) — symmetric to L5.
  \item L2 (rolling window) — call-site gate in the hot execution path.
\end{enumerate}

\subsection{Validation}

Success was defined as all four loops consulting \texttt{ssm\_config} flags
before executing, mode transitions appearing in debug logs, the full test
suite passing under the default mode, and the ability to reproduce any of the
16 DoE configurations by forcing L8 to a specific mode.

\subsection{Open Questions Resolved Post-Implementation}

\begin{itemize}
  \item \textbf{Default mode}: The VM initialises at C0 (minimal) and adapts
        within $\sim$25~ms; C0 did not break any tests.
  \item \textbf{L2 gate placement}: Option~A (call-site) was chosen.
  \item \textbf{Mode override words}: Deferred to a future sprint; listed as
        planned extensions (\texttt{L8-MODE!}, \texttt{L8-MODE@},
        \texttt{L8-AUTO}).
\end{itemize}
