See it work › Portfolio › Feature refinement
Use case 2 · building insurance software (Guidewire PolicyCenter)

Turning a wish list into test rules a tester can actually run.

When a company wants new software, someone writes a wish list: "when a driver is added, the system should look up their driving record". Before anyone builds it, each wish needs test rules: "given this, when that, then this should happen". The Brain reads the wish list and the company's other documents, asks eight questions about every wish, and only then lets a language model write the test rules. A filter deletes anything the model made up. Wishes that cannot be tested, or that mention things the company does not have, go to a person instead.

Test 57 wishes, some written badly on purposeSpotted every double wish, vague wish and mismatchKind named 51 of 57Made-up lines deleted 54 of 210Screens real, from the live app
What this job does

Bad test rules cost months. Good ones are hiding in the company's own papers.

Imagine a teacher writes "the science fair project should be good". You cannot grade that. A better version says "given a project with a hypothesis, when it is presented, then it must show the data it collected". Software has the same problem. A vague wish becomes a wrong program. The details needed to write good test rules are already in other documents: which fields exist, which error messages the other systems send, how past wishes were tested. Nobody has time to read all of it for every wish.

In goes

The wish list, the field-name sheet, the other-systems sheet, and old wishes with their test rules

Out comes

For every wish: eight signed answers, then a short story and one test rule per required case, or "send to a person" with the reason

Who uses it: the people who turn wishes into work for programmers. How much it may do alone: at first its drafts sit next to a person's own. Later they can be sent to the team's task list as suggestions. What people change is how the Brain learns.

The job screen for feature refinement in the HomeGrwn app: template version, counts of folders, facts and decisions, and the rule set.
The job screen in the app. 65 folders, 114 facts, 513 signed decisions, one rule set (the list of cases each kind of wish must cover).
The picture

The same eight stops as the price job. This time the writer does real work, so the filter matters.

What makes this job about wishes instead of prices is a set of settings: four recipe cards for reading, five kinds of fact, eight questions, and a list of cases each kind of wish must cover.

Documents come in through the Guard, are read by the Senses, filed in Memory, questioned by Judgment, written into the Ledger, drafted by the Voice through a filter, and reviewed by people. What people change comes back to teach the Brain.1 · Papers come inthe wish listthe field-name sheetthe other-systems sheetold wishes from Jirafetched from Jira and Box2 · The Guardthe front doorstamps every filerefuses the same file twiceguesses what each file isa person says yes3 · The Sensesreads each fileone wish = one factone field name = one factchecks at six checkpointsbad facts → held back4 · Memorya filing cabinet with a date on every sheetOriginalsthe files, lockednever editedon diskFactseach wisheach field nameeach error messageeach old wish114 of themName listthe field namesand systems thecompany really hasthe writer mayonly use theseVectorsa map of oldwishes, to findsimilar onesnames hiddenthe facts and names for this wish5 · Judgment: eight questions about every wishIs it one wish or two? · Can it be tested? · Which names does it use? · What kind is it?Which cases must the test rules cover? · Does it mention a field the company lacks?rules first; the language model only when a rule says "not sure"untestable, or a missing field → send to a person, do not write6 · The Ledgera notebook written in pennothing can be erasedevery line is signed513 lines this test7 · Writer + filterthe model writes the storyand one test rule per casethe filter deletes any nameor number not in the facts8 · Peopleread and fix the draftshandle the ones sent backpush good ones to Jiraapprove new ruleswhat people change comes back and teaches the Brain for next time
01The language model never sees the files. It sees the signed answers, the list of names it may use, and one case at a time.
02The filter is not an AI. It checks each line: is every field name in the name list? Is every number in the wish or in a fact? Is the case one that was asked for?
03"Send to a person" is a real answer. A wish that names a field the company does not have, or that has no trigger and no result, goes back with the reason.
04Old wishes carry a count of how much a reviewer changed them. That is the first thing the Brain learns from.
Why HomeGrwn?

Because it grows models from your own data, on computers you own, with any language model you choose.

