@ultime/codecraft 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/CONTRIBUTING.md +3 -0
  3. package/README.md +78 -39
  4. package/SKILL.md +13 -9
  5. package/VERSION +1 -1
  6. package/adapters/README.md +3 -4
  7. package/codecraft.config.example.json +5 -1
  8. package/docs/00-constitution.md +5 -5
  9. package/docs/01-family-cards.md +2 -2
  10. package/docs/02-ai-contract.md +14 -3
  11. package/docs/04-gates.md +21 -6
  12. package/docs/06-architecture.md +5 -3
  13. package/docs/07-ai-prompts.md +16 -7
  14. package/docs/08-audit-contract.md +141 -0
  15. package/docs/09-glossary.md +22 -0
  16. package/evals/cases.json +110 -0
  17. package/evals/fixtures/a11-marker/packages/core/dist/tokens.css +4 -0
  18. package/evals/fixtures/a11-marker/packages/core/package.json +1 -0
  19. package/evals/fixtures/a11-marker/packages/core/src/index.ts +1 -0
  20. package/evals/fixtures/a17-boundaries/codecraft.config.json +5 -0
  21. package/evals/fixtures/a17-boundaries/src/pages/home.ts +1 -0
  22. package/evals/fixtures/a17-default/src/pages/home.ts +1 -0
  23. package/evals/fixtures/a17-generated-data/src/icons/icons.ts +2 -0
  24. package/evals/fixtures/a17-generated-data/src/pages/home.ts +3 -0
  25. package/evals/fixtures/a17-generated-header/src/pages/home.ts +5 -0
  26. package/evals/fixtures/a17-generated-header/src/types/project.ts +4 -0
  27. package/evals/fixtures/a17-local/src/pages/home.ts +4 -0
  28. package/evals/fixtures/a17-local/src/types/local.ts +3 -0
  29. package/evals/fixtures/a17-local/src/utils/format.ts +3 -0
  30. package/evals/fixtures/a2-declared/packages/core/package.json +6 -0
  31. package/evals/fixtures/a2-declared/packages/core/src/index.ts +3 -0
  32. package/evals/fixtures/a2-declared/packages/kit/package.json +1 -0
  33. package/evals/fixtures/a2-workspace/packages/core/package.json +1 -0
  34. package/evals/fixtures/a2-workspace/packages/core/src/index.ts +3 -0
  35. package/evals/fixtures/a2-workspace/packages/kit/package.json +1 -0
  36. package/evals/fixtures/a21-doc-paths/packages/ui/README.md +5 -0
  37. package/evals/fixtures/a21-doc-paths/packages/ui/package.json +1 -0
  38. package/evals/fixtures/a21-doc-paths/packages/ui/src/index.ts +1 -0
  39. package/evals/fixtures/a21-placeholders/.env +2 -0
  40. package/evals/fixtures/a21-placeholders/server/application.yml +9 -0
  41. package/evals/fixtures/a21-placeholders/src/pages/home.ts +1 -0
  42. package/evals/fixtures/a21-plaintext/application.yml +5 -0
  43. package/evals/fixtures/a21-plaintext/src/main/java/Ali.java +3 -0
  44. package/evals/fixtures/a21-plaintext/src/pages/home.ts +1 -0
  45. package/evals/fixtures/a6-clean/src/pages/handled.ts +8 -0
  46. package/evals/fixtures/a6-empty-catch/src/pages/empty.ts +3 -0
  47. package/evals/fixtures/ignore-active/codecraft.config.json +5 -0
  48. package/evals/fixtures/ignore-active/src/pages/home.ts +1 -0
  49. package/evals/fixtures/ignore-expired/codecraft.config.json +5 -0
  50. package/evals/fixtures/ignore-expired/src/pages/home.ts +1 -0
  51. package/evals/fixtures/library-a11/dist/tokens.css +3 -0
  52. package/evals/fixtures/library-a11/package.json +4 -0
  53. package/evals/fixtures/library-a11/src/index.ts +1 -0
  54. package/evals/fixtures/zero-files/package.json +4 -0
  55. package/evals/golden-tasks.md +14 -1
  56. package/evals/run.mjs +75 -0
  57. package/package.json +4 -2
  58. package/prompts/output.md +19 -4
  59. package/scenarios/architecture-report.md +88 -0
  60. package/scenarios/audit-existing.md +15 -8
  61. package/scenarios/new-project.md +1 -1
  62. package/scenarios/refactor-review.md +1 -1
  63. package/src/check.mjs +290 -40
  64. package/src/cli.mjs +158 -8
  65. package/src/gates.mjs +28 -1
  66. package/src/plan.mjs +2 -0
  67. package/templates/README.md +3 -1
  68. package/templates/architecture-report.md +97 -0
  69. package/adapters/claude/SKILL.md +0 -42
  70. package/adapters/trae/SKILL.md +0 -42
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.0 - 2026-10-27
4
+
5
+ - 新增代码架构分析报告场景与模板:`scenarios/architecture-report.md`、`templates/architecture-report.md`。
6
+ - README 增加「适用场景」与不适用清单;明确 Codecraft 只做代码架构,不含业务架构。
7
+ - `docs/06-architecture.md` 收口为「代码架构设计方法」;`prompts/output.md` 增加架构报告输出指引。
8
+ - 统一术语写法:AI 面向文档英文裸写,`README` / 对外报告首次出现标注中文,名字类不附中文;新增 `docs/09-glossary.md` 与 `tests/docs.test.mjs`。
9
+
10
+ ## 1.5.0 - 2026-10-27
11
+
12
+ - 新增 `--exclude <glob>`(可重复):扫描级排除,用于 fixture / 第三方目录;报告头与 JSON 记录 exclude 模式。
13
+ - 新增 `npm run self-check`,CI 同步执行;仓库自检以 `--exclude 'evals/fixtures/**'` 达到 0 findings。
14
+ - 修正 README 与 FAQ 的扫描范围描述:A21 额外扫描配置与后端源码扩展名,结构规则仍只扫 JS/TS。
15
+ - pack 自动判定补齐 Vue CLI(`vue.config.*`)与单页 Web 入口(html + 框架依赖 + `src/main.*`),避免把 Vue / React 应用判成 `library`。
16
+ - 结构规则跳过压缩 / 构建产物(A21 不受影响),减少与源码重复的 A6 / A17 findings。
17
+ - A21 修正误报:`MYSQL_PWD="$VAR" cmd` 这类 shell 环境变量前缀不再算明文口令;引号值只取引号内内容。
18
+ - 扫描跳过 `.agents` / `.trae` / `.claude` / `.cursor` 等 agent 安装目录,避免把已安装 skill 的 fixture 当项目代码。
19
+ - 修复 A6 行号漂移:剥离注释时保留换行,空 catch 的行号与源码一致。
20
+ - A17 支持按文件头识别生成类型(`本文件由…生成` / `勿手改` / `@generated`),并解析相对路径与 `@/` `~/` `#/` 别名;生成的数据 / 资源模块不触发。
21
+ - A21 扩充:新增阿里云 `LTAI`、明文 `password` / `secret` / `apiKey` / `accessKey` 赋值扫描,覆盖 `.java` / `.kt` / `.properties` / `.xml` / `.env`;跳过环境变量、占位符与测试目录。
22
+ - 新增单元测试与 CLI eval(`a17-generated-header` / `a21-plaintext`)。
23
+ - 移除 `adapters/claude` / `adapters/trae` 等单 agent 入口;手动指针统一指向 `SKILL.md`,文档改用通用 `.agents` 表述。
24
+ - 新增 `docs/08-audit-contract.md`:逐条判定、证据门槛、静态边界、A1–A21 判定矩阵、一致性检查、P0–P3 与计划表。
25
+ - `prompts/output.md` 增加 A1–A21 全覆盖、证据 / 局限列、0 findings 声明与计数可复现要求。
26
+ - `docs/02-ai-contract.md` 与 `scenarios/audit-existing.md` 接入审计证据门槛。
27
+ - `SKILL.md` 路由与读法把审计指向 `08`;`README` 目录说明同步。
28
+ - 新增 A6 空 catch 静态检查(app / library)。
29
+ - A17 支持 `boundaries.external` / `boundaries.generated` 配置,覆盖约定外的生成类型路径。
30
+ - 新增 `--format sarif`(SARIF 2.1.0),可直接接 GitHub Code Scanning。
31
+ - 新增 `--changed` / `--since <ref>`:只报告变更 / 未跟踪文件中的 findings;底层仍全量扫描。
32
+ - 新增 GitHub Actions CI:`npm test` + `npm run eval` + `npm pack --dry-run`。
33
+ - 新增 `evals/run.mjs` + fixtures:覆盖 A6 / A17(含 boundaries)/ ignore / A11 / 0 文件 / SARIF。
34
+
3
35
  ## 1.4.0 - 2026-10-27
4
36
 
5
37
  - 仓库改为 `skills/codecraft` 标准集合布局,可被 `skills` CLI 直接发现。
package/CONTRIBUTING.md CHANGED
@@ -20,6 +20,8 @@
20
20
 
21
21
  ```bash
22
22
  npm test
23
+ npm run eval
24
+ npm run self-check
23
25
  npm pack --dry-run
24
26
  node bin/codecraft.mjs check --root <项目>
25
27
  ```
@@ -35,4 +37,5 @@ node bin/codecraft.mjs check --root <项目>
35
37
  - **minor**:新能力——CLI 选项、检查规则、适配器、模板、向后兼容的配置字段。
36
38
  - **patch**:修复、文档、提示词、测试、CI,或无行为变化的内部调整。
37
39
  - `2.0` 不设时间表;没有破坏性变更就不进 major。
40
+ - v1 内容收口未完成前不发版;内容变更先累积在 `CHANGELOG.md` 的 Unreleased。
38
41
  - 发布前同时改 `VERSION`、`package.json`、`CHANGELOG.md`,并跑 `npm test` 与 `npm pack --dry-run`。
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Codecraft(代码手艺)
1
+ # Codecraft
2
2
 
3
- > 面向 JS/TS 的代码规范与架构设计,作为可安装的 skill 包。
3
+ > 面向 JS/TS 的代码规范与代码架构设计(不含业务架构),作为可安装的 skill 包。
4
4
  > 默认 Web 前端;示例原生优先(TS / 原生 Web API),框架只给 Vue 3 / React;Node 后端只复用结构规则;其它语言不在范围。
5
5
 
6
6
  - 版本:见 [VERSION](./VERSION)
@@ -16,18 +16,41 @@
16
16
  | 一套可执行的代码宪法(A1–A21)与代码族卡 | 业务组件库 |
17
17
  | 面向 AI 的固定入口与输出格式 | 某个框架的编码风格指南 |
18
18
  | 通用规则的静态检查 + 项目门禁编排 | 替代 typecheck / 单测 / e2e |
19
+ | 代码架构分析与报告 | 业务架构 / 角色 / 流程 / 领域建模 |
19
20
 
20
21
  规则正文只在 [`docs/`](./docs/);其它位置只放入口与指针,避免第二份真源。
21
22
 
