All notes
Agent-native

The LLM proposes; explicit intent decides

In an early human-plus-LLM authoring loop, model inference could overwrite structure the user had already stated. The fix was an authority order: explicit intent outranks inference — the model fills gaps and proposes, but never silently clobbers a fact the user stated directly.

In a new product still in early scaffolding, a pipeline used an LLM to infer typed structure from user input. At first the inference was authoritative, which meant it could overwrite structure the user had already specified explicitly. The design was reversed: when the user supplies an explicit type, that is the truth, and the LLM’s inference is demoted to a suggestion the user accepts or rejects. It can no longer silently overwrite what the user stated directly.

Rank explicit intent above inference

The turn was a single decision: the inference layer became a suggester, not an author. An explicit user-supplied type is authoritative; the model’s guesses arrive as accept/reject proposals. This is the whole lesson, and it generalizes to any loop where a human and a probabilistic model co-author the same artifact. Let the model do what it’s good at — filling gaps, proposing shape where the user gave none — but a probabilistic inference must never clobber a fact stated with intent. The two are not peers, and treating them as peers is the bug.

The deterministic path is the cheaper truth

Once explicit intent is authoritative, most of the output can be built without the model at all. A single deterministic function assembles the result from the explicit elements — zero tokens — and the same function feeds both the live preview and the non-inference build path. That gives one honest guarantee: what the user previewed is exactly what gets confirmed, because both came from the same non-LLM code. The model is reserved for the parts the user genuinely left open.

Reversing this later means re-plumbing every merge point

The authority order — explicit over inferred — is worth deciding early, because it shapes every place the two streams meet. Get it backwards and the inference bleeds in as noise: reassigned ids from a re-derive sneak through as ghost elements unless the merge step explicitly discards anything the user didn’t author. Each of those merge points has to know which side wins. Decide it once, at the schema, and the answer is uniform. Decide it late, and you re-plumb every seam the two streams touch.