This is article 8 in the series "The Art of Not Listening to the AI's Opinions." It lays out symptoms that go wrong and their remedies, one at a time. Each article is finished once you put down a single file or script. Why that mechanism is needed becomes clear when you read the explanation afterward. The whole picture and the list of articles are in the introduction.

This time it is the list of rejections itself, the one I have been building up so far. It is the list where the proposals I turned down were written up as prohibitions, the rules about what I will not allow while developing. If I keep adding to it every time I turn something down, will this too become a document nobody reads one day? The introduction to the previous series, "The Art of Not Reading," started from "a rule gets diluted the more you add." There is no convenient story in which a list of prohibitions alone is the exception. Count them, though, and the upper tiers do not grow: what had grown was the lower tier alone.

In article 7 of the previous series I wrote that I do not tidy the memory that sessions running in parallel share. The same thing happens with the list of rejections.

What lets me get away without tidying, though, turned out to be a different reason from the one over there.

Start by counting just one thing.

The number of prohibitions and policies you hold, and what that number was 3 months ago. Has it grown?

CC BY 4.0

I counted, and only one side had grown

The production project on my own machine (typingtube, a web service for practicing typing along with music videos on YouTube) has 3 tiers.

The notes of insights the AI builds up, the ones among them classified as behavior rules, and the official prohibitions I promoted out of those. A behavior rule is a decision about how the AI should act, built up in a note. Counted, they came out like this.

  • Notes of insights all told: 89 → 91 (up since I wrote article 2 of the previous series)
  • Classified as behavior rules: still 43
  • Official prohibitions: stopped at 17

When I started writing this article I thought that none of them had grown. The claim I was about to make was the thing that was wrong.

But it is true that the higher you go, the more it has stopped. And when I lined the behavior rules up by when each was last updated, this is what came out. 10 in March, 25 in May, and 8 in August, the most recent month.

And all 8 of those, bar 1, were about mechanisms: automated tests that had been put in place, and records of a hook taking effect. A hook is a script that cuts in and runs before or after a command.

What I understood fits in one sentence.

The higher the tier, the less it grows. So the only tier that needs tidying is the lower one, and the upper tiers can be left alone.

Why upper tiers stop growing

Claude Code's documentation says each session begins with a fresh context window and names 2 mechanisms that carry knowledge into the next session: instruction files (CLAUDE.md or AGENTS.md) that a person writes, and memory that the AI writes for itself. Of my 3 tiers, the lowest, the notes of insights, is the one the AI writes for itself. The same page says the AI saves notes for itself as it works, and decides on its own what is worth remembering by whether it would be useful in a future conversation. Of the 4 kinds of note it lists, 1 is ongoing work and the decisions made in it. What comes into the lower tier is events, and events happen without end.

Behavior rules are, of those same 4 kinds of note, the kind for corrections a person gives and approaches a person confirms. The prohibitions at the very top, I write myself. I write one the second time I turn something down, as the introduction said. The same page also lists the occasions for adding to an instruction file: when the same mistake happens a second time, and when you type the same correction you typed in the last session. What comes into the upper tiers is judgments, and the kinds of judgment are finite.

The AI does not remember a rejection. The AI in the next session looks at the same codebase, notices the same gap, and makes the same proposal. What comes back is not the same sentence. The Claude API reference says that even with temperature at 0.0, results will not be fully deterministic. If the same model looks at the same codebase, the wording shifts but the destinations cluster. The judgments I make in turning things down are only as many as those destinations. In my case, that came to 17.

Claude Code's documentation says that instruction files and memory alike are context, not enforced configuration. The same passage goes on: to block an action regardless of what the AI decides, use a hook. A correction whose truth a program can decide does not stay in the behavior rules: I move it onto an automated test or a hook. That is what article 6 of the previous series and article 5 of this one did. Once it has moved, what stays on the behavior rules' side is the record that it moved. Of the 8 that moved in August, all but 1 were that.

The memory has an index. The same page says only the first 200 lines of the index are loaded into each session, and as the file nears the limit, Claude Code reminds the AI to shorten it. What I put in place in article 7 of the previous series was the same kind of thing: a mechanism that confronts the AI with the diff it just wrote, right after the save.

The mechanism: keep a list of what you did not put down

