Skip to content

pm-dispatch: fable 强制条款需要额度耗尽豁免 —— 「fable 如果用完了,可以用 opus」(维护者 2026-08-13) #8451

Description

@hotlong

维护者在 skills 席聊中裁定(2026-08-13,原话逐字,未翻译):

fable 如果用完了,可以用 opus

现行文本与冲突点

SKILL.md「Model tiering」节现写:⛔ 强制条款(无向下裁量权)两条 —— ① 凡改 .claude/skills/pm-dispatch/** 的卡一律 model: "claude-fable-5";② 凡改变契约接受/拒绝行为或扩大公开面的卡一律 claude-fable-5。

「无向下裁量权」是绝对表述:按字面读,fable 额度耗尽时这两类卡无路可走 —— 既不能降档,文本也没给别的出口,实际后果是车道停摆。本裁定开的正是这个口:额度耗尽时 opus 是可接受替代。

落地口径(skills 席解释;维护者可在 PR 评审时改)

  • 豁免是条件式的,不是新默认:仅当 fable 档实际不可用(额度耗尽/被限流)时才允许落到 opus;fable 可用时两条强制条款原样生效,⛔ 不给"图快"用的裁量空间。
  • 降档必须留痕:认领评论的「Container & model」行写明实际档位与降档理由(哪一档不可用、观测到的信号),使评审能看见这张卡是在降档条件下产出的。
  • 地板是 opus,⛔ 不再往下(sonnet 不是这两类卡的可接受档)。
  • ⚠️ 待维护者确认的范围问题(实施方按此假设推进,评审时一句话即可纠正):裁定原话未区分两条强制条款,本卡按两条都适用落地。若只想覆盖条款 ①(pm-dispatch 自身编辑)而条款 ②(spec 契约语义)仍须硬等 fable,请在 PR 评审时指出 —— 契约面的错误代价最高,这是唯一值得区别对待的理由。
  • 相关但已作废:pm-dispatch starvation playbook is written for the 5-hour wall — a seven_day allowed_warning was measured live, and the playbook has no pre-wall posture #8181 的 Option B 曾主张「fable-mandatory 卡只延期、永不降级」,该卡已按维护者指令 not planned 关闭、无文本落地;本裁定与之方向相反,且是现行有效的那一条。

落地位置与约束

Activity

  1. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor

    First live instance of this ruling — measured, same day it was made (2026-08-13 ~13:4xZ).

    Both in-flight claude-fable-5 dev 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:

    Seat action taken under the ruling: #8433 re-dispatched on opus with 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

  2. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor

    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 is opus ⛔ 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); no Blocked-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

  3. self-assigned this
    on Aug 13, 2026
  4. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor

    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 to opus and record it here)
    Serial constraints cleared: the dispatch-strategy PR merged to main at ff1e9b6 — 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 touches references/** 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

  5. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor
    {
      "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

  6. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions