code-abyss 1.6.15 → 1.7.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 (82) hide show
  1. package/bin/install.js +25 -4
  2. package/package.json +2 -2
  3. package/skills/SKILL.md +24 -16
  4. package/skills/domains/ai/SKILL.md +2 -2
  5. package/skills/domains/ai/prompt-and-eval.md +279 -0
  6. package/skills/domains/architecture/SKILL.md +2 -3
  7. package/skills/domains/architecture/security-arch.md +87 -0
  8. package/skills/domains/data-engineering/SKILL.md +188 -26
  9. package/skills/domains/development/SKILL.md +1 -4
  10. package/skills/domains/devops/SKILL.md +3 -5
  11. package/skills/domains/devops/performance.md +63 -0
  12. package/skills/domains/devops/testing.md +97 -0
  13. package/skills/domains/frontend-design/SKILL.md +12 -3
  14. package/skills/domains/frontend-design/claymorphism/SKILL.md +117 -0
  15. package/skills/domains/frontend-design/claymorphism/references/tokens.css +52 -0
  16. package/skills/domains/frontend-design/engineering.md +287 -0
  17. package/skills/domains/frontend-design/glassmorphism/SKILL.md +138 -0
  18. package/skills/domains/frontend-design/glassmorphism/references/tokens.css +32 -0
  19. package/skills/domains/frontend-design/liquid-glass/SKILL.md +135 -0
  20. package/skills/domains/frontend-design/liquid-glass/references/tokens.css +81 -0
  21. package/skills/domains/frontend-design/neubrutalism/SKILL.md +141 -0
  22. package/skills/domains/frontend-design/neubrutalism/references/tokens.css +44 -0
  23. package/skills/domains/infrastructure/SKILL.md +174 -34
  24. package/skills/domains/mobile/SKILL.md +211 -21
  25. package/skills/domains/orchestration/SKILL.md +1 -0
  26. package/skills/domains/security/SKILL.md +4 -6
  27. package/skills/domains/security/blue-team.md +57 -0
  28. package/skills/domains/security/red-team.md +54 -0
  29. package/skills/domains/security/threat-intel.md +50 -0
  30. package/skills/orchestration/multi-agent/SKILL.md +195 -46
  31. package/skills/run_skill.js +134 -0
  32. package/skills/tools/gen-docs/SKILL.md +6 -4
  33. package/skills/tools/gen-docs/scripts/doc_generator.js +349 -0
  34. package/skills/tools/verify-change/SKILL.md +8 -6
  35. package/skills/tools/verify-change/scripts/change_analyzer.js +270 -0
  36. package/skills/tools/verify-module/SKILL.md +6 -4
  37. package/skills/tools/verify-module/scripts/module_scanner.js +145 -0
  38. package/skills/tools/verify-quality/SKILL.md +5 -3
  39. package/skills/tools/verify-quality/scripts/quality_checker.js +276 -0
  40. package/skills/tools/verify-security/SKILL.md +7 -5
  41. package/skills/tools/verify-security/scripts/security_scanner.js +133 -0
  42. package/skills/domains/COVERAGE_PLAN.md +0 -232
  43. package/skills/domains/ai/model-evaluation.md +0 -790
  44. package/skills/domains/ai/prompt-engineering.md +0 -703
  45. package/skills/domains/architecture/compliance.md +0 -299
  46. package/skills/domains/architecture/data-security.md +0 -184
  47. package/skills/domains/data-engineering/data-pipeline.md +0 -762
  48. package/skills/domains/data-engineering/data-quality.md +0 -894
  49. package/skills/domains/data-engineering/stream-processing.md +0 -791
  50. package/skills/domains/development/dart.md +0 -963
  51. package/skills/domains/development/kotlin.md +0 -834
  52. package/skills/domains/development/php.md +0 -659
  53. package/skills/domains/development/swift.md +0 -755
  54. package/skills/domains/devops/e2e-testing.md +0 -914
  55. package/skills/domains/devops/performance-testing.md +0 -734
  56. package/skills/domains/devops/testing-strategy.md +0 -667
  57. package/skills/domains/frontend-design/build-tools.md +0 -743
  58. package/skills/domains/frontend-design/performance.md +0 -734
  59. package/skills/domains/frontend-design/testing.md +0 -699
  60. package/skills/domains/infrastructure/gitops.md +0 -735
  61. package/skills/domains/infrastructure/iac.md +0 -855
  62. package/skills/domains/infrastructure/kubernetes.md +0 -1018
  63. package/skills/domains/mobile/android-dev.md +0 -979
  64. package/skills/domains/mobile/cross-platform.md +0 -795
  65. package/skills/domains/mobile/ios-dev.md +0 -931
  66. package/skills/domains/security/secrets-management.md +0 -834
  67. package/skills/domains/security/supply-chain.md +0 -931
  68. package/skills/domains/security/threat-modeling.md +0 -828
  69. package/skills/run_skill.py +0 -88
  70. package/skills/tests/README.md +0 -225
  71. package/skills/tests/SUMMARY.md +0 -362
  72. package/skills/tests/__init__.py +0 -3
  73. package/skills/tests/test_change_analyzer.py +0 -558
  74. package/skills/tests/test_doc_generator.py +0 -538
  75. package/skills/tests/test_module_scanner.py +0 -376
  76. package/skills/tests/test_quality_checker.py +0 -516
  77. package/skills/tests/test_security_scanner.py +0 -426
  78. package/skills/tools/gen-docs/scripts/doc_generator.py +0 -491
  79. package/skills/tools/verify-change/scripts/change_analyzer.py +0 -529
  80. package/skills/tools/verify-module/scripts/module_scanner.py +0 -321
  81. package/skills/tools/verify-quality/scripts/quality_checker.py +0 -481
  82. package/skills/tools/verify-security/scripts/security_scanner.py +0 -368
@@ -1,43 +1,205 @@
1
1
  ---
2
2
  name: data-engineering
3
3
  description: 数据工程。Airflow、Dagster、Kafka Streams、Flink、dbt、数据管道、流处理、数据质量。当用户提到数据管道、ETL、流处理、数据质量时路由到此。
4
+ license: MIT
4
5
  ---
5
6
 
6
- # 🏗️ 数据工程域 · Data Engineering
7
+ # 数据工程域 · Data Engineering
7
8
 
8
9
  ## 域概览
9
10
 
10
11
  数据工程域涵盖数据管道编排、流式处理、数据质量保障三大核心领域。
11
12
 
12
- ## 秘典索引
13
+ ```
14
+ 数据管道层 流处理层 质量保障层
15
+ ├── Airflow (调度编排) ├── Kafka Streams ├── Great Expectations
16
+ ├── Dagster (资产管理) ├── Flink ├── dbt
17
+ └── Prefect (现代工作流) └── Spark Streaming └── Soda Core
18
+ ```
19
+
20
+ ---
21
+
22
+ ## 数据管道编排
23
+
24
+ ### 框架对比
25
+
26
+ | 特性 | Airflow | Dagster | Prefect |
27
+ |------|---------|---------|---------|
28
+ | 核心模型 | DAG + Task | Asset + Op | Flow + Task |
29
+ | 学习曲线 | 陡峭 | 中等 | 平缓 |
30
+ | 资产管理 | 无 | 原生支持 | 无 |
31
+ | 动态任务 | 支持 | 支持 | 支持 |
32
+ | 本地开发 | 复杂 | 简单 | 简单 |
33
+ | 社区生态 | 最大 | 成长中 | 成长中 |
34
+
35
+ ### Airflow 核心模式
36
+
37
+ - DAG 定义:`with DAG(dag_id, schedule, default_args) as dag`
38
+ - TaskFlow API:`@task` 装饰器,自动 XCom 传递
39
+ - 动态任务:`@task` + `.expand()` 实现 dynamic task mapping
40
+ - Operators:PythonOperator / BashOperator / SQL / HTTP / S3
41
+ - Sensors:FileSensor / HttpSensor / ExternalTaskSensor
42
+ - 重试策略:`retries=3, retry_delay=timedelta(minutes=5), retry_exponential_backoff=True`
43
+ - 失败回调:`on_failure_callback` 发送告警
44
+ - SLA 监控:`sla=timedelta(hours=2)` + `sla_miss_callback`
45
+
46
+ ### Dagster 核心模式
47
+
48
+ - Asset 定义:`@asset(group_name, deps)` 声明数据资产
49
+ - MaterializeResult:返回元数据(行数、预览等)
50
+ - Resources:`ConfigurableResource` 管理外部连接
51
+ - Jobs:`define_asset_job(selection=AssetSelection.groups(...))`
52
+ - Schedules:`ScheduleDefinition(job, cron_schedule)`
53
+ - Sensors:`@sensor(job)` 监听外部事件触发
54
+ - Partitions:`DailyPartitionsDefinition` 按日分区
55
+ - Asset Checks:`@asset_check` 验证数据新鲜度/质量
56
+
57
+ ### Prefect 核心模式
58
+
59
+ - Flow/Task:`@flow` + `@task(retries=3, cache_key_fn=task_input_hash)`
60
+ - 并发:`ConcurrentTaskRunner` + `task.map(items)`
61
+ - Deployments:`Deployment.build_from_flow(schedule=CronSchedule(...))`
62
+ - Blocks:`Secret` / `JSON` 管理配置和密钥
63
+
64
+ ### 调度策略 Checklist
65
+
66
+ - [ ] Cron 表达式正确(`0 2 * * *` 日批 / `*/15 * * * *` 实时)
67
+ - [ ] 事件驱动:文件到达 / S3 / API 触发
68
+ - [ ] 跨 DAG 依赖:ExternalTaskSensor / Asset deps
69
+ - [ ] 幂等性:UPSERT / 分区覆盖写入
70
+ - [ ] 增量处理:`WHERE updated_at > last_run`
71
+ - [ ] 数据血缘:Dagster 原生 / Airflow Lineage / dbt ref()
72
+
73
+ ---
74
+
75
+ ## 流式处理
76
+
77
+ ### 框架对比
78
+
79
+ | 特性 | Kafka Streams | Flink | Spark Streaming |
80
+ |------|---------------|-------|-----------------|
81
+ | 部署模式 | 嵌入式(JVM) | 独立集群 | 独立集群 |
82
+ | 状态管理 | RocksDB | 内存/RocksDB | 内存 |
83
+ | Exactly-Once | 支持 | 支持 | 支持 |
84
+ | 窗口类型 | 丰富 | 最丰富 | 基础 |
85
+ | 学习曲线 | 平缓 | 陡峭 | 中等 |
86
+ | Python API | kafka-python | PyFlink | PySpark |
87
+
88
+ ### Kafka Streams 核心模式
89
+
90
+ - 拓扑构建:`StreamsBuilder` → `stream()` → `filter/map/flatMap` → `to()`
91
+ - 聚合:`groupByKey().count()` / `.aggregate()` / `.reduce()`
92
+ - Join:Stream-Stream(时间窗口)/ Stream-Table / Table-Table
93
+ - 状态存储:`Stores.persistentKeyValueStore` + Transformer
94
+ - Exactly-Once:`PROCESSING_GUARANTEE_CONFIG = EXACTLY_ONCE_V2`
95
+ - 性能调优:`NUM_STREAM_THREADS=4` / `CACHE_MAX_BYTES_BUFFERING` / RocksDB 配置
13
96
 
