Founders

How to Test Whether a Disclosure Reviewer Catches a Planted Leak

Antonio Evans10 min read

A top-down view of a desk with two stacks of paper drafts.
Key points

Key points

  1. 1Build 20 to 50 drafts with one or more planted disclosures of known type and severity, then have the reviewer process them without labels.
  2. 2Count flagged plants divided by total plants to get recall (catch rate), and run clean drafts to measure the false positive rate separately.
  3. 3A reviewer needs a minimum bar on both numbers before it touches real material, for example at least 90 percent of critical plants caught with no more than 10 percent false positives.
  4. 4Report catch rate by disclosure type, because a reviewer that catches secrets but misses personal data will pass a blended average and still fail you.

Start from what a disclosure actually is

A disclosure reviewer exists to stop material from leaving your control with something inside it that should not travel. Getting the test set right means being precise about categories, because the reviewer's job differs for each one.

Trade secrets cover engineering information, methods and know-how, formulas, business and financial information, source code, pending patent applications, business plans, budgets, and customer and supplier lists, according to Finnegan's primer on US trade secret law. The same source stresses that courts may require an owner to identify its alleged secrets before discovery begins, which is a useful discipline for your eval: if you cannot name the secret in a test draft, you cannot score whether the reviewer found it.

Two definitions do the heavy lifting. Information qualifies only if it is not generally known outside the company and has actual or potential economic value from staying that way, per WIPO's trade secret FAQ. Potomac Law's business guide puts the test as two questions: is it known outside the company, and does it have value from not being known. Both point at the same failure mode that matters in a leak test: once disclosed without restriction, the status is lost.

Personal data is a different animal. Under the privacy framing used by the NSW Information and Privacy Commission's guidance on generative AI, personal information is information or an opinion about an individual whose identity is apparent or can reasonably be ascertained. That definition is broad enough that a name plus a role plus a location can qualify, which is exactly the kind of sentence that slips past a keyword reviewer.

There is a third category worth planting: context that makes a leak worse, such as an internal designation. Confidential material should carry a notice or marking, and Finnegan gives model language for a confidential header and page markings, while Potomac Law offers a shorter warning legend. Your reviewer should be tested on whether it treats an unmarked but clearly internal document as sensitive too, because real drafts arrive unmarked.

The practical lesson from these sources is that "disclosure" is not one thing. Build your test set across at least three families: secrets (code, formulas, financials), personal data (names tied to identifiers), and regulated or marked material (confidential legends, contract terms, health or financial records). The Document360 review checklist lines up with this by separating safety and compliance review, including leaked secrets and legal content, from accuracy and style checks, so a single pass does not mask a missed category.

Design the test set so the numbers mean something

The short answer is 20 to 50 drafts, each carrying at least one planted disclosure. Below about 20 you cannot say much about a low-frequency miss; above 50 the setup cost usually exceeds the value until you have fixed obvious gaps.

Coverage matters more than raw count. A useful structure is 30 planted drafts and 20 clean ones for a first run, with the plants spread like this:

CategoryExample plantCountSeverity
Source code secretA function copied into an architecture note5Critical
Commercial termsUnreleased pricing or a discount floor in a partner deck4Critical
Customer listNamed accounts with contract values4High
Personal dataFull name with payroll or ID details5High
Health or financial recordIndividual record pasted into a case study3Critical
Marked confidentialExcerpt carrying a confidentiality legend3Medium
Near-miss, not a plantGeneric public pricing, fictional sample data6None
Clean draftsOrdinary internal memo with no sensitive content14None

Two design choices keep this honest. First, keep plants realistic in placement: bury one inside a table, one in an appendix, one in a sentence that also contains public information. Upguard's write-up on shadow AI data leaks is a reminder that most leakage is mundane and convenience-driven rather than dramatic, so the plants should look like ordinary work product. Second, plant near-misses deliberately. If your reviewer flags every nine-digit number, it will look excellent on planted Social Security numbers and useless in production, which is the point Netwrix's tuning playbook makes about pattern-only matching.

Write the ground truth before you run anything. For each draft, record the exact span that counts as the plant, its category, its severity, and the single sentence that would satisfy you as a catch. Store this in a file the reviewer never sees, keyed by draft ID.

{
  "draft_id": "D-014",
  "plants": [
    {
      "plant_id": "P-014-a",
      "category": "commercial_terms",
      "severity": "critical",
      "span": "floor discount of 18% for volumes above 500 seats",
      "pass_if": "flags the discount floor as unreleased commercial terms"
    }
  ],
  "expect_clean": false
}

Sanitize and fictionalize: use invented company names and structurally valid but fake identifiers, and keep the whole set in a separate repository with the same access controls you would put on the real thing. A test corpus built from real customer data becomes its own disclosure problem, and the Principles of Transparency and Best Practice are a useful reference for how policy documents should be clear about process and ownership.

