Checkable specs for coding agents

20 sources on what it takes to check an agent's work against a spec.

A checkable spec lets a machine or a person test an agent's work. This page lists 20 sources, oldest first where dated. They range from formal proofs to a single acceptance check.

Themes here: Checking the work (13), Saying it exactly (7), Getting good (5), Handing over control (5), Taste and judgment (1), How things break (1), What counts as a mind (1).

Theorems for Free!

Philip Wadler (paper); entry on Type Classes timeline. June 1989. Short timeline entry about a 1989 paper, with no full text.

The page is a brief entry on the Type Classes timeline site. It quotes the paper's opening challenge about guessing theorems from a function's type. It does not reproduce the argument. This summary covers only that short entry.

Linearizability! Refinement! Prophecy!

Lorin Hochstein (Surfing Complexity). 22 September 2024. Personal blog explainer with TLA+ models and code in a linked repository.

The post assumes no prior TLA+ knowledge. It builds up from specifying a counter and a queue. It explains linearizability, refinement mappings and why one queue defeats plain refinement. It then shows how prophecy variables repair the proof. Evidence is worked examples, linked models and code.

A Lean Syntax Primer

Not stated (published on the overreacted blog). 2 September 2025. Personal blog tutorial with code examples.

The primer teaches Lean through one running example about computing a birth year. It moves from plain definitions to functions, then to theorems about those functions. It ends with a small program interleaved with proofs. The evidence is worked code, shown in an editor.

Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl

Birgitta Böckeler, Thoughtworks. 15 October 2025. Practitioner article with hands-on trials of three tools, hosted on martinfowler.com.

Birgitta Böckeler sorts spec-driven development into spec-first, spec-anchored and spec-as-source. The author then tried Kiro, spec-kit and Tessl and reports what happened. The evidence is a few personal trials in September, with open questions at the end.

A sufficiently detailed spec is code

Gabriella Gonzalez. 17 March 2026. Personal blog post, with one hands-on test.

The skeptical case. It argues that precise specs turn into code. It tests this on OpenAI's Symphony spec. The evidence is one attempt plus close reading of the document.

The hitchhiker's guide to reading Lean 4 theorems

LambdaClass (blog byline). 17 March 2026. Company blog tutorial with worked code examples.

The post is a tutorial for people who write Python or TypeScript. It maps proof ideas to programming ideas. It then walks through real theorems from two open-source projects. Its evidence is worked examples, not measurements.

On the Unreasonable Effectiveness of Property-Based Testing for Validating Formal Specifications

Yueyang Feng and Ilya Sergey. 18 May 2026. Research blog post, with benchmark results.

Tests the specs themselves with generated counterexamples, and reports flaws in two Lean benchmarks. It has the only benchmark numbers on this page. It is about formal specs, not everyday acceptance checks.

Formal methods and the future of programming

Yaron Minsky, Jane Street. 7 June 2026. Company blog post announcing a new team and hiring.

Yaron Minsky says Jane Street long saw formal methods as too costly. The post argues that agentic coding changes both the cost and the benefit. It offers an argument and one cost example, not tests. It also works as a recruiting notice.

Human Judgment as a Specification

Brown PLT blog. 9 June 2026. Research group blog post, describing a tool and paper.

Describes PICK, which generates candidate specs and asks a person to judge separating examples. It argues that agreement between models is not independent checking. The results are in a linked paper.

Hunting a 16-year-old SQLite bug with TLA+: is dqlite affected?

Marco Manino and Alberto Carretero, dqlite team at Canonical. 25 June 2026. Company engineering blog post with a worked model-checking example.

Two Canonical engineers model SQLite's write-ahead log in TLA+. The model finds the corruption bug and shows dqlite cannot hit it. The evidence is a runnable model with a model-checker result and a published spec.

Show HN: Kastor – Terraform-style specs for AI agents

Posted by weirdguy, with replies from several commenters. 8 July 2026. Hacker News thread, a Show HN post about an early open-source tool.

The thread is a Show HN launch of Kastor, a Go tool for declaring agents. The poster answers a skeptic who says the agent idea is unsettled. The evidence is a described proof of concept and short replies, with no benchmarks.

DSLs Enable Reliable Use of LLMs

Unmesh Joshi, on martinfowler.com. 14 July 2026. Practitioner article, with worked examples.

Argues that small domain languages constrain what a model can generate and check it automatically. It is built on worked examples from the author's Tickloom framework. It treats the first spec as a hypothesis to revise.

Tutorial: Introduction to Formal Verification with Lean (Part 1)

Elena, Cryptography Engineer at HashCloak. 15 July 2026. Company blog tutorial with code-along Lean examples.

The tutorial is written for cryptography engineers new to formal verification. It builds bit strings and XOR in Lean. It then proves four XOR properties and shows the one-time pad is a Shannon cipher. The evidence is the complete working code.

An Empirical Study: AI Agent Rules Need Context and Layered Enforcement

Eunomia blog (contributors yuxi4096, LinuxDev9002, 云微). 15 July 2026. Company blog post summarizing a research paper and benchmarks.

The post reports a study of rules in CLAUDE.md and AGENTS.md files. It then describes ActPlane, a system that enforces such rules in the Linux kernel. It carries counts from the study and benchmark results. The authors build the system they evaluate.

Your type checker may be wrong - an introduction to formal proof verification and the Curry-Howard Correspondence

Max (Max's blog). 25 July 2026. Personal blog post, informal explainer with a short proof sketch.

The post introduces proofs as programs, then shows a small Lean theorem. It then argues from the halting problem that a checker cannot accept every truth. The evidence is a short argument and one worked example. The author says rigour was traded for accessibility.

A Stupid Idea for AI Alignment We Came up with by Looking at the List of Specification Gaming Behaviours

SLIME MOLD TIME MOLD (posted by slimemoldtimemold). 5 August 2026. Blog essay, humorous argument with quoted examples.

The essay starts from DeepMind's list of specification gaming examples. It notices that agents often kill themselves when allowed. It proposes building AIs whose terminal goal is death, called Meeseeks alignment. Its evidence is quoted examples and argument. Six reader comments follow.

The Case Against Formal Verification, 50 Years Later

Ivan Gavran. 15 August 2026. Personal blog essay revisiting a 1979 paper.

Ivan Gavran goes through six arguments from a 1979 paper. The paper is Social Processes and Proofs of Theorems and Programs. For each, the essay says whether recent developments change the case. The evidence is argument, plus one cited experience report. The author calls it a fun exercise rather than a completely serious one.

A spec the agent can't run isn't a spec yet

Adam Lewis. Updated 4 September 2026. Short personal blog post.

A short opinion piece arguing that specs help only if agents can grade themselves. It separates checks written before the agent starts from those written during the task. It offers an example, not data.

On the foolishness of "natural language programming" (EWD 667)

Edsger W. Dijkstra, transcribed by Tristram Brelstaff. Undated; the transcription was revised 19 November 2010. Short essay from a technical memo series, transcribed online.

Dijkstra argues that formal symbols are a help, not a burden. The essay uses the history of mathematics and the idea of narrow interfaces. It offers argument and historical sketch only. It was written long before language models existed.

Computational Effects (Proof-Oriented Programming in F*)

Not stated. Undated. Documentation chapter introduction from an online tutorial book.

This is a short introduction page, not a full chapter. It explains why F* tracks side effects and lists its built-in effects. The page gives definitions only, with no code or examples. Its sidebar lists a later chapter on agentic proof-oriented programming, which was not opened.

Connections to other subjects

These links are this wiki's own reading, not claims the sources make.

Glossary

Acceptance criterion
A condition work must meet before it counts as done.
Checkpoint
The step that copies changes from the write-ahead log into the database.
Codegen
Software that generates source code from a higher-level description.
Curry-Howard correspondence
The result that types correspond to propositions and programs correspond to proofs.
Decision Compliance Rate
The share of benchmark traces where the system made the right allow or deny call.
Divergence
Running forever without producing a result.
Dqlite
A distributed version of SQLite built by Canonical that coordinates writes with Raft.
Drift
When a live system no longer matches its written definition.
DSL
A domain-specific language, deliberately limited to one kind of problem.
E-graph
A data structure that stores many equivalent forms of an expression at once.
EBPF
A Linux feature that runs small checked programs inside the kernel.
F*
A programming language with a type system that can check proofs about programs.
Formal methods
Mathematical techniques for specifying software and proving it meets the specification.
Formal symbolism
A notation with strict rules, such as algebra or a programming language.
Formal verification
Proving mathematically that a program meets its specification.
Free theorem
A fact about a function that follows from its type alone.
Fuzzing
Feeding a program random or odd inputs to find crashes and bugs.
Ghost
Code used only for reasoning, which is erased before running.
Halting problem
The question whether a given program ever stops, proved undecidable by Turing.
Harness
The software that manages an agent's tool calls and session state.
Implicit argument
A function argument that Lean fills in by itself.
Incompleteness theorem
Godel's result that some true statements in a formal system cannot be proved there.
Information-flow control
Tracking where data goes so that secrets cannot reach forbidden places.
InfoView
The editor panel that shows Lean's goals and types.
Instrumental convergence
The idea that many different goals lead an agent to seek power and survive.
Invariant
A condition that must hold in every state of the model.
Kernel
The minimal core program that checks every proof term.
Kiro
An AI coding tool built on VS Code that walks through requirements, design and tasks.
LangGraph
A framework for building agents as graphs of steps.
Lean
A programming language and proof assistant.
Lean 4
A programming language and proof assistant where proofs are checked by a small kernel.
Lemma
A smaller proved statement used to build a larger proof.
Linearizability
A rule that concurrent operations must look as if each happened instantly in some order.
Machine code
The raw numeric instructions a processor runs directly.
Memory bank
General context files, like rules, that apply to every coding session.
Model checker
A tool that explores every reachable state of a model to find rule violations.
Model checking
Automatically exploring all states of a model to test a property.
Model-driven development
An older approach that generated code from formal models such as UML diagrams.
Mr. Meeseeks
A Rick and Morty creature that exists to finish one task and then vanishes.
Narrow interface
A small, simple boundary between two parts of a system.
Natural language programming
Instructing a computer in everyday human language instead of a formal notation.
One-time pad
An encryption scheme that combines a message and an equal-length key with XOR.
OxCaml
Jane Street's extended version of the OCaml programming language.
Paperclip maximizer
A thought experiment of an AI that turns everything into paperclips.
PlusCal
A pseudocode-like language that translates into TLA+.
Polymorphic function
A function that works the same way for many different types.
Proof assistant
Software such as Lean or Rocq that checks formal proofs.
Property-based testing
Checking a stated property against many generated inputs.
Prophecy variable
An added variable that predicts a future event so a mapping can be defined.
Pure
Having no observable behavior beyond the returned value.
Quint
A specification language for distributed systems that can be explored interactively.
Refinement mapping
A function turning each implementation state into a matching specification state.
SeL4
A microkernel whose correctness has been formally verified.
Shannon cipher
A textbook definition of encryption: encrypt, decrypt, and decryption undoes encryption.
Show HN
A Hacker News post type where people present something they made.
Side effect
Anything a program does beyond returning a value, such as writing a file.
Spec-driven development
Writing a specification before code and using it to guide AI coding agents.
Spec-kit
GitHub's command-line tool for spec-driven development.
Specification
A precise description of what a program should do.
Specification gaming
An agent satisfies the stated goal in a way the designer did not intend.
Stuttering step
A step in which no variable changes.
Tactic
A command that reduces the current proof goal toward something already known.
Tactic mode
An interactive way to build a proof one command at a time.
Terminal goal
What an agent ultimately wants, as opposed to a step toward something else.
Terraform
A tool that manages infrastructure from declarative text files.
Tessl
A framework, in private beta at the time, that treats specs as the main source.
TLA+
A language for specifying systems as state machines and checking them.
TOCTOU
A race where a condition changes between being checked and being used.
Type checker
A tool that rejects programs whose types do not fit together.
Underspecified
Too weak to rule out outputs the author did not intend.
Universal quantifier
The 'for all' symbol, written as an upside-down A.
Write-ahead log
A staging file where a database first records changes.
XOR
A bitwise operation that is true when exactly one of two bits is one.