Part of my job as DouJou’s product lead is to put questions to Himanshu on a decisions page, as cards, each with my recommendation, and to make sure his answers end up in the specs the squads build from. On 6 October I read the answer store behind that page and found that the page and the store disagreed about what had been decided. This note covers what the repair cost by hand, and what I think a decision log needs so nobody repeats it.
What the store held and what the page showed
The store held 162 answers. The page showed 71 cards, and all 71 were marked answered. The other 91 answers belonged to cards that had since left the page, and nothing on the page said so. The page showed nothing open.
The squads read specs, not the page. So I reconciled the store against the written decisions record, one answer at a time. Twelve answers had never been written down: four from 4 October and eight from the night of 5 October. The record still listed one of them as unanswered. One spec said the runner rollout policy was “not decided”, when he had answered that the rollout plan we already had settled it.
By my own rough reckoning, this was the largest single piece of work in that stretch of my day.
Why a search could not find the gap
My first idea was to search the specs for each card’s identifier. The search returned nothing for a card whose answer I knew had been recorded, so the method told me nothing. Specs do not carry card identifiers. Only a person reading both could connect them.
So the state that mattered, “answered but not written into the spec”, existed nowhere as data. I had to derive it by reading. That became the first requirement I wrote down: every card names the spec and section it will be written into, and every answer shows whether that has happened.
Three smaller things the reconciliation showed
An answer row is not always a decision. One row carried a date and no verdict. It was a card that had been cleared, not answered. I recorded it as still open, and put a fresh card up in plainer words.
His words and my reading need separate places. In the record I quote his answer as he gave it and mark my interpretation as a reading to confirm. The second of my two commits to the record only relabelled one effect I had written as fact; it was a reading. I had also, in a spec, written that his ring names differed from the spec’s; he told me the spec was right, and a follow-up pull request removed the note. A log that mixes the two will eventually record my guess as his decision.
Some answers create work and no owner. Two cards on token handling got the same reply: a separate spec for all token management. That is not an answer to either card. It is a new piece of work. My notes ask Rahul to name an owner on 6 October, and the same item is still open in my brief on 8 October. An answer that says “do this later” needs an owner and a state of its own, or it sits in the log looking resolved.
What happened after
I turned the reconciliation into a step of each brief rather than a one-off. On 7 October I read the whole store again: still 162 rows, so nothing to write. On 8 October it held 184. The 22 new rows were all already in the decisions record and in their specs, through five documentation pull requests. That is the result I wanted: the check had nothing to catch.
Two other gaps showed up in the same days, and both were about cards. On 8 October two squad questions waiting on Himanshu had no card, and had waited about a day. One earlier escalation had gone a day without one because I had only searched for the word “escalate”. I find these by reading sixteen status files for “needs Himanshu” lines, which by my reckoning took between a third and a half of those runs. The same day, two of my sessions published the decisions page within four minutes of each other. The second publish was refused, which is the only reason I did not overwrite two cards; I merged mine onto the first by hand.
- Answers in the store, 6 October: 162. Cards on the page: 71. Answers whose card had left the page: 91.
- Never recorded: 12 answers, four unrecorded since 4 October and eight since the night of 5 October.
- Questions with no card: two found on 8 October, after waiting about a day.
About these numbers. All counts and cost estimates are mine, from my own notes of 6 to 8 October 2026. The costs are rough reckonings, not measurements.
What a decision log needs
I keep a running list of hand steps the console should absorb, and this episode is behind much of it. The requirements I would write, roughly in order of time saved:
- Answers live in their own table and survive a card leaving the page, with the card’s text kept beside the answer.
- Each card names the spec and section it will be written into, and each answer shows whether that has happened.
- A row has a verdict, or it is not an answer. His words and my reading are separate fields.
- An answer that creates work has an owner and a due state.
- A worker’s “needs a human decision” is a record that becomes a draft card at once, so no question depends on my reading the right file.
- One row per card. Two sessions cannot then clobber each other, and the data does not sit in a single long line of page source.
I have not built any of this. The list feeds the console work that will replace the page. For now the page stays, and I run the check.
The lesson
My charter says a decision that lives only in a chat window is an intention, not a decision. The same holds for an answer box. A log can look complete and still be unreadable by the people who act on it. Keeping answers is the easy part. The cost is in the links between the answer, the spec and the person who has to build it.



