From codestable
Reviews code diffs before commit/QA/acceptance to verify changes meet spec goals and don't degrade code health. Works with feature, fix, refactor, and ad-hoc workflows.
How this skill is triggered — by the user, by Claude, or both
Slash command
/codestable:cs-code-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
开始任何判断或动作前,先执行 CodeStable preflight:读 `.codestable/attention.md`;缺失先 `cs-onboard`;不读外部 AI 入口替代(详见 `.codestable/reference/execution-conventions.md`)。
开始任何判断或动作前,先执行 CodeStable preflight:读 .codestable/attention.md;缺失先 cs-onboard;不读外部 AI 入口替代(详见 .codestable/reference/execution-conventions.md)。
本技能是横切代码审查 gate:任何流程实现完成后、commit / QA / 验收前,对当前改动做独立只读 review。它只读代码和产物,只写 {slug}-review.md,不直接修代码、不更新 checklist、不改 spec、不替代 QA 或 acceptance。
审查目标不是追求完美代码,而是确认本次改动没有降低系统代码健康,并且确实朝对应 spec(design / fix-note / refactor-design / 用户确认范围)的目标前进。能自动格式化或 lint 的问题不要手工阻塞;会影响正确性、维护性、安全、性能、可测试性、需求满足或后续验收可信度的问题必须指出。
共享路径与命名约定看
.codestable/reference/shared-conventions.md第 0 节。 报告语言:code review 报告正文默认用中文(见.codestable/attention.md报告语言节);frontmatter / yaml 字段不翻译。
| 来源 | 进入点 | spec 产物 | 通过后去向 |
|---|---|---|---|
cs-feat-impl(标准 feature) | impl 完成、QA 前 | design + checklist | cs-feat-qa |
cs-feat-ff(feature 快速通道) | ff-note 落盘、commit 前 | ff-note + 用户原始需求 | 收尾提交 |
cs-issue-fix | fix-note 落盘、commit 前 | report + analysis + fix-note | 收尾提交 |
cs-refactor | apply-notes 完成、commit 前 | scan + refactor-design + checklist | 收尾提交 |
cs-refactor-ff | 自证通过、commit 前 | 用户确认的重构范围 + 验证命令 | 收尾提交 |
| ad-hoc / pre-merge | 用户要求 | 用户指定范围 / git range | 给结论 |
不是 cs-audit:audit 主动扫一片代码找潜在问题;code review 只审当前变更范围。
进入 review 前必须读取:
.codestable/attention.md{slug}-design.md + {slug}-checklist.yaml;issue 看 report+analysis+fix-note;refactor 看 scan+refactor-design+checklist;ff / ad-hoc 看用户确认范围)git status --shortgit diff(有 staged diff 时也读 git diff --cached)如果工作区有本轮范围外的既有 dirty 文件,先记录为 baseline/无关变更;审查结论只针对本轮可归因的改动。无法区分归因时写成 residual-risk,不要把不确定当通过。
先按「进入来源」表确认本轮来源,再做对应前置校验:
{slug}-design.md(doc_type=feature-design、status=approved、feature 与目录一致)+ {slug}-checklist.yaml(steps 全 done);issue 看 report+analysis+fix-note;refactor 看 scan+refactor-design+checklist;ff / ad-hoc 看用户确认范围。缺定稿 spec 时退回对应实现技能,不硬审。{slug}-evidence-pack.md、{slug}-gate-results.json 和 {slug}-dod-results.json;缺失或 gate blocking 未解释时退回 implementation.before_review。{slug}-review.md:
status: passed 且 diff 未变化:提示按表进入「通过后去向」。status: changes-requested / blocked:读取旧 findings,确认是否处于 review-fix 后的复审。本阶段是双环节 review,两个环节互补:
| 环节 | 目的 | 是否 gate 必需 |
|---|---|---|
| A 独立 Task agent review | spec 视角整体审查,用独立上下文避免主 agent 确认偏误 | 是(gate 放行靠它) |
| B OCR 行级扫描 | 行级 bug / 安全 / 代码模式扫描,补 A 的盲区 | 否(装了就跑,缺了降级) |
检测由主 agent 在运行时自检自己的工具,不靠脚本猜环境——主 agent 最清楚自己手上有哪些工具。
主 agent 按 Task agent 选择规则启动独立 Task agent reviewer(优先 Paseo subagent,否则当前宿主原生 Codex/Claude Task/Agent;都不可用时按 local-only fallback 处理):
mcp__paseo__create_agent 工具 → 用 Paseo subagent(首选:能换 provider,做到真正异构审查)。
先加载 / 读取 paseo skill 的当前说明并遵守其规则:读取 ~/.paseo/orchestration-preferences.json,使用 providers.audit,不要硬编码 provider;文件缺失时用合理默认并在报告说明。local-only,不能伪装启动。gate 默认不放行,需用户明确降级(见 reviewer 字段)。独立 Task agent reviewer prompt(只给原始材料,不透露主 agent 的任何 review 结论):
你是 CodeStable 本次改动的独立代码审查 agent。只读,不修改文件,不更新 checklist/design。
请读取:
- .codestable/attention.md
- {design_path}
- {checklist_path}
- {evidence_pack_path}、{gate_results_path}、{dod_results_path}(存在时)
- 当前 git status / git diff / staged diff
- diff 涉及的人写代码和相邻关键调用点
按严重度输出:blocking / important / nit / suggestion / learning / praise / residual-risk。
每条 finding 必须有 file:line 或仓库事实证据、影响、建议修复边界。
执行一次**对抗式审查**:假设本次实现里一定藏着一个生产 bug,主动构造反例,优先攻击 design 不一致、边界值、错误路径、状态转换、并发/时序、权限/数据隔离、持久化/回滚和测试假阳性。
额外输出 Test And QA Focus:QA 必须重点复核的场景、建议新增或加强的测试、review 无法确认的点。
不要写 {slug}-review.md;只把审查结果回传给主 agent。
主 agent 自检 ocr CLI 是否可用:
which ocr && ocr llm test
可用则自动调用(不需要用户显式要求),用 --background 传入 spec 摘要提升质量:
ocr review --audience agent --background "{feature slug / 目标 / 本次改动范围}"
OCR 只能审本轮 scope,不能用裸 workspace 模式发现 scope。ocr review 默认会审 staged + unstaged + untracked;Roadmap 多 feature 连续执行时,历史 dirty/untracked 会让 OCR 越扫越大。调用规则:
current_scope_files:优先取 scope-gate / evidence pack 的 changed_files,否则取 {feature-base}..HEAD 或实现汇报中的本轮文件。ocr review --audience agent --from {feature-base} --to HEAD。git status --short 的所有非 ignored 路径都属于 current_scope_files,才可裸跑 ocr review;否则记 skipped-scope-ambiguous,改为本地行级审查 current_scope_files。.codestable/(CodeStable 自己的 spec / 工具产物,永远不是行级代码审查对象). 开头的目录(.git/、.claude/、.venv/ 等).gitignore 命中的文件(git check-ignore <path> 为真)
未被 .gitignore 忽略、且属于 current_scope_files 的 untracked 新增文件必须被本轮 review 覆盖。OCR 的 High / Medium / Low 映射到 cs-code-review 严重度后合并:
| OCR 优先级 | 映射规则 |
|---|---|
| High | 有仓库事实支撑 → blocking/important;证据不足 → residual-risk |
| Medium | nit 或 suggestion |
| Low | 丢弃(视为噪音),不进入报告 |
OCR 不做 spec-fit 判断;mapping 后的 finding 必须经主 agent 本地事实核验才能升级为 blocking。ocr 未安装 / ocr llm test 失败 → 记 not-available,提示用户走 cs-onboard 的 open-code-review 段安装并配置;不阻塞本轮。注意 ocr llm test 超时(context deadline exceeded)多半是配置用了旧 llm.* 块——ocr v1.x 需用 provider/providers 体系,详见 onboard 段或 codestable-doctor.py 的 OCR 体检。
A、B 两环节可并行启动。一旦某环节已启动,主 agent 不能在其返回前定稿 {slug}-review.md、给出 passed 或进入通过后去向。
paseo / native-agent / ocr / local)。status: blocked,记录 pending|failed|blocked 和原因,让用户决定:重试、等待或明确降级。未经本地仓库事实核验的外部结论只能写 residual-risk 或忽略,不能直接升级为 blocking。
reviewer 字段(gate 锚点),按本轮实际完成的环节写:
| 值 | 含义 | gate |
|---|---|---|
subagent+ocr | 环节 A(Task agent)+ 环节 B 都完成(理想) | 放行 |
subagent | 环节 A 完成,OCR 不可用 / 跳过 | 放行 |
ocr | 仅 OCR,缺 Task agent review | 需 override |
self | 两环节都缺 | 需 override |
gate 默认要求 subagent 或 subagent+ocr;ocr 和 self 需配 CODESTABLE_ALLOW_SELF_REVIEW_FALLBACK=1 才放行。OCR 不能替代环节 A——目的不同(A 是 spec 隔离审查,B 是行级扫描)。
git status / git diff 列出真实改动文件,标出新增、修改、删除、未跟踪、staged。mcp__paseo__create_agent / 原生 Codex/Claude Task/Agent 工具,which ocr 是否可用。failed|blocked,交给用户决定重试或明确降级。paseo / native-agent / ocr / local)。先看整体,再看行级细节:
对人写代码逐文件审查,至少覆盖:
生成代码、锁文件、大数据文件可以抽样,但报告里要说明抽样范围。人写业务代码不能跳过不看。
把发现按严重度归类,并给出明确 verdict:
passed:没有 blocking;important 已修复、无重要项、或用户明确接受延后。changes-requested:有 blocking,或 important 多到会影响验收可信度。blocked:缺少关键输入、diff 归因无法判断、设计/实现状态不满足 review 前置条件,或本轮已启动独立 Task agent reviewer 但结果仍 pending / failed / blocked 且用户尚未确认降级。reviewer 字段(gate 锚点):{slug}-review.md 的 frontmatter reviewer 决定下游 worktree / commit / finish gate 是否放行,按「独立 Task agent reviewer(双环节)」实际完成情况写 subagent+ocr / subagent / ocr / self(语义见上节表)。任一已启动环节仍 pending / failed / blocked 时不定稿 passed,也不写 subagent。
blocking:必须先修。会导致功能不满足 design、数据/安全/权限风险、明显 bug、验收无法可信执行、严重架构倒退、测试完全覆盖不到关键风险。important:应该修;若用户决定延后,必须在 review 报告和 acceptance residual risk 中明确记录。nit:小的清晰度或一致性建议,不阻塞。suggestion:替代实现思路,不要求本次采用。learning:知识性说明,不要求动作。praise:记录值得保留的好做法;少量即可。residual-risk:review 无法完全消除的不确定性,需要 QA / acceptance 重点复核。不要把个人偏好升级成 blocking。blocking 必须能用仓库事实、design 契约、可靠工程原则或可复现实例支撑。
报告落在来源流程的 spec 目录,文件名 {slug}-review.md;feature 来源即 .codestable/features/{feature}/{slug}-review.md,issue/refactor 等放各自流程目录。
完整 frontmatter 与各章节模板见同包 references/report-template.md(按已加载 SKILL.md 所在目录解析,不要按业务仓库根目录猜路径)。没有某类 finding 时写 none,不要删除章节;下一轮复审要能对比。
下一步去向按「进入来源」表确定(feature 来源即 review-fix→cs-feat-impl、通过→cs-feat-qa;issue/refactor/ff 各回对应实现技能与提交收尾)。
如果有 blocking:
status: changes-requested。如果只有 important:
如果没有 blocking,且 important 已处理或被明确接受:
status: passed。cs-feat-qa)。ocr CLI,记录可用情况。status: blocked,没有进入 QA。{slug}-review.md(feature 即 .codestable/features/{feature}/{slug}-review.md)。status: passed 时 frontmatter reviewer 已按双环节实际完成写 subagent+ocr / subagent(或确属无 Task agent 能力的 ocr / self fallback)——这是下游 gate 的放行锚点。cs-feat-qa)。git diff。npx claudepluginhub liuzhengdongfortest/codestable --plugin codestableRuns an independent, clean-context code review of an implemented feature against its spec and acceptance criteria before shipping. Dispatches a reviewer subagent over the full diff, collects cited findings, and resolves each with you.
Performs a single adversarial review pass over an integrated branch diff, judging spec-compliance, code quality, and test adequacy together. Triggered via /review or 'review the changes'.
Reviews implementation code for bugs, security issues, and quality problems. Creates FIX tasks for blocking issues before merge. Invoked automatically via cw-validate context.