22
23
  > 第一次用:直接看 [安装](#安装) 和 [第一次使用](#第一次使用)。
23
24
 
25
+ ## 适用场景
26
+
27
+ 按「新建 / 接手 / 演进 / 日常」分组,选一个入口即可:
28
+
29
+ | 分组 | 场景 | 典型任务 | 产出 | 模式 |
30
+ |---|---|---|---|---|
31
+ | 新建 | 架构设计 | 定档位、边界、依赖规则 | 目标架构 / ADR(架构决策记录) | Plan(计划) |
32
+ | 新建 | 脚手架 | app / library 骨架 | 目录、配置、门禁 | Apply(执行) |
33
+ | 接手 | 代码架构报告 | 把现有结构讲清楚 | 架构分析文档 | Audit(审计) |
34
+ | 接手 | 老项目审计 | A1–A21 体检 | 报告、差距、升级计划 | Audit |
35
+ | 接手 | 重构 / 迁移评审 | 现状 → 目标、回退点 | 迁移计划 | Plan |
36
+ | 演进 | 包 / monorepo(单仓多包)边界 | 拆包、依赖方向修正 | 边界计划 | Plan |
37
+ | 演进 | 生成物 / 契约链 | 单一生成链、diff 门禁 | 治理方案 | Plan |
38
+ | 演进 | 错误 / 状态模型 | Result、状态穷尽、失败可见 | 重构方案 | Plan |
39
+ | 日常 | PR / 增量审计 | 只看变更范围 | findings | Audit |
40
+ | 日常 | 规范落地 | 宪法 → 项目 `rules/` + 门禁 | 规则与门禁映射 | Apply |
41
+ | 日常 | Design System(设计系统) / 组件库 | 包边界、公共 API、文档自包含 | 审计报告 | Audit |
42
+ | 日常 | 只出报告 | 只读汇报 | 报告 | Audit |
43
+
44
+ 不适用:业务能力地图、角色与业务流程、领域建模、UI / 交互设计、运行时性能、渗透测试、数据库调优。
45
+
24
46
  ## 范围与分层
25
47
 
26
48
  | 项 | 内容 |
27
49
  |---|---|
28
50
  | 覆盖 | JS/TS 项目;Web 前端为默认场景(示例原生优先,框架仅 Vue 3 / React) |
51
+ | 代码架构 | 系统 / 容器 / 模块 / 组件边界、依赖方向、关键链路、生成物、演进 |
29
52
  | 可复用 | Node 后端:模块边界、依赖方向、内外分离、生成物、门禁与文档规则 |
30
- | 不适用 | Page / Component 等前端族;数据库、缓存、并发、事务等后端专项 |
53
+ | 不适用 | 业务架构、角色 / 流程 / 领域建模;Page / Component 等前端族;数据库、缓存、并发、事务等后端专项 |
31
54
  | 不在范围 | Java / Go / Python 等其它语言;后端专项另立体系 |
32
55
 
33
56
  内容分三层,按需取用:
@@ -62,23 +85,16 @@ npx skills-npm setup
62
85
 
63
86
  ### 方式 C:手动指针
64
87
 
65
- 不复制文件,只在项目规则里留一行:
88
+ 不复制文件,只在通用入口里留一行:
66
89
 
67
- - 通用:`AGENTS.md`
68
- - Claude:`CLAUDE.md` 或 `~/.claude/CLAUDE.md`
69
- - Trae:`.trae/rules/codecraft.md`
90
+ - 通用:`AGENTS.md`(推荐)
91
+ - 其它 agent:使用该 agent 自己的入口文件,内容相同
70
92
 
71
93
  ```md
72
- 代码任务先读 <Codecraft 仓库路径>/skills/codecraft/adapters/trae/SKILL.md
94
+ 代码任务先读 <Codecraft 路径>/skills/codecraft/SKILL.md
73
95
  ```
74
96
 
75
- 平台入口:
76
-
77
- | 平台 | 入口文件 |
78
- |---|---|
79
- | 通用(读 `AGENTS.md`) | [`adapters/generic/AGENTS.md`](./adapters/generic/AGENTS.md) |
80
- | Claude | [`adapters/claude/SKILL.md`](./adapters/claude/SKILL.md) |
81
- | Trae | [`adapters/trae/SKILL.md`](./adapters/trae/SKILL.md) |
97
+ 入口示例:[`adapters/generic/AGENTS.md`](./adapters/generic/AGENTS.md)。其它 agent 不需要单独适配文件,统一指向 `SKILL.md`,避免维护多份正文。
82
98
 
83
99
  ## 第一次使用
84
100
 
@@ -86,9 +102,16 @@ npx skills-npm setup
86
102
  用 Codecraft 审计本项目,只读,不改文件。
87
103
  ```
88
104
 
105
+ 需要一份能读的代码架构文档:
106
+
107
+ ```text
108
+ 用 Codecraft 按 scenarios/architecture-report.md 出一份代码架构分析报告。
109
+ 只读,不改文件;不做业务架构,先不画图。
110
+ ```
111
+
89
112
  只启用 skill、不说 Codecraft 时,agent 可能按普通项目分析处理,不保证走 Audit 模式。带上名字最稳。
90
113
 
91
- 更多场景(只出报告、新项目、重构评审、架构设计、模式选型、脚手架、Design System)见 [docs/07-ai-prompts.md](./docs/07-ai-prompts.md)。
114
+ 更多场景(代码架构报告、只出报告、新项目、重构评审、架构设计、模式选型、脚手架、Design System)见 [docs/07-ai-prompts.md](./docs/07-ai-prompts.md)。
92
115
 
93
116
  需要本地检查时再装 CLI:
94
117
 
@@ -134,6 +157,8 @@ codecraft check --root .
134
157
  codecraft check --pack library --root ../../packages/core
135
158
  codecraft check --pack design-system
136
159
  codecraft check --format json --ci
160
+ codecraft check --changed --ci # 只看变更 / 未跟踪文件
161
+ codecraft check --since origin/main --ci # PR 内变更
137
162
  codecraft audit --severity error
138
163
  codecraft audit --config codecraft.config.json --fail-fast
139
164
  codecraft plan --root . --with-gates
@@ -148,7 +173,10 @@ codecraft init --root . --name demo --apply # 写盘
148
173
  | `--root <path>` | 目录 | `.` | 被检查的项目根 |
149
174
  | `--pack <name>` | `app` / `library` / `design-system` / `auto` | `auto` | 规则包;CLI 优先于 config |
150
175
  | `--config <path>` | 文件 | `codecraft.config.json` | 相对 `--root` |
151
- | `--format <fmt>` | `md` / `json` | `md` | 输出格式 |
176
+ | `--changed` | — | 关 | 只报告变更 / 未跟踪文件中的 findings |
177
+ | `--since <ref>` | git ref | — | 只报告自该 ref 以来变动文件中的 findings |
178
+ | `--exclude <glob>` | 路径 / glob | — | 扫描时跳过;可重复。用于 fixture、第三方目录等不应参与检查的路径 |
179
+ | `--format <fmt>` | `md` / `json` / `sarif` | `md` | 输出格式 |
152
180
  | `--severity <level>` | `warn` / `error` | `warn` | findings 的严重级别 |
153
181
  | `--ci` | — | 关 | 等价于 `--severity error` |
154
182
  | `--fail-fast` | — | 关 | gates 遇到第一个失败即停止 |
@@ -167,27 +195,31 @@ codecraft init --root . --name demo --apply # 写盘
167
195
 
168
196
  ### 输出
169
197
 
170
- - 默认 Markdown:头部元信息 + Findings 表 + Gates 表。
171
- - `--format json`:包含 `version` / `mode` / `pack` / `rules` / `findings` / `plan` / `gates` / `summary`,用于 CI、趋势和两次运行 diff。
198
+ - 默认 Markdown:头部元信息 + Findings 表 + Gates(门禁)表。
199
+ - `--format json`:包含 `version` / `mode` / `pack` / `rules` / `exclude` / `findings` / `plan` / `gates` / `summary`,用于 CI、趋势和两次运行 diff。
200
+ - `--format sarif`:SARIF 2.1.0,可直接上传 GitHub Code Scanning。
201
+ - `--changed` / `--since` 只过滤 findings,底层仍做全量扫描;JSON 的 `scope` 为 `changed`,`changed` 为变更文件数。
172
202
  - 报告始终带版本号与规则 ID;`plan` 明确声明「No files were changed by this command.」。
173
203
 
174
204
  ## Rule Packs
175
205
 
176
206
  | Pack | 内置规则 | 检查范围 |
177
207
  |---|---|---|
178
- | `app` | A17 / A21 | `pages / components / behavior` 不 import `external/` / `generated/`;密钥扫描 |
179
- | `library` | A2 / A11 / A21 | 包不 import app、相对路径不逃逸、workspace 依赖必须声明;生成物必须有“勿手改 / 派生”标记;密钥扫描 |
180
- | `design-system` | A2 / A11 / A21 | library 规则 + 包内公开文档不得引用内部 `docs/` |
208
+ | `app` | A6 / A17 / A21 | 空 catch;`pages / components / behavior` 不 import `external/` / `generated/`(含生成文件头与 `boundaries` 配置);密钥扫描 |
209
+ | `library` | A2 / A6 / A11 / A21 | 包不 import app、相对路径不逃逸、workspace 依赖必须声明;空 catch;生成物必须有“勿手改 / 派生”标记;密钥扫描 |
210
+ | `design-system` | A2 / A6 / A11 / A21 | library 规则 + 包内公开文档不得引用内部 `docs/` |
181
211
 
182
212
  `--pack auto` 的判定顺序(基于 JS/TS 生态的目录与 `package.json`):
183
213
 
184
- 1. 有 `apps/` 或 `src/pages` → `app`
185
- 2. 有 `packages/` 或根 `package.json` → `library`
186
- 3. 其余 → `app`
214
+ 1. 有 `apps/`、`src/pages` / `pages` / `app` / `src/app`,或 Nuxt / Taro / uni-app / Vue CLI(`vue.config.*`)标记 → `app`
215
+ 2. 单页 Web 入口三件套:`index.html`(根或 `public/`)+ 框架依赖(`vue` / `react` / `svelte` 等)+ `src/main.*` / `src/index.*` → `app`
216
+ 3. 一级子目录命中上述任一标记(workspace 内嵌应用)→ `app`
217
+ 4. 有 `packages/`、`src/` 或根 `package.json` → `library`
218
+ 5. 其余 → `app`
187
219
 
188
- `design-system` 不参与自动判定,必须显式指定。
220
+ `design-system` 不参与自动判定,必须显式指定。带 demo 页的库若被误判为 `app`,用 `--pack library` 覆盖。
189
221
 
190
- A4(单一收口)属于结构判断,由 review 与项目门禁负责,不由静态扫描替代。
222
+ A4(单一收口)、A5(互斥布尔 / 非法状态)、A8(派生状态)属于结构或状态判断,由 review 与项目门禁负责,不由静态扫描替代。
191
223
 
192
224
  ## 配置
193
225
 
@@ -207,13 +239,18 @@ A4(单一收口)属于结构判断,由 review 与项目门禁负责,不
207
239
  "reason": "legacy page; migrate in 2026-Q4",
208
240
  "expires": "2026-12-31"
209
241
  }
210
- ]
242
+ ],
243
+ "boundaries": {
244
+ "external": ["@/types/external"],
245
+ "generated": ["@/types/project"]
246
+ }
211
247
  }
212
248
  ```
213
249
 
214
250
  - `pack`:`app` / `library` / `design-system` / `auto`。
215
251
  - `gates`:数组;每项必须有一个非空的 `run` 字符串,可选 `name`、`timeoutMs`(默认 `120000`)。
216
252
  - `ignore`:例外登记(A12)。每项必须有 `rule` / `file` / `reason`,`expires` 可选(`YYYY-MM-DD`);`file` 支持 `*` / `**` / `?`。安全规则 `A21` 不可豁免。
253
+ - `boundaries`:A17 的补充路径。生成类型优先按文件头自动识别;`external` / `generated` 填 import 前缀或 glob,用于头部没有标记、或路径不在约定内的项目。
217
254
  - 命中的 findings 不参与退出码,但仍出现在报告的 `Ignored` 表与 JSON 的 `ignored`;过期的条目不生效,列在 `Expired Exceptions`。
218
255
  - gate 在 `--root` 下通过 shell 执行,注入 `CI=1`;失败时报告尾部 40 行 / 4000 字符。
219
256
  - `check` 不跑 gates;`audit` 默认跑;`plan` 只在 `--with-gates` 时跑。
@@ -222,16 +259,15 @@ A4(单一收口)属于结构判断,由 review 与项目门禁负责,不
222
259
  ## 目录
223
260
 
224
261
  ```text
225
- SKILL.md 标准 agent skill 入口(skills-npm / install 使用)
226
- docs/ 宪法、族卡、AI 契约、风格总图、模式、架构、AI 提示词、门禁
227
- scenarios/ 新项目 / 旧项目审计 / 只出报告 / 重构评审
228
- adapters/ generic / Trae / Claude 手动指针
262
+ SKILL.md 标准 agent skill 入口(skills add / skills-npm 使用)
263
+ docs/ 宪法、族卡、AI 契约、审计契约、风格总图、模式、架构、AI 提示词、门禁、术语表
264
+ scenarios/ 新项目 / 旧项目审计 / 代码架构报告 / 只出报告 / 重构评审
265
+ adapters/ generic 手动指针(其它 agent 统一指向 SKILL.md)
229
266
  prompts/ 输出格式
230
267
  src/ + bin/ CLI(check / audit / plan / init)
231
268
  tests/ node:test 用例
232
- templates/ init --apply 的 app / library 骨架
233
- evals/ golden tasks(人工回归)
234
- ROADMAP.md 后续版本计划与交接说明
269
+ templates/ init --apply 的 app / library 骨架 + 架构报告模板
270
+ evals/ CLI eval fixtures + golden tasks(人工回归)
235
271
  ```
236
272
 
237
273
  ## 版本与稳定承诺
@@ -243,7 +279,7 @@ ROADMAP.md 后续版本计划与交接说明
243
279
  - 不按「感觉重要」升 major;`2.0` 不设时间表。
244
280
  - 规则 ID `A1–A21` 稳定;增删规则属于 minor 以上的变更。
245
281
  - 报告始终携带版本号;跨版本对比以 JSON 为准。
246
- - 后续计划:[ROADMAP.md](https://github.com/ultime-space/skills/blob/main/skills/codecraft/ROADMAP.md)。
282
+ - 版本历史见 [CHANGELOG.md](./CHANGELOG.md);计划不在仓库内维护。
247
283
 
248
284
  ## FAQ
249
285
 
@@ -252,13 +288,16 @@ ROADMAP.md 后续版本计划与交接说明
252
288
  - **怎么装到指定 agent?** `npx skills add ultime-space/skills --skill codecraft`;交互选 agent,或用 `-a <agent>` 非交互。安装路径由 `skills` CLI 维护,本 skill 不枚举。
253
289
  - **`check` / `audit` / `plan` 有什么区别?** `check` 只跑内置规则;`audit` 额外跑 config 里的 gates;`plan` 只读,把 findings 转成计划,默认不跑 gates。
254
290
  - **为什么不自动跑 typecheck / test?** 门禁由项目提供,Codecraft 只编排,避免第二套实现。
255
- - **monorepo 为什么被判成 app / library?** 有 `pages/`、`app/`、`manifest.json + pages.json`、Taro / uni-app 依赖或嵌套应用时按 `app`;有 `packages/` 或 `src/` 时按 `library`;仍不确定就显式传 `--pack`。
256
- - **支持哪些文件?** 只扫 JS/TS 相关扩展名与 `package.json`;其它语言不覆盖。
291
+ - **monorepo 为什么被判成 app / library?** 有 `pages/`、`app/`、`manifest.json + pages.json`、Taro / uni-app / Vue CLI 标记、单页 Web 入口或嵌套应用时按 `app`;有 `packages/` 或 `src/` 时按 `library`;仍不确定就显式传 `--pack`。
292
+ - **支持哪些文件?** A2 / A6 / A11 / A17 扫描 JS/TS 相关扩展名与 `package.json`;A21 额外扫描配置与后端源码(`.yml` / `.yaml` / `.env` / `.properties` / `.xml` / `.java` / `.kt` 等)里的明文密钥。其它语言仍不在检查范围。
257
293
 
258
294
  ## 边界
259
295
 
260
296
  - 静态检查是文本级:能覆盖高置信模式,可能漏报或误报;最终以项目门禁与 review 为准。
261
- - 机检只扫描 JS/TS 相关文件(`.ts` / `.tsx` / `.js` / `.jsx` / `.mjs` / `.cjs` / `.vue` / `.svelte`)与 `package.json`,其它语言不覆盖。
297
+ - 结构规则(A2 / A6 / A11 / A17)只扫描 JS/TS 相关文件(`.ts` / `.tsx` / `.js` / `.jsx` / `.mjs` / `.cjs` / `.vue` / `.svelte`)与 `package.json`;A21 额外扫描配置与后端源码扩展名(见上),但只做密钥 / 内部路径模式匹配,不做语言级分析。
298
+ - 压缩 / 构建产物(≤3 行且存在 >1000 字符的单行)不参与 A2 / A6 / A11 / A17,避免与源码重复报同一问题;A21 仍会扫描它们。
299
+ - `.agents` / `.trae` / `.claude` / `.cursor` 等 agent 安装目录不扫描,避免把已安装 skill 的 fixture 当项目代码。
300
+ - `--exclude` 是扫描级排除,不产生 findings;它不能替代 `ignore`(后者用于登记已发现问题的例外,且 A21 不可豁免)。
262
301
  - 不内置任何业务规则、框架约定或公司内部门禁。
263
302
  - 不读取、不上传代码;所有检查在本地完成。
264
303
 
package/SKILL.md CHANGED
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: codecraft
3
- description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认 Web 前端,Node 后端可复用结构规则;用于审计、架构设计、重构评审、规范检查与脚手架。Code standard and architecture design for JS/TS projects (frontend-first; structural rules reusable for Node backends).
3
+ description: 面向 JS/TS 的代码规范与代码架构设计(Codecraft)。默认 Web 前端,Node 后端可复用结构规则;用于审计、代码架构分析、架构设计、重构评审、规范检查与脚手架。不含业务架构。Code standard and code architecture for JS/TS projects (frontend-first; structural rules reusable for Node backends).
4
4
  ---
5
5
 
6
- # Codecraft(代码手艺)
6
+ # Codecraft
7
7
 
8
8
  > 方向:JS/TS。默认场景是 Web 前端;示例原生优先(TS / 原生 Web API),框架只给 Vue 3 / React;Node 后端只复用结构规则;其它语言不在范围。
9
9
 
@@ -12,8 +12,9 @@ description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认
12
12
  | 项 | 内容 |
13
13
  |---|---|
14
14
  | 覆盖 | JS/TS 项目;页面、组件、行为、状态、传输、类型、包、脚本、测试 |
15
+ | 代码架构 | 系统 / 容器 / 模块 / 组件边界、依赖方向、关键链路、生成物、演进 |
15
16
  | 可复用 | Node 后端:模块边界、依赖方向、内外分离、生成物、门禁与文档规则 |
16
- | 不适用 | 前端专属族(Page / Component);后端数据库、缓存、并发、事务等专项规范 |
17
+ | 不适用 | 业务架构、角色 / 流程 / 领域建模;前端专属族(Page / Component);后端数据库、缓存、并发、事务等专项规范 |
17
18
  | 不在范围 | Java / Go / Python 等其它语言;后端专项另立体系,本 skill 不承诺覆盖 |
18
19
 
19
20
  > 示例顺序:原生 → Vue 3 / React;其它框架不预建,先在 `docs/01-family-cards.md` §12 登记。
@@ -22,7 +23,8 @@ description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认
22
23
 
23
24
  | 任务 | 先读 | 产出 |
24
25
  |---|---|---|
25
- | 审计 / 评审现有代码 | 宪法 + 相关族卡 | 报告(只读) |
26
+ | 审计 / 评审现有代码 | 宪法 + `docs/08-audit-contract.md` + 相关族卡 | 报告(只读) |
27
+ | 代码架构分析 / 出报告 | `docs/06-architecture.md` + `docs/08-audit-contract.md` + `scenarios/architecture-report.md` | 架构报告(只读) |
26
28
  | 设计架构 / 拆边界 | `docs/06-architecture.md` + 宪法 | 计划 / ADR(只读) |
27
29
  | 新项目 / 脚手架 | `06` + `scenarios/new-project.md` | 骨架计划;必要时 `init` |
28
30
  | 选型(模式 / 库) | `docs/05-patterns.md` | 选型与代价 |
@@ -32,19 +34,20 @@ description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认
32
34
 
33
35
  1. 项目 `AGENTS.md` / `rules/`
34
36
  2. `docs/00-constitution.md`
35
- 3. 设计架构时:`docs/06-architecture.md`
37
+ 3. 设计架构 / 出架构报告时:`docs/06-architecture.md`
36
38
  4. 只读相关族卡:`docs/01-family-cards.md`(前端项目才读 Page / Component)
37
39
  5. 需要选型时:`docs/05-patterns.md`
38
40
  6. 选一个场景:`scenarios/`
39
- 7. 按 `docs/02-ai-contract.md` 执行
41
+ 7. 按 `docs/02-ai-contract.md` 执行;审计还必须读 `docs/08-audit-contract.md`
40
42
  8. 按 `prompts/output.md` 输出
41
43
  9. 不知道怎么说时:`docs/07-ai-prompts.md`
44
+ 10. 术语写法:`docs/09-glossary.md`(AI 文档英文裸写;`README` / 对外报告首次出现标注中文;名字类不附中文)
42
45
 
43
46
  ## 模式
44
47
 
45
- - **Audit(审计)**:只读,出报告。
46
- - **Plan(计划)**:只读,出架构 / 升级计划。
47
- - **Apply(执行)**:改代码 + 跑门禁。
48
+ - **Audit**:只读,出报告。
49
+ - **Plan**:只读,出架构 / 升级计划。
50
+ - **Apply**:改代码 + 跑门禁。
48
51
 
49
52
  ## 工作流
50
53
 
@@ -57,6 +60,7 @@ description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认
57
60
  ## 禁止
58
61
 
59
62
  - Audit / Plan 模式改文件。
63
+ - 把业务架构 / 业务流程 / 领域规则写进代码架构报告;这些不在本 skill 范围。
60
64
  - 把业务逻辑放进 Transport 或 Page。
61
65
  - 内部代码 import `external/` 或生成类型。
62
66
  - 手改生成物。
package/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.6.0
@@ -3,12 +3,11 @@
3
3
  Core 是 `docs/` + `scenarios/` + `scripts/`;adapters 只做入口,不复制规则。
4
4
 
5
5
  - `generic/AGENTS.md`:任何读 `AGENTS.md` 的 agent
6
- - `trae/SKILL.md`:Trae skill
7
- - `claude/SKILL.md`:Claude skill
8
- - 未来:Cursor / Copilot / Gemini 等
6
+
7
+ 其它 agent 使用自己的入口文件,统一指向包根 [`SKILL.md`](../SKILL.md);不为单一 agent 维护专属文件。
9
8
 
10
9
  规则:adapter 只写“读什么、按什么流程、输出什么”,规则正文留在 `docs/`。
11
10
 
12
- 包根的 [`SKILL.md`](../SKILL.md) 是标准 agent skill 入口(`skills add` / `skills-npm` 使用);本目录的平台文件用于手动指针接入。两者二选一,不要同时维护两套正文。
11
+ 包根的 [`SKILL.md`](../SKILL.md) 是标准 agent skill 入口(`skills add` / `skills-npm` 使用);本目录只保留通用手动指针。
13
12
 
14
13
  使用者提示词(怎么对 AI 说):[`../docs/07-ai-prompts.md`](../docs/07-ai-prompts.md)。
@@ -19,5 +19,9 @@
19
19
  "reason": "legacy page; migrate in 2026-Q4",
20
20
  "expires": "2026-12-31"
21
21
  }
22
- ]
22
+ ],
23
+ "boundaries": {
24
+ "external": ["@/types/external"],
25
+ "generated": ["@/types/project"]
26
+ }
23
27
  }
@@ -96,7 +96,7 @@
96
96
  | 内部查询 | `UserQuery` | `UserSearchModel` |
97
97
  | 内部输入 | `UserInput` | `UserSetModel` |
98
98
  | 内部视图模型 | `UserView` | 无 |
99
- | 外部类型(后端 / 第三方) | 只存在于 `external/` 或 Wrapper(包装层);不参与内部命名 | 生成物原名 |
99
+ | 外部类型(后端 / 第三方) | 只存在于 `external/` 或 Wrapper;不参与内部命名 | 生成物原名 |
100
100
  | UI 原语 | `app-` | 同左 |
101
101
  | 页面类 | `page-*` | 同左 |
102
102
  | 表 | `statusMap` / `apiMap` | 同左 |
@@ -160,7 +160,7 @@
160
160
  ### 3.2 内外边界(Inside/Outside Boundary)
161
161
 
162
162
  - 前端规范只管**内部代码**;后端 API、第三方 API 的契约风格不在规范内。
163
- - 外部内容只在 **Wrapper(包装层)** 出现;Wrapper 负责把外部类型 / 字段 / code 转成内部类型 / 错误。
163
+ - 外部内容只在 **Wrapper** 出现;Wrapper 负责把外部类型 / 字段 / code 转成内部类型 / 错误。
164
164
  - 内部代码不 import 外部类型;Wrapper 是唯一入口。
