بنقرة واحدة
build-cognitive-source-driven
源码驱动开发——每个框架决策由官方文档背书。当使用不熟悉的 API、引入新依赖或不确定方法签名,或提到"文档""官方""API reference"
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
源码驱动开发——每个框架决策由官方文档背书。当使用不熟悉的 API、引入新依赖或不确定方法签名,或提到"文档""官方""API reference"
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
结构化脑暴——发散探索 + 收敛评估。当想法模糊、面临开放性问题或需要方案对比,或提到"脑暴""想法""方案对比""怎么办"
恢复保存的工作上下文。当新 session 需要继续之前的工作,或提到"恢复""restore""继续上次"
保存工作上下文。当需要保存当前工作状态供后续 session 恢复,或提到"保存""save""checkpoint""挂起"
架构决策记录(ADR)。当面临技术选型、架构决策、方案取舍需要记录,或提到"ADR""决策记录""为什么这样做"
发布或导出检查 → Go/No-Go → 归档。当审查通过后需要上线或交付最终产物,或提到"发布""上线""ship""Go/No-Go"
合并 PR → 等待 CI → 验证生产。当 PR 已创建需要合并到主分支并验证部署,或提到"合并""merge""PR""land"
| name | build-cognitive-source-driven |
| description | 源码驱动开发——每个框架决策由官方文档背书。当使用不熟悉的 API、引入新依赖或不确定方法签名,或提到"文档""官方""API reference" |
每个框架特定的代码决策必须有官方文档支持。
"我感觉"、"我相信"、"是" → 都不是证据。
模糊 = 最差选项。要么验证,要么标注未验证。
DETECT → 识别出哪些代码是框架特定的
FETCH → 查找官方文档/源码验证 API 签名和行为
IMPLEMENT → 按文档正确的签名和模式实现
CITE → 在代码注释或对话中留下完整引用 URL
在写任何代码之前,如果它涉及:
→ 触发 Source-Driven 流程。不要凭记忆写。
DETECT 实际操作示例:
扫描 import 语句,识别出所有框架特定代码:
// 你准备写的代码中有这些 import:
import { PrismaClient } from '@prisma/client'; // → Prisma ORM
import { useRouter } from 'next/navigation'; // → Next.js App Router
import { z } from 'zod'; // → Zod 验证库
import { createHmac } from 'crypto'; // → Node.js 内置(查 Node 文档)
// DETECT 阶段产出:
// - Prisma: prisma.order.create() 的 nested write API → 需查 prisma.io docs
// - Next.js: useRouter() 的返回类型和方法 → 需查 nextjs.org docs
// - Zod: z.object() 的 refine/transform 链式 API → 需查 zod.dev docs
// - crypto: createHmac 的算法参数列表 → 需查 nodejs.org docs
每个 import → 一个待验证项。不要假设任何 API 签名。
来源优先级(从高到低):
| 优先级 | 来源 | 使用场景 |
|---|---|---|
| P0 | 官方文档 (.docs 站点) | API 签名、配置选项、breaking changes |
| P1 | GitHub 源码 / 类型定义 | 文档未覆盖的边界行为、默认值、返回类型 |
| P2 | 项目内已有正确代码 | 验证已经在这项目中成功使用过的模式 |
| P3 | 官方示例仓库 / 集成测试 | 复杂流程(OAuth、Webhook 处理)的端到端模式 |
| P4 | 社区(Stack Overflow / Blog) | 仅在以上来源均无答案时,且需要交叉验证 |
不使用 P4 当 P0-P3 都存在。
FETCH 实际操作示例:
DETECT 识别出:需要用 Prisma 的 nested write 创建订单
FETCH 执行:
1. WebSearch "prisma nested create official documentation"
2. 命中 P0: https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries
3. 定位到 "Nested writes" 章节
4. 验证 API 签名: prisma.order.create({ data: { items: { create: [...] } } })
5. 确认版本兼容: 项目用 Prisma 5.x,文档对应 5.x ✓
6. 记录来源 URL 用于 CITE 阶段
如果 P0 不可达 → 降级到 P1:
1. WebSearch "prisma github prisma-client relation queries"
2. 读 TypeScript 类型定义中的 create 方法签名
3. 在 CITE 中标注:来源为类型定义(P1),官方文档不可达
按验证过的签名和模式写代码。不要"我觉得这样也行"的改动——每个改动和文档一致。
// ref: https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries#nested-writes
// Prisma nested create — creates parent + children in one transaction
await prisma.order.create({
data: {
items: {
create: [{ name: 'Widget', quantity: 2 }],
},
},
});
引用规则:
文档说 X,现有代码做 Y?
│
├── 现有代码按旧版本文档写的 → 按最新文档修正
├── 现有代码有意为特定坑而偏离文档 → 找到那个坑(issue/PR/ADR)
└── 找不到为什么偏离 → STOP。问人类。
// ❌ Bad: 凭记忆写 API,不查文档
// "我记得 Prisma 的 create 可以嵌套,大概是这样:"
await prisma.order.create({
data: {
items: {
push: [{ name: 'Widget' }], // push 不存在!应该是 create
},
},
});
// 结果:运行时报错,浪费 30 分钟调试
// ✅ Good: DETECT → FETCH → IMPLEMENT → CITE
// DETECT: prisma.order.create + nested items → 需查 Prisma 文档
// FETCH: 搜索 "prisma nested create" → 定位官方文档
// IMPLEMENT: 按验证过的签名实现
// ref: https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries#nested-writes
await prisma.order.create({
data: {
items: {
create: [{ name: 'Widget', quantity: 2 }],
},
},
});
// ❌ Bad: 从 Stack Overflow 复制代码(P4 当 P0)
// "Stack Overflow 上说 useEffect 这样用"
useEffect(() => {
fetchData();
}, []); // 缺少依赖项,ESLint 警告被忽略
// ✅ Good: 查 React 官方文档
// DETECT: useEffect + 依赖数组 → 需查 React 文档
// FETCH: 搜索 "react useEffect dependencies official"
// ref: https://react.dev/reference/react/useEffect#my-effect-keeps-re-running-every-render
useEffect(() => {
fetchData();
// fetchData 已用 useCallback 包裹,依赖稳定
}, [fetchData]);
| 反模式 | 问题 | 修复 |
|---|---|---|
| 凭记忆写 API 调用 | 记忆可能是上个版本的,签名已变 | DETECT 阶段必须搜索官方文档验证签名 |
| 用 Stack Overflow 回答替代官方文档(P4 优先级当 P0 用) | 社区回答可能过时或针对不同版本 | P4 来源仅做参考,以 P0-P1 为准 |
| 跳过冲突处理直接用找到的方案 | 文档和现有代码矛盾时不解决 | 按冲突处理决策树逐级判断 |
| 文档说废弃但代码还在用 | 文档可能滞后于实际版本 | 以实际版本 CHANGELOG 为准,文档可能滞后 |
| 抄了示例代码没看上下文版本 | 示例可能对应不同大版本 | CITE 时记录文档版本和日期 |
| 同一个 API 在 P0 和 P1 源描述矛盾 | 官方文档和类型定义不同步 | 以 P0 为准,在 CITE 中注明差异 |
| 找到一个能跑的方案就停了 | 可能还有更优解或隐藏陷阱 | 至少检查 P0 和 P1 两个来源再决定 |
| 把 GitHub Issues 里的 workarounds 当正式 API | Issue 中的临时方案可能在下版本移除 | 仅作为 P3 参考,不作为正式 API 使用 |
| 说辞 | 现实 | 后果 |
|---|---|---|
| "我知道这个 API" | 可能是上个版本的记忆。验证 > 信任记忆。 | 上版本签名差异导致运行时崩溃,回滚成本 ≥ 1 小时 |
| "代码比文档好,直接读源码" | 源码告诉你"是什么",文档告诉你"为什么"和"做法"。先文档,再源码。 | 遗漏语义约束和副作用,隐式 bug 在上线后爆发,排查 ≥ 4 小时 |
| "文档太长懒得看" | 用搜索定位到具体章节。不需要从头读到尾。 | 错误参数顺序或遗漏必填字段,编译通过但行为错误,浪费 ≥ 30 分钟调试 |
| "这只是一个简单的 API 调用" | 简单调用也有版本差异。30 秒查文档 > 30 分钟调 bug。 | 版本差异导致隐式行为变更,测试未覆盖边界时上线后用户报错 |
| "类型定义就够了不用看文档" | 类型定义不含语义约束、副作用、废弃说明。读文档。 | 使用已废弃 API,下版本升级时全量重构,改动量 ≥ N 处调用点 |
| "我在另一个项目用过这个 API" | 版本可能不同。API 签名可能变了。验证。 | 跨项目版本差异导致参数不匹配,生产环境报错修复 ≥ 2 小时 |
| "CHANGELOG 太长了不想看" | 那正是 bug 藏身的地方。看 Breaking Changes 章节。 | 遗漏 breaking change,升级后批量运行时错误,影响 ≥ 所有使用该 API 的模块 |
| "这个框架很简单不需要文档" | 简单框架也有陷阱。React 的 useEffect 依赖数组就是反例。 | 隐式陷阱导致性能退化或内存泄漏,用户量增长后才暴露,修复成本 ≥ 1 周 |
| "示例代码能跑就行" | 能跑 ≠ 正确。示例可能用的是已废弃 API。 | 废弃 API 在下一版本移除后紧急修复,影响 ≥ 该功能所有下游依赖 |
| "官方文档有时候也是错的" | 个别错误不构成跳过文档的理由。发现文档错误时在 CITE 中标注。 | 跳过文档导致无来源验证的代码,审查时无法通过,返工 ≥ 重写该模块 |
注意来自人类伙伴的信号:
全部意味着:STOP。回到 DETECT。
| 失败场景 | 处理方式 |
|---|---|
| 官方文档不可达 | 降级到 P1 源(GitHub README、类型定义)。无任何文档则标记 Unknown 并告知人类伙伴 |
| P0 文档与实际代码行为矛盾 | 以代码行为为准,在 CITE 中记录差异。可能是文档版本滞后 |
| 无法确定框架版本 | 检查 package.json / lock 文件。仍然无法确定 → 标记 Unknown |
| 多个 P0 源互相矛盾 | 选最近更新日期的为准,记录所有矛盾源 |
| 找不到任何文档 | 标记 Unknown。读源码类型定义作为最后手段。不猜测 |
| 社区方案互相矛盾 | 不采信任何 P4 方案。回到 P0-P1 寻找权威来源。无权威来源则标记 Unknown |
每个经过 Source-Driven 流程的模块应产出以下结构(可在代码注释或 ADR 中记录):
### Source-Driven 验证记录
**模块**: [文件路径或模块名]
**框架/库**: [库名 + 版本号]
| 决策点 | API 签名 | 来源等级 | 引用 URL | 偏离说明 |
|--------|----------|----------|----------|----------|
| [具体决策] | [验证过的签名] | P0/P1/P2/P3 | [完整 URL] | 无 / [偏离原因] |
**冲突记录**(如有):
- [冲突描述] → [处理方式: 按最新文档修正 / 找到偏离原因 / 标记 Unknown]
**未验证项**(如有):
- [未验证决策] → 标记 Unknown,待人类伙伴确认