@nathan33/nao-skill 0.22.2 → 0.22.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.agents/checklists/pm.md
CHANGED
|
@@ -53,7 +53,7 @@ description: PM 交付核对清单(按需,交付/派发前读取)
|
|
|
53
53
|
- [ ] 未过 PM 验收就合并 PR,或直推 main?(PM 验收通过 = 授权合并;见 `github-flow.md`)
|
|
54
54
|
- [ ] PM 亲自合并 PR / `push` main?(合并由 RD 执行,PM 只验收授权)
|
|
55
55
|
- [ ] PM 改了**源码/测试/构建配置**,或手改冲突内容?(应转 worker;PM 只做仓库治理与发布)
|
|
56
|
-
- [ ] main 上出现多条本需求提交,或出现 `wip()` 提交(未 squash
|
|
56
|
+
- [ ] main 上出现多条本需求提交,或出现 `wip()` 提交(未 squash)?或 squash **body** 被自动拼接出 `wip(`/已证伪的旧表述(合并时缺 `--body-file`)?(判据:`%s` 与 `%b` 各 `grep -c 'wip(' || true` = 0 —— `grep -c` 0 命中时 rc=1,必须 `|| true`;body 首行的旧表述为**人工项**;见 `github-flow.md` 合并节)
|
|
57
57
|
- [ ] 为文档 / 台账**单开 PR**,或任务期文档作为**独立提交直落 main**?(应随任务 PR;唯一例外 = BR3 立项摘要,降级批次无例外;见 `github-flow.md`)
|
|
58
58
|
- [ ] PR 标题 / 提交信息不可读(纯编号/类名/函数名/文件路径)?
|
|
59
59
|
- [ ] Issue 与 `docs/` 双源(正文抄进 Issue,或状态只留平台)?
|
|
@@ -104,7 +104,7 @@ description: PM 交付核对清单(按需,交付/派发前读取)
|
|
|
104
104
|
- [ ] 【仅 feat】**文档随任务 PR**:本任务文档与台账(PRD 定稿 / 报告 / ADR / `docs/tasks-state.md` / 索引 / release notes)已在本需求分支提交并随同一 PR 进 main;main 上无 `docs(<编号>):` 独立提交、无文档-only PR(立项摘要例外仅 1 条且单一文件)
|
|
105
105
|
- [ ] 【仅 feat】Issue 已建(或降级已标注):body 为摘要 + 指针,正文在 `docs/prds/`;同步仅 5 个节点
|
|
106
106
|
- [ ] 【仅 feat】验收在 PR 上完成:AC 逐条评论核对 + QA 门禁数字;**UI 呈现类已交用户验收清单并获回填**(QA 产出 → PM 审 → 用户执行);**验收通过后才授权合并**
|
|
107
|
-
- [ ] 【仅 feat】合并由 RD 执行(`--squash
|
|
107
|
+
- [ ] 【仅 feat】合并由 RD 执行(`--squash` + 显式 `--subject` **与 `--body-file`(用 PR 描述)**);main 上本需求恰好 1 条提交、**subject 与 body 均无 `wip()`**;需求分支已删除
|
|
108
108
|
- [ ] 【仅 feat】合并前已核「分支无未推送提交」(适用:在分支上提交过的**任何角色**,含 PM 落的文档/台账):`git rev-list --count origin/<branch>..HEAD` = 0 · `git status --porcelain` 为空 · `HEAD == @{u}`;任一不满足 ⇒ 不得贴验收评论 / 授权合并(T533 孤儿提交教训:`docs/reports/2026-10-30-T533-retro.md`)
|
|
109
109
|
- [ ] 【仅 feat】发布(若有):版本号符合 SemVer/项目约定;tag 指向 main 合并提交;release notes 用户可读且落盘 `docs/releases/`(核 @.agents/common/release-notes.md)
|
|
110
110
|
- [ ] 【仅 feat】`gh` 可用则已用 `gh`,降级已注明;发布后事实(含 `tasks-state` 版本/Tag 行)的**落地时机与工作区纪律见 `github-flow.md` BR5**(单源指针,本清单不复写命令细节)
|
|
@@ -68,7 +68,16 @@ PM 在**受理 / 立项 / 终签 / 发布**时读取;RD 在**起分支 / 开 P
|
|
|
68
68
|
- **禁止** `git push` 到 main、**禁止绕过 PR 合并**;feature 分支允许 `--force-with-lease`(改基 / 压缩历史时)。
|
|
69
69
|
- 提交规范、`wip()` 前缀、路径级暂存、可读性:见 @.agents/skills/commit.md。
|
|
70
70
|
- **squash 后 main 上的提交信息 = PR 标题 + PR 正文** → **可读性硬性落在 PR 标题**(用户可见行为,禁纯编号/类名/路径)。
|
|
71
|
-
- ⚠️
|
|
71
|
+
- ⚠️ **squash 提交信息的两处陷阱(T511 / #84 实测,主干上不可回溯)**:
|
|
72
|
+
1. **subject**:PR **只有 1 条提交**时 `gh pr merge --squash` 取的是**该提交的 subject**(**不是** PR 标题)⇒ 分支纪律的 `wip(<编号>):` 前缀会直接进主干;
|
|
73
|
+
2. **body**:未显式给 `--body` / `--body-file` 时,GitHub 把**各提交标题**自动拼成 body ⇒ 主干 body 含 `wip(` 与**已被证伪的旧表述**(实测:#84 6 处、#80 8 处、#82 4 处,同型)。
|
|
74
|
+
- ✅ **合并命令必须同时显式指定 subject 与 body,且 body 取 PR 描述**:
|
|
75
|
+
`gh pr merge <n> --squash --delete-branch --subject "<用户可读主题>" --body-file <PR 描述文件>`
|
|
76
|
+
(取描述:`gh pr view <n> --json body --jq .body > /tmp/pr<n>.md`,或复用开 PR 时写的那份文件。)
|
|
77
|
+
- **合并后即时自证(判据,两处都要 0)**:`git log -1 --format=%s | grep -c 'wip(' || true` = 0 **且** `git log -1 --format=%b | grep -c 'wip(' || true` = 0。
|
|
78
|
+
⚠️ 写成 `|| true` 是硬要求:`grep -c` 在 0 命中时**退出码为 1**,裸用在 `set -e` / `&&` 链里会把「通过」误读成失败。
|
|
79
|
+
- **人工项(不可机械判)**:body 首行是否仍含**已被证伪的旧表述**(结论会随认知更新而变化)⇒ 合并前由执行者**读一遍 PR 描述**确认,不设自动判据。
|
|
80
|
+
- 主干受保护(禁 force-push / `enforce_admins=true`)时该偏差**不可回溯**,只能记录 —— 故此处是**合并前**的硬要求。
|
|
72
81
|
|
|
73
82
|
## Issue 与状态(避免双源)
|
|
74
83
|
|