版本化來源查證
先確認實際版本,再用第一方來源支持可能隨時間改變的決定。
公開策展紀錄
為什麼推薦
- 明確工作
- 先確認實際版本,再用第一方來源支持可能隨時間改變的決定。
- 應該啟用
- API、規則或產品行為可能因版本與時間改變。
- 不該啟用
- 問題與版本無關,且本地證據已足以回答。
- 輸入
- 實際版本或日期
- 第一方來源
- 現有情境
- 輸出
- 有來源的決策
- 適用範圍
- 未驗證標記
- 和現有 Skill 的差異
- 它查證易變事實,不代替實作測試或一般研究寫作。
- 來源、授權與依賴
-
- 來源:已確認。已於 2026-08-08 確認來源 URL 可達,且 skills/source-driven-development/SKILL.md 存在於 addyosmani/agent-skills 的來源樹。
- 授權:已確認。已比對固定 commit 的上游 LICENSE,為 MIT License。
- 依賴:已確認。可取得第一方文件
- 完成條件
- 每個易變主張都有對應版本與第一方來源,未執行部分明確標記而不冒充驗證完成。
- 最小必要脈絡
- 目標版本或日期
- 要查證的具體決定
- 新鮮度與下次複審
- 變動風險:中;最晚於 2027-02-09 前複審。
- 證據層級
- 合成任務測試。已通過隔離式合成任務 evaluator;目前未蒐集採用率或真實使用成功率,不把測試通過冒充社群採用證據。 合成測試通過只代表在隔離案例中符合預期,不等於真實採用率、使用成功率或社群背書。
三類測試證據
提示:請依專案實際框架版本查官方文件後再修改設定。
預期:應啟用:先確認實際版本,再用第一方來源支持可能隨時間改變的決定。
結論:此提示要求依專案實際框架版本查閱官方文件後修改設定,直接符合 Skill 的版本偵測、第一方文件查證、實作與引用流程。
Codex isolated evaluator;read-only sandbox;合成、非敏感輸入;無外部副作用 · 2026-08-09
提示:把已提供的純文字標題改成繁體中文。
預期:不應啟用;邊界:問題與版本無關,且本地證據已足以回答。
結論:純文字標題翻譯不依賴框架版本或易變 API,屬於 Skill 明列不應啟用的版本無關工作;直接翻譯即可。
Codex isolated evaluator;read-only sandbox;合成、非敏感輸入;無外部副作用 · 2026-08-09
提示:專案鎖定某框架 6.2;列出確認 redirect 語法所需的版本證據、第一方來源與仍待執行的驗證。
預期:先辨識版本、限定第一方來源,標示尚未執行與不確定之處,再交由完成前驗證。
結論:依流程先鎖定 6.2,再限定版本相符的第一方資料,並把無法確認的語法與尚未執行的測試明確標示,符合預期證據。
Codex isolated evaluator;read-only sandbox;合成、非敏感輸入;無外部副作用 · 2026-08-09
啟用時機
使用可能更新的框架、API 或函式庫,而且正確性比憑記憶寫得快更重要時。
適合使用情境
- 建立會被多個專案複製的框架範本。
- 實作登入、路由、表單或資料擷取等版本敏感功能。
- 審查一段看似合理,但沒有來源的框架程式碼。
Skill 檔案
SKILL.md
工作流程
- 列出需要官方資料支持的技術決定。
- 只用第一方文件、規格或原始碼核對。
- 實作時附上來源,並標出仍無法驗證的部分。
使用注意事項
- 原文固定在上游 commit d2478bf0c73a6357df39a3ed6aff16acaa218843,上游 main 分支之後可能更新。
來源
來源頁標題:Source Driven Development 官方來源 Skill
來源識別名稱:source-driven-development
Grounds every implementation decision in official documentation. Use when you want authoritative, source-cited code free from outdated patterns. Use when building with any framework or library where correctness matters.
addyosmani/agent-skills@d2478bf/skills/source-driven-development/SKILL.md
開啟來源這個 Skill 在做什麼
要求框架與函式庫的實作決定能追溯到官方文件,並清楚標示未驗證部分。
為什麼有用
模型記得的 API 可能已經過期,也可能把不同版本的寫法混在一起。這個 Skill 先找官方文件,再用來源支持每個框架相關決定,讀者能自己回頭核對。
適合什麼場景
- 建立會被多個專案複製的框架範本。
- 實作登入、路由、表單或資料擷取等版本敏感功能。
- 審查一段看似合理,但沒有來源的框架程式碼。
延伸閱讀
---
name: source-driven-development
description: Grounds every implementation decision in official documentation. Use when you want authoritative, source-cited code free from outdated patterns. Use when building with any framework or library where correctness matters.
---
# Source-Driven Development
## Overview
Every framework-specific code decision must be backed by official documentation. Don't implement from memory — verify, cite, and let the user see your sources. Training data goes stale, APIs get deprecated, best practices evolve. This skill ensures the user gets code they can trust because every pattern traces back to an authoritative source they can check.
## When to Use
- The user wants code that follows current best practices for a given framework
- Building boilerplate, starter code, or patterns that will be copied across a project
- The user explicitly asks for documented, verified, or "correct" implementation
- Implementing features where the framework's recommended approach matters (forms, routing, data fetching, state management, auth)
- Reviewing or improving code that uses framework-specific patterns
- Any time you are about to write framework-specific code from memory
**When NOT to use:**
- Correctness does not depend on a specific version (renaming variables, fixing typos, moving files)
- Pure logic that works the same across all versions (loops, conditionals, data structures)
- The user explicitly wants speed over verification ("just do it quickly")
## The Process
```
DETECT ──→ FETCH ──→ IMPLEMENT ──→ CITE
│ │ │ │
▼ ▼ ▼ ▼
What Get the Follow the Show your
stack? relevant documented sources
docs patterns
```
### Step 1: Detect Stack and Versions
Read the project's dependency file to identify exact versions:
```
package.json → Node/React/Vue/Angular/Svelte
composer.json → PHP/Symfony/Laravel
requirements.txt / pyproject.toml → Python/Django/Flask
go.mod → Go
Cargo.toml → Rust
Gemfile → Ruby/Rails
```
State what you found explicitly:
```
STACK DETECTED:
- React 19.1.0 (from package.json)
- Vite 6.2.0
- Tailwind CSS 4.0.3
→ Fetching official docs for the relevant patterns.
```
If versions are missing or ambiguous, **ask the user**. Don't guess — the version determines which patterns are correct.
### Step 2: Fetch Official Documentation
Fetch the specific documentation page for the feature you're implementing. Not the homepage, not the full docs — the relevant page.
**Source hierarchy (in order of authority):**
| Priority | Source | Example |
|----------|--------|---------|
| 1 | Official documentation | react.dev, docs.djangoproject.com, symfony.com/doc |
| 2 | Official blog / changelog | react.dev/blog, nextjs.org/blog |
| 3 | Web standards references | MDN, web.dev, html.spec.whatwg.org |
| 4 | Browser/runtime compatibility | caniuse.com, node.green |
**Not authoritative — never cite as primary sources:**
- Stack Overflow answers
- Blog posts or tutorials (even popular ones)
- AI-generated documentation or summaries
- Your own training data (that is the whole point — verify it)
**Be precise with what you fetch:**
```
BAD: Fetch the React homepage
GOOD: Fetch react.dev/reference/react/useActionState
BAD: Search "django authentication best practices"
GOOD: Fetch docs.djangoproject.com/en/6.0/topics/auth/
```
After fetching, extract the key patterns and note any deprecation warnings or migration guidance.
When official sources conflict with each other (e.g. a migration guide contradicts the API reference), surface the discrepancy to the user and verify which pattern actually works against the detected version.
### Step 3: Implement Following Documented Patterns
Write code that matches what the documentation shows:
- Use the API signatures from the docs, not from memory
- If the docs show a new way to do something, use the new way
- If the docs deprecate a pattern, don't use the deprecated version
- If the docs don't cover something, flag it as unverified
**When docs conflict with existing project code:**
```
CONFLICT DETECTED:
The existing codebase uses useState for form loading state,
but React 19 docs recommend useActionState for this pattern.
(Source: react.dev/reference/react/useActionState)
Options:
A) Use the modern pattern (useActionState) — consistent with current docs
B) Match existing code (useState) — consistent with codebase
→ Which approach do you prefer?
```
Surface the conflict. Don't silently pick one.
### Step 4: Cite Your Sources
Every framework-specific pattern gets a citation. The user must be able to verify every decision.
**In code comments:**
```typescript
// React 19 form handling with useActionState
// Source: https://react.dev/reference/react/useActionState#usage
const [state, formAction, isPending] = useActionState(submitOrder, initialState);
```
**In conversation:**
```
I'm using useActionState instead of manual useState for the
form submission state. React 19 replaced the manual
isPending/setIsPending pattern with this hook.
Source: https://react.dev/blog/2024/12/05/react-19#actions
"useTransition now supports async functions [...] to handle
pending states automatically"
```
**Citation rules:**
- Full URLs, not shortened
- Prefer deep links with anchors where possible (e.g. `/useActionState#usage` over `/useActionState`) — anchors survive doc restructuring better than top-level pages
- Quote the relevant passage when it supports a non-obvious decision
- Include browser/runtime support data when recommending platform features
- If you cannot find documentation for a pattern, say so explicitly:
```
UNVERIFIED: I could not find official documentation for this
pattern. This is based on training data and may be outdated.
Verify before using in production.
```
Honesty about what you couldn't verify is more valuable than false confidence.
## Common Rationalizations
| Rationalization | Reality |
|---|---|
| "I'm confident about this API" | Confidence is not evidence. Training data contains outdated patterns that look correct but break against current versions. Verify. |
| "Fetching docs wastes tokens" | Hallucinating an API wastes more. The user debugs for an hour, then discovers the function signature changed. One fetch prevents hours of rework. |
| "The docs won't have what I need" | If the docs don't cover it, that's valuable information — the pattern may not be officially recommended. |
| "I'll just mention it might be outdated" | A disclaimer doesn't help. Either verify and cite, or clearly flag it as unverified. Hedging is the worst option. |
| "This is a simple task, no need to check" | Simple tasks with wrong patterns become templates. The user copies your deprecated form handler into ten components before discovering the modern approach exists. |
## Red Flags
- Writing framework-specific code without checking the docs for that version
- Using "I believe" or "I think" about an API instead of citing the source
- Implementing a pattern without knowing which version it applies to
- Citing Stack Overflow or blog posts instead of official documentation
- Using deprecated APIs because they appear in training data
- Not reading `package.json` / dependency files before implementing
- Delivering code without source citations for framework-specific decisions
- Fetching an entire docs site when only one page is relevant
## Verification
After implementing with source-driven development:
- [ ] Framework and library versions were identified from the dependency file
- [ ] Official documentation was fetched for framework-specific patterns
- [ ] All sources are official documentation, not blog posts or training data
- [ ] Code follows the patterns shown in the current version's documentation
- [ ] Non-trivial decisions include source citations with full URLs
- [ ] No deprecated APIs are used (checked against migration guides)
- [ ] Conflicts between docs and existing code were surfaced to the user
- [ ] Anything that could not be verified is explicitly flagged as unverified