Skip to main content
The Operator Log
Operator2026-04-19· 9 min read

A field guide to ALLOWED_TRANSITIONS.

The eight lifecycle states, the moves between them, and the reason invalid transitions become review rows instead of mutations.

Maya Chen

Guest · Linen House

Catalog chaos isn't a data problem, it's a transitions problem. Anyone can list the states a SKU can be in. The hard part is governing the moves between them — and that's exactly what ALLOWED_TRANSITIONS does. After running Linen House on it for a year, here's the field guide I wish I'd had.

The eight states

  • draft — created, not yet live.
  • active — live and sellable.
  • throttled — live but velocity-capped pending confidence.
  • promoted — actively boosted in merchandising.
  • watch — flagged for a metric breach, still live.
  • winding_down — being phased out, no new promotion.
  • archived — removed from sale, retained for history.
  • blocked — held by policy or a compliance flag.

The states are unremarkable. The power is in which arrows between them are legal, and what happens when an agent wants to draw an arrow that isn't.

Invalid transitions become rows, not errors

If the agent proposes archived → promoted, that's not a valid move. In a naive system it either silently does it or throws an exception nobody reads. In Magistry it becomes a review row: the agent's intent, the illegal transition it wanted, and a request for an operator to either open the transition or decline it.

decision_log — illegal transition, capturedjson
{
  "product_id": "sku_4471",
  "from_state": "archived",
  "to_state": "promoted",
  "action": "PROMOTE",
  "decision": "blocked_invalid_transition",
  "note": "archived SKUs cannot be promoted directly; route via active",
  "needs": "operator_review"
}

That row is gold. It tells you the agent saw something promotable in an archived SKU — maybe the supplier came back, maybe demand returned — and it surfaced that as a question instead of forcing it as a mutation. You learn where your lifecycle rules are too strict, and you tune them with evidence instead of guesswork.

The first month, the review rows taught me my own catalog rules were wrong in four places. The agent wasn't misbehaving — it was reporting reality.

Maya Chen, Linen House

How to run it

Start tight. Open transitions only after a review row proves you need one. A permissive state machine that lets anything move anywhere is just chaos with extra steps. A strict one that turns every exception into a logged question is a catalog that gets cleaner every week — and explains itself while it does.

// reading this?

Reading this? You'd like the product.

If the writing resonates, the product probably will too. Same bar, same prose, same refusal to ship something you can't reverse.

Dry-run by default · Append-only logs · One-click rollback