openmixer — generated API reference
    Preparing search index...

    Interface FactSurface

    WHERE A FACT IS PRESENTED TO AN OPERATOR — the presents column (2026-08-06-channel-contract.md revision 6, ruled 2026-09-17).

    servedAs made declaration → address readable and killed the sourceStereo blind spot, where "served under another name" and "never built" were the same silence. This is the same move for declaration → surface: without it a fact with no tooltip reads exactly like a fact whose tooltip nobody joined, and the 2026-09-17 census could only measure the gap by substring — its own words, "a COVERAGE SKETCH, not a finding".

    help is a LIST because the data refuses a singular: gate is presented by six entries and headAmp by two. The cardinality that HOLDS, and is ratcheted, runs the other way — a help id is claimed by at most one fact.

    A fact no surface presents declares presents: null, never an absent key: an adjudicated "nothing teaches this" is a decision a ratchet can count, and an omission cannot be told apart from a fact somebody skipped.

    i18n (revision 7): the catalog key(s) a real widget binds with t() to label this fact's OWN control — never a name correlation, never a substring. A fact with no such call has no entry, whether or not the top-level presents itself is null (soloSafe carries i18n with no help; that is the same "a decision, never an omission" the column already keeps, one layer down).

    OWED, its own lane and its own amendment first: surface (the chips and panels that render it, in the vocabulary manual-coverage-conformance derives from the web-ui's registries).

    interface FactSurface {
        help?: readonly (
            | "channel.name"
            | "channel.meter"
            | "channel.gain"
            | "channel.fader"
            | "channel.pan"
            | "channel.mute"
            | "channel.solo"
            | "channel.phantom"
            | "channel.pad"
            | "channel.polarity"
            | "channel.saveConfig"
            | "tab.eq"
            | "tab.gate"
            | "tab.comp"
            | "tab.analysis"
            | "tab.plugins"
            | "tab.sends"
            | "block.fxSortable"
            | "bay.menuPosition"
            | "processing.toolbarEdge"
            | "gate.on"
            | "gate.attack"
            | "gate.hold"
            | "gate.release"
            | "gate.hysteresis"
            | "gate.ratio"
            | "gate.preset"
            | "gate.key.source"
            | "gate.key.hp"
            | "gate.key.lp"
            | "gate.key.listen"
            | "delay.curve"
            | "reverb.curve"
        )[];
        i18n?: readonly `${string}.${string}.${string}`[];
        manual?: `${string}.md#${string}`;
    }
    Index
    help?: readonly (
        | "channel.name"
        | "channel.meter"
        | "channel.gain"
        | "channel.fader"
        | "channel.pan"
        | "channel.mute"
        | "channel.solo"
        | "channel.phantom"
        | "channel.pad"
        | "channel.polarity"
        | "channel.saveConfig"
        | "tab.eq"
        | "tab.gate"
        | "tab.comp"
        | "tab.analysis"
        | "tab.plugins"
        | "tab.sends"
        | "block.fxSortable"
        | "bay.menuPosition"
        | "processing.toolbarEdge"
        | "gate.on"
        | "gate.attack"
        | "gate.hold"
        | "gate.release"
        | "gate.hysteresis"
        | "gate.ratio"
        | "gate.preset"
        | "gate.key.source"
        | "gate.key.hp"
        | "gate.key.lp"
        | "gate.key.listen"
        | "delay.curve"
        | "reverb.curve"
    )[]

    The help entries that teach this fact — keys of the web-ui's HELP table.

    i18n?: readonly `${string}.${string}.${string}`[]

    The catalog key(s) a widget binds to label this fact's own control.

    manual?: `${string}.md#${string}`

    The manual heading that documents it.