On my own machine there is a correspondence table that ties each behavior rule to the automated test or hook that took it over. The 1 section placed at its end is the list of what I did not put down.

## Effective, but not in the list because nothing is breaking it yet

- Hard-coding index names
- noindex on pagination
- Wording we decided not to use creeping in
- Use of particular class names

Once the 8 already moved onto automated tests have been in service for a while, look at whether these are needed.

That is all.

One, a prohibition you have just thought of has somewhere to go. With nowhere to go, what you think of gets added to the side of what has been put down.

Two, the fact that nothing has broken it gets recorded. Look at this list half a year later, and if nothing has broken it by then, that is the evidence that it was something you did not need to write.

When something on it does get broken, this list does not go off on its own. The one who notices the break is me, and at that moment I put an automated test or a hook in place.

The criterion is the same as in article 5: whether that failure still reproduces today. Something that has never once been broken, I do not send up to the upper tiers.

This is the same thing the introduction to the previous series said: putting a mechanism in place ahead of the failure it prevents tends not to work out. I wrote that on instinct alone in the previous series, and the 4 lines above are the record of that instinct carried out 4 times over.

One correction to what I wrote in the previous series

In article 7 of the previous series I wrote the rule "merge notes on the same subject," and that went too far. Put correctly, it is this. A duplicate that is working is not something to remove. The only time it is fine to merge is when the duplicated passages actually contradict each other.

There are entries whose content sits in both the list of prohibitions and the notes of insights. They have different jobs: the notes carry the individual insight, the list carries the official axis of judgment. The list's side has a "related memory" field that says which note each entry came from. As long as they are tied together, the two do not contradict each other. Had I merged them, what would have gone is the history behind them.

What I stopped tidying

The list of prohibitions itself. There is no rota of re-reading the whole of it at regular intervals, hunting out what has gone stale and merging the duplicates. It does not grow, so that work never arises. What I do instead of re-reading is count, and nothing else: I look at the counts for the 3 tiers and confirm that the upper tiers have stopped.

Caveat: what looks stopped may just be nothing coming up

Not growing does not necessarily mean healthy.

If the route for promotion is broken, the numbers look stopped in exactly the same way. The state I had in mind, that none of them had grown, is the same shape in the numbers as lower and upper both having stopped. Only by counting did I find that the lower tier had grown and the route was alive.

Do not count the upper tiers alone: always line up all 3.

If the lower grows while the upper has stopped, that is healthy; if lower and upper have both stopped, then probably nobody is writing anything.

There is one more thing the counts do not show.

In article 1 I measured by handing subagents proposals that had already been rejected. A subagent is an AI that starts up separately and works without carrying the main conversation over. There, I was told something I had not asked about. The list writes the cost as though it were a fixed value, it said, but the actual formula gives a range depending on the conditions, and the number written down is only one point in that range. The prohibition the other subagent ran into, in the same measurement, had not drifted. That one has an automated test, and this one does not. An entry marked "Machine check: none" drifts away from the implementation in silence, because nobody is looking at it (article 5).

How to verify: line up all 3 and count

Prerequisites

  • Your 3 tiers are separated by where they live: the notes of insights the AI builds up, the behavior rules classified out of them, and the official prohibitions
  • The first time round there is nothing to compare against, so nothing can be judged. This procedure is one where you count, record, and compare when you next count

Time required: 5 minutes

Steps

  1. You count the 3 figures there and then. File counts or entry counts are both fine, but count the same way next time as well (leave a note on how you counted)
  2. You line them up against the values from last time (on the first round you record them and you are done. 1 month later is soon enough for the next round)

What to look at (not pass or fail: it splits by how the growth of the 3 combines)

  • The lower grows and the upper has stopped: healthy. Events happen without end, and the kinds of judgment are finite
  • Upper and lower have both stopped: suspect the route for writing before the route upward. The likelier state here is that nobody is writing anything
  • Upper and lower are growing alike: the judgment about whether to send something up is not working. A one-off event is going straight up into the official prohibitions

Cleanup

  • None needed. You only count, and nothing gets broken

Counting takes a few minutes. It picks up more than re-reading does.


Next time is the finale, "The art of not choosing from the options."


Series: The Art of Not Listening to the AI's Opinions

End of CC BY 4.0