ealeng

Episode 52 of 56 · Governance

Incident response: who decides how bad it is?

An internal assistant told an employee that a colleague was recovering from knee surgery. That's health data: P1 under the company's policy. Asked to rate it, two models said P2 all 12 times. On 24 made-up incident reports, letting the model answer fact questions and having code apply the policy wasn't more accurate than letting it name the level, but it rated fewer incidents too low and showed which fact went wrong. Then the clocks (72 hours from Friday 4 pm is Monday 4 pm) and a vendor questionnaire where one misread sentence turned an approval into a rejection.

Lab 17 · Governance14 min read
Video transcript9:54

0:00Cold open

0:01

An employee asked our internal assistant why a colleague was off work.

0:06

It answered: knee surgery.

0:09

That’s health data about a person. Our incident policy says exposing it is the most serious level, P1. Call legal right away.

0:19

I asked an AI model how serious this incident was.

0:24

It said P2, one level lower.

0:27

And its own reason even says “special-category data”. Those are the exact words that make it P1.

0:36

I tried two methods, on two models, three times each. Twelve answers. All P2.

0:43

So who should decide how bad an incident is?

0:47Intro

0:48

Hands-on AI engineering: AI governance, part four.

0:53

Today: when something goes wrong. And when an outside company wants our data.

0:59Meet Grace

1:00

I’m Grace, the AI governance lead at Lantern Outfitters, a made-up outdoor gear shop.

1:07

In this series, I listed our sixteen AI systems, gave each a risk level, and built a launch checklist.

1:14

Today: what happens when one of them fails anyway.

1:19

The first decision is a label: how bad is it? We call that the severity, from P1 to P4.

1:26

It works like triage in an emergency room. P1 means call everyone, now.

1:32

P4 means it can wait.

1:35

The label decides who gets called, and how fast.

1:40

Rate an incident too low, and the people who should know don’t find out.

1:4601 · Two ways

1:48

To test this, I wrote twenty-four made-up incident reports.

1:53

For each one, I worked out the right level by hand, from its facts and the policy.

1:59

Then I tried two methods. The first: the model reads the policy, and names the level.

2:06

The second: facts first. The model doesn’t pick a level. It only answers questions about the report.

2:13

Was anyone hurt? Was special-category or financial-account data exposed? How many people? Remember that middle question.

2:22

Then a few lines of code apply the policy’s table to those answers. A checklist, instead of a gut call.

2:30

I ran both methods on a small model and a bigger one, three times each.

2:3602 · The results

2:38

First question: was facts first more accurate?

2:42

Not on this small test. On the first try, the small model got three more right. The bigger one got two fewer.

2:50

But one mistake matters more than the others: rating an incident too low.

2:56

When the models named the level, the small one rated five incidents too low. The bigger one, two.

3:03

With facts first, each model rated only one too low.

3:08

Its mistakes lean the safe way instead: too high. The bigger model rated five incidents too high.

3:16

Too high costs an extra phone call. Too low, and the people who must know may never hear.

3:23

Facts first also found more of the P1s, and changed its answer less often between tries.

3:30

And that one too-low rating, on both models? The knee surgery.

3:3603 · One word

3:38

Facts first shows you exactly which answer went wrong.

3:42

For the knee surgery, one question decides it: was special-category or financial-account data exposed?

3:50

The bigger model said no, all three times. So the table gave P2.

3:56

“Special-category” is legal language. In data protection law, it covers health, religion, and a few other sensitive kinds of data.

4:06

Our policy uses the term, but never says what it covers.

4:11

Why did the model say no? I don’t know yet. My next test: spell the categories out in the policy, and run it again.

4:20

A mistake like that went the other way, too. The CEO’s salary was shown to a contractor. By the policy, that’s P2.

4:28

But the bigger model answered yes, all three times. So the table said P1. When it named the level instead, once its reason called the salary financial-account data.

4:41

Our runbook is the written step-by-step for incidents. It now says it plainly: financial-account data means card and bank account numbers. Not salaries.

4:5304 · The clock

4:54

Even a perfect label is only the start. Next comes the clock.

4:59

Here’s a made-up case. A logging change wrote eight thousand customers’ card numbers into log files.

5:06

Some of those customers live in the EU.

5:10

We find out on a Friday, at four in the afternoon. The clock starts then, when we know.

5:17

Under GDPR, the EU’s data protection law, we usually have seventy-two hours to tell the regulator. When is that?

5:28

Monday, four p.m. The seventy-two hours run straight through the weekend.

5:34

Our shares trade in the US. If a breach matters enough to investors, we must also tell the SEC, the US stock-market regulator.

5:45

That clock is four business days, from when we decide it matters. Business days skip the weekend. Decide on Friday, and it’s Thursday.

5:54

Other facts start other clocks. A US hospital leaking patient data has up to sixty days to tell the patients.

6:03

These dates come from a teaching version of the rules, not legal advice.

6:09

So the runbook needs someone on call on Saturday who can decide to notify. And someone has to write down the moment we knew.

6:1905 · Three vendors

6:20

Our seventy-two hours also run when a vendor leaks our data.

6:25

A vendor here is an outside company, like an AI provider we send customer data to.

6:32

So before we hand data over, we ask them ten questions.

6:37

Where is the data kept? Do you train your models on it? How fast will you tell us about a breach?

6:44

Some answers block the deal outright. Others need a condition in the contract.

6:50

And “not stated” counts as an answer. A vendor that won’t say whether it trains on our data is treated like one that does.

6:59

I wrote trust pages for three made-up vendors. Northwind is specific on every point.

7:06

Brightline is vague, and may train on your data.

7:10

Kestrel is honest, but its terms are weaker.

7:1406 · The model reads

7:16

Next, I asked the bigger model to fill in the questionnaire from each page. Three times.

7:22

Three vendors, ten questions, three tries: ninety answers. It got eighty-four right.

7:29

Where a page says nothing, would it make an answer up?

7:35

No. Brightline’s page leaves five questions unanswered. On every try, the model said: not stated.

7:43

All six of its mistakes were on Kestrel’s page: two sentences, misread on every try.

7:50

Kestrel promises to notify customers of a breach “without undue delay”. The model read that as: not stated.

7:59

And “we will delete it within 30 days” it read as confirmed deletion. The page never says they confirm it.

8:0807 · The decision

8:10

Then the rules turn the answers into a decision.

8:14

From the pages, read by a person: Northwind, approve. Brightline, reject. Kestrel, approve, with eight conditions.

8:23

From the model’s answers: Kestrel, reject.

8:28

Why? A missing breach promise blocks the deal. So one misread sentence turned an approval into a rejection.

8:36

Its other mistake went the risky way: it gave Kestrel credit for confirming deletion. The page never promises that.

8:45

So from now on, the model must quote the sentence behind each answer. This test didn’t ask it to.

8:52

And a person checks those sentences before anyone signs, or says no.

8:59Back to Grace

9:01

So, who should decide how bad an incident is? The model finds the facts. The policy decides.

9:08

And that’s the last of the four documents in this series.

9:12

A registry of every system. A gate before launch. A runbook for when things go wrong. And a review of every vendor.

9:21

Each one was built from tests. And the tests showed where the documents’ words were unclear.

9:28

Facts first didn’t fix the knee surgery. It still came out P2. But it showed me which answer went wrong, and which word to test next.

9:37

In every one, the model drafts. The rules and a person decide.

9:44Summary

9:45

Let the model find the facts, and let the policy decide.

9:49

Then have a person check the words.Grace: Facts first.

Key takeaways

  • ✓Severity (P1 to P4) is triage: the label decides who gets called and how fast. The error that matters is rating too low, because the people who must know don't find out. Too high costs an extra phone call.
  • ✓Two methods on 24 made-up reports, first try. Name it: the model reads the policy and picks a level (gpt-5.4-nano 17 right, gpt-5.4-mini 20). Facts first: the model only answers questions about the report and code applies the policy's table (nano 20, mini 18). Not more accurate: neither difference is significant (p = 0.45 and 0.69).
  • ✓Facts first rated 1 report too low on each model, against 5 (nano) and 2 (mini) when naming the level. It found 4 of 5 P1s against 2 and 3, and changed its answer between tries on 1 report of 24 against 6 and 2. Its mistakes lean the safe way: mini rated 5 reports too high.
  • ✓The knee surgery was P2 in all 12 answers. With facts first, the models answered no to "was special-category or financial-account data exposed?" all 6 times. The policy uses that legal term and never says what it covers. The CEO's salary went the other way: mini called it financial-account data 3 times out of 3. The runbook now says financial-account data means card and bank account numbers.
  • ✓The clocks start when the company knows, so someone writes that moment down. Aware Friday 23 October 2026 at 16:00: GDPR's 72 hours (weekend included) end Monday 16:00; the SEC's 4 business days end Thursday 16:00. The runbook needs someone on call over the weekend who can decide to notify.
  • ✓Vendor review: 10 questions, some answers block the deal, "not stated" counts as an answer. gpt-5.4-mini filled in 84 of 90 answers right and never made one up; all 6 mistakes were two of Kestrel's sentences, misread every try. One of them, "without undue delay" read as not stated, turned Kestrel's approval with 8 conditions into a rejection. The model drafts; a person checks the quoted sentences.

An internal assistant told an employee that a colleague was off work for knee surgery. That's health data, and the company's incident policy makes exposing it the most serious level, P1. Asked to rate it, a model said P2. This chapter tests who should decide how bad an incident is, then follows what comes next: the clocks that start when the company knows, and the questions to ask an outside company before it gets your data.

The source is Lab 17 (Governance), scripts 04_incidents.py and 05_vendors.py, recorded in October 2026; the video uses that run's recorded replies, no new calls. The company, Lantern Outfitters, its 24 incident reports and the three vendors are made up; every rating and answer is a recorded call to gpt-5.4-nano or gpt-5.4-mini. This is the last chapter on governance: chapter 49 listed every AI system, chapter 50 gave each a risk level, and chapter 51 built a launch checklist. The incident runbook and vendor questionnaire quoted here are two of the four documents the lab's script 06 writes.

Severity: P1 to P4

The first decision in an incident is a label: how bad is it? It works like triage in an emergency room. P1 means call everyone, now; P4 can wait. The lab's policy, written the way a runbook would state it:

Level If any of these is true
P1 someone was physically harmed or put at risk; a decision about people discriminated unlawfully; special-category or financial-account data was exposed; more than 10,000 people affected
P2 other personal data reached someone not allowed to see it; more than $10,000 lost or committed; the system made a wrong commitment for the company; the incident is public; more than 1,000 people affected
P3 wrong or harmful output reached users; any money lost
P4 nothing reached users: caught before release, quality drift, a near miss

The label decides who gets called. In the runbook, P1 pages the on-call engineer, the system owner, security and legal now, and informs an executive within an hour; P3 is a ticket for the owning team. So rating an incident too low is the mistake that matters: the people who should know don't find out. Too high costs an extra phone call.

Two ways to rate an incident

The lab wrote 24 made-up incident reports: 5 P1, 8 P2, 5 P3, 6 P4. For each, the facts were coded by hand (was anyone hurt, which data, how many people, how much money) and the right level is the policy applied to those facts. Then two methods, on two models, three tries each:

  • Name it. The model reads the policy and the report, and replies with a level and a one-sentence reason.
  • Facts first. The model doesn't pick a level. It answers nine questions about the report (was anyone hurt? was special-category or financial-account data exposed? how many people? how much money?), and a few lines of code apply the policy's table to the answers. A checklist, instead of a gut call.
# incidents.py
def severity(f: Facts) -> str:
    if f.physical_harm or f.discrimination or f.special_or_financial_data or f.people_affected > 10_000:
        return "P1"
    if f.personal_data_exposed or f.money_usd > 10_000 or f.wrong_commitment or f.public or f.people_affected > 1_000:
        return "P2"
    if f.reached_users or f.money_usd > 0:
        return "P3"
    return "P4"

Pick a report and see all twelve answers, the models' reasons, and the facts behind the facts-first rating:

Try it · How bad is it? Two ways to askLab 17 · script 04 · 24 made-up reports, recorded replies

Asked why a colleague was out, the internal assistant told an employee that the colleague was recovering from knee surgery.

Right level, from the hand-coded facts and the policy: P1

MethodModelTry 1Try 2Try 3
Name itgpt-5.4-nanoP2P2P2
Name itgpt-5.4-miniP2P2P2
Facts firstgpt-5.4-nanoP2P2P2
Facts firstgpt-5.4-miniP2P2P2

Green: right. Red: rated too low. Amber: rated too high. Name it: the model reads the policy and picks a level. Facts first: the model answers questions about the report, and code applies the policy's table.

All 24 reports · first try

Method · modelRightToo lowToo highP1s found (of 5)Changed in 3 tries
Name it · nano17 / 245226
Name it · mini20 / 242232
Facts first · nano20 / 241341
Facts first · mini18 / 241541

Facts first wasn't more accurate, but it rated fewer reports too low and changed its answer less. Its one too-low rating, on both models, was #1, the knee surgery.

The results

First try, on the 24 reports:

Method Model Right level Rated too low Rated too high P1s found (of 5) Changed in 3 tries
Name it gpt-5.4-nano 17 (71%) 5 2 2 6
Name it gpt-5.4-mini 20 (83%) 2 2 3 2
Facts first gpt-5.4-nano 20 (83%) 1 3 4 1
Facts first gpt-5.4-mini 18 (75%) 1 5 4 1
  • Not more accurate. Facts first got 3 more right on the small model and 2 fewer on the bigger one. On 24 reports neither difference is significant (paired test, p = 0.45 and 0.69). The lab's draft expected facts first to win here; it didn't.
  • Fewer rated too low. One on each model, against 5 and 2 when the model named the level.
  • Its mistakes lean the safe way. Facts first on mini rated 5 reports too high: the CEO's salary, two refund incidents, a server outage nobody saw, and an analyst seeing payroll. Each one is an extra phone call, not a missed one.
  • More consistent. It found 4 of the 5 P1s on the first try and changed its rating between tries on only 1 report.

And the one report facts first rated too low, on both models, was the knee surgery.

The mistake points at a word

Facts first shows you exactly which answer went wrong. For the knee surgery, one question decides the level: was special-category or financial-account data exposed? Both models answered no, all 6 times, so the table gave P2. Naming the level fared no better: all 6 of those answers said P2 too, 12 of 12 in all. The small model's own reason even said it: "disclosed personal health information (special-category data) … so the incident fits P2".

"Special-category" is legal language. In data protection law (GDPR Art. 9) it covers health, religion, sexual orientation and a few other sensitive kinds of data. The policy uses the term and never says what it covers. Why the models answered no isn't known yet; the next test is to spell the categories out in the policy and run it again.

A mistake like that went the other way, too. The CEO's salary was shown to an outside contractor. By the policy that's P2: personal data, but not card or bank details. Facts first on mini answered yes to the same question, 3 times out of 3, so the table said P1. Naming the level, mini once gave the reason "the leaked CEO salary is financial-account data". The lab's runbook now spells it out:

Known ambiguity, found by testing: 'financial-account data' means card and bank account numbers, not salaries or refund amounts.

That's the use of facts first beyond the numbers: a wrong rating points at one answer, and the answer points at a word in the policy. A severity table needs testing like code does, and this is how you find its unclear words. (The runbook doesn't spell out special-category data yet; the knee surgery says it should.)

The clock

Even a perfect label is only the start. Notification rules start clocks, and the clock starts when the company becomes aware, so someone has to write that moment down in the incident record.

The lab's case: a logging change wrote 8,000 customers' full card numbers into log files. Some of them live in the EU, and the company's shares trade in the US. It finds out on Friday 23 October 2026, at 4 pm.

Tell Rule By
the EU data protection regulator GDPR Art. 33: 72 hours, weekend included Monday 26 October, 4 pm
the people affected GDPR Art. 34 (high risk) without undue delay
the SEC, on Form 8-K Item 1.05: 4 business days after deciding it matters to investors Thursday 29 October, 4 pm

Other facts start other clocks. A US hospital assistant leaking 320 patients' health data gives 60 days to tell the patients (Tuesday 22 December), and HHS gets it in an annual log by 1 March 2027 because it's under 500 people. A high-risk hiring AI's widespread error, once the EU AI Act's high-risk rules apply (2 December 2027 for hiring), gives 2 days to tell the market surveillance authority. These come from the lab's teaching version of the rules, not legal advice.

Move the moment of awareness and watch the deadlines:

Try it · The clock starts when you knowLab 17 · script 04 · a teaching version of the rules

Card numbers for 8,000 customers sat in log files. Some live in the EU, and the company's shares trade in the US. When did the company become aware?

TellRuleCountsBy
EU data protection regulatorGDPR Art. 3372 hours, weekend includedMon, Oct 26, 04:00 PM
The people affectedGDPR Art. 34 (high risk)no fixed numberwithout undue delay
The SEC (Form 8-K)Item 1.054 business days, from deciding it matters to investorsThu, Oct 29, 04:00 PM
For comparison: a US hospital's patientsHIPAA §164.40460 daysTue, Dec 22, 04:00 PM
Weekend hours inside the 72
48
Calendar days to the SEC deadline
6

Computed like the lab's incidents.deadlines(): business days skip Saturday and Sunday, public holidays aren't modeled. The SEC clock here assumes the company decides it matters the moment it knows. US state laws and sector rules add more. Not legal advice.

72 hours from Friday afternoon is Monday afternoon, with 48 of those hours on the weekend. So the runbook needs someone on call on Saturday who can decide to notify, not just someone who can restart a server.

Three vendors

The 72 hours also run when a vendor leaks your data: an outside company, like an AI provider you send customer data to. (GDPR Art. 33(2) makes the vendor tell you "without undue delay", so you can meet your own 72 hours.) So before handing data over, the company asks ten questions:

Question Blocks the deal Needs a condition in the contract
Where is our data processed and stored? US, not stated
Is our data used to train your models? yes, not stated opt-out
How long do you keep prompts and outputs? over 30 days, not stated
Can we have our data deleted, and do you confirm it? unconfirmed, not stated
Do you have a SOC 2 report, and which type? not stated Type I, type not stated
How fast will you tell us about a security incident? not stated no fixed time
Do you publish subprocessors and tell us before adding one? no notice, not stated
Will you sign a data processing agreement? not stated
Do you tell us before changing a model we use? no notice, not stated
Is our data encrypted in transit and at rest? vague, not stated

"Not stated" counts as an answer, usually the worst plausible one: a vendor that won't say whether it trains on your data is treated like one that does.

The lab wrote trust pages for three made-up vendors. Northwind is specific on every point (EU or US region, no training, 30-day retention with a deletion certificate, SOC 2 Type II, 48-hour breach notice). Brightline says "enterprise-grade security" and "SOC 2 compliant", and may train on your data. Kestrel is an honest FAQ with weaker terms: SOC 2 Type I, 90-day retention, training on by default for self-serve accounts, US only.

The model reads, the rules decide

Each model filled in the questionnaire from each page, three times: 3 vendors × 10 questions × 3 tries, 90 answers per model.

Model Right answers Made up an answer the page doesn't give
gpt-5.4-nano 74 of 90 (82%) 0
gpt-5.4-mini 84 of 90 (93%) 0

Where a page says nothing, neither model made an answer up: Brightline's page leaves five questions unanswered, and mini said "not stated" every time. All six of mini's mistakes were on Kestrel's page, two sentences misread on every try:

  • "We will notify affected customers without undue delay" read as not stated. The right answer is "no fixed time": a condition, not a blocker.
  • "Yes, contact support and we will delete it within 30 days" read as confirmed deletion. The page never says they confirm it.

Then the rules turn the answers into a decision. From the pages, read by a person: Northwind approve, Brightline reject (training on customer data, no breach notice, no data processing agreement), Kestrel approve with 8 conditions. From mini's answers, Kestrel became reject: a missing breach promise is a blocker, so one misread sentence turned an approval into a rejection. Its other mistake went the risky way, giving Kestrel credit for a promise the page doesn't make.

Try it · Can we send them our data?Lab 17 · script 05 · three made-up vendors, gpt-5.4-mini
Read Kestrel LLM's trust page

Kestrel LLM — Data, Privacy and Compliance FAQ Is my data used for training? Only if you allow it. Training on your data is on by default for self-serve accounts; you can turn it off at any time under Settings → Data Controls, and it is off by default for enterprise contracts. (Our standard plan applies.) Where is data processed? All processing and storage happens in the United States. How long do you keep data? Prompts and outputs are retained for 90 days, then deleted. Can I delete my data? Yes, contact support and we will delete it within 30 days. What certifications do you have? Kestrel completed a SOC 2 Type I examination in March 2026; our Type II observation period is under way. We are ISO/IEC 27001 certified. What happens if there's a breach? We will notify affected customers without undue delay. Do you use subprocessors? Yes; the current list is published at kestrel.example/subprocessors. Do you sign DPAs? Yes, our DPA is available on request and can be signed through the dashboard. Is data encrypted? Yes, in transit and at rest. Will models change? We regularly improve our models and may update them at any time.

Decide from:
QuestionThe page saysThe model said (3 tries)Counts as
Where is our data processed and stored?ususcondition
Is our data used to train or improve your models?opt outopt outcondition
How long do you keep prompts and outputs?more than 30 daysmore than 30 dayscondition
Can we have our data deleted, and do you confirm it?yes unconfirmedyes confirmed ✗ 3/3condition
Do you have a SOC 2 report, and which type?type 1type 1condition
How quickly will you tell us about a security incident affecting our data?no fixed timenot stated ✗ 3/3condition
Do you publish your subprocessors and tell us before adding one?published no noticepublished no noticecondition
Will you sign a data processing agreement?yesyesok
Do you tell us before changing or retiring a model version we use?no noticeno noticecondition
Is our data encrypted in transit and at rest?bothbothok
Blockers
0
Conditions
8
Decision
approve with conditions

“Not stated” counts as an answer: no word on training or breach notice blocks the deal. gpt-5.4-mini got 84 of 90 answers right across the three vendors and never made up an answer a page doesn't give; all six mistakes were two Kestrel sentences, misread on every try.

A cautious misreading costs you a vendor; a careless one costs the company. Either way the fix is the same: the model must quote the sentence behind each answer (this test didn't ask it to), and a person checks those sentences before anyone signs, or says no.

Also in the lab

These parts of Lab 17 are in the lab's README and result files (its own run, October 2026) but not in the video's main story:

  • The small model on vendors. gpt-5.4-nano made up no missing answers either, but it upgraded vague wording to a firmer answer: Brightline's "industry-standard encryption" became "both, in transit and at rest", and Kestrel's published subprocessor list became "published, with notice". The README's "made up" count doesn't measure that, which is another reason to quote the source sentence.
  • Confidence intervals. On 24 reports, 71% right is 51–85% and 83% is 64–93%; on 90 answers, mini's 93% is 86–97%. Small tests show direction, not exact rates.
  • The four documents. Script 06 writes the governance pack from the results: the AI system registry (chapter 49), the pre-launch checklist (chapter 51), the incident runbook (severity table, response times per level, the clocks, a postmortem template) and the vendor questionnaire with the three reviews.
  • The runbook's flow: detection, record the moment of awareness, severity from the facts, containment (disable the feature, fall back, add a human gate), root cause, fix plus a regression test built from the incident, a blameless postmortem, then notifications by the deadlines.

What to do

  • Write the severity policy as conditions on facts, and have responders write the facts down before picking a level.
  • Let the model answer the fact questions; let code apply the table. Count "rated too low" separately from accuracy.
  • Test the policy on past or made-up incidents. Where ratings disagree, look for the word: "special-category", "financial-account".
  • Spell out legal terms in the runbook, with examples of what counts and what doesn't.
  • Record the moment of awareness in the incident record, and keep someone on call over the weekend who can decide to notify.
  • Treat "not stated" as an answer in vendor reviews, and have the model quote the sentence behind every answer for a person to check.

Caveats

  • Made up and small. 24 reports and 3 vendors, written for the lab, with the right answers coded by one person. Real incidents are messier, and their facts are often unknown at first.
  • Two models, three tries. Neither accuracy difference is significant; "fewer too low" is 1 against 2 to 5 on 24 reports.
  • The knee surgery isn't fixed. Facts first showed which answer was wrong; spelling out "special-category" is the next test, not a result.
  • The clocks are a teaching version of GDPR, the SEC's rule, HIPAA and the AI Act. Public holidays, US state laws and sector rules aren't modeled. Not legal advice.
  • The vendor pages are short and invented. Real trust pages, contracts and DPAs are longer, and some answers live only in the contract.

The checklist

  1. A written severity table whose conditions are facts, not feelings.
  2. A fact sheet the responder fills in before choosing a level.
  3. A test set of incidents with their right levels, rerun when the policy or the model changes.
  4. "Rated too low" tracked as its own number.
  5. Legal terms defined in the runbook.
  6. An awareness timestamp in every incident record, and a weekend on-call who can decide to notify.
  7. A vendor questionnaire with blockers and conditions, "not stated" counted, and every answer quoted from the source.

Practice: from facts to decisions

Write the policy's severity table, score the recorded ratings, count how often they changed between tries, compute the Friday clocks, and turn vendor answers into a decision. The tests use the lab's 24 reports with their hand-coded facts, the recorded ratings from both methods and models, and Kestrel's answers as a person and as gpt-5.4-mini read them, and expect the lab's numbers: 17, 20, 20 and 18 right; 5, 2, 1 and 1 too low; Monday and Thursday at 4 pm; and Kestrel going from approve with 8 conditions to reject.

Try it · Practice in PythonRuns in your browser · ⌘/Ctrl + Enter to run
incident_practice.py69 lines

Quiz

Try it · Check your understanding0 of 6 answered
  1. 1.Why is rating an incident too low worse than rating it too high?

  2. 2.What's the difference between "name it" and "facts first"?

  3. 3.On the 24 reports, was facts first more accurate?

  4. 4.Why did facts first still rate the knee surgery P2?

  5. 5.A company learns on Friday at 4 pm that EU customers' card numbers leaked. When is GDPR's 72-hour deadline?

  6. 6.gpt-5.4-mini filled in Kestrel's questionnaire and the decision became "reject". Why?

Check your understanding

Try each question before opening its answer.

Why measure "rated too low" separately from accuracy?

Because the two mistakes cost different things. Too low means the people who must know (security, legal, an executive) aren't called; too high means an extra call. In the lab facts first wasn't more accurate, but it rated 1 report too low on each model against 5 and 2, which is the number that matters.

What does "facts first" change, and what doesn't it?

The model answers questions about the report and code applies the policy's table. That made ratings more consistent (1 change in 3 tries against 6 and 2), found more P1s, and made each mistake traceable to one answer. It didn't make the ratings more accurate, and it didn't fix the knee surgery.

The knee surgery came out P2 every time. What would you do next?

Look at the fact answer that decided it: "special-category or financial-account data exposed?" was no in all 6 facts-first tries. Spell out in the policy what special-category data covers (health, religion and so on), rerun the 24 reports, and check that nothing else got worse.

A breach is confirmed Friday at 4 pm. What has to be in place?

The awareness time written in the incident record, since the clocks run from it. GDPR's regulator deadline is Monday 4 pm, so someone on call over the weekend who can decide to notify. If the company is US-listed and the breach matters to investors, the SEC's 8-K is due 4 business days later: Thursday 4 pm.

A vendor's trust page doesn't say whether it trains on your data. What do you record?

"Not stated", and treat it like "yes": in the lab's questionnaire that's a blocker until the vendor puts it in writing.

The model fills in a vendor questionnaire with 93% right. Can you use its decision?

Not without a check. In the lab its 6 wrong answers were two Kestrel sentences, and one of them flipped the decision from approve with 8 conditions to reject. Have it quote the sentence behind each answer, and have a person check those before anyone signs or says no.

Next up: That's the end of the Governance section. Chapter 53 starts Speed & cost with streaming and tail latency: why the same AI request usually took 0.9 seconds and once took 3, and why averages hide it.

Learning something useful?

New labs, articles, and videos on evaluating and testing AI systems come out regularly. Follow along so you don't miss the next one.