chore(marketplace): add karpathy-guidelines-plugin, update dev-coding/dev-review/review-checklist

Karpathy 四原则融合到 req 技能工作流 (REQ-20260421-0003):
- dev-coding: 新增 Step 0「验证优先」(Goal-Driven Execution)
- dev-review: 五视角 → 六视角,新增 Scope 审计者 (Simplicity + Surgical)
- review-checklist/general: 新增 Karpathy 反模式速查表
- karpathy-guidelines-plugin: 新增独立插件,含四原则全文 + 与 req 工作流映射
This commit is contained in:
2026-04-21 10:08:18 +09:30
parent 5a45916b2c
commit 7eed2b8f10
6 changed files with 237 additions and 7 deletions

View File

@@ -338,6 +338,18 @@
], ],
"strict": false "strict": false
}, },
{
"name": "karpathy-guidelines-plugin",
"source": "./skills-dev/karpathy-guidelines-plugin",
"description": "Karpathy 四原则编码行为守则Think Before Coding / Simplicity First / Surgical Changes / Goal-Driven Execution。已深度融合到 req 技能工作流各阶段,可独立激活用于任意编码场景。",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{ {
"name": "pull-request-plugin", "name": "pull-request-plugin",
"source": "./skills-dev/pull-request-plugin", "source": "./skills-dev/pull-request-plugin",

View File

@@ -73,6 +73,72 @@ ai-proj task append-doc --id <taskId> --content "实现说明"
--- ---
## Step 0验证优先Karpathy: Goal-Driven Execution
**编写任何代码前,必须先写验证脚本。** 规则来源Karpathy "Goal-Driven Execution" 原则。
> "Define success criteria. Loop until verified."
> "Fix the bug" → "Write a test that reproduces it, then make it pass"
### 执行流程
```
① 写验证脚本(按类型选择)
② 运行一遍,确认全部 FAIL证明功能确实不存在 / bug 确实存在)
③ 编码实现
④ 再次运行验证脚本,全部 PASS → 完成
```
### 后端验证脚本模板
实现 API 前,先写好所有 curl 命令并标注期望结果:
```bash
# 验证脚本REQ-XXXX [功能名]
BASE="http://localhost:8080"
TOKEN="<JWT>"
echo "=== T1: 正常创建 ==="
curl -s -X POST "$BASE/api/v1/xxx" \
-H "Authorization: Bearer $TOKEN" \
-d '{"name":"test"}' | jq '.code'
# 期望: 0
echo "=== T2: 缺少必填字段 ==="
curl -s -X POST "$BASE/api/v1/xxx" \
-H "Authorization: Bearer $TOKEN" \
-d '{}' | jq '.code'
# 期望: 非 0参数错误
echo "=== T3: 跨租户访问 ==="
curl -s -X GET "$BASE/api/v1/xxx/999" \
-H "Authorization: Bearer $TOKEN_OTHER_TENANT" | jq '.code'
# 期望: 403
```
**先运行 → 全部 FAIL → 编码 → 再次运行 → 全部 PASS**
### 前端验证脚本模板
实现页面前,先列出所有 `data-testid` 和期望的 DOM 状态:
```
验证清单(编码前先确认这些状态不存在 / 行为不正确):
- data-testid="xxx-btn-submit" 点击 → 列表刷新,行数增加 1
- data-testid="xxx-table" 行数 === API 返回 total
- data-testid="xxx-input-name" 空值提交 → 显示「请输入名称」提示
```
### 与 VP 三件套的关系
| VP 协议 | 验证优先对应 |
|---------|------------|
| VP-Data | 先在环境建好测试数据curl 确认成功) |
| VP-Steps | **即为本节验证脚本** — 编码前写好,编码后执行 |
| VP-Pass | 验证脚本每条命令的期望输出值 |
---
## Go 后端开发 ## Go 后端开发
### 分层架构 ### 分层架构

View File

@@ -1,13 +1,13 @@
--- ---
name: dev-review name: dev-review
description: 代码评审技能。视角对抗性扫描法,用于 PR 代码审查、安全评审、质量检查。当执行 /req cr 或独立 PR review 时自动激活。 description: 代码评审技能。视角对抗性扫描法(含 Karpathy Scope 审计),用于 PR 代码审查、安全评审、质量检查。当执行 /req cr 或独立 PR review 时自动激活。
--- ---
# 代码评审 Skill (dev-review) # 代码评审 Skill (dev-review)
## 概述 ## 概述
独立的代码评审技能,核心方法论是**视角对抗性扫描法**。 独立的代码评审技能,核心方法论是**视角对抗性扫描法**(五个传统安全/健壮性视角 + Karpathy Scope 审计视角)
**适用场景** **适用场景**
- `/req cr [REQ-ID]` — 需求流程中的代码评审阶段 - `/req cr [REQ-ID]` — 需求流程中的代码评审阶段
@@ -22,7 +22,7 @@ description: 代码评审技能。五视角对抗性扫描法,用于 PR 代码
| 上游 | 本技能输入 | 本技能输出 | 下游 | | 上游 | 本技能输入 | 本技能输出 | 下游 |
|------|-----------|-----------|------| |------|-----------|-----------|------|
| dev-coding | PR diff + 开发设计文档 | CR 报告(视角扫描 + 发现汇总 + 结论) | dev-test | | dev-coding | PR diff + 开发设计文档 | CR 报告(视角扫描 + 发现汇总 + 结论) | dev-test |
--- ---
@@ -67,7 +67,7 @@ description: 代码评审技能。五视角对抗性扫描法,用于 PR 代码
--- ---
## 视角对抗性扫描法 ## 视角对抗性扫描法
### 总览 ### 总览
@@ -146,6 +146,28 @@ file:line — Store.GetByID(id) 缺少 tenant_id 过滤,
- [ ] Redis 不可用时是否有降级方案?(缓存穿透到数据库) - [ ] Redis 不可用时是否有降级方案?(缓存穿透到数据库)
- [ ] token 过期/刷新逻辑是否正确access vs refresh 不同策略) - [ ] token 过期/刷新逻辑是否正确access vs refresh 不同策略)
### 视角6Scope 审计者Karpathy: Simplicity + Surgical
**思维模式**:每一行变更,需求有没有要求它?
> "Touch only what you must. Clean up only your own mess."
> "Every changed line should trace directly to the user's request."
扫描清单:
- [ ] diff 中变更的**每个文件**,是否都在 req-design 变更文件清单中?(超出清单 = 疑似顺手重构)
- [ ] 新增的函数/方法/结构体,每个都有对应 AC 需要它?
- [ ] 是否引入了"未来可能用到"的参数、配置项、可选字段、接口抽象?
- [ ] 是否修改了本次 AC 无关的注释、格式、变量名、import 顺序?
- [ ] 代码量是否合理?实现简单 AC 超过 200 行须说明必要性
"If you write 200 lines and it could be 50, rewrite it"
- [ ] 错误处理是否只覆盖真实会发生的场景?不为不可能的情况写防御代码
**典型发现示例**
```
backend/services/user_service.go:45 — 新增了 WithRetry 参数,但 AC 中无重试需求。
建议移除该参数AC 有需要时再添加。严重度Low
```
--- ---
## CR 报告模板 ## CR 报告模板
@@ -160,7 +182,7 @@ file:line — Store.GetByID(id) 缺少 tenant_id 过滤,
### 变更概要 ### 变更概要
{1-3 句描述本次变更的目的和范围} {1-3 句描述本次变更的目的和范围}
### 视角扫描结果 ### 视角扫描结果
#### 1. 攻击者视角 #### 1. 攻击者视角
{扫描发现,或 "未发现问题"} {扫描发现,或 "未发现问题"}
@@ -177,6 +199,9 @@ file:line — Store.GetByID(id) 缺少 tenant_id 过滤,
#### 5. 依赖者视角 #### 5. 依赖者视角
{扫描发现,或 "未发现问题"} {扫描发现,或 "未发现问题"}
#### 6. Scope 审计者视角Karpathy
{扫描发现,或 "所有变更文件均在设计清单范围内,无过度实现"}
### 审查发现汇总 ### 审查发现汇总
| # | 严重度 | 文件:行号 | <20><><EFBFBD>角 | 描述 | 建议 | | # | 严重度 | 文件:行号 | <20><><EFBFBD>角 | 描述 | 建议 |
@@ -221,7 +246,7 @@ file:line — Store.GetByID(id) 缺少 tenant_id 过滤,
| 文档存在 | CR 任务有附加文档 | | 文档存在 | CR 任务有附加文档 |
| 字数 | ≥ 500 字 | | 字数 | ≥ 500 字 |
| 代码引用 | 含 `file:line` 格式的引用 | | 代码引用 | 含 `file:line` 格式的引用 |
| 视角扫描 | 含全部 5 个视角章节 | | 视角扫描 | 含全部 6 个视角章节(含 Scope 审计者) |
| 结论章节 | 含明确的通过/不通过结论 | | 结论章节 | 含明确的通过/不通过结论 |
--- ---

