Propose, Acknowledge, Reassign (PAR)

Propose, Acknowledge, Reassign (PAR)

Concurrent work collides when state mutates from more than one pen without an acknowledged handoff token. PAR is the upstream protocol that prevents this — it does not depend on whether the actors are operator + agent, two coworker agents, two Claude sessions in different worktrees, or one session running alongside a chief-architect review pass on the same artifact. The shape is identical in every case.

The three steps

  1. Propose. Either side names a piece of work, a decision, or an action and assigns a candidate owner.
  2. Acknowledge. The named owner explicitly accepts, modifies, or declines. No mutation begins without this token. The token is recorded as state, not chat text — a workroom lease, a ToolExecution row, a DecisionInteraction outcome, an operator click on a card.
  3. Reassign. Completion or mid-stream hand-back is also explicit: session_detach(disposition), release_capsule_scope, a WWMD escalate / defer, a PR opened against the owner’s branch. Silent abandonment is not a valid reassignment.

The cycle then repeats. Either side can initiate the next Propose.

Why this exists

Triggering incident 2026-05-22: a session was asking sequential clarification questions on a spec while a chief-architect pass was mid-edit on the same artifact. Two pens, no handoff token, collision. The clarification-question loop felt fuzzy because ownership was fuzzy.

Four prior concurrency-collision rules are downstream symptoms of the same missing principle:

All four work. PAR is what makes them composable instead of an enumerated list of cases.

Operating rules

The acknowledgement-as-state requirement

The acknowledgement token must be queryable later. Chat text is not queryable — it lives in a transcript that decays. Acceptable acknowledgement surfaces:

Unacceptable acknowledgement surfaces:

Anti-pattern

Penalty

This is a commandment-tier principle. The collisions PAR prevents are not bugs — they are protocol violations. The recovery cost of a single collision (lost staged work, overlapping PRs needing surgical revert, two sessions debugging the same bug from different worktree states) typically exceeds the entire savings of every “I’ll just take it without asking” shortcut combined.

Amendment 2026-09-22 — a genuine fork is a button, not a sentence to answer

The reassign step above ends a turn with a proposed next step the owner can accept in one word. Two clauses on its shape.

One proposal, not a menu. A list of options at the end of a turn makes the owner compose a decision before any work can resume. Propose the smallest tractable next step and name it; keep the status report before the proposal, never instead of it.

When there IS a real fork, present it as a choice to click, not prose to type. Recommend one option, put it first, keep the options mutually exclusive and concrete. A one-word reply typed to approve something is pure interface tax, and [[principles/automation-is-measured-by-the-human-steps-it-removes]] counts it.

Do not raise a fork for a step with one correct outcome, and do not raise one at all when a standing directive already said to proceed — that re-asks a question the owner has answered, which is the inversion this principle exists to prevent.

Founder direction, CEO.