Files
2026-03-21 18:57:10 +08:00

8.4 KiB
Raw Permalink Blame History

Entry Examples

这里给出字段完整、格式规范的 entries 示例。

Learning: Correction

## [LRN-20250115-001] correction

**Logged**: 2025-01-15T10:30:00Z
**Priority**: high
**Status**: pending
**Area**: tests

### Summary
错误地认为 pytest fixtures 默认都是 function scope

### Details
编写 test fixtures 时,我假设所有 fixtures 都是 function scope。
用户纠正我:虽然 function scope 是默认值,但这个 codebase 的约定是,
数据库连接这类开销较大的资源应使用 module scope以提升 test 性能。

### Suggested Action
当创建涉及昂贵初始化DB、network的 fixtures 时,
不要默认用 function scope先检查现有 fixtures 的 scope 模式。

### Metadata
- Source: user_feedback
- Related Files: tests/conftest.py
- Tags: pytest, testing, fixtures

---

Learning: Knowledge Gap (Resolved)

## [LRN-20250115-002] knowledge_gap

**Logged**: 2025-01-15T14:22:00Z
**Priority**: medium
**Status**: resolved
**Area**: config

### Summary
项目使用 pnpm而不是 npm作为 package manager

### Details
尝试运行 `npm install`,但项目实际上使用 pnpm workspaces。
锁文件是 `pnpm-lock.yaml`,而不是 `package-lock.json`### Suggested Action
在默认假设 npm 之前,先检查是否存在 `pnpm-lock.yaml``pnpm-workspace.yaml`。
对于该项目,应使用 `pnpm install`### Metadata
- Source: error
- Related Files: pnpm-lock.yaml, pnpm-workspace.yaml
- Tags: package-manager, pnpm, setup

### Resolution
- **Resolved**: 2025-01-15T14:30:00Z
- **Commit/PR**: N/A - knowledge update
- **Notes**: 已加入 CLAUDE.md 作为后续参考

---

Learning: Promoted to CLAUDE.md

## [LRN-20250115-003] best_practice

**Logged**: 2025-01-15T16:00:00Z
**Priority**: high
**Status**: promoted
**Promoted**: CLAUDE.md
**Area**: backend

### Summary
API responses 必须包含来自 request headers 的 correlation ID

### Details
所有 API responses 都应回传请求中的 `X-Correlation-ID` header。
这是 distributed tracing 的要求。缺少该 header 的 response
会破坏 observability pipeline。

### Suggested Action
在 API handlers 中始终加入 correlation ID passthrough。

### Metadata
- Source: user_feedback
- Related Files: src/middleware/correlation.ts
- Tags: api, observability, tracing

---

Learning: Promoted to AGENTS.md

## [LRN-20250116-001] best_practice

**Logged**: 2025-01-16T09:00:00Z
**Priority**: high
**Status**: promoted
**Promoted**: AGENTS.md
**Area**: backend

### Summary
修改 OpenAPI spec 后必须重新生成 API client

### Details
修改 API endpoints 时,必须重新生成 TypeScript client。
忘记执行这一步会导致 type mismatches只在运行时才暴露出来。
generate script 还会顺带执行 validation。

### Suggested Action
把它加入 agent workflow只要有 API 变更,就运行 `pnpm run generate:api`### Metadata
- Source: error
- Related Files: openapi.yaml, src/client/api.ts
- Tags: api, codegen, typescript

---

Error Entry

## [ERR-20250115-A3F] docker_build

**Logged**: 2025-01-15T09:15:00Z
**Priority**: high
**Status**: pending
**Area**: infra

### Summary
Docker build 在 M1 Mac 上因 platform mismatch 失败

### Error

error: failed to solve: python:3.11-slim: no match for platform linux/arm64


### Context
- Command: `docker build -t myapp .`
- Dockerfile 使用 `FROM python:3.11-slim`
- 运行环境为 Apple SiliconM1/M2

### Suggested Fix
在 command 中加 platform flag`docker build --platform linux/amd64 -t myapp .`
或者更新 Dockerfile`FROM --platform=linux/amd64 python:3.11-slim`

### Metadata
- Reproducible: yes
- Related Files: Dockerfile

---

Error Entry: Recurring Issue

## [ERR-20250120-B2C] api_timeout

**Logged**: 2025-01-20T11:30:00Z
**Priority**: critical
**Status**: pending
**Area**: backend

### Summary
第三方 payment API 在 checkout 期间 timeout

### Error

TimeoutError: Request to payments.example.com timed out after 30000ms


### Context
- Command: POST /api/checkout
- timeout 设为 30s
- 高峰时段更容易发生(午间、晚间)

### Suggested Fix
实现 exponential backoff retry并考虑 circuit breaker pattern。

### Metadata
- Reproducible: yes (during peak hours)
- Related Files: src/services/payment.ts
- See Also: ERR-20250115-X1Y, ERR-20250118-Z3W

---

Feature Request

## [FEAT-20250115-001] export_to_csv

**Logged**: 2025-01-15T16:45:00Z
**Priority**: medium
**Status**: pending
**Area**: backend

### Requested Capability
将分析结果导出为 CSV 格式

### User Context
用户每周都会生成报表,需要把结果分享给非技术 stakeholders 在 Excel 中查看。
目前他们只能手工复制输出。

### Complexity Estimate
simple

### Suggested Implementation
为 analyze command 增加 `--output csv` flag。使用标准 csv module。
也可以沿用现有的 `--output json` 模式扩展。

### Metadata
- Frequency: recurring
- Related Features: analyze command, json output

---

Feature Request: Resolved

## [FEAT-20250110-002] dark_mode

**Logged**: 2025-01-10T14:00:00Z
**Priority**: low
**Status**: resolved
**Area**: frontend

### Requested Capability
dashboard 支持 dark mode

### User Context
用户经常在深夜工作,觉得亮色界面太刺眼。
另外还有几位用户也非正式提过这个需求。

### Complexity Estimate
medium

### Suggested Implementation
使用 CSS variables 管理颜色,并在 user settings 中加入 toggle。
同时考虑 system preference detection。

### Metadata
- Frequency: recurring
- Related Features: user settings, theme system

### Resolution
- **Resolved**: 2025-01-18T16:00:00Z
- **Commit/PR**: #142
- **Notes**: 已实现 system preference detection 和手动 toggle

---

Learning: Promoted to Skill

## [LRN-20250118-001] best_practice

**Logged**: 2025-01-18T11:00:00Z
**Priority**: high
**Status**: promoted_to_skill
**Skill-Path**: skills/docker-m1-fixes
**Area**: infra

### Summary
Docker build 在 Apple Silicon 上因 platform mismatch 失败

### Details
在 M1/M2 Mac 上构建 Docker images 时build 会失败,
因为 base image 没有 ARM64 variant。这个问题很常见
会影响很多开发者。

### Suggested Action
在 docker build command 中添加 `--platform linux/amd64`
或者在 Dockerfile 中使用 `FROM --platform=linux/amd64`### Metadata
- Source: error
- Related Files: Dockerfile
- Tags: docker, arm64, m1, apple-silicon
- See Also: ERR-20250115-A3F, ERR-20250117-B2D

---

Extracted Skill Example

当上面的 learning 被提炼为 skill 时,会变成:

File: skills/docker-m1-fixes/SKILL.md

---
name: docker-m1-fixes
description: "修复 Apple SiliconM1/M2上的 Docker build failures。在 docker build 因 platform mismatch errors 失败时使用。"
---

# Docker M1 Fixes

用于解决 Apple Silicon Mac 上的 Docker build 问题。

## Quick Reference

| Error | Fix |
|-------|-----|
| `no match for platform linux/arm64` | 在 build 时添加 `--platform linux/amd64` |
| Image runs but crashes | 使用 emulation或寻找兼容 ARM 的 base |

## The Problem

许多 Docker base images 没有 ARM64 variants。  
当在 Apple SiliconM1/M2/M3上构建时Docker 默认会尝试拉取 ARM64 images
从而导致 platform mismatch errors。

## Solutions

### Option 1: Build Flag (Recommended)

在 build command 中添加 platform flag

\`\`\`bash
docker build --platform linux/amd64 -t myapp .
\`\`\`

### Option 2: Dockerfile Modification

在 FROM instruction 中显式指定 platform

\`\`\`dockerfile
FROM --platform=linux/amd64 python:3.11-slim
\`\`\`

### Option 3: Docker Compose

为 service 添加 platform

\`\`\`yaml
services:
  app:
    platform: linux/amd64
    build: .
\`\`\`

## Trade-offs

| Approach | Pros | Cons |
|----------|------|------|
| Build flag | 不需要改文件 | 必须记得每次都加 flag |
| Dockerfile | 显式且可版本化 | 会影响所有 builds |
| Compose | 对开发场景方便 | 需要 compose |

## Performance Note

在 ARM64 上运行 AMD64 images 依赖 Rosetta 2 emulation。  
这对开发场景通常可行,但可能更慢。对于生产环境,应尽量寻找 ARM-native
alternatives。

## Source

- Learning ID: LRN-20250118-001
- Category: best_practice
- Extraction Date: 2025-01-18