%% SCRAP: architecture/MAMA_FORTH_SUPERVISOR_ARCHITECTURE
%% SOURCE: docs/working/architecture/MAMA_FORTH_SUPERVISOR_ARCHITECTURE.adoc
%% STATUS: WORKING
%% FITS: dev-guide/ch-capsule, cookbook/ch-capsule
%% EDITORIAL: lifted — prose rewritten to press voice

\section{Mama Forth: The Multi-VM Supervisor}

Mama Forth is the governing FORTH VM that orchestrates a multi-VM ecosystem.
It departs from conventional supervisor design in one decisive respect: Mama
Forth is itself a FORTH VM, a first-class citizen carrying the same physics
instrumentation as every VM it governs. The supervisor does not stand outside
the runtime model; it participates in it.

The ecosystem forms a tree. Mama Forth sits at the root. Beneath it, child VMs
each carry their own physics state. Beneath each child, block devices carry
per-device physics. Mama observes all three layers and makes system-level
decisions: when to spawn or kill a child VM, how to allocate block devices to
children, how to enforce governance across the ecosystem, and how to respond to
emergencies such as thermal runaway or memory pressure.

The central design insight is that physics metadata becomes a three-tier
hierarchy:

\begin{itemize}
  \item \textbf{Word level} --- per-word metrics: entropy, temperature, latency.
  \item \textbf{VM level} --- per-VM aggregates: child health, resource usage.
  \item \textbf{Block level} --- per-block device metrics: I/O patterns, thermal
        distribution.
\end{itemize}

\subsection{VM-Level Physics Metadata}

Today's physics model tracks per-word metrics attached to each \texttt{DictEntry}:

\begin{lstlisting}[language=C]
typedef struct {
    uint16_t temperature_q8;   // Thermal state [0x0000, 0xFFFF]
    uint64_t last_active_ns;   // Last execution timestamp
    uint32_t entropy;          // Execution randomness
    int16_t  entropy_slope;    // Rate of entropy change
    uint32_t avg_latency_ns;   // P50 latency
    /* ... */
} DictPhysics;
\end{lstlisting}

The proposed extension gives each VM its own aggregate physics record. It rolls
up thermal state across all words (warmest word, average temperature, count of
hot words above \texttt{0x8000}), execution load (cumulative executions,
words-per-second rate, recency), memory pressure (dictionary heap usage against
capacity), reliability (error count, error rate, recovery count), child VM
health, block-device affinity, and lifecycle state (uptime, age, run state,
criticality class).

\begin{lstlisting}[language=C]
typedef struct {
    uint16_t vm_temperature_q8;       // Warmest word temperature
    uint16_t vm_avg_temperature_q8;   // Average across all words
    uint32_t vm_hot_word_count;       // Words with temp > 0x8000
    uint64_t total_word_executions;
    uint64_t execution_rate_per_sec;
    float    dictionary_pressure_pct; // used / max
    uint32_t error_rate_per_sec;
    uint32_t active_child_vm_count;
    uint8_t  vm_state;                // RUNNING, PAUSED, DRAINING, DEAD
    uint8_t  vm_criticality;          // system, critical, normal, background
    /* ... */
} VMPhysics;
\end{lstlisting}

The record attaches directly to the \texttt{VM} struct. Every physics event
maintains it: \texttt{physics\_metadata\_touch()} updates the word, then resolves
the current VM and updates the VM-level aggregates, recomputing running averages
and rates.

\subsection{Block Device Physics Metadata}

Block storage (1024 blocks of 1024 bytes) is managed by
\texttt{block\_subsystem.c} (logical-to-physical mapping) and
\texttt{blkio\_factory.c} (pluggable RAM, file, and L4Re backends). Today there
is no observability beyond capacity tracking. The proposal attaches a
\texttt{BlockPhysics} record to each block, tracking thermal state (access
frequency), access patterns (read and write counts, P50 and P99 latencies),
ownership (owning VM and word), content-type hints, and health (CRC32 checksum,
dirty and corruption flags, error count). A device-level aggregate summarizes
total reads and writes, hottest and coldest block temperatures, and
fragmentation percentage.

Block accessors maintain these metrics inline. On read, the subsystem times the
I/O, updates the block's read count and exponential moving-average latency,
recomputes temperature from read frequency, and verifies the CRC32 to detect
corruption. On write, it does the symmetric work and refreshes the stored
checksum.

