Building with AI, one check at a time
Every tool on this site was written by an AI model from a brief I wrote, then tested, argued with and fixed until it held up. This page opens up that process. Follow one tool from idea to finished build, flip a brief over to see what it became, try to catch the AI out yourself, and see what I've learned along the way.
Every example on this page uses simulated data · hobby projects, built in my own timeFrom a question to a finished check
Scroll down to follow one piece of the ASTERIX Feed Suite: the sequence check that counts every record and reports any gap. The steps are the real kinds of step every tool goes through. The code and the fault are simplified examples on simulated data.
Does every record arrive?
A test tool that only proves it starts up tells you nothing about lost records. A dropped record makes no noise. I wanted a number: records sent, records received, gaps found.
The receiver shall count records and report any gap in the sequence.
Check Test, with a record dropped on purpose.
Write the brief before any code
The model gets the purpose, the inputs, what a good result looks like and how I will test it. A vague brief gets vague code, so this part takes the longest.
Input A stream of records, each with a 16-bit sequence number.
Good result Prints total received and every gap with its position.
Test A long simulated run, plus one record removed on purpose.
Neat, short, and wrong in one place
The draft looked tidy and passed the short test it wrote for itself. It works out missing records from the jump between sequence numbers, and never asks what happens when the counter runs out.
def check(records): last, gaps = None, [] for r in records: if last is not None: missing = r.seq - last - 1 if missing: gaps.append((r.seq, missing)) last = r.seq return gaps
The long run tells a different story
A 16-bit counter rolls over from 65,535 back to 0. The draft reported that as a gap of minus 65,536 records, a number that cannot exist. Short tests never get far enough to see it.
Fix the cause, keep the test
I told the model why the count was wrong and asked for the rollover to be handled, plus a new test: rollover alone gives zero gaps, rollover with a dropped record gives exactly one.
# sequence numbers wrap at 65536 missing = (r.seq - last - 1) % 65536 def test_rollover_is_not_a_gap(): ... def test_drop_after_rollover_is_one_gap(): ...
A check I can put a number on
The finished sequence check ran in the kit's long systems test. The full story, with requirements and the defect record, is on the case study page.
Flip a brief to see what it became
Each card starts with the kind of brief I give the model. Click or tap it to see the tool on the other side. The briefs are shortened and reworded for this page.
Spot the AI mistake
Each answer below was written in the style of an AI model, and each one has exactly one wrong line hidden among correct ones. Click the line you think is wrong. These are the kinds of slip I look for every day: a wrong unit, an off-by-one, a missed edge case.
- Check every number against the published standard, every time.
- Run the code past the edge: midnight, rollover, empty input.
- Drop or break something on purpose and see if the check notices.
ASTERIX details here follow the public format description for category 048. All values are simulated.
The kit around every build
Everything orbits the brief and the standard it traces to. Hover over or tap a tool to see what it does and where it shows up on this site. Moving dots show the work flowing in and the results coming back.
standardwhere it starts
What helped, and what went wrong
Short notes from building the tools on this site. Filter them to see where the AI saved hours and where it got things wrong.