Skip to content
Back to skills

Autopilot Doctor

BSecurity

诊断项目工程健康度,评估 autopilot 兼容性并提供改进建议。当用户说"诊断"、"doctor"、"工程健康"、"为什么 autopilot 效果不好"时使用。

  • 27 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 12, 2026
ai-agentstypescriptpythonrustgojavaswiftbashnextjsnodeexpress

Works with

  • cli
  • api

Security analysis

B80/100
  • criticalExfiltrates credentials via HTTP — exact pattern from Snyk ToxicSkills study
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 4 files and shows the line behind each finding

Scanned October 12, 2026

npx -y skills add strzhao/autopilot --skill autopilot-doctor --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Autopilot Doctor?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Autopilot Doctor
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/strzhao-autopilot-doctor/badge)](https://www.skillsdirectory.com/skills/strzhao-autopilot-doctor)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: autopilot-doctor
description: 诊断项目工程健康度,评估 autopilot 兼容性并提供改进建议。当用户说"诊断"、"doctor"、"工程健康"、"为什么 autopilot 效果不好"时使用。
---

# Autopilot Doctor — 项目工程健康度诊断

你是 autopilot 的工程诊断器。你的职责是全面扫描当前项目的工程基础设施,评估其与 autopilot 全流程(红蓝对抗 + 五层 QA + 自动修复)的兼容性,并提供可执行的改进建议。

## 工作模式

- **诊断模式**(默认):扫描 → 评分 → 建议 → 保存报告
- **修复模式**(`--fix`):诊断 → 自动生成/修复配置文件(每个修复前用 AskUserQuestion 确认)

## 启动流程

1. 检测 `--fix` 参数 → 2. Step 0 技术栈检测 → 3. Wave 1 并行命令检测(Dim 1-4, 8-9, 11-13 客观部分)→ 4. Wave 2 串行 AI 判断(Dim 5-7, 10, 12-13 语义部分)→ 5. 加权总分 → 报告 → 6. 保存 `.autopilot/runtime/doctor-report.md` → 7. `--fix` 模式针对低分维度提供修复方案

---

## Step 0: 技术栈检测

**执行方式**:调 `detect_tech_stack()`(lib.sh SSOT),返回 JSON `{node,swift,go,python,rust,java,primary}`。

```bash
source "${CLAUDE_PLUGIN_ROOT:-.}/scripts/lib.sh" && detect_tech_stack .
```

`primary` 字段即主技术栈(swift 优先于 node——Swift 桌面 app 主导的 monorepo 视为 swift 项目),其余 bool 字段标注副栈。后续每个维度的检查命令都据此选择。

---

## Step 1: Wave 1 — 并行命令检测

**在同一轮响应中发出 8 个 Bash 调用**(每个维度一个,含 Dim 12 知识库数据收集),所有命令独立运行、互不依赖。每个命令的目标是收集事实数据,不做判断。所有命令都必须用 `|| true` 或 `2>/dev/null` 保护,避免非零退出码中断检测。

### Dim 1: 测试基础设施(权重 15%)

根据技术栈运行对应命令:

```bash
# L1: 单元/组件测试基础设施
cat package.json | grep -E '"(jest|vitest|mocha|ava|tap)"' 2>/dev/null; \
cat package.json | grep -E '"test"' 2>/dev/null; \
ls jest.config* vitest.config* .mocharc* 2>/dev/null; \
find src app lib __tests__ -name "*.test.*" -o -name "*.spec.*" -o -name "__tests__" 2>/dev/null | grep -v node_modules | head -20; \
find src app lib -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" 2>/dev/null | grep -v node_modules | grep -v ".test." | grep -v ".spec." | wc -l; \
find src app lib __tests__ -name "*.test.*" -o -name "*.spec.*" 2>/dev/null | grep -v node_modules | wc -l; \
cat package.json | grep -E '"(coverage|c8|istanbul|nyc)"' 2>/dev/null; \
echo "--- L2: API/集成测试 ---"; \
find . -path "*/api/*" -name "*.test.*" 2>/dev/null | grep -v node_modules | head -20; \
find . -name "*.route.test.*" 2>/dev/null | grep -v node_modules | head -10; \
cat package.json | grep -E '"(supertest|nock|msw)"' 2>/dev/null; \
find app/api -name "route.ts" -o -name "route.js" 2>/dev/null | wc -l; \
grep -rn 'router\.\|app\.get\|app\.post\|app\.put\|app\.delete' src/ lib/ 2>/dev/null | grep -v node_modules | grep -v test | wc -l; \
echo "--- L3: E2E 测试 ---"; \
cat package.json | grep -E '"(@playwright/test|playwright|cypress|puppeteer)"' 2>/dev/null; \
ls playwright.config* cypress.config* 2>/dev/null; \
find e2e tests/e2e -name "*.spec.*" -o -name "*.e2e.*" 2>/dev/null | head -10; \
cat package.json | grep -E '"test:e2e"' 2>/dev/null; \
echo "--- L4: 量化指标工具(Tier 5 门禁支撑) ---"; \
cat package.json | grep -E '"(@stryker-mutator/core|@stryker-mutator/jest-runner)"' 2>/dev/null; \
ls stryker.conf.js stryker.conf.json stryker.conf.cjs stryker.conf.mjs 2>/dev/null; \
cat package.json | grep -E '"(c8|nyc|istanbul)"' 2>/dev/null; \
ls .c8rc* .nycrc* 2>/dev/null
```

**`detect_quantitative_tools()` 函数引用**(业界对齐 `detect_*` 命名):

- **实现载体**:`plugins/autopilot/scripts/lib.sh` 的 `detect_quantitative_tools()`(SSOT,doctor 引用不重复实现)
- **检测项**:5 类工具(stryker / c8 / nyc / istanbul / jest_coverage),检测口径(依赖名 + config 文件)见 autopilot skill 的 `references/quantitative-metrics.md` §2 接口契约表格
- **输出**:JSON `{stryker: bool, c8: bool, nyc: bool, istanbul: bool, jest_coverage: bool}`
- **下游消费**:Dim 1 评分 + doctor-report.md "工具安装建议"段(缺失时给字面命令 `npm install --save-dev @stryker-mutator/core @stryker-mutator/jest-runner c8`)

**L2 路由检测策略**:优先用 `find app/api` 检测 Next.js App Router 路由数,如果为 0 则用 `grep router/app.get` 检测 Express/Fastify 路由数。两者都为 0 时判定"项目无 API 路由,L2 不适用",不因此降分。

**测试金字塔三层分析**:根据检测结果判定各层覆盖状态:
- **L1(单元/组件)**:有测试框架 + ≥1 测试文件 = ✅
- **L2(API/集成)**:有 API 路由测试文件 或 有 supertest/nock/msw 依赖 = ✅;有 API 路由但无测试 = ❌;无 API 路由 = N/A
- **L3(E2E)**:有 Playwright/Cypress 依赖 + 配置文件 + E2E 测试文件 = ✅;缺少任一 = ❌

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | 框架 + 配置 + 覆盖率工具 + **三层金字塔覆盖**(L1 + L2 + L3 全 ✅) |
| 8 | 框架 + 配置 + 覆盖率 + **两层覆盖**(如 L1 + L2,缺 L3) |
| 7 | 框架 + 配置 + ≥5 测试文件 + **至少两层覆盖**(或 L2/L3 为 N/A 的项目) |
| 5-6 | 框架 + 配置 + 实际测试但**仅有 L1 单元测试层**(有 API 路由却无 L2,或缺 L3) |
| 3-4 | 框架已安装但无测试文件或 test script 不可用 |
| 1-2 | 有 test script 但框架不明或配置错误 |
| 0 | 完全没有测试基础设施 |

### Dim 2: 类型安全(权重 13%)

```bash
# TypeScript 检查
ls tsconfig*.json 2>/dev/null; \
cat tsconfig.json 2>/dev/null | grep -E '"strict"|"noImplicitAny"|"strictNullChecks"'; \
npx tsc --version 2>/dev/null; \
cat package.json | grep -E '"typescript"' 2>/dev/null
# Python: ls mypy.ini pyproject.toml 2>/dev/null | xargs grep -l "mypy" 2>/dev/null
# Go/Rust: 内置类型系统,检查是否有 go vet / clippy 配置
```

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | 类型系统 + strict 模式 + noEmit 可用 |
| 7-8 | 类型系统已配置但 strict 未完全开启 |
| 5-6 | 类型系统已安装但配置宽松 |
| 3-4 | 有 TypeScript 但大量 `any` 或 `@ts-ignore` |
| 1-2 | 部分文件使用 JSDoc 类型注释 |
| 0 | 纯 JS 无任何类型标注(Go/Rust 此项为 10,内置类型系统) |

### Dim 3: 代码质量与健壮性(权重 12%)

```bash
# Lint + Format
ls .eslintrc* eslint.config* biome.json .prettierrc* 2>/dev/null; \
cat package.json | grep -E '"(eslint|biome|prettier)"' 2>/dev/null; \
cat package.json | grep -E '"(lint|lint:fix|format)"' 2>/dev/null; \
# 错误处理基础设施
echo "--- 错误处理 ---"; \
grep -rn 'ErrorBoundary\|error-boundary' src/ app/ 2>/dev/null | head -3; \
grep -rn 'class.*Error extends\|extends Error' src/ lib/ 2>/dev/null | head -5; \
grep -rn 'app\.use.*err\|errorHandler\|onError' src/ lib/ app/ 2>/dev/null | head -3; \
# 死代码检测工具
cat package.json | grep -E '"(knip|ts-prune|unimported|depcheck)"' 2>/dev/null
```

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | Lint + Format + 自动修复 + 系统化错误处理(ErrorBoundary/自定义 Error class/全局 error handler 至少两项) |
| 7-8 | Lint + Format + 至少一项错误处理基础设施 |
| 5-6 | 仅有 Lint 或仅有 Format |
| 3-4 | 工具已安装但配置过期或有大量 disable 注释 |
| 0 | 无代码质量工具 |

### Dim 4: 构建系统(权重 12%)

```bash
cat package.json | grep -E '"(build|dev|start)"' 2>/dev/null; \
ls next.config* vite.config* webpack.config* tsup.config* rollup.config* 2>/dev/null; \
ls dist/ build/ .next/ out/ 2>/dev/null; \
# DB Migration 工具
echo "--- DB Migration ---"; \
cat package.json | grep -E '"(prisma|drizzle-kit|knex|typeorm|sequelize-cli)"' 2>/dev/null; \
ls prisma/schema.prisma drizzle.config.* knexfile.* 2>/dev/null; \
ls -d prisma/migrations/ drizzle/ migrations/ 2>/dev/null
```

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | build + dev 命令 + 构建工具配置 + 输出目录 + DB migration 工具(如项目有数据库) |
| 7-8 | build + dev 命令可用 |
| 5-6 | 有 build 命令但 dev server 缺失(或反之) |
| 3-4 | 构建配置存在但命令不工作 |
| 0 | 无构建系统(纯脚本项目可跳过此维度) |

### Dim 8: Git 工作流(权重 8%)

```bash
ls .husky/ .lefthook.yml .pre-commit-config.yaml 2>/dev/null; \
cat package.json | grep -E '"(husky|lefthook|lint-staged|commitlint)"' 2>/dev/null; \
ls .commitlintrc* commitlint.config* 2>/dev/null; \
echo "--- worktree ---"; \
cat .autopilot/runtime/worktree-links.txt 2>/dev/null; \
ls .env* 2>/dev/null; \
grep -rn 'PORT=' .env* 2>/dev/null | head -5; \
cat package.json 2>/dev/null | grep -E '"(dev|start)"' 2>/dev/null; \
git worktree list 2>/dev/null; \
echo "--- env template ---"; \
ls .env.example .env.template .env.sample 2>/dev/null; \
cat package.json | grep -E '"(envalid|@t3-oss/env|dotenv-safe)"' 2>/dev/null; \
# === worktree 健康抽查(v3.25+,输出原始信号供 AI 判断)===
echo "--- worktree health ---"; \
git worktree list --porcelain 2>/dev/null | awk '/^worktree / {n++; if (n==1) next; print $2}' | while read -r wt; do \
  echo "[worktree: $wt]"; \
  if [ -d "$wt/.autopilot" ]; then \
    find "$wt/.autopilot" -maxdepth 1 -type l 2>/dev/null | while read -r link; do \
      [ ! -e "$link" ] && echo "  broken-symlink: $(basename "$link")"; \
    done; \
  else \
    echo "  missing: .autopilot/"; \
  fi; \
  [ -f "$wt/package.json" ] && [ ! -d "$wt/node_modules" ] && echo "  missing: node_modules"; \
  [ ! -f "$wt/local-config.json" ] && echo "  missing: local-config.json"; \
done || true
```

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | pre-commit hooks + commitlint + lint-staged + worktree-links 配置 + 端口无硬编码 + .env.example 存在 |
| 7-8 | pre-commit hooks + lint-staged + (.env 可链接或 worktree-links 存在) + (.env.example 或 env schema validation) |
| 5-6 | 仅 pre-commit hooks 或 commitlint + 无 worktree 适配 |
| 3-4 | 工具已安装但 hooks 未激活 |
| 0 | 无 Git 工作流工具 |

### Dim 9: 依赖与安全基线(权重 6%)

```bash
# Lock 文件检查
ls package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null; \
# 漏洞检查(快速,不阻塞)
npm audit --json 2>/dev/null | head -5 || echo "npm audit not available"; \
# 过时依赖(仅计数)
npm outdated 2>/dev/null | wc -l || echo "0"; \
# 安全基线
echo "--- 安全基线 ---"; \
cat .gitignore 2>/dev/null | grep -E '\.env|\.pem|credentials|secret' | head -5; \
cat package.json | grep -E '"(zod|yup|joi|superstruct|valibot)"' 2>/dev/null; \
ls .gitleaks.toml .pre-commit-config.yaml 2>/dev/null; \
grep -r 'audit\|snyk\|codeql' .github/workflows/ 2>/dev/null | head -5
```

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | Lock 文件 + 0 漏洞 + .gitignore 覆盖敏感文件 + CI 有安全扫描 + input validation 库 |
| 7-8 | Lock 文件 + 低漏洞 + .gitignore 覆盖 .env/.pem + input validation 库 |
| 5-6 | Lock 文件 + .gitignore 基本覆盖 |
| 3-4 | Lock 文件缺失或 .gitignore 不覆盖 .env |
| 0 | 无依赖管理 |

### Dim 11: 性能保障(权重 6%)

检测项目是否建立了性能监控体系,覆盖三个方向:**P1 Lighthouse CI**(Core Web Vitals 评分预算)、**P2 Playwright 性能断言**(page.metrics / Web Vitals 采集)、**P3 Bundle Size 监控**(构建产物体积阈值)。详细工具清单、评分案例、--fix 模板见 [references/performance-testing.md](references/performance-testing.md)。

**适用性**:有前端构建配置(next/vite/webpack + build 产出 HTML)→ 适用(全部 P1/P2/P3)| 纯库/CLI(有 dist/ 但无 HTML)→ 仅 P3 | 非 Web 项目 → N/A(满分不计入)。

**Wave 1 数据收集**(1 个 Bash 调用):扫描性能工具依赖(@lhci/cli、size-limit)、配置文件(.lighthouseci.json、.size-limit.json)、Playwright 性能相关代码(page.metrics、PerformanceObserver)、CI 性能步骤、构建产物体积。

**评分指引**:完整链路 = 工具 + 配置 + 预算断言。按成熟度递减:完整链路 ≥2 方向 → 9-10 | 完整链路 1 方向 → 7-8 | 有工具无配置 → 5-6 | 有 E2E 工具但无性能用法 → 3-4 | 有 build 但无监控 → 1-2 | N/A → 满分不计入。

**Dim 12 Wave 1 数据收集**(追加到 Wave 1 并行命令中,1 个 Bash 调用):Wave 1 收集原始数据,Wave 2 由 AI 完成语义判断(详见 Step 2 Dim 12 章节)。

```bash
# 知识库存在性检测(v3.35+ 二级分层:knowledge/ 入库 + runtime/ gitignored)
ls .autopilot/ 2>/dev/null; \
ls .autopilot/knowledge/ 2>/dev/null; \
ls .autopilot/knowledge/index.md .autopilot/knowledge/decisions.md .autopilot/knowledge/patterns.md 2>/dev/null; \
ls .autopilot/knowledge/domains/ 2>/dev/null; \
wc -l .autopilot/knowledge/decisions.md .autopilot/knowledge/patterns.md 2>/dev/null; \
find .autopilot/knowledge/domains/ -name "*.md" -exec wc -l {} + 2>/dev/null; ls .autopilot/knowledge/inbox/ 2>/dev/null | wc -l; \
# 索引一致性:index.md 条目数 vs 实际内容条目数(### [YYYY-MM-DD] 标题数)
grep -c "^\- \[" .autopilot/knowledge/index.md 2>/dev/null || echo "0"; \
grep -rh "^### \[" .autopilot/knowledge/decisions.md .autopilot/knowledge/patterns.md .autopilot/knowledge/domains/ 2>/dev/null | wc -l; \
# 元信息完整性:抽样检查(取前 30 行)
head -30 .autopilot/knowledge/decisions.md 2>/dev/null; \
head -30 .autopilot/knowledge/patterns.md 2>/dev/null; \
# 文件分类正确性(v3.35 三层防御 Layer 3)
echo "--- gitignore 规则 ---"; \
grep -E '\.autopilot/runtime/|local-config\.json' .gitignore 2>/dev/null || echo "MISSING: autopilot 产物 ignore 规则(.autopilot/runtime/ 和 local-config.json)"; \
echo "--- runtime 误入库检测 ---"; git ls-files .autopilot/runtime 2>/dev/null; \
echo "--- runtime 体积(v3.65+,>500MB 时 RUNTIME-SIZE-WARN 行,AI 须给清理建议)---"; source "${CLAUDE_PLUGIN_ROOT:-.}/scripts/lib.sh" 2>/dev/null && detect_runtime_size .autopilot/runtime 2>/dev/null || echo "0"
```

### Dim 13: AI 可观测性/调试友好度(权重 5%)— Wave 1 客观收集
**与 Dim 10 关键区分**:Dim 10 = 测试可写性,Dim 13 = 运行时可观测可调试性,二者正交。**Wave 1 收集**:调 `detect_ai_observability .`(lib.sh SSOT,调用方式同 Step 0 `detect_tech_stack`),输出 JSON `{struct_log,log_rotation,cli_diagnostic,health_json,cache_clean,debug_switch}` 各 `{status,value}`,`status ∈ {pass,warn,na}`。**N/A**:纯脚本项目 → 6 客观维全 na → 满分不计入(对齐 Dim 11/12)。

---

## Step 2: Wave 2 — 串行 AI 判断

这些维度需要阅读文件内容并做综合判断,不能简单用命令输出打分。

### Dim 5: CI/CD Pipeline(权重 8%)

**检查**:读取 `.github/workflows/`、`.gitlab-ci.yml`、`Jenkinsfile` 等 CI 配置文件。

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | CI 配置 + 包含 test/lint/type-check/build 四项质量门 + PR 检查 |
| 7-8 | CI 配置 + 至少 2 项质量门 |
| 5-6 | CI 配置存在但仅做 build 或 deploy |
| 3-4 | CI 配置过期或不完整 |
| 0 | 无 CI/CD 配置 |

### Dim 6: 项目结构(权重 7%)

**检查**:用 `ls -la` 和 `find` 扫描顶层目录结构。

**评判标准**:
- 是否有清晰的 src/lib/app 目录
- 测试文件是否与源文件共存或有独立目录
- 是否有明确的模块边界(如 features/modules 目录)
- 命名是否一致(camelCase/kebab-case/snake_case 混用是减分项)

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | 清晰分层 + 一致命名 + 模块边界明确 |
| 7-8 | 有组织结构但部分不一致 |
| 5-6 | 基本结构存在但扁平或混乱 |
| 3-4 | 文件散落在根目录,无明确组织 |
| 0 | 单文件或完全无结构 |

### Dim 7: 文档质量(权重 6%)

**检查**:读取 `CLAUDE.md`、`README.md`、查看是否有 JSDoc/docstring。

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | CLAUDE.md(内容丰富)+ README + API 文档 |
| 7-8 | CLAUDE.md 存在 + README 完整 |
| 5-6 | 仅 README 或仅 CLAUDE.md |
| 3-4 | README 存在但过于简略(< 10 行) |
| 0 | 无文档 |

### Dim 10: AI 就绪度(权重 8%)

这是 autopilot doctor 与传统工具的核心差异化维度。

**Wave 1 前置数据收集**(追加到 Wave 1 并行命令中):
```bash
# API Schema 可发现性
ls openapi.yaml openapi.json swagger.json swagger.yaml schema.graphql 2>/dev/null; \
cat package.json | grep -E '"(tsoa|@nestjs/swagger|trpc|graphql-codegen)"' 2>/dev/null; \
# Mock 基础设施
cat package.json | grep -E '"(msw|nock)"' 2>/dev/null; \
ls -d __mocks__ src/__mocks__ __fixtures__ test/fixtures 2>/dev/null; \
# 类型定义集中度
ls -d types/ src/types/ 2>/dev/null
```

**检查项**(Wave 2 AI 判断):
- **CLAUDE.md 深度**:是否包含架构说明、开发规范、常用命令
- **测试模板可复制性**:现有测试文件是否有清晰模式可供 AI 参考
- **红队测试可行性**:项目是否有足够接口定义让红队仅凭设计文档就能写测试
- **AI 友好的 script**:package.json scripts 是否语义清晰、可独立运行
- **API Schema 可发现性**:有 OpenAPI/GraphQL schema 则红队可写契约测试
- **Mock 基础设施**:有 msw/nock + fixtures 则红队/蓝队写测试效率更高
- **可测试性设计**:抽样 1-2 个核心模块,检查依赖是否通过参数注入而非硬 import

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | CLAUDE.md 丰富 + 测试模板清晰 + scripts 语义化 + API schema 存在 + mock 基础设施 + 集中类型定义 |
| 7-8 | CLAUDE.md 存在 + 有参考测试 + 基本 scripts + (mock 基础设施或 API schema 二选一) |
| 5-6 | CLAUDE.md 简略 + 少量测试可参考 |
| 3-4 | 无 CLAUDE.md + 有少量测试 |
| 0 | 无 CLAUDE.md + 无测试 + scripts 不清晰 |

### Dim 12: 知识库健康度(权重 5%)

**N/A 条件**:项目无 `.autopilot/` 目录,或 `decisions.md`/`patterns.md`/`domains/` 均为空 → **满分不计入**(与 Dim 11 N/A 处理一致)。

**检查项**(Wave 2 AI 语义判断,基于 Wave 1 Bash 输出):

1. **过拟合密度**:扫描 `Lesson`/`Choice` 字段行(**跳过** `Evidence`/`Background`/`Trade-offs` 行),检测其中包含版本号、文件路径、行号、具体计数的条目数量
2. **重复/冗余主题**:检测 tags 重叠 ≥3 且语义相似的条目对
3. **文件大小健康度**:全局文件(knowledge/decisions.md / knowledge/patterns.md)≤100 行、领域文件(knowledge/domains/*.md)≤150 行
4. **索引一致性**:`knowledge/index.md` 中的 `- [日期]` 条目数 vs 内容文件中实际 H3 三级标题(`[日期]` 开头)数量,偏差 ≤1 为正常
5. **元信息完整性**:抽样 entry 是否有 `[日期]` + `<!-- tags: ... -->` + 必需字段(Lesson 或 Choice)
6. **文件分类正确性**(v3.35+ 三层防御 Layer 3,C3 契约):
   - `.gitignore` 必须包含 `.autopilot/runtime/` 规则(缺失 = 严重扣分,导致运行时产物被误入库)
   - `git ls-files .autopilot/runtime` 必须输出空(非空 = 有历史误入库文件,需 `git rm --cached` 清理)
   - 若 `.autopilot/knowledge/` 目录不存在但 `.autopilot/decisions.md` 顶层存在 = 旧布局未迁移,建议运行 `/autopilot <任何目标>` 触发 setup.sh 自动迁移
7. **inbox 积压**:Wave 1 收集的 inbox 文件计数 > 10 → 输出积压计数并提醒用户执行收编(协议见 autopilot knowledge-engineering.md 的 Collection Protocol);≤ 10 不提醒

**AI 判断指引**:仅分析 Wave 1 收集的数据。重点扫描 `Lesson`/`Choice` 字段,**严格跳过** `Evidence`/`Background` 字段——后者本来就应该包含具体值,不构成过拟合。

**评分标准**(0-10):

| 分数 | 条件 |
|------|------|
| 9-10 | 全部 Lesson/Choice 抽象一致 + 无重复主题 + 文件大小健康 + 索引无断裂 + 元信息完整 |
| 7-8 | ≤2 条过拟合 **或** ≤1 对重复主题 + 其余检查通过 |
| 5-6 | 3-5 条过拟合 **或** 2-3 对重复主题 **或** 有文件超阈值 |
| 3-4 | 大量过拟合(>5 条)**或** 索引与实际严重不一致(偏差 >3) |
| 0-2 | 知识文件损坏、无法解析,或几乎所有 Lesson 含具体值 |

**Top 3 建议输出格式**(评分 ≤8 时):

- **过拟合建议**:`条目标题` → 当前 Lesson 一句话 → 建议泛化改写一句话
- **重复合并建议**:`条目 A` + `条目 B` → 合并方向(谁的 Lesson 更抽象则保留并扩充 Evidence)
- **超阈值建议**:`文件名` 当前 X 行 → 建议拆分到 `domains/{domain}.md`

#### Dim 13 续:Wave 2 AI 判断(语义维)
**N/A**:`detect_ai_observability` 6 客观维全 na → 满分不计入(对齐 Dim 11/12)。**检查项**:① 6 客观维汇总(pass 计分)② error code 可读性(稳定 code vs 纯 message)③ 命名空间一致性(跨目录/产物/env 前缀统一)④ debug/prod 隔离(编译时删除 vs 运行时跳过)。**评分**(0-10):9-10 = 6 客观维全 pass + error code 稳定枚举 + 命名空间统一 + debug/prod 编译时隔离;7-8 = ≥4 客观维 pass + 部分 code + 命名空间基本一致;5-6 = 2-3 客观维 pass + error 仅 message + 命名空间混用;3-4 = ≤1 客观维 pass + 无 error code + 命名空间混乱;0-2 = 全 warn/missing。**修复建议引用**:非 PASS 维度引用 [references/ai-observability-principles.md](references/ai-observability-principles.md) 对应 `DIM-13-XX` 片段(非 scaffold)。

### Dim 14: 命脉链路 readiness 覆盖(权重 7%)— Wave 2 AI 判断(纯语义维)
**命脉穿透审计**(liveness≠readiness,对齐 07-21 little-bee 媒体 404 教训):识别本项目「缺了即产品报废」的核心链路(命脉——用户感知的核心价值路径,非基础设施),假设它以最可能的方式回归(配置固化 / 外部依赖断裂 / 路径错位 / 关键 env 丢失),追问现有每一层验证(单测 / API / E2E / 部署健康 / build 断言)能否在它造成线上影响前抓到——只有至少一层在**与生产同构的环境**里真正覆盖该命脉,才算 readiness 达标。给 AI 认知方向,**不是穷举清单**(不同项目命脉不同,AI 应自主识别本项目特有命脉与盲区,对齐 skill best practice「High freedom 开放田野」)。**判分四档**:`na` = 项目无命脉链路(纯 CLI/库/脚本/无用户感知核心价值路径),满分不计入(对齐 Dim 11/12/13);`pass` = 至少一层验证在 prod 同构环境覆盖命脉(prod 镜像 E2E / readiness 探活端点 / build 产物断言);`warn` = 有命脉探活但只在 dev 侧(E2E 全跑 dev server)/ health 探首页不探命脉 / 无 build 产物断言;`fail` = 命脉链路无任何验证覆盖。**审计输出**:命脉链路清单 + 代表性回归假设 + 逐层覆盖判定(哪层为何抓不到)+ 四档结论。**非 PASS(warn/fail)触发 doctor 评分降级**——即使其他维度全绿,命脉无 prod 同构覆盖也不评 A 级。**修复建议引用**:非 PASS 引用 [references/critical-path-readiness-principles.md](references/critical-path-readiness-principles.md) 的 `CP-XX` 认知锚点驱动 AI 给修复方向(非 scaffold,给方向不给模板)。

---

## Step 3: 计算总分与生成报告

### 加权总分计算

每个维度满分 10 分,加权后映射到 0-100 分制:

```
总分 = Σ(维度分数 × 权重) × 10
```

例如:全部 10 分 → (10×0.20 + 10×0.15 + ... + 10×0.05) × 10 = 10 × 10 = 100

权重表(新增命脉 readiness 维,其余 13 维等比微调 sum=1.00,14 维):

| 维度 | 权重 |
|------|------|
| Dim 1: 测试基础设施 | 0.12 |
| Dim 2: 类型安全 | 0.10 |
| Dim 3: 代码质量与健壮性 | 0.09 |
| Dim 4: 构建系统 | 0.09 |
| Dim 5: CI/CD Pipeline | 0.06 |
| Dim 6: 项目结构 | 0.07 |
| Dim 7: 文档质量 | 0.06 |
| Dim 8: Git 工作流 | 0.07 |
| Dim 9: 依赖与安全基线 | 0.06 |
| Dim 10: AI 就绪度 | 0.06 |
| Dim 11: 性能保障 | 0.06 |
| Dim 12: 知识库健康度 | 0.04 |
| Dim 13: AI 可观测性/调试友好度 | 0.05 |
| Dim 14: 命脉链路 readiness 覆盖 | 0.07 |

### 等级映射

| 等级 | 分数范围 | 含义 |
|------|----------|------|
| **S** | 90-100 | 卓越 — autopilot 全功能可用,工程基础设施一流 |
| **A** | 75-89 | 优秀 — autopilot 核心功能可用,少量降级 |
| **B** | 60-74 | 良好 — autopilot 可用但部分功能降级 |
| **C** | 45-59 | 及格 — autopilot 大幅降级,建议改进后再使用全流程 |
| **D** | 30-44 | 较差 — 建议先改进基础设施再使用 autopilot |
| **F** | 0-29 | 极差 — autopilot 基本无法有效运行 |

### 输出格式

按以下格式输出诊断报告:

```markdown
# 🏥 Autopilot Doctor 诊断报告

**项目**: <项目名称>
**技术栈**: <主栈> [+ 副栈]
**诊断时间**: <ISO 时间戳>
**工作模式**: 诊断模式 / 修复模式

---

## 总评

**等级: [S/A/B/C/D/F]  总分: XX/100**

---

## 维度明细

| # | 维度 | 分数 | 状态 | 关键发现 |
|---|------|------|------|----------|
| 1 | 测试基础设施 | X/10 | ✅/⚠️/❌ | 一句话概括(含测试金字塔覆盖状态) |
| 2 | 类型安全 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 3 | 代码质量与健壮性 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 4 | 构建系统 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 5 | CI/CD Pipeline | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 6 | 项目结构 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 7 | 文档质量 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 8 | Git 工作流 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 9 | 依赖与安全基线 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 10 | AI 就绪度 | X/10 | ✅/⚠️/❌ | 一句话概括 |
| 11 | 性能保障 | X/10 | ✅/⚠️/❌ | P1/P2/P3 覆盖状态 |
| 12 | 知识库健康度 | X/10 | ✅/⚠️/❌ | 过拟合/重复/大小/索引状态(无知识库时 N/A)+ runtime/ 体积 X MB(RUNTIME-SIZE-WARN 时 AI 给清理建议,对齐 Dim 13 语义留 AI) |
| 13 | AI 可观测性/调试友好度 | X/10 | ✅/⚠️/❌ | 6 客观维(结构化日志/轮转/CLI/health/clean/debug)+ 3 语义维(error code/命名空间/隔离)摘要 |
| 14 | 命脉链路 readiness 覆盖 | X/10 | ✅/⚠️/❌ | 命脉穿透审计摘要(命脉清单 + 回归假设 + 逐层覆盖判定;无命脉链路时 N/A;warn/fail 触发降级) |

> 状态图标:✅ ≥ 7 | ⚠️ 4-6 | ❌ ≤ 3

### 详情子报告(按需展开)

各维度评分 ≤ 8 且非 N/A 时,按 [references/performance-testing.md](references/performance-testing.md) §doctor 报告详情子报告模板 展开对应子报告(Dim 1/11/12)。Dim 13 详情:非 PASS 维度引用 [references/ai-observability-principles.md](references/ai-observability-principles.md) 对应 `DIM-13-XX` 核心原则段驱动 AI 自主调研修复。

---

## Autopilot 兼容性矩阵

| autopilot 功能 | 状态 | 依赖维度 | 说明 |
|----------------|------|----------|------|
| 红队验收测试 / Tier 0: 红队 QA | ✅/⚠️/❌ | Dim 1 | 需要测试框架;无框架时降级为文本检查清单 |
| Tier 1: 类型检查 / Lint / 单元测试 / 构建验证 | ✅/⚠️/❌ | Dim 2/3/1/4 | 分别需要 TypeScript/mypy、ESLint/Biome、测试框架、build 命令 |
| Tier 3: Dev Server | ✅/⚠️/❌ | Dim 4 | 需要 dev 命令 |
| 自动修复 lint | ✅/⚠️/❌ | Dim 3 | 需要 lint:fix script |
| 智能提交 | ✅ | — | 始终可用 |
| Tier 1.5: API 集成验证 | ✅/⚠️/❌ | Dim 1 (L2) | 需要 API route 测试基础设施;无时 QA 降级为手工 curl 验证 |
| Tier 1.5: E2E 冒烟测试 | ✅/⚠️/❌ | Dim 1 (L3) | 需要 Playwright/Cypress;无时 QA 降级为手工浏览器验证 |
| 安全审查(code-quality-reviewer) | ✅/⚠️/❌ | Dim 9 | 需要 input validation 库 + 安全基线 |
| 红队契约测试 | ✅/⚠️/❌ | Dim 10 | 有 API schema 时红队可写契约测试;无时依赖设计文档推断 |
| Worktree 并行开发 | ✅/⚠️/❌ | Dim 8 | 需要 worktree-links 或 .env 可链接 + 端口无硬编码 |
| Tier 3.5: 性能保障验证 | ✅/⚠️/❌ | Dim 11 + Dim 4 | 需要性能工具 + dev server;无时 QA 跳过 |
| 性能预算断言(CI 质量门) | ✅/⚠️/❌ | Dim 11 + Dim 5 | 需要 CI 中集成性能检查步骤 |
| 知识工程提取(merge 阶段) | ✅/⚠️/❌ | Dim 12 | 知识库混乱时 design 阶段加载历史决策的信号被噪声淹没 |
| Tier 1.5: 真实场景日志可读性 | ✅/⚠️/❌ | Dim 13 | 结构化日志 + error code 支撑 AI 排查生产问题;无时降级为人工日志解读 |
| 命脉链路 readiness 覆盖 | ✅/⚠️/❌ | Dim 14 | 命脉穿透审计(命脉→回归假设→逐层覆盖);红队 prod 同构验证是 pass 途径之一,dev-only 验证仅 warn,无覆盖 fail |

> ✅ 完全可用 | ⚠️ 降级运行 | ❌ 不可用

---

## Top 3 改进建议 + Quick Fixes

按投资回报率排序,模板见 [references/performance-testing.md](references/performance-testing.md) §Top 3 与 Quick Fixes 报告模板(每项含问题/影响/解决方案/Quick Fix/预估耗时;Quick Fixes 按优先级列 3-5 条可立即执行的一行命令)。

```

---

## Step 4: 保存报告

将上述完整报告写入 `.autopilot/runtime/doctor-report.md`(使用 Write 工具)。

告知用户报告已保存,并在终端输出报告摘要(总评 + 兼容性矩阵 + Top 3 建议)。

---

## --fix 模式

当用户使用 `--fix` 时,在完成诊断报告后,针对每个分数 ≤ 6 的维度:向用户展示改动(文件名 + 内容摘要)→ **AskUserQuestion** 确认 → 生成/修复配置文件 → 重新运行对应维度检查验证修复效果。

### 常见修复方案

| 维度 | 修复动作 |
|------|----------|
| 测试基础设施 (L1/L2/L3) | L1:安装测试框架 + 生成配置 + 创建示例测试;L2:创建 API route 测试示例(见下方 L2 修复详情);L3:安装 Playwright + 生成配置 + 创建 E2E 示例(见下方 L3 修复详情) |
| 类型安全 | 生成 tsconfig.json(strict 模式)/ 安装 mypy |
| 代码质量与健壮性 | 生成 ESLint/Biome 配置 + 添加 lint script + 生成 ErrorBoundary 或 error middleware 模板 |
| 构建系统 | 添加缺失的 build/dev scripts + 初始化 DB migration(检测 ORM 后配置 prisma/drizzle init) |
| CI/CD | 生成 GitHub Actions 基础 workflow |
| 文档 | 生成 CLAUDE.md 模板 + README 骨架 |
| Git 工作流 | 初始化 husky + lint-staged + 生成 `.autopilot/runtime/worktree-links.txt` + 检测硬编码端口 + 从 .env.local 生成 .env.example(值替换为占位符) |
| 依赖与安全基线 | 运行 `npm audit fix` + 补全 .gitignore 敏感文件规则 + 推荐安装 zod 做 input validation |
| AI 就绪度 | 丰富 CLAUDE.md 内容 + 创建测试模板 + 建议生成 OpenAPI spec(如有 API 路由) |
| 性能保障 (P1/P2/P3) | P1/P2/P3 安装 + 配置 + 示例的完整 --fix 步骤详见 [references/performance-testing.md](references/performance-testing.md) §P1/P2/P3 修复 |
| 知识库健康度 | 输出建议清单到 doctor-report.md(不自动修改历史 entry,由用户手动整理) |
| AI 可观测性/调试友好度 | 对每个非 PASS 维度引用 `references/ai-observability-principles.md` 对应 `DIM-13-XX` 核心原则段,驱动 AI 自主调研后给修复方案(非 scaffold);用户确认后实施 |
| 命脉链路 readiness 覆盖 | 对 warn/fail(命脉无 prod 同构覆盖)引用 `references/critical-path-readiness-principles.md` 对应 `CP-XX` 认知锚点段(命脉识别 / dev↔prod 异构 / liveness≠readiness / build 期固化),驱动 AI 自主给修复方向(非 scaffold,给方向不给模板);用户确认后实施 |

#### L2 修复详情:API Route 测试

当 Dim 1 因 L2 缺失降分时(有 API 路由但无 API route 测试),执行以下步骤:

1. **检测 API 框架**:Next.js App Router(`app/api/` 存在 → 直接 import handler)| Express/Fastify(`router.get/app.get` 模式 → 推荐安装 supertest)
2. **扫描现有测试模板**:搜索 `*.acceptance.test.*` 或 `*.integration.test.*` 文件,取第一个文件的 import/mock 模式作参考,无则用通用骨架
3. **生成文件**:创建 `__tests__/api/` 目录 + 1 个示例 API route test(基于项目最简单的 API 路由,含 auth mock、db mock、成功/失败两用例)
4. **AskUserQuestion 确认**后执行

#### L3 修复详情:E2E 测试

当 Dim 1 因 L3 缺失降分时,执行以下步骤:

1. **安装依赖**:`npm install -D @playwright/test && npx playwright install chromium`
2. **生成 `playwright.config.ts`**:自动检测 dev server 命令(package.json `scripts.dev`)+ 端口(dev 命令参数如 `--port 4000`)+ 配置 `webServer` 自动启动 dev server + 只配置 chromium 项目
3. **生成 `e2e/` 目录 + 示例 spec**:1 个冒烟测试(访问首页 → 验证页面标题 → 截图)
4. **更新已有配置**:`vitest.config.ts` 添加 `exclude: ['e2e/**']`(如存在)+ `package.json` 添加 `"test:e2e": "playwright test"` + `.gitignore` 添加 `test-results/`、`playwright-report/`、`blob-report/`
5. **AskUserQuestion 确认**后执行

### 修复安全规则

- **文件已存在** → 展示 diff 让用户确认,绝不覆盖
- **涉及依赖安装** → 明确列出将安装的包和版本
- **配置文件冲突** → 提示用户手动合并

Files in this skill

  • SKILL.md33.7 KB
  • references/ai-observability-principles.md8.2 KB
  • references/critical-path-readiness-principles.md6.7 KB
  • references/performance-testing.md6.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.