Skip to content

分诊席读数成本三修:收班简报索引化(硬字符预算+自报判据)、互斥最小尾页读法、长线程状态读外包规则 —— pm-dispatch 治理面文本 #10108

Closed

Description

@os-warren

维护者拍板立卡(2026-08-20,与分诊席、skills 席三方讨论后「立卡」)。出处:分诊席自查 —— 座位贴 311 条评论的末页互斥读数每轮被迫读整篇 3–5k token 收班简报,且简报越写越长是复利型成本;长线程卡(#9751、#8714、#9834)全文重读中状态提取类占大头。

范围 —— .claude/skills/pm-dispatch/** 分诊席 runbook/references,三段约定

① 收班简报索引化(最大杠杆):

② 互斥最小尾页读法(零成本程序性):互斥读数只需两个时间戳(最近收班简报、最近开轮标记)。先 issue_read get 拿评论总数,小 perPage(~15)算末页页码只取尾部;尾页不含两个读数再回翻一页。写进 runbook 一句话。

③ 长线程状态读外包规则:线程 > ~15 条的状态提取(找最新转换评论、抽 Restart-when:、确认 claim/report 在不在)一律派低档只读子代理(sonnet 即可)返回结构化摘录;尾部优先。边界原样成文:裁决级阅读(契约复审、放行判定、代裁)不可外包 —— 省这部分是拿放行质量换 token,禁止。

边界(不做)

四维分析

  • 项目长远合理性:简报的叙事内容在卡上本就有权威拷贝,索引化消除第二份拷贝,符合 one-board 原则;预算自报让约定可巡检。
  • 实际业务拉动:分诊每轮互斥读数、接管压缩、维护者翻阅三处成本同步降;每篇 3–5k → 1k 以内,复利方向反转。
  • 防 AI 犯错:「裁决不可外包」边界成文,防后任把外包线滑到放行质量上;首行机器判据逐字锁定,防互斥守卫失灵。
  • 创业阶段不扩散:纯约定文本改动,无新机制;第③条复用既有子代理模式(本轮 18 张 hold 卡重验已实践,17 万 token 账单可控)。

治理面(.claude/**)→ fable 档、draft PR、review request os-zhuang、维护者合并。热文件:分诊席 lane/runbook 文件(当前无在飞占用;PR #10105 若未合并且同文件,串行其后)。

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Aug 20, 2026
  2. os-warren commented on Aug 20, 2026

    @os-warren
    CollaboratorAuthor

    Claim(skills 座,session ae0d8bd1-5667-5f58-8ff8-fa22ec154325,branch claude/issue-10108-triage-debrief-index)。治理面(.claude/**)→ fable 档、draft PR、review request os-zhuang、维护者合并。热文件:分诊席 lane/runbook 文件 —— PR #10105 同在飞但只动 SKILL.md 主文一行(682/682 顶格),本卡优先落 references/runbook 不动主文,无单写者路径冲突;若实现中必须动 SKILL.md,先查 #10105 是否已合,行预算以等量去重支付。派发注记在卡正文(范围三段 + 边界四条)。


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 20, 2026
  4. self-assigned this
    on Aug 20, 2026
  5. os-warren commented on Aug 20, 2026

    @os-warren
    CollaboratorAuthor

    os-dev-report

    {
      "issue": 10108,
      "status": "done",
      "branch": "claude/issue-10108-triage-debrief-index",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/10118",
      "premise_still_valid": true,
      "summary": "Added one section 「分诊席读数成本三则(维护者 2026-08-20)」 to .claude/skills/pm-dispatch/references/dispatch-runbook.md, grouped with the other triage-seat sections, carrying all three mandated conventions: (1) debrief indexing — fixed four-part template (byte-stable 「分诊轮收尾」 first-line machine predicate for the mutex guard, index table of card | one-line verdict, health metrics and handoff list reusing the SKILL.md round-report definitions), details point to per-card audit comments instead of being restated, hard budget ≤3000 chars self-reported at close with two consecutive over-budget debriefs = patrol-visible drift; (2) minimal tail-page mutex read — two timestamps only, issue_read get for comment count, last page via small perPage (~15), tail-only with one-page backtrack; (3) long-thread status-read outsourcing to a low-tier read-only sonnet subagent returning structured excerpts, tail-first, with the card's verbatim boundary 裁决级阅读(契约复审、放行判定、代裁)不可外包. The two-layer durable fix is cross-referenced in prose with no issue-ID citations (id-lint). Placement note: no triage lane file exists — references/lanes/ holds the six domain lanes only, and triage 细则 already live in dispatch-runbook.md, so it landed there; SKILL.md and all six lane files (读锚 first bullets included) are untouched, and there is no file overlap with the unmerged SKILL.md-only PR 10105. dispatch-runbook.md sat at 223/223, so the ratchet CEILINGS row was raised to the landed count 244 in scripts/pm/check-skill-line-ratchet.mjs with the card's maintainer mandate quoted verbatim in the PR body per the gate's documented raise path (see open_questions).",
      "tests": "Union derived by node scripts/pm/dispatch-gates.mjs (no args, real diff): '2 path(s) vs merge base 1800ffac2', 8 families matched, exit 0. All gates run at final head b8847cba8, exit codes captured via redirect-then-capture before any pipe. Verdict lines: check:pm-skill-ratchet '✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/dispatch-runbook.md is 244 lines (ceiling 244; headroom 0).' (exit 0) plus script self-test '✓ check-skill-line-ratchet self-test: 19 cases pass.' after the CEILINGS edit; check:pm-skill-id-lint '✓ check-skill-id-lint: 15 file(s) clean (pattern /#[0-9]{3,}/g).' (exit 0); check:pm-governed-merges '✓ check-governed-merges --self-test: 81 assertions' (exit 0); check:pm-governed-prose '✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others.' (exit 0; prompt-named, run although the path derivation did not place it); check:skill-frame-sync '✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files' (exit 0); check:doc-authoring '✓ doc authoring guard: 379 files clean — no bare metadata literals.' (exit 0); check:cross-package-test-inputs 'OK: 12 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.' (exit 0, covers both derived spellings of the same script); check:doc-formula-expressions '✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 404 files / 1414 TS blocks judged clean by @objectstack/formula.' (exit 0, after building the lint dependency closure). NUL/control-byte scan on both edited files: no match.",
      "reverse_verification": "Directions predicted in writing before running, both observed as predicted, both restored byte-identical. (1) Ratchet ablation: one injected extra line, predicted red naming the file at 245 vs ceiling 244 — observed '✗ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/dispatch-runbook.md is 245 lines; the ratchet ceiling is 244.' exit 1; restore verified by git diff --exit-code = 0 against committed head. (2) id-lint positive control: bare #9999 injected into the new section, predicted red naming the file — observed '✗ check-skill-id-lint: .claude/skills/pm-dispatch/references/dispatch-runbook.md: 1 issue-ID citation(s)' at line 80, exit 1; restore verified by empty git status --porcelain, re-run green '✓ check-skill-id-lint: 15 file(s) clean' exit 0. No ablation needed a build — both gates read source text directly, so no dist rebuild applies.",
      "labels_read_back": ["documentation", "size/s", "skip-changeset"],
      "open_questions": [
        {
          "question": "dispatch-runbook.md was at headroom 0 (223/223); the 21-line section required either a ceiling raise or a new references file. I raised 223→244 quoting the card's maintainer mandate in the PR body (the gate's documented raise path). Acceptable, or prefer a separate new references file with its own CEILINGS row?",
          "options": ["A: keep the raise — the card names the 分诊席 runbook, sibling triage 细则 live there, and a 15-line standalone file adds an indirection hop for the exact reader whose read cost the card is cutting", "B: move the section to a new references/triage-readings.md with its own ceiling row at landed count (no raise), plus a one-line pointer in the runbook (net raise of 1)"],
          "recommendation": "A, because discoverability and cohesion with the existing triage sections serve the card's read-cost goal better, and the raise carries the ruling quote the ratchet requires; B is a mechanical rework if the reviewer prefers ratchet orthodoxy."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code


    Generated by Claude Code

  6. os-warren commented on Aug 20, 2026

    @os-warren
    CollaboratorAuthor

    PM 验收:ACCEPT(PR #10118 @ b8847cb)· 开放问题裁 A

    亲取 diff 复核(两文件,+25/−1):三段约定全部落地且逐条对表 —— ① 简报四段模板,首行机器判据「分诊轮收尾」标注逐字不动(互斥守卫 grep 它)、细节禁止复述、硬预算 ≤3000 字符 + 自报字符数 + 连续两轮超限即漂移;② 尾页互斥读法两时间戳 + perPage~15 + 回翻一页 + ⛔ 不读整线程;③ 长线程状态外包 sonnet + 尾部优先,边界原文一字不差:「裁决级阅读(契约复审、放行判定、代裁)不可外包 —— 省这部分是拿放行质量换 token,禁止」。边界四条守住:SKILL.md 未动(#10105 的 1 行余量未被抢)、六道 lane 文件与读锚首条未动、两层耐久修法只散文交叉引用无卡号(id-lint 干净)、库存切片未混入。反验两腿(ratchet 245 红、id-lint 植入 #9999 红)方向命中,恢复字节同一。

    开放问题裁定:A(保留 223→244 抬升,不另立文件)。理由:分诊细则的同族条文(发现分诊轮细则/座位贴活性巡查/紧急卡直接分诊)都在 runbook,新开 15 行文件等于给「正要削读数成本的那个读者」多加一跳;runbook 已过一次性压缩,再砍 21 行会把无处安放的他席规则挤掉,不是等量去重而是净损。抬升走的是 gate 文档化路径(维护者裁定原文已引在 PR 正文),CEILINGS 行带 provenance 注释,落地计数 headroom 0 与其余行同惯例。⛔ 不返工。

    终态:治理面(.claude/**)→ PR 保持 draft,os-zhuang review request 在位,等维护者合并;⛔ 未转 ready、⛔ 未进队列(队列当前被 #10112 实质关闭,详见该卡)。


    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

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions