You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
content: add the reference-context and audit-loop learnings
Genuine learnings from the author, added to both launch articles:
- Vague initial prompts worked because the reference context was
strong: FinvestLens inherited its specification from GnuCash's
source, manual, file format and reports; HelloNotes was anchored on
Obsidian's linking model and Bear's native feel
- Both apps were built MVP-first, then enhanced in iterative passes
over a working core — automatic categorisation of imported
transactions in FinvestLens, direct opening of cloud files in
HelloNotes
- FinvestLens was validated extensively on the author's personal
GnuCash file, matching GnuCash cent for cent
- The biggest learning: never trust the agent's completion reports.
Recheck accuracy and completeness in a loop — the characteristic gap
is functionality implemented but never wired into the UI — and point
the same habit at the product as usability testing: HIG review,
persona, user journeys, use cases
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: src/content/blog/2026-07-27-hellonotes-1-0.md
+37-1Lines changed: 37 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -159,6 +159,14 @@ Before any code existed, I asked Claude to generate three documents based on my
159
159
-**`architecture.md`** — the layer model, and the rules (`@Observable` only, no CoreData, the folder is the source of truth).
160
160
-**`implementation-plan.md`** — a milestone sequence, M0 through M13.
161
161
162
+
That intent could afford to be vague because the anchors were strong.
163
+
HelloNotes sits in a category that existing products have already mapped —
164
+
Obsidian for the linking model, Bear for what native ought to feel like — and
165
+
the PRD was drafted against those reference points. The four-way gap in "The
166
+
bet" above _is_ the specification: name what to keep and what to refuse from
167
+
each anchor, and the requirements largely write themselves. A vague prompt over
168
+
strong references beats a precise prompt over none.
169
+
162
170
The plan is the part that made this work. Each milestone wasn't a wish, it was a table — task, target file, and an **acceptance criterion**:
163
171
164
172
| # | Task | File(s) | Acceptance |
@@ -170,6 +178,13 @@ And each milestone closed with a _done-when_ sentence in plain English — for M
170
178
171
179
So my prompts were mostly **"do Milestone 3"**. The plan already said what done looked like, which file it lived in, and how I'd know.
172
180
181
+
The milestones ran to a working MVP, not the whole product. What came after was
182
+
iterative: enhancement passes layered onto a working core, each anchored the
183
+
same way. Directly opening cloud files — the coordinated-I/O work above — came
184
+
as one of those passes. Extending something that already runs is an easier
185
+
conversation than specifying everything up front, because the app itself
186
+
becomes part of the reference context.
187
+
173
188
Why this works is worth being exact about, because the book states it as a caution: _"A model is a next-token predictor, not a compiler: it does not execute a specification, it produces the most plausible continuation of everything in its context."_ A spec doesn't help by being run — nothing runs it. It helps by putting the definition of _right_ into that context before the work starts, so that afterwards there is something other than plausibility to judge the output against. Commissioning that plan, and stating what "done" meant in it, was the highest-leverage work of the fortnight. Everything after it was "do Milestone 3".
174
189
175
190
(That plan has since been folded into [`implemented.md`](https://github.com/hellotham/hellonotes/blob/main/docs/implemented.md), which is the honest engineering log — milestones, fixes, and a lot of what _didn't_ work. It's still in git history if you want the original.)
@@ -218,6 +233,27 @@ The technique that worked is almost embarrassingly simple: `POST` the test Markd
218
233
219
234
The same instinct is why `implemented.md` records what **didn't** work. When the Release build broke (below), three plausible fixes failed before the real one landed. Those three are written down. That's the highest-value paragraph in the whole document, because it's the one that stops a future session from cheerfully retrying them.
220
235
236
+
## Never believe "done"
237
+
238
+
Across this project and [FinvestLens](/blog/2026-07-27-finvestlens-1-0/), the
239
+
biggest lesson on my side wasn't prompting technique. It was this: never take
240
+
the agent's word that something is finished. Ask it to recheck the
241
+
implementation for accuracy and completeness — in a loop, again and again —
242
+
because agents are notorious for reporting an implementation complete while
243
+
gaps remain, and notorious in one particular way: implementing functionality
244
+
and never wiring it into the UI. The feature exists, the tests are green, and
245
+
no user could ever reach it.
246
+
247
+
The recheck loop is what makes that survivable. A claim of completeness is just
248
+
more generated text; an audit is a search with a target, and the same agent
249
+
whose report you cannot trust will find its own gaps reliably once you send it
250
+
looking.
251
+
252
+
The same instruction, aimed at the product rather than the plan, became
253
+
usability testing: review against Apple's Human Interface Guidelines, create a
254
+
persona, write their user journeys and use cases, and validate the app by
255
+
walking them end to end.
256
+
221
257
---
222
258
223
259
## From the other side of the prompt
@@ -270,7 +306,7 @@ HelloNotes was built following [Chapter 2, _Personal Productivity_](https://chri
270
306
271
307
What I actually typed, for fifteen days, was close to: _"implement the next milestone"_ and _"do a full code review of the implemented codebase against the plan"_ — run through an agentic loop. The specification said what done meant; the standing instructions said what was never acceptable; the loop did the rest. Every bug in this article was found by the agent reviewing its own work against something external, not by me looking over its shoulder.
272
308
273
-
That is the thesis, and this is the evidence for it: state intent and expectations well enough, give the harness something real to check against, and the work — including catching its own mistakes — follows.
309
+
That is the thesis, and this is the evidence for it: state intent and expectations well enough, give the harness something real to check against, keep the audit loop running — and the work, including catching its own mistakes, follows. Trust the loop, not the report.
0 commit comments