agentsclimarketplace

Documentation and adrs

Skill vinvcn/addyosmani-agent-skills-zh/skills/documentation-and-adrs

记录决策和文档。用于做架构决策、变更公开 API、发布功能,或需要记录未来工程师和 agent 理解代码库所需的上下文时。From its SKILL.md

Install
npx -y skills add vinvcn/addyosmani-agent-skills-zh --skill documentation-and-adrs

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 23 stars23 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.1 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it

文档和 ADR

概览

记录决策,而不只是记录代码。最有价值的文档会捕捉 why:促成某个决策的上下文、约束和权衡。代码展示构建了 what;文档解释 why it was built this way,以及 what alternatives were considered。这些上下文对未来在代码库中工作的工程师和 agent 都很重要。

何时使用

  • 做出重要架构决策
  • 在多个竞争方案之间做选择
  • 添加或变更公开 API
  • 发布会改变用户可见行为的功能
  • 让新的团队成员(或 agent)熟悉项目
  • 当你发现自己反复解释同一件事时

不应使用的情况: 不要记录显而易见的代码。不要添加只是复述代码本身的注释。不要为一次性原型编写文档。

Architecture Decision Records (ADRs,架构决策记录)

ADR 捕捉重大技术决策背后的推理。它们是你能写出的最高价值文档。

何时编写 ADR

  • 选择框架、库或主要依赖
  • 设计数据模型或数据库 schema
  • 选择认证策略
  • 决定 API 架构(REST vs. GraphQL vs. tRPC)
  • 在构建工具、托管平台或基础设施之间做选择
  • 任何逆转成本高的决策

ADR 模板

将 ADR 存放在 docs/decisions/,并使用连续编号:

# ADR-001: Use PostgreSQL for primary database

## Status
Accepted | Superseded by ADR-XXX | Deprecated

## Date
2025-01-15

## Context
We need a primary database for the task management application. Key requirements:
- Relational data model (users, tasks, teams with relationships)
- ACID transactions for task state changes
- Support for full-text search on task content
- Managed hosting available (for small team, limited ops capacity)

## Decision
Use PostgreSQL with Prisma ORM.

## Alternatives Considered

### MongoDB
- Pros: Flexible schema, easy to start with
- Cons: Our data is inherently relational; would need to manage relationships manually
- Rejected: Relational data in a document store leads to complex joins or data duplication

### SQLite
- Pros: Zero configuration, embedded, fast for reads
- Cons: Limited concurrent write support, no managed hosting for production
- Rejected: Not suitable for multi-user web application in production

### MySQL
- Pros: Mature, widely supported
- Cons: PostgreSQL has better JSON support, full-text search, and ecosystem tooling
- Rejected: PostgreSQL is the better fit for our feature requirements

## Consequences
- Prisma provides type-safe database access and migration management
- We can use PostgreSQL's full-text search instead of adding Elasticsearch
- Team needs PostgreSQL knowledge (standard skill, low risk)
- Hosting on managed service (Supabase, Neon, or RDS)

ADR 生命周期

PROPOSED → ACCEPTED → (SUPERSEDED or DEPRECATED)
  • 不要删除旧 ADR。 它们捕捉历史上下文。
  • 当决策发生变化时,写一个新的 ADR,引用并取代旧 ADR。

行内文档

何时写注释

注释解释 why,而不是 what

// BAD: Restates the code
// Increment counter by 1
counter += 1;

// GOOD: Explains non-obvious intent
// Rate limit uses a sliding window — reset counter at window boundary,
// not on a fixed schedule, to prevent burst attacks at window edges
if (now - windowStart > WINDOW_SIZE_MS) {
  counter = 0;
  windowStart = now;
}

何时不要写注释

// Don't comment self-explanatory code
function calculateTotal(items: CartItem[]): number {
  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
}

// Don't leave TODO comments for things you should just do now
// TODO: add error handling  ← Just add it

// Don't leave commented-out code
// const oldImplementation = () => { ... }  ← Delete it, git has history

记录已知陷阱

/**
 * IMPORTANT: This function must be called before the first render.
 * If called after hydration, it causes a flash of unstyled content
 * because the theme context isn't available during SSR.
 *
 * See ADR-003 for the full design rationale.
 */
export function initializeTheme(theme: Theme): void {
  // ...
}

API 文档

对于公开 API(REST、GraphQL、库接口):

与类型一起内联记录(TypeScript 首选)

/**
 * Creates a new task.
 *
 * @param input - Task creation data (title required, description optional)
 * @returns The created task with server-generated ID and timestamps
 * @throws {ValidationError} If title is empty or exceeds 200 characters
 * @throws {AuthenticationError} If the user is not authenticated
 *
 * @example
 * const task = await createTask({ title: 'Buy groceries' });
 * console.log(task.id); // "task_abc123"
 */
export async function createTask(input: CreateTaskInput): Promise<Task> {
  // ...
}

REST API 使用 OpenAPI / Swagger

paths:
  /api/tasks:
    post:
      summary: Create a task
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTaskInput'
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '422':
          description: Validation error

README 结构

每个项目都应该有一份 README,覆盖:

# Project Name

One-paragraph description of what this project does.

## Quick Start
1. Clone the repo
2. Install dependencies: `npm install`
3. Set up environment: `cp .env.example .env`
4. Run the dev server: `npm run dev`

## Commands
| Command | Description |
|---------|-------------|
| `npm run dev` | Start development server |
| `npm test` | Run tests |
| `npm run build` | Production build |
| `npm run lint` | Run linter |

## Architecture
Brief overview of the project structure and key design decisions.
Link to ADRs for details.

## Contributing
How to contribute, coding standards, PR process.

Changelog 维护

对于已发布功能:

# Changelog

## [1.2.0] - 2025-01-20
### Added
- Task sharing: users can share tasks with team members (#123)
- Email notifications for task assignments (#124)

### Fixed
- Duplicate tasks appearing when rapidly clicking create button (#125)

### Changed
- Task list now loads 50 items per page (was 20) for better UX (#126)

面向 Agent 的文档

需要特别考虑 AI agent 的上下文:

  • CLAUDE.md / rules files — 记录项目约定,让 agent 遵循它们
  • Spec files — 保持 spec 更新,让 agent 构建正确的东西
  • ADRs — 帮助 agent 理解过去决策的原因(避免重复决策)
  • Inline gotchas — 防止 agent 掉入已知陷阱

常见合理化借口

合理化借口现实
“代码是自解释的”代码展示 what。它不展示 why、不展示哪些替代方案被拒绝,也不展示适用哪些约束。
“等 API 稳定后再写文档”当你记录 API 时,API 会更快稳定下来。文档是设计的第一道测试。
“没人读文档”Agent 会读。未来工程师会读。三个月后的你也会读。
“ADR 是额外负担”一份 10 分钟写完的 ADR,可以避免六个月后围绕同一决策进行 2 小时争论。
“注释会过时”关于 why 的注释是稳定的。关于 what 的注释会过时,所以只写前者。

危险信号

  • 架构决策没有书面理由
  • 公开 API 没有文档或类型
  • README 没有说明如何运行项目
  • 用注释掉的代码代替删除
  • TODO 注释已经存在数周
  • 有重大架构选择的项目中没有 ADR
  • 文档只是复述代码,而不是解释意图

验证

完成文档后:

  • 所有重大架构决策都有 ADR
  • README 覆盖 quick start、commands 和 architecture overview
  • API 函数有参数和返回类型文档
  • 已知陷阱在重要位置以内联方式记录
  • 没有保留注释掉的代码
  • Rules files(CLAUDE.md 等)是最新且准确的

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most docs writing skills give in ~2.4k tokens

Counted across 1,951 of the 3,904 authors here whose files we hold, read 2026-09-06

  • Use third-person for skill descriptionsin 54 of 1951, across 35 files
  • Start descriptions with Use whenin 43 of 1951, across 29 files
  • Run baseline scenarios before writing any skillin 40 of 1951, across 26 files
  • Use active voicein 40 of 1951, across 36 files
  • Map file responsibilities before defining tasksin 36 of 1951, across 29 files
  • Use checkbox syntax for tracking stepsin 35 of 1951, across 27 files
  • Ask one question at a timein 35 of 1951
  • Offer execution options after saving the planin 33 of 1951, across 24 files
  • Include complete code in every stepin 33 of 1951, across 27 files
  • Design units with clear boundaries and interfacesin 31 of 1951, across 23 files
  • Announce the skill usage at the startin 30 of 1951
  • Verify agent compliance after adding the skillin 29 of 1951, across 17 files

Said here and by no other author read

  • Use continuous numbering for ADR files
  • Address TODO comments immediately
  • Link to ADRs in the project architecture overview

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.