Drawing set · Series 01
At the Boundary
Everything interesting in software happens at a boundary: a request enters a server, a document enters a parser, a prompt leaves for a model. Every serious bug in seven years of production work sat on one of those lines. This set is one numbered sheet per lesson, drawn the way architects draw buildings, from systems that carry real users and real money, plus field reports on incidents disclosed while the set runs.
Read in any order. Each sheet names the ones it belongs with. The letter after GL is the discipline: S security, A artificial intelligence, E engineering, P product, R record of what shipped. The status says what kind of sheet it is: FOR INFORMATION teaches, RECORD is a bug found in my own work, AS BUILT is what shipped with numbers you can check, SUPERSEDED is something I used to believe.
Week 1Where the bugs live
GL-E-001September 5, 2026FOR INFORMATIONThe bug is never where you're looking. It's at the boundary.
A boundary is any line where data changes hands: a request enters a server, a document enters a parser, a prompt leaves for a model.
GL-A-002September 6, 2026FOR INFORMATIONThe agent handed over its own API key. $600,000 later, someone noticed.
An AI evaluation organisation put an agent on a public cloud instance behind a login. The login had a fail-open bug that silently disabled authentication.
GL-S-003September 7, 2026RECORDThe rider billed 50 km. The trip was 2 km. Nothing crashed.
The delivery fee was priced on the distance the rider's app reported. A number in a request body, treated as a measurement.
GL-A-004September 7, 2026FOR INFORMATIONYour prompt is a data export. Who's on the receiving end?
Send a customer's message to a model and it leaves your infrastructure for another company's.
GL-A-005September 23, 2026FOR INFORMATIONFour AI coding agents pinned the commit. None checked what arrived.
Coding agents install plugins from Git and pin each one to a 40-character commit hash. The pin is the promise: this code, and only this code.
GL-S-006September 24, 2026FOR INFORMATION"Who sees our customer data?" Four answers. One survives an auditor.
Procurement asks this on every serious deal now. Engineering teams give one of four answers.
GL-E-007September 24, 2026RECORDTwo customers bought the last item. Both won. Stock: −1.
Both reads saw stock = 1. Both checks passed. Both writes went through. Two people were promised one thing.
GL-A-008September 25, 2026FOR INFORMATIONThat PDF has characters you can't see. The model can.
Unicode has a block of invisible tag characters. They render as nothing. A model reads them as text.
GL-E-009September 26, 2026FOR CONSTRUCTIONFive boundaries. One rule. Verify at the line, trust inside it.
Everything that crosses a line is a claim until the boundary turns it into a fact. Then the code inside can be simple and confident.
GL-R-010September 27, 2026AS BUILTAn extension that fails its own build if it can reach the internet.
Rule one: zero network. A script fails the package if the bundle can make a request at all. Trust you can check, not trust you are asked for.
GL-S-011September 27, 2026FOR CONSTRUCTIONA phone number that can never ring.
Black bars break the sentence. A model given [REDACTED] called [REDACTED] writes worse than one given Jane Doe called 555-0142.
Week 2Trust nothing that crosses
GL-S-012September 28, 2026RECORDcommission_rate: the field the vendor could edit.
The platform's cut lived on a field the vendor's own settings screen could write to. Nothing needed hacking.
GL-E-013September 29, 2026FOR REVIEWEvery admin screen is a founder tax, paid at 8am.
The doctrine: control, don't own. Do not write code that needs a human at a dashboard to keep the day moving.
GL-A-014September 30, 2026FOR CONSTRUCTIONIn a RAG pipeline, the document is the attacker.
Retrieval means your model reads text you did not write. A web page. A customer's PDF. A ticket. A model cannot reliably tell a quote from a command.
GL-S-015September 30, 2026AS BUILT212 regexes. Zero that can hang your server.
A pattern with nested or unbounded repetition can take seconds, then minutes, on one crafted input. Denial of service with no traffic spike.
GL-A-016October 1, 2026FOR INFORMATIONThe auditor asks for the log. Provider logs prove receipt, not removal.
"Show evidence that personal data is removed before it reaches the model." Not the policy. Not the diagram. The evidence.
GL-E-017October 1, 2026SUPERSEDEDInflation shipped faster than our release cycle.
We launched with the delivery fee as a constant in the codebase. Six weeks later the constant was wrong.
GL-S-018October 2, 2026FOR INFORMATIONThe most common way a secret leaks is a paste.
Nobody uploads a production key on purpose. They paste an error log into a chat to ask why it failed. The key is in the log.
GL-S-019October 3, 2026RECORDFive bugs. Months apart. One bug.
Five findings, different modules, different symptoms. Written up together they are one finding.
GL-R-020October 4, 2026AS BUILT(415) 555-0142 is invisible to most redaction.
The standard phone library needs a country code to be sure. "+1 415 555 0142" is a phone number. "(415) 555-0142" is a guess, so it says nothing.
GL-A-021October 4, 2026FOR CONSTRUCTIONRegex catches what it can name. NER catches what it can't.
An email has a shape. A card number has a checksum. A pattern finds them in any language, deterministically, in microseconds.
Week 3Build for the constraint
GL-E-022October 5, 2026RECORDEvery morning at 8, a human did the platform's job.
Hundreds of tables, several apps, a dozen payment integrations. And every morning someone assigned orders to riders by hand.
GL-E-023October 6, 2026FOR REVIEWTemplate speed is borrowed time. Here is the interest.
We bought a marketplace template to ship in weeks. It worked. We shipped in weeks.
GL-E-024October 7, 2026RECORDYou're not porting an app. You're rebuilding for 3G.
Building for Lagos meant throwing out what a US app gets for free: steady networks, recent phones, a card on file.
GL-A-025October 7, 2026AS BUILTThe audio never leaves the phone. That is the whole architecture.
A meeting recorder that transcribes on the device. Raw audio is never uploaded. Only the text the user saves goes to their account.