Back to the blog

AI Governance

My two AI permission tables disagree, and I signed both

Two AI permission tables I co-wrote disagree on 42 of 54 cells, about 28 of them independent. Tests exposed six gaps in my spec. Encode yours, then trust.

Dorian Cougias October 16, 2026

At a Glance My co-authors and I wrote two tables, fifteen months apart, saying which license allows which machine-learning use. Encoded as tests, they disagree on 42 of 54 cells (nearer 28 independent conflicts once you strip the duplicates), and writing those tests exposed four defects in my own specification before any checker ran. Signals didn’t fix this. They inherited it. If your organization keeps a permission spreadsheet, it’s an answer key nobody has graded. Turn each cell into a test and check where your own documents disagree before you trust a vendor.

Key Takeaways

  • My 2023 and 2024 permission tables give different answers on 42 of the 54 cells they share, about 28 of them independent, and both sat in one document.
  • None of the 2024 table’s 21 “No” cells holds up as a prohibition. Eighteen should go to a human, three should pass.
  • Turning every cell into a test found six gaps in the record and the rules: four while I wrote the tests, one when a checker ran, one when a second reader graded blind.
  • A checker reproducing 101 of 101 of my verdicts shows the record can recompute my answers. It doesn’t show they’re right.
  • Start with one table your company already uses. One test per cell, the expected verdict, and whose reading it is. Then remove a fact a passing case needs and see whether it still passes.

By Dorian Cougias. Published October 16, 2026. Last updated October 16, 2026.

My two AI permission tables, written in 2023 and 2024, disagree on 42 of the 54 cells they share. That’s the count from the test suite in From Licenses to Signals (OpenControls preprint, 2026), and writing those tests exposed six gaps in my own specification. Machine-readable opt-out signals haven’t fixed any of it. They inherited it.

On 14 October I was re-fetching the sources behind an old paper of mine on web scraping. Twenty-two of the 108 legal sources had moved, broken or changed (OpenControls preprint, 2026), which I’d half expected. What I didn’t expect turned up in its companion, a 2024 paper on the legal climate for text and data mining.

That paper prints two tables about machine-learning permissions, both written with my co-authors. The first, from June 2023, is a five-by-five summary of which license types allow which uses. The second, from September 2024, fifteen months later, is a pivot of nine actions against seven licenses. The 2024 paper reprints the 2023 summary verbatim and then, fewer than 120 lines further down, gives the pivot, which answers the same question differently.

I signed both.

How did two tables I wrote disagree on 42 of 54 cells?

Of the 63 cells in my 2024 pivot, 54 map onto a cell in the 2023 summary, and 42 of those imply a different verdict (OpenControls preprint, 2026, Table 5). The other nine can’t be mapped, because the 2023 table has nothing that matches one of the seven licenses.

That count flatters the disagreement, and the essay says so. Traced back, the 42 come from just eight 2023 cells, and ten of them side with the older table by construction. Strip those and the weak distribution row, and the number the suite supports is nearer 28 independent conflicts on three 2023 cells (OpenControls preprint, 2026, §4.3). It’s still my own two tables, fifteen months apart, disagreeing.

Part of it is that the tables don’t hold the same kind of thing. The 2023 summary records a legal ground: Fair Use, By License, Ethical. The 2024 pivot records an outcome: Allowed or No. A machine trips on that first. A ground isn’t a verdict, and an outcome with no ground can’t be checked.

Some of it is just me being wrong. The pivot marks CC BY-ND “No” for displaying a verbatim citation, keeping a derived citation and distributing a verbatim one. The BY-ND 4.0 legal code (Creative Commons) grants the right to “reproduce and Share the Licensed Material” and to “produce and reproduce, but not Share, Adapted Material.” All three uses sit inside that grant. The 2023 table called the same cells Fair Use, which sends a reviewer off to argue a defense the license already made unnecessary. Both tables get those three cells wrong.

The 2024 table’s 21 “No” cells are the bigger problem. Run through the rule set, none of them returns FAIL. Eighteen go to REVIEW and three to PASS (OpenControls preprint, 2026, Table 3). When a license doesn’t grant a use, the use can still be lawful another way, and fair use in the US is decided case by case, so a machine can’t show it either way. That’s a question for a person, which is what REVIEW means. My “No” collapsed it into a ban.

And neither table has a jurisdiction column. The same copyrighted-work cell comes back REVIEW on the US row and PASS with conditions under the UK’s section 29A. The grid has no way to record that.

Aren’t machine-readable signals supposed to have fixed this?

No. Eight of my pivot’s nine actions, as I mapped them, can’t be expressed in TDMRep, the W3C community protocol for reserving mining rights (OpenControls preprint, 2026). The usual story says signals made tables like mine a relic. I think the tables are still the only answer key anyone wrote down cell by cell, and the signals inherited their mistakes.

Look at where each new scheme draws its purpose line. TDMRep draws it at mining. The IETF’s aipref vocabulary uses training, AI use and search, and it’s still an Internet-Draft: draft 08, dated 13 September 2026 (IETF), with no RFC yet. Cloudflare’s Content Signals Policy of September 2025 (Cloudflare) puts search, ai-input and ai-train into robots.txt. None of them lines up with the licenses the content actually carries. Creative Commons said as much in its September 2026 guidance on CC licenses and AI (Creative Commons): “licensing alone cannot address all of the challenges to sharing that AI presents.”

A signed policy file can encode my BY-ND mistake as faithfully as a spreadsheet cell did. It’ll parse, hash cleanly and land in the log, and it’ll look more settled than the spreadsheet ever did.

What happened when every cell became a test?

I turned all 88 primary cells into test cases, as From Licenses to Signals reports (OpenControls preprint, 2026), each one a fragment of a decision record with the verdict I reach by reading the license text. Sixteen variants pushed single cells through other jurisdictions, signal conflicts and incomplete evidence. That’s 104 fixtures.

Writing them found four defects in my specification before any checker ran (OpenControls preprint, 2026, §3.5). I’d applied two different non-commercial rules to the same column. I’d guessed at the BY-ND legal code instead of reading it, and the guess changed four cells. I’d marked a logged-in crawler that clicked through terms as FAIL, when my rule set says REVIEW, because the cases I cite leave assent-based claims open.

The fourth one is the one I keep thinking about. My rule set had no node for a public license, so I filed Creative Commons licenses under negotiated_license. One of my own rules lets a negotiated license beat a general reservation by the same rightholder. So a CC BY page quietly overrode a later TDM reservation from the same publisher, and my own expected answer came out PASS. The record never said the license was public or that both signals came from one party, so the PASS came entirely from where I’d filed the license.

The repair was three explicit fields: license kind, assent and same rightholder. That case now returns REVIEW, and I want to be careful about what that means. It’s my conservative policy. The CC BY 4.0 legal code (Creative Commons) makes the grant irrevocable. What the record can’t show is scope, so it escalates.

Then a checker ran, on an early version of the suite that had only six of the variants. It reproduced 78 of 91 scored verdicts (OpenControls preprint, 2026, Table 6) and refused 13, every one a display or distribute cell with a license in play. The record didn’t say what was being shared: the work as it was, an adaptation or a model. I knew which one each cell meant because I was reading the table row. Adding a material field fixed it.

A second reader, an AI model given the records, rules and license texts but not my answers, caught the last one. On an Open Database License display cell it said REVIEW where I’d said PASS. ODbL leaves rights in the individual contents uncovered, and the record had no field for whether the output carried them. It gained source_content, and the cell split in two. The reader graded both blind and matched.

What does 101 of 101 prove?

It proves the record can recompute my answers. With all 16 variants in, 101 cases carry a scored verdict, and the checker reproduces every one (OpenControls preprint, 2026). Three cells stay unscored because the 2023 table’s answer for them was “Ethical,” which isn’t a verdict, as §3.1 of the same preprint notes.

That number is a reproducibility result. The checker resolves grants through my license readings, written down as a table, and no cases were held out. It doesn’t show my answers are right.

The second reader matched every verdict and matched in full on 95 of 101 (OpenControls preprint, 2026, Table 7). On the 43 cases where a license had to be read, it differed on five, three on duties and two on reason codes (OpenControls preprint, 2026, §3.6). That agreement carries earlier passes forward after the ODbL repair. The reader never re-graded the whole revised suite in one blind pass.

I should say where I sit. I’m an implementer, through OpenControls and MoxyWolf. AIScrapeSafe hasn’t run this suite, and its first five records wouldn’t validate against the schema as they stand (OpenControls preprint, 2026, §5.1). The checker here is a separate interpreter. Nothing in these results certifies a product, ours included.

Encode one of your own tables

Article 53 of the 2024 EU AI Act (European Union, 2024) requires general-purpose model providers to identify and honor Article 4(3) mining reservations, machine-readable ones included, and to publish a training-content summary (European Commission). A provider that can show a test suite and a run has a better answer than one that can show a policy.

Every company that has signed off on scraping or training data keeps some version of my tables. It’s a policy page, a spreadsheet or a vendor questionnaire, and it’s probably three of those that nobody has compared.

Pick one. Turn each cell into a test: the input, the expected verdict, and whose reading that verdict is. Then take a case that passes and remove a fact it needs. Say the terms were only partly captured. If it still passes, find out why. Hand the records to someone who didn’t write them and let them grade blind. Where you disagree, check whether the record left something out before you call it a legal dispute. That’s what the ODbL cell taught me. You’re done when every cell has a fixture, an expected verdict and a named reading, and you’ve watched at least one passing case drop to REVIEW when you took a fact away.

The structure I’d use is an auditable decision record: what was read, when, under which rule version, with which conditions, and what was missing. Machine-Readable Permissions (OpenControls) specifies it. From Licenses to Signals (OpenControls) is the test suite and the cells that changed it. Both are free to read with an OpenControls account. Bring a table you already use.

This post is part of Permission Engineering, the OpenControls series on permission decisions a stranger can check. Read the full Permission Engineering series →

Questions before you trust a permission checker

A checker that reproduces 101 of 101 verdicts (OpenControls preprint, 2026) still leaves open what a record grants, what a PASS covers and which tools have actually been tested. These are the questions I’d ask of any permission checker before trusting its results, mine included.

Does a decision record grant permission?

No. It records an assessment and its grounds. The rights have to come from a license, a statutory exception or another legal basis. Writing a license into a record doesn’t create rights the license didn’t give.

Does a PASS mean downstream compliance?

No. A PASS covers one stated use of one source, on one date, with conditions attached. It says nothing about what later processing, publication or distribution did.

Has AIScrapeSafe passed this suite?

It hasn’t been run against it. The checker that reproduced my verdicts is a separate interpreter, and the essays say so. When AIScrapeSafe is run, its records will validate against the schema or they won’t, and anyone can check which.

Which essay should I read first?

Start with Machine-Readable Permissions for the record itself. Then read From Licenses to Signals for the cells that broke it and the fields they forced. The second makes the first easier to argue with.

Sources

Cougias, Dorian J. 2026. Machine-Readable Permissions: An Auditable Decision Record for Web Data Use. Preprint. doi:10.13140/RG.2.2.33038.32329. Especially §§2 and 3.5. Accessed October 15, 2026.

Cougias, Dorian J. 2026. From Licenses to Signals: Text and Data Mining Rights, Opt-Out Protocols, and Compliance Automation for Machine Learning. Preprint. doi:10.13140/RG.2.2.29682.88003. Especially §§2.2–2.3 and 3.4–3.7. Accessed October 15, 2026.

Creative Commons. Attribution-NoDerivatives 4.0 International: Legal Code, §2(a)(1). Accessed October 15, 2026.

Creative Commons. Attribution 4.0 International: Legal Code, §2(a)(1). Accessed October 15, 2026.

Creative Commons. 2026. “Guidance on Using CC Licenses in an AI Ecosystem.” September 3. Accessed October 15, 2026.

IETF AI Preferences Working Group. 2026. A Vocabulary for Expressing AI Usage Preferences, draft-ietf-aipref-vocab-08. September 13. Accessed October 15, 2026.

Cloudflare. 2025. “Giving Users Choice with Cloudflare’s New Content Signals Policy.” September 24. Accessed October 15, 2026.

European Union. 2024. Regulation (EU) 2024/1689 (Artificial Intelligence Act), Art. 53(1)(c)–(d). Accessed October 15, 2026.

European Commission. “Template for General-Purpose AI Model Providers to Summarise Their Training Content.” FAQ, 2025. Accessed October 15, 2026.