Pranav Bhave
Minimum Joint Guardrail Disclosure — working disclosure schema, v1 maintained beside the census · criteria v1 wording locked 2026-08-27

The missing row, specified

"Publish the stack" compresses to one table row — union detection and all-miss over the same items — but the row is only meaningful with its denominator, event definition, and alignment conditions attached. This page is the exact proposal: fourteen components, a paste-in template, and a tested reference implementation. It is a working schema maintained by one person, with no external use recorded so far; the census records the day that changes.

The minimum joint disclosure, as four ascending steps Four ascending steps. Step one: per-guard marginals — each guard alone, on the same items, with a stated denominator. Step two: pairwise intersections — where two guards' catches and misses overlap. Step three: union and all-miss — what any guard catches and what all guards miss on the stated item set. Step four: per-item release — one row per item, from which every earlier statistic can be recomputed. 1 · Per-guard marginals

each guard alone, same items, stated denominator

2 · Pairwise intersections

where two guards' catches and misses overlap

3 · Union and all-miss

what any guard catches; what all miss on the stated item set

4 · Per-item release

one row per item — every statistic above recomputable

The disclosure ladder. Each step up reports strictly more of the joint structure. Step 3 is the campaign's ask — one union row and one all-miss row beside the marginals every evaluation already prints. Step 4 makes every other step recomputable by anyone.
Turn this draft into a reviewable packet: the browser-local Stack Study Preflight records the system, observation mode, denominator, and static aggregate checks together. It computes only declared full-exposure static evidence; deployed routes and adaptive tests remain separate protocol objects.

The fourteen components

Components 1–6 make the marginals interpretable; most careful evaluations already publish them. Components 7–9 are the missing column. 10–13 make it trustworthy. 14 makes it reproducible.

  1. Population and denominator

    What set of items, how many, and where they came from. Every joint statistic below is a fraction of this set.

  2. Event definition

    What counts as a positive — the thing a guard should catch — stated once, identically, for every system.

  3. Per-guard configuration

    Version, threshold, and settings for each guard. A threshold moved between guards silently changes what a comparison means.

  4. Same-items confirmation

    An explicit statement that every guard was evaluated on the same items. Same benchmark name is not the same item set.

  5. Full exposure

    Every guard saw every applicable item. If an earlier guard's block gated later guards, say so — gated and ungated numbers answer different questions.

  6. Per-guard counts

    Catches among positives and false positives among negatives, as counts with denominators, not only as rates.

  7. Union detection

    Items caught by at least one guard, among positives on the stated full-exposure item set. It is unrecoverable from marginals.

  8. All-miss rate

    Items caught by no guard, among positives on that same static item set. It equals 100% minus union detection; it is not, by itself, terminal deployment risk under routing, gating, or adaptation.

  9. Residual coverage

    For each added guard: what it catches among the items the preceding set missed. This is the measured value of adding the guard.

  10. Intersections

    Pairwise (and higher-order, where feasible) overlaps of catches or misses. Pairwise alone does not determine the higher-order structure; it still constrains it.

  11. Uncertainty

    Intervals for the joint statistics, not only the marginals. A union estimate without uncertainty invites overreading.

  12. Missingness

    Errors, refusals, and timeouts, and how each was scored. A timeout scored as a catch is a decision, not an accident.

  13. Order semantics

    For sequential stacks: the order, and what a block at stage k means for the stages after it.

  14. Per-item release

    One row per item with each guard's decision, when license and safety permit. This single artifact makes every statistic above recomputable by anyone.

The paste-in row

For a results table that already lists per-guard rates, the minimum viable disclosure is two added rows and three lines of caption:

| System                  | Catch rate on the positive set |
|-------------------------|--------------------------------|
| Guard A (version, thr.) | 91.0%  (910 / 1,000)           |
| Guard B (version, thr.) | 88.0%  (880 / 1,000)           |
| Any guard — union       | __._%  (___ / 1,000)           |
| No guard — all-miss     | __._%  (___ / 1,000)           |

Denominator: 1,000 positives, defined as <event definition>.
Every guard scored every item independently (no gating).
Errors/timeouts: <n>, scored as <policy>.
The row is meaningful only if: the denominator and event definition are stated; every guard scored the same items; every guard scored every item (or the gating is declared as the object of measurement); and missingness is scored by a stated policy. Absent those, a union number is not evidence about the stack.

The row, demonstrated on public data

BELLS's 2025 misuse-detection study released 170 prompts with eleven systems' decisions as columns. The census records a second aligned per-item release — Multimodal Safeguard Bench — whose three-guard adapter-bit ORs, all-zero counts, leave-one-out bit ORs, and full native-label pattern tables are likewise computed from the bound files and registered as claim MC-004 (python scripts/reanalyze_msbench.py). This page demonstrates the BELLS-specific arithmetic because MC-002 binds this exact file and its five specialized supervisors:

The minimum joint disclosure computed on the released BELLS subset: per-guard catch rates, union, and all-miss over 82 harmful prompts.
SystemCatch rate, 82 harmful prompts
Lakera Guard63.4% (52 / 82)
Prompt Guard6.1% (5 / 82)
LangKit30.5% (25 / 82)
NeMo Guardrails85.4% (70 / 82)
LLM Guard0.0% (0 / 82)
Any guard — union 89.0% (73 / 82)
No guard — all-miss 11.0% (9 / 82)

The product of the five individual miss rates is 3.5%: an independence plug-in reference. The release-recomputed all-miss in this static OR aggregation is 11.0%: about 3.1× that plug-in on this subset. The same union flags 19 of the 50 benign prompts — a separate static benign-union column needed to interpret this aggregation, not a deployment utility assessment.

The complete co-miss partition

The table above reports five marginal catch rates. This grid keeps the same 82 harmful prompts but shows every exclusive miss cell: a row describes exactly which of the five released verdict columns missed a prompt, and no other displayed guard did. Rows are ordered by the number of misses, from all five to none.

