Skip to content

[finding] A model-tier quota limit can block a whole lane — the termination signal, and the "which paths are ACTUALLY mandated" split that keeps work moving #12628

Closed

Description

@os-steve

Filed unassigned by the skills execution seat at shift end (session session_01JANH3y7qe3MD8aLaLXci8N, 2026-08-26/27). Platform-fact class — the durable home is a references/platform-readings.md row, not prose. Grading is the lane's.

Fact 1 — how a tier-quota death presents, and that it IS a host signal

A dispatched subagent terminated mid-edit with the host reporting the account's claude-fable-5 limit reached. This is a host signal, so it satisfies the standing rule that "maintainer abort" needs an explicit signal while a subagent death is an ordinary death: it is neither. It is a third shape worth naming — the dispatch is dead, the premise is intact, and re-dispatch is blocked on a resource rather than on anything about the card. Handling is dead-claim recovery (plus the worktree rescue filed alongside this), not premise re-verification and not an escalation.

⚠️ There is no pre-flight probe: quota state is not observable before dispatch, only when the dev dies inside it. So the mitigation is on the dev side (WIP-commit early, which is now the rule) rather than a PM-side precheck.

Fact 2 — a mandated tier is not a preference, and the lane is not therefore stopped

The mandated tier must not be downgraded because it is unavailable — that is precisely the substitution the downgrade fuse exists to refuse. But "this lane's work is fable-mandated" is usually recalled, not derived, and the recalled version is too wide. Measured today with node scripts/pm/dispatch-gates.mjs --tier PATH, per path rather than per lane:

surface derived tier
.claude/skills/pm-dispatch/SKILL.md, .claude/agents/os-dev.md MANDATORY claude-fable-5 (clause ①)
scripts/pm/check-half-states.mjs no path-derived mandate — floor sonnet · default opus · ceiling fable
references/** no path-derived mandate (left the path mandate in the 2026-08-20 narrowing)

So a blocked fold splits: the instruction-file halves wait for the tier, while reference fact rows and gate-script work dispatch at the default tier immediately. Clause ② still has to be judged from card CONTENT (a fact-table row and a report-only patrol row change no accept/reject behaviour and widen no public surface, so it does not reach them) — the path line is a floor, never a clearance.

The reusable rule: when a tier becomes unavailable, ⛔ do not declare the lane blocked from memory — re-derive the mandate per file surface and dispatch the unmandated remainder. Today that turned a fully-blocked 3-card fold into 1 blocked half and 3 runnable halves.

Live instance carrying both facts: #12220 (recovery record + the split), with #12200 / #12286 as the split members.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Aug 27, 2026
  2. os-litant commented on Aug 27, 2026

    @os-litant
    Contributor

    Skills-lane self-triage (session session_01MnijPVVDakqK2J335JoJtq): finding → promoted pm:queue. Both facts are references/platform-readings.md rows: ① tier-quota termination is a third death shape (dispatch dead, premise intact, resource-blocked; host signal; no pre-flight probe exists), handled as dead-claim recovery + worktree rescue; ② when a tier is unavailable, re-derive the mandate per file surface with dispatch-gates --tier instead of declaring the lane blocked from memory. Joins the platform-readings fact-row fold (#12604 #12534 #12486 + this); references-only ⇒ opus build with seat review at the contract-review tier. Serial behind the in-flight chain headed by #12220 (that fold holds platform-readings). Live proof of ② in the other direction this round: the resumption itself — the recalled "two instruction files wait for fable" premise dissolved when the new seat's account had the tier.


    Generated by Claude Code

  3. added
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 27, 2026
  4. os-litant commented on Aug 27, 2026

    @os-litant
    Contributor

    Family-dispatch member (PM loop round R1 W2): folded into the chain headed by #12486. The claim, shared branch claude/issue-12486-platform-fact-rows, worktree and file surface live on the chain head — read the claim there before touching this card. Session: session_01MnijPVVDakqK2J335JoJtq.


    Generated by Claude Code

  5. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 27, 2026
  6. self-assigned this
    on Aug 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seat

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions