CASE 01 :: DATAHUB, METADATA AND LINEAGE
Anyone can get a typo fix merged. This is the other thing: reading somebody else's codebase until you can tell the team something about their own project they had not written down yet, and having them write it down.
28 JULY TO 24 AUGUST 2026 :: PUBLIC THROUGHOUT :: TWO PULL REQUESTS ON MASTER
01
DataHub documents which kinds of things can have an incident raised against them. A table can. A dashboard can. The published list had drifted from the code and had been wrong for a while, quietly, the way documentation goes wrong.
PR #1868502
My first correction was also wrong. I wrote that one file was the gate that blocks a write, and that machine learning models get rejected. Neither is true. The maintainer asked for changes and he was right to. I went back and posted the correction myself, twice, once for an input shape I had copied wrong and once for a readback claim I had simply invented.
This is the beat I would keep if I had to delete the rest of the page.
the correction03
Reading six files by eye is how the list went wrong in the first place. So I stopped reading and wrote the check. It parses the write allowlist, the registry, the schema and the resolver wiring, then prints the table. It runs inside the build, so the docs cannot drift again without the build noticing.
10
TYPES ACCEPT AN INCIDENT
7
CARRY THE SUMMARY ASPECT
5
COULD BE READ BACK
THE GAP: FIVE TYPES ACCEPTED AN INCIDENT AND COULD NEVER SHOW IT AGAIN. NOTHING ERRORED. THAT IS WHY NOBODY HAD CAUGHT IT.
04
Someone else had scoped the machine learning half before I filed anything. I found his thread after mine was open. So I handed him those entities and kept the column level one, which nobody was looking at. He shipped his in two pull requests. Mine was one. All three are on master now.
his RFC, filed first05
The maintainer opened a tracker and made it the single place this work gets planned from. It runs on gates: every layer a thing has to clear before anyone can honestly say it supports incidents. He had named three when we started. The tracker has seven. The truth table inside it is the one my script prints, and the rule at the top of it, do not ship a write path without a read path, is the failure I filed.
| GATE | WHAT IT CONTROLS | SOURCE | SCHEMAFIELD |
|---|---|---|---|
| 1 | Write allowlist | IncidentInfo.pdl | ALREADY THERE |
| 2 | Summary aspect | entity-registry.yml | MINE |
| 3 | GraphQL schema | incident.graphql | MINE |
| 4 | Resolver wiring | GmsGraphQLEngine.java | MINE |
| 5 | Tab badge | entity page query | AGREED, NEXT |
| 6 | Incident tab | web react fragments | AGREED, NEXT |
| 7 | Agent tooling | mcp_tools/incidents.py | STILL OPEN |
GATES 5 AND 6 WERE OUT OF SCOPE WHEN THIS TABLE WAS WRITTEN. SEE BEAT 07.
the tracker06
Approved, taken out of draft and queued by the maintainer himself, then squashed onto master by a bot while I was asleep.
feat(incidents): add incident support for schemaField (#19115)
07
Gates 5 and 6, the tab you would actually click, were out of scope on purpose. After the merge the maintainer agreed a plan on the tracker: the permission check first, with tests, then the tab. That first half is now on master too, four days after the other one.
The check was asking the wrong question. Editing an incident on a column was authorized against the column, and nobody holds permissions on a column, so a dataset policy never matched and only platform admins got through. Ship the tab on top of that and it renders for everybody, the count is right, and the button is dead for everyone who is not an admin. That is worse than no tab.
It now asks about the parent instead, which is where permissions already live and what the frontend had been assuming all along. Fixing it turned up two private copies of the same check sitting in two different resolvers, byte for byte identical. Patch the shared one and the button would still have disagreed with the mutation behind it. Both go through one check now.
fix(incidents): authorize field incidents against the parent entity (#19405)
THE REST
Two pull requests of mine are on master. The other threads here are still open, and one of them is being held shut on purpose until somebody else's work lands.
I am leaving that here because it was true before either merge and it is the reason they happened. The finding stood on a script anyone could run, months before a busy maintainer got to it.
CASE 02 :: GOOGLE ADK→The docs half. It is finished and it is not merging yet, because the list it prints will not be true until one more contributor's work lands. Waiting is the correct move and it is the whole point of the generator.
open, held on purpose↗Two self-hosted failures that produce no error at all. Each cost an afternoon and left nothing to search for.
open, awaiting a reviewer↗What breaks downstream if this table or column changes. The question every data team asks before a migration.
open, with reviewers↗