Skip to content

docs(skills): retirement playbook counts the six spec artifacts AGENTS.md lists - #33457

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-aio343
Nov 14, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-aio343

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Leehom · project thread

Fixes #32559

domain:skills#1 · os-project-manager · session_01FEkQ5pgZkWpPb19V8zBWrx

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:内部技能 spec-property-retirement 开头一句把 AGENTS.md「Touched packages/spec?」一节说成「八个生成产物」,改为与该节一致的「六个」;顺带把被折行甩出来的单字行「是」接回原句。
  • 为什么改:这本删属性手册让读者去对照 AGENTS.md 那一节数要重生成的产物,数字对不上会让人以为漏了两个产物、去找不存在的东西。
  • 风险与回滚:仅 .claude/** 一个文件,+2 / -3,净减 1 行;不动任何包、schema 或运行时;回滚即还原本 PR。
  • 先看:.claude/skills/spec-property-retirement/SKILL.md 第 29–33 行。
  • 两分钟验证:git diff origin/main -- .claude/skills/spec-property-retirement/SKILL.md,预期只见「八个」变「六个」、单字行「是」并回下一行。
  • 需要你做的:无,席位落地(受管面 Tier S,席内复核记录后入队)。

What changes

.claude/skills/spec-property-retirement/SKILL.md, two edits, nothing else:

  • The artifact count. The intro's pointer 「AGENTS.md §"Touched packages/spec?"(八个生成产物)」 now reads 「(六个生成产物)」. The cited section on origin/main 31b4b9f (and on ba35dfd, the commit the order names) says at AGENTS.md:652: "packages/spec has six checked-in generated artifacts". Its table has six rows. The section is unchanged between those two commits.
  • The stray wrap line. The one-character line 「是」 is joined to the line after it, so 「…于是你得到的 / 是每个面一轮红构建,而不是一轮报出全部。」 reads as one sentence again. Wording is unchanged.

The file goes from 337 to 336 lines. No line is added, so nothing needs paying for.

Tests

Prose in an internal skill only. No tested behaviour changed, so there is no ablation.

Acceptance notes

  • Line ceiling left at 337. The file now sits one line under its check-skill-line-ratchet ceiling (headroom 1). Lowering the ceiling to 336 would mean editing scripts/pm/check-skill-line-ratchet.mjs, and the claim limits the file surface to the SKILL.md. The ratchet header calls headroom "the budget for ordinary rule edits", so a 1-line headroom is allowed. The seat can lower it in a later ratchet pass if it wants to.
  • Table-row pin note (already on main). The ratchet prints an info line for this file: the widest table row is 324 bytes against a pin of 326. That predates this diff, which touches no table row.

Verification

Gates (head fd2574d, merge base 31b4b9f)

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 19 commands for the one path. Each ran with its exit code captured before any pipe. All 19 exit 0:

  • check-closing-keyword-parity (scan and --self-test), check-comment-mask-corpus (22274 files, 0 disagree), plan-test-core-shards --self-test, check-harness-current --self-test.
  • pnpm check: agent-test-spelling, ci-filter-parity, cross-package-test-inputs, doc-authoring, driver-memory-census, gitlink-declared, nul-bytes, pm-governed-merges, pm-skill-ratchet (this file: "336 lines (ceiling 337; headroom 1)"), refd-timer-probe, required-contexts, skill-frame-sync, watch-hint-literal.
  • @objectstack/lint check:doc-formula-expressions: the first run exited 3 (no lint dist). After building @objectstack/formula and @objectstack/lint under the verify lock (VERDICT command-exit 0, 88s), it exits 0.
  • --ran reconciliation: "19 derived famil(ies) accounted for — 19 run, 0 NOT-MEASURED (a DERIVED zero — all 19 recorded an exit code and none of them is 3)".
  • Not derived, run anyway: node scripts/check-skills-token-ratchet.mjs exit 0.
  • CI families come from this PR's check-runs. They were not re-run here.
Tier and governed readings
  • dispatch-gates --tier: no path-derived mandate. The surface matches none of the 4 declared globs, so the tier stays the PM's call (default opus).
  • node scripts/pm/check-governed-merges.mjs --branch claude/project-thread-aio343: exit 3, GOVERNED, landing tier S (席内达档复核落地). 1 of 1 path hits the register (.claude/**). Size +2 / -3, under the 3000 threshold.
  • Changeset: skip-changeset. .claude/** ships in no package.

Generated by Claude Code

🤖 Generated with Claude Code

https://claude.ai/code/session_01FEkQ5pgZkWpPb19V8zBWrx

…S.md lists

The playbook's intro pointed at AGENTS.md "Touched packages/spec?" and
called it eight generated artifacts; that section says six. Also rejoin
the one-character wrap line so the sentence reads as one line. Net -1 line.

Claude-Session: https://claude.ai/code/session_01FEkQ5pgZkWpPb19V8zBWrx
Co-Authored-By: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 14, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Nov 14, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: fd2574d4120518343970e136b668ca536c67b8c7
Local-runs: none
Scope: .claude/skills/spec-property-retirement/SKILL.md + none

Net diff against merge base 31b4b9fc is this one file, +2 / -3, 337 to 336 lines. The head's second parent is a merge of origin/main and brings in no other path. Read in the live tree to judge it, not reviewed: AGENTS.md section "Touched packages/spec?" on origin/main (that section is identical at 31b4b9fc and at current main), packages/spec/scripts/check-generated.ts, scripts/pm/check-skill-line-ratchet.mjs.

① Derived judgments

  • Accept set: none changed. The diff touches one internal playbook under .claude/**. No schema, gate, script or public export moves. Right.
  • Public surface: none. .claude/** ships in no package and no published skills/ file is touched. Right.
  • Check-runs on this head are the gate verdicts: all 52 completed, 26 success and 26 skipped, none failed. The successes include TypeScript Type Check and its four Type Check lanes, every Lint lane (repo and tooling gates, where the skill line ratchet runs, plus PM dispatch-gates), Test Core, Governed Surface Queue Guard, both PR-body guards runs and Check Changeset. The skipped runs are opt-in, UI or path-filtered jobs this diff does not reach. Right.

② Semver level

skip-changeset (label present). Nothing in the diff publishes, so no changeset is owed. Right.
Clause-②: no on the PR body and on the claim. Right: the PR adds no declared capability and narrows none.

③ Boundary flags

  • Dev deviation 1, the signature carried as a plain line instead of an HTML signed comment because os-dev.md wins on conflict: accepted. It is a body-format choice and has no effect on the tree.
  • Dev deviation 2, the ratchet ceiling left at 337 (headroom 1): answered in ④ finding 3, graded nit, accepted deviation.
  • open_questions: empty. Nothing to answer.

④ Design judgment

.claude/skills/spec-property-retirement/SKILL.md, judged against the card's premise and against AGENTS.md on main:

  • The count holds. The cited section opens "packages/spec has six checked-in generated artifacts" and its table has six rows: check:docs, check:api-surface, check:authorable-surface, the ADR-0087 registry row, check:skill-docs with check:skill-refs, and check:react-blocks. The playbook's pointer now reads 「(六个生成产物)」, which matches. The old 「八」 is gone from the file. No finding.
  • The rejoined sentence holds. Lines 29 to 30 now read 「…一个过期面遮住其余全部,于是你得到的 / 是每个面一轮红构建,而不是一轮报出全部。」 The wording is unchanged, the stray one-character line is gone, and the break now falls at a normal wrap point. It reads as one correct sentence. No finding.
  • No other part of the playbook disagrees with the new count. I checked every list and number in the file. The 「四张 ratchet」 table (api-surface, authorable-surface, json-schema.manifest, api-surface-signatures) is a different set, the snapshot ratchets, and does not claim to be the AGENTS.md list. The 「生成 baseline」 checklist row names generators, not a count. 「跑了五个漏了第六个」 in the source-audit row is about the audits check:generated does not run, not about the generated artifacts. None of them conflicts with 六.

Findings:

  1. nit: the count is a second copy of a number that drifts. The parenthetical repeats a figure from AGENTS.md right before the line 「本文不重复它们」, and that figure has already drifted once (eight against six). It is correct on this head. Dropping the number would stop it drifting again, but the card asked for the number to be corrected, so this is an accepted deviation.
  2. nit, follow-up, outside this diff: AGENTS.md's own "six" is narrower than the wrapper it points to. packages/spec/scripts/check-generated.ts on main lists about fourteen GATED entries (for example check:export-origins, check:declaration-map, check:strictness-ledger, check:meta-url-spelling), and the ADR-0087 registry row writes a gitignored file, so "checked-in" fits it loosely. AGENTS.md defers to the wrapper ("its own output is the authority on detail"), so this is not a defect in this PR. The playbook agrees with its cited section, which is what the card asks. A follow-up card on AGENTS.md is the right place for it. Separately, the playbook's 「孤儿值 schema」 row still contrasts TypeScript Type Check with a Check Generated Artifacts workflow. No workflow by that name exists on main, and AGENTS.md says all these gates share one job. That claim predates this diff and is outside the card, so it is a follow-up and not a finding against this head.
  3. nit, accepted deviation: the ceiling stays at 337 with headroom 1. check-skill-line-ratchet.mjs calls headroom "the budget for ordinary rule edits between compressions; it is deliberately small". It describes the landed-count convention (headroom 0) for new ceilings and says lowering is always legitimate, but it requires neither. Lowering to 336 means editing the ratchet script, which is outside the claimed file surface. Headroom 1 breaks no gate and no contract, and the next ratchet pass can lower it.

No must-fix. No should-fix.

Implemented-by: claude/project-thread-aio343
Reviewed-by: session_01FEkQ5pjSPT7ui2EUcunaVb

VERDICT: PASS

Adopted by the seat 2026-11-14T21:57Z · isolated sub-agent at CONTRACT_REVIEW_TIER · Ruling-ref: Leehom card cmsg_01TenzsRopZj4jMbvjX8uz1XFhuiZmTH8VFgMmHRmpiGAb, option A, tapped 2026-11-14T15:37Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb

席位核对

Verdict: ACCEPT, seat lands (Tier S) · head fd2574d4120518343970e136b668ca536c67b8c7 · card #32559 · report 6884588309 · contract review 6884816302 (PASS on this head, CONTRACT_REVIEW_TIER; Ruling-ref for the in-seat review: Leehom card cmsg_01TenzsRopZj4jMbvjX8uz1XFhuiZmTH8VFgMmHRmpiGAb option A).

  • Shape: draft → main, Fixes #32559. .claude/skills/spec-property-retirement/SKILL.md (+2 / -3, 337 → 336 lines). skip-changeset (no published package). Clause-②: no; Metadata-protocol: none.
  • Tier: GOVERNED, Tier S (.claude/**). The seat lands it; no human is asked.
  • Fix: the playbook's count now agrees with the AGENTS.md section it cites (six generated artifacts, six table rows, same at the merge base and on current main); the stray one-character line is rejoined with the wording unchanged. Nothing else in the playbook names a count of those artifacts.
  • Accepted deviations (review nits): the bracketed count repeats a number AGENTS.md owns (the card asked for the number to be fixed, not removed); the line ceiling stays 337 over a 336-line file (lowering it would edit scripts/pm/check-skill-line-ratchet.mjs, outside the claim; a later ratchet pass can lower it). The PR body's signature is a plain line plus the seat's appended signed comment (os-dev.md wins over the standing lines).
  • Pre-landing check: ① same-head PASS 6884816302 on record. ② check-runs on the head: 52, 26 success, 26 skipped, none failing or pending. ③ K = 12 (PRBASE 19cc8976, from Test Core (1/8)), under 15; no locale pack landed since.
  • Landing: pr_ready + automerge_enable in the same relay round.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 14, 2026 21:58
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 43645636227 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

分类:failure —— 按下面的日志分诊。

失败的 job(日志抽取,best effort):

  • Dogfood Regression Gate (3/3) — 失败步骤: Boot example apps and exercise real user flows

    @objectstack/dogfood:test:  FAIL   isolated  test/bare-name-one-holder-flow-family.dogfood.test.ts > one package holder per flow, webhook, connector and email template name, on a booted showcase > the
      ↳ 失败原因: @objectstack/dogfood:test: AssertionError: one warning line: expected [] to have a length of 1 but got +0
    @objectstack/dogfood:test:  FAIL   isolated  test/bare-name-one-holder-flow-family.dogfood.test.ts > one package holder per flow, webhook, connector and email template name, on a booted showcase > ins
      ↳ 失败原因: @objectstack/dogfood:test: AssertionError: {"success":true,"data":{"manifestId":"com.qa.bare.delta","version":"1.0.0","versionId":"1.0.0","installedAt":"2026-11-14T22:01:29.567Z","hotLoaded":true,"upg
    @objectstack/dogfood:test:  FAIL   isolated  test/bare-name-one-holder-flow-family.dogfood.test.ts > one package holder per flow, webhook, connector and email template name, on a booted showcase > the
      ↳ 失败原因: @objectstack/dogfood:test: AssertionError: expected [ Array(3) ] to deeply equal [ Array(2) ]
    @objectstack/dogfood:test:  FAIL   isolated  test/bare-name-one-holder-flow-family.dogfood.test.ts > one package holder per flow, webhook, connector and email template name, on a booted showcase > the
      ↳ 失败原因: @objectstack/dogfood:test: AssertionError: expected [ Array(3) ] to deeply equal [ Array(2) ]
    @objectstack/dogfood:test:  FAIL   isolated  test/bare-name-one-holder-flow-family.dogfood.test.ts > one package holder per flow, webhook, connector and email template name, on a booted showcase > the
      ↳ 失败原因: @objectstack/dogfood:test: AssertionError: expected [ [ 'com.qa.bare.alpha', true ], …(2) ] to deeply equal [ [ 'com.qa.bare.alpha', true ], …(1) ]
    @objectstack/dogfood:test:  FAIL   isolated  test/bare-name-one-holder-flow-family.dogfood.test.ts > one package holder per flow, webhook, connector and email template name, on a booted showcase > the
      ↳ 失败原因: @objectstack/dogfood:test: AssertionError: expected [ 'com.qa.bare.alpha', …(3) ] to deeply equal [ 'com.qa.bare.alpha', …(2) ]
    

↳ 失败原因 是判读的关键:超时(Test timed out in … / Hook timed out in …)多半是负载/时序,不是本 PR 的回归;
断言(AssertionError: …)才指向真实的行为改变。两者的 FAIL 行长得一模一样,只有这一行能区分。

⚠️ 断言这一侧有一类例外,判据是断言在测什么,不是它是不是 AssertionError。 断言的对象是产品行为(一个值、一个形状、一次拒收)⇒ 照上面读:真实的行为改变,去查,⛔ 不要重排掉;
断言的对象是这次实验自身的有效性前提(跑完的耗时、负载下的先后、任何只在时间预算内才成立的条件)⇒ 它跟超时是同一类,同样对负载敏感,重排一次是合法的判别手段。
识别是机械的:断言的消息或它比较的值本身点名了一段时长、一个时间戳、一个耗时计数。实测过的一对 —— AssertionError: SecurityPlugin.init() ran: expected false to be true 测的是产品行为(真回归);
AssertionError: this run took over a second, so second-precision stamps could have differed too: expected 1006 to be less than 1000 测的是实验前提:它守护的那条不变式当时是绿的,同一个 head 原样重排一次即成功。
穿着 AssertionError 外衣的时间测量,仍然是时间测量。(⛔ 这只改「怎么读一次红」,不改「哪些测试可以重排」——后者由别处管。)

跨 PR 相同签名(24h,按失败测试文件聚合):

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 13 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 看上面的「跨 PR 相同签名」;已有汇总 issue ⇒ flaky/环境问题实锤,去那张 issue 上谈,修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb

Queue ejection — triage (seat)


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb

Landed (seat audit): GitHub never dequeued this PR. The failing group from run 43645636227 was rebuilt, and the fresh group (started 22:17Z) went green and merged as ae107fc5fb, closing #32559. No re-queue and no main merge was needed, so the step named in 6885071179 was not taken. The same dogfood signature did not recur. 2026-11-14T22:41Z

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

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec-property-retirement playbook intro says eight generated artifacts where the AGENTS.md section it cites says six

1 participant