HomeGrwn is the product the Brain runs inside. Its job is to turn a company's own records into models that belong to that company: rules with versions today, trained helpers per question once there are enough labels. The language model that writes the words is your choice. The tests on this page used a small open model on a laptop; a bigger model with your own API key plugs into the same slot, because the writer never decides anything. Here is where each part of the feature refinement job actually ran.

Three places: the company's own building with its computer, files and language model; the HomeGrwn app with the Brain and its memory; and the company's tools such as Jira, Confluence and Box. Files and answers flow between them over encrypted links, and the whole app can also be installed inside the building.Your buildinga computer you own: a laptop, an office server or a Mac StudioThe HomeGrwn connectora small program you download from the app andapprove once in your browser; it installs Ollama itselfno terminal, no engineerThe language model · your choicein this test: llama3.2:3b, 2 GB, running on your computeror any model you pick, big or small, with your own keyYour files and your warehousewish list and specs from Confluence, the fieldsheet from Box, old wishes from Jirathe app never holds your warehouse passwordHomeGrwn · the appon our server, or installed inside your building (same software)The Brainfront door · readers and checkpoints · filing cabinetjudgment · notebook · writer with filterMemory: facts and folders in Postgres, originals sealed on disk,map pins in pgvector, the vault for hidden namesa job is settings with versions, not codeThe screensSources: files, guesses,held factsA bill or a wish on any dateThe notebook, with a"check the seals" buttonThe scored practice testThe built-in agentsguess what each file isread it by recipe cardrun the questionsrun the practice testfetch from your toolsyou only say yes or noYour tools and peoplewhat you already useJira · Confluence · Boxthe app fetches wish lists, specs,sheets and old wishes with yourown keys; unchanged items arerefused as twinsPeoplesay yes to the file guessesfix held factsread findings and draftsapprove new rule versionsdecide how much it may do alone:report only → suggest → actwhat they decide teaches itencryptedfiles upquestionsEverything above was switched on from the app by its agents. The only manual step in the whole flow is a person clicking "yes".
01Models made from your data, for you. The rules, the memory and, in time, the trained helpers are built from your own records and belong to you. The files are read on a computer in your building, and the whole app can run there too.
02Any language model. The writer slot takes a small open model on your own computer or a big one with your own key. It never decides, and the filter checks its words either way, so you can swap it without changing the answers. On a laptop, this job ran with a 2 GB model at no cost per question.
03No engineers needed. Download the connector, approve it in your browser, drop files or connect Jira, click yes. The built-in agents do the rest.
04Settings, not code. A job is a template of rows with versions. The same software checked prices and wrote test rules; a hospital or a bank job is another template.
05Proof built in. A notebook that cannot be erased, a filing cabinet you can ask about any date, and a practice test with a score. You can show an auditor.
06It learns from your people. What your reviewers change and what your tickets say comes back as lessons, and a new rule version goes live only if it is better.
The data

Four files, exactly as the company keeps them.

The test files were made by a generator we wrote so we would know the answers. They look like real project files, but they are not a real company's files.

FileWhat it isSizeWho keeps it in a real company
BRD_PolicyCenter_PersonalLines_2026.2.mdThe wish list, 57 wishes9 KBBusiness analysts, in Confluence
PC_Field_Mapping_Legacy_to_PolicyCenter.xlsxOld field → new field, 16 rows6 KBThe data migration team, in Box
Integration_Spec_PersonalLines_v3.mdFour outside systems and their error messages1 KBIntegration architects, in Confluence
jira_export_PC_stories.jsonl30 old wishes with test rules and reviewer edit counts17 KBJira

A peek inside

The wish list
REQ-PC-001  If PolicyDriver.AccidentCount is over 3 the system applies the high-risk surcharge of 12%.
REQ-PC-002  Premiums must be accurate as expected for all cases, etc.
REQ-PC-008  Approving the quote binds the policy and also sends the welcome email and also schedules the inspection.
REQ-PC-016  On entering a VIN the system calls VINLookup and fills PersonalVehicle.Symbol from the response within 3 seconds.

The field-name sheet          old name          new name
                              LEG_POL.MPD_FLAG  PolicyPeriod.MultiPolicyDiscount
                              LEG_POL.TERM_CD   PolicyPeriod.TermType
                              (there is no row for PolicyDriver.AccidentCount, so wish REQ-PC-001 talks about a field the company does not have)

