Repository navigation
Commit 77ce3d4
docs(agents): name a new package by its kind and freeze the plugin- prefix at its ten (#29717)
<!-- claude-projects-attribution: {"github_login":"os-warren"} -->
_Requested by **Warren** · [project
thread](https://claude.ai/code/project/chan_01U5RdnAAmkSQmZbqh6FtqZ8?thread=cmsg_01U5RdnAAmkSQmZbqh6FtqZ8MyE4m329ZuXhdkjK4apEQv)_
Fixes #29709
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:AGENTS.md 角色表两行就地改写,写明新包按种类命名、`plugin-` 前缀冻结在现有十个;pm-dispatch
派发令加一行建包要求。
- 为什么改:ADR-0012 写的 `plugin-notification-push`
差点让推送通道成为孤例;仓里没有任何一句话说新包怎么起名、ADR 与仓内先例冲突时谁赢。
- 风险与回滚:只改规则文字,不改任何包、不改名;两文件行数净零。回滚 = revert 本 PR。
- 先看:`AGENTS.md` 的 `packages/services/**` 与 `packages/plugins/**`
两行;`.claude/skills/pm-dispatch/references/execution-duties.md` 派发节新增行。
- 两分钟验证:`pnpm check:pm-skill-ratchet`,预期 AGENTS.md
1050/1050、execution-duties.md 188/188 皆绿。
- 需要你做的:批准本 PR(AGENTS.md 属 Tier H,需维护者批准)。
## What changes
- `AGENTS.md` roles table, two rows rewritten in place (zero line
growth, 1050 of the 1050-line ceiling):
- `packages/services/**`: a new kernel-managed service (fills a
`core-services` slot, registers a service, or holds
transports/credentials) is `@objectstack/service-NAME` in
`packages/services/service-NAME`. Plus the ADR-precedence sentence,
which opens "For any new package, in this row or the one above": a
package name in an ADR is a proposal; where the tree's precedent
differs, the PR that creates the package follows the precedent and
amends that ADR's status line in the same change. It sits in the row, so
`docs/adr/` is untouched.
- `packages/plugins/**`: a new package here is named by its kind
(`embedder-*`, `knowledge-*`, …); drivers and connectors have their own
directories (`packages/drivers/driver-*`,
`packages/connectors/connector-*`); the `plugin-` prefix is frozen to
the ten that carry it today and never coined again; none of the ten is
renamed.
- `.claude/skills/pm-dispatch/references/execution-duties.md` (派发
section), one line added after the "lists, paths, line numbers are read
from the tree at dispatch" rule: an order that creates a package names
the directory and the npm name, and the dev measures same-kind precedent
before writing; the naming rule itself lives in the AGENTS.md roles
table (not restated). 118 bytes, under the 120-byte line cap.
- Paid for under `check:pm-skill-ratchet` (execution-duties.md 188/188,
headroom 0) by retiring one line restated elsewhere: 复核 section 「报告或复核见涉
cloud ⇒ 整卡 `Release:`+`pm:retriage` 转 cloud 车道,读点留卡;⛔ 不拆半边。」. Surviving
home: `.claude/skills/pm-dispatch/references/cross-repo-coordination.md`
lines 44 (涉 cloud 即整卡归 cloud PM), 46 (⛔ 不拆半边等读数) and 47 (在飞卡见涉 cloud 即
`Release:`+`pm:retriage` 交分诊转 cloud 车道,已测读点留卡). No re-wrap was used as
currency.
- Not changed: no package renamed or moved; no gate added (the gate is
the `domain:devx` sibling card #29710, which freezes the same ten
names).
## Why
Maintainer ruling, verbatim (project thread "Decide push channel package
name", 2026-11-03): 「应该用 service-*,包括如何制定仓库规则,避免类似的问题」 (02:11:43Z) and
「plugin- 太笼统,是不是建议逐渐退役这个名字。」 (02:12:01Z). The ten `plugin-*` names are
published, so the prefix is retired for new names only.
## Verification
Measured on `origin/main` c9636f1 before editing:
<details><summary>Packages under packages/services and packages/plugins
(directory = npm name for all 32)</summary>
- services (18): `service-analytics`, `service-automation`,
`service-cache`, `service-cluster`, `service-cluster-redis`,
`service-datasource`, `service-i18n`, `service-job`,
`service-knowledge`, `service-mailbox`, `service-messaging`,
`service-package`, `service-print`, `service-queue`, `service-realtime`,
`service-settings`, `service-sms`, `service-storage` (all
`@objectstack/`).
- plugins (14): `embedder-openai`, `knowledge-memory`,
`knowledge-ragflow`, `organizations`, and the ten `plugin-*`:
`plugin-approvals`, `plugin-audit`, `plugin-auth`, `plugin-dev`,
`plugin-email`, `plugin-hono-server`, `plugin-pinyin-search`,
`plugin-security`, `plugin-sharing`, `plugin-webhooks`.
- `grep '"name": "@objectstack/plugin-'` over every
`packages/**/package.json`: exactly those ten. Same set as #29710
measured on c9636f1.
- AGENTS.md: 1050 lines, ceiling 1050
(`scripts/pm/check-skill-line-ratchet.mjs`); widest-table-row pin 768 B;
the rewritten rows are 473 B (services) and 565 B (plugins) after the
review round (fix commit `7187a55e`; gates re-ran on it, same 20
families, all exit 0).
</details>
<details><summary>Local gates: 20 of 20 derived by `dispatch-gates
--commands` plus `pnpm lint`, all exit 0; `--ran` reconciliation 20 run,
0 NOT-MEASURED, 0 UNRUN</summary>
Run on the edit at base c9636f1 after `pnpm exec turbo run build
--filter=@objectstack/formula --filter=@objectstack/lint` (exit 0).
`origin/main` 0eb97fa was then merged (it touches neither file) and
`pnpm check:pm-skill-ratchet` re-ran at exit 0.
```text
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/pm/check-harness-current.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:docs-audit-scope :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-governed-prose :: exit 0
pnpm check:pm-skill-id-lint :: exit 0
pnpm check:pm-skill-ratchet :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:required-contexts :: exit 0
pnpm check:skill-frame-sync :: exit 0
pnpm check:watch-hint-literal :: exit 0
pnpm lint :: exit 0
```
`check:pm-skill-ratchet` readings: AGENTS.md 1050 lines (ceiling 1050),
widest table row 768 B (pin 768); execution-duties.md 188 lines (ceiling
188).
</details>
Line budget: AGENTS.md 1050 → 1050; execution-duties.md 188 → 188 (+1 /
−1). Not a `skills/**` change, so no whole-pack reading is owed.
`skip-changeset`: `AGENTS.md` and `.claude/**` ship in no package's
`files[]`.
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(not touched)
- [x] 2. Every name I added uses the casing for its kind. (no
identifiers added)
- [x] 3. No formatter ran; `pnpm lint` passes.
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. A change that publishes carries a changeset, and both
declaration lines are filled in here and in the changeset. (publishes
nothing: `skip-changeset`)
- [x] 6. `packages/spec` touched: its generated artifacts are
regenerated and committed. (not touched)
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [ ] 8. Title, body and comments are in English. (the 维护者速读 block is
Chinese by the os-dev definition; the retired line is quoted verbatim)
- [x] The *Before Submitting* list in CONTRIBUTING.md is done.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01JQwxbWzSjXRKg3dUCvmJgB
<!-- signed: domain:server#2 · os-warren ·
session_01JQwxbXKRzgnVvjzxaYxLUf -->
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 318a23c commit 77ce3d4
2 files changed
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
| 136 | + | |
136 | 137 | | |
137 | 138 | | |
138 | 139 | | |
| |||
176 | 177 | | |
177 | 178 | | |
178 | 179 | | |
179 | | - | |
180 | 180 | | |
181 | 181 | | |
182 | 182 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
724 | 724 | | |
725 | 725 | | |
726 | 726 | | |
727 | | - | |
728 | | - | |
| 727 | + | |
| 728 | + | |
729 | 729 | | |
730 | 730 | | |
731 | 731 | | |
| |||
0 commit comments