Define what counts as a catch before you run it

This is where most internal evals quietly become theatre. If a reviewer output says "this document may contain sensitive information" and your scorer counts that as a hit, you will measure politeness, not detection.

Write a scoring rule per plant and apply it mechanically:

  • Catch: the output identifies the specific span or an unambiguous paraphrase, names the category correctly, and cites the location. For P-014-a above, "unreleased discount floor" with the section reference is a catch; "commercial content present" is not.
  • Partial: identifies the right area but the wrong category or no location. Count partials as misses in the headline number and track them separately, because a reviewer that only produces partials is telling you its prompts or context window are wrong.
  • Miss: nothing, or a flag on a different part of the document.
  • False positive: any flag on a clean draft, or a flag on a near-miss that is genuinely not sensitive.

The vocabulary here is borrowed from classification metrics. Recall, also called the true positive rate, is the share of actual positives that were flagged, and precision is the share of flags that were correct, as Google's machine learning crash course sets out. Your catch rate is recall at the plant level. Accuracy alone is a bad headline metric for this task because most drafts in a real queue are clean, so a reviewer that flags nothing scores well on accuracy and misses everything that matters.

The DISCO guide to generative AI document review offers a matching discipline: run an alignment sample, check results against human reviewers, analyze discrepancies, then run a second sample. Adopt that for your scorer too. Have a second person score 10 drafts independently and compare. If the two of you disagree on more than about a tenth of plants, your definitions are too loose and the catch rate is not yet a number you can act on.

There is a second reason to write the pass condition down. Different review tools phrase their instructions as explicit pass and fail criteria (for example "pass only if the exact disclosure text appears fully visible on page 1"), and that phrasing is what makes automated suggestions checkable, as Ziflow's prompt documentation shows. Your scoring rules should be written to the same standard: specific, testable, and identical in shape to the instruction you would give the reviewer.

Run the reviewer blind and compute the rate

Blindness has three parts: the reviewer must not know which drafts are planted, must not see the ground-truth file, and must not see the scoring rules in a form that lets it reverse-engineer the test. Strip draft IDs that hint at category, shuffle order, and run the reviewer in a fresh session per draft or per batch so context from a previous draft does not leak in. That last point has empirical support: a controlled study of 30 artifacts with 150 planted errors reported that removing the generation conversation before review improved defect detection, and that repeated review rounds increased false positives by 62 percent without improving recall, per the cross-model review paper on arXiv.

Then compute:

catch_rate_overall = plants_caught / plants_total
catch_rate_by_type = plants_caught_in_type / plants_total_in_type
false_positive_rate = clean_drafts_flagged / clean_drafts_total
precision = plants_caught / (plants_caught + clean_drafts_flagged)

Work a small example. Suppose you plant 30 disclosures across 30 drafts and add 20 clean drafts. The reviewer catches 22 plants and flags 3 clean drafts. Overall catch rate is 22/30, about 73 percent. False positive rate is 3/20, 15 percent. Precision is 22/25, 88 percent. Suppose further that the 8 misses split as 6 critical and 2 medium, so only 8 of 14 critical plants were caught, which is 57 percent. A blended 73 percent hides a 57 percent critical number, and the critical figure is the one that should stop the rollout.

Two cautions on the arithmetic. Small samples make each plant worth a lot: with 14 critical plants, one miss moves the critical rate by 7 points, so treat differences under about 10 points as noise. And if you have several reviewer configurations, do not pick the one with the best number on the same test set you used to tune it. Hold back a validation set of 10 to 15 drafts, run once, and report that.

Report the results as a short table by category, severity, and reviewer version, plus the false positive rate and a one-line note on how partials were counted. That is the artifact your team can argue about, and it is reusable for every prompt change. Version the prompt alongside the results: when a prompt description is edited, a new version is stored and can be re-run against the same checklist, as Ziflow describes for its own review tooling, and mirroring that discipline makes a regression visible immediately.

There is one more leak to close. If the person who wrote the plants also runs the reviewer and decides what counts as a catch, you have a single point of judgment with a stake in the outcome. Swap roles for the scoring pass: whoever wrote the drafts scores the output, and whoever runs the reviewer reviews the scores. It costs an hour and removes an obvious way for a weak reviewer to look strong.

Set a minimum bar and a decision rule

A bare threshold ("must catch 90 percent") invites gaming. Use two numbers plus a stop rule, and tie both to the cost of a miss.

TierCritical catch rateOverall catch rateClean false positive rateWhat it means
Not fitBelow 70%Below 60%AnyDo not use on real drafts
Assisted only70% or more60% or more15% or lessEvery flag and every clear needs a human read
Trusted with audit90% or more80% or more10% or lessSampled human audit of cleared drafts continues
Structural change neededMeets recall, fails false positivesAbove 20%Fix the rules or context before scaling

The reasoning behind the false positive column: alert fatigue is what kills review programs, not misses alone. Cyberhaven's analysis cites a survey of 300 security leaders finding that 51 percent of DLP alerts are false positives on average, and Netwrix cites ESG research finding teams remediate just 8 percent of generated DLP alerts as true positives. A reviewer that floods a queue trains people to dismiss it, and Prophet Security's piece on uninvestigated DLP alerts makes the same point from the queue side. Your eval exists to catch that before it happens.

The stop rule is simpler than the table: any missed critical plant is a named failure, written down, with the draft ID. Recurring misses in one category mean the reviewer's instructions or its context are wrong for that category, not that the number needs a friendlier threshold. OAD Technologies' guide to reducing false positives makes the same recommendation for DLP tuning generally: trace each alert to its cause and change the rule with evidence, rather than lowering enforcement.

Two more practical rules. Re-run the same test set after any prompt, model, or pipeline change, and keep the old results so you can see regressions. And retire and replace roughly a quarter of the test drafts each quarter to reduce the odds that the reviewer has been tuned into a fixed set; keep the category mix stable so the numbers stay comparable.

Finally, decide in advance what happens on a fail at the workflow level, not just the model level. The disposition options are: block publication until a human clears the draft, ship with the reviewer's flags attached for the editor to address, or ship clean and audit a sample later. Tying each disposition to a tier in the table above means nobody has to negotiate in the middle of a live review.

Where this fits your AI review pipeline

If your reviewer is a model behind an API, the test set doubles as your acceptance test for any provider change. Running 50 drafts through one endpoint is cheap and takes minutes, which is what makes a blinded eval practical rather than a quarterly project. Quanta Inference offers text, image, and embedding models through one OpenAI-compatible API key, so you can hold the eval fixed and swap the model underneath it to see which reviewer configuration clears your bar.

If you would rather have the review pipeline, the scorer, and the test harness built and versioned with you, Quanta takes a description of what you need and pairs you with a specialist, and a free 30-minute discovery call is a sensible place to decide whether the test set or the reviewer should be rebuilt first.

FAQ

FAQ

How many drafts do I need before the catch rate is meaningful?

Twenty drafts is the practical floor and 50 is usually enough for a first decision. Below 20, a single miss moves the percentage enough that you cannot separate a real weakness from noise. Split the set so each category and severity has several plants, and hold back 10 to 15 drafts for a single validation run.

Should a reviewer be tested on clean drafts too?

Yes, and separately. Clean and near-miss drafts are the only way to measure false positives, which determine whether people will trust the reviewer's flags. Report the clean flag rate alongside the catch rate, because a high catch rate with a noisy queue is a program that gets switched off.

What counts as a catch if the reviewer describes the problem without quoting it?

A specific paraphrase with the category named and the location cited counts as a catch, provided your written pass condition for that plant says so. A vague statement that the document may contain sensitive information does not count, because it would apply to almost any draft. Decide this per plant before you run anything, and score partials as misses in the headline number.

How do I stop the reviewer from seeing which drafts are planted?

Strip IDs and metadata that hint at category, shuffle the order, and keep the ground truth in a file the reviewer never receives. Start a fresh session for each draft or small batch so context from one document does not carry into the next. The cross-model review study found that removing the generation conversation before review mattered for detection, so context carry-over is a real source of contaminated scores.

What do I do when the reviewer fails the bar?

Separate the failure by category first. If it misses one category consistently, the pass conditions or the context supplied are wrong, and tightening the prompt is cheaper than replacing the reviewer. If it fails broadly or cannot hit the critical bar after one revision cycle, keep it in assisted-only mode with full human review of every cleared draft until a different configuration passes the same test set.

Sources

Sources

  1. Trade Secrets: What Your Company Needs to Know | Articles
  2. Frequently Asked Questions on Trade Secrets
  3. Trade Secrets - What your Business Needs to Know
  4. Privacy risks associated with the use of generative AI tools
  5. How to Review AI-Generated Documentation: Complete ...
  6. The Shadow AI Data Leak Problem No One's Talking About
  7. How To Reduce DLP False Positives: A Tuning Playbook
  8. Principles of Transparency and Best Practice in Scholarly ...
  9. Classification: Accuracy, recall, precision, and related metrics
  10. How to Use Generative AI for Document Review - DISCO
  11. Create and edit ReviewAI prompt descriptions
  12. When Does a Second Model Help?Cross-Model Review in ...
  13. DLP False Positives: What They Are and How to Reduce ...
  14. Why Most DLP Alerts Go Uninvestigated
  15. How to Prevent False Positives in DLP: A Practical ...
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles