Repository navigation
Commit dd9add6
docs(skills): the D11 close refuses only a declared-override move; an added email-template locale keeps its package-less write (#29924)
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J
<!-- claude-projects-attribution: {"github_login":"huangyiirene"} -->
_Requested by **Irene** · [project
thread](https://claude.ai/code/project/chan_01TJXtQ1tVD26ecLDZxFS67x?thread=cmsg_01TJXtQ1tVD26ecLDZxFS67x5FhwXpbo8XHNfhTodcp3zr)_
Fixes #29461
Clause-②: no
Metadata-protocol: none
Model: the `skills/**` tier mandate (dispatch clause ①) is waived by the
maintainer while that tier's quota is exhausted; developed one tier
below it; contract review by triage. The ruling, verbatim:
> 你的任务继续处理,没有fable可以用 opus,等契约复审
## 维护者速读
- 改了什么:objectstack-platform 技能里 ADR-0146 定制段的 D11 那句话改正:只有迁移仪式会「以声明
override 的方式」搬走的旧 Setup
行,搬前搬后才拒绝不带包的保存、发布、重置和回滚;基础包没发运的邮件模板语言(仪式把它当配对包自己的成员搬,`addedMember`)保留这个写入口。另删掉一段重复的「CLI
Commands」指针小节付 token 账,并加一份 `@objectstack/skills` 的 patch
changeset(技能随该包发布)。
- 为什么改:PR #29258 之后迁移仪式会把这种语言行当配对包自有成员搬走,而 D11
关门(`packagelessCloseSubject`)只判声明 override 的搬法;技能原句说「一律拒绝」,对这种行是错的,AI
照着写会以为这类写入已被关。ADR-0087 条目那一半已由 PR #29457 改正,这里是剩下的一份。
- 风险与回滚:纯技能文本加一份 changeset,无代码、无契约改动。token 上限行未动(6011/6011),无
re-wrap;被删的指针小节在同文件 Part 3 指针里有家。回滚即 revert。
- 先看:`skills/objectstack-platform/SKILL.md` 第 132 行定制段里 `(D11)`
前后那半句;同文件被删的 `## CLI Commands`
小节;`.changeset/29461-d11-added-locale-keeps-write.md`。
- 两分钟验证:`node scripts/check-skills-token-ratchet.mjs`,预期
`skills/objectstack-platform/SKILL.md is 6011 tokens (ceiling 6011;
headroom 0)`,全绿。
- 需要你做的:Tier H 受管面(`skills/**`),需要 `GOVERNED_APPROVERS` 的批准;PR 保持
draft,等分诊对第二轮的增量契约复审。
## What changes
Facts are taken from the merged code on `main` (a04e9d7), not the card
alone: `packagelessCloseSubject` and `classifyPackagelessRow` in
`packages/metadata-protocol/src/protocol-packageless-overlay-migration.ts`,
the ceremony's `addedMemberOf` and its `moved` + `addedMember` outcome
in the same file, and the corrected ADR-0087 entry
`packages/spec/src/migrations/entries/semantic/18.packageless-overlay-write-closed.ts`
(PR #29457).
1. **`skills/objectstack-platform/SKILL.md`, the ADR-0146 customization
paragraph (L132).** The D11 clause read "its package-less save, reset
and rollback are refused once movable (D11)". It now reads: "once
movable as a declared override, its package-less save, publish, reset
and rollback are refused (D11); an email-template row at a locale the
base does not ship moves as the pair's own member and keeps that write."
The four operations are `PackagelessWriteOperation` (`save | publish |
delete | rollback`, `protocol-packaged-base-refusal.ts`); the old clause
left out publish. That is what `packagelessCloseSubject` does: it closes
a package-less write only where the census answers `movable` AND
`overlayPairFixAdmits` admits the declared body into the pair; an
`email_template` member at a locale the base does not ship is refused by
that gate, so the close leaves it open, while the ceremony moves the row
as the pair's own member (`addedMember`, no `overrides`). The rest of
the paragraph is byte-identical.
2. **Payment, same file.** The `## CLI Commands` section (a heading, one
pointer line and its `---` rule; 140 bytes) is cut. Its home: the Part 3
pointer further down the same file, which links the same
`references/operations.md` and names its "Daily-loop commands" section
first. No other file links the cut heading's anchor (`git grep
'#cli-commands'` over `skills/`, `content/docs/`, `scripts/`: zero
hits).
3. **`.changeset/29461-d11-added-locale-keeps-write.md`.**
`'@objectstack/skills': patch` with `Clause-②: no` and
`Metadata-protocol: none`: `skills/**` ships in `@objectstack/skills`,
so a skills change takes route 1 of Check Changeset
(`.github/workflows/pr-automation.yml`), never the `skip-changeset`
label.
### Token ratchet, paid in place (no ceiling row moved, no re-wrap)
| file | tokens before / after / ceiling | bytes before / after | lines
before / after |
|:--|:--|:--|:--|
| `skills/objectstack-platform/SKILL.md` | 6011 / 6011 / 6011 | 24061 /
24064 | 435 / 429 |
| package `skills/objectstack-platform` (all files) | — | — | 2238 /
2232 |
| every `skills/*/SKILL.md` together | — | — | 4543 / 4537 |
The D11 clause grows by 143 bytes and the cut removes 140; the file's
priced text was 3 bytes under the 6011 ceiling and is exactly at it now
(24044 priced bytes, 6011 tokens).
### Evals
`skills/objectstack-platform/evals/config-plugins-ops.json` has two
cases on this paragraph. Case 10 (replace a HotCRM view) says a
package-unbound Setup row "wins only until the D11 migration": a view is
a declared-override move, so it stays true and is unchanged. Case 11 (a
dependent package's override) does not touch D11. No case covers an
added email-template locale; none is added here (see Acceptance notes).
## Why
Since PR #29258 (#28904) `os migrate packageless-overlays` moves a
package-less row of an `email_template` locale the base does not ship as
the pair's own member, declaring nothing, and the D11 close judges only
the declared-override move, so that row's package-less write stays open
before and after the move. The skill said every movable row loses it. PR
#29457 (#29261) corrected the same claim in the ADR-0087 entry; this was
the remaining copy.
## Acceptance notes
- The edit is made on the branch the platform fixes for this thread
(`claude/project-thread-x5gki7`) in this container's own checkout rather
than a sibling worktree: the container is this card's alone. A deviation
from the worktree-first spelling, not its purpose.
- No eval case was added for the added-locale write: the card asks to
check the covering evals, and both still hold. A case could be added
later at no ratchet cost (eval fixtures are measured, not ratcheted) if
the seat wants that behaviour exercised.
- Round 2 (commit 47008cf) answers triage's contract review of c634c95
(comment 6606375768, FAIL): the must-fix (the change publishes through
`@objectstack/skills`, so it carries a patch changeset and the
`skip-changeset` label was removed) and the should-fix (the clause lists
publish). The should-fix was paid inside the same clause, no re-wrap:
"it is" dropped and "email template's row" spelled "email-template row".
Nothing else moved.
- Triage's review names two other copies of the close stated without the
carve-out, `content/docs/concepts/metadata-lifecycle.mdx` and ADR-0146 §
D11; they are outside this card's file surface and go to a follow-up
card.
- The `Model:` line above carries no model identifier outside the
verbatim ruling quotation (AGENTS.md, commit-message and PR-body rule);
the tier names appear only inside the quoted ruling.
## Verification
Head `47008cfe` (two commits: c634c95 the change, 47008cf the review's
must-fix and should-fix). No code changed, so no package test,
typecheck, ablation or dogfood battery is owed (`Clause-②: no`, no `!`
in the title).
<details><summary>Local gates on 47008cf: 45 derived, 45 run with exit
0, 0 NOT MEASURED (`dispatch-gates --ran`); on c634c95 35 derived, 34
exit 0, 1 NOT MEASURED</summary>
- 47008cf: `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 45 commands (the changeset adds the
changeset families: `check-adr-0087-registration`,
`check-changeset-no-major`, `check-empty-changeset`,
`check:changeset-gate-self-tests`, `check:closed-ceremony-text`,
`check:published-files`, release self-tests). All 45 ran after `pnpm
install --frozen-lockfile` and a full `pnpm build` (exit 0), each with a
900 s timeout and its exit code captured before any pipe: all 45 exited
0, `check:dual-build-cjs-loads` included. `--ran`: `45 derived
famil(ies) accounted for — 45 run, 0 NOT-MEASURED`.
- `check-skills-token-ratchet.mjs`:
`skills/objectstack-platform/SKILL.md is 6011 tokens (ceiling 6011;
headroom 0)`.
- c634c95: 35 derived after install and a `@objectstack/formula` /
`@objectstack/lint` / `@objectstack/objectql` build; 34 exited 0 and
`pnpm check:dual-build-cjs-loads` exited 3 (`PREREQUISITE NOT MET`, no
full build then).
- `node scripts/check-commit-card-trailers.mjs --range
origin/main..HEAD`: exit 0 on both heads (no card relation, model-free
trailer pair).
- CI on 47008cf: 44 check-runs, 28 success and 16 skipped by path
filter or opt-in, none red or pending. CI on c634c95: 46 check-runs, 28
success, 18 skipped.
- Writes: `git push` ×2; one relay `pr_create`; no GitHub MCP write. The
`skip-changeset` label that rode the create was removed by the seat.
</details>
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(No schema touched.)
- [x] 2. Every name I added uses the casing for its kind. (No names
added.)
- [x] 3. No formatter ran; `pnpm lint` is CI's repo-wide run.
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. The change publishes through `@objectstack/skills`: it carries
a `patch` changeset, and both declaration lines are filled in here and
in the changeset.
- [x] 6. `packages/spec` not touched.
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English (the 维护者速读 block is the
repo's own Chinese reading aid; the ruling is quoted untranslated).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01J8VVAnsSK35UdbfYSLvGkz
---
_Generated by [Claude
Code](https://claude.ai/code/session_01J8VVAnsSK35UdbfYSLvGkz)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 0d40aa1 commit dd9add6
2 files changed
Lines changed: 12 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
129 | 129 | | |
130 | 130 | | |
131 | 131 | | |
132 | | - | |
| 132 | + | |
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
| |||
408 | 408 | | |
409 | 409 | | |
410 | 410 | | |
411 | | - | |
412 | | - | |
413 | | - | |
414 | | - | |
415 | | - | |
416 | | - | |
417 | 411 | | |
418 | 412 | | |
419 | 413 | | |
| |||
0 commit comments