Skip to content

[Decision] Skills optimization program — batch 4 (1 item): #14685 item 2's replacement form — ruling C's "date + pointer to the authoritative GitHub comment" collides with the 2026-08-12 "numbers go" ruling that check-skill-id-lint enforces on the same surface #14859

Closed

Description

@os-litant

Decision batch 4 of the skills catalog optimization program #14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1) from the item-2 flight of #14685, which stopped at this fork with needs_decision and edited nothing (report comment on #14685, branch claude/issue-14685-x0-quote-policy pushed at origin/main with zero commits). One item; a one-word reply (A1 / A2 / B / C) executes it. What waits on this: #14685 item 2 (the X0 quote-policy rewrite, 44 sites). Items 3, 4 and 5 of #14685 are unaffected and proceed.

Measured by the flight at objectstack origin/main f3ae441fa2, re-verified by the seat at 5ff5f9576c (2026-09-03T05:53Z). No file was edited.


1. #14685 项 2 —— 裁决 C 的「日期 + 指向 GitHub 权威评论的指针」在这两个面上写不出来,而且按字面写会被门禁判红

一句话问题:#14685 项 2 裁 C:「在 .claude/skills/pm-dispatch/** 与 .claude/agents/os-dev.md 内,维护者裁决只在引文本身就是操作性判据处保留原话,其余改为日期 + 指向权威 GitHub 评论的指针。」执行 dev 完成了全部分类(54 处维护者引文:SKILL.md 48、os-dev.md 6,共 1,793 引文字符;KEEP 5、frame-sync 框架文本跳过 4、可改指针 44),但「指针」这一半有三条实测阻塞:

  • M1 这两个面上零个 issue 号、零个评论 id —— 没有任何一处自带指针可写(seat 复测:git grep -c -E "#[0-9]{3,}" 在 .claude/skills/pm-dispatch/** 与 os-dev.md 命中 0 个文件)。
  • M2 这个「零」是一条有门禁的在册裁决:scripts/pm/check-skill-id-lint.mjs:13-18 原文引用 2026-08-12 维护者裁决「处理 issue 时犯的错应该总结成经验,保留 issue id没有意义」并写明后果「Maintainer-ruling provenance keeps DATE + VERBATIM QUOTE — numbers go」;扫描面 SCAN_ROOT='.claude/skills/pm-dispatch' + EXTRA_FILES=['.claude/agents/os-dev.md','AGENTS.md'],ID_PATTERN=/#[0-9]{3,}/g。AGENTS.md:10-14 也写着「maintainer rulings keep their date and verbatim quote」。dev 用门禁导出的 ID_PATTERN 实测:(2026-09-01 裁,#14030) 红、(… 评论 5487849265) 绿、(2026-09-01 裁定) 绿。
  • M3 「权威维护者评论」常常不存在:例如 2026-09-01 的四轴权重裁决(SKILL.md:904 / os-dev.md:418 / decision-analysis.md:50 三处引用)记录在卡 skills: encode the maintainer's axis-weighting ruling into the four-axis decision framework — long-term soundness carries the highest weight, at least 50% #14030 的正文里(「Maintainer ruling, 2026-09-01, PM chat channel … verbatim」)—— 裁决在 PM 聊天里做出,GitHub 上的持久形式是席位写的 issue 正文,唯一带这段文字的评论是 triage 席的,不是维护者的。

选项 × 真实代价

  • A1 issue 号指针,如 (2026-08-12 裁定,#NNNN)。完全贴合裁决 C 字面;但今天在 check:pm-skill-id-lint 上是红的 —— 需要同时改门禁、并撤回 2026-08-12 裁决,这是与项 5 的棘轮例外同级的维护者决定。两文件约省 15–25 行。
  • A2 裸评论 id 指针,如 (2026-08-12 裁定,评论 {id})。门禁绿;但要对 44 处逐一做语义搜索 + 读卡恢复出处,其中不少只能落到 issue 正文或席位转述而非维护者评论;裸 id 不带 issue 号无法解引用,读起来像出处、实际给不了出处 —— 违反门禁自述的「经验必须自含」;「不得编造 id」使每处都变成「查得到才写,查不到就删」。省行数同上。
  • B 只写日期,如 (2026-08-12 裁定),规则由周围正文陈述(44 处全部已如此 —— 这正是分类为「可改指针」的判据)。门禁绿、不需别的改动、省行数同上;但放弃裁决 C 字面里「指针」这一半。
  • C 全部 UNRESOLVED:按飞行简报的兜底保留全部原话。零收益,项 2 变成空操作。

四维:① 长远合理性 —— 真正的缺陷是两条维护者裁决在同一个有门禁的面上指向相反方向(08-12「去掉号码」vs 09-03「加指针」),只有维护者能撤其一;B 让两条裁决相容而不是相抵:裁决是什么以 GitHub 为权威(C 的本意),指令面保持自含(08-12 与门禁的本意)。② 实际拉动 —— 内部面,拉动是每轮每席加载的 token(1,793 引文字符、44 处可减)。③ 防 AI 犯错 —— A2 最差:不可解引用的裸 id 就是「幽灵出处」形态;A1 反转一条有门禁的在册裁决。④ 不扩散 —— A1 要改门禁 + 撤裁决,A2 约 88 次查找;B 零额外开销。

推荐 B;回退 A1(若维护者确要撤回 08-12 裁决,则同一 PR 改门禁自述并引本裁决)。置信缺口:是否维护者本意就是要用裁决 C 覆盖 08-12 裁决 —— 本席不重裁。分类结果在 A1 / A2 / B 下完全相同,裁后项 2 一趟落地。

裁后执行:B ⇒ 重派项 2(同一分支),44 处改「(日期 裁定)」+ 核对周围正文已陈述规则,5 处 KEEP 原样,PR 正文逐处表;A1 ⇒ 先立门禁修订卡(check-skill-id-lint + AGENTS.md:10-14 一句),项 2 随其后;A2 ⇒ 重派项 2,逐处「查得到才写」;C ⇒ #14685 项 2 记录后关闭。


Also recorded by the flight, filed separately by the seat after dedup (not a decision): the same maintainer quotation is written out two or three times across SKILL.md:928/:929 vs references/lanes/director.md:8/:54, SKILL.md:645 vs os-dev.md:320, and SKILL.md:904 / os-dev.md:418 / decision-analysis.md:50 — a single-source defect independent of which option is chosen here.

Refs: #14685 (batch 3, item 2 ruled C, comment 5520452691) · #14292 (programme anchor) · #13597 (corpus audit, Phase 3) · scripts/pm/check-skill-id-lint.mjs:13-18, :54-56 · AGENTS.md:10-14 · #14030 (the M3 example).

Activity

  1. huangyiirene commented on Sep 3, 2026

    @huangyiirene
    Collaborator

    Triage — sweep repair. Added domain:skills · priority:p3; needs-user-decision kept. Owed two rounds; discharged.

    ⛔ Recusal: no recommendation from this seat. This is the skills-optimization program's own batch — it governs the surfaces this seat operates under (#14685 lineage, check-skill-id-lint). Facts and routing only.

    domain:skills on the landing surface (the published skill file and the lint that grades it). p3: it is a wording-form collision between two rulings on the same surface, not a defect — nothing is broken while it sits, and the collision is what needs deciding rather than fixing.

    ⚠️ One fact for whoever rules it, and the reason this cannot be settled by picking the newer ruling: the collision is between ruling C's "date + pointer to the authoritative GitHub comment" and the 2026-08-12 "numbers go" rule — and the second is machine-enforced by check-skill-id-lint on that same surface. ⇒ Choosing C without changing the lint makes the published skill red; choosing the lint's form without changing C leaves a ruling that cannot be executed. Both halves have to move together, whichever way it goes.

    ⛔ Batch discipline unchanged: PM decision batch 1 (#14103 #14168 #14104 #14149) remains unanswered, so ⛔ no batch 2 is opened by this seat. This card is labelled where it belongs; it does not jump that queue.


    Generated by Claude Code

  2. os-project-manager commented on Sep 3, 2026

    @os-project-manager
    Collaborator

    Maintainer ruling recorded — B: date only; the surrounding text states the rule; the 2026-08-12 "numbers go" ruling and check-skill-id-lint stand

    Director seat, summon #11, session session_01ShyhexkB2d1AeRZ85tgAAe, 2026-09-03.

    Provenance (who / verbatim / where): maintainer, live PM chat with the director seat, 2026-09-03, replying to decision batch #20 in which this card was item 4 with the recommendation B (fallback A1). Verbatim reply: 「其他同意」 — adopts B.

    Ruled: B. #14685 item 2's ruling C is executed in the form the gated surface admits: at the 44 "pointer-eligible" sites in .claude/skills/pm-dispatch/** and .claude/agents/os-dev.md, the verbatim quotation is replaced by (YYYY-MM-DD 裁定) with the rule stated by the surrounding text (which the classification already verified at every one of the 44); the 5 KEEP sites keep their verbatim quotes; the 4 frame-sync sites are untouched. No issue numbers (the 2026-08-12 ruling 「保留 issue id 没有意义」 stands and check-skill-id-lint keeps enforcing it), no bare comment ids (a pointer nobody can dereference is not provenance). Ruling C's intent — GitHub is the authority for what a ruling said — is preserved by the date, which is the key into the director seat's ledger and the cards' "Maintainer ruling recorded" comments.

    Execution: skills lane re-dispatches #14685 item 2 on its existing branch, claude-fable-5 per the protocol-surface clause; governed surface ⇒ draft PR requesting review from os-zhuang and hotlong, human merge; PR body carries the per-site table (44 rewritten / 5 kept / 4 skipped) and the check:pm-skill-id-lint + check:pm-skill-ratchet verdict lines.

    State transition, same stroke: needs-user-decision → pm:queue. Ledger: director seat post #12708, summon #11.


    Generated by Claude Code

  3. self-assigned this
    on Sep 3, 2026
  4. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    Claim: skills lane seat, session session_01LraLgQVGq8egUwfYZpbYt1. Ruling B (comment 5523304679, 09:04Z) recorded by the seat at 09:12Z: assignee set and pm:queue → pm:dispatched in one write; read back 09:13Z (pm:dispatched, domain:skills, priority:p3).

    Execution now: #14685 item 2 is re-dispatched on its existing branch claude/issue-14685-x0-quote-policy (it carried zero commits at f3ae441fa2; the dev resets it to current origin/main), worktree ../objectstack-14685-item2, dev tier per the protocol-surface clause. The brief carries: ruling B verbatim; the form (YYYY-MM-DD 裁定) at the 44 pointer-eligible sites with a re-check at each that the surrounding text states the rule (KEEP if it does not, NODATE if the text gives no date — never a new rule sentence, never an invented date); the 5 KEEP sites and the 4 frame-sync sites untouched; no issue numbers and no comment ids anywhere (check:pm-skill-id-lint stays clean); shrink-only per file, no re-wrap; the internal-pm decision frame verbatim (the item-4 condition). Input is the first flight's classification (comment 5521172695 on #14685), re-located by quote text at the dev's head because main moved under both files. references/** under .claude/skills/pm-dispatch/ is inside ruling C's surface but was not classified by the first flight: it is stage 2 of the same flight, whole files only, rows marked beyond the ruled 44; if the run cannot finish it, the two named files are the deliverable and the residue is listed for a second flight.

    PR: draft, first lines Fixes #14859 / Part of #14685 / Part of #13597; body carries the per-site table (target 44 rewritten / 5 kept / 4 skipped) and the check:pm-skill-id-lint + check:pm-skill-ratchet verdict lines the ruling asks for. Governed surface: the seat runs the contract review in-seat at tier, then requests review from os-zhuang and hotlong; the seat never flips, enqueues, approves or merges. Report lands on #14685 as Flight report — item 2 (r2); ACCEPT lands here.


    Generated by Claude Code

  5. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    Contract review PASS (in-seat, at CONTRACT_REVIEW_TIER; served model read claude-fable-5-1 at 10:05Z via get_session, session_context.model = last_served_model) and ACCEPT — PR #14911 at 5b72f66fce. Ruling B executed as ruled. Verified by the seat, not from the report:

    • The form. No added line in the diff carries an issue number, a comment id or a URL (the seat's grep over every added line: zero hits); the rewritten sites read (YYYY-MM-DD 裁定) (12 sampled by eye against the table). The surface at head has zero occurrences of 「日期 + 原话」.
    • Counts against the ruling. 44 REWRITTEN, 1 NODATE, 5 KEEP, 4 frame-sync on the two named files — the first flight's enumeration held 45 line-refs against its own "44" summary and the undated site 「明显的问题直接修…」 reconciles it, stated as judgement call 1 rather than smoothed; 2 sites beyond the enumeration rewritten and flagged (rows 13, 28); stage 2 over references/**: 34 rewritten, 4 KEEP, 1 SKIPPED-HOTFILE (rest-channel.md:90, deferred behind PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860); nine dangling 原话见 pointers repaired; every file in the surface classified whole, the 0-site files and the exclusions listed.
    • The seat's own gate runs in a compare worktree at 5b72f66fce (10:18Z): check-skill-id-lint 23 files clean; the line ratchet green with every touched file at or below its ceiling and net shrunk (SKILL.md 989 → 964, os-dev.md 469 → 467, dispatch-runbook 280 → 273, contract-review 65 → 64, decision-analysis 54 → 53, landing-operations 80 → 80, lanes/director 77 → 72, seat-post-protocol 105 → 104); check-skill-frame-sync 4 copies isomorphic across 3 files; frame-freshness current with origin/main. The dev's reverse verification (an injected issue-number token turned the lint red at SKILL.md:415; restore proven by blob hash and an empty diff) is on the PR body.
    • The increment ordered at 10:07Z landed as 5b72f66fce (+9/−10 over 4 files, addendum 5524174496 on [Decision] Skills optimization program — batch 3 (5 items): DATA-F-07 defineHook() vs the platform's own examples · #13597 Phase-2 — X0 quote policy · CLAUDE.md excerpt form · the four-copy decision frame · cross-file line-budget moves #14685): SKILL.md:25, os-dev.md:23, dispatch-runbook.md:3 and :123, seat-post-protocol.md:38 now read the ruled form. Off-surface sentences (AGENTS.md:12-13, the lint header) are [finding] After ruling B (#14859), AGENTS.md:12-13 and the scripts/pm/check-skill-id-lint.mjs header still describe the pm-dispatch provenance form as "date + verbatim quote" — the two off-surface sentences PR #14911 could not touch #14913, bare; lanes/director.md:4 untouched by design — it governs the KEEP quotes.
    • KEEP judgements re-read one by one. The 5 ruled KEEP sites unchanged (rows 77–82); the 4 stage-2 KEEPs (contract-review.md:60, decision-analysis.md:49, lanes/director.md:8, lanes/hotcrm.md:9) are each the operative words or a declared definition — accepted. Same-day rulings sharing one date token (rows 26, 31, 33): accepted; the date is the ledger key and each rule is stated structurally in the surrounding text.
    • CI on 5b72f66fce at 10:18Z: Governed Surface Queue Guard, Part-of, same-issue and single-writer checks green; Lint & Repo Gates and the Type Check jobs still running — a governed draft waits for the approvers regardless of when they finish.

    Terminal: needs:contract-review stripped from PR #14911 in this minute; review requested from os-zhuang and hotlong on the draft (read-back follows); the PR stays draft — the seat never flips, enqueues, approves or merges. On merge this card closes by Fixes; #14685 records item 2 as landed; rest-channel.md:90 converts after PR #14860 lands (folded into #14913's scope).


    Generated by Claude Code

  6. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    Read-back for PR #14911 at 10:20Z (list_pull_requests, head claude/issue-14685-x0-quote-policy): state open, draft: true, labels documentation · size/m · skip-changeset (needs:contract-review gone), requested reviewers hotlong and os-zhuang, last updated 10:19:28Z. At the governed terminal; nothing else moves until an approver acts.


    Generated by Claude Code

  7. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    Merge record (skills seat, session session_01LraLgQVGq8egUwfYZpbYt1), read at 2026-09-03T14:45Z by the check-in #44 patrol — git log origin/main --grep '(#14911)' run in that minute, cross-checked against the API head 578452681b = refs/heads/main, newest subjects printed beside the grep.


    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