From 2300b8938376d6daa9bc3f1fc6d68d0949a5a816 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 18 Sep 2026 12:50:23 +0000 Subject: [PATCH 1/3] =?UTF-8?q?docs(agents):=20os-dev.md=20:67=20=E2=80=94?= =?UTF-8?q?=20releases=20ban=20scoped=20to=20code=20PRs,=20force-push=20de?= =?UTF-8?q?fers=20to=20the=20landing=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `.claude/agents/os-dev.md` block 4 rewritten in two lines, line-neutral: :67 now forbids editing `content/docs/releases/` only IN A CODE PR (a correction is a dedicated docs-only PR), keeping the push-`main` and merge bans unconditional; :68 re-points the force-push clause at the LANDING repository's AGENTS.md and names both shapes (objectui/cloud absolute ban; objectstack's five-criteria `--force-with-lease`, §3). The changeset sentence that lived on :68 folds into :298 as the complement of the `skip-changeset` criterion it already carried. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF --- .claude/agents/os-dev.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index c26dba533a3..75abdab1ad7 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -64,8 +64,8 @@ model: opus - 就地修欠两样:认领申报的文件面同轮增补;PR 正文点名该修复并附证据。 - 优先扩展一个守卫关掉整个类;任一条不成立 ⇒ 回默认:无 assignee 立单、列出、不碰。 - 本轮改动令其变假或触碰的已发布缺陷必修;其余立卡并记明已发布面,PR 照常落地。 -4. ⛔ 永不编辑 `content/docs/releases/`、推 `main`、合并任何东西;force-push 只按 AGENTS.md §3。 - - 用户可见的改动需要 `.changeset/*.md`。 +4. ⛔ 永不推 `main`、合并任何 PR、在代码 PR 里改 `content/docs/releases/`;改错另开 docs-only PR。 + - force-push 按落地仓 AGENTS.md:objectui/cloud 绝对禁;objectstack §3 五条全立才 `--force-with-lease`。 5. **Contract-first。** 修复若诱使你在消费端加宽容回退(`??` 别名、宽松解析),缺陷在上游。 - 去生产者或 spec 修,或返回 `needs_decision`。 6. **issue 正文是线索,不是规格。** 动手前对 `origin/main` 核验其前提。 @@ -295,7 +295,7 @@ model: opus - 密度优化只随净减内容的 PR;分界只问折行有没有为新增内容买行。 - ⛔ 不把不买内容的密度修复当筹行拒掉;删不出等量内容 ⇒ 报 `blocked`,⛔ 不抬 ceiling。 - 例外:派发令点名测量优先的零余量受管账本 ⇒ 落行、不动上限行、红着报实测行数。 -- `skip-changeset` 唯一判据:没有已发布的东西移动;已发布 = 各包 `files[]` 实际发运的内容。 +- 发布面动了要 changeset;`skip-changeset` 唯一判据是没动:已发布 = 各包 `files[]` 实际发运内容。 - 快速通道:`docs/adr/**` · `.claude/**` · `scripts/pm/**` · 仓根配置 · 私有包 · 注释,不发布。 - 其余实测:构建后 grep `files[]` 所列路径找符号,带正控;符号零命中、正控命中 ⇒ 不发布。 - 本仓库:标签是真实机制,打标签是你的默认步骤,PR 一开出就打;派发词可收窄或禁写。 From 65d09a3b9a41ee5eef6a64d1b235b1b108c5ddbf Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 18 Sep 2026 12:50:23 +0000 Subject: [PATCH 2/3] =?UTF-8?q?docs(agents):=20os-dev.md=20label=20step=20?= =?UTF-8?q?=E2=80=94=20write=20its=20repository=20scope=20explicitly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :301 「本仓库」 becomes `objectstack` by name; :309 states what a dev does in objectui (path labels belong to `labeler.yml`, re-synced on every push; no objectui gate reads a label the dev writes; the dev writes none unless the dispatch names one); :310 folds the two objectui `skip-changeset` lines into one. Line-neutral. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF --- .claude/agents/os-dev.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 75abdab1ad7..8c57a19196f 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -298,7 +298,7 @@ model: opus - 发布面动了要 changeset;`skip-changeset` 唯一判据是没动:已发布 = 各包 `files[]` 实际发运内容。 - 快速通道:`docs/adr/**` · `.claude/**` · `scripts/pm/**` · 仓根配置 · 私有包 · 注释,不发布。 - 其余实测:构建后 grep `files[]` 所列路径找符号,带正控;符号零命中、正控命中 ⇒ 不发布。 -- 本仓库:标签是真实机制,打标签是你的默认步骤,PR 一开出就打;派发词可收窄或禁写。 +- objectstack:标签是真实机制,打标签是你的默认步骤,PR 一开出就打;派发词可收窄或禁写。 - 范围 = 派发词点名的标签 + 上文判据下的 `skip-changeset`;禁写或交集为空 ⇒ 零写并报告。 - `needs:contract-review` 归席位,⛔ 不挂不摘不等;报 PR 上有无与 `--pair PR-NUMBER` 退出码作读数。 - 写入首选加法端点(REST `POST .../issues//labels`,不碰已有标签);可达性按会话探,先探后用。 @@ -306,8 +306,8 @@ model: opus - 读回 diff 现集对 union(读集, 目标),缺者 = 被剥的标签,重挂,清单进报告;收尾再读一次。 - 读回只检测剥除防不了(size-labeler 整组 PUT),门标签被剥恰成绿灯;加法写同样必要不充分。 - 关此步骤的是读回不是写入;读回只验写落了,验不出有门在读:幻影门标签读回照样成功。 -- objectui:同名标签对象在,零 workflow/脚本读它、豁免不了任何东西,pin 测试钉着。 -- 那边用空 frontmatter 的 changeset 声明,门禁判定行是权威;⛔ 永不在 objectui 施加该标签。 +- objectui:路径标签归 `labeler.yml`,逐 push 同步;无门禁读你打的标签 ⇒ 派发词未点名即零写。 +- objectui 的 `skip-changeset` 零读者;空 frontmatter changeset 即声明,门禁判定行为准,⛔ 永不施加。 - 报告在本地验证走完时交付,CI 收敛等待归 PM 不归你:⛔ 不为等 CI 结论推迟报告。 - 门禁状态如实记录,`in_progress` 是诚实值;PR 开出后 ⛔ 永不 sleep、定时等待或空转轮询 CI。 - 你报告之后才转红的门禁,会作为同一认领上的补丁轮回来。 From 7f28ee186a6fd510c506bdacee379cd98d5c0298 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 18 Sep 2026 12:50:23 +0000 Subject: [PATCH 3/3] =?UTF-8?q?docs(agents):=20os-dev.md=20=E2=80=94=20the?= =?UTF-8?q?=20=E3=80=8Ctool=20denied=20by=20the=20session=20classifier?= =?UTF-8?q?=E3=80=8D=20cell?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The label write is named by its single spelling (`scripts/pm/label-write.mjs`, four steps built in), which lets the new cell beside the endpoint-refusal cell say what a dev does when the session classifier denies an external write: stop that write, record the exact command and the classifier's reason under `deviations`, hand the act to the seat, never re-issue it by another route (curl, MCP, a hand re-implementation). The two read-back lines move up beside the mechanism they explain. Line-neutral: 403 / 403. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF --- .claude/agents/os-dev.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 8c57a19196f..ed43560788c 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -301,11 +301,11 @@ model: opus - objectstack:标签是真实机制,打标签是你的默认步骤,PR 一开出就打;派发词可收窄或禁写。 - 范围 = 派发词点名的标签 + 上文判据下的 `skip-changeset`;禁写或交集为空 ⇒ 零写并报告。 - `needs:contract-review` 归席位,⛔ 不挂不摘不等;报 PR 上有无与 `--pair PR-NUMBER` 退出码作读数。 -- 写入首选加法端点(REST `POST .../issues//labels`,不碰已有标签);可达性按会话探,先探后用。 -- 被拒 ⇒ 报端点与状态码、席位代挂,⛔ 不报 `blocked`、不走 MCP;写后必做对比式读回。 -- 读回 diff 现集对 union(读集, 目标),缺者 = 被剥的标签,重挂,清单进报告;收尾再读一次。 +- 写恒经 `scripts/pm/label-write.mjs`:取现集、加法 POST、回读比 union、缺者重挂一次并报告。 - 读回只检测剥除防不了(size-labeler 整组 PUT),门标签被剥恰成绿灯;加法写同样必要不充分。 - 关此步骤的是读回不是写入;读回只验写落了,验不出有门在读:幻影门标签读回照样成功。 +- 被拒 ⇒ 报端点与状态码、席位代挂,⛔ 不报 `blocked`、不走 MCP;收尾再读一次。 +- 分类器拒外部写 ⇒ 停手,`deviations` 记命令与拒因,席位代做;⛔ 不换路重发(curl/MCP/手工)。 - objectui:路径标签归 `labeler.yml`,逐 push 同步;无门禁读你打的标签 ⇒ 派发词未点名即零写。 - objectui 的 `skip-changeset` 零读者;空 frontmatter changeset 即声明,门禁判定行为准,⛔ 永不施加。 - 报告在本地验证走完时交付,CI 收敛等待归 PM 不归你:⛔ 不为等 CI 结论推迟报告。