@captain_z/zsk-skills 0.1.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.
- package/README.md +263 -0
- package/bundles.yaml +104 -0
- package/design-handoff/.gitkeep +0 -0
- package/design-handoff/figma-to-code/SKILL.md +265 -0
- package/design-handoff/ue-mcp/SKILL.md +184 -0
- package/frontend/.gitkeep +0 -0
- package/frontend/a11y-web/SKILL.md +169 -0
- package/frontend/api-contract-ts/SKILL.md +275 -0
- package/frontend/css-bem/SKILL.md +268 -0
- package/frontend/design-frontend/SKILL.md +163 -0
- package/frontend/dor-dod-frontend/SKILL.md +114 -0
- package/frontend/feature-tasks-frontend/SKILL.md +246 -0
- package/frontend/i18n/SKILL.md +296 -0
- package/frontend/nfr-web/SKILL.md +258 -0
- package/frontend/performance-web/SKILL.md +299 -0
- package/frontend/react-components/SKILL.md +211 -0
- package/frontend/react-naming/SKILL.md +224 -0
- package/frontend/review-frontend/SKILL.md +126 -0
- package/frontend/security-web/SKILL.md +286 -0
- package/frontend/spec-frontend/SKILL.md +141 -0
- package/frontend/testing-web/SKILL.md +252 -0
- package/frontend/typescript/SKILL.md +219 -0
- package/meta/.gitkeep +0 -0
- package/meta/philosophy/SKILL.md +221 -0
- package/package.json +24 -0
- package/quality/.gitkeep +0 -0
- package/quality/a11y-principles/SKILL.md +155 -0
- package/quality/code-hygiene/SKILL.md +126 -0
- package/quality/release/SKILL.md +209 -0
- package/quality/security-owasp/SKILL.md +157 -0
- package/quality/testing-pyramid/SKILL.md +173 -0
- package/sdlc/.gitkeep +0 -0
- package/sdlc/archive/SKILL.md +267 -0
- package/sdlc/bugfix/SKILL.md +181 -0
- package/sdlc/bugfix-tasks/SKILL.md +232 -0
- package/sdlc/coding/SKILL.md +177 -0
- package/sdlc/design/SKILL.md +299 -0
- package/sdlc/dor-dod/SKILL.md +120 -0
- package/sdlc/feature/SKILL.md +162 -0
- package/sdlc/proposal/SKILL.md +271 -0
- package/sdlc/refactor/SKILL.md +220 -0
- package/sdlc/refactor-tasks/SKILL.md +265 -0
- package/sdlc/reviewing/SKILL.md +197 -0
- package/sdlc/spec/SKILL.md +235 -0
- package/sdlc/task/SKILL.md +116 -0
- package/sdlc/task-evidence/SKILL.md +178 -0
- package/sdlc/task-structure/SKILL.md +153 -0
- package/sdlc/task-tracking/SKILL.md +192 -0
- package/sdlc/verify/SKILL.md +181 -0
- package/system/.gitkeep +0 -0
- package/system/adr/SKILL.md +169 -0
- package/system/architecture/SKILL.md +182 -0
- package/system/glossary/SKILL.md +141 -0
- package/system/nfr-baseline/SKILL.md +156 -0
- package/system/project-constraints-template/SKILL.md +241 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zsk:nfr-baseline
|
|
3
|
+
description: Project NFR baseline (inherited or established) — 7-category
|
|
4
|
+
framework (performance / a11y / security / i18n / compatibility /
|
|
5
|
+
observability / reliability) and the deviation-declaration discipline.
|
|
6
|
+
Web-specific values (CWV thresholds, WCAG AA, browser matrix, 三语) live in
|
|
7
|
+
frontend/nfr-web.md.
|
|
8
|
+
category: resource
|
|
9
|
+
domain: system
|
|
10
|
+
tier: optional
|
|
11
|
+
related:
|
|
12
|
+
- ../adr/SKILL.md
|
|
13
|
+
- ../../frontend/nfr-web/SKILL.md
|
|
14
|
+
- ../../sdlc/spec/SKILL.md
|
|
15
|
+
triggers:
|
|
16
|
+
- NFR baseline
|
|
17
|
+
- non functional requirements
|
|
18
|
+
- quality attributes
|
|
19
|
+
- ISO 25010
|
|
20
|
+
- deviation declaration
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# System: NFR Baseline(系统级非功能需求基线 · 通用框架)
|
|
24
|
+
|
|
25
|
+
> **定位**:系统级非功能需求的**基线框架**;模块 `spec.md` 的 NFR 章节继承本基线,只记录**偏离或加严**项
|
|
26
|
+
> **参考规范**:ISO/IEC 25010
|
|
27
|
+
> **填充位置**:`docs/system/nfr-baseline.md`
|
|
28
|
+
> **Web 项目具体阈值**:Core Web Vitals / WCAG AA / 浏览器矩阵 / 三语 i18n 等见 [`frontend/nfr-web`](../../frontend/nfr-web/SKILL.md)
|
|
29
|
+
> **继承规则**:模块未显式声明的,按本基线执行
|
|
30
|
+
|
|
31
|
+
## 为什么需要
|
|
32
|
+
|
|
33
|
+
- 避免每个模块 `spec.md` 重抄相同的 NFR 目标
|
|
34
|
+
- 系统级调整时一处改、全局生效
|
|
35
|
+
- 偏离基线必须在模块 spec 显式声明(便于审阅)
|
|
36
|
+
|
|
37
|
+
## 7 类 NFR 框架(通用)
|
|
38
|
+
|
|
39
|
+
| 类别 | 关注点 | 典型子项 |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| **1. 性能** | 响应时间 / 吞吐 / 资源占用 | 首屏 / 交互响应 / 并发请求 / 内存 / CPU |
|
|
42
|
+
| **2. 可访问性** | 辅助技术可用、包容性 | WCAG 等级 / 键盘 / 焦点 / 对比度(见 `quality/a11y-principles`) |
|
|
43
|
+
| **3. 安全** | 机密性 / 完整性 / 可用性 | 鉴权 / CVE 响应 / 脱敏 / 供应链(见 `quality/security-owasp`) |
|
|
44
|
+
| **4. 国际化** | 多语言 / 本地化 | 语言清单 / 入口 / fallback / ICU / RTL |
|
|
45
|
+
| **5. 兼容性** | 运行环境范围 | 浏览器 / OS / 设备 / 分辨率 / 离线 |
|
|
46
|
+
| **6. 可观测性** | 发生什么、为什么 | 错误上报 / 性能埋点 / trace / 日志脱敏 |
|
|
47
|
+
| **7. 可靠性** | 故障恢复 / 降级 | 超时 / 重试 / 错误边界 / 回滚 / 熔断 |
|
|
48
|
+
|
|
49
|
+
## 模板(只保留框架,不带阈值)
|
|
50
|
+
|
|
51
|
+
```md
|
|
52
|
+
# 系统级 NFR 基线
|
|
53
|
+
|
|
54
|
+
> 版本:{YYYY-MM-DD}
|
|
55
|
+
> 维护人:{姓名}
|
|
56
|
+
> 关联:`../quality/*` / `../frontend/*`(分领域规范)、模块 `spec.md` 的 NFR 章节
|
|
57
|
+
> Web 场景补充:见 `frontend/nfr-web.md`
|
|
58
|
+
|
|
59
|
+
## 1. 性能基线
|
|
60
|
+
|
|
61
|
+
| 指标 | 目标 | 度量方式 | 超限处理 |
|
|
62
|
+
| --- | --- | --- | --- |
|
|
63
|
+
| 首屏 / 初始渲染 | {按平台填} | {工具} | 有 ADR 豁免 |
|
|
64
|
+
| 交互响应 | {目标} | {工具} | |
|
|
65
|
+
| 资源占用上限 | {目标} | {工具} | |
|
|
66
|
+
|
|
67
|
+
## 2. 可访问性基线
|
|
68
|
+
|
|
69
|
+
- 等级:{WCAG 2.1 AA 或其他}
|
|
70
|
+
- 键盘操作矩阵:见 [`quality/a11y-principles`](../../quality/a11y-principles/SKILL.md)
|
|
71
|
+
- 焦点管理 / 对比度 / aria 要求:见 `quality/a11y-principles`
|
|
72
|
+
- 自动化扫描门槛:{按平台填}
|
|
73
|
+
|
|
74
|
+
## 3. 安全基线
|
|
75
|
+
|
|
76
|
+
- 鉴权机制:{token / session / OAuth / ...}
|
|
77
|
+
- 权限校验:前端 UI 层 + **后端最终校验**
|
|
78
|
+
- CVE 响应时限:{高危 24h / 中危当迭代 / 低危排期}
|
|
79
|
+
- 依赖许可证:{白名单,默认禁 GPL / AGPL}
|
|
80
|
+
- 详细规范:见 [`quality/security-owasp`](../../quality/security-owasp/SKILL.md)
|
|
81
|
+
|
|
82
|
+
## 4. 国际化基线
|
|
83
|
+
|
|
84
|
+
- 语言清单:{按项目填}(第一个为基线)
|
|
85
|
+
- 入口:唯一 `{{config.i18n.entry}}`
|
|
86
|
+
- Key 命名空间:`{{config.i18n.namespace}}.<module>.<leaf_key>`
|
|
87
|
+
- Fallback:必填,等于基线语言文案
|
|
88
|
+
- ICU:复数 / 选择场景必须用
|
|
89
|
+
- 详细规范:见 [`frontend/i18n`](../../frontend/i18n/SKILL.md)(前端)
|
|
90
|
+
|
|
91
|
+
## 5. 兼容性基线
|
|
92
|
+
|
|
93
|
+
### 运行环境矩阵
|
|
94
|
+
| 平台 / 浏览器 | 最低版本 | 优先级 |
|
|
95
|
+
| --- | --- | --- |
|
|
96
|
+
|
|
97
|
+
### 响应式断点 / 设备尺寸(若适用)
|
|
98
|
+
| 断点 | 最小宽度 | 布局策略 |
|
|
99
|
+
| --- | --- | --- |
|
|
100
|
+
|
|
101
|
+
## 6. 可观测性基线
|
|
102
|
+
|
|
103
|
+
- 错误上报:所有未捕获异常 + 关键业务错误
|
|
104
|
+
- 性能上报:关键指标持续采样
|
|
105
|
+
- 关键交互埋点:{按场景列}
|
|
106
|
+
- 脱敏:上报前过滤敏感字段
|
|
107
|
+
- trace ID:请求响应含 trace ID,便于与后端关联
|
|
108
|
+
|
|
109
|
+
## 7. 可靠性基线
|
|
110
|
+
|
|
111
|
+
- 超时策略:默认请求超时 {N}s
|
|
112
|
+
- 重试:读接口自动重试 N 次(指数退避);写接口不自动重试
|
|
113
|
+
- 错误边界:每个模块入口有错误边界(前端等效机制)
|
|
114
|
+
- 降级 UI:关键页面有兜底(loading / error / empty 三态)
|
|
115
|
+
- 回滚:每次发布有回滚预案(见 [`quality/release`](../../quality/release/SKILL.md))
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 偏离声明规则
|
|
119
|
+
|
|
120
|
+
模块 `spec.md` 中如需偏离基线,必须在 NFR 章节写:
|
|
121
|
+
|
|
122
|
+
```md
|
|
123
|
+
## NFR(继承 system/nfr-baseline.md)
|
|
124
|
+
|
|
125
|
+
### 偏离项
|
|
126
|
+
| 维度 | 基线 | 本模块 | 理由 |
|
|
127
|
+
| --- | --- | --- | --- |
|
|
128
|
+
| 首屏 | < 2.5s | < 1.5s | 核心交互路径,加严 |
|
|
129
|
+
| 响应式 | Tablet+ | Desktop only | 管理后台场景 |
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 与其他 skill 的关系
|
|
133
|
+
|
|
134
|
+
| 本文件章节 | 详细规范落地 |
|
|
135
|
+
| --- | --- |
|
|
136
|
+
| 性能基线(Web) | [`frontend/performance-web`](../../frontend/performance-web/SKILL.md) + [`frontend/nfr-web`](../../frontend/nfr-web/SKILL.md) |
|
|
137
|
+
| 可访问性基线 | [`quality/a11y-principles`](../../quality/a11y-principles/SKILL.md) + [`frontend/a11y-web`](../../frontend/a11y-web/SKILL.md)(Web) |
|
|
138
|
+
| 安全基线 | [`quality/security-owasp`](../../quality/security-owasp/SKILL.md) + [`frontend/security-web`](../../frontend/security-web/SKILL.md)(Web) |
|
|
139
|
+
| 国际化基线 | [`frontend/i18n`](../../frontend/i18n/SKILL.md) |
|
|
140
|
+
| 兼容性基线(Web 浏览器矩阵) | [`frontend/nfr-web`](../../frontend/nfr-web/SKILL.md) |
|
|
141
|
+
| 可靠性基线 | [`quality/release`](../../quality/release/SKILL.md) + `sdlc/design` |
|
|
142
|
+
|
|
143
|
+
## 修订规则
|
|
144
|
+
|
|
145
|
+
- 基线变更必须通过 ADR
|
|
146
|
+
- 新增维度 → 新增 ADR + 更新本文件 + 同步分领域规范
|
|
147
|
+
- 收紧基线 → 评估存量偏离,逐步收敛
|
|
148
|
+
- 放宽基线 → 必须有强业务理由
|
|
149
|
+
|
|
150
|
+
## 质量门禁
|
|
151
|
+
|
|
152
|
+
- [ ] 七大维度基线全覆盖
|
|
153
|
+
- [ ] 每条基线有度量方式
|
|
154
|
+
- [ ] 偏离声明规则清晰
|
|
155
|
+
- [ ] 与分领域规范交叉一致
|
|
156
|
+
- [ ] 变更走 ADR
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zsk:project-constraints-template
|
|
3
|
+
description: Project constraints template for new-project bootstrap — captures
|
|
4
|
+
import origins, forbidden libraries/patterns, required wrappers, naming
|
|
5
|
+
conventions, quality gates, branch/release conventions in one SYSTEM-SPEC
|
|
6
|
+
chapter. The project-side constitutional constraint table, complementary to
|
|
7
|
+
project-config.yaml (mechanical values).
|
|
8
|
+
category: resource
|
|
9
|
+
domain: system
|
|
10
|
+
tier: optional
|
|
11
|
+
related:
|
|
12
|
+
- ../adr/SKILL.md
|
|
13
|
+
- ../nfr-baseline/SKILL.md
|
|
14
|
+
- ../../meta/philosophy/SKILL.md
|
|
15
|
+
triggers:
|
|
16
|
+
- project constraints
|
|
17
|
+
- SYSTEM-SPEC
|
|
18
|
+
- import origins
|
|
19
|
+
- forbidden packages
|
|
20
|
+
- red lines
|
|
21
|
+
- project initialization
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Project Constraints Template(项目约束速查表模板)
|
|
25
|
+
|
|
26
|
+
> **定位**:任何新项目启动时,拷贝本模板到项目根(例如 `SYSTEM-SPEC.md` 的"项目约束"章节,或单独文件 `PROJECT-CONSTRAINTS.md`),填入本项目的实际值。
|
|
27
|
+
> **为什么需要**:zsk skill set 提供**项目无关**的方法论模板;本文件是**项目侧**的"宪法级约束"单一事实源,让 AI / 人在 coding 阶段一眼看完本项目的硬约束。
|
|
28
|
+
> **优先级**:本模板填完后 > 通用 zsk skills;与项目 `SYSTEM-SPEC.md` 是同一层。
|
|
29
|
+
> **维护**:所有约束变动必须通过 ADR(见 [`zsk:adr`](../adr/SKILL.md))。
|
|
30
|
+
|
|
31
|
+
## 何时用
|
|
32
|
+
|
|
33
|
+
- **新项目初始化**:拷贝本模板,填入实际值,作为 `SYSTEM-SPEC.md` 的一章或独立 `PROJECT-CONSTRAINTS.md`
|
|
34
|
+
- **现有项目补齐**:如果项目还没显式写 Import Origins 表,就补一次
|
|
35
|
+
- **技术栈变更**:升级前后各更新一次
|
|
36
|
+
|
|
37
|
+
## 模板(复制并填写)
|
|
38
|
+
|
|
39
|
+
```md
|
|
40
|
+
# 项目约束速查表 — {{项目名}}
|
|
41
|
+
|
|
42
|
+
> 版本:{{YYYY-MM-DD}}
|
|
43
|
+
> 维护人:{{姓名}}
|
|
44
|
+
> 关联 ADR:{{ADR 列表}}
|
|
45
|
+
> 优先级:本文件 > `docs/.best-practices/*` 通用模板
|
|
46
|
+
|
|
47
|
+
## 1. 框架与构建
|
|
48
|
+
|
|
49
|
+
| 维度 | 选型 | 版本锁 | ADR |
|
|
50
|
+
| --- | --- | --- | --- |
|
|
51
|
+
| 框架 | {{React / Vue / Svelte / ...}} | {{版本范围}} | {{ADR-XXXX}} |
|
|
52
|
+
| 语言 | {{TypeScript / JavaScript}} | {{版本}} | — |
|
|
53
|
+
| 构建 | {{Webpack / Vite / Rspack / ...}} | {{版本}} | {{ADR-XXXX}} |
|
|
54
|
+
| 样式 | {{Less / Sass / CSS Modules / Tailwind / ...}} | {{版本}} | {{ADR-XXXX}} |
|
|
55
|
+
| 样式命名 | {{BEM / Atomic / Utility-first}} | — | — |
|
|
56
|
+
|
|
57
|
+
## 2. Import 起源(强约束)
|
|
58
|
+
|
|
59
|
+
> 这是 coding 阶段的**硬约束**。违反会被 Reviewing / Verify 阻断。
|
|
60
|
+
|
|
61
|
+
| 能力 | 必须从这里引入 | 禁止从这里引入 | 示例 |
|
|
62
|
+
| --- | --- | --- | --- |
|
|
63
|
+
| **UI 组件** | `{{项目 UI 库包名}}` | 其他 UI 库 | `import { Button } from '{{UI 库}}';` |
|
|
64
|
+
| **i18n** | `{{项目 i18n 入口}}` | 第三方 i18n 库直接调用 | `import { t } from '{{i18n 入口}}';` |
|
|
65
|
+
| **HTTP 客户端** | `{{项目 HTTP 入口}}` | `fetch` / `axios` 裸调 | `import { request } from '{{HTTP 入口}}';` |
|
|
66
|
+
| **路由** | `{{路由库包名}}` | 其他路由库 | `import { Route } from '{{路由库}}';` |
|
|
67
|
+
| **状态管理(异步)** | `{{TanStack Query / SWR / ...}}` | Redux / MobX / 自研 | — |
|
|
68
|
+
| **状态管理(共享)** | `{{Jotai / Zustand / Context / ...}}` | Redux / 自研 | — |
|
|
69
|
+
| **图标** | `{{项目图标库}}` | 自己手绘 SVG 放 `src/` | — |
|
|
70
|
+
| **工具函数** | `{{项目 utils 目录}}` | 第三方 lodash 等逐个引 | — |
|
|
71
|
+
| **Services** | `{{services_entry}}` | 新建 request 实例 | — |
|
|
72
|
+
|
|
73
|
+
## 3. 必用封装(强约束)
|
|
74
|
+
|
|
75
|
+
> 以下场景必须走项目封装,不得绕过。
|
|
76
|
+
|
|
77
|
+
| 场景 | 必用封装 | 理由 |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| HTTP 请求 | `{{封装函数名}}` | 统一拦截 / 超时 / 鉴权 / 错误码归一化 |
|
|
80
|
+
| 表单校验 | `{{校验 schema 工具}}` | 统一错误文案 + 国际化 |
|
|
81
|
+
| 日期 / 数字格式 | `{{Intl 封装 / moment 封装}}` | 统一时区 / 精度 / 本地化 |
|
|
82
|
+
| 日志上报 | `{{上报 SDK}}` | 脱敏 / 采样 / 关联 traceId |
|
|
83
|
+
| 错误边界 | `{{项目 ErrorBoundary}}` | 统一错误 UI + 上报 |
|
|
84
|
+
| 权限判断 | `{{权限 Hook / util}}` | 前端防误操作 + 后端最终校验 |
|
|
85
|
+
|
|
86
|
+
## 4. 禁用清单(Red Lines)
|
|
87
|
+
|
|
88
|
+
### 禁用的包 / 库
|
|
89
|
+
|
|
90
|
+
| 包名 | 禁用原因 | 替代 | ADR |
|
|
91
|
+
| --- | --- | --- | --- |
|
|
92
|
+
| {{如 Redux}} | {{学习成本 / 与 TanStack 冲突}} | {{Jotai + TanStack Query}} | {{ADR-XXXX}} |
|
|
93
|
+
|
|
94
|
+
### 禁用的语法 / 模式
|
|
95
|
+
|
|
96
|
+
| 模式 | 禁用原因 | 替代 |
|
|
97
|
+
| --- | --- | --- |
|
|
98
|
+
| `any` / `as any` 双层断言 | 类型安全 | 具体类型 / unknown + 收窄 |
|
|
99
|
+
| `@ts-ignore` / `@ts-nocheck` | 绕过类型检查 | 修真正的类型问题 |
|
|
100
|
+
| `dangerouslySetInnerHTML` | XSS 风险 | 文本节点 / 经审 HTML 库 |
|
|
101
|
+
| `eval` / `new Function` | 安全风险 | 逻辑重构 |
|
|
102
|
+
| 硬编码中文 / 英文文案 | i18n 违规 | `{{i18n 函数}}('key', fallback)` |
|
|
103
|
+
| 裸 `fetch` / `axios` | 绕过统一拦截 | 项目 HTTP 入口 |
|
|
104
|
+
| 新建 request 实例 | 请求散落 | 复用 `{{services_entry}}` |
|
|
105
|
+
| 直接在组件里 `console.log` | 生产泄漏 | 封装的 logger(可按环境关) |
|
|
106
|
+
| `<img>` 无 `width/height` | CLS 风险 | 必须声明尺寸 |
|
|
107
|
+
|
|
108
|
+
## 5. 目录与命名
|
|
109
|
+
|
|
110
|
+
| 对象 | 规范 | 说明 |
|
|
111
|
+
| --- | --- | --- |
|
|
112
|
+
| 组件目录 | {{components_root}} | kebab-case 目录 + `index.tsx` |
|
|
113
|
+
| 服务入口 | {{services_entry}} | 单一出口,按域划分 |
|
|
114
|
+
| i18n 入口 | {{i18n_entry}} | 统一 `t()` 出口 |
|
|
115
|
+
| hooks | {{hooks_root}} | 跨模块复用放这里 |
|
|
116
|
+
| 模块文档 | `docs/{module}/` | 一个业务模块一个目录 |
|
|
117
|
+
| 静态资源 | {{static_assets_path}} | 图片 / 字体 / 其他 |
|
|
118
|
+
|
|
119
|
+
### 命名规则
|
|
120
|
+
|
|
121
|
+
| 对象 | 规范 | 示例 |
|
|
122
|
+
| --- | --- | --- |
|
|
123
|
+
| React 组件 | PascalCase | `FeatureList` |
|
|
124
|
+
| 文件(非组件) | kebab-case | `feature-utils.ts` |
|
|
125
|
+
| 变量 / 函数 | camelCase | `featureList` |
|
|
126
|
+
| 常量(模块级) | UPPER_SNAKE_CASE | `MAX_DEPTH` |
|
|
127
|
+
| 类型 / 接口 | PascalCase | `FeatureNode` |
|
|
128
|
+
| Hook | `use` 前缀 | `useFeatureQuery` |
|
|
129
|
+
| 布尔 | `is` / `has` / `can` / `should` 前缀 | `isLoading` |
|
|
130
|
+
| 事件 Handler | `handle` 前缀 | `handleSelect` |
|
|
131
|
+
| 事件 Props | `on` 前缀 | `onSelect` |
|
|
132
|
+
|
|
133
|
+
## 6. 国际化约束
|
|
134
|
+
|
|
135
|
+
| 项 | 本项目要求 |
|
|
136
|
+
| --- | --- |
|
|
137
|
+
| 语言清单 | {{如 zh_CN / en / zh_TW}}(基线为 {{首个语言}}) |
|
|
138
|
+
| 入口 | {{i18n_entry}} 的 `t()` |
|
|
139
|
+
| Key 命名空间 | `{{项目命名空间}}.<module>.<leaf_key>`(例:`app.featureList.empty`) |
|
|
140
|
+
| Fallback | 必填,等于基线语言文案 |
|
|
141
|
+
| 同步要求 | 新增 key 必须同 commit 同步所有语言文件 |
|
|
142
|
+
| 评审门禁 | 缺一语 / 缺 fallback / 硬编码文案 → 打回 |
|
|
143
|
+
|
|
144
|
+
## 7. 质量门禁(本项目具体值)
|
|
145
|
+
|
|
146
|
+
| 门禁 | 本项目命令 | 基线 |
|
|
147
|
+
| --- | --- | --- |
|
|
148
|
+
| lint | `{{lint 命令}}` | 零 error |
|
|
149
|
+
| type-check | `{{type-check 命令}}` | 零 error |
|
|
150
|
+
| unit test | `{{test 命令}}` | 覆盖率 ≥ {{N}}% |
|
|
151
|
+
| build | `{{build 命令}}` | 成功 |
|
|
152
|
+
| Lighthouse Performance | CI 跑 | ≥ {{分数}} |
|
|
153
|
+
| axe-core | CI 跑 | 零 critical/serious |
|
|
154
|
+
| 包体积(单 chunk) | Bundle Analyzer | ≤ {{KB}}KB(gzip) |
|
|
155
|
+
| 依赖许可证 | 自动扫描 | 不含 {{禁用清单,如 GPL/AGPL}} |
|
|
156
|
+
|
|
157
|
+
## 8. 分支与发布
|
|
158
|
+
|
|
159
|
+
| 项 | 本项目约定 |
|
|
160
|
+
| --- | --- |
|
|
161
|
+
| 主干分支 | `{{main/test/master}}` |
|
|
162
|
+
| Feature 分支 | `{{feature/{scope}}}` |
|
|
163
|
+
| Fix 分支 | `{{fix/{id}}}` |
|
|
164
|
+
| Refactor 分支 | `{{refactor/{scope}}}` |
|
|
165
|
+
| Commit 规范 | Conventional Commits |
|
|
166
|
+
| 版本策略 | SemVer(`major.minor.patch`) |
|
|
167
|
+
| Changelog | Keep a Changelog |
|
|
168
|
+
| 部署流水线 | {{Jenkins / GitHub Actions / ...}} |
|
|
169
|
+
|
|
170
|
+
## 9. 环境矩阵
|
|
171
|
+
|
|
172
|
+
| 环境 | 域名 / URL | 用途 |
|
|
173
|
+
| --- | --- | --- |
|
|
174
|
+
| dev | {{域名}} | 本地 / 开发分支 |
|
|
175
|
+
| test | {{域名}} | 集成测试 |
|
|
176
|
+
| pre | {{域名}} | UAT / 预发 |
|
|
177
|
+
| prod | {{域名}} | 生产 |
|
|
178
|
+
|
|
179
|
+
## 10. ADR 索引(本项目决策)
|
|
180
|
+
|
|
181
|
+
| ADR | 决策 | 状态 |
|
|
182
|
+
| --- | --- | --- |
|
|
183
|
+
| {{ADR-0001}} | {{决策名}} | Accepted |
|
|
184
|
+
| {{ADR-0002}} | {{决策名}} | Accepted |
|
|
185
|
+
|
|
186
|
+
完整列表 → `docs/system/adrs/`。
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## 填表指南
|
|
190
|
+
|
|
191
|
+
### 第 1 步:对照 `_config/project-config.template.md`
|
|
192
|
+
|
|
193
|
+
先把 `_config/project-config.template.md` 拷贝到仓库根 `project-config.md`,填入 frontmatter 所有 `<fill-me>` 值 + 正文叙述。本模板中的 `{{...}}` 会从 frontmatter 取值。
|
|
194
|
+
|
|
195
|
+
### 第 2 步:逐节填写
|
|
196
|
+
|
|
197
|
+
按"1. 框架 → 2. Import 起源 → ..."顺序填。没有的列留空或写"本项目不涉及"。
|
|
198
|
+
|
|
199
|
+
### 第 3 步:加入 SYSTEM-SPEC 或单独成文
|
|
200
|
+
|
|
201
|
+
推荐放入 `SYSTEM-SPEC.md` 作为"项目约束速查表"章节。也可独立为 `PROJECT-CONSTRAINTS.md` 文件,通过 `SYSTEM-SPEC.md` 引用。
|
|
202
|
+
|
|
203
|
+
### 第 4 步:约束所有 ADR
|
|
204
|
+
|
|
205
|
+
每条 Import 起源 / 必用封装 / 禁用项,**最好**都有对应 ADR(Context / Decision / Rationale / Alternatives / Consequences)。
|
|
206
|
+
|
|
207
|
+
## 与通用 best-practices 的边界
|
|
208
|
+
|
|
209
|
+
| 这里(项目约束速查表) | 通用 `docs/.best-practices/` |
|
|
210
|
+
| --- | --- |
|
|
211
|
+
| **本项目必须这样做** | **一般做法可以这样** |
|
|
212
|
+
| 冲突时**胜出** | 冲突时**让步** |
|
|
213
|
+
| 每个项目值不同 | 跨项目复用 |
|
|
214
|
+
| 有 ADR 追溯 | 无 ADR(方法论本身) |
|
|
215
|
+
|
|
216
|
+
## 反模式(禁止)
|
|
217
|
+
|
|
218
|
+
- ❌ 把项目约束写进 `docs/.best-practices/`(会污染通用模板)
|
|
219
|
+
- ❌ 约束无 ADR 支持(无法追溯"为什么选这个")
|
|
220
|
+
- ❌ Import 起源只写"推荐"不写"必用 / 禁用"(约束不够硬)
|
|
221
|
+
- ❌ 约束定下后不更新(老约束对不上新代码)
|
|
222
|
+
|
|
223
|
+
## 当约束变更
|
|
224
|
+
|
|
225
|
+
1. 写新 ADR(status = Proposed)
|
|
226
|
+
2. 团队评审
|
|
227
|
+
3. 通过后 → ADR status = Accepted
|
|
228
|
+
4. 更新本表对应行
|
|
229
|
+
5. 更新 `CHANGELOG.md`
|
|
230
|
+
6. 如有代码需迁移 → 列入下一轮 proposal
|
|
231
|
+
|
|
232
|
+
## 扩展:自动化约束
|
|
233
|
+
|
|
234
|
+
可选的工具链集成:
|
|
235
|
+
|
|
236
|
+
- **ESLint `no-restricted-imports`**:把"禁用的包 / 路径"落到 lint 规则
|
|
237
|
+
- **dependency-cruiser**:检查跨层依赖
|
|
238
|
+
- **`.npmrc` / `.yarnrc`**:锁定包源 / 版本策略
|
|
239
|
+
- **pre-commit hook**:检查 i18n 三文件同步、硬编码文案
|
|
240
|
+
|
|
241
|
+
本模板只定**约束是什么**,执行 / 自动化在项目 CI 配置里。
|