Skip to content

handoff_gate + teammate_completion_gate should learn teachback_pending/awaiting_approval state #486

@michael-wojcik

Description

@michael-wojcik

Context

PR #477 (issue #401) cycle-10 introduced blocking teachback semantics: teammates MUST halt after submitting their teachback and wait for the lead's teachback_approved metadata write before beginning any implementation work.

Problem

During the correctly-halted state (task in_progress, produced list empty, teammate waiting for approval), the following hooks fire and nag:

  • handoff_gate.py — complains about missing handoff content
  • teammate_completion_gate.py — complains about incomplete completion

Both hooks are correct under the pre-cycle-10 model (empty produced = something went wrong). Under cycle-10 semantics, empty produced while awaiting_approval is the correct halted state, not a failure.

Observed

During PR #477 cycle-10 dogfooding (2026-04-20), cycle9-fixer correctly halted after submitting teachback and waiting for lead metadata approval. Both hooks fired repeatedly. Teammate correctly honored SACROSANCT Completion Integrity (refused to fabricate completion) and preserved the honest halted state. But the hook noise was significant during the approval wait.

Proposal

Both hooks should short-circuit (no nagging) when the task is in a teachback-awaiting-approval state. Detection signals:

  1. Task has metadata.teachback_submit written by the teammate
  2. Task does NOT have metadata.teachback_approved from the lead yet
  3. Task in_progress, produced may be empty

When all three hold, the teammate is correctly halted per cycle-10's work-start-gate semantics. Hooks should recognize this as a valid wait-state and emit no reminder.

Non-goals

  • Do NOT suppress nagging after teachback_approved is written — after approval, normal hook semantics resume.
  • Do NOT suppress nagging on teammates without teachback_submit metadata — those are just slow or confused teammates, still need nagging.

Background

Priority: LOW. Can wait until after Phase 2 flip (issue #481). But without it, cycle-10's blocking semantics and the existing hook nag interact noisily.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions