Work shapes and the decision gate

Backlog item: BI-C8C4031C Epic: EP-WORK-CONVERGENCE Status: Current

A Workroom is not a generic container. It is convened with a shape, and that shape is what bounds the actions available inside it. Within those bounds, the kernel decides whether a coworker may proceed unattended. Two levels, in that order:

The room’s work shape bounds what is permitted at all. principle_decide gates autonomy within that envelope.

Neither level substitutes for the other. A shape that permits an action does not make it autonomous; a high-confidence kernel recommendation does not widen the envelope the shape set. This page states the shape vocabulary, where the decision gate sits, and what the shape does next once a gate clears.

Vocabulary for the three layers (record → projection → view) is fixed in Workroom vocabulary boundary; this page starts where that one deliberately stops.

The flow

flowchart TD
    convene[Room convened with a shape] --> envelope[Action envelope<br/>what this shape permits at all]
    envelope --> action[A consequential action is proposed]

    action --> gate{Decision gate}
    gate -->|WSID: craft| wsid[evaluate_profession_decision<br/>profession corpus]
    gate -->|WWMD: platform| wwmd[principle_decide<br/>kernel principles]
    gate -->|WWWD: business| wwwd[evaluate_org_business_decision<br/>org stance]

    wsid --> verdict[Confidence-scored recommendation]
    wwmd --> verdict
    wwwd --> verdict

    verdict -->|high confidence| mode[Autonomy mode decides the turn]
    verdict -->|low confidence or<br/>commandment conflict| escalate[Escalate to a human]

    mode --> act[Act, or propose for approval]
    escalate --> act

    act --> receipt[Receipt on the case]
    receipt --> stop{Stop condition met?}
    stop -->|no| action
    stop -->|yes| packet[Outcome packet<br/>cycle closed or carried over]

Shape is four orthogonal choices, not one taxonomy

A common misreading is that “work shape” is a single enum. It is four independent axes, each owned by a different part of the substrate. A room picks one value on each.

Axis Values Owner
Activity kind — what the work is delivery, support, improvement, governance, launch-readiness, craft-judgment, lifecycle, remediation WORK_CAPSULE_SCOPE_ACTIVITY_KINDS in apps/web/lib/work-capsules.ts
Mode — how long it lives finite (one bounded decision or action), standing (ongoing activity) WorkroomMode in apps/web/lib/work-management/room-types.ts
Participant roles — who is in it, as what accountable, coordinator, contributor, specialist, approver, reviewer, observer WorkroomParticipantRole, same file
Collaboration shape — how a gate inside it routes specialist-alignment, approval-sign-off, outward-review, change-consequential, escalation, craft-stewardship WORKROOM_SHAPE_KEYS in apps/web/lib/work-management/room-shapes.ts

The first three are live code. The fourth is now a registry with a write path ⟦runtime: BI-8C54B216, 2026-08-23⟧: WORKROOM_SHAPE_KEYS in apps/web/lib/work-management/room-shapes.ts is the enum, and a room is convened with a shape by passing workroomShape to create_workroom or adopt_worktree. It persists as a scopeClaims entry — no migration — and is read back by readWorkroomShapeClaim.

A room that never declared one gets a derived shape from what it already is (derive-workroom-shape.ts): a standing WSID room is craft stewardship by definition, launch-readiness is an approval sign-off, governance and remediation are consequential changes. The derivation deliberately returns null for delivery, support, improvement, lifecycle, a bare wwmd/wwwd scope, or no signal — several shapes could fit and the room has not said which, so it is reported unshaped rather than guessed.

Measured on the reference install at the time of writing: shape coverage went from 0% to 9.2% (30 of 327 rooms), because the scope signals the derivation reads exist on only ~13% of rooms. The remainder closes as rooms are convened with a shape, not by backfill. So a claim that a room “has” a collaboration shape is now queryable — but check whether it was declared or derived, and expect most older rooms to have neither.

Finite and standing rooms are explained for end users in Work Rooms.

The gate: which scope decides

Three decision surfaces, three corpora. They are siblings, not a hierarchy, and each answers a different question. Routing a question to the wrong one is the failure mode the consult-scopes-before-asking commandment exists to prevent.

Scope Tool Question it answers Corpus
WSID (profession) evaluate_profession_decision How should I, in my craft, do this? the coworker’s profession corpus — recorded techniques and standards
WWMD (platform) principle_decide What should we do about the platform itself? kernel principles
WWWD (organization) evaluate_org_business_decision Does this fit the company — mission, market, product, GTM? the org’s authored stances

WSID is the specialist’s gate. Its handler is apps/web/lib/mcp/packs/profession-decision-pack.ts. Three properties matter for how it behaves as a gate:

That last property is the one to design around: an empty or thin profession corpus does not produce a bad recommendation, it produces an escalation. Corpus coverage is therefore an autonomy input, not a nice-to-have.

The composition rule from the standards family still governs who may run the check: GAID identity → JSI qualification → TAK intersection → GAID receipt. A qualification is not permission to act; the gate layers on top of it.

What the gate does to the turn

A cleared gate does not mean “act”. It means the autonomy envelope now decides whether this coworker takes the turn or hands it to a human. That projection lives in apps/web/lib/work-management/autonomy-envelope.ts:

Decision mode What happens
shadow-only the action is recorded, never taken
propose-for-approval a human turn is required
supervised-action acts, with a supervising human in the loop
autonomous-action the sole mode that permits acting without a human turn

The two ladders are now one projection ⟦runtime: BI-13ED1BE1 / BI-06C41FDC, 2026-08-23⟧. The decision mode above and the proactivity actionBoundary (advise · propose · preauthorized) used to decide the same question separately and never meet, so a preauthorized posture could imply autonomy the envelope would deny and vice versa. joinAutonomy (work-management/hitl-join.ts) now returns the stricter of the two — neither ladder may purchase autonomy the other withholds. advise maps to shadow-only, not propose-for-approval: advising is saying what should happen, not putting an action forward to be approved.

Verification is load-bearing. A consequential action at the kernel floor (RiskClass.outbound-or-floor — outward, financial, irreversible, access-control) is denied by name — missing_verification_evidence — unless verification evidence exists on the case. A room’s posture may ADD a verification requirement to work that would not otherwise carry one; nothing can remove the floor’s. Until this landed, verificationDepth was compiled, rendered as a “Deep verification” chip and written to receipts while gating nothing.

The trust level feeding this is already risk-capped before it arrives, and requiresCoworkerEnvelope can demand an approved envelope either always or only when-supervised, per the action descriptor in action-registry.ts. Denials come back as named reasons from policy-envelope.ts — including missing_decision_interaction, missing_coworker_envelope, and stop_condition_tripped — not as a generic refusal.

What is actually enforced today

The seam is apps/web/lib/tak/decision-routing-governance-hook.ts. Read it before assuming coverage, because the honest scope is narrow by design:

The gate was itself kernel-consulted (2026-07-04) and shipped deliberately narrow: the consult recorded a genuine judgment call between enforcing narrowly and auditing in shadow, so it does both — narrow enforcement plus a structured audit signal on every unconsulted consequential decision.

Do not read this seam as “consequential tool use is gated.” Two tools on one surface are gated. The general pre-execution interceptor over all consequential tool calls — with its four check families (alignment, authority and policy, consequence/HITL, and precondition/ordering) — is the target architecture in the governance-gate spec, not the current state.

The shape’s next steps, after the gate

Clearing a gate advances the room; it does not finish it. The shape determines what happens next, and each step leaves a durable record:

  1. Act or propose, per the autonomy mode above.
  2. Receipt. The action lands as a ReceiptEnvelope on the case (receipt-envelope.ts), carrying the acting identity, the policy refs consulted, and a rawRef back to the row it came from. A gate verdict is a DecisionInteraction receipt; a tool call is a tool-execution receipt.
  3. Stop conditions. stop-conditions.ts decides whether the cycle continues. A tripped condition is itself a policy denial reason, so a room cannot quietly run past its own boundary.
  4. Verification, where the shape calls for it — a verification activity on the case, not a claim in prose.
  5. Cycle close or carry-over. A finite room produces its outcome packet (outcome-packet.ts) — decisions, artifacts, actions, receipts, evidence, plus explicitly unresolved work with a disposition. A standing room closes the cycle and carries the remainder forward (cycle-opened, cycle-closed, cycle-carried-over in the activity kinds).

The unresolved-work list is the load-bearing part of an outcome packet: a shape that ends with silent remainders is how work escapes the room. Naming the remainder with a disposition is what keeps the next cycle honest.

Known gaps

Stated plainly so nobody plans against a capability that is not there:

Three gaps listed here previously have closed; they are recorded so a reader returning to this page does not plan against a stale limitation:

Shape now also sets posture ⟦runtime: added 2026-08-22, BI-4F468192⟧. The same four axes feed the room’s posture — how persistently the coworker follows up and how it trades cost against quality against time — through resolveWorkroomPosture (apps/web/lib/work-management/room-posture.ts), layered over the existing proactivity and Golden Triangle engines. WorkroomView.posture carries the result and the reason for every clamp. The load-bearing rule mirrors the two-level rule above: a derivation may TIGHTEN the action boundary and may never widen it, so shape can restrict autonomy but never grant it. Design: Work Posture.