14
- | 秘典 | 覆盖范围 | 触发词 |
15
- |------|----------|--------|
16
- | [data-pipeline.md](./data-pipeline.md) | Airflow/Dagster/Prefect/调度编排 | 数据管道、Airflow、Dagster、Prefect、ETL、数据编排 |
17
- | [stream-processing.md](./stream-processing.md) | Kafka Streams/Flink/实时处理 | 流处理、Kafka Streams、Flink、实时处理、流式计算 |
18
- | [data-quality.md](./data-quality.md) | Great Expectations/dbt/数据验证 | 数据质量、Great Expectations、dbt、数据验证、数据测试 |
97
+ ### Flink 核心模式
19
98
 
20
- ## 技术栈
99
+ - DataStream API:`env.addSource()` → `filter/map` → `addSink()`
100
+ - 窗口类型:
101
+ - 滚动窗口 `TumblingProcessingTimeWindows.of(Time.minutes(5))`
102
+ - 滑动窗口 `SlidingProcessingTimeWindows.of(size, slide)`
103
+ - 会话窗口 `ProcessingTimeSessionWindows.withGap(gap)`
104
+ - 全局窗口 `GlobalWindows.create()` + 自定义 Trigger
105
+ - 窗口聚合:`aggregate(AggregateFunction, WindowFunction)` 增量+全窗口
106
+ - ProcessFunction:低级 API,访问时间戳、注册定时器
107
+ - 状态管理:ValueState / ListState / MapState + TTL 清理
108
+ - Checkpoint:`env.enableCheckpointing(60000)` + EXACTLY_ONCE
109
+ - Savepoint:`flink run -s /path/to/savepoint`
110
+ - 时间语义:Event Time + Watermark(`forBoundedOutOfOrderness`)
111
+ - 延迟数据:`allowedLateness()` + `sideOutputLateData()`
112
+ - 数据倾斜:添加随机前缀打散 key
113
+
114
+ ### 流处理 Checklist
115
+
116
+ - [ ] 选择时间语义:Event Time vs Processing Time
117
+ - [ ] Watermark 策略:乱序容忍度设置
118
+ - [ ] 窗口类型匹配业务场景
119
+ - [ ] 状态 TTL 防止无限增长
120
+ - [ ] Checkpoint 间隔和超时配置
121
+ - [ ] Exactly-Once 语义端到端保证
122
+ - [ ] 背压监控和处理
123
+ - [ ] 并行度调优
124
+
125
+ ---
126
+
127
+ ## 数据质量
128
+
129
+ ### 质量维度
21
130
 
22
131
  ```
23
- 数据管道层
24
- ├── Airflow (调度编排)
25
- ├── Dagster (资产管理)
26
- └── Prefect (现代工作流)
27
-
28
- 流处理层
29
- ├── Kafka Streams (轻量级)
30
- ├── Flink (分布式流处理)
31
- └── Spark Streaming (批流一体)
32
-
33
- 质量保障层
34
- ├── Great Expectations (数据验证)
35
- ├── dbt (数据转换测试)
36
- └── Soda (数据可观测性)
132
+ 完整性(非空) → 准确性(范围) → 一致性(关联) → 及时性(新鲜度) → 有效性(格式)
37
133
  ```
