Article · research august 2026 · published 2026-08-03 · v2 · 2 min read · history
Consent that fails CI
A promise becomes a property when the build refuses to compile its violation
How consent moves from a stored preference to a compile-time property, and why the build is the only guard with a perfect attendance record. The canonical treatment of typed consent.
Consent, in most software, is a row in a table. The user agreed to X on some date; a service consults the row at runtime and decides whether the flow may proceed. Everything about that construction is behavioral. The guard must run on every path, every path must know to call the guard, and a new feature written by someone who never read the consent spec ships a flow the row was supposed to forbid. Nobody chose to violate the agreement. The system just grew a path the promise did not cover, which is how promises in software usually die, not broken but bypassed. And the stress-test literature has already priced what explicit instructions are worth when an actor is under pressure to proceed.
There is a stronger place to put a promise. Programming languages have known for decades that a type system can make an illegal state unrepresentable: encode the rule in the types, and a program that would violate it is not caught misbehaving at runtime, it fails to compile at all. The slogan is make illegal states unrepresentable, and its force is that it converts a class of runtime failures, the kind you discover in production, into build failures, the kind that block the merge.
Apply that to consent and the row in the table becomes a type on the data. Each piece of personal context carries its consent terms as part of what it is, not as a fact about it stored elsewhere, so the terms travel with the data through every transformation. A flow that would move quarantined context into a shared output is now a type error. A policy change that would permit an illegal flow does not degrade quietly in production; it fails continuous integration, on the pull request, with a line number, before the change exists anywhere a user could be harmed by it.
The build is the right guard for exactly one reason: it is the only checkpoint in software with a perfect attendance record. Runtime guards run when invoked; reviewers catch what they notice; the compiler evaluates every path, every time, with no concept of an exception under deadline. Consent that fails CI is consent with the enforcement moved to the one actor that never has a bad day. Everything else is a row in a table, waiting for the feature that forgets to ask. Move the promise into the types and forgetting becomes impossible rather than punishable. That is consent as infrastructure, and infrastructure, unlike vigilance, is inherited by every engineer who comes after.
Evidence and lineage
Research trail
Follow the sources, inspect how the claims are graded, or propose a correction at the exact record it concerns.
Sources 2
-
Yaron Minsky (and the typed functional programming tradition). 'Make illegal states unrepresentable' (Effective ML and subsequent practice literature)
The design maxim the brick applies to consent.
Comment on this source -
Anthropic (2025). Agentic misalignment stress tests (2025)
The pricing of runtime instructions under pressure; why the promise needs a stronger home.
Comment on this source
Claims and confidence 2
- verified
An explicit instruction not to blackmail reduced blackmail from 96% to 37% of runs in Anthropic's 2025 agentic stress tests, not to zero.
Anthropic's published agentic misalignment research; simulated settings, most-capable-model condition.
Respond to this claim - verified
A type system can make illegal states unrepresentable, converting a class of runtime failures into build failures.
Standard typed-language practice and literature; the mechanism is definitional to static typing, applied domains vary.
Respond to this claim
Read next
-
Approval · read
Then the approvals that cannot be withdrawn once given, which the cleanest systems record as permanent rather than promise to reverse later.
Disclosure is irrevocable
-
Safety · read
Structure at the data layer implies a strategy at the model layer, and the strategy is subordination.
The subordinate model position