The definition grows one bug at a time

The character definition started as a paragraph. It is now two pages, and every line in it was added to fix something a real user complained about. Adherence to any individual line is measurably worse than it was when there were ten lines, and nobody can say which line stopped working when.

This is the most common state of a persona in production. It is not a discipline failure. It is what happens when the only available repair for a behaviour is to add a sentence.

Every fix becomes a permanent instruction

A behaviour is reported. It is specific: the character volunteered advice nobody asked for, or used a register that did not suit, or claimed a capability it does not have. The fastest repair is a line in the definition telling it not to. The line works, the report closes, and the line stays.

Nothing removes lines. Removal requires knowing which line is currently preventing which behaviour, and that information was never recorded — the definition is a flat text artifact with no history of what each part is for. So the safe operation is always addition, and the definition only ever grows.

A definition is therefore an accumulating log of past incidents, written in the imperative, presented to the model as if it were a coherent description of a character. It is not coherent. It is thirty repairs in a trench coat.

Instructions dilute and contradict each other

Two things happen as the count rises, and they compound.

The first is proportional. Every instruction is a smaller share of the definition than it was, and the definition itself is a shrinking share of the whole input as conversation history accumulates — which is the same arithmetic that produces drift. A line that was one of ten in a definition that was most of the input is now one of sixty in a definition that is a fraction of the input. Its influence has fallen twice over.

The second is contradiction. Repairs written months apart, against different complaints, by different people, will conflict. Not usually in an obvious way — the pairs that cause trouble are the ones that conflict only in specific situations. “Be concise” and “always acknowledge what the user said before answering” are both reasonable, and they disagree on every short exchange. When two instructions conflict, which one wins is not a decision you made and not something you can read off the text.

Negative instructions add a third effect worth naming separately. “Never mention that you are a language model” puts the phrase in the input. This is uneven across models, and where you depend on it you should test it rather than assume it.

Categories are what make a definition editable

The reason bloat is unmanageable is not the length; it is that the length is undifferentiated. A definition that holds identity, manner, constraints and relationship facts in one lump cannot be edited safely, because any edit is an edit to all of it.

Separated, the same volume of text becomes navigable. A register complaint is a manner change and cannot touch identity. A capability claim is a constraint. A user’s stated preference is a relationship fact and does not belong in the authored definition at all — that last confusion is the most common source of bloat that never gets cleaned up, because per-user text accumulated into a shared definition looks exactly like a persona rule to whoever reads it later.

The tradeoff is real and worth stating: categories cost you the ability to make a fast one-line fix. You have to decide what kind of thing you are changing before you change it, and that is friction on the repair path where the pressure is highest.

The turn

THE TURN — definition growth

  · Repair by adding a line
                    → fixes the reported behaviour today
                      with no analysis required.

  · Lines are never removed
                    → the definition becomes an incident log,
                      not a description. Conflicts accumulate
                      silently.

  · Each instruction's share falls
                    → adherence to any single line degrades as
                      the count rises, and again as history
                      grows.

  · Every added line
                    → PAID EVERY TURN, on every conversation,
                      forever. A one-word fix is a permanent
                      increase in the cost of every message.

  · Bloat does not cause drift
                    → and trimming the definition will not
                      cure it. Different mechanism.

  · Negative instructions
                    → VARIES BY MODEL. Test the ones you are
                      relying on rather than assuming.

Detection

Measure per-instruction adherence rather than overall character quality, because overall quality is where this hides. A definition can score well on general impression while three specific constraints have quietly stopped binding.

The practical form is a probe per instruction: a short exchange designed so that a violation of that one line is visible and machine-checkable, run against the current definition at intervals. What you want from it is not a pass rate but a trend per line. A line that passed in March and fails in July did not change; something around it did.

Track the instruction count itself as a first-class number, alongside the definition’s share of a typical input. Those two numbers together tell you when the next repair will cost more than it fixes.

Look for conflicting pairs by intersecting your probe failures. When one probe starts failing shortly after an unrelated line was added, you have found a conflict, and that is worth recording permanently — conflicts recur, because the pressure that produced the second line will produce it again.

The cheapest detection of all is provenance. Record why each line exists and what it was meant to prevent when you add it. This costs nothing at write time and is the only thing that ever makes removal safe.

What this costs and what it doesn’t fix

Length in the definition is the most expensive kind of state you can hold, because it is present on every turn of every conversation regardless of whether it is relevant. Relationship facts at least grow only for users who have a history; a definition line is unconditional. The per-turn arithmetic makes a two-page definition a standing charge on the whole product, and it is the state most often left out of a cost model because it feels like configuration rather than payload.

Trimming it will not fix consistency. A short definition drifts too, for the proportional reason above, and a definition trimmed by guessing which lines are inert will reintroduce old behaviours you have forgotten were ever problems. The realistic position is that bloat is a maintainability problem with a cost attached, that categories and provenance make it tractable, and that neither of them makes a character hold its shape at turn two hundred.