\subsection{Mama's Responsibilities}

Mama Forth runs with elevated privileges along three axes:

\begin{itemize}
  \item \textbf{Observe} --- all word executions in children, all block-device
        I/O, all child lifecycle events, all errors and anomalies.
  \item \textbf{Control} --- spawn and kill child VMs, allocate blocks to
        children, enforce governance policies, redirect critical work, scale up
        and down with load.
  \item \textbf{Coordinate} --- share block resources, prevent deadlock, balance
        load across children, degrade gracefully under stress.
\end{itemize}

Mama is itself instrumented with a \texttt{MamaPhysics} record covering its own
supervision load, child-management counts, block-management activity, emergency
events (thermal warnings, memory-pressure events, orphan recoveries), and
governance metrics (violations detected, enforcement actions, audit events).

\subsection{The Supervision Loop}

Mama runs a periodic control loop. Each cycle observes every child's VM-level
physics, flags thermal warnings, memory pressure above 90\%, and error surges,
then inspects every block device for hot blocks and excessive fragmentation. It
then makes load-balancing decisions, enforces governance compliance, and sleeps
for an adaptive interval derived from its own decision latency.

\begin{lstlisting}[language=C]
void mama_supervision_loop(void) {
    while (mama_vm.running) {
        for (int i = 0; i < child_vm_count; i++) {
            VM *child = child_vms[i];
            VMPhysics p = child->physics;
            if (p.vm_temperature_q8 > THERMAL_WARNING) mama_handle_hot_child(child);
            if (p.dictionary_pressure_pct > 90)        mama_handle_memory_pressure(child);
            if (p.error_rate_per_sec > ERROR_THRESHOLD) mama_handle_error_surge(child);
        }
        mama_balance_load_across_children();
        mama_check_governance_compliance();
        sf_sleep_ns(mama_vm.physics.decision_latency_ns * 2);
    }
}
\end{lstlisting}

Mama spawns a new child when average child temperature exceeds \texttt{0xD000}
and capacity remains, allocating a block range to the newcomer and rebalancing
the work queue. It kills a child that is unrecoverably faulted, idle, or
under unrecoverable memory pressure --- first recovering the orphan's blocks,
then tearing the VM down. It rebalances block allocation by grouping each
child's hottest blocks together to reduce fragmentation and keep hot data near
its consumer.

\subsection{Three-Tier Feedback Loop}

Metrics flow upward. Word execution updates word temperature and latency; the VM
aggregates word metrics into VM state; Mama aggregates VM state into system
state, which is logged across all three tiers to the analytics heap. Decisions
flow downward. A Mama decision (``Child~2 is too hot, spawn Child~3'') creates a
VM and allocates blocks; the affected child adjusts its batch groups and
sampling rate; word-level optimization boosts priority for hot words; and the
block device responds by relocating cold blocks, compacting fragmentation, and
prefetching predicted accesses.

\subsection{Worked Example: Thermal Emergency}

A concrete sequence illustrates the loop. A child VM runs normally until a
\texttt{BLOCK\_WRITE} word heats to \texttt{0xC000} and propagates that
temperature to the VM. Mama's next cycle detects the warning together with
elevated dictionary pressure and an anomalous error rate of 100 errors per
second. Mama responds: it spawns a second child for load shedding, reassigns
cold work to it, marks the first child's hot blocks protected, temporarily
raises that child's heap, and logs the emergency to governance. Within a few
seconds the original child cools and stabilizes; the system keeps the new child
because it now carries useful work, retiring it only once the first child cools
below the safe threshold.

\subsection{Implementation Phases}

\begin{itemize}
  \item \textbf{Phase 1 --- Foundation.} Word-level physics and execution hooks
        are complete; VM-level aggregation and block-device physics remain.
  \item \textbf{Phase 2 --- Single-VM Control.} Word-level scheduling and memory
        hints are complete; VM-level health monitoring and observe-only Mama
        supervision remain.
  \item \textbf{Phase 3 --- Multi-VM Orchestration.} Child spawn and kill, block
        reallocation, cross-child load balancing, and emergency response.
  \item \textbf{Phase 4 --- Mama Optimization.} Mama's own physics tuning,
        predictive spawning, guided load balancing, and governance enforcement
        at scale.
\end{itemize}

%% TODO(bob): Confirm whether Mama Forth runs as a dedicated thread, a
%% coroutine, or the main loop. Source sketches mama_forth_init() called from
%% main() but leaves the concurrency model open.
%% PATENT: The three-tier physics rollup and the supervision-loop spawn/kill
%% heuristics are adaptive-runtime mechanisms; flag for patent counsel review
%% before any external publication.