View File

@@ -0,0 +1,9 @@
{
"name": "karpathy-guidelines",
"description": "Karpathy 四原则编码行为守则Think Before Coding / Simplicity First / Surgical Changes / Goal-Driven Execution。已深度融合到 req 技能工作流各阶段,可独立激活用于任意编码场景。",
"version": "1.0.0",
"author": "qiudl",
"source": "https://github.com/forrestchang/andrej-karpathy-skills",
"tags": ["coding-guidelines", "karpathy", "simplicity", "surgical", "goal-driven"],
"skills": ["karpathy-guidelines"]
}

View File

@@ -0,0 +1,97 @@
---
name: karpathy-guidelines
description: Karpathy 四原则编码行为守则。减少 LLM 常见编码错误:过度实现、静默假设、顺手重构、无验证标准。在任意编码场景激活。
---
# Karpathy Guidelines Skill
> 来源:[andrej-karpathy-skills](https://github.com/forrestchang/andrej-karpathy-skills)
> 在本项目中已深度融合到 req 技能工作流各阶段。
## 四原则
### 1. Think Before Coding编前推理
> "Don't assume. Don't hide confusion. Surface tradeoffs."
**在写第一行代码前:**
- 显式列出本次实现的假设(数据格式、边界条件、依赖接口)
- 如存在多种解读,列出所有方案(附估算),不要静默选择
- 如有更简单的实现方式,说出来
- 遇到不清晰的地方,停下来,指出混乱点,提问
**在 req 工作流中:** → 已嵌入 `req-prd` 的「Phase 0 假设倾倒协议」
---
### 2. Simplicity First简单优先
> "Minimum code that solves the problem. Nothing speculative."
**禁止:**
- 添加未被需求要求的功能
- 为单次使用的代码添加抽象
- 添加未被请求的"灵活性"或"可配置性"
- 为不可能发生的场景写错误处理
- 写了 200 行但 50 行就够的代码 → 重写
**自检:** "一个高级工程师看这段代码会觉得过度设计吗?" 如果是 → 简化
**在 req 工作流中:** → 已嵌入 `req-design` 过度设计检查 + `dev-review` 第六视角
---
### 3. Surgical Changes手术式修改
> "Touch only what you must. Clean up only your own mess."
**修改现有代码时:**
- 不要"顺手改进"相邻代码、注释或格式
- 不要重构没有损坏的代码
- 匹配现有代码风格,即使你会做不同的选择
- 发现不相关的死代码 → 提及但不删除
**你的变更造成的孤儿:**
- 删除你的变更导致的无用 import/变量/函数
- 不要删除已存在的死代码(除非被要求)
**铁律:** diff 中每一行修改都应该可以追溯到用户的需求
**在 req 工作流中:** → 已嵌入 `dev-review` 第六视角 + `check-surgical.sh` Harness 脚本
---
### 4. Goal-Driven Execution目标驱动执行
> "Define success criteria. Loop until verified."
**将请求转化为可验证目标:**
- "加验证" → "为无效输入写测试,然后让它通过"
- "修 bug" → "写一个复现 bug 的测试,然后让它通过"
- "重构 X" → "确保测试在重构前后都通过"
**多步任务需要说明计划:**
```
1. [步骤] → 验证: [检查项]
2. [步骤] → 验证: [检查项]
3. [步骤] → 验证: [检查项]
```
**在 req 工作流中:** → 已嵌入 `dev-coding` 的「Step 0 验证优先」+ VP 三件套协议
---
## 与 req 工作流的映射
| 原则 | 生效阶段 | 落地机制 |
|------|---------|---------|
| Think Before Coding | req-prd 启动前 | Phase 0 假设倾倒协议 |
| Simplicity First | req-design + dev-review | 过度设计检查 + 第六视角 |
| Surgical Changes | dev-review + CI | 第六视角 + check-surgical.sh |
| Goal-Driven Execution | dev-coding | Step 0 验证优先 + VP 三件套 |
## 反模式速查
| 场景 | ❌ LLM 常犯 | ✅ 正确做法 |
|------|-----------|-----------|
| "做个导出功能" | 静默假设格式/字段,直接实现 | 列出3种解读等用户确认 |
| "让搜索更快" | 同时加缓存+索引+async | 列出3种"更快"含义,确认再做 |
| "加折扣计算" | Strategy+Abstract+Enum50行 | 一个函数3行 |
| "修空邮件bug" | 顺手加用户名校验+类型注解 | 只改空邮件的那2行 |
| "修认证bug" | 直接修改,无验证标准 | 先写复现测试,修复后验证通过 |

View File

@@ -1,6 +1,27 @@
# 通用代码评审检查清单 # 通用代码评审检查清单
适用于所有项目,补充视角扫描法。 适用于所有项目,补充视角扫描法(五传统视角 + Karpathy Scope 视角)
## Karpathy 反模式速查Scope 审计者视角辅助)
基于 [andrej-karpathy-skills](https://github.com/forrestchang/andrej-karpathy-skills) EXAMPLES.md 提炼。
### ❌ 反模式 → ✅ 正确做法
| 场景 | 反模式LLM 常犯) | 正确做法 |
|------|-----------------|---------|
| "做个导出功能" | 静默假设文件格式/字段/分页,直接实现 | 列出3种解读API/文件/任务队列),问用户选哪种 |
| "让搜索更快" | 同时加缓存+索引+async200行 | 列出3种"更快"含义+估算,等确认再做 |
| "加个折扣计算" | Strategy+Abstract+Enum+DataClass50行 | `def calc_discount(amount, pct): return amount * pct / 100` |
| "修保存偏好的bug" | 顺手加 merge/validate/notify/cache | 只改最小范围,加注释"其他特性按需再加" |
| "修空邮件校验bug" | 顺手加用户名校验+类型注解+docstring | 只改空邮件的那2行 |
| "加日志到上传函数" | 改引号风格+加类型注解+重构return逻辑 | 只加日志,保持原有代码风格 |
| "修认证bug" | "我会检查代码并做改进"(无标准) | 先写测试复现bug再实现修复再跑测试 |
| "加限流" | 一次提交Redis+多策略+配置系统+监控 | 分4步每步独立可验证可部署 |
### 触发关键词(出现时加强 Scope 审计)
`export/导出` `faster/更快` `manage/管理` `notify/通知` `fix/修复` `improve/改进` `refactor/重构` `add/添加`
## API 设计 ## API 设计
- [ ] RESTful 命名是否规范?(复数名词、无动词) - [ ] RESTful 命名是否规范?(复数名词、无动词)