dev-playbooks-cn 1.0.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/LICENSE +21 -0
- package/README.md +466 -0
- package/bin/devbooks.js +987 -0
- package/package.json +43 -0
- package/skills/Skills/344/275/277/347/224/250/350/257/264/346/230/216.md +446 -0
- package/skills/Skill/345/274/200/345/217/221/346/214/207/345/215/227.md +248 -0
- package/skills/_shared/context-detection-template.md +315 -0
- package/skills/_shared/mcp-enhancement-template.md +144 -0
- package/skills/_shared/references//351/200/232/347/224/250/345/256/210/351/227/250/345/215/217/350/256/256.md +114 -0
- package/skills/_template/config-discovery-template.md +126 -0
- package/skills/devbooks-brownfield-bootstrap/SKILL.md +167 -0
- package/skills/devbooks-brownfield-bootstrap/references//344/273/243/347/240/201/345/257/274/350/210/252/347/255/226/347/225/245.md +203 -0
- package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226.md +96 -0
- package/skills/devbooks-brownfield-bootstrap/references//345/255/230/351/207/217/351/241/271/347/233/256/345/210/235/345/247/213/345/214/226/346/217/220/347/244/272/350/257/215.md +115 -0
- package/skills/devbooks-brownfield-bootstrap/references//346/234/257/350/257/255/350/241/250/346/250/241/346/235/277.md +42 -0
- package/skills/devbooks-brownfield-bootstrap/scripts/cod-update.sh +357 -0
- package/skills/devbooks-brownfield-bootstrap/templates/project-profile-template.md +172 -0
- package/skills/devbooks-c4-map/SKILL.md +151 -0
- package/skills/devbooks-c4-map/references/C4/346/236/266/346/236/204/345/234/260/345/233/276/346/217/220/347/244/272/350/257/215.md +33 -0
- package/skills/devbooks-c4-map/references//345/210/206/345/261/202/347/272/246/346/235/237/346/243/200/346/237/245/346/270/205/345/215/225.md +185 -0
- package/skills/devbooks-code-review/SKILL.md +175 -0
- package/skills/devbooks-code-review/references/PR/346/250/241/346/235/277/344/270/216/346/214/207/345/215/227.md +321 -0
- package/skills/devbooks-code-review/references//344/273/243/347/240/201/350/257/204/345/256/241/346/217/220/347/244/272/350/257/215.md +100 -0
- package/skills/devbooks-code-review/references//345/235/217/345/221/263/351/201/223/351/200/237/346/237/245/350/241/250.md +495 -0
- package/skills/devbooks-code-review/references//350/265/204/346/272/220/347/256/241/347/220/206/345/256/241/346/237/245/346/270/205/345/215/225.md +311 -0
- package/skills/devbooks-coder/SKILL.md +219 -0
- package/skills/devbooks-coder/references//344/273/243/347/240/201/345/256/236/347/216/260/346/217/220/347/244/272/350/257/215.md +70 -0
- package/skills/devbooks-coder/references//344/275/216/351/243/216/351/231/251/346/224/271/345/212/250/346/212/200/346/234/257.md +275 -0
- package/skills/devbooks-coder/references//346/227/245/345/277/227/350/247/204/350/214/203.md +329 -0
- package/skills/devbooks-coder/references//347/274/226/347/240/201/351/243/216/346/240/274/347/273/206/345/210/231.md +351 -0
- package/skills/devbooks-coder/references//351/224/231/350/257/257/347/240/201/350/247/204/350/214/203.md +463 -0
- package/skills/devbooks-delivery-workflow/SKILL.md +217 -0
- package/skills/devbooks-delivery-workflow/references//344/272/244/344/273/230/351/252/214/346/224/266/345/267/245/344/275/234/346/265/201.md +256 -0
- package/skills/devbooks-delivery-workflow/references//345/216/237/345/236/213-/347/224/237/344/272/247/345/217/214/350/275/250/346/250/241/345/274/217.md +168 -0
- package/skills/devbooks-delivery-workflow/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +133 -0
- package/skills/devbooks-delivery-workflow/scripts/ac-trace-check.sh +330 -0
- package/skills/devbooks-delivery-workflow/scripts/audit-scope.sh +262 -0
- package/skills/devbooks-delivery-workflow/scripts/change-check.sh +1040 -0
- package/skills/devbooks-delivery-workflow/scripts/change-codemod-scaffold.sh +135 -0
- package/skills/devbooks-delivery-workflow/scripts/change-evidence.sh +152 -0
- package/skills/devbooks-delivery-workflow/scripts/change-scaffold.sh +442 -0
- package/skills/devbooks-delivery-workflow/scripts/change-spec-delta-scaffold.sh +136 -0
- package/skills/devbooks-delivery-workflow/scripts/constitution-check.sh +237 -0
- package/skills/devbooks-delivery-workflow/scripts/env-match-check.sh +128 -0
- package/skills/devbooks-delivery-workflow/scripts/fitness-check.sh +387 -0
- package/skills/devbooks-delivery-workflow/scripts/guardrail-check.sh +519 -0
- package/skills/devbooks-delivery-workflow/scripts/handoff-check.sh +141 -0
- package/skills/devbooks-delivery-workflow/scripts/hygiene-check.sh +340 -0
- package/skills/devbooks-delivery-workflow/scripts/migrate-from-openspec.sh +385 -0
- package/skills/devbooks-delivery-workflow/scripts/migrate-to-v2-gates.sh +202 -0
- package/skills/devbooks-delivery-workflow/scripts/progress-dashboard.sh +319 -0
- package/skills/devbooks-delivery-workflow/scripts/prototype-promote.sh +341 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-preview.sh +203 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-promote.sh +118 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-rollback.sh +124 -0
- package/skills/devbooks-delivery-workflow/scripts/spec-stage.sh +117 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-all.sh +78 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-npm-package.sh +123 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-openspec-free.sh +81 -0
- package/skills/devbooks-delivery-workflow/scripts/verify-slash-commands.sh +146 -0
- package/skills/devbooks-delivery-workflow/templates/handoff.md +50 -0
- package/skills/devbooks-design-backport/SKILL.md +73 -0
- package/skills/devbooks-design-backport/references//345/233/236/345/206/231/350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +196 -0
- package/skills/devbooks-design-doc/SKILL.md +121 -0
- package/skills/devbooks-design-doc/references//345/276/256/346/234/215/345/212/241/350/256/276/350/256/241/346/270/205/345/215/225.md +149 -0
- package/skills/devbooks-design-doc/references//350/256/276/350/256/241/346/226/207/346/241/243/346/217/220/347/244/272/350/257/215.md +189 -0
- package/skills/devbooks-design-doc/references//351/232/220/347/247/201/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +240 -0
- package/skills/devbooks-entropy-monitor/SKILL.md +188 -0
- package/skills/devbooks-entropy-monitor/references//347/206/265/345/272/246/351/207/217/346/226/271/346/263/225/350/256/272.md +223 -0
- package/skills/devbooks-entropy-monitor/scripts/entropy-measure.sh +449 -0
- package/skills/devbooks-entropy-monitor/scripts/entropy-report.sh +303 -0
- package/skills/devbooks-entropy-monitor/templates/thresholds.json +99 -0
- package/skills/devbooks-federation/SKILL.md +264 -0
- package/skills/devbooks-federation/scripts/federation-check.sh +144 -0
- package/skills/devbooks-federation/templates/federation.yaml +89 -0
- package/skills/devbooks-impact-analysis/SKILL.md +135 -0
- package/skills/devbooks-impact-analysis/references//345/275/261/345/223/215/345/210/206/346/236/220/346/217/220/347/244/272/350/257/215.md +82 -0
- package/skills/devbooks-impact-analysis/scripts/graph-cache.sh +214 -0
- package/skills/devbooks-implementation-plan/SKILL.md +83 -0
- package/skills/devbooks-implementation-plan/references//347/274/226/347/240/201/350/256/241/345/210/222/346/217/220/347/244/272/350/257/215.md +99 -0
- package/skills/devbooks-index-bootstrap/SKILL.md +240 -0
- package/skills/devbooks-proposal-author/SKILL.md +83 -0
- package/skills/devbooks-proposal-author/references//346/217/220/346/241/210/346/222/260/345/206/231/346/217/220/347/244/272/350/257/215.md +66 -0
- package/skills/devbooks-proposal-challenger/SKILL.md +86 -0
- package/skills/devbooks-proposal-challenger/references//344/274/246/347/220/206/344/270/216/345/220/210/350/247/204/346/243/200/346/237/245/346/270/205/345/215/225.md +176 -0
- package/skills/devbooks-proposal-challenger/references//346/217/220/346/241/210/350/264/250/347/226/221/346/217/220/347/244/272/350/257/215.md +57 -0
- package/skills/devbooks-proposal-debate-workflow/SKILL.md +78 -0
- package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/345/267/245/344/275/234/346/265/201.md +24 -0
- package/skills/devbooks-proposal-debate-workflow/references//346/217/220/346/241/210/345/257/271/350/276/251/346/250/241/346/235/277.md +35 -0
- package/skills/devbooks-proposal-debate-workflow/scripts/proposal-debate-check.sh +102 -0
- package/skills/devbooks-proposal-judge/SKILL.md +78 -0
- package/skills/devbooks-proposal-judge/references//346/217/220/346/241/210/350/243/201/345/206/263/346/217/220/347/244/272/350/257/215.md +37 -0
- package/skills/devbooks-router/SKILL.md +346 -0
- package/skills/devbooks-spec-contract/SKILL.md +191 -0
- package/skills/devbooks-spec-contract/references/API/350/256/276/350/256/241/346/214/207/345/215/227.md +349 -0
- package/skills/devbooks-spec-contract/references//345/245/221/347/272/246/344/270/216/346/225/260/346/215/256/345/256/232/344/271/211/346/217/220/347/244/272/350/257/215.md +85 -0
- package/skills/devbooks-spec-contract/references//350/247/204/346/240/274/345/217/230/346/233/264/346/217/220/347/244/272/350/257/215.md +63 -0
- package/skills/devbooks-spec-contract/references//351/232/220/345/274/217/345/217/230/346/233/264/346/243/200/346/265/213/346/217/220/347/244/272/350/257/215.md +183 -0
- package/skills/devbooks-spec-contract/scripts/implicit-change-detect.sh +378 -0
- package/skills/devbooks-spec-gardener/SKILL.md +72 -0
- package/skills/devbooks-spec-gardener/references//350/247/204/346/240/274/345/233/255/344/270/201/346/217/220/347/244/272/350/257/215.md +41 -0
- package/skills/devbooks-test-owner/SKILL.md +172 -0
- package/skills/devbooks-test-owner/references//345/217/230/346/233/264/351/252/214/350/257/201/344/270/216/350/277/275/346/272/257/346/250/241/346/235/277.md +228 -0
- package/skills/devbooks-test-owner/references//345/274/202/346/255/245/347/263/273/347/273/237/346/265/213/350/257/225/347/255/226/347/225/245.md +316 -0
- package/skills/devbooks-test-owner/references//346/265/213/350/257/225/344/273/243/347/240/201/346/217/220/347/244/272/350/257/215.md +208 -0
- package/skills/devbooks-test-owner/references//346/265/213/350/257/225/345/210/206/345/261/202/347/255/226/347/225/245.md +281 -0
- package/skills/devbooks-test-owner/references//346/265/213/350/257/225/351/251/261/345/212/250.md +394 -0
- package/skills/devbooks-test-owner/references//350/247/243/344/276/235/350/265/226/346/212/200/346/234/257/351/200/237/346/237/245/350/241/250.md +432 -0
- package/skills/devbooks-test-reviewer/SKILL.md +189 -0
- package/templates/.devbooks/config.yaml +88 -0
- package/templates/claude-commands/devbooks/apply.md +38 -0
- package/templates/claude-commands/devbooks/archive.md +33 -0
- package/templates/claude-commands/devbooks/backport.md +19 -0
- package/templates/claude-commands/devbooks/bootstrap.md +19 -0
- package/templates/claude-commands/devbooks/c4.md +19 -0
- package/templates/claude-commands/devbooks/challenger.md +19 -0
- package/templates/claude-commands/devbooks/code.md +19 -0
- package/templates/claude-commands/devbooks/debate.md +19 -0
- package/templates/claude-commands/devbooks/delivery.md +19 -0
- package/templates/claude-commands/devbooks/design.md +19 -0
- package/templates/claude-commands/devbooks/entropy.md +19 -0
- package/templates/claude-commands/devbooks/federation.md +19 -0
- package/templates/claude-commands/devbooks/gardener.md +19 -0
- package/templates/claude-commands/devbooks/impact.md +19 -0
- package/templates/claude-commands/devbooks/index.md +19 -0
- package/templates/claude-commands/devbooks/judge.md +19 -0
- package/templates/claude-commands/devbooks/plan.md +19 -0
- package/templates/claude-commands/devbooks/proposal.md +19 -0
- package/templates/claude-commands/devbooks/quick.md +42 -0
- package/templates/claude-commands/devbooks/review.md +19 -0
- package/templates/claude-commands/devbooks/router.md +19 -0
- package/templates/claude-commands/devbooks/spec.md +19 -0
- package/templates/claude-commands/devbooks/test-review.md +19 -0
- package/templates/claude-commands/devbooks/test.md +19 -0
- package/templates/dev-playbooks/README.md +458 -0
- package/templates/dev-playbooks/changes/.gitkeep +1 -0
- package/templates/dev-playbooks/constitution.md +116 -0
- package/templates/dev-playbooks/project.md +96 -0
- package/templates/dev-playbooks/scripts/.gitkeep +1 -0
- package/templates/dev-playbooks/specs/_meta/anti-patterns/.gitkeep +2 -0
- package/templates/dev-playbooks/specs/_meta/glossary.md +47 -0
- package/templates/dev-playbooks/specs/_meta/project-profile.md +79 -0
- package/templates/dev-playbooks/specs/architecture/fitness-rules.md +95 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# 伦理与合规检查清单
|
|
2
|
+
|
|
3
|
+
> 适用场景:项目涉及个人数据、AI 决策、社会影响时,使用本清单进行伦理审查。
|
|
4
|
+
>
|
|
5
|
+
> 本文档为**可选参考**,仅当项目涉及以下领域时使用:
|
|
6
|
+
> - 个人数据收集/处理/存储
|
|
7
|
+
> - 算法决策(推荐、审核、评分)
|
|
8
|
+
> - 用户行为追踪
|
|
9
|
+
> - 自动化决策影响用户权益
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1) 数据隐私(GDPR/CCPA 合规)
|
|
14
|
+
|
|
15
|
+
### 1.1 数据收集检查
|
|
16
|
+
|
|
17
|
+
- [ ] **必要性原则**:只收集实现功能所必需的数据
|
|
18
|
+
- [ ] **知情同意**:用户在收集前明确知道并同意
|
|
19
|
+
- [ ] **目的限制**:数据仅用于声明的目的,不做二次利用
|
|
20
|
+
- [ ] **最小化原则**:收集最少必要的数据字段
|
|
21
|
+
|
|
22
|
+
### 1.2 数据存储检查
|
|
23
|
+
|
|
24
|
+
- [ ] **留存期限**:明确数据保留多久,过期后如何删除
|
|
25
|
+
- [ ] **加密存储**:敏感数据是否加密存储
|
|
26
|
+
- [ ] **访问控制**:谁可以访问这些数据,是否有审计日志
|
|
27
|
+
- [ ] **跨境传输**:数据是否传输到其他国家/地区
|
|
28
|
+
|
|
29
|
+
### 1.3 用户权利检查
|
|
30
|
+
|
|
31
|
+
- [ ] **查阅权**:用户能否查看自己的数据
|
|
32
|
+
- [ ] **更正权**:用户能否更正错误数据
|
|
33
|
+
- [ ] **删除权**:用户能否要求删除数据("被遗忘权")
|
|
34
|
+
- [ ] **可携带权**:用户能否导出自己的数据
|
|
35
|
+
|
|
36
|
+
### 1.4 design.md 必须声明
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
### 数据隐私声明
|
|
40
|
+
- 收集的数据类型:<列出字段>
|
|
41
|
+
- 数据用途:<说明目的>
|
|
42
|
+
- 留存期限:<xx 天/月/年>
|
|
43
|
+
- 用户权利实现:<查阅/更正/删除的入口>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 2) 算法偏见(AI/ML 系统)
|
|
49
|
+
|
|
50
|
+
### 2.1 偏见风险检查
|
|
51
|
+
|
|
52
|
+
| 偏见类型 | 表现 | 检测方法 |
|
|
53
|
+
|----------|------|----------|
|
|
54
|
+
| 历史偏见 | 训练数据反映历史不平等 | 数据审计 |
|
|
55
|
+
| 代表性偏见 | 某些群体在数据中代表性不足 | 群体分布统计 |
|
|
56
|
+
| 测量偏见 | 特征选择对某些群体不公平 | 公平性指标对比 |
|
|
57
|
+
| 评估偏见 | 评估指标对某些群体不公平 | 分群评估 |
|
|
58
|
+
|
|
59
|
+
### 2.2 公平性检查清单
|
|
60
|
+
|
|
61
|
+
- [ ] 是否分析了不同人群的模型表现差异?
|
|
62
|
+
- [ ] 是否有机制检测和修正偏见?
|
|
63
|
+
- [ ] 是否定义了公平性指标(如:各群体准确率差异 < 5%)?
|
|
64
|
+
- [ ] 是否有人工复核机制处理边界案例?
|
|
65
|
+
|
|
66
|
+
### 2.3 可解释性检查清单
|
|
67
|
+
|
|
68
|
+
- [ ] 用户能否理解"为什么我得到这个结果"?
|
|
69
|
+
- [ ] 是否提供了申诉/反馈渠道?
|
|
70
|
+
- [ ] 重要决策是否有人工介入机会?
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 3) 社会影响评估
|
|
75
|
+
|
|
76
|
+
### 3.1 负面影响检查
|
|
77
|
+
|
|
78
|
+
- [ ] 这个功能是否可能被滥用?如何防止?
|
|
79
|
+
- [ ] 是否会造成信息茧房/极化?
|
|
80
|
+
- [ ] 是否会加剧数字鸿沟?
|
|
81
|
+
- [ ] 是否会影响用户心理健康?
|
|
82
|
+
|
|
83
|
+
### 3.2 弱势群体保护
|
|
84
|
+
|
|
85
|
+
- [ ] 未成年人是否有特殊保护措施?
|
|
86
|
+
- [ ] 老年人/残障人士是否能无障碍使用?
|
|
87
|
+
- [ ] 低收入群体是否被排除在服务之外?
|
|
88
|
+
|
|
89
|
+
### 3.3 design.md 必须声明
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
### 社会影响评估
|
|
93
|
+
- 潜在负面影响:<说明风险>
|
|
94
|
+
- 缓解措施:<说明如何降低风险>
|
|
95
|
+
- 弱势群体保护:<说明特殊措施>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 4) 安全与滥用防护
|
|
101
|
+
|
|
102
|
+
### 4.1 滥用场景检查
|
|
103
|
+
|
|
104
|
+
- [ ] 是否考虑了恶意用户的滥用场景?
|
|
105
|
+
- [ ] 是否有速率限制防止刷量/攻击?
|
|
106
|
+
- [ ] 是否有内容审核机制(如:UGC 内容)?
|
|
107
|
+
- [ ] 是否有异常检测机制?
|
|
108
|
+
|
|
109
|
+
### 4.2 数据泄露防护
|
|
110
|
+
|
|
111
|
+
- [ ] 敏感数据是否有脱敏处理?
|
|
112
|
+
- [ ] API 是否有认证和授权?
|
|
113
|
+
- [ ] 日志是否会泄露敏感信息?
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 5) Proposal 阶段伦理检查
|
|
118
|
+
|
|
119
|
+
在 `devbooks-proposal-challenger` 质疑时,增加以下检查点:
|
|
120
|
+
|
|
121
|
+
### 5.1 强制检查(涉及个人数据时)
|
|
122
|
+
|
|
123
|
+
- [ ] **数据必要性**:是否只收集了实现功能必需的数据?
|
|
124
|
+
- [ ] **用户知情**:用户是否明确知道数据如何被使用?
|
|
125
|
+
- [ ] **退出机制**:用户能否选择不参与或删除数据?
|
|
126
|
+
|
|
127
|
+
### 5.2 可选检查(涉及算法决策时)
|
|
128
|
+
|
|
129
|
+
- [ ] **可解释性**:用户能否理解决策原因?
|
|
130
|
+
- [ ] **申诉机制**:用户能否对决策提出异议?
|
|
131
|
+
- [ ] **公平性**:是否对不同群体公平?
|
|
132
|
+
|
|
133
|
+
### 5.3 Proposal 模板补充
|
|
134
|
+
|
|
135
|
+
```markdown
|
|
136
|
+
### 伦理与合规(可选,但涉及个人数据时必填)
|
|
137
|
+
|
|
138
|
+
#### 数据隐私
|
|
139
|
+
- 收集的数据:<无 / 列出字段>
|
|
140
|
+
- 用户同意机制:<无 / 说明方式>
|
|
141
|
+
- 删除/导出能力:<无 / 说明入口>
|
|
142
|
+
|
|
143
|
+
#### 算法决策(如适用)
|
|
144
|
+
- 决策类型:<无 / 推荐 / 审核 / 评分 / 其他>
|
|
145
|
+
- 可解释性:<无 / 说明方式>
|
|
146
|
+
- 申诉机制:<无 / 说明入口>
|
|
147
|
+
|
|
148
|
+
#### 社会影响
|
|
149
|
+
- 潜在负面影响:<无 / 说明风险>
|
|
150
|
+
- 缓解措施:<无 / 说明方式>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 6) 合规法规速查
|
|
156
|
+
|
|
157
|
+
| 法规 | 适用地区 | 核心要求 |
|
|
158
|
+
|------|----------|----------|
|
|
159
|
+
| GDPR | 欧盟 | 知情同意、数据最小化、被遗忘权、数据可携带 |
|
|
160
|
+
| CCPA | 加州 | 知情权、删除权、不歧视权、opt-out 权 |
|
|
161
|
+
| PIPL | 中国 | 单独同意、本地存储、跨境评估 |
|
|
162
|
+
| COPPA | 美国 | 13 岁以下儿童数据保护 |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 7) 决策记录模板
|
|
167
|
+
|
|
168
|
+
当存在伦理争议时,在 `proposal.md` 的 Decision Log 中记录:
|
|
169
|
+
|
|
170
|
+
```markdown
|
|
171
|
+
### 伦理决策记录
|
|
172
|
+
|
|
173
|
+
| 日期 | 争议点 | 各方观点 | 最终决策 | 理由 |
|
|
174
|
+
|------|--------|----------|----------|------|
|
|
175
|
+
| YYYY-MM-DD | 是否收集用户位置 | 产品:需要精准推荐 / 安全:隐私风险 | 只收集城市级别 | 平衡推荐效果与隐私 |
|
|
176
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# 提案质疑提示词
|
|
2
|
+
|
|
3
|
+
> **角色设定**:你是软件架构领域的**最强大脑**——融合了 Martin Fowler(架构设计与重构)、Gregor Hohpe(企业集成模式)、Michael Nygard(系统可靠性)的智慧。你的审查必须达到这些大师级专家的水准。
|
|
4
|
+
|
|
5
|
+
最高指示(优先级最高):
|
|
6
|
+
- 在执行本提示词前,先阅读 `_shared/references/通用守门协议.md` 并遵循其中所有协议。
|
|
7
|
+
|
|
8
|
+
你是"提案质疑者(Proposal Challenger)"。你的任务是以系统质量与长期可维护性为核心,对提案进行**强约束审查 + 查漏补缺**,发现遗漏的需求、未覆盖的场景、缺失的验收标准,并提出可执行替代方案。
|
|
9
|
+
|
|
10
|
+
输入材料(由我提供):
|
|
11
|
+
- `<change-root>/<change-id>/proposal.md`
|
|
12
|
+
- 相关设计文档(如有):`<change-root>/<change-id>/design.md`
|
|
13
|
+
- 当前真理:`<truth-root>/`
|
|
14
|
+
- 项目画像:`<truth-root>/_meta/project-profile.md`
|
|
15
|
+
- 统一语言表(如存在):`<truth-root>/_meta/glossary.md`
|
|
16
|
+
|
|
17
|
+
硬约束(必须遵守):
|
|
18
|
+
1) 不修改 proposal 文本;只输出"质疑报告"。
|
|
19
|
+
2) 必须给出明确结论:`Approve | Revise | Reject`,不得"雨露均沾"。
|
|
20
|
+
3) 每条质疑必须可验证,不能空泛。
|
|
21
|
+
4) **查漏补缺职责**:主动发现提案中遗漏的内容,包括但不限于:
|
|
22
|
+
- 缺失的验收标准(AC)
|
|
23
|
+
- 未覆盖的边界场景
|
|
24
|
+
- 未定义的回滚策略
|
|
25
|
+
- 遗漏的依赖分析
|
|
26
|
+
- 缺少的证据落点
|
|
27
|
+
|
|
28
|
+
核心价值观(不可妥协):
|
|
29
|
+
- 结构完整性(内聚/耦合/依赖方向)
|
|
30
|
+
- 可测试性与可回滚性
|
|
31
|
+
- 反模式防御(架构/流程/代码层面)
|
|
32
|
+
- 代理指标反噬必须制止
|
|
33
|
+
- 分布边界最小化(远程调用 = 复杂度放大器)
|
|
34
|
+
|
|
35
|
+
必问质疑清单(逐条检查):
|
|
36
|
+
- [ ] 是否必须分布式?单体方案评估过吗?
|
|
37
|
+
- [ ] 每个远程边界是否有明确的失败处理策略?
|
|
38
|
+
- [ ] 事务边界是否与服务边界对齐?跨服务事务如何保证一致性?
|
|
39
|
+
|
|
40
|
+
查漏补缺清单(逐条检查):
|
|
41
|
+
- [ ] 验收标准是否完整?是否覆盖所有功能点?
|
|
42
|
+
- [ ] 边界场景是否考虑?(空值、并发、超时、重试)
|
|
43
|
+
- [ ] 回滚策略是否明确?每个阶段如何回滚?
|
|
44
|
+
- [ ] 依赖分析是否完整?上下游影响是否列出?
|
|
45
|
+
- [ ] 证据落点是否清晰?每个 AC 如何验证?
|
|
46
|
+
- [ ] 迁移路径是否定义?现有用户如何升级?
|
|
47
|
+
- [ ] 风险缓解措施是否具体可执行?
|
|
48
|
+
|
|
49
|
+
输出格式(严格):
|
|
50
|
+
1) **结论**:`Approve | Revise | Reject` + 一句话理由
|
|
51
|
+
2) **阻断项(Blocking)**:逐条列出必须修改的点
|
|
52
|
+
3) **遗漏项(Missing)**:查漏补缺发现的缺失内容,逐条列出
|
|
53
|
+
4) **非阻断项(Non-blocking)**:可改进但不阻塞
|
|
54
|
+
5) **替代方案**:最小可行替代路径或范围收缩建议
|
|
55
|
+
6) **风险与证据缺口**:需要补的证据/验证
|
|
56
|
+
|
|
57
|
+
现在开始输出"质疑报告",不要输出额外解释。
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devbooks-proposal-debate-workflow
|
|
3
|
+
description: devbooks-proposal-debate-workflow:在 proposal 阶段执行"提案-质疑-裁决"三角对辩流程,强制三角色隔离并写回 Decision Log。用户说"提案对辩/三角色对抗/Challenger/Judge/proposal debate/decision log"等时使用。
|
|
4
|
+
tools:
|
|
5
|
+
- Glob
|
|
6
|
+
- Grep
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Edit
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# DevBooks:提案对辩工作流(Proposal Debate)
|
|
13
|
+
|
|
14
|
+
## 前置:配置发现(协议无关)
|
|
15
|
+
|
|
16
|
+
- `<truth-root>`:当前真理目录根
|
|
17
|
+
- `<change-root>`:变更包目录根
|
|
18
|
+
|
|
19
|
+
执行前**必须**按以下顺序查找配置(找到后停止):
|
|
20
|
+
1. `.devbooks/config.yaml`(如存在)→ 解析并使用其中的映射
|
|
21
|
+
2. `dev-playbooks/project.md`(如存在)→ DevBooks 2.0 协议,使用默认映射
|
|
22
|
+
4. `project.md`(如存在)→ template 协议,使用默认映射
|
|
23
|
+
5. 若仍无法确定 → **停止并询问用户**
|
|
24
|
+
|
|
25
|
+
**关键约束**:
|
|
26
|
+
- 如果配置中指定了 `agents_doc`(规则文档),**必须先阅读该文档**再执行任何操作
|
|
27
|
+
- 禁止猜测目录根
|
|
28
|
+
- 禁止跳过规则文档阅读
|
|
29
|
+
|
|
30
|
+
## 参考骨架(按需读取)
|
|
31
|
+
|
|
32
|
+
- 工作流:`references/提案对辩工作流.md`
|
|
33
|
+
- 模板:`references/提案对辩模板.md`
|
|
34
|
+
|
|
35
|
+
## 可选检查脚本
|
|
36
|
+
|
|
37
|
+
- `proposal-debate-check.sh <change-id> --project-root <repo-root> --change-root <change-root>`(脚本位于本 Skill 的 `scripts/proposal-debate-check.sh`)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 上下文感知
|
|
42
|
+
|
|
43
|
+
本 Skill 在执行前自动检测上下文,选择合适的对辩阶段。
|
|
44
|
+
|
|
45
|
+
检测规则参考:`skills/_shared/context-detection-template.md`
|
|
46
|
+
|
|
47
|
+
### 检测流程
|
|
48
|
+
|
|
49
|
+
1. 检测 `proposal.md` 是否存在
|
|
50
|
+
2. 检测 Decision Log 状态
|
|
51
|
+
3. 检测当前对辩轮次
|
|
52
|
+
|
|
53
|
+
### 本 Skill 支持的模式
|
|
54
|
+
|
|
55
|
+
| 模式 | 触发条件 | 行为 |
|
|
56
|
+
|------|----------|------|
|
|
57
|
+
| **提案阶段** | 无 Decision Log | Author 撰写提案 |
|
|
58
|
+
| **质疑阶段** | 提案完成但无质疑 | Challenger 发起质疑 |
|
|
59
|
+
| **裁决阶段** | 质疑完成但无裁决 | Judge 给出裁决 |
|
|
60
|
+
| **已完成** | Decision Log 有最终裁决 | 只允许查看 |
|
|
61
|
+
|
|
62
|
+
### 检测输出示例
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
检测结果:
|
|
66
|
+
- proposal.md:存在
|
|
67
|
+
- Decision Log:有 1 轮质疑
|
|
68
|
+
- 当前轮次:第 1 轮
|
|
69
|
+
- 运行模式:裁决阶段
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## MCP 增强
|
|
75
|
+
|
|
76
|
+
本 Skill 不依赖 MCP 服务,无需运行时检测。
|
|
77
|
+
|
|
78
|
+
MCP 增强规则参考:`skills/_shared/mcp-enhancement-template.md`
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 提案对辩工作流(Proposal Debate)
|
|
2
|
+
|
|
3
|
+
目标:在 proposal 阶段通过“提案-质疑-裁决”三角对抗,避免共识稀释与机械指标误导。
|
|
4
|
+
|
|
5
|
+
目录约定(协议无关):
|
|
6
|
+
- 变更包:`<change-root>/<change-id>/`
|
|
7
|
+
- 提案:`<change-root>/<change-id>/proposal.md`
|
|
8
|
+
|
|
9
|
+
强规则:
|
|
10
|
+
- Proposal Author / Challenger / Judge 必须独立对话/独立实例。
|
|
11
|
+
- Challenger 只能基于已落盘的 `proposal.md` 与设计资料提出异议,不得“私下共创”。
|
|
12
|
+
- Judge 必须给出明确裁决,不得折中含糊。
|
|
13
|
+
|
|
14
|
+
流程:
|
|
15
|
+
1) **Proposal Author**:使用 `devbooks-proposal-author` Skill 产出 `proposal.md`(含 Debate Packet)。
|
|
16
|
+
2) **Proposal Challenger**:使用 `devbooks-proposal-challenger` Skill 输出质疑报告。
|
|
17
|
+
3) **Proposal Judge**:使用 `devbooks-proposal-judge` Skill 输出裁决报告。
|
|
18
|
+
4) **写回提案**:将裁决结论写回 `proposal.md` 的 Decision Log。
|
|
19
|
+
5) **进入后续产物**:Design/Spec/Plan 仅在裁决为 Approved 或 Revise 后启动。
|
|
20
|
+
|
|
21
|
+
验收口径:
|
|
22
|
+
- `proposal.md` 中必须包含 `Decision Log`,且裁决状态为 `Approved | Revise | Rejected`。
|
|
23
|
+
- 若为 `Revise`,必须列出“必须修改项”并完成后重新裁决。
|
|
24
|
+
- 可选自动检查:`proposal-debate-check.sh <change-id>`(脚本位于本 Skill 的 `scripts/proposal-debate-check.sh`)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# proposal.md 对辩模板(可选)
|
|
2
|
+
|
|
3
|
+
> 推荐路径:`<change-root>/<change-id>/proposal.md`
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
- 问题:
|
|
7
|
+
- 目标:
|
|
8
|
+
|
|
9
|
+
## What Changes
|
|
10
|
+
- In:
|
|
11
|
+
- Out:
|
|
12
|
+
- 影响范围:
|
|
13
|
+
|
|
14
|
+
## Impact
|
|
15
|
+
- 对外契约:
|
|
16
|
+
- 数据与迁移:
|
|
17
|
+
- 模块与依赖:
|
|
18
|
+
- 测试与验证:
|
|
19
|
+
|
|
20
|
+
## Risks & Rollback
|
|
21
|
+
- 风险:
|
|
22
|
+
- 回滚:
|
|
23
|
+
|
|
24
|
+
## Validation
|
|
25
|
+
- 候选验收锚点:
|
|
26
|
+
|
|
27
|
+
## Debate Packet
|
|
28
|
+
- 争议点:
|
|
29
|
+
- 不确定点:
|
|
30
|
+
- 需要辩论的问题:
|
|
31
|
+
|
|
32
|
+
## Decision Log
|
|
33
|
+
- 决策状态:`Pending | Approved | Revise | Rejected`
|
|
34
|
+
- 裁决摘要:
|
|
35
|
+
- 必须修改项(如有):
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
usage() {
|
|
5
|
+
cat <<'EOF' >&2
|
|
6
|
+
usage: proposal-debate-check.sh <change-id> [--project-root <dir>] [--change-root <dir>]
|
|
7
|
+
|
|
8
|
+
Checks that a proposal has completed the debate decision:
|
|
9
|
+
- proposal.md contains '## Debate Packet' and '## Decision Log'
|
|
10
|
+
- 'Decision Log' contains '- 决策状态:Approved | Revise | Rejected'
|
|
11
|
+
EOF
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if [[ $# -eq 0 ]]; then
|
|
15
|
+
usage
|
|
16
|
+
exit 2
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
|
20
|
+
usage
|
|
21
|
+
exit 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
change_id="$1"
|
|
25
|
+
shift
|
|
26
|
+
|
|
27
|
+
project_root="${DEVBOOKS_PROJECT_ROOT:-$(pwd)}"
|
|
28
|
+
change_root="${DEVBOOKS_CHANGE_ROOT:-changes}"
|
|
29
|
+
|
|
30
|
+
while [[ $# -gt 0 ]]; do
|
|
31
|
+
case "$1" in
|
|
32
|
+
-h|--help)
|
|
33
|
+
usage
|
|
34
|
+
exit 0
|
|
35
|
+
;;
|
|
36
|
+
--project-root)
|
|
37
|
+
project_root="${2:-}"
|
|
38
|
+
shift 2
|
|
39
|
+
;;
|
|
40
|
+
--change-root)
|
|
41
|
+
change_root="${2:-}"
|
|
42
|
+
shift 2
|
|
43
|
+
;;
|
|
44
|
+
*)
|
|
45
|
+
usage
|
|
46
|
+
exit 2
|
|
47
|
+
;;
|
|
48
|
+
esac
|
|
49
|
+
done
|
|
50
|
+
|
|
51
|
+
if [[ -z "$project_root" || -z "$change_root" ]]; then
|
|
52
|
+
usage
|
|
53
|
+
exit 2
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if [[ -z "$change_id" || "$change_id" == "-"* || "$change_id" =~ [[:space:]] ]]; then
|
|
57
|
+
echo "error: invalid change-id: '$change_id'" >&2
|
|
58
|
+
exit 2
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
if ! command -v rg >/dev/null 2>&1; then
|
|
62
|
+
echo "error: missing dependency: rg (ripgrep)" >&2
|
|
63
|
+
exit 2
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
if [[ "$change_root" = /* ]]; then
|
|
67
|
+
file="${change_root}/${change_id}/proposal.md"
|
|
68
|
+
else
|
|
69
|
+
file="${project_root}/${change_root}/${change_id}/proposal.md"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if [[ ! -f "$file" ]]; then
|
|
74
|
+
echo "error: missing ${file}" >&2
|
|
75
|
+
exit 2
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
if ! rg -n "^## Debate Packet$" "$file" >/dev/null; then
|
|
79
|
+
echo "error: missing 'Debate Packet' section in ${file}" >&2
|
|
80
|
+
exit 1
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
if ! rg -n "^## Decision Log" "$file" >/dev/null; then
|
|
84
|
+
echo "error: missing 'Decision Log' section in ${file}" >&2
|
|
85
|
+
exit 1
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
decision_line=$(rg -n "^- 决策状态:" "$file" -m 1 || true)
|
|
89
|
+
if [[ -z "$decision_line" ]]; then
|
|
90
|
+
echo "error: missing '- 决策状态:' line in ${file}" >&2
|
|
91
|
+
exit 1
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
value="$(echo "$decision_line" | sed -E 's/^[0-9]+:- 决策状态: *//')"
|
|
95
|
+
|
|
96
|
+
case "$value" in
|
|
97
|
+
Approved|Revise|Rejected) ;;
|
|
98
|
+
Pending) echo "error: decision is still Pending (debate not concluded): ${file}" >&2; exit 1 ;;
|
|
99
|
+
*) echo "error: 决策状态必须为 Approved | Revise | Rejected(当前:${value})" >&2; exit 1 ;;
|
|
100
|
+
esac
|
|
101
|
+
|
|
102
|
+
echo "ok: proposal decision present for ${change_id}"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devbooks-proposal-judge
|
|
3
|
+
description: devbooks-proposal-judge:对 proposal 阶段进行裁决(Judge),输出 Approved/Revise/Rejected 并写回 proposal.md 的 Decision Log。用户说"裁决提案/提案评审/Approved Revise Rejected/decision log"等时使用。
|
|
4
|
+
tools:
|
|
5
|
+
- Glob
|
|
6
|
+
- Grep
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Edit
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# DevBooks:提案裁决(Proposal Judge)
|
|
13
|
+
|
|
14
|
+
## 前置:配置发现(协议无关)
|
|
15
|
+
|
|
16
|
+
- `<truth-root>`:当前真理目录根
|
|
17
|
+
- `<change-root>`:变更包目录根
|
|
18
|
+
|
|
19
|
+
执行前**必须**按以下顺序查找配置(找到后停止):
|
|
20
|
+
1. `.devbooks/config.yaml`(如存在)→ 解析并使用其中的映射
|
|
21
|
+
2. `dev-playbooks/project.md`(如存在)→ DevBooks 2.0 协议,使用默认映射
|
|
22
|
+
4. `project.md`(如存在)→ template 协议,使用默认映射
|
|
23
|
+
5. 若仍无法确定 → **停止并询问用户**
|
|
24
|
+
|
|
25
|
+
**关键约束**:
|
|
26
|
+
- 如果配置中指定了 `agents_doc`(规则文档),**必须先阅读该文档**再执行任何操作
|
|
27
|
+
- 禁止猜测目录根
|
|
28
|
+
- 禁止跳过规则文档阅读
|
|
29
|
+
|
|
30
|
+
## 执行方式
|
|
31
|
+
|
|
32
|
+
1) 先阅读并遵守:`_shared/references/通用守门协议.md`(可验证性 + 结构质量守门)。
|
|
33
|
+
2) 严格按完整提示词输出裁决:`references/提案裁决提示词.md`。
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 上下文感知
|
|
38
|
+
|
|
39
|
+
本 Skill 在执行前自动检测上下文,确保角色隔离。
|
|
40
|
+
|
|
41
|
+
检测规则参考:`skills/_shared/context-detection-template.md`
|
|
42
|
+
|
|
43
|
+
### 检测流程
|
|
44
|
+
|
|
45
|
+
1. 检测 `proposal.md` 是否存在
|
|
46
|
+
2. 检测是否有 Challenger 的质疑意见
|
|
47
|
+
3. 检测当前会话是否已执行过 Author/Challenger 角色
|
|
48
|
+
|
|
49
|
+
### 本 Skill 支持的模式
|
|
50
|
+
|
|
51
|
+
| 模式 | 触发条件 | 行为 |
|
|
52
|
+
|------|----------|------|
|
|
53
|
+
| **首次裁决** | 无裁决记录 | 综合评估提案和质疑,输出裁决 |
|
|
54
|
+
| **复议裁决** | Author 修改后重新提交 | 重新评估修改内容 |
|
|
55
|
+
|
|
56
|
+
### 角色隔离检查
|
|
57
|
+
|
|
58
|
+
- [ ] 当前会话未执行过 Author
|
|
59
|
+
- [ ] 当前会话未执行过 Challenger
|
|
60
|
+
|
|
61
|
+
### 检测输出示例
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
检测结果:
|
|
65
|
+
- proposal.md:存在
|
|
66
|
+
- Challenger 意见:存在(3 个风险点)
|
|
67
|
+
- 角色隔离:✓
|
|
68
|
+
- 运行模式:首次裁决
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## MCP 增强
|
|
74
|
+
|
|
75
|
+
本 Skill 不依赖 MCP 服务,无需运行时检测。
|
|
76
|
+
|
|
77
|
+
MCP 增强规则参考:`skills/_shared/mcp-enhancement-template.md`
|
|
78
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# 提案裁决提示词
|
|
2
|
+
|
|
3
|
+
> **角色设定**:你是技术决策领域的**最强大脑**——融合了 Michael Nygard(架构决策记录)、Gregor Hohpe(技术领导力)、Werner Vogels(系统设计权衡)的智慧。你的裁决必须达到这些大师级专家的水准。
|
|
4
|
+
|
|
5
|
+
最高指示(优先级最高):
|
|
6
|
+
- 在执行本提示词前,先阅读 `_shared/references/通用守门协议.md` 并遵循其中所有协议。
|
|
7
|
+
|
|
8
|
+
你是"提案裁决者(Proposal Judge)"。你的任务是在 Author 与 Challenger 的分歧中做出明确裁决,并更新提案的决策记录。
|
|
9
|
+
|
|
10
|
+
输入材料(由我提供):
|
|
11
|
+
- `<change-root>/<change-id>/proposal.md`
|
|
12
|
+
- “质疑报告”(来自 Challenger)
|
|
13
|
+
- 相关设计文档(如有)
|
|
14
|
+
|
|
15
|
+
硬约束(必须遵守):
|
|
16
|
+
1) 必须选择:`Approved | Revise | Rejected`,不得含糊。
|
|
17
|
+
2) 若存在未解决的 Blocking,裁决不得为 Approved。
|
|
18
|
+
3) 裁决必须落到可执行的修改清单与验证要求。
|
|
19
|
+
|
|
20
|
+
核心价值观(不可妥协):
|
|
21
|
+
- 方向正确性优先于速度
|
|
22
|
+
- 风险透明与可回滚
|
|
23
|
+
- 质量闸门高于代理指标
|
|
24
|
+
|
|
25
|
+
前置检查(必须执行):
|
|
26
|
+
- [ ] design.md 是否只写 What/Constraints,没有混入 How(实现步骤)?
|
|
27
|
+
- [ ] tasks.md 是否只写 How(实现步骤),没有混入 What(约束/验收标准)?
|
|
28
|
+
- 若职责混淆,裁决为 Revise 并要求分离
|
|
29
|
+
|
|
30
|
+
输出格式(严格):
|
|
31
|
+
1) **裁决**:`Approved | Revise | Rejected`
|
|
32
|
+
2) **理由摘要**(3–5 条)
|
|
33
|
+
3) **必须修改项(若 Revise)**:逐条列出
|
|
34
|
+
4) **验证要求**:需要补的证据/测试/检查
|
|
35
|
+
5) **写回指令**:需要写回 `proposal.md` 的变更点
|
|
36
|
+
|
|
37
|
+
现在开始输出“裁决报告”,不要输出额外解释。
|