38
134
 
39
- ## 使用指南
135
+ ### 工具对比
136
+
137
+ | 工具 | 优势 | 适用场景 |
138
+ |------|------|----------|
139
+ | Great Expectations | 丰富 Expectations、Data Docs | Python 生态、复杂验证 |
140
+ | dbt | SQL 原生、血缘追踪 | 数据仓库、转换测试 |
141
+ | Soda Core | 简洁 YAML 配置 | 快速验证、CI/CD |
142
+
143
+ ### Great Expectations 核心模式
144
+
145
+ - Data Context:`gx.get_context()` → 添加数据源 → 构建批次
146
+ - 常用 Expectations:
147
+ - `expect_table_row_count_to_be_between(min, max)`
148
+ - `expect_column_values_to_not_be_null(column)`
149
+ - `expect_column_values_to_be_unique(column)`
150
+ - `expect_column_values_to_be_between(column, min, max)`
151
+ - `expect_column_values_to_be_in_set(column, value_set)`
152
+ - `expect_column_values_to_match_regex(column, regex)`
153
+ - Checkpoints:批量运行验证 + 生成 Data Docs
154
+ - 自定义 Expectation:继承 `ColumnMapExpectation`
155
+
156
+ ### dbt 测试核心模式
157
+
158
+ - Schema 测试:`unique` / `not_null` / `accepted_values` / `relationships`
159
+ - Generic 测试:`{% test name(model, column_name, params) %}`
160
+ - Singular 测试:`tests/` 目录下自定义 SQL,返回行 = 失败
161
+ - dbt_expectations 包:`expect_column_mean_to_be_between` / `expect_row_values_to_have_recent_data`
162
+ - 执行:`dbt test` / `dbt test --select model` / `dbt test --store-failures`
163
+ - 血缘:`{{ ref('model') }}` + `{{ source('schema', 'table') }}` → `dbt docs generate`
164
+
165
+ ### Soda Core 核心模式
166
+
167
+ ```yaml
168
+ checks for table_name:
169
+ - row_count > 100
170
+ - missing_count(column) = 0
171
+ - duplicate_count(column) = 0
172
+ - invalid_count(column) = 0:
173
+ valid format: email
174
+ - freshness(timestamp_col) < 1d
175
+ ```
176
+
177
+ ### 数据质量 Checklist
178
+
179
+ - [ ] 分层验证:源数据 → 转换后 → 目标数据
180
+ - [ ] 完整性:必需列非空、无空字符串
181
+ - [ ] 准确性:数值范围、格式正则、逻辑一致
182
+ - [ ] 一致性:跨表主键匹配、值一致
183
+ - [ ] 及时性:数据新鲜度 < 阈值
184
+ - [ ] 唯一性:主键/业务键无重复
185
+ - [ ] 质量指标:完整性/唯一性/有效性加权评分
186
+ - [ ] 告警:指标低于阈值自动通知(Slack/Email/PagerDuty)
187
+ - [ ] 持续监控:定时执行质量检查
188
+
189
+ ---
190
+
191
+ ## 最佳实践
192
+
193
+ | 实践 | 说明 |
194
+ |------|------|
195
+ | 幂等性设计 | UPSERT / 分区覆盖,重跑不产生副作用 |
196
+ | 增量处理 | 基于时间戳/CDC 增量提取,减少全量扫描 |
197
+ | 数据血缘 | dbt ref() / Dagster Asset deps 追踪上下游 |
198
+ | 分层验证 | 源→转换→目标每层都验证 |
199
+ | 监控告警 | 管道 SLA + 质量指标 + 延迟告警 |
200
+ | 状态管理 | 流处理状态 TTL + Checkpoint + Savepoint |
201
+ | 容错设计 | 重试策略 + 死信队列 + 回滚方案 |
202
+
203
+ ## 触发词
40
204
 
41
- 1. **数据管道开发** → 查阅 data-pipeline.md
42
- 2. **实时流处理** → 查阅 stream-processing.md
43
- 3. **数据质量保障** → 查阅 data-quality.md
205
+ 数据管道、Airflow、Dagster、Prefect、ETL、流处理、Kafka Streams、Flink、数据质量、Great Expectations、dbt、数据验证、数据血缘
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: development
3
3
  description: 开发语言能力索引。Python、Go、Rust、TypeScript、Java、C++、Shell。当用户提到编程、开发、代码、语言时路由到此。
4
+ license: MIT
4
5
  ---
5
6
 
6
7
  # 符箓秘典 · 开发语言能力中枢
@@ -16,10 +17,6 @@ description: 开发语言能力索引。Python、Go、Rust、TypeScript、Java
16
17
  | [java](java.md) | Java | 企业级、Spring、微服务 |
17
18
  | [cpp](cpp.md) | C/C++ | 系统底层、性能优化 |
18
19
  | [shell](shell.md) | Bash | 脚本自动化、系统管理 |
19
- | [php](php.md) | PHP | Laravel、Symfony、Web开发 |
20
- | [swift](swift.md) | Swift | SwiftUI、iOS开发、Combine |
21
- | [kotlin](kotlin.md) | Kotlin | Jetpack Compose、Android开发 |
22
- | [dart](dart.md) | Dart | Flutter、跨平台开发 |
23
20
 
24
21
  ## 语言选型指南
25
22
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devops
3
3
  description: DevOps 能力索引。Git、测试、DevSecOps、数据库。当用户提到 DevOps、CI/CD、Git、测试时路由到此。
4
+ license: MIT
4
5
  ---
5
6
 
6
7
  # 🔧 炼器秘典 · DevOps 能力中枢
@@ -11,13 +12,10 @@ description: DevOps 能力索引。Git、测试、DevSecOps、数据库。当用
11
12
  | Skill | 定位 | 核心能力 |
12
13
  |-------|------|----------|
13
14
  | [git-workflow](git-workflow.md) | 版本控制 | Git、分支策略、PR |
14
- | [testing](testing.md) | 软件测试 | 单元测试、集成测试、TDD |
15
- | [testing-strategy](testing-strategy.md) | 测试策略 | 测试金字塔、测试左移、契约测试 |
16
- | [e2e-testing](e2e-testing.md) | E2E测试 | Playwright、Cypress、可视化回归 |
17
- | [performance-testing](performance-testing.md) | 性能测试 | k6、JMeter、负载测试、压力测试 |
15
+ | [testing](testing.md) | 软件测试 | 单元测试、集成测试、TDD、测试策略、E2E测试 |
18
16
  | [devsecops](devsecops.md) | 安全开发 | CI/CD安全、供应链安全 |
19
17
  | [database](database.md) | 数据库 | SQL、NoSQL、优化 |
20
- | [performance](performance.md) | 性能优化 | Profiling、火焰图、基准测试 |
18
+ | [performance](performance.md) | 性能优化 | Profiling、火焰图、基准测试、负载测试、性能测试 |
21
19
  | [observability](observability.md) | 可观测性 | 日志、指标、追踪、SLO |
22
20
  | [cost-optimization](cost-optimization.md) | 成本优化 | FinOps、右尺寸、Spot、伸缩 |
23
21
 
@@ -271,3 +271,66 @@ pool_size = (core_count * 2) + effective_spindle_count
271
271
  - [ ] 网络无丢包
272
272
  ```
273
273
 
274
+ ---
275
+
276
+ ## 性能测试(源自 performance-testing)
277
+
278
+ ### 测试类型
279
+
280
+ | 类型 | 用户数 | 持续时间 | 目标 |
281
+ |------|--------|----------|------|
282
+ | 负载测试 | 预期峰值 | 30min-2h | 验证性能指标 |
283
+ | 压力测试 | 超出峰值 | 1-3h | 找到崩溃点 |
284
+ | 浸泡测试 | 正常负载 | 8-72h | 检测内存泄漏 |
285
+ | 峰值测试 | 瞬间激增 | 短时间 | 测试弹性 |
286
+
287
+ ### k6 核心模式
288
+
289
+ ```javascript
290
+ // 阶梯式负载
291
+ export const options = {
292
+ stages: [
293
+ { duration: '2m', target: 100 },
294
+ { duration: '5m', target: 100 },
295
+ { duration: '2m', target: 0 },
296
+ ],
297
+ thresholds: {
298
+ http_req_duration: ['p(95)<500'],
299
+ http_req_failed: ['rate<0.01'],
300
+ },
301
+ };
302
+ ```
303
+
304
+ ### 性能基准阈值
305
+
306
+ | 场景 | P95响应时间 | 错误率 | 吞吐量 |
307
+ |------|-------------|--------|--------|
308
+ | API查询 | <200ms | <0.1% | >1000 RPS |
309
+ | API写入 | <500ms | <0.5% | >500 RPS |
310
+ | 页面加载 | <2s | <1% | >100 RPS |
311
+
312
+ ### 工具选型
313
+
314
+ | 工具 | 语言 | 适用场景 |
315
+ |------|------|----------|
316
+ | k6 | JavaScript | 现代化、DevOps集成、云原生 |
317
+ | JMeter | Java/GUI | 功能全面、插件丰富 |
318
+ | Gatling | Scala | 高性能、大规模测试 |
319
+ | Locust | Python | Python生态、分布式 |
320
+
321
+ ### 渐进式测试流程
322
+
323
+ ```
324
+ 1. 基准测试 → 单用户建立基准
325
+ 2. 负载测试 → 预期负载验证性能
326
+ 3. 压力测试 → 超出负载找极限
327
+ 4. 浸泡测试 → 长时间检测泄漏
328
+ ```
329
+
330
+ ### 测试环境要求
331
+
332
+ - 独立环境,配置与生产一致
333
+ - 数据分布模拟真实:70%轻度 / 20%中度 / 10%重度用户
334
+ - 数据隔离:`user_${__VU}_${__ITER}`
335
+ - CI集成:k6 GitHub Action + 阈值门禁
336
+
@@ -184,3 +184,100 @@ AAA:
184
184
  3. 重构: 优化代码,保持测试通过
185
185
  ```
186
186
 
187
+ ---
188
+
189
+ ## 测试策略(源自 testing-strategy)
190
+
191
+ ### 测试金字塔比例
192
+
193
+ | 层级 | 占比 | 执行时间 | 成本 |
194
+ |------|------|----------|------|
195
+ | 单元测试 | 70% | <1s | 低 |
196
+ | 集成测试 | 20% | 1-10s | 中 |
197
+ | E2E测试 | 10% | 10s-5m | 高 |
198
+
199
+ ### 测试左移 Checklist
200
+
201
+ ```yaml
202
+ 需求阶段: 可测试性评审、验收标准定义、测试用例设计
203
+ 开发阶段: TDD、单元测试同步编写、代码审查包含测试
204
+ 提交阶段: Pre-commit Hook、本地测试必过、静态分析
205
+ CI阶段: 自动化测试、覆盖率门禁、性能基准测试
206
+ ```
207
+
208
+ ### 契约测试要点
209
+
210
+ - 消费者驱动契约 (CDC):Consumer 定义期望 → Provider 验证契约
211
+ - 工具:Pact(多语言)、Spring Cloud Contract(Java)
212
+ - 核心:Provider API <-> Contract <-> Consumer,双方独立验证
213
+
214
+ ### 覆盖率策略
215
+
216
+ ```yaml
217
+ 类型: 行覆盖率、分支覆盖率、函数覆盖率、语句覆盖率
218
+ 门禁: 全局 ≥80%,核心模块 ≥90%
219
+ 排除: tests/、migrations/、__init__.py、config 文件
220
+ ```
221
+
222
+ ### 变异测试
223
+
224
+ - 修改源码(变异体)验证测试是否能捕获
225
+ - 工具:Stryker (JS)、Pitest (Java)
226
+ - 阈值:high 80% / low 60% / break 50%
227
+
228
+ ### 测试最佳实践
229
+
230
+ - AAA 模式:Arrange → Act → Assert
231
+ - 命名:`should [预期行为] when [条件]`
232
+ - 单一职责:每个测试只验证一件事
233
+ - 数据隔离:Fixture/Factory 模式,每测试独立实例
234
+ - 并行执行:Jest `maxWorkers: '50%'`、pytest `-n auto`
235
+
236
+ ---
237
+
238
+ ## E2E 测试(源自 e2e-testing)
239
+
240
+ ### Playwright vs Cypress
241
+
242
+ | 特性 | Playwright | Cypress |
243
+ |------|-----------|---------|
244
+ | 多浏览器 | Chromium/Firefox/WebKit | Chromium/Firefox/Edge |
245
+ | 多标签页/iframe | 原生支持 | 有限 |
246
+ | 并行执行 | 原生支持 | 需付费 |
247
+ | 调试体验 | 一般 | 优秀 |
248
+
249
+ ### 选择器优先级
250
+
251
+ ```
252
+ 1. data-testid (推荐)
253
+ 2. role + accessible name
254
+ 3. 稳定的 class/id
255
+ 4. 文本内容 (谨慎)
256
+ 5. CSS/XPath (避免)
257
+ ```
258
+
259
+ ### E2E Checklist
260
+
261
+ ```yaml
262
+ 架构:
263
+ - 页面对象模式 (POM) 封装页面操作
264
+ - 测试独立性:通过 API 准备数据,不依赖其他测试
265
+ - 智能等待:waitForSelector/waitForResponse,禁止 waitForTimeout
266
+
267
+ 网络:
268
+ - Mock API:page.route() / cy.intercept() 隔离后端
269
+ - 等待响应:waitForResponse 确认数据加载
270
+
271
+ 可视化回归:
272
+ - Playwright: toHaveScreenshot() + mask 动态内容
273
+ - Percy/Chromatic: 云端截图对比
274
+
275
+ 认证:
276
+ - Playwright: storageState 复用登录态
277
+ - Cypress: cy.session() 缓存会话
278
+
279
+ CI集成:
280
+ - retries: CI 环境 2 次重试
281
+ - artifacts: 失败时保存截图/视频/trace
282
+ ```
283
+
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: frontend-design
3
3
  description: 前端设计美学秘典。UI美学、组件模式、UX原则。当魔尊需要前端设计、UI/UX指导、组件设计时使用。
4
+ license: MIT
4
5
  user-invocable: true
5
6
  ---
6
7
 
@@ -14,9 +15,16 @@ user-invocable: true
14
15
  | 组件模式 | [component-patterns.md](component-patterns.md) | 布局模板、响应式设计、交互模式、动画、表单设计、卡片组件、导航模式 |
15
16
  | UX原则 | [ux-principles.md](ux-principles.md) | 可用性、无障碍、信息架构、用户流程、加载体验、反馈设计、移动端优先、性能感知 |
16
17
  | 状态管理 | [state-management.md](state-management.md) | Redux、Zustand、Jotai、Recoil、Context API、性能优化 |
17
- | 性能优化 | [performance.md](performance.md) | 懒加载、代码分割、虚拟滚动、Web Vitals、资源优化 |
18
- | 前端测试 | [testing.md](testing.md) | Vitest、Playwright、单元测试、E2E测试、视觉回归 |
19
- | 构建工具 | [build-tools.md](build-tools.md) | Vite、Webpack、Turbopack、esbuild、构建优化 |
18
+ | 前端工程化 | [engineering.md](engineering.md) | 性能优化、Web Vitals、测试(Vitest/Playwright)、构建工具(Vite/Webpack) |
19
+
20
+ ## 设计风格系统
21
+
22
+ | 风格 | 文档 | 涵盖 |
23
+ |------|------|------|
24
+ | Claymorphism | [claymorphism/SKILL.md](claymorphism/SKILL.md) | 软陶风格、大圆角、双内阴影、偏移外阴影、暗色模式 |
25
+ | Glassmorphism | [glassmorphism/SKILL.md](glassmorphism/SKILL.md) | 毛玻璃风格、backdrop-filter、透明度、模糊层级 |
26
+ | Neubrutalism | [neubrutalism/SKILL.md](neubrutalism/SKILL.md) | 新粗野主义、粗边框、实色偏移阴影、高饱和色彩 |
27
+ | Liquid Glass | [liquid-glass/SKILL.md](liquid-glass/SKILL.md) | Apple 液态玻璃、半透明深度感知、弹簧动画、环境响应 |
20
28
 
21
29
  ## 使用场景
22
30
 
@@ -26,3 +34,4 @@ user-invocable: true
26
34
  - 无障碍改进
27
35
  - 响应式布局
28
36
  - 交互动画设计
37
+ - 设计风格选型(Claymorphism / Glassmorphism / Neubrutalism / Liquid Glass)
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: claymorphism
3
+ description: Claymorphism design system skill. Use when building soft, puffy, clay-like UI components with large radii, dual inner shadows, and offset outer shadows.
4
+ license: MIT
5
+ ---
6
+
7
+ # Claymorphism Design Spec
8
+
9
+ ## 3 Core Elements
10
+
11
+ 1. **Large Radius** — Generous `border-radius` (20–50px) for a puffy, inflated look
12
+ 2. **Dual Inner Shadows** — Light inset from top-left + dark inset from bottom-right to simulate 3D clay surface
13
+ 3. **Offset Outer Shadow** — Directional `box-shadow` offset (not centered) to ground the element
14
+
15
+ ## CSS Tokens
16
+
17
+ Reference: [references/tokens.css](references/tokens.css)
18
+
19
+ ```css
20
+ @import 'references/tokens.css';
21
+
22
+ .clay-card {
23
+ background: var(--clay-bg-card);
24
+ border-radius: var(--clay-radius-lg);
25
+ box-shadow: var(--clay-shadow);
26
+ color: var(--clay-text);
27
+ }
28
+ ```
29
+
30
+ ## Component Examples
31
+
32
+ ### Card
33
+ ```css
34
+ .clay-card {
35
+ background: var(--clay-bg-card);
36
+ border-radius: var(--clay-radius-lg);
37
+ box-shadow: var(--clay-shadow);
38
+ padding: 1.5rem;
39
+ color: var(--clay-text);
40
+ }
41
+ ```
42
+
43
+ ### Button
44
+ ```css
45
+ .clay-btn {
46
+ background: var(--clay-bg-button);
47
+ border: none;
48
+ border-radius: var(--clay-radius-pill);
49
+ box-shadow: var(--clay-shadow);
50
+ padding: 0.75rem 1.5rem;
51
+ color: var(--clay-text);
52
+ cursor: pointer;
53
+ transition: box-shadow 0.2s;
54
+ }
55
+ .clay-btn:hover {
56
+ box-shadow: var(--clay-shadow-elevated);
57
+ }
58
+ .clay-btn:active {
59
+ box-shadow: var(--clay-shadow-pressed);
60
+ }
61
+ ```
62
+
63
+ ### Input
64
+ ```css
65
+ .clay-input {
66
+ background: var(--clay-bg);
67
+ border: none;
68
+ border-radius: var(--clay-radius);
69
+ box-shadow: var(--clay-shadow-pressed);
70
+ padding: 0.75rem 1rem;
71
+ color: var(--clay-text);
72
+ }
73
+ .clay-input:focus {
74
+ outline: 2px solid var(--clay-accent);
75
+ outline-offset: 2px;
76
+ }
77
+ ```
78
+
79
+ ### Toggle
80
+ ```css
81
+ .clay-toggle {
82
+ width: 56px;
83
+ height: 30px;
84
+ background: var(--clay-bg-card);
85
+ border-radius: var(--clay-radius-pill);
86
+ box-shadow: var(--clay-shadow-pressed);
87
+ }
88
+ .clay-toggle-knob {
89
+ width: 24px;
90
+ height: 24px;
91
+ background: var(--clay-bg);
92
+ border-radius: 50%;
93
+ box-shadow: var(--clay-shadow);
94
+ transition: transform 0.2s;
95
+ }
96
+ ```
97
+
98
+ ## Dark Mode Notes
99
+
100
+ - Dark mode reduces inner highlight intensity (`rgba(255,255,255,0.05)` vs `0.6`) to avoid glowing artifacts
101
+ - Outer shadow opacity increases to maintain depth on dark backgrounds
102
+ - Background colors shift to warm dark tones — avoid pure black to preserve the clay feel
103
+ - All dark tokens are defined in `[data-theme="dark"]` in `tokens.css`
104
+
105
+ ## Accessibility Notes
106
+
107
+ - Ensure **contrast ratio ≥ 4.5:1** for text — clay backgrounds are muted, verify against `--clay-text`
108
+ - Provide visible `:focus` outlines since clay shadows alone don't indicate focus
109
+ - Use `prefers-contrast: more` to flatten shadows and increase text contrast
110
+
111
+ ```css
112
+ @media (prefers-contrast: more) {
113
+ .clay-card {
114
+ box-shadow: 0 0 0 2px var(--clay-text);
115
+ }
116
+ }
117
+ ```
@@ -0,0 +1,52 @@
1
+ :root {
2
+ /* Backgrounds — soft, muted pastels */
3
+ --clay-bg: #f0e6db;
4
+ --clay-bg-card: #e8ddd4;
5
+ --clay-bg-button: #d4c4b0;
6
+ --clay-accent: #c4a882;
7
+
8
+ /* Radius — large, rounded, puffy */
9
+ --clay-radius: 20px;
10
+ --clay-radius-lg: 32px;
11
+ --clay-radius-pill: 50px;
12
+
13
+ /* Shadows — dual inner + offset outer */
14
+ --clay-shadow:
15
+ 8px 8px 16px rgba(0, 0, 0, 0.12),
16
+ inset -4px -4px 8px rgba(0, 0, 0, 0.08),
17
+ inset 4px 4px 8px rgba(255, 255, 255, 0.6);
18
+ --clay-shadow-elevated:
19
+ 12px 12px 24px rgba(0, 0, 0, 0.15),
20
+ inset -6px -6px 12px rgba(0, 0, 0, 0.1),
21
+ inset 6px 6px 12px rgba(255, 255, 255, 0.7);
22
+ --clay-shadow-pressed:
23
+ 2px 2px 6px rgba(0, 0, 0, 0.1),
24
+ inset -6px -6px 12px rgba(0, 0, 0, 0.12),
25
+ inset 6px 6px 12px rgba(255, 255, 255, 0.5);
26
+
27
+ /* Text */
28
+ --clay-text: #4a3f35;
29
+ --clay-text-muted: #8a7e72;
30
+ }
31
+
32
+ /* Dark mode */
33
+ [data-theme="dark"] {
34
+ --clay-bg: #2a2520;
35
+ --clay-bg-card: #352f28;
36
+ --clay-bg-button: #443c33;
37
+ --clay-accent: #6b5d4f;
38
+ --clay-shadow:
39
+ 8px 8px 16px rgba(0, 0, 0, 0.35),
40
+ inset -4px -4px 8px rgba(0, 0, 0, 0.25),
41
+ inset 4px 4px 8px rgba(255, 255, 255, 0.05);
42
+ --clay-shadow-elevated:
43
+ 12px 12px 24px rgba(0, 0, 0, 0.4),
44
+ inset -6px -6px 12px rgba(0, 0, 0, 0.3),
45
+ inset 6px 6px 12px rgba(255, 255, 255, 0.06);
46
+ --clay-shadow-pressed:
47
+ 2px 2px 6px rgba(0, 0, 0, 0.3),
48
+ inset -6px -6px 12px rgba(0, 0, 0, 0.35),
49
+ inset 6px 6px 12px rgba(255, 255, 255, 0.04);
50
+ --clay-text: #d4c8bc;
51
+ --clay-text-muted: #8a7e72;
52
+ }