// ─── ADR-112 §9 — the producer-kind → override SINGLE HOME ───────────────────
//
// The one place behaviour switches on `provenance.kind`. ADR-112 §9 amends the
// upstream contracts (ADR-110/111) with a table of producer-kind overrides;
// rather than smear a `switch(kind)` across derive-labels / scorer / materializer
// (N scattered branches — the gemini break), every consumer asks THIS function
// "how do I handle a rule of this kind?" (Tenet 20 single-home).
//
// SLICE A scope: the home + the MINED policy are wired live (mined behaviour is
// byte-identical to pre-ADR-112). The AUTHORED policy is DEFINED here (so slice
// D extends one place, not many) but NO scorer/derive-labels/materializer
// consumer reads it yet — the operational window-wide label derivation, the
// train-side control materialization, and the held-out-activation metric are
// slice D. Until then a run is single-producer (`provenanceKind` on the lock,
// default `mined`); a mixed-kind corpus is out of scope for the first cert (§7).
const MINED_POLICY = Object.freeze({
    labelScope: 'held-out-only',
    positiveControlSide: 'held-out',
    exposureControlSide: 'held-out',
    positiveControlGate: 'none',
});
const AUTHORED_POLICY = Object.freeze({
    labelScope: 'whole-window',
    positiveControlSide: 'train',
    exposureControlSide: 'train',
    positiveControlGate: 'preimage-differential',
});
/**
 * ADR-112 §9 — resolve the override config for a producer kind. Pure +
 * exhaustive over the 2-value union. The MINED branch is the live, byte-identical
 * path; the AUTHORED branch is defined for slice D's consumers (not yet wired).
 */
export function getRulePolicy(kind) {
    switch (kind) {
        case 'mined':
            return MINED_POLICY;
        case 'authored':
            return AUTHORED_POLICY;
        default: {
            const _exhaustive = kind;
            throw new Error(`[Totem Error] getRulePolicy: unknown producer kind '${String(_exhaustive)}'`);
        }
    }
}
//# sourceMappingURL=rule-policy.js.map