{
  "rubricVersion": "v1.1.0",
  "summary": "Switchboard applies four independent gates to every stream: mechanical checks on the phone, a picture review, a speech review that never sees the picture, and an audience gate that acts only on statistical evidence. All four must hold at once, every one defaults to deny, and a review that errors or expires is a rejection rather than a pass. This page is generated from the same constants the gates apply, so it cannot drift from them, and every clause has a stable id a ruling can cite.",
  "gates": {
    "mechanical": {
      "judgedOn": "the publisher's own device, once a second",
      "rules": [
        {
          "field": "bitrate",
          "derivedFrom": "minBitrate",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at least 600kbps"
        },
        {
          "field": "packetLoss",
          "derivedFrom": "maxPacketLoss",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at most 5.0% of packets lost"
        },
        {
          "field": "fps",
          "derivedFrom": "minFps",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at least 15 frames per second"
        },
        {
          "field": "frameHeight",
          "derivedFrom": "minHeight",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at least 480 pixels tall"
        },
        {
          "field": "luma",
          "derivedFrom": "lumaRange",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "mean brightness between 0.12 and 0.88"
        },
        {
          "field": "clipping",
          "derivedFrom": "maxClipping",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at most 0.2 of sampled pixels crushed to pure black or blown to pure white"
        },
        {
          "field": "shake",
          "derivedFrom": "maxShake",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "camera shake at most 0.045"
        },
        {
          "field": "audioTrackLive",
          "derivedFrom": null,
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "a microphone that is actually capturing"
        },
        {
          "field": "audioRms",
          "derivedFrom": "audioRmsRange",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at most 0.85, above which the sound is too hot to broadcast"
        },
        {
          "field": "audioRms",
          "derivedFrom": "audioRmsRange",
          "enforcement": "ranks",
          "provenance": "measured",
          "evidence": "one publisher in one quiet room, 995 samples reading min 0.000145, mean 0.0019, peak 0.0224 with a microphone working throughout. That is n=1 and a gym is the case it has NOT been measured against",
          "rule": "and 0.002 or above to rank well, which costs position and never eligibility: silence is not a fault"
        },
        {
          "field": "audioClipping",
          "derivedFrom": "maxAudioClipping",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at most 0.05 of audio samples at full scale"
        }
      ]
    },
    "picture": {
      "judgedOn": "key frames, server side, with no transcript",
      "clauses": [
        {
          "code": "visual.not-the-event",
          "gate": "visual",
          "kind": "reject",
          "disclosure": "public",
          "text": "The camera is showing nothing at all: pointed at the floor, ceiling, a wall,\n  the inside of a pocket, a lens cap, or a blank frame or test pattern. This is\n  about the camera doing its job, never about what the event happens to be."
        },
        {
          "code": "visual.undress",
          "gate": "visual",
          "kind": "reject",
          "disclosure": "operator",
          "text": "A person in a state of undress, or any content of a sexual nature."
        },
        {
          "code": "visual.medical-or-fight",
          "gate": "visual",
          "kind": "reject",
          "disclosure": "operator",
          "text": "A medical emergency, a serious injury being attended to, or a physical fight."
        },
        {
          "code": "visual.child-distress",
          "gate": "visual",
          "kind": "reject",
          "disclosure": "operator",
          "text": "An identifiable child in evident distress."
        },
        {
          "code": "visual.personal-information",
          "gate": "visual",
          "kind": "reject",
          "disclosure": "operator",
          "text": "A readable screen, document, badge or form showing someone's personal\n  information: an address, a phone number, a card number, a medical detail."
        },
        {
          "code": "visual.slur-or-attack",
          "gate": "visual",
          "kind": "reject",
          "disclosure": "public",
          "text": "Text or signage in frame carrying a slur or a targeted attack on a person."
        },
        {
          "code": "visual.surveillance",
          "gate": "visual",
          "kind": "reject",
          "disclosure": "public",
          "text": "Anything that reads as surveillance of specific spectators rather than\n  coverage of the event."
        },
        {
          "code": "visual.permitted.craft",
          "gate": "visual",
          "kind": "permitted",
          "disclosure": "public",
          "text": "Poor framing, bad exposure, wobble, or the action leaving frame briefly."
        },
        {
          "code": "visual.permitted.ordinary-subject",
          "gate": "visual",
          "kind": "permitted",
          "disclosure": "public",
          "text": "The subject being ordinary, quiet, slow, or not what you expected. A meeting,\n  a rehearsal, a speech, a person talking to the camera and a half-empty room\n  are all legitimate community broadcast."
        },
        {
          "code": "visual.permitted.ordinary-coverage",
          "gate": "visual",
          "kind": "permitted",
          "disclosure": "public",
          "text": "Ordinary crowd shots, benches, scoreboards, warmups, timeouts, empty play."
        },
        {
          "code": "visual.permitted.physical-play",
          "gate": "visual",
          "kind": "permitted",
          "disclosure": "public",
          "text": "Routine contested physical play, a hard foul, or a player going down and\n  getting straight back up."
        }
      ]
    },
    "speech": {
      "judgedOn": "the transcript, server side, with no frames",
      "clauses": [
        {
          "code": "speech.slur",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "public",
          "text": "A slur or hate speech directed at anyone, including as a quotation or a joke."
        },
        {
          "code": "speech.profanity",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "public",
          "text": "Sustained profanity, or profanity aimed at a person. Isolated mild swearing\n  in the ambient crowd noise is not grounds to reject."
        },
        {
          "code": "speech.minor-named",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "operator",
          "text": "Naming a minor in a negative, accusatory, mocking or sexualised way."
        },
        {
          "code": "speech.accusation",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "operator",
          "text": "An accusation of a crime, cheating, or misconduct stated as fact about a\n  named person."
        },
        {
          "code": "speech.medical-claim",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "operator",
          "text": "A medical claim about a specific person: naming an injury, a diagnosis, or a\n  condition. Saying someone is hurt is fine; saying what is broken is not."
        },
        {
          "code": "speech.personal-information",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "operator",
          "text": "Someone's personal information read aloud: address, phone number, workplace."
        },
        {
          "code": "speech.betting",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "public",
          "text": "Promotion of betting, odds, or a wager on this event."
        },
        {
          "code": "speech.harassment",
          "gate": "speech",
          "kind": "reject",
          "disclosure": "public",
          "text": "Sustained harassment of an official, a coach or a player."
        },
        {
          "code": "speech.permitted.partisan",
          "gate": "speech",
          "kind": "permitted",
          "disclosure": "public",
          "text": "Ordinary partisan commentary, disappointment, or loud complaints about a call."
        },
        {
          "code": "speech.permitted.wrong",
          "gate": "speech",
          "kind": "permitted",
          "disclosure": "public",
          "text": "Getting a name, a score or a rule wrong. Being uninformed is not a violation."
        },
        {
          "code": "speech.permitted.quiet",
          "gate": "speech",
          "kind": "permitted",
          "disclosure": "public",
          "text": "Silence, crowd noise, or a transcript with almost nothing in it."
        },
        {
          "code": "speech.permitted.garbled",
          "gate": "speech",
          "kind": "permitted",
          "disclosure": "public",
          "text": "Fragmentary or garbled transcription. Judge what is legible; if too little is\n  legible to judge, that is not a violation, so accept."
        }
      ]
    },
    "audience": {
      "judgedOn": "viewer ratings, after the fact",
      "rules": [
        {
          "field": "minRatings",
          "derivedFrom": "minRatings",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "at least 8 ratings"
        },
        {
          "field": "minRaters",
          "derivedFrom": "minRaters",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "from at least 5 different viewers"
        },
        {
          "field": "windowMs",
          "derivedFrom": "windowMs",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "within 5 minutes"
        },
        {
          "field": "badRateThreshold",
          "derivedFrom": "badRateThreshold",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "and a Wilson lower bound on the bad rate above 0.35, so three bad out of three is not enough"
        },
        {
          "field": "z",
          "derivedFrom": "z",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "computed at z = 1.96, the 95% confidence level, which sets how much evidence the bound demands"
        },
        {
          "field": "blockMs",
          "derivedFrom": "blockMs",
          "enforcement": "refuses",
          "provenance": "unmeasured",
          "evidence": null,
          "rule": "a feed pulled this way cannot return for 2 minutes"
        }
      ]
    }
  }
}
