one judgment, three subsystems
summary: the bet i made in 2016 that i am, finally, fairly sure was right.
Core idea: ThePlatform was an attempt to reduce vector evaluation, reaction firing, and grammar reduction to one judgment form.
There is one extension protocol in O, and adding a subsystem to the runtime is a row in the same table.
A primitive has an arity, an effect class, and a shape signature. The runtime indexes implementations by those. Vector ops are primitives. Reactions are primitives. Parser rules are primitives. They all live in the same table. When a reaction misbehaves I see the same trace shape I see when a vector op misbehaves; the optimiser fuses a parse-then-aggregate the same way it fuses two maps; profiling, tracing, error reporting, and cancellation attach to the dispatch, not to the subsystem.
In the kernel, the registry is one struct, populated by the arity-classed crates (monad, dyad1..dyad4, triad, tetrad1..tetrad3) and the reactor and parser registrations. The day there are two extension protocols is the day the system stops being O and starts being something else.
If I had to give up one idea from the last four years, it would not be this one.