Alphabet++
Two real runs — a failing build restored, and a new capability built — step by step, with the real time and duration of every command the agent ran, read from the task manager’s own log.
00 The task
A failing build, restored — step by step.
An automated dependency update opened a pull request that broke the build: a testing library had been bumped to a version another library refused to work with. Below is every step the agent took to fix it, in order, with the real time and duration of each sara command, read from sara’s own usage log.
The striking part is the order. The very first thing the agent does — before it
has even read the failing build — is a single command, sara begin,
that opens the task, looks up the fix and sets the pass/fail check. Everything after that
hangs on a task that already exists.
-
09:45:16
I It starts with one command
Before reading a single line of the failing build, the agent opens the task. This one call is the first thing it does.
-
09:45:16
sara beginopens the taskrecalled the fixOne command does the whole start. Folded inside it, a lookup of the saved notes returned this exact recurring problem and its known fix — pin the testing library back to the last version that still works. The answer existed before the agent had even looked at the build.
-
09:45:16
II What the one command set down
Everything below was folded inside that single
sara begin: the task exists, with its terms and its check, before any file is changed. -
task Create the task — task #37 — and tag it.
ci, build, restitutio — the labels that tie this work to every other run like it.
-
assignment Save the original request, word for word.
The pull request is failing its build; restore it to a green, consistent state.
-
rationale Save why it matters.
The build is red on the pull request; it needs a working, consistent state again before it can merge.
-
check Add one pass/fail check.
The build must go green and the whole test suite must still pass. It is written before the change, so “done” has a precise meaning the fix can be measured against.
-
recall Look up the saved notes for prior art.
Search every past note by the task’s own words and meaning, and return a ranked shortlist — the step that surfaced this recurring failure and its known fix. The next section walks through exactly what it returned.
-
finding Bind the recalled notes onto the task.
The shortlist is written back as a finding, so the prior art travels with the task instead of living only in the agent’s head.
-
next Point at the first step to work.
Begin closes by handing back the next thing to do, so the agent moves from setup straight into the work with no guesswork.
-
09:45:25
III Read, then reproduce
Only now does the agent open the build and confirm the cause. Reconstructed from the shell commands, with the one note it wrote back onto the task.
-
read Read the pull request’s checks.
One check was failing: “Run tests”. The change was an automated update bumping a group of developer dependencies — a testing library among them, raised to a new major version.
-
read Look at which versions changed.
Check out the branch and read the exact package bumps across the projects that use the testing library.
-
09:46:14
sara annotatekind: findingWrite the confirmed cause onto the task: the testing library was raised to a new major across eight projects, and a coupled helper bump pulled in the same conflict — all of which another required library refuses. It is the same recurring failure the lookup had already named.
-
reproduce See the failure for real.
Run the restore locally and watch it fail with the same version-conflict errors the CI job hit. Now the failure can be seen directly, not just as a red check.
-
09:46:22
1 min 44 s — no sara command
This is where the fix is actually made. No sara command runs, so none of it is in the log — but the task already exists, with a check waiting to be met. Reconstructed from the shell commands:
-
fix Apply the known fix.
Pin the testing library back to the last working version across the eight projects that use it, and undo the coupled helper bump that had pulled in the same conflict. Every other update in the group is kept.
-
witness Rebuild.
The build now restores and compiles cleanly — no warnings, no errors, even with warnings treated as errors. The once-red command is green.
-
witness Run the tests.
Run the full unit suite to be sure nothing else broke: 1,874 passed, none failed, across seven test projects.
-
09:48:06
IV Save the result
Tick the check now that it passes, and save the note so the next run does not have to work it out again.
-
09:48:06
sara step_donekind: acceptanceresultMark the check met, with the clean build and 1,874 passing tests as the evidence. The task can only close because the check actually passed.
-
09:48:21
sara learnSave a note about the cause and the fix (m533), linked to task #37 — the same note the lookup at the start had found, now reinforced for the next run that hits it.
-
09:50:08
V Publish and close
The fix is committed; now it is pushed, explained, and the task is closed against the pull request it fixed.
-
push Push the fix to the branch.
Send the one mend commit to the pull request’s branch so its checks re-run.
-
comment Explain the fix in plain language.
Leave a short comment on the pull request: what failed, why, and what was changed.
-
09:50:27
sara linkTie the task to the pull request it fixed, so the work and its result point at each other.
-
09:50:47
sara doneClose the task. It carries a met check, a linked pull request, and a saved note (m534) — a complete record, from the first command to the last.
→ The lookup, up close
How the recall already knew the fix.
The one surprising beat of the run is that the fix was known before the build was read.
That was not luck: it is what sara recall does, folded inside
begin. Given the new task’s own words, it searched every
saved note and returned a short, ranked shortlist — in fifteen milliseconds.
This is the actual shortlist it returned, strongest first. The left column is each note’s label; the tags show how it matched and how strong it is.
-
m529
by meaning The same failure, from the previous pull request.cosine 0.45strength 2.1
The closest match by meaning: the identical dependency conflict, fixed the same way one pull request earlier. Ranked first because it is both recent and often reinforced.
-
m228
by words The root note of the whole failure family.canonicalstrength 2.0
The one note every recurrence points back to: it names the cause in general and the exact fix — pin the testing library back below the breaking major. This is the note that made the answer known.
-
m517
by words The same failure again, an earlier pull request.strength 2.0
Another recurrence of the same fault, kept on the list as corroboration: the pattern has happened before, more than once.
-
m215
by meaning A different, but related, build failure.cosine 0.46strength 2.0
Close in meaning — another red pipeline over package versions — but a different cause. A near-miss the ranking keeps, and keeps below the exact hits, so it informs without misleading.
-
m6
by words General background about the service.strength 1.5
Weakly related context, ranked last. Present for completeness, not weight — the lower strength keeps it at the bottom.
01
Two ways at once.
Recall searches by shared words and by meaning — a vector similarity, shown here as a cosine score. The two arms are fused into one ranked list, so a note can surface because it uses the same terms, because it means the same thing, or both.
02
Notes that strengthen.
Every note carries a strength that grows each time it proves useful, and one note per family is marked canonical — the root the recurrences point back to. So the more often a failure returns, the faster its fix rises to the top.
That is the whole trick. Recall is not a cache of one answer; it is a ranked memory that returns a small family of prior notes, strongest first — so the exact fix and the canonical note that explains it arrive together, before the first file is read.
→ Summary
The task came first — so everything after it had somewhere to hang.
Two things stand out in this run. The first is the order: the agent’s opening
move, before it read the build at all, was a single command —
sara begin — that created the task, looked up the past
(the lookup already held the exact fix), and set the pass/fail check. The second is that
the whole charge then closed against that task: the fix was made to meet the check, the
result was recorded, and the task was linked to the pull request and closed — a
complete record from the first command to the last.
01
Open with one command.
One sara begin created the task, recalled the prior fix, and set the check — folded into a single call, before the build was even read.
02
Close against the task.
The check — “the build goes green” — was met with real evidence, the note was saved, and the task was linked to the pull request and closed. Nothing was left implicit.
The one stretch left in silence is the mechanical fix itself — changing versions and rebuilding. That is fine: it is bracketed by a task that says what it was for and a check that proves it worked.
* Every time, duration and exit code here comes from sara’s usage log for one real run on 2026‑09‑10. The dashed steps in the grey stretches are reconstructed from the record of shell commands, because those are the steps the log could not see.
→ Another run
A new capability, founded — step by step.
The first run mended something broken. This one builds something that was never
there: a request to add a new domain event and an endpoint to close a case. There is
no fix to look up — and yet the opening move is identical. Before a single new
file exists, the agent runs one command, sara begin, and the
whole charge hangs on the task it creates. Every time and duration below is read from
the same run’s log.
What changes is what the memory returns. Here recall does not hand back a fix — it hands back the pattern to imitate: how this codebase already adds an event-sourced change. And “done” is written as three pass/fail checks before any code is typed, so the build has a target from its first line.
-
12:01:26
I It starts with one command
There is nothing to fix and nothing yet to read. The first act is still to open the task — new ground gets an anchor before it gets a line of code.
-
12:01:26
sara beginopens the taskrecalled the patternOne command opens task #48 and, folded inside it, looks up the saved notes. It does not return a fix — there is none — but it surfaces how this codebase already makes a change like this: as an event. The template to follow exists before the agent has written anything.
-
12:01:38
II Lay the ladder
Before any building, the agent writes down the ordered phases of the rite — recall, research, declare the checks, plan, build, witness — so the work has rungs to climb.
-
12:01:38
sara check×10 stepsTen ordered steps are laid down in one burst — the shape of the whole run, written before the first one is worked. The task now knows not just what “done” is, but the path to it.
-
12:02:03
III Recall the pattern, then read the code
Deepen the lookup, bind what it finds onto the task, then open the real files it points at to confirm the shape.
-
12:02:03
sara recall×2 queriesTwo targeted lookups — how a domain event mutates the aggregate, and how a command, handler and endpoint are wired — each answered in milliseconds from the saved notes.
-
12:02:18
sara annotatekind: finding×3Bind the recalled prior art onto the task: the event-sourced mutation pattern, where backoffice endpoints live and how they are authorised, and that the tests assert real domain state, not just an HTTP code. The pattern now travels with the task.
-
read Open the closest existing template.
Read the existing “update a case” event, command, handler and controller — the nearest thing already in the codebase — to copy their exact shape rather than invent one.
-
12:03:46
sara annotatekind: decisionkind: riskCommit to one road: a new event plus a command, handler and endpoint that mirror the update path — everything flows through the event, no bespoke status write. The one risk — the acceptance tests need a database container — is written down, not left to surprise.
-
12:04:11
IV Declare “done” before building
Three pass/fail checks, each with a command that proves it, written while the code is still empty. This is the target the build will be measured against.
-
12:04:11
sara checkkind: acceptance×3The event exists and sets each terminal status; the endpoint closes a case and the whole solution builds clean; the handler emits and dispatches the event. Each is written with a runnable check, so none can be waved through.
-
12:04:19
V Build, smallest whole first
One slice per check, the smallest complete piece first — the event — then the command that raises it, then the endpoint that calls it. Each slice is proved before the next begins.
-
12:05:20
sara step_doneslice 1 — the eventAdd the new case-closed event and its unit test: constructing it with a non-terminal status is rejected, and each terminal status sets the aggregate correctly. Nine tests pass, none fail.
-
12:05:58
sara step_doneslice 2 — the commandAdd the command and its handler, mirroring the update path: load the case, raise the event, dispatch it. Three handler tests pass, none fail.
-
12:07:50
sara step_doneslice 3 — the endpointAdd the endpoint that closes a case by its id, its request body and an acceptance test, with the same authorisation and error handling as its template. The whole solution builds in release with zero warnings and zero errors.
-
12:10:43
VI Witness — prove every check
One command runs all three checks’ own proofs at once. Only then are they marked met, each with its evidence.
-
12:10:43
sara validateall 3 checksRun the verify command behind every acceptance check in one go — the event tests, the handler tests and the clean release build. They pass together, so “done” is proven, not asserted.
-
12:10:59
sara step_donekind: acceptance×3Tick each of the three checks now that its proof has run, carrying the passing tests and the clean build as evidence. The new capability stands, and every claim about it is backed by a command that passed.
01
Recall returns a pattern, not just a fix.
On a mend, the memory hands back the exact change. On new ground it hands back the shape the codebase already uses — here, how an event-sourced change is wired — so the new work copies a proven template instead of inventing one.
02
The checks come before the code.
Three pass/fail checks were written while the files were still empty, then built to, slice by slice, and proven together at the end with one sara validate. The target existed before the first line did.
* Every time, duration and exit code here comes from the record of one real run on 2026‑09‑14. The dashed steps are the file reads and writes the log could not see, reconstructed from the record of the session.