code-abyss 1.6.16 → 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.
- package/package.json +2 -2
- package/skills/SKILL.md +24 -16
- package/skills/domains/ai/SKILL.md +2 -2
- package/skills/domains/ai/prompt-and-eval.md +279 -0
- package/skills/domains/architecture/SKILL.md +2 -3
- package/skills/domains/architecture/security-arch.md +87 -0
- package/skills/domains/data-engineering/SKILL.md +188 -26
- package/skills/domains/development/SKILL.md +1 -4
- package/skills/domains/devops/SKILL.md +3 -5
- package/skills/domains/devops/performance.md +63 -0
- package/skills/domains/devops/testing.md +97 -0
- package/skills/domains/frontend-design/SKILL.md +12 -3
- package/skills/domains/frontend-design/claymorphism/SKILL.md +117 -0
- package/skills/domains/frontend-design/claymorphism/references/tokens.css +52 -0
- package/skills/domains/frontend-design/engineering.md +287 -0
- package/skills/domains/frontend-design/glassmorphism/SKILL.md +138 -0
- package/skills/domains/frontend-design/glassmorphism/references/tokens.css +32 -0
- package/skills/domains/frontend-design/liquid-glass/SKILL.md +135 -0
- package/skills/domains/frontend-design/liquid-glass/references/tokens.css +81 -0
- package/skills/domains/frontend-design/neubrutalism/SKILL.md +141 -0
- package/skills/domains/frontend-design/neubrutalism/references/tokens.css +44 -0
- package/skills/domains/infrastructure/SKILL.md +174 -34
- package/skills/domains/mobile/SKILL.md +211 -21
- package/skills/domains/orchestration/SKILL.md +1 -0
- package/skills/domains/security/SKILL.md +4 -6
- package/skills/domains/security/blue-team.md +57 -0
- package/skills/domains/security/red-team.md +54 -0
- package/skills/domains/security/threat-intel.md +50 -0
- package/skills/orchestration/multi-agent/SKILL.md +195 -46
- package/skills/run_skill.js +134 -0
- package/skills/tools/gen-docs/SKILL.md +6 -4
- package/skills/tools/gen-docs/scripts/doc_generator.js +349 -0
- package/skills/tools/verify-change/SKILL.md +8 -6
- package/skills/tools/verify-change/scripts/change_analyzer.js +270 -0
- package/skills/tools/verify-module/SKILL.md +6 -4
- package/skills/tools/verify-module/scripts/module_scanner.js +145 -0
- package/skills/tools/verify-quality/SKILL.md +5 -3
- package/skills/tools/verify-quality/scripts/quality_checker.js +276 -0
- package/skills/tools/verify-security/SKILL.md +7 -5
- package/skills/tools/verify-security/scripts/security_scanner.js +133 -0
- package/skills/__pycache__/run_skill.cpython-312.pyc +0 -0
- package/skills/domains/COVERAGE_PLAN.md +0 -232
- package/skills/domains/ai/model-evaluation.md +0 -790
- package/skills/domains/ai/prompt-engineering.md +0 -703
- package/skills/domains/architecture/compliance.md +0 -299
- package/skills/domains/architecture/data-security.md +0 -184
- package/skills/domains/data-engineering/data-pipeline.md +0 -762
- package/skills/domains/data-engineering/data-quality.md +0 -894
- package/skills/domains/data-engineering/stream-processing.md +0 -791
- package/skills/domains/development/dart.md +0 -963
- package/skills/domains/development/kotlin.md +0 -834
- package/skills/domains/development/php.md +0 -659
- package/skills/domains/development/swift.md +0 -755
- package/skills/domains/devops/e2e-testing.md +0 -914
- package/skills/domains/devops/performance-testing.md +0 -734
- package/skills/domains/devops/testing-strategy.md +0 -667
- package/skills/domains/frontend-design/build-tools.md +0 -743
- package/skills/domains/frontend-design/performance.md +0 -734
- package/skills/domains/frontend-design/testing.md +0 -699
- package/skills/domains/infrastructure/gitops.md +0 -735
- package/skills/domains/infrastructure/iac.md +0 -855
- package/skills/domains/infrastructure/kubernetes.md +0 -1018
- package/skills/domains/mobile/android-dev.md +0 -979
- package/skills/domains/mobile/cross-platform.md +0 -795
- package/skills/domains/mobile/ios-dev.md +0 -931
- package/skills/domains/security/secrets-management.md +0 -834
- package/skills/domains/security/supply-chain.md +0 -931
- package/skills/domains/security/threat-modeling.md +0 -828
- package/skills/run_skill.py +0 -153
- package/skills/tests/README.md +0 -225
- package/skills/tests/SUMMARY.md +0 -362
- package/skills/tests/__init__.py +0 -3
- package/skills/tests/__pycache__/test_change_analyzer.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_doc_generator.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_module_scanner.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_quality_checker.cpython-312.pyc +0 -0
- package/skills/tests/__pycache__/test_security_scanner.cpython-312.pyc +0 -0
- package/skills/tests/test_change_analyzer.py +0 -558
- package/skills/tests/test_doc_generator.py +0 -538
- package/skills/tests/test_module_scanner.py +0 -376
- package/skills/tests/test_quality_checker.py +0 -516
- package/skills/tests/test_security_scanner.py +0 -426
- package/skills/tools/gen-docs/scripts/__pycache__/doc_generator.cpython-312.pyc +0 -0
- package/skills/tools/gen-docs/scripts/doc_generator.py +0 -520
- package/skills/tools/verify-change/scripts/__pycache__/change_analyzer.cpython-312.pyc +0 -0
- package/skills/tools/verify-change/scripts/change_analyzer.py +0 -529
- package/skills/tools/verify-module/scripts/__pycache__/module_scanner.cpython-312.pyc +0 -0
- package/skills/tools/verify-module/scripts/module_scanner.py +0 -321
- package/skills/tools/verify-quality/scripts/__pycache__/quality_checker.cpython-312.pyc +0 -0
- package/skills/tools/verify-quality/scripts/quality_checker.py +0 -481
- package/skills/tools/verify-security/scripts/__pycache__/security_scanner.cpython-312.pyc +0 -0
- package/skills/tools/verify-security/scripts/security_scanner.py +0 -374
|
@@ -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
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
|
18
|
-
|
|
19
|
-
|
|
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
|
+
}
|