Seventeen Systems
AI Engineering
Seventeen systems that keep arriving at the same three answers — an exact key instead of a similarity score, a boring store instead of a new one, and a human standing where the output leaves the building.
01Where they operate
Each of the seventeen answers the same five questions — where state lives, what is retrieved, who approves, what starts it, what happens when it breaks — and each one wrote its answers down before this page existed. Plotting the answers against the layers a system can have puts every project in one of four shapes, and the shape turns out to predict more about a system than what it is for.
Six layers, read off the seventeen decision records. Fetch — it goes and gets data from a source it does not own. Store — state survives between runs. Find — something is retrieved at request time. Model — a model call sits inside the loop. Gate — a human approves. Clock — it runs without a person starting it. A solid square means the layer runs; a hollow square means it is specified and never has. Two things are worth staring at. The bottom band is drawn to the same shape as the top band, which is what a system looks like before it has met a schedule. And the last row is empty: the bus-stop model has no store, no model and no clock, and it is in this chapter because the discipline is the same, not the stack.
02The decision matrix
The same five decisions, side by side. Read down a column rather than across a row: a row tells you about one system, a column tells you whether there is a person behind them or seventeen coincidences.
The five columns are not the six architecture layers repeated. They are the decisions that differ between systems: storage covers corpus and index together, selection is the layer of that name, and the human gate is where grounding stops being a schema and becomes a person.
| System | Storage | Selection | Human gate | Schedule | Failure |
|---|---|---|---|---|---|
| RUNS ON A CLOCK | |||||
| Eventist Intelligence | Supabase Postgres; photos on local disk | Trigram index + synonym expansion | DB trigger on publish, unskippable | launchd, ~13 jobs, weekly to nightly | Checks producer: banner, mail, auto-fix |
| Minutes Recording | Desktop text files; Postgres downstream | Filename is the key; folder is the queue | Action items open as pending approval | Hotkey to record; hourly watcher | Next hourly run retries, dedupe by name |
| Fat Sai LifeOS | Supabase Postgres | None — one source key per observation | Pending row, human flips before send | launchd calendar, 30 min to daily | Run row logs it, missed slots counted |
| VTM Agent Team | YAML config and dated JSON result files | Refetched CMS inventory, token overlap | None — on publish; escalations queue only | launchd, one weekly run, Monday 08:00 | Rollback to draft, alert mail, skip week |
| Office Punch-Clock | One Google Sheet, sole source of truth | None — no model, no corpus | None — the tap is input, not approval | Both badges poll every 5 s, not push | Keeps last state, asks again in 5 s |
| RUNS WHEN ASKED | |||||
| VTM Content Library | Supabase Postgres index, files on disk | Trigram over vision text, 3 SQL passes | None | on demand, one refresh script | set -e halts the run, rerun idempotent |
| hkboat | Static bundle; progress in localStorage | None — predicate over structured fields | Contact sheet for visual QA of crops | None — one-off batch run by hand | Unresolved answer drops the item |
| WTD Virtual KOL | Local files on disk, no database | 3 ref clips + 3 audio, 15 s per type | Human sound and edit pass before publish | Manual, one clip per run | Script exits, no retry; operator re-runs |
| VTM Contacts MCP | Employer Postgres, stateless server | Model picks one of three SQL filters | None | On demand, per assistant question | 401 restarts auth; logging never blocks |
| Slash V2.3 | Postgres behind one repository | None — whole ledger filtered in memory | Unmatched category left blank for user | None — paused since 2026-04 | None — nothing runs unattended |
| findmy開心 | Browser localStorage, no server state | None — weighted draw from a seeded PRNG | None | Each app open replays elapsed days | Analysis error falls back to a form |
| NO MODEL IN THE LOOP | |||||
| Career DB pipeline | Supabase Postgres, one career table | None — keyed join on a bridge slug | Dry-run diff; --write to touch the file | None — run by hand before a deploy | Wrong-database guard aborts the run |
| Booth Planner | JSONB plan row; meshes in object storage | None — catalogue constant, picked by tab | None | None — user-driven | None — no unattended run to fail |
| KMB Bus Stop | None — files in the repo | None — no model, no corpus, no query | None — a human edits a constant, re-runs | On demand, run by hand | Script raises and stops; nothing written |
| DESIGNED, NEVER RUN | |||||
| PropCheck | Airtable, waitlist only | Displacement threshold, not built | None | Per stay, designed; nothing runs | None — pipeline never ran |
| AEO Event Platform | Designed: one canonical row per event | Designed: all precomputed, no live fetch | Designed: no approval step specified | Designed: scheduled crawl of sources | Undefined — no pipeline has ever run |
| aeoseochecker | None — shipped, Postgres specified | Inverted: being retrieved, not reading | None | On demand per URL, refresh designed | None — no run path exists |
Shipped — the system has run and the cell describes what it does. Designed — no pipeline has ever run, so the cell describes what was specified. Every cell is the answer recorded for that system; none of them is a summary of several.
03The vector store
Seventeen systems, and the answer was no seventeen times. That is not a position I set out with, and it is not a position about the technique. It is what the column says after the fact, and the two most useful entries in it are the two where I built the thing first and then watched it sit there.
Eventist Intelligence carried vector columns on three tables in its first schema; nothing ever populated them and a later migration dropped all three. Fat Sai LifeOS created an embeddings table with a cosine index on the assumption that recalling past work would need semantic search; nothing ever wrote to it and nothing ever read it. In both cases what people actually typed was a client, a venue, a year, a piece of equipment, a project key, a date — structured attributes, answerable by an index that can point at the row that matched.
The other fifteen reasons fall into three shapes. Some systems have no corpus at all, so the model sees only what the request carries: one meeting that fits a prompt whole, one CV read outward, three reference clips. Some have a corpus small and concrete enough that an exact filter beats a score: fifty-four catalogue items reached by a category tab, a 503-item question bank filtered by part and topic, one table of contact rows, thirty-eight rows frozen into an explicit bridge column, one person’s ledger that loads whole, a few thousand files described in short concrete nouns. And some have a corpus that is not documents at all: a room, differenced as a distance threshold in three-dimensional space; sixteen deterministic protocol checks; a whitelist of facts a writer is permitted to state, which is a permission rather than a recall.
The sentence that keeps recurring across the reasons is that a similarity score always returns something. For an archive whose stated rule is that ambiguous evidence returns nothing, always-something is the wrong answer, and it is wrong in the direction nobody notices.
A vector store earns its place when three things are true together: the corpus is too large or too varied to enumerate, the query is a paraphrase rather than an attribute, and the caller would rather have an approximate answer than none. None of these seventeen had all three. The largest corpus here is over 140,000 photographs, and it is retrieved by project code and a closed vocabulary of tags — because that is what people type. The day those three conditions arrive together I will reach for one. They have not yet, and pretending otherwise would have cost two of these systems a table each. It cost them a table each anyway.
04What the columns show
Postgres is the default, and every exception has one reader
Seven of the seventeen keep state in Postgres, an eighth keeps a JSONB plan row, and a ninth specifies Postgres for an engine that never shipped. The exceptions are not a different taste in databases. Two keep state in the browser because the only reader is the person who wrote it. Two keep it as plain files on disk — local clips in one, a config directory and dated result files in the other. One keeps a single Google Sheet and calls it the sole source of truth — the only system here whose database is a document. And one stores nothing at all: its output is a mesh in a repository. The pattern is not that Postgres is good, it is that the moment a second reader appears the answer stops being interesting.
The gate sits on the way out, and the one system without it paid for it
Seven systems have a human approval step, and every one of them sits on an outbound path: a database trigger on publish that cannot be skipped, a pending row a human flips before anything is sent, a dry run that needs a write flag before it touches a file, an action item that opens as a commitment awaiting approval, a sound-and-edit pass before a clip goes out, a contact sheet before crops are accepted, a category left blank rather than guessed. Ten say none, and nine of those ten never send anything outward unattended — the person pressing the button is the gate. The tenth is the one to stare at: the agent team publishes to a live site on a Monday-morning schedule with no human on the publish path, and pays for it in the failure column with deterministic gates outside the writing agent, a read-back that confirms the write, rollback to draft, an alert mail, and skipping the week rather than shipping.
Five run without being asked; twelve wait
Three run on launchd — roughly thirteen jobs from weekly to nightly, a calendar from every thirty minutes to daily, and one weekly run at Monday 08:00. A fourth is an hourly watcher over a folder. A fifth polls every five seconds, and the record says explicitly that this is a poll and not a push. Everything else is on demand, by hand, or paused, including three where the schedule exists only on paper. Running unattended is the most expensive property in the table, and it was bought five times out of seventeen.
“None” in the failure column means three different things
Where a person starts the run, failure means stop and write nothing: a script that raises and stops, a shell that halts on the first error, a wrong-database guard that aborts, a clip script that exits with no retry. The operator is the retry. Where nothing runs unattended, none means there is nothing that can fail while nobody is watching. And where no pipeline has ever run, none means the system does not exist yet — three rows say that, which is the honest reading of a chapter that also contains three finished products. Only the five systems on a clock have a failure path that recovers instead of stopping, and each recovers in its own idiom: a checks producer feeding a banner, an alert mail and an auto-fix job; a run row that logs the failure and counts the slot it missed; a rollback to draft with an alert and a skipped week; an hourly retry deduplicated by filename; a badge that keeps its last face and asks again in five seconds. Two of those rows show the same trick from different directions: the hourly watcher retries and deduplicates by filename, and the steward re-gathers its whole domain every cycle and deduplicates by source key. What makes a repeat safe in both is the key sitting in the selection column immediately to the left — which is why None in that column is so often the answer of a system that already knows what a thing is.
05The limit
The honest limit is in the same columns. Three of the seventeen have never run, and most of the rest serve one person or one team on machines I control; none has had to survive a corpus, a headcount or a load I did not choose myself. What the table does show is that I made the same call seventeen times with nobody enforcing it — reach for the boring store, buy a schedule only where the work arrives whether or not anyone asks, and stand the human at the point where being wrong is expensive. That is a smaller claim than architecture at scale, and it is the claim the evidence actually supports.