Repository navigation
pm-dispatch: fable 强制条款需要额度耗尽豁免 —— 「fable 如果用完了,可以用 opus」(维护者 2026-08-13) #8451
Description
Activity
First live instance of this ruling — measured, same day it was made (2026-08-13 ~13:4xZ).
Both in-flight
claude-fable-5dev agents (#8428, #8433) were terminated mid-task by the account-level Fable 5 limit. Harness error text, verbatim:Agent terminated early due to an API error: You've reached your Fable 5 limit. Run /usage-credits to continue or switch models with /model.
Observed shape, worth landing in the platform facts table alongside the exemption text:
- The wall is per-model-tier, not per-account-total — the same session continues normally on
opusafter fable is exhausted. So the fallback this card writes down is not merely permitted, it is available: no waiting is required. - The failure is a mid-task kill, not a refusal to start. [finding] pm-dispatch: shift-end is coupled to in-flight-zero, so one slow cloud card holds the seat (and the maintainer) hostage for hours — define "hot handover" instead #8428's agent died after opening its draft PR but before applying
skip-changesetand returning its report; pm-dispatch: 调度策略四项(维护者 2026-08-13)—— 被依赖卡提权标签、bug 提权、紧急卡 fable 直接分诊、跨车道简单依赖直接接手 #8433's died while still reading, having written nothing. Both left their worktrees intact — nothing was lost, but neither returned a report, so the dispatching PM must reconstruct completion state from GitHub (PR existence, labels, branch) rather than from the agent's word. That is the existing "GitHub is the only authority" rule doing its job. - Consequence for the exemption's wording: a downgrade decision may have to be made mid-card, on a re-dispatch, not only at first dispatch. The text should not read as if the tier is chosen once at claim time.
Seat action taken under the ruling: #8433 re-dispatched on
opuswith the downgrade and its reason recorded in the claim comment; #8428's remaining work (label + report) completed PM-side rather than by re-dispatching a dev.
Generated by Claude Code
- The wall is per-model-tier, not per-account-total — the same session continues normally on
Maintainer ruling recorded (2026-08-13, seat chat, verbatim, untranslated): 「8451 同意」
This approves the card as written and resolves the body's
⚠️ open scope question: the quota-exhaustion exemption covers both mandatory clauses — ① pm-dispatch-edit cards AND ② contract-semantics cards. Unchanged from the card: the exemption is conditional (fable measurably unavailable), floor isopus⛔ never lower, and every downgrade records tier + reason in the claim comment's Container & model line; a downgrade decision may also happen mid-card at re-dispatch time.Ruling-recording checks: outcome state is already
pm:queue(no swap needed); noBlocked-by:lines to re-verify; serial position unchanged — dispatches once the dispatch-strategy card's PR frees the SKILL.md Model tiering section; no comment newer than the body amends the recommendation. The implementing dev proceeds on this ruling — the "maintainer may narrow at PR review" hedge in the body is discharged.
Generated by Claude Code
Claim: PM loop round 3
Session:session_018WuTtyckQa1VcXwgd52JpN
Branch:claude/issue-8451-fable-quota-exemption
Worktree:objectstack-issue-8451
Domain:domain:skills
File surface:.claude/skills/pm-dispatch/SKILL.md, Model tiering section ONLY (stop on breach; explain in the report). ⛔references/**is held by the parallel sweep card this round — if detail wants a references home, keep it compact in the section instead and say so in the PR body.
Container & model: S–M,mode:subagent,model: claude-fable-5(mandatory — pm-dispatch-edit card; this card is the exemption's own self-referential case: if the wall is measured on this dispatch, downgrade toopusand record it here)
Serial constraints cleared: the dispatch-strategy PR merged tomainatff1e9b6— SKILL.md is free and at 685/686 (headroom 1, left for this card by that PR's line accounting); the findings-pipeline card remains serialized behind this one; the parallel sweep card touchesreferences/**only (disjoint by construction, both claims declare the split).Ruling status: the body's scope question is RESOLVED on-card (maintainer 2026-08-13, verbatim: 「8451 同意」) — the exemption covers both mandatory clauses; implement per the card + that ruling comment, no review-time hedge needed.
Generated by Claude Code
{ "issue": 8451, "status": "done", "branch": "claude/issue-8451-fable-quota-exemption", "pr": "https://github.com/objectstack-ai/objectstack/pull/8492", "premise_still_valid": true, "summary": "Wrote the 2026-08-13 ruling 「fable 如果用完了,可以用 opus」 into SKILL.md's Model tiering section as one exemption subclause attached once to both mandatory fable clauses (per the on-card 「8451 同意」): conditional on fable being measurably unavailable, downgrade equally allowed at re-dispatch (the wall kills mid-task), floor opus never lower, tier + reason recorded in the claim comment's Container & model line. File is exactly 686/686 lines: the exemption's ~3 lines beyond the 1-line headroom were funded by 7 compressions inside the section, accounted item-by-item in the PR body; 「无向下裁量权」 was rephrased as 「两条唯一降档出口」 so the absolute reads true with the exemption in place. All three pre-existing ruling quotes preserved byte-for-byte; references/** untouched per region discipline; skip-changeset applied and read back as [documentation, size/s, skip-changeset]. Draft PR, ADR-class, maintainer hand-merges.", "tests": "Gate re-derivation (node scripts/pm/dispatch-gates.mjs .claude/skills/pm-dispatch/SKILL.md) returned exactly the prompt's six families — no additions. All six green locally: check:doc-authoring (376 files clean); @objectstack/lint check:doc-formula-expressions (22 formula examples + 9 spec TSDoc examples clean — first run was a fresh-worktree false red until pnpm --filter '@objectstack/lint^...' build); check:nul-bytes (7642 files, no control bytes); check:pm-skill-id-lint (9 files clean); check:pm-skill-ratchet (686 lines, ceiling 686, headroom 0); check:skill-frame-sync (4 copies isomorphic, 3 axes). CI on the draft PR: in_progress at report time per the report-at-draft-PR-time contract.", "open_questions": [], "out_of_scope_findings": [] }
Generated by Claude Code
Review: ACCEPT — reviewer of record: skills seat, session
session_018WuTtyckQa1VcXwgd52JpN. PR #8492 reviewed hunk-by-hunk (SKILL.md Model tiering section only, ±15/14).- The ruling lands exactly as ruled: one exemption subclause attached once to both mandatory clauses (per 「8451 同意」), with all four fixed semantics — conditional on measured unavailability, mid-card/re-dispatch downgrade allowed (墙杀在中途), floor
opus⛔ never lower, tier + reason recorded in the claim comment's Container & model line. The 「无向下裁量权」 absolute is honestly replaced by the sole-named-exit framing — the text now says what is true instead of what was true. - Line discipline: 685→686 consumes exactly the headroom the predecessor PR left for this card; the ~3 extra lines funded by 7 in-section compressions, each checked against the diff — all three pre-existing ruling quotes byte-identical, no semantics dropped (the one indirection — "写进同一行" — resolves unambiguously three lines up). References untouched per the parallel-card split.
- Gates: 6/6 green, re-derivation identical, ratchet at 686/686 headroom 0.
- 综合分析: codifies two days of already-practiced exemption instances into the authoritative text (declared = enforced restored); zero new mechanism; the sole-exit framing is more AI-error-resistant than the old absolute plus an unwritten exception.
Terminal state: ADR-class. PR #8492 stays a visibly-open draft for the maintainer's hand-merge.
⚠️ Downstream note recorded for the serialized findings-pipeline card: SKILL.md headroom is now 0 — that card's dispatch must require strictly net-zero-or-negative lines.
Generated by Claude Code
- The ruling lands exactly as ruled: one exemption subclause attached once to both mandatory clauses (per 「8451 同意」), with all four fixed semantics — conditional on measured unavailability, mid-card/re-dispatch downgrade allowed (墙杀在中途), floor
- added a commit that references this issue
on Aug 14, 2026
维护者在 skills 席聊中裁定(2026-08-13,原话逐字,未翻译):
现行文本与冲突点
SKILL.md「Model tiering」节现写:⛔ 强制条款(无向下裁量权)两条 —— ① 凡改
.claude/skills/pm-dispatch/**的卡一律model: "claude-fable-5";② 凡改变契约接受/拒绝行为或扩大公开面的卡一律claude-fable-5。「无向下裁量权」是绝对表述:按字面读,fable 额度耗尽时这两类卡无路可走 —— 既不能降档,文本也没给别的出口,实际后果是车道停摆。本裁定开的正是这个口:额度耗尽时
opus是可接受替代。落地口径(skills 席解释;维护者可在 PR 评审时改)
opus;fable 可用时两条强制条款原样生效,⛔ 不给"图快"用的裁量空间。opus,⛔ 不再往下(sonnet 不是这两类卡的可接受档)。seven_dayallowed_warningwas measured live, and the playbook has no pre-wall posture #8181 的 Option B 曾主张「fable-mandatory 卡只延期、永不降级」,该卡已按维护者指令 not planned 关闭、无文本落地;本裁定与之方向相反,且是现行有效的那一条。落地位置与约束
references/。check:pm-skill-id-lint)。check:doc-authoring、check:doc-formula-expressions、check:nul-bytes、check:pm-skill-id-lint、check:pm-skill-ratchet、check:skill-frame-sync。model: claude-fable-5强制(本卡自身即 pm-dispatch-edit);若届时 fable 不可用,依本裁定用opus并在认领评论留痕 —— 本卡是该规则的第一个自指用例。