The other-systems sheet
Error codes returned by VINLookup: TIMEOUT, VIN_INVALID, NOT_FOUND.

An old wish from Jira
{"story_id": "PC-900", "title": "When a Personal Auto quote is rated and ...", "status": "done",
 "acceptance_criteria": ["Given the rating inputs, when the quote is rated, then the premium equals the worked example to the cent"],
 "reviewer_edits": 2}
What happened to each file

From a file on the shelf to facts in folders, one file at a time.

Every file took the same trip: the front door stamped it and guessed what it was; a person said yes; a recipe card cut it into pieces; each piece became facts; each fact passed six checkpoints; the facts were filed in folders. Two of the recipe cards first had the wrong reading shape (a grid instead of rows), and every row from those files was held back; the fix was a settings change, not code.

BRD_PolicyCenter_PersonalLines_2026.2.md

The wish list: 57 wishes, each under a heading with a number like REQ-PC-001, agreed with the underwriting and pricing teams.

1 · Front door's guesswish list (requirement) · recipe requirement_doc · version 2026.2 read from the name · sureness 3
2 · Recipe cardparagraphs; each numbered heading opens a folder; the sentence under it becomes the wish fact
3 · Pieces58 paragraphs
4 · Facts58 wish facts
5 · Filed in58 folders (57 wishes and the introduction)
6 · Checkpointsan empty sentence is refused; otherwise nothing fails here

PC_Field_Mapping_Legacy_to_PolicyCenter.xlsx

The field-name sheet: the old system’s field on the left, the new PolicyCenter object and field on the right, with a type and a transform. A title row above the header.

1 · Front door's guessfield sheet (field_mapping) · recipe mapping_sheet · sureness 11
2 · Recipe cardrows; each row becomes one fact named Object.Field (from the Target Object and Target Field columns)
3 · Pieces16 rows
4 · Facts16 field facts
5 · Filed in1 folder (the sheet)
6 · Checkpointseach fact also seeds the name list: 16 field names the writer may use

Integration_Spec_PersonalLines_v3.md

The other-systems sheet: four outside systems the software calls (driving records, car lookup, replacement cost, rating engine), each with the error messages it can send back and a 5-second timeout.

1 · Front door's guesssystems sheet (spec_statement) · recipe spec_doc · version 3 · sureness 5
2 · Recipe cardparagraphs; each system section opens a folder; each sentence becomes a statement fact
3 · Pieces5 paragraphs
4 · Facts10 statement facts
5 · Filed in5 folders, one per section
6 · Checkpointseach system and its error messages are added to the name list: 4 systems

jira_export_PC_stories.jsonl

Old wishes from the team’s task tool: the story, its test rules, its status, and how many times a reviewer changed it before accepting it.

1 · Front door's guessold wishes (past_story) · recipe tracker_export · sureness 11
2 · Recipe cardrecords; one fact per record, kept whole (story, test rules, edits)
3 · Pieces30 records
4 · Facts30 old-wish facts
5 · Filed in1 folder (the export)
6 · Checkpointsstatus and edit counts must be present

Totals: 109 pieces, 114 facts, 65 folders, 20 names in the name list (16 fields, 4 systems), 0 facts held back, 0.3 seconds.

The Sources screen for the feature refinement job: one drop with four files, the agent's guess, the header seen and the recipe picked.
The Sources screen, live. Four files, each with the front-door agent's guess and score, the header or sheet it saw, and the recipe card a person confirmed. Read: 4 files → 109 pieces, 114 facts, 0 held back.
How the built-in agents read

Two agents did the reading and one more built the name list. A person only clicked yes.

The front-door agent (the manifest)

It scores each recipe card against the file ending, the words in the file name ("BRD", "Mapping", "Spec", "jira") and the first row. The wish list scored 3 (only the name helped); the sheet and the Jira export scored 11 (their headers matched the card). It reads the version from the name (2026.2, v3).

The reader agent (the recipe cards)

The paragraph reader opens a folder for every numbered heading and makes one fact per sentence under it. The row reader makes one fact per row, naming it from the columns the card points at (Target Object and Target Field). Nothing here knows what a "policy" is.

The name-list agent

After reading, it walks the field facts and the system facts and builds the name list: 16 field names like PolicyPeriod.TermType and 4 systems with their error messages. This list is what question 6 checks against and what the writer is allowed to mention.

The six checkpoints

CheckpointWhat it asks here
ingestDid the piece come from a sealed original with a location?
validateIs the value the right kind? A wish must be text; an old wish must have a status.
standardizeTrim, fix casing of Object.Field names.
resolveDoes a system name in a wish match a system in the other-systems sheet?
testJob-specific: a field named in a wish should exist in the sheet (if not, it is noted for question 6, not held back); two wishes over 92% alike are shown to a person.
publishIs this fact new, or the same as one already filed?
Where it is kept

Same shelves as the price job. Different things on them.

ShelfWhat is on it, for this jobThis jobWhere exactly
Original filesThe four files, sealed as they arrived4disk, write-once
PiecesParagraphs with their heading, rows with their sheet109Postgres chunks
FactsWish sentences, field names, system statements, old wishes114Postgres facts
Folders58 wishes, 5 system sections, the sheet, the export65Postgres items, item_versions
Name list16 field names, 4 systems with error messages20Postgres entities
The notebookEight answers per wish plus the draft; every deleted line with its reason513Postgres decisions, append-only
VectorsMap pins for old wishes and system sentences, names hiddenas neededpgvector, chunk_vectors
The vaultReal names behind the hidden ones (reporter emails, customer names)as neededPostgres vault, encrypted
Settings6 recipe cards, 10 fact kinds, 8 questions, case lists, never-say wordsrows · 1 rule setPostgres job_config, rule_versions
A wish's folder page: its version, its sentence fact with source, and the eight signed answers plus the draft.
One wish's folder, live. The sentence as a fact with its source paragraph, and the signed answers underneath. (This live job was created with an earlier build that named folders by their full heading; the current build names them REQ-PC-057.)
Versions and twins

A new wish list is a new drop, not a new copy.

The same rules as the price job, applied to documents.

SituationWhat happens
The same wish list is fetched from Confluence again, unchangedSame bytes, same fingerprint: refused at the front door as a twin. Nothing to read.
The wish list is saved again with one sentence changedNew fingerprint, so it is read. 57 of the 58 sentence facts already exist and are skipped. The one changed sentence becomes a new fact that replaces the old one; that wish's folder closes version 1 and opens version 2; the old draft stays in the notebook and a new judgment is written after it.
The field sheet gains the missing field next monthA new field fact and a new name in the name list. Wish REQ-PC-001, which was sent to a person for naming a missing field, can be judged again and now passes question 6. Both judgments stay in the notebook, dated.
Three wishes repeat the same sentenceThree folders (one per wish number), one shared sentence fact. The test wish list does exactly this on purpose, as real documents do.
The case list is improvedA new rule-set version, approved by a person. Every draft names the version it used, so old drafts can be told from new ones.
Memory: by folder, by date

Each wish gets a folder. What the other documents say about it goes in the same folder.

The clearest example is question 6, "does it name a field the company lacks?". Wish REQ-PC-001 talks about PolicyDriver.AccidentCount. Memory holds the company's field names. The Brain looks for that name in the list, does not find it, and writes that down, pointing at both the wish and the sheet.

Wish REQ-PC-001 has its sentence as a fact. The name list has 16 field names from the sheet. The field the wish names is not in the list, so the wish is sent to a person.folder REQ-PC-001fact: the wish sentencefrom the wish list, paragraph 4name list · 16 field namesPolicyPeriod.TermType, …from the field sheet, rows 2–17is it there?Answer: missing field · PolicyDriver.AccidentCount is not in the listpoints at: the wish fact + the 16 name facts · rule version 1 · signedWriter: sent to a person, nothing written"field not in the company's sheet: PolicyDriver.AccidentCount"the three cases it would have needed are listed for the person

One folder per wish. The wish number is the label. A revised wish list lands as a new drop; a wish whose sentence changed gets a new fact and a new folder version. One whose sentence did not change gets nothing, because that fact already exists.

Every answer has a date. Each draft says which version of the folder and which version of the rules it was written from.

Every answer points home. A person reading a draft can open the sentence it came from, the row that made a field name allowed, and the line that listed an error message.

Vectors and the vault

A map where similar sentences sit close together. It brings the writer good examples. It never answers a question.

A vector is a long list of numbers that works like a pin on a map. Two sentences that mean nearly the same thing get pins close to each other. Old wishes and system sentences get pins after their names are hidden. The writer asks for the three old wishes nearest to the new one and sees their test rules as examples of how this team writes.

What gets a pin here. Old wishes and their test rules, system sentences, wish sentences. Field names do not get pins. A name is either in the list or it is not, and that is a lookup.

What the pins are for. Style examples for the writer. Finding the system sentence that lists error messages when the wish calls the system by a slightly different name. Spotting two wishes that are almost the same.

What the pins are not for. None of the eight questions uses a pin. In the test, pins were used for zero answers.

The vault. Old wishes from Jira carry reporter emails and sometimes customer names. They are swapped for code words before a pin is made. The real values are locked in the vault, and every peek is written in the audit log.

One sentence, three forms

the original (sealed on the shelf)
  "PC-912 · Reported by maria.chen@acme-mutual.example: when the Home
   policy for customer Dale Okafor was cancelled, the Auto quote kept
   its multi-policy discount."

with names hidden (what gets a pin, what the model sees)
  "PC-912 · Reported by [[email:9a41c2e07b3d]]: when the Home policy
   for customer [[name:e2f70c11ab98]] was cancelled, the Auto quote
   kept its multi-policy discount."

the pin (a list of numbers; 768 of them with a real embedding model)
  [-0.0412, 0.0937, 0.0088, ...]
The eight questions

Each question has its own helper. Most helpers are rules, not AI.

QuestionWhich helperRuleModelRight
Q1 · One wish or two?Looks for "and also", "and then", two triggers. The model is asked when unsure.51657 / 57
Q2 · Can it be tested?Does it have a trigger, a result, a person, and no vague words? (rules)57057 / 57
Q3 · Which names does it use?Finds Object.Field words and looks them up in the name listlookupfeeds Q6 and the filter
Q4 · What kind of wish?a calculation · a check on input · a change of state · a call to another system · a screen · a speed goal (keyword rules; the model when none fire)48951 / 57
Q5 · Which cases must be covered?A list per kind of wish (rule set v1), plus one case per error message the other system can sendrule89.5% of the answer sheet's cases
Q6 · Does it name a field the company lacks?Lookup in the name listlookup57 / 57
Q7 · Are all its parts covered?Counted from Q1 and Q5math–
Q8 · How likely is a reviewer to accept it?Starts at 0.9 and drops for each problem found (a rule)570needs real reviews to score
Did we create or train a model? No. The eight questions were answered by rules we wrote and by lookups in the name list. The writer is llama3.2:3b, downloaded as it is and given instructions; it was not trained. The filter is a checklist, not a model. Training comes later, once reviewers' changes have flowed back as labels: then a small model per question is trained on them, tested on wishes it never saw, and used only if it beats the rules.
The writer and the filter

The model writes one line at a time. The filter reads every line before anyone else does.

The writer gets the wish, the eight signed answers, the names it may use, and one case to cover. It writes the story once, then one test rule per case. Each line goes through the filter: every field name must be in the name list; every number must appear in the wish or in a fact; the case must be one that was asked for; words from the never-say list are cut. A deleted line is kept in the notebook with its reason, and the writer gets one more try with that reason in front of it.

Why the writer is kept separate. In an earlier try the model was allowed to write for wishes that named a missing field. It wrote three confident test rules about a field the company does not have. A model does not know what it does not know; the lookup does. So questions 2 and 6 decide whether to write at all, and the model writes only when they allow it.
The notebook (ledger)

513 lines for 57 wishes: eight answers and one draft each.

A line says: which wish, which question, the answer, whether a rule or the model answered, which rule version, which facts were read. The draft line holds the story, every test rule kept, and every line deleted with its reason. The database refuses to change or delete a line, and the seals were verified intact.

The test

A quiz with 57 wishes. We wrote some of them badly on purpose and kept the answers to ourselves.

Like a spelling quiz: the teacher keeps the answer sheet, the student only gets the quiz. A program we wrote made the four files with 57 wishes. On purpose, 6 of them cram two or three wishes into one sentence, 9 are too vague to test, and 6 mention a field the company does not have. It also wrote a secret answer sheet: for each wish, how many wishes it really is, whether it can be tested, what kind it is, and which cases its test rules must cover. The Brain was given only the files, never the answer sheet. When it finished, we compared its notebook with the answer sheet to score it.

Planted on purposeWishesExample
two or three wishes in one sentence6"…binds the policy and also sends the welcome email and also schedules the inspection"
too vague to test9"Premiums must be accurate as expected for all cases, etc."
names a field the company lacks6PolicyDriver.AccidentCount, which is not on the field sheet
calls another system9the car lookup and driving-record systems, each with its error messages
ordinary, well written27a price formula; a blank licence number; cancelling the home policy
  1. Front door. 4 files, 0 twins, 0 unreadable. A person said yes to the guesses.
  2. Reading. 109 pieces, 114 facts, 65 folders, 20 names, 0 held back. 0.3 seconds.
  3. Questions and writing. 57 wishes, eight questions each; 42 written, 15 sent to a person. 68.7 seconds with the model on a laptop.
  4. Score. Compared with the answer sheet, split by who answered. Deleted lines and uncovered cases counted. Seals checked: 513 lines, intact.
100%
double wishes, vague wishes and missing fields all spotted
90%
kind of wish named right (51 of 57)
156
test rules kept
54
made-up lines deleted by the filter
The proof screen for the feature refinement job: headline score, stages, and accuracy per question.
The proof screen, live. On the live server there is no language model attached, so this run used fill-in templates for the writing: the questions score the same, and nothing is deleted because nothing was made up. The writing numbers above come from the laptop runs with llama3.2:3b.
The answers

What the Brain wrote, what it refused to write, and what the filter deleted.

From the last try with llama3.2:3b. Every line below is in the notebook, with the answers it was written from. Every deleted line is there too, with the reason.

Wish REQ-PC-016 · a call to another system, written in full

"On entering a VIN the system calls VINLookup and fills PersonalVehicle.Symbol from the response within 3 seconds." Seven cases to cover, three from the error messages the systems sheet lists.

the storyAs a user, I want the system to retrieve the vehicle symbol from VINLookup within 3 seconds when entering a valid VIN, so that I can view the vehicle information.
normal caseGiven a valid VIN, when the system calls VINLookup, then the PersonalVehicle.Symbol is filled within 3 seconds.
too slowGiven a valid VIN, when the system calls VINLookup, then the PersonalVehicle.Symbol is not filled within 3 seconds.
error: VIN_INVALIDGiven an invalid VIN, when the system calls VINLookup, then the PersonalVehicle.Symbol is not filled.
error: NOT_FOUNDGiven an invalid VIN, when the system calls VINLookup and the response indicates NOT_FOUND, then the PersonalVehicle.Symbol is not filled.

Seven of seven cases covered, nothing deleted. The "too slow" line is weak: it repeats the case name instead of saying what the screen should show. A reviewer would fix it, and that fix is what the Brain learns from.

Wish REQ-PC-015 · a price formula, where the model made up numbers

"The comprehensive premium is the base rate for the vehicle's PersonalVehicle.Symbol and territory multiplied by the deductible factor for PersonalVehicle.CompDeductible, rounded to the cent, and never below 25.00."

worked example · first tryGiven PersonalVehicle.CompDeductible = 0.5 and PersonalVehicle.Symbol = 'car', when the calculation is performed, then the comprehensive premium is 25.00.deleted: uses a number that is not in the wish: 0.5
edge case · first tryGiven PersonalVehicle.CompDeductible = 0.0 and PersonalVehicle.Symbol = 'car', when the calculation is performed, then the comprehensive premium is 25.00.deleted: uses a number that is not in the wish: 0.0
worked example · second tryGiven the PersonalVehicle.CompDeductible and PersonalVehicle.Symbol values, when the comprehensive premium is calculated, then the result should be greater than or equal to 25.00.
rounding · second tryGiven the deductible factor for PersonalVehicle.CompDeductible and the base rate for the vehicle's PersonalVehicle.Symbol, when the comprehensive premium is calculated, then the result should be rounded to the cent and never be below 25.00.

