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. 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

  2. self-assigned this
    on Aug 20, 2026
  3. 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

  4. 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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions