You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The orchestrator's Teachback-Gated Dispatch (persona §11) requires the lead to stamp metadata.variety — the D11 4-rationale shape (total + novelty_rationale / scope_rationale / uncertainty_rationale / risk_rationale) — on every Task B (work) dispatch. This stamp is currently advisory-only: hooks/task_lifecycle_gate.py emits variety_missing_on_dispatch / variety_band_unresolvable as PostToolUse advisories that fire AFTER the teammate is already dispatched and has begun its teachback. Nothing prevents — or strongly catches at the right boundary — the lead omitting the stamp.
During a /PACT:plan-mode consultation, 4 of 4 Task B dispatches went out without a metadata.variety stamp. Consequences observed:
3 of 4 consultants returned variety_acknowledgment.rationale_articulates_this_dispatch = "concern", each noting "no orchestrator per-dimension rationale to judge against."
The lifecycle gate emitted variety_missing_on_dispatch — but only after dispatch, as a soft signal.
Recovery required an orchestrator-side correction: re-stamp all four Task B tasks, then accept the teachbacks. The omission was caught only reactively, via the teammates' concern flags.
This is a recurring foot-gun: the stamp is a manual step buried in the D11 convention, easy to skip, and the only feedback is late and soft.
Why it matters
The Task B metadata.variety stamp drives three downstream determinations:
Concurrent-auditor trigger (total >= 7 → mandatory auditor on CODE).
reasoning_reconstruction band (_resolve_required_band_via_blocks: total >= 11 → required; 7–10 → recommended; <= 6 → skipped).
Workflow route (route_workflow).
An unstamped Task B makes all three unresolvable — _resolve_required_band_via_blocks returns "unresolvable" and fails open. The teammate's reasoning_reconstruction obligation can't be determined at teachback-submit time, so the L1.5 method-level gate degrades silently.
Proposed enforcement (options for the implementer to weigh)
Pre-dispatch boundary enforcement (preferred direction). Add a gate that DENIES (or strongly warns at PreToolUse) when a Task B is wired into a teachback-gated dispatch without a well-formed metadata.variety. Analogous to the teammate-side teachback_gate blocking flip (Phase 2: flip teachback_gate to blocking mode (follow-up to #401) #481).
Strengthen the advisory. Make variety_missing_on_dispatch name the exact missing fields and emit a copy-paste re-stamp recipe, and ensure it surfaces prominently at the dispatch boundary rather than after the teammate has begun.
Persona/skill reinforcement. Add an explicit "stamp metadata.variety on Task B BEFORE spawn" step to the §11 dispatch sequence checklist (currently implied via D11, not a hard ordered step). Composite (doc + write-time advisory) per the LLM-error-mode-defense pin.
Composes with the variety_band_unresolvable advisory already in task_lifecycle_gate.py (_resolve_required_band_via_blocks "unresolvable" path) — that surface is the natural home for a strengthened/blocking variant.
Acceptance criteria (draft)
A lead omitting metadata.variety on a teachback-gated Task B is caught at the dispatch boundary (terminal wiring write or spawn), not after the teammate begins.
Enforcement does NOT misfire at TaskCreate(B) (FIRST-OBSERVABLE-WRITE invariant preserved).
The signal names the missing fields and the fix.
Structural test pins the enforcement boundary + the no-misfire-at-TaskCreate invariant.
Surfaced empirically while re-evaluating #864 (cron-machinery removal) under /PACT:plan-mode.
Context
The orchestrator's Teachback-Gated Dispatch (persona §11) requires the lead to stamp
metadata.variety— the D11 4-rationale shape (total+novelty_rationale/scope_rationale/uncertainty_rationale/risk_rationale) — on every Task B (work) dispatch. This stamp is currently advisory-only:hooks/task_lifecycle_gate.pyemitsvariety_missing_on_dispatch/variety_band_unresolvableas PostToolUse advisories that fire AFTER the teammate is already dispatched and has begun its teachback. Nothing prevents — or strongly catches at the right boundary — the lead omitting the stamp.Empirical anchor (session
pact-c69b1cf9, 2026-05-28)During a
/PACT:plan-modeconsultation, 4 of 4 Task B dispatches went out without ametadata.varietystamp. Consequences observed:variety_acknowledgment.rationale_articulates_this_dispatch = "concern", each noting "no orchestrator per-dimension rationale to judge against."variety_missing_on_dispatch— but only after dispatch, as a soft signal.This is a recurring foot-gun: the stamp is a manual step buried in the D11 convention, easy to skip, and the only feedback is late and soft.
Why it matters
The Task B
metadata.varietystamp drives three downstream determinations:total >= 7→ mandatory auditor on CODE).reasoning_reconstructionband (_resolve_required_band_via_blocks:total >= 11→ required; 7–10 → recommended;<= 6→ skipped).route_workflow).An unstamped Task B makes all three unresolvable —
_resolve_required_band_via_blocksreturns"unresolvable"and fails open. The teammate'sreasoning_reconstructionobligation can't be determined at teachback-submit time, so the L1.5 method-level gate degrades silently.Proposed enforcement (options for the implementer to weigh)
metadata.variety. Analogous to the teammate-side teachback_gate blocking flip (Phase 2: flip teachback_gate to blocking mode (follow-up to #401) #481).39eb6423): enforce at the TERMINAL wiring write — theTaskUpdatethat setsowner+addBlockedBy/addBlockslinking A↔B, or theAgent(...)spawn — NOT at the initialTaskCreate(B), where variety legitimately may not be set yet. Enforcing at first-write would be unsatisfiable-by-construction (the same class as the task_lifecycle_gate teachback_addblocks_missing fires at TaskCreate(A) before Task B exists (unsatisfiable check) #843 misfire).variety_missing_on_dispatchname the exact missing fields and emit a copy-paste re-stamp recipe, and ensure it surfaces prominently at the dispatch boundary rather than after the teammate has begun.metadata.varietyon Task B BEFORE spawn" step to the §11 dispatch sequence checklist (currently implied via D11, not a hard ordered step). Composite (doc + write-time advisory) per the LLM-error-mode-defense pin.Relationship to existing issues
variety_band_unresolvableadvisory already intask_lifecycle_gate.py(_resolve_required_band_via_blocks"unresolvable" path) — that surface is the natural home for a strengthened/blocking variant.Acceptance criteria (draft)
metadata.varietyon a teachback-gated Task B is caught at the dispatch boundary (terminal wiring write or spawn), not after the teammate begins.TaskCreate(B)(FIRST-OBSERVABLE-WRITE invariant preserved).Surfaced empirically while re-evaluating #864 (cron-machinery removal) under
/PACT:plan-mode.