Take-Home · Part 4
AI transcripts & how I used them
The real working process, not a summary of it — plus the three notes the brief reads most carefully: what I used, what I rejected, and where the tools helped least.
Full session transcript
The complete Claude Code session — reading the handover doc, designing and building the validation library and its tests, and drafting the Part 1 review and Part 3 decisions.
What I used
Claude Code (Opus 4.8) for the whole exercise: reading the handover doc, designing and implementing the cross-field validation library and its tests, drafting the Part 1 review, and drafting the three Part 3 decisions. I worked from the real material — the actual brief, the handover doc, lib/validate.js, and the existing test suite were all in the model's context, not summaries of them. The full session transcript is attached; it is the working process, not an account of it.
A suggestion I rejected, and why
For the cross-field format, the model's natural pull was toward a single rich rule language — boolean composition (AND/OR/NOT), nesting, and arithmetic like a + b <= c: one clever rule type that could express anything. I rejected that in favour of a small set of discrete, well-defined rule types (compare and required_if), with the format designed to grow by adding types rather than by making one type cleverer.
The reason is the test the brief actually sets: someone has to write a correct rule for an unseen client from my README alone. A general expression engine is hard to document precisely and would fail that test, whereas two narrow rule types, each with an explicit schema table, pass it. The cost I accepted is that anything outside those two shapes needs a new rule type rather than a config tweak — which I state plainly in the README rather than implying the existing rules stretch further than they do.
Where the tools helped least
Two places.
Judgment calls that need a business bet, not a code fact
Decision 1 (silo vs pool) hinges on which market you're actually in and who you're willing to lose, and the model will argue either side equally well — so it cannot make that call for you.
Holding the whole submission's logic together
More concretely: the model produced a Decision 3 that answered for a shared PostgreSQL primary while Decision 1 had committed to full silo — a direct contradiction, since a silo fleet has no shared primary at 300 clients. It did not catch that its own answers were inconsistent across the three decisions. I caught it and had it rewrite Decision 3 to name the failure that actually exists in a silo (the migration/deploy fan-out across 300 databases). That is the clearest example of where the tool stops: it is fluent within one answer but does not hold the whole submission's logic together, and that is the human's job.
What I left out, and what I'm least confident about
The library ships two rule types, compare and required_if, with required_if fully documented (its own schema table in the README) and covered by tests across all four of its branches. What I deliberately did not build is anything beyond a single declared relationship per rule: boolean composition (AND/OR/NOT across several conditions), arithmetic (a + b <= c), and cross-record rules (constraints that span more than one submitted record). I named those as the stopping line rather than pretending the format reaches them — each would be a new rule type or a genuinely different evaluation model, not a tweak to what is there.
On Part 3, the cost model behind Decision 1 is asserted, not measured: I claim silo's provisioning and maintenance cost is worth the regulated market, but I have not priced it. And Decision 3's "the migration pipeline breaks first" is reasoned from the architecture, not observed under load. It is my best single answer, but I have not run a 300-tenant fleet to prove the migration fan-out beats the shared control plane or the observability layer to the wall. If I am wrong about anything, it is most likely that ranking: I am less certain that migrations specifically are first rather than one of two or three that go close together.