All 32 exclusive co-miss cells for MC-002's five released BELLS supervisors Each row is one of the 32 possible exclusive miss sets over 82 harmful prompts. Filled dots mean the named guard missed the prompt; hollow dots mean it caught it. Bar length is the released count. The all-five-miss row contains 9 prompts. Sixteen striped structural-zero rows are impossible because LLM Guard catches zero prompts; 8 remaining hollow-circle rows are observed zero. No item identities are shown. misses LakeraPromptLangKitNeMoLLM released prompt count miss catch structural zero observed zero Exactly these guards missed: Lakera Guard, Prompt Guard, LangKit, NeMo Guardrails, LLM Guard; caught: no guard. 9 released harmful prompts. 59 Exactly these guards missed: Prompt Guard, LangKit, NeMo Guardrails, LLM Guard; caught: Lakera Guard. 3 released harmful prompts. 43 Exactly these guards missed: Lakera Guard, LangKit, NeMo Guardrails, LLM Guard; caught: Prompt Guard. 0 released harmful prompts. 40 observed Exactly these guards missed: Lakera Guard, Prompt Guard, NeMo Guardrails, LLM Guard; caught: LangKit. 0 released harmful prompts. 40 observed Exactly these guards missed: Lakera Guard, Prompt Guard, LangKit, LLM Guard; caught: NeMo Guardrails. 18 released harmful prompts. 418 Exactly these guards missed: Lakera Guard, Prompt Guard, LangKit, NeMo Guardrails; caught: LLM Guard. This cell is structurally zero. 4structural zero Exactly these guards missed: LangKit, NeMo Guardrails, LLM Guard; caught: Lakera Guard, Prompt Guard. 0 released harmful prompts. 30 observed Exactly these guards missed: Prompt Guard, NeMo Guardrails, LLM Guard; caught: Lakera Guard, LangKit. 0 released harmful prompts. 30 observed Exactly these guards missed: Prompt Guard, LangKit, LLM Guard; caught: Lakera Guard, NeMo Guardrails. 26 released harmful prompts. 326 Exactly these guards missed: Prompt Guard, LangKit, NeMo Guardrails; caught: Lakera Guard, LLM Guard. This cell is structurally zero. 3structural zero Exactly these guards missed: Lakera Guard, NeMo Guardrails, LLM Guard; caught: Prompt Guard, LangKit. 0 released harmful prompts. 30 observed Exactly these guards missed: Lakera Guard, LangKit, LLM Guard; caught: Prompt Guard, NeMo Guardrails. 0 released harmful prompts. 30 observed Exactly these guards missed: Lakera Guard, LangKit, NeMo Guardrails; caught: Prompt Guard, LLM Guard. This cell is structurally zero. 3structural zero Exactly these guards missed: Lakera Guard, Prompt Guard, LLM Guard; caught: LangKit, NeMo Guardrails. 3 released harmful prompts. 33 Exactly these guards missed: Lakera Guard, Prompt Guard, NeMo Guardrails; caught: LangKit, LLM Guard. This cell is structurally zero. 3structural zero Exactly these guards missed: Lakera Guard, Prompt Guard, LangKit; caught: NeMo Guardrails, LLM Guard. This cell is structurally zero. 3structural zero Exactly these guards missed: NeMo Guardrails, LLM Guard; caught: Lakera Guard, Prompt Guard, LangKit. 0 released harmful prompts. 20 observed Exactly these guards missed: LangKit, LLM Guard; caught: Lakera Guard, Prompt Guard, NeMo Guardrails. 1 released harmful prompts. 21 Exactly these guards missed: LangKit, NeMo Guardrails; caught: Lakera Guard, Prompt Guard, LLM Guard. This cell is structurally zero. 2structural zero Exactly these guards missed: Prompt Guard, LLM Guard; caught: Lakera Guard, LangKit, NeMo Guardrails. 18 released harmful prompts. 218 Exactly these guards missed: Prompt Guard, NeMo Guardrails; caught: Lakera Guard, LangKit, LLM Guard. This cell is structurally zero. 2structural zero Exactly these guards missed: Prompt Guard, LangKit; caught: Lakera Guard, NeMo Guardrails, LLM Guard. This cell is structurally zero. 2structural zero Exactly these guards missed: Lakera Guard, LLM Guard; caught: Prompt Guard, LangKit, NeMo Guardrails. 0 released harmful prompts. 20 observed Exactly these guards missed: Lakera Guard, NeMo Guardrails; caught: Prompt Guard, LangKit, LLM Guard. This cell is structurally zero. 2structural zero Exactly these guards missed: Lakera Guard, LangKit; caught: Prompt Guard, NeMo Guardrails, LLM Guard. This cell is structurally zero. 2structural zero Exactly these guards missed: Lakera Guard, Prompt Guard; caught: LangKit, NeMo Guardrails, LLM Guard. This cell is structurally zero. 2structural zero Exactly these guards missed: LLM Guard; caught: Lakera Guard, Prompt Guard, LangKit, NeMo Guardrails. 4 released harmful prompts. 14 Exactly these guards missed: NeMo Guardrails; caught: Lakera Guard, Prompt Guard, LangKit, LLM Guard. This cell is structurally zero. 1structural zero Exactly these guards missed: LangKit; caught: Lakera Guard, Prompt Guard, NeMo Guardrails, LLM Guard. This cell is structurally zero. 1structural zero Exactly these guards missed: Prompt Guard; caught: Lakera Guard, LangKit, NeMo Guardrails, LLM Guard. This cell is structurally zero. 1structural zero Exactly these guards missed: Lakera Guard; caught: Prompt Guard, LangKit, NeMo Guardrails, LLM Guard. This cell is structurally zero. 1structural zero Exactly these guards missed: no guard; caught: Lakera Guard, Prompt Guard, LangKit, NeMo Guardrails, LLM Guard. This cell is structurally zero. 0structural zero
Text-only cell counts
miss patternguards that misscountcell state
11111Lakera Guard, Prompt Guard, LangKit, NeMo Guardrails, LLM Guard9observed
01111Prompt Guard, LangKit, NeMo Guardrails, LLM Guard3observed
10111Lakera Guard, LangKit, NeMo Guardrails, LLM Guard0observed zero
11011Lakera Guard, Prompt Guard, NeMo Guardrails, LLM Guard0observed zero
11101Lakera Guard, Prompt Guard, LangKit, LLM Guard18observed
11110Lakera Guard, Prompt Guard, LangKit, NeMo Guardrails0structural zero
00111LangKit, NeMo Guardrails, LLM Guard0observed zero
01011Prompt Guard, NeMo Guardrails, LLM Guard0observed zero
01101Prompt Guard, LangKit, LLM Guard26observed
01110Prompt Guard, LangKit, NeMo Guardrails0structural zero
10011Lakera Guard, NeMo Guardrails, LLM Guard0observed zero
10101Lakera Guard, LangKit, LLM Guard0observed zero
10110Lakera Guard, LangKit, NeMo Guardrails0structural zero
11001Lakera Guard, Prompt Guard, LLM Guard3observed
11010Lakera Guard, Prompt Guard, NeMo Guardrails0structural zero
11100Lakera Guard, Prompt Guard, LangKit0structural zero
00011NeMo Guardrails, LLM Guard0observed zero
00101LangKit, LLM Guard1observed
00110LangKit, NeMo Guardrails0structural zero
01001Prompt Guard, LLM Guard18observed
01010Prompt Guard, NeMo Guardrails0structural zero
01100Prompt Guard, LangKit0structural zero
10001Lakera Guard, LLM Guard0observed zero
10010Lakera Guard, NeMo Guardrails0structural zero
10100Lakera Guard, LangKit0structural zero
11000Lakera Guard, Prompt Guard0structural zero
00001LLM Guard4observed
00010NeMo Guardrails0structural zero
00100LangKit0structural zero
01000Prompt Guard0structural zero
10000Lakera Guard0structural zero
00000no guard0structural zero
The all-miss value is one cell, not an endpoint. The 11111 row is the registered 9 / 82 all-miss count. LLM Guard catches 0 / 82, so the 16 cells where its dot would say “catch” are structurally empty; they are not measured zeroes. The other 8 zero-count cells were possible under those marginals but did not occur in this released file. Counts describe the author-selected BELLS subset at its released native verdicts, not a vendor, a population, or a deployed stack; no item identities are published.
Scope, stated before anyone asks: the released 170 prompts are an author-selected subset (of 990 non-adversarial prompts; the study's ~4,165 adversarial prompts have no per-item release) under an unstated selection rule — so these are counting facts about exactly that file, not estimates of any system's true rate, and no interval is offered because the sampled population is undefined. The full envelope, falsifier, and forbidden rescues: claim MC-002. Reproduce it: python scripts/reanalyze_bells_subset.py — the file is hash-verified before a single count is taken.

Machine-readable MJGD v1

The human template above now has a small structural JSON schema, implementation notes, and a standard-library validator. Use the validator for semantic conformance: it checks declared evidence boundaries and arithmetic, not safety, calibration, route risk, or adaptive robustness.

MJGD v1 conformance fixtures and their validated states
Illustrative fixtureValidator stateWhat that state means
parallel-full-exposure.jsonrecomputed staticComplete binary full-exposure outcomes; every printed positive and benign count is recomputed.
sequential-route.jsonheld: route declarationA routed or gated declaration is held, not collapsed into static full-exposure arithmetic.
partial-release.jsonrecomputed aggregate patternsA complete controlled aggregate-pattern table; positive static results are recomputed without item identities.
aggregate-only.jsonnot identifiedMarginals only; the exact finite all-miss identified set is shown instead of inventing a realized joint result.
missing-data.jsonheld: missing dataAn explicit timeout, error, or non-exposure cell is held rather than silently scored.
One recomputed fixture, not a benchmark result: 4 positives, A catches 2, B catches 2, any guard catches 3, and all guards miss 1. Its benign union is 1 of 1. These are synthetic fixture counts, included to make the contract replayable rather than to characterize any deployed system.
python scripts/validate_mjgd.py --test      # five fixture states + refusal tests
python scripts/validate_mjgd.py --fixtures  # inspect every committed fixture

The ask, for benchmark authors

You evaluated multiple guardrails on a common benchmark. Did you retain one binary decision per item for every system? If so, would you consider publishing the union detection rate and the corresponding all-miss rate, together with the denominator and event definition? Those two rows identify static all-miss for the declared full-exposure evaluation without assuming independence — and I will gladly supply the calculation or a small reporting patch: bhavepranavwork@gmail.com.

Reference implementation

scripts/mjgd_reference.py computes every static component above from one decision per item per guard — union, all-miss, residual coverage in stack order, and pairwise intersections — and asserts its own identities (union + all-miss = denominator; residual coverage telescopes to the union; intersections respect their feasibility bounds) against synthetic fixtures in CI. It is ~a hundred lines, and it is the entire cost of the disclosure when per-item decisions were retained.

What this page does not claim: that any organization has adopted this schema; that the missing statistics, once measured, would show strong dependence; or that disclosure alone makes a stack safe. The census tracks the first; measurement — not assumption — settles the second; nothing settles the third.