The surviving example has no real numbers because the wish has none to give. Real numbers live in the price tables, which are in the other job's Memory. Connecting the two is the next step.

Wish REQ-PC-001 · sent to a person, nothing written

one or two?one · rule
testable?yes · rule
what kind?a calculation · rule
cases neededa worked example · each edge · rounding · from the list for calculations
missing field?yes · PolicyDriver.AccidentCount is not on the sheet · lookup against the name list
writersent to a person: "field not in the company's sheet: PolicyDriver.AccidentCount" · the three cases are listed for them

Wish REQ-PC-008 · three wishes in one sentence

the storyAs a customer, I want to approve a quote so that it is bound to the policy.
normal caseGiven the quote is approved, when the policy is bound, then the welcome email is sent and the inspection is scheduled.
not approvedGiven the quote is not approved, when the policy is bound, then the welcome email is not sent and the inspection is not scheduled.
undoGiven the quote is approved, when the policy is unbound, then the welcome email is not sent and the inspection is not scheduled.

Correct, but still one story for three wishes. The next change splits the sentence into three folders first, so each part gets its own kind and its own cases.

What it got wrong

Four tries. The ones that looked best were the least honest.

TryWhat changedQuestions rightRules keptDeletedCases missingWho wroteSeconds
1first scored run100 / 90 / 84 / 10016533mostly a fill-in template≈60
2better "testable" rules; the case list per kind of wish100 / 100 / 90 / 10018933template 48 · model 9≈70
3the model writes everything; no template100 / 100 / 90 / 1001326078model 571,599
4send to a person when untestable or a field is missing; tell the model what was deleted and let it try once more100 / 100 / 90 / 1001565454model 42 · sent to a person 1568.7

Tries 1 and 2 had the best-looking numbers because a template filled in 48 of 57 stories from the case names, so the filter had nothing to delete. Try 3 is the model on its own: 60 lines deleted, 78 cases missing, 27 minutes because one wish kept timing out. Try 4 is the design we keep.

Where the 54 deleted lines came from. 51 made-up numbers (deductibles, licence numbers, "after 30 seconds", "1 or more"). 3 made-up field names ("MVR.Violations" instead of PolicyDriver.Violations).

The six "what kind" misses. Three copies of "Premiums must be accurate…" went to the model, which called them a speed goal. Question 2 had already called them untestable, so they were sent to a person and the miss cost nothing. Three copies of a two-in-one sentence about the car lookup and the driving record were called "a call to another system" where the answer sheet says "a check on input". Splitting first fixes it.

One the filter let through. For wish REQ-PC-010 the model wrote "TermType set to 1 (annual)". The wish says "annual". The number 1 slipped past because the field sheet says TermType is a code list but the codes themselves were never read into Memory. The codes must become facts, or any number that could be a code gets through.

Not proven yet. No reviewer has sent changes back, so question 8 has not been scored. The files are our generator's, not a real company's. The model should write "not specified" instead of inventing an edge case the wish does not define.

See the first job: rate validation →

Words used here

A short glossary.

wish (requirement)
one sentence saying what the software should do
test rule (acceptance criterion)
"given this, when that, then this should happen"; a tester can run it
drop
a batch of files handed to the front door at one time
recipe card
a settings row that tells a reader how to cut a kind of file into facts
fact
one true thing read from a file, with its type, value, dates and source
folder (item)
everything known about one wish; it has numbered, dated versions
name list (entities)
the field names and systems the company really has, built from its own sheets
notebook (ledger)
the append-only, sealed list of every answer and every draft
helper (model)
whatever answers one question with a version and a signature: a rule set, or a language model behind a filter
filter (firewall)
the checklist every written line must pass
vector (pin)
a list of numbers that places a piece of text so similar text sits nearby
vault
the locked store of real values behind the hidden names
Brain Models

Same parts. Any job.

The architecture, drawn step by step, and the other job built on it.

How the Brain is built →Rate validation →