165
165
  - Wrapper 可自由适配,但必须:类型安全、错误归一、不泄漏外部字段、可插拔。
166
166
  - 换后端 / 第三方 = 换 Wrapper,不改内部。
@@ -298,7 +298,7 @@ repo/
298
298
 
299
299
  ## 5. 使用方式
300
300
 
301
- - **人**:review 时按 A1–A21 检查;新规则先写 ADR(Architecture Decision Record,架构决策记录)。
301
+ - **人**:review 时按 A1–A21 检查;新规则先写 ADR。
302
302
  - **AI**:先读本宪法 + 相关《代码族卡》+ 项目覆盖;输出按 A15,安全按 A21。
303
303
  - **修改**:一次变更一个状态;契约类改动全仓原子提交。
304
304
 
@@ -312,8 +312,8 @@ repo/
312
312
 
313
313
  ## 6. 机检现状
314
314
 
315
- - 已内置(`codecraft check`):A2 / A11 / A17 / A21(静态、文本级)。
316
- - 需要项目门禁或人工评审:A3 / A4(收口判断)/ A5–A9(类型与结构)/ A12–A20。
315
+ - 已内置(`codecraft check`):A2 / A6(空 catch)/ A11 / A17 / A21(静态、文本级)。
316
+ - 需要项目门禁或人工评审:A3 / A4(收口判断)/ A5 / A7–A9(类型与结构)/ A12–A20。
317
317
  - 静态扫描只覆盖高置信模式;漏报由项目门禁补,误报按 A12 登记例外。
318
318
 
319
319
  ## 7. 待定
@@ -57,7 +57,7 @@
57
57
 
58
58
  ## 3. Transport(传输层)
59
59
 
60
- - **职责**:网络、HTTP、取消;原样透传;不解释业务 code。401 / 日志是可选环节;外部契约转换在 Wrapper(包装层)。
60
+ - **职责**:网络、HTTP、取消;原样透传;不解释业务 code。401 / 日志是可选环节;外部契约转换在 Wrapper。
61
61
  - **形状**:`api/` 或 `request/`;`adapter/` / `interceptors/` / `modules/`;默认用原生 `fetch` + `AbortController`,框架封装只作可选实现;`pending/` / `console/` 是可选环节,不是必须目录。
62
62
  - **命名**:API 文件 snake_case 且与 URL 同名;一 URL 一文件。新代码推荐 `api/<domain>/<action>.ts` + `fetchXxx` / `getXxx`;旧项目可保留 `api_` 前缀(防重名、可搜索、标层);同族不要混用。
63
63
  - **契约**:返回 raw response 或传输层结果;不产出域类型;错误只做传输层归一。
@@ -69,7 +69,7 @@
69
69
  - **反例**:传输层把业务 code 解析成域变体;transport import store / UI;全局单例藏副作用。
70
70
  - **验收**:lint「transport 不 import UI / store」;401 / pending 测试;契约测试。
71
71
 
72
- ## 4. Wrapper(包装层)
72
+ ## 4. Wrapper
73
73
 
74
74
  - **职责**:外部契约适配;把后端 / 第三方的类型、字段、code 转成内部类型 / 错误;不放业务规则、不放 UI。
75
75
  - **形状**:`adapters/<source>/` 或 `api/<domain>/<source>.ts`;一个外部来源一个适配器。
@@ -9,7 +9,7 @@
9
9
 
10
10
  1. 项目覆盖:`AGENTS.md` / `rules/` / `README`
11
11
  2. 《代码宪法 v1》
12
- 3. 设计或评审架构:`06-architecture.md`(档位 / 七步法 / 边界 / ADR)
12
+ 3. 设计或评审架构:`06-architecture.md`(档位 / 七步法 / 边界);决策用 ADR
13
13
  4. 只读相关《代码族卡 v1》(前端项目才读 Page / Component)
14
14
  5. 需要选型时:`05-patterns.md`(按力选,不按名字选)
15
15
  6. 相关契约 / 类型 / 测试 / 示例
@@ -37,7 +37,7 @@
37
37
  - 内部文档标 `Internal`;不进入交付目录。
38
38
  - 生成示例值用占位符(`<TOKEN>` / `<PASSWORD>`),不得复制真实配置。
39
39
  - 发现疑似密钥 / 隐私,停止生成、脱敏、提示轮换。
40
- - 术语格式:英文首次出现用 `English(中文)`;代码标识符保持英文。
40
+ - 术语写法:AI 面向文档(`docs/` / `scenarios/` / `prompts/` / `templates/`)英文裸写;`README`、对外报告首次出现用 `English(中文)`;名字类(产品 / 文件 / 命令 / 语言 / 框架 / 标准名 / 代码标识)不附中文。术语表见 `09-glossary.md`,`tests/docs.test.mjs` 检查术语表与 README 首次出现。
41
41
 
42
42
  ## 4. 必须
43
43
 
@@ -56,7 +56,18 @@
56
56
  4. **风险 / 不确定**
57
57
  5. **后续**:owner + 到期
58
58
 
59
- ## 6. Review Checklist(评审清单)
59
+ Audit 报告还必须满足 `docs/08-audit-contract.md`。
60
+
61
+ ## 6. 审计证据门槛
62
+
63
+ - A1–A21 全覆盖;不适用写 `na`。
64
+ - 每条 `pass` 必须给文件行号或可复现命令;只有静态检查通过时写 `pass(静态)`。
65
+ - `0 findings` 只能写成「静态检查未命中」,不能写成规则通过;必须写明 A17 / A21 等覆盖盲区。
66
+ - 计数必须带检索式;不能复现的数字不写。
67
+ - 出结论前做一致性检查:A4 / A8 / A11 / A17 / A21 与证据矛盾时降级。
68
+ - 优先级按 P0–P3;计划每阶段可回滚、有验收。
69
+
70
+ ## 7. Review Checklist(评审清单)
60
71
 
61
72
  - [ ] 族形正确(Page / Behavior / Transport;Node 后端跳过 Page / Component)
62
73
  - [ ] 依赖向内
package/docs/04-gates.md CHANGED
@@ -34,22 +34,27 @@
34
34
  ],
35
35
  "ignore": [
36
36
  { "rule": "A17", "file": "src/pages/legacy/**", "reason": "legacy page", "expires": "2026-12-31" }
37
- ]
37
+ ],
38
+ "boundaries": {
39
+ "external": ["@/types/external"],
40
+ "generated": ["@/types/project"]
41
+ }
38
42
  }
39
43
  ```
40
44
 
41
45
  - `pack`:`app` / `library` / `design-system` / `auto`;CLI `--pack` 优先。
42
46
  - `gates`:数组;每项必须有 `run`,可选 `name` / `timeoutMs`。
43
47
  - `ignore`:例外登记(A12);`rule` / `file` / `reason` 必填,`expires` 可选。过期条目不生效,报告中单列;安全规则 `A21` 不可豁免。
48
+ - `boundaries`:A17 的补充路径;生成类型优先按文件头识别,`external` / `generated` 填 import 前缀或 glob,覆盖头部无标记或路径不在约定内的项目。
44
49
  - 配置文件默认 `codecraft.config.json`;可用 `--config` 指定。
45
50
 
46
51
  ## 4. 按项目类型选门禁
47
52
 
48
53
  | 项目类型 | 通用 | 业务 |
49
54
  |---|---|---|
50
- | **App** | A17 / A21(A4 人工评审) | typecheck、单测、e2e、视觉回归 |
51
- | **Library** | A2 / A11 / A21 | build、单测、exports 检查、依赖对账 |
52
- | **Design System** | A2 / A11 / A21 | 构建、契约快照、视觉回归、a11y |
55
+ | **App** | A6 / A17 / A21(A4 人工评审) | typecheck、单测、e2e、视觉回归 |
56
+ | **Library** | A2 / A6 / A11 / A21 | build、单测、exports 检查、依赖对账 |
57
+ | **Design System** | A2 / A6 / A11 / A21 | 构建、契约快照、视觉回归、a11y |
53
58
  | **Docs** | A21 | 死链、三线头、交付白名单 |
54
59
 
55
60
  ### 4.1 内置规则
@@ -57,13 +62,23 @@
57
62
  | Rule | Pack | 检查 |
58
63
  |---|---|---|
59
64
  | A2 | library / design-system | 包不 import apps;相对路径不逃逸;workspace 依赖必须声明 |
65
+ | A6 | all | 空 catch / 静默失败 |
60
66
  | A11 | library / design-system | 生成物必须有“勿手改 / 派生”标记 |
61
- | A17 | app | `pages / components / behavior` 不 import `external/` / `generated/` |
62
- | A21 | all | 高置信密钥模式(私钥 / AWS / GitHub / Slack / API key) |
67
+ | A17 | app | `pages / components / behavior` 不 import `external/` / `generated/`;生成类型按文件头(`本文件由…生成` / `勿手改` / `@generated`)自动识别;自定义路径用 `boundaries` 补充 |
68
+ | A21 | all | 高置信密钥模式(私钥 / AWS / 阿里云 `LTAI` / GitHub / Slack / API key);配置与后端源码中的明文 `password` / `secret` / `apiKey` / `accessKey` 赋值;环境变量引用与占位符不报 |
63
69
  | A21 | design-system | 包内公开文档(README / USAGE / CHANGELOG / contract)不引用内部 `docs/` |
64
70
 
65
71
  A4(单一收口)是结构判断,仍由 review / 项目门禁负责,不由静态扫描替代。
66
72
 
73
+ ### 4.2 CI 用法
74
+
75
+ ```bash
76
+ codecraft check --changed --ci # PR 只拦变更文件
77
+ codecraft check --changed --format sarif > codecraft.sarif
78
+ ```
79
+
80
+ `--changed` / `--since` 只过滤 findings;底层仍做全量扫描。SARIF 可直接上传 GitHub Code Scanning。
81
+
67
82
  ## 5. 执行顺序
68
83
 
69
84
  1. 快速静态(内置规则、lint);
@@ -1,6 +1,8 @@
1
- # 架构设计方法(可选)
1
+ # 代码架构设计方法(可选)
2
2
 
3
- > 用途:系统级 / 模块级 / 演进级的决策方法;代码级模式见 `05-patterns.md`。
3
+ > 用途:系统级 / 模块级 / 演进级的代码架构决策方法;代码级模式见 `05-patterns.md`。
4
+ > 边界:只讨论代码架构;业务能力、角色、业务流程、领域规则不在本 skill 范围。
5
+ > 产出:只出文档时用 `scenarios/architecture-report.md` + `templates/architecture-report.md`。
4
6
  > 原则:**方法先于模式;约束先于图;边界先于抽象。**
5
7
  > 范围:方法本身与语言无关,可用于 JS/TS 前端与 Node 后端;文中目录与框架取舍以 JS/TS 为准。
6
8
  > 术语:English(中文)。
@@ -202,7 +204,7 @@ src/
202
204
  | 状态 | 局部 / 全局 store / server state / 状态机 | 生命周期、共享范围、异步复杂度 |
203
205
  | UI 组合 | 单应用 / 微前端 / 设计系统分层 | 团队规模、复用范围、品牌数量 |
204
206
 
205
- ## 7. ADR(架构决策记录)
207
+ ## 7. ADR
206
208
 
207
209
  ```md
208
210
  # ADR-0001: 采用模块化单体而非微服务
@@ -24,17 +24,16 @@ npx skills-npm setup
24
24
 
25
25
  装好后项目里会有 `.agents/skills/codecraft/SKILL.md`(以及检测到的 agent 目录)。
26
26
 
27
- 也可以手动在 agent 入口里留一条指针,不要复制规则:
27
+ 也可以手动在通用入口里留一条指针,不要复制规则:
28
28
 
29
- - 通用:`AGENTS.md`
30
- - Claude:`CLAUDE.md`
31
- - Trae:项目 `.trae/rules/codecraft.md`
29
+ - 通用:`AGENTS.md`(推荐)
30
+ - 其它 agent:使用该 agent 自己的入口文件,内容相同
32
31
 
33
32
  ```md
34
- 代码任务先读 <Codecraft 仓库路径>/skills/codecraft/adapters/<平台>/...
33
+ 代码任务先读 <Codecraft 路径>/skills/codecraft/SKILL.md
35
34
  ```
36
35
 
37
- 平台对应:Trae → `adapters/trae/SKILL.md`,Claude → `adapters/claude/SKILL.md`,其他 → `adapters/generic/AGENTS.md`。
36
+ 入口示例:`adapters/generic/AGENTS.md`。其它 agent 不需要单独适配文件,统一指向 `SKILL.md`。
38
37
 
39
38
  ## 2. 最小开场
40
39
 
@@ -90,7 +89,7 @@ npx skills-npm setup
90
89
 
91
90
  ```text
92
91
  使用 Codecraft(<路径>/codecraft)。
93
- 模式:Review(只评审)或 Apply(执行)。
92
+ 模式:Review(只评审)或 Apply。
94
93
  范围:<diff / 文件 / 模块>。
95
94
  任务:按 scenarios/refactor-review.md 评审。
96
95
  要求:先列问题(边界 / 状态 / 错误 / 命名 / 注释 / 生成物),再给最小改动计划;能不改就不改;Apply 后跑门禁。
@@ -149,6 +148,16 @@ npx @ultime/codecraft check --pack design-system --root .
149
148
  要求:不要改文件;按 A2 / A11 / A21 归类;给最小修复计划。
150
149
  ```
151
150
 
151
+ ### 3.9 代码架构分析报告
152
+
153
+ ```text
154
+ 使用 Codecraft(<路径>/codecraft)。
155
+ 模式:Audit(老项目)/ Plan(新项目),只读。
156
+ 范围:<仓库 / 目录 / 包>。
157
+ 任务:按 scenarios/architecture-report.md 出一份代码架构分析报告。
158
+ 要求:按 templates/architecture-report.md 的结构;只做代码架构,不做业务架构;先不画图,用表格 / 列表;每条结论给文件:行号或命令;A17 / A21 写明盲区;0 findings 只写“静态未命中”;未知项单列。
159
+ ```
160
+
152
161
  ## 4. 说法上的要点
153
162
 
154
163
  - 先说模式,不要让 AI 猜。