@chenmk/superflow 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/INSTALL.en.md +106 -0
- package/INSTALL.md +664 -0
- package/LICENSE +21 -0
- package/README.md +142 -0
- package/README.zh-CN.md +117 -0
- package/assets/context-templates/business-rules.md +98 -0
- package/assets/context-templates/decisions.md +153 -0
- package/assets/context-templates/external-systems.md +166 -0
- package/assets/context-templates/incidents.md +89 -0
- package/assets/manifest.json +53 -0
- package/assets/prompts/superflow-archive.md +9 -0
- package/assets/prompts/superflow-clarify.md +10 -0
- package/assets/prompts/superflow-design.md +10 -0
- package/assets/prompts/superflow-docs.md +10 -0
- package/assets/prompts/superflow-implement.md +10 -0
- package/assets/prompts/superflow-pipeline.md +13 -0
- package/assets/prompts/superflow-verify.md +10 -0
- package/assets/rules/superflow-phase-guard.md +50 -0
- package/assets/scripts/claude-auto-backup-hook.sh +313 -0
- package/assets/scripts/codex-auto-backup-hook.sh +361 -0
- package/assets/scripts/install-sql-pre-commit.sh +44 -0
- package/assets/scripts/superflow-contract-hooks.sh +744 -0
- package/assets/scripts/superflow-delivery-check.sh +315 -0
- package/assets/scripts/superflow-dependency-update-hook.sh +161 -0
- package/assets/scripts/superflow-enforce-hook.sh +70 -0
- package/assets/scripts/superflow-hook-guard.sh +132 -0
- package/assets/scripts/superflow-integration-evidence-hook.sh +80 -0
- package/assets/scripts/superflow-sql-sync-hook.py +950 -0
- package/assets/scripts/superflow-test-report-lint.py +433 -0
- package/assets/scripts/superflow-verify-integration.sh +90 -0
- package/assets/scripts/sync-settings-json.py +52 -0
- package/assets/skills/api-doc-changelog/SKILL.md +193 -0
- package/assets/skills/openspec-apply-change/SKILL.md +156 -0
- package/assets/skills/openspec-archive-change/SKILL.md +114 -0
- package/assets/skills/openspec-explore/SKILL.md +288 -0
- package/assets/skills/openspec-propose/SKILL.md +110 -0
- package/assets/skills/superflow-archive/SKILL.md +61 -0
- package/assets/skills/superflow-clarify/SKILL.md +146 -0
- package/assets/skills/superflow-clarify/agents/openai.yaml +4 -0
- package/assets/skills/superflow-design/SKILL.md +83 -0
- package/assets/skills/superflow-design/agents/openai.yaml +4 -0
- package/assets/skills/superflow-docs/SKILL.md +316 -0
- package/assets/skills/superflow-docs/agents/openai.yaml +4 -0
- package/assets/skills/superflow-hotfix/SKILL.md +48 -0
- package/assets/skills/superflow-implement/SKILL.md +461 -0
- package/assets/skills/superflow-implement/agents/openai.yaml +4 -0
- package/assets/skills/superflow-pipeline/SKILL.md +844 -0
- package/assets/skills/superflow-pipeline/agents/openai.yaml +4 -0
- package/assets/skills/superflow-pipeline/references/api-design-template.md +431 -0
- package/assets/skills/superflow-pipeline/references/architecture-design-template.md +119 -0
- package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +536 -0
- package/assets/skills/superflow-pipeline/references/batch-split-guide.md +140 -0
- package/assets/skills/superflow-pipeline/references/decision-point.md +30 -0
- package/assets/skills/superflow-pipeline/references/dirty-worktree.md +35 -0
- package/assets/skills/superflow-pipeline/references/document-templates.md +123 -0
- package/assets/skills/superflow-pipeline/references/feature-gated-workflow.md +124 -0
- package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +1056 -0
- package/assets/skills/superflow-pipeline/references/mock-strategy-guide.md +86 -0
- package/assets/skills/superflow-pipeline/references/openspec-format.md +57 -0
- package/assets/skills/superflow-pipeline/references/orchestration.md +639 -0
- package/assets/skills/superflow-pipeline/references/p0-baseline-template.md +174 -0
- package/assets/skills/superflow-pipeline/references/project-config.md +40 -0
- package/assets/skills/superflow-pipeline/references/prompt-usage-template.md +152 -0
- package/assets/skills/superflow-pipeline/references/quality-gate.md +299 -0
- package/assets/skills/superflow-pipeline/references/quality-standards.md +190 -0
- package/assets/skills/superflow-pipeline/references/reviewer-checklist.md +154 -0
- package/assets/skills/superflow-pipeline/references/sql-risk-review-checklist.md +323 -0
- package/assets/skills/superflow-pipeline/references/subagent-progress.md +90 -0
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +125 -0
- package/assets/skills/superflow-pipeline/references/test-execution-template.md +220 -0
- package/assets/skills/superflow-pipeline/references/test-guide.md +30 -0
- package/assets/skills/superflow-pipeline/references/traceability-matrix.md +106 -0
- package/assets/skills/superflow-pipeline/references/validation-integrity.md +134 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-archive.sh +178 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-env.sh +118 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +428 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-handoff.sh +296 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-state.sh +574 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-status.sh +172 -0
- package/assets/skills/superflow-pipeline/scripts/superflow-yaml-validate.sh +138 -0
- package/assets/skills/superflow-table-impact-analysis/SKILL.md +77 -0
- package/assets/skills/superflow-tweak/SKILL.md +46 -0
- package/assets/skills/superflow-verify/SKILL.md +112 -0
- package/assets/skills-en/api-doc-changelog/SKILL.md +193 -0
- package/assets/skills-en/openspec-apply-change/SKILL.md +156 -0
- package/assets/skills-en/openspec-archive-change/SKILL.md +114 -0
- package/assets/skills-en/openspec-explore/SKILL.md +288 -0
- package/assets/skills-en/openspec-propose/SKILL.md +110 -0
- package/assets/skills-en/superflow-archive/SKILL.md +61 -0
- package/assets/skills-en/superflow-clarify/SKILL.md +146 -0
- package/assets/skills-en/superflow-clarify/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-design/SKILL.md +83 -0
- package/assets/skills-en/superflow-design/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-docs/SKILL.md +316 -0
- package/assets/skills-en/superflow-docs/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-hotfix/SKILL.md +48 -0
- package/assets/skills-en/superflow-implement/SKILL.md +461 -0
- package/assets/skills-en/superflow-implement/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-pipeline/SKILL.md +844 -0
- package/assets/skills-en/superflow-pipeline/agents/openai.yaml +4 -0
- package/assets/skills-en/superflow-pipeline/references/api-design-template.md +431 -0
- package/assets/skills-en/superflow-pipeline/references/architecture-design-template.md +119 -0
- package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +536 -0
- package/assets/skills-en/superflow-pipeline/references/batch-split-guide.md +140 -0
- package/assets/skills-en/superflow-pipeline/references/decision-point.md +30 -0
- package/assets/skills-en/superflow-pipeline/references/dirty-worktree.md +35 -0
- package/assets/skills-en/superflow-pipeline/references/document-templates.md +123 -0
- package/assets/skills-en/superflow-pipeline/references/feature-gated-workflow.md +124 -0
- package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +1056 -0
- package/assets/skills-en/superflow-pipeline/references/mock-strategy-guide.md +86 -0
- package/assets/skills-en/superflow-pipeline/references/openspec-format.md +57 -0
- package/assets/skills-en/superflow-pipeline/references/orchestration.md +639 -0
- package/assets/skills-en/superflow-pipeline/references/p0-baseline-template.md +174 -0
- package/assets/skills-en/superflow-pipeline/references/project-config.md +40 -0
- package/assets/skills-en/superflow-pipeline/references/prompt-usage-template.md +152 -0
- package/assets/skills-en/superflow-pipeline/references/quality-gate.md +299 -0
- package/assets/skills-en/superflow-pipeline/references/quality-standards.md +190 -0
- package/assets/skills-en/superflow-pipeline/references/reviewer-checklist.md +154 -0
- package/assets/skills-en/superflow-pipeline/references/sql-risk-review-checklist.md +323 -0
- package/assets/skills-en/superflow-pipeline/references/subagent-progress.md +90 -0
- package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md +125 -0
- package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +220 -0
- package/assets/skills-en/superflow-pipeline/references/test-guide.md +30 -0
- package/assets/skills-en/superflow-pipeline/references/traceability-matrix.md +106 -0
- package/assets/skills-en/superflow-pipeline/references/validation-integrity.md +134 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-archive.sh +178 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-env.sh +118 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +428 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-handoff.sh +296 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-state.sh +574 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-status.sh +172 -0
- package/assets/skills-en/superflow-pipeline/scripts/superflow-yaml-validate.sh +138 -0
- package/assets/skills-en/superflow-table-impact-analysis/SKILL.md +77 -0
- package/assets/skills-en/superflow-tweak/SKILL.md +46 -0
- package/assets/skills-en/superflow-verify/SKILL.md +112 -0
- package/dist/cli/index.js +186 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/archive.js +6 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/clarify.js +6 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/design.js +6 -0
- package/dist/commands/design.js.map +1 -0
- package/dist/commands/docs.js +6 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/doctor.js +473 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/implement.js +6 -0
- package/dist/commands/implement.js.map +1 -0
- package/dist/commands/init.js +471 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/pipeline.js +6 -0
- package/dist/commands/pipeline.js.map +1 -0
- package/dist/commands/scan.js +59 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/status.js +173 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.js +213 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +187 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.js +6 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/assets.js +27 -0
- package/dist/core/assets.js.map +1 -0
- package/dist/core/context.js +100 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/dependencies.js +146 -0
- package/dist/core/dependencies.js.map +1 -0
- package/dist/core/detect.js +71 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/i18n.js +103 -0
- package/dist/core/i18n.js.map +1 -0
- package/dist/core/integrity.js +46 -0
- package/dist/core/integrity.js.map +1 -0
- package/dist/core/manifest.js +18 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/prompts.js +20 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/registry.js +134 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/rules.js +17 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/scripts.js +40 -0
- package/dist/core/scripts.js.map +1 -0
- package/dist/core/skill-check.js +31 -0
- package/dist/core/skill-check.js.map +1 -0
- package/dist/core/skills.js +56 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/state.js +43 -0
- package/dist/core/state.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/path.js +11 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/shell.js +29 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# 历史事故
|
|
2
|
+
|
|
3
|
+
> **初始版来源**:`openspec/changes/v1.1-add-charging-package-suite/bug-archive/yunxiao-2026-06-02-pending-confirmation/`(云效 2026-06-02 待确认批次)+ sdd-cli 引用过的 P 编号
|
|
4
|
+
> **维护方**:测试 + 开发
|
|
5
|
+
> **自动化率**:20-40%(commit "fix" + 注释 "FIX" 可挖,PR 描述/issue tracker 不可访问——私有仓)
|
|
6
|
+
|
|
7
|
+
## 1. v1.1 充电套餐批次(2026-06-02 云效待确认)
|
|
8
|
+
|
|
9
|
+
来源目录:`openspec/changes/v1.1-add-charging-package-suite/bug-archive/yunxiao-2026-06-02-pending-confirmation/`
|
|
10
|
+
原始文件:HTML(云效导出) + `raw-bugs.json`(待解析)
|
|
11
|
+
|
|
12
|
+
### 1.1 套餐运营商 / 站点相关
|
|
13
|
+
|
|
14
|
+
| CDPT | 标题 | 状态 | 关联规则 |
|
|
15
|
+
|------|------|------|---------|
|
|
16
|
+
| CDPT-165 | 创建套餐的查询条件,运营商与查询结果不匹配,创建的套餐是其他运营商的 | 待修复 | [business-rules §1.1](./business-rules.md#11-套餐业务) |
|
|
17
|
+
| CDPT-171 | 应限制同一个站点不能创建相同名称的优惠套餐 | 待修复 | §1.1 |
|
|
18
|
+
| CDPT-192 | 修改充电套餐的适用站点后,已开通套餐的记录,适用站点没有更新 | 待修复 | §1.1 |
|
|
19
|
+
| CDPT-166 | 创建套餐页面,导出 Excel 中的使用站点列展示错误 | 待修复 | §4 |
|
|
20
|
+
| CDPT-158 | 充电套餐的有效时段,应该允许跨天 | 待修复 | §1.1 |
|
|
21
|
+
| CDPT-175 | 同车牌不同套餐、不同有效时间段 — 应该允许开通 | 待修复 | §1.1 |
|
|
22
|
+
|
|
23
|
+
### 1.2 退款 / 对账 / 权益同步
|
|
24
|
+
|
|
25
|
+
| CDPT | 标题 | 状态 | 关联规则 |
|
|
26
|
+
|------|------|------|---------|
|
|
27
|
+
| CDPT-186 | 充电套餐退款后,停车月票权益在 BEM 没有同步退款 | 待修复 | [business-rules §1.2](./business-rules.md#12-计费--退款--对账) |
|
|
28
|
+
| CDPT-189 | 已退款的优惠套餐订单,扫码开票提示需优化 | 待修复 | §3 |
|
|
29
|
+
| CDPT-169 | 续费充电套餐(停车月票),BEM 没有对该月票订单续费 | 待修复 | §6 |
|
|
30
|
+
| CDPT-193 | 充电套餐适用多个站点时,无法开票 | 待修复 | §1.1 |
|
|
31
|
+
|
|
32
|
+
### 1.3 批量开通 / 续费 / 退款
|
|
33
|
+
|
|
34
|
+
| CDPT | 标题 | 状态 | 关联规则 |
|
|
35
|
+
|------|------|------|---------|
|
|
36
|
+
| CDPT-185 | 批量开通、续费、退款模板中手机号应支持填写 1 个或 2 个手机号 | 待修复 | [business-rules §2.1](./business-rules.md#21-批量开通--续费--退款) |
|
|
37
|
+
| CDPT-180 | 批量开通、续费、退费时,遇到错误/异常数据整批数据都不插入业务系统,明确提示哪一行,哪个字段数据异常 | 待修复 | §2.1 |
|
|
38
|
+
| CDPT-181 | 问题 1:批量开通上传文件类型错误时的提示需优化;问题 2:导入空的 Excel 模板也提示成功 | 待修复 | §2.1、§2.2 |
|
|
39
|
+
| CDPT-178 | 批量开通、续费、退费模版字段,必填字段应加入【必填】两个字 | 待修复 | §2.1 |
|
|
40
|
+
| CDPT-179 | 批量开通充电套餐,选择当天,1 天有效期,开通记录显示已过期。在页面开通显示生效中 | 待修复 | §2.1 |
|
|
41
|
+
| CDPT-198 | 批量导入车位枪的文件格式错误,提示需优化 | 待修复 | §2.2 |
|
|
42
|
+
| CDPT-199 | 站点没有绑定车位枪时,站点的【启用车位枪】按钮不允许打开 | 待修复 | [business-rules §1.3](./business-rules.md#13-车位--设备) |
|
|
43
|
+
|
|
44
|
+
### 1.4 导出 / 查询 / 字段
|
|
45
|
+
|
|
46
|
+
| CDPT | 标题 | 状态 | 关联规则 |
|
|
47
|
+
|------|------|------|---------|
|
|
48
|
+
| CDPT-188 | 套餐开通记录导出,剩余充电额度为不限额时,导出内容错误 | 待修复 | [business-rules §4](./business-rules.md#4-数据权限--字段约束) |
|
|
49
|
+
| CDPT-177 | 开通套餐记录导出的 Excel 中不要合并不连续的有效期 | 待修复 | §4 |
|
|
50
|
+
| CDPT-173 | 开通套餐页面的查询条件,【车牌号码】应支持模糊查询 | 待修复 | §4 |
|
|
51
|
+
| CDPT-164 | 开通套餐的记录中,最近操作人取值错误(admin 后台开通) | 待修复 | §4 |
|
|
52
|
+
| CDPT-163 | 开通充电套餐后,扫码开启充电,没有套餐可用 | 待修复 | §3 |
|
|
53
|
+
| CDPT-194 | 停车权益记录,适用车场的名称没展示 | 待修复 | §4 |
|
|
54
|
+
|
|
55
|
+
## 2. 历史 P 编号记录(sdd-cli 引用过)
|
|
56
|
+
|
|
57
|
+
来源:`sdd-cli/assets/skills/superflow-implement/SKILL.md` 等地方提到的 P 编号示例
|
|
58
|
+
|
|
59
|
+
| P 编号 | 描述 | 备注 |
|
|
60
|
+
|--------|------|------|
|
|
61
|
+
| P50 | worktree 启动端口示例(base 9250 → 9300) | 端口计算约定 |
|
|
62
|
+
| P64 | prompt 命名示例(p64-export-plot-display.md) | 命名约定 |
|
|
63
|
+
|
|
64
|
+
> **注**:完整 P 编号历史应从 git log + openspec/changes/archive/ 反推。本文件仅记录 sdd-cli 显式引用的。
|
|
65
|
+
|
|
66
|
+
## 3. 事故复盘模板
|
|
67
|
+
|
|
68
|
+
每条事故建议补充以下信息(自动化扫不到,需人工补):
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
### CDPT-XXX: <标题>
|
|
72
|
+
|
|
73
|
+
- **发现时间**:YYYY-MM-DD
|
|
74
|
+
- **发现渠道**:云效 / QA / 线上报警 / 客户反馈
|
|
75
|
+
- **根因**:(一句话说清楚,不要泛泛说"业务逻辑错误")
|
|
76
|
+
- **影响范围**:(哪些模块 / 哪些数据 / 多少用户 / 持续多久)
|
|
77
|
+
- **修复 commit**:(`git log --grep="CDPT-XXX"` 拿 SHA)
|
|
78
|
+
- **修复时间**:YYYY-MM-DD
|
|
79
|
+
- **复盘人**:<name>
|
|
80
|
+
- **预防措施**:(代码 / 流程 / 测试 哪一层加固)
|
|
81
|
+
- **关联规则**:[business-rules.md §X.Y](./business-rules.md)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## 4. 维护提示
|
|
85
|
+
|
|
86
|
+
- **不要直接复制云效 HTML**——内容里含截图/附件链接,存 md 里维护性差
|
|
87
|
+
- 建议用 `raw-bugs.json` 解析后写本文件(一次性脚本)
|
|
88
|
+
- 后期可让 LLM 帮补全"根因 / 影响范围"等结构化字段
|
|
89
|
+
- 修复完成后这条记录可以从"待修复"挪到"已闭环"区
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.0",
|
|
3
|
+
"agents": ["claude", "codex"],
|
|
4
|
+
"skills": [
|
|
5
|
+
"openspec-apply-change",
|
|
6
|
+
"openspec-archive-change",
|
|
7
|
+
"openspec-explore",
|
|
8
|
+
"openspec-propose",
|
|
9
|
+
"superflow-archive",
|
|
10
|
+
"superflow-clarify",
|
|
11
|
+
"superflow-design",
|
|
12
|
+
"superflow-docs",
|
|
13
|
+
"superflow-hotfix",
|
|
14
|
+
"superflow-implement",
|
|
15
|
+
"superflow-pipeline",
|
|
16
|
+
"superflow-table-impact-analysis",
|
|
17
|
+
"superflow-tweak",
|
|
18
|
+
"superflow-verify"
|
|
19
|
+
],
|
|
20
|
+
"rules": [
|
|
21
|
+
"superflow-phase-guard.md"
|
|
22
|
+
],
|
|
23
|
+
"scripts": [
|
|
24
|
+
"superflow-verify-integration.sh",
|
|
25
|
+
"superflow-delivery-check.sh",
|
|
26
|
+
"superflow-sql-sync-hook.py",
|
|
27
|
+
"superflow-contract-hooks.sh",
|
|
28
|
+
"superflow-enforce-hook.sh",
|
|
29
|
+
"superflow-hook-guard.sh",
|
|
30
|
+
"superflow-dependency-update-hook.sh",
|
|
31
|
+
"superflow-integration-evidence-hook.sh",
|
|
32
|
+
"superflow-test-report-lint.py",
|
|
33
|
+
"install-sql-pre-commit.sh",
|
|
34
|
+
"sync-settings-json.py"
|
|
35
|
+
],
|
|
36
|
+
"agentScripts": {
|
|
37
|
+
"claude": ["claude-auto-backup-hook.sh"],
|
|
38
|
+
"codex": ["codex-auto-backup-hook.sh"]
|
|
39
|
+
},
|
|
40
|
+
"hooks": [
|
|
41
|
+
"superflow-enforce-hook.sh",
|
|
42
|
+
"superflow-hook-guard.sh",
|
|
43
|
+
"superflow-contract-hooks.sh",
|
|
44
|
+
"superflow-dependency-update-hook.sh",
|
|
45
|
+
"superflow-sql-sync-hook.py",
|
|
46
|
+
"superflow-delivery-check.sh",
|
|
47
|
+
"superflow-integration-evidence-hook.sh"
|
|
48
|
+
],
|
|
49
|
+
"agentHooks": {
|
|
50
|
+
"claude": ["claude-auto-backup-hook.sh"],
|
|
51
|
+
"codex": ["codex-auto-backup-hook.sh"]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Archive a verified SuperBridge Flow change
|
|
3
|
+
argument-hint: change directory
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `superflow-archive` skill for this request.
|
|
7
|
+
|
|
8
|
+
Archive only after verification has passed and the user confirms lifecycle
|
|
9
|
+
closeout. Run the archive guard and keep final state files consistent.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Clarify and freeze a complex SuperBridge Flow requirement
|
|
3
|
+
argument-hint: requirement source or section
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `superflow-clarify` skill for this request.
|
|
7
|
+
|
|
8
|
+
Read the requested source in bounded sections, freeze one feature or section at
|
|
9
|
+
a time, and stop for missing product/API/DB facts before OpenSpec artifacts are
|
|
10
|
+
created.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create source-level SuperBridge Flow technical design
|
|
3
|
+
argument-hint: change directory
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `superflow-design` skill for this request.
|
|
7
|
+
|
|
8
|
+
Let Superpowers handle source-level HOW: inspect real code, reverse impact,
|
|
9
|
+
field references, TDD strategy, worker split, worktree and port planning. Do not
|
|
10
|
+
rewrite OpenSpec contracts unless a conflict is found and returned to docs.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate or strengthen SuperBridge Flow contract documents
|
|
3
|
+
argument-hint: change directory or requirement
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `superflow-docs` skill for this request.
|
|
7
|
+
|
|
8
|
+
Keep OpenSpec as the source of WHAT and contracts. Ensure API, DB, tests,
|
|
9
|
+
traceability, quality gates, and handoff files are complete before technical
|
|
10
|
+
design starts.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create SuperBridge Flow implementation prompts
|
|
3
|
+
argument-hint: change directory or task id
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `superflow-implement` skill for this request.
|
|
7
|
+
|
|
8
|
+
Generate bounded implementation prompts that inherit the latest handoff hash,
|
|
9
|
+
include concrete interface/database/log verification, and preserve root document
|
|
10
|
+
closeout ownership.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run the SuperBridge Flow router
|
|
3
|
+
argument-hint: requirement or change description
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `superflow-pipeline` skill for this request.
|
|
7
|
+
|
|
8
|
+
Route the work through the correct SuperBridge Flow phase. OpenSpec owns WHAT
|
|
9
|
+
and contracts; Superpowers owns source-level HOW. Preserve handoff state and run
|
|
10
|
+
the required SuperBridge Flow guards before phase transitions.
|
|
11
|
+
|
|
12
|
+
Input: treat the argument after `/superflow-pipeline` as the requirement,
|
|
13
|
+
document path, or change description.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Verify a SuperBridge Flow change
|
|
3
|
+
argument-hint: change directory
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the `superflow-verify` skill for this request.
|
|
7
|
+
|
|
8
|
+
Reload the handoff and verification evidence from files, run the required
|
|
9
|
+
guards and review checks, and only advance when implementation evidence is
|
|
10
|
+
current and complete.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# SDD Phase Guard
|
|
2
|
+
|
|
3
|
+
This rule is a lightweight anti-drift reminder for Codex and Claude Code.
|
|
4
|
+
When an active SDD/OpenSpec change exists, read
|
|
5
|
+
`openspec/changes/<name>/.sdd/state.yaml` before editing files or running
|
|
6
|
+
phase-changing commands.
|
|
7
|
+
|
|
8
|
+
## Phase Awareness
|
|
9
|
+
|
|
10
|
+
| phase | allowed | blocked |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| `docs` | clarify requirements, OpenSpec artifacts, SDD contract docs, handoff | runtime code changes |
|
|
13
|
+
| `design` | Superpowers technical design, reverse impact analysis, TDD strategy | runtime code changes before design guard |
|
|
14
|
+
| `implement` | implementation, TDD, worktree coordination, task checkoff | skipping plan/user decisions |
|
|
15
|
+
| `verify` | verification, code review, branch/worktree closeout | hiding failed or partial evidence |
|
|
16
|
+
| `archive` | final user confirmation, archive script | source code changes |
|
|
17
|
+
| `done` | read-only inspection | lifecycle changes without reopen |
|
|
18
|
+
|
|
19
|
+
## Required Checkpoints
|
|
20
|
+
|
|
21
|
+
- Use `.sdd/handoff/brainstorm-summary.md` during changing requirements or
|
|
22
|
+
design discussion; separate confirmed, candidate, pending, and rejected
|
|
23
|
+
content.
|
|
24
|
+
- After `brainstorm-summary.md` is finalized and before creating or rewriting
|
|
25
|
+
`design.md`, perform the active context-compression gate or get explicit user
|
|
26
|
+
confirmation to continue.
|
|
27
|
+
- Before Superpowers planning or implementation prompts, generate
|
|
28
|
+
`.sdd/handoff/sdd-context.*` and record its hash in SDD quality gates.
|
|
29
|
+
- During `phase: design`, create
|
|
30
|
+
`docs/superpowers/specs/*-technical-design.md`, record it as
|
|
31
|
+
`technical_design` in `.sdd/state.yaml`, and keep it limited to source-level
|
|
32
|
+
HOW. OpenSpec/SDD still owns requirements, API, DB, tests, SQL, and gates.
|
|
33
|
+
- During `phase: implement`, `prompt/implementation.md` and task prompts under
|
|
34
|
+
`prompt/<task-name>.md` must exist and be cross-linked from tasks,
|
|
35
|
+
traceability, quality gate, and test-report before verification.
|
|
36
|
+
- After context compression, agent switch, worktree switch, or parallel terminal
|
|
37
|
+
handoff, run `superflow-state.sh recover <change-dir>` and follow the printed
|
|
38
|
+
recovery action.
|
|
39
|
+
- If `build_pause: plan-ready`, do not regenerate the plan unless the plan file
|
|
40
|
+
is missing or the user explicitly asks for a rewrite.
|
|
41
|
+
- If `build_mode: subagent-driven-development`, the main session coordinates
|
|
42
|
+
only; read `.sdd/subagent-progress.md` and do not execute worker tasks
|
|
43
|
+
directly.
|
|
44
|
+
- Build must complete `requesting-code-review` before transitioning to verify.
|
|
45
|
+
- Verify must use `verification-before-completion`; archive requires explicit
|
|
46
|
+
user confirmation and `superflow-archive.sh`.
|
|
47
|
+
|
|
48
|
+
OpenSpec/SDD documents remain the design source of truth. Handoff and rules are
|
|
49
|
+
recovery aids; when they conflict with source documents, read and fix the source
|
|
50
|
+
documents first.
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Claude Code global experience auto backup hook.
|
|
3
|
+
# Syncs curated ~/.claude development experience into code-cli-config/claude-code-setup,
|
|
4
|
+
# then commits the backup repository. Push requires explicit --push-once.
|
|
5
|
+
|
|
6
|
+
set -u
|
|
7
|
+
|
|
8
|
+
CLAUDE_HOME="${CLAUDE_HOME:-$HOME/.claude}"
|
|
9
|
+
CONFIG_REPO="${CLAUDE_CONFIG_REPO:-/Users/chenmankun/cmk-project/code-cli-config}"
|
|
10
|
+
BACKUP_ROOT="$CONFIG_REPO/claude-code-setup"
|
|
11
|
+
LOCK_DIR="${TMPDIR:-/tmp}/claude-auto-backup.lock"
|
|
12
|
+
|
|
13
|
+
usage() {
|
|
14
|
+
cat <<'USAGE'
|
|
15
|
+
用法:
|
|
16
|
+
claude-auto-backup-hook.sh [--force] [--dry-run] [--push-once]
|
|
17
|
+
|
|
18
|
+
环境变量:
|
|
19
|
+
CLAUDE_AUTO_BACKUP_DISABLE=1 临时关闭自动备份
|
|
20
|
+
CLAUDE_AUTO_BACKUP_DRY_RUN=1 只同步检查,不提交
|
|
21
|
+
CLAUDE_CONFIG_REPO=/path 指定 code-cli-config 仓库路径
|
|
22
|
+
USAGE
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
FORCE=0
|
|
26
|
+
PUSH_ONCE=0
|
|
27
|
+
DRY_RUN="${CLAUDE_AUTO_BACKUP_DRY_RUN:-0}"
|
|
28
|
+
|
|
29
|
+
for arg in "$@"; do
|
|
30
|
+
case "$arg" in
|
|
31
|
+
--force) FORCE=1 ;;
|
|
32
|
+
--push-once) FORCE=1; PUSH_ONCE=1 ;;
|
|
33
|
+
--dry-run) DRY_RUN=1 ;;
|
|
34
|
+
-h|--help)
|
|
35
|
+
usage
|
|
36
|
+
exit 0
|
|
37
|
+
;;
|
|
38
|
+
esac
|
|
39
|
+
done
|
|
40
|
+
|
|
41
|
+
if [ "${CLAUDE_AUTO_BACKUP_DISABLE:-0}" = "1" ]; then
|
|
42
|
+
exit 0
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
log() {
|
|
46
|
+
echo "[Claude 自动备份] $1" >&2
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
classify_backup_path() {
|
|
50
|
+
local path="$1"
|
|
51
|
+
case "$path" in
|
|
52
|
+
claude-code-setup/superflow-*|claude-code-setup/*.skill)
|
|
53
|
+
echo "SuperBridge Flow 技能"
|
|
54
|
+
;;
|
|
55
|
+
claude-code-setup/openspec-*)
|
|
56
|
+
echo "OpenSpec 技能"
|
|
57
|
+
;;
|
|
58
|
+
claude-code-setup/scripts/*)
|
|
59
|
+
echo "脚本"
|
|
60
|
+
;;
|
|
61
|
+
claude-code-setup/agents/*)
|
|
62
|
+
echo "Agent"
|
|
63
|
+
;;
|
|
64
|
+
claude-code-setup/commands/*)
|
|
65
|
+
echo "命令"
|
|
66
|
+
;;
|
|
67
|
+
claude-code-setup/skills/*)
|
|
68
|
+
echo "技能"
|
|
69
|
+
;;
|
|
70
|
+
claude-code-setup/settings/*)
|
|
71
|
+
echo "配置"
|
|
72
|
+
;;
|
|
73
|
+
claude-code-setup/CLAUDE.md)
|
|
74
|
+
echo "全局指令"
|
|
75
|
+
;;
|
|
76
|
+
claude-code-setup/output-styles/*)
|
|
77
|
+
echo "输出样式"
|
|
78
|
+
;;
|
|
79
|
+
*)
|
|
80
|
+
echo "Claude 配置"
|
|
81
|
+
;;
|
|
82
|
+
esac
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
build_commit_subject() {
|
|
86
|
+
local categories
|
|
87
|
+
categories="$(
|
|
88
|
+
git diff --cached --name-only |
|
|
89
|
+
while IFS= read -r path; do
|
|
90
|
+
classify_backup_path "$path"
|
|
91
|
+
done |
|
|
92
|
+
awk '!seen[$0]++'
|
|
93
|
+
)"
|
|
94
|
+
|
|
95
|
+
local first second third extra
|
|
96
|
+
first="$(printf '%s\n' "$categories" | sed -n '1p')"
|
|
97
|
+
second="$(printf '%s\n' "$categories" | sed -n '2p')"
|
|
98
|
+
third="$(printf '%s\n' "$categories" | sed -n '3p')"
|
|
99
|
+
extra="$(printf '%s\n' "$categories" | sed -n '4p')"
|
|
100
|
+
|
|
101
|
+
if [ -z "$first" ]; then
|
|
102
|
+
echo "自动备份 Claude:同步配置变化"
|
|
103
|
+
elif [ -z "$second" ]; then
|
|
104
|
+
echo "自动备份 Claude:更新 $first"
|
|
105
|
+
elif [ -z "$third" ]; then
|
|
106
|
+
echo "自动备份 Claude:更新 $first 和 $second"
|
|
107
|
+
elif [ -z "$extra" ]; then
|
|
108
|
+
echo "自动备份 Claude:更新 $first、$second 和 $third"
|
|
109
|
+
else
|
|
110
|
+
echo "自动备份 Claude:更新多类全局配置"
|
|
111
|
+
fi
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
build_commit_body() {
|
|
115
|
+
{
|
|
116
|
+
echo "本次自动备份包含:"
|
|
117
|
+
git diff --cached --name-status |
|
|
118
|
+
sed -n '1,20p' |
|
|
119
|
+
sed 's/^/- /'
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if ! mkdir "$LOCK_DIR" 2>/dev/null; then
|
|
124
|
+
log "已有备份任务在执行,跳过本次触发"
|
|
125
|
+
exit 0
|
|
126
|
+
fi
|
|
127
|
+
trap 'rmdir "$LOCK_DIR" 2>/dev/null || true' EXIT
|
|
128
|
+
|
|
129
|
+
INPUT="$(cat 2>/dev/null || true)"
|
|
130
|
+
|
|
131
|
+
json_value() {
|
|
132
|
+
local key="$1"
|
|
133
|
+
printf '%s' "$INPUT" | python3 -c "
|
|
134
|
+
import json, sys
|
|
135
|
+
try:
|
|
136
|
+
data = json.load(sys.stdin)
|
|
137
|
+
except Exception:
|
|
138
|
+
print('')
|
|
139
|
+
raise SystemExit
|
|
140
|
+
tool_input = data.get('tool_input', {})
|
|
141
|
+
print(tool_input.get('$key', '') or '')
|
|
142
|
+
" 2>/dev/null
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
TOUCH_PATH="$(json_value file_path)"
|
|
146
|
+
COMMAND="$(json_value command)"
|
|
147
|
+
if [ -z "$COMMAND" ]; then
|
|
148
|
+
COMMAND="$(json_value cmd)"
|
|
149
|
+
fi
|
|
150
|
+
CWD="$(json_value cwd)"
|
|
151
|
+
|
|
152
|
+
should_trigger() {
|
|
153
|
+
if [ "$FORCE" = "1" ]; then
|
|
154
|
+
return 0
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
case "$TOUCH_PATH" in
|
|
158
|
+
"$CLAUDE_HOME"/skills/*|"$CLAUDE_HOME"/scripts/*|"$CLAUDE_HOME"/agents/*|"$CLAUDE_HOME"/commands/*|"$CLAUDE_HOME"/output-styles/*)
|
|
159
|
+
return 0
|
|
160
|
+
;;
|
|
161
|
+
"$CLAUDE_HOME"/CLAUDE.md|"$CLAUDE_HOME"/settings.json|"$CLAUDE_HOME"/settings.local.json)
|
|
162
|
+
return 0
|
|
163
|
+
;;
|
|
164
|
+
esac
|
|
165
|
+
|
|
166
|
+
case "$CWD" in
|
|
167
|
+
"$CLAUDE_HOME"|"$CLAUDE_HOME"/*)
|
|
168
|
+
return 0
|
|
169
|
+
;;
|
|
170
|
+
esac
|
|
171
|
+
|
|
172
|
+
case "$COMMAND" in
|
|
173
|
+
*"$CLAUDE_HOME"/skills*|*"$CLAUDE_HOME"/scripts*|*"$CLAUDE_HOME"/agents*|*"$CLAUDE_HOME"/commands*|*"$CLAUDE_HOME"/output-styles*|*"$CLAUDE_HOME"/CLAUDE.md*|*"$CLAUDE_HOME"/settings.json*|*"$CLAUDE_HOME"/settings.local.json*|*"~/.claude/skills"*|*"~/.claude/scripts"*|*"~/.claude/agents"*|*"~/.claude/commands"*|*"~/.claude/output-styles"*|*"~/.claude/CLAUDE.md"*|*"~/.claude/settings.json"*|*"~/.claude/settings.local.json"*)
|
|
174
|
+
return 0
|
|
175
|
+
;;
|
|
176
|
+
esac
|
|
177
|
+
|
|
178
|
+
return 1
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if ! should_trigger; then
|
|
182
|
+
exit 0
|
|
183
|
+
fi
|
|
184
|
+
|
|
185
|
+
if [ ! -d "$CLAUDE_HOME" ]; then
|
|
186
|
+
log "Claude 目录不存在: $CLAUDE_HOME"
|
|
187
|
+
exit 0
|
|
188
|
+
fi
|
|
189
|
+
|
|
190
|
+
if [ ! -d "$CONFIG_REPO/.git" ]; then
|
|
191
|
+
log "备份仓库不存在或不是 Git 仓库: $CONFIG_REPO"
|
|
192
|
+
exit 0
|
|
193
|
+
fi
|
|
194
|
+
|
|
195
|
+
log "同步 ~/.claude 到 claude-code-setup"
|
|
196
|
+
|
|
197
|
+
# 确保备份目录存在
|
|
198
|
+
mkdir -p "$BACKUP_ROOT/settings" \
|
|
199
|
+
"$BACKUP_ROOT/agents" \
|
|
200
|
+
"$BACKUP_ROOT/commands" \
|
|
201
|
+
"$BACKUP_ROOT/output-styles" \
|
|
202
|
+
"$BACKUP_ROOT/scripts" \
|
|
203
|
+
"$BACKUP_ROOT/skills"
|
|
204
|
+
|
|
205
|
+
# 1. CLAUDE.md
|
|
206
|
+
if [ -f "$CLAUDE_HOME/CLAUDE.md" ]; then
|
|
207
|
+
cp "$CLAUDE_HOME/CLAUDE.md" "$BACKUP_ROOT/CLAUDE.md"
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
# 2. settings.json(过滤运行时状态)
|
|
211
|
+
if [ -f "$CLAUDE_HOME/settings.json" ]; then
|
|
212
|
+
python3 "$BACKUP_ROOT/scripts/sync-settings-json.py" \
|
|
213
|
+
"$CLAUDE_HOME/settings.json" \
|
|
214
|
+
"$BACKUP_ROOT/settings/settings.json"
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
# 3. settings.local.json
|
|
218
|
+
if [ -f "$CLAUDE_HOME/settings.local.json" ]; then
|
|
219
|
+
cp "$CLAUDE_HOME/settings.local.json" "$BACKUP_ROOT/settings/settings.local.json"
|
|
220
|
+
fi
|
|
221
|
+
|
|
222
|
+
# 4. agents
|
|
223
|
+
if [ -d "$CLAUDE_HOME/agents" ]; then
|
|
224
|
+
rsync -a --delete "$CLAUDE_HOME/agents/" "$BACKUP_ROOT/agents/"
|
|
225
|
+
fi
|
|
226
|
+
|
|
227
|
+
# 5. commands
|
|
228
|
+
if [ -d "$CLAUDE_HOME/commands" ]; then
|
|
229
|
+
rsync -a --delete "$CLAUDE_HOME/commands/" "$BACKUP_ROOT/commands/"
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
# 6. output-styles
|
|
233
|
+
if [ -d "$CLAUDE_HOME/output-styles" ]; then
|
|
234
|
+
rsync -a --delete "$CLAUDE_HOME/output-styles/" "$BACKUP_ROOT/output-styles/"
|
|
235
|
+
fi
|
|
236
|
+
|
|
237
|
+
# 7. scripts(排除备份脚本自身,避免循环)
|
|
238
|
+
if [ -d "$CLAUDE_HOME/scripts" ]; then
|
|
239
|
+
rsync -a --delete \
|
|
240
|
+
--exclude='claude-auto-backup-hook.sh' \
|
|
241
|
+
"$CLAUDE_HOME/scripts/" "$BACKUP_ROOT/scripts/"
|
|
242
|
+
fi
|
|
243
|
+
|
|
244
|
+
# 8. skills:只同步两边都存在的(用户显式维护的),不自动添加新 skill
|
|
245
|
+
if [ -d "$CLAUDE_HOME/skills" ]; then
|
|
246
|
+
for skill_dir in "$CLAUDE_HOME"/skills/*; do
|
|
247
|
+
[ -d "$skill_dir" ] || continue
|
|
248
|
+
skill_name="$(basename "$skill_dir")"
|
|
249
|
+
case "$skill_name" in
|
|
250
|
+
.backups|.system)
|
|
251
|
+
continue
|
|
252
|
+
;;
|
|
253
|
+
esac
|
|
254
|
+
# 只备份备份目录中已存在的 skills(不自动引入 marketplace skills)
|
|
255
|
+
if [ -d "$BACKUP_ROOT/skills/$skill_name" ] && [ -f "$skill_dir/SKILL.md" ]; then
|
|
256
|
+
rsync -a --delete "$skill_dir/" "$BACKUP_ROOT/skills/$skill_name/"
|
|
257
|
+
fi
|
|
258
|
+
done
|
|
259
|
+
fi
|
|
260
|
+
|
|
261
|
+
chmod +x "$BACKUP_ROOT/scripts/"*.sh \
|
|
262
|
+
"$BACKUP_ROOT/scripts/"*.py 2>/dev/null || true
|
|
263
|
+
|
|
264
|
+
if [ "$DRY_RUN" = "1" ]; then
|
|
265
|
+
log "dry-run 模式,仅完成同步,不提交"
|
|
266
|
+
exit 0
|
|
267
|
+
fi
|
|
268
|
+
|
|
269
|
+
log "提交 code-cli-config"
|
|
270
|
+
|
|
271
|
+
STAGE_PATHS=(
|
|
272
|
+
"claude-code-setup/CLAUDE.md"
|
|
273
|
+
"claude-code-setup/settings/settings.json"
|
|
274
|
+
"claude-code-setup/settings/settings.local.json"
|
|
275
|
+
"claude-code-setup/agents"
|
|
276
|
+
"claude-code-setup/commands"
|
|
277
|
+
"claude-code-setup/output-styles"
|
|
278
|
+
"claude-code-setup/scripts"
|
|
279
|
+
"claude-code-setup/skills"
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
(
|
|
283
|
+
cd "$CONFIG_REPO" || exit 0
|
|
284
|
+
|
|
285
|
+
for path in "${STAGE_PATHS[@]}"; do
|
|
286
|
+
if [ -e "$path" ]; then
|
|
287
|
+
git add "$path"
|
|
288
|
+
fi
|
|
289
|
+
done
|
|
290
|
+
|
|
291
|
+
if git diff --cached --quiet; then
|
|
292
|
+
log "没有需要提交的 Claude 配置变化"
|
|
293
|
+
if [ "$PUSH_ONCE" != "1" ]; then
|
|
294
|
+
exit 0
|
|
295
|
+
fi
|
|
296
|
+
else
|
|
297
|
+
commit_subject="$(build_commit_subject)"
|
|
298
|
+
commit_body="$(build_commit_body)"
|
|
299
|
+
log "提交说明: $commit_subject"
|
|
300
|
+
git commit -m "$commit_subject" -m "$commit_body"
|
|
301
|
+
if [ "$PUSH_ONCE" != "1" ]; then
|
|
302
|
+
log "已完成本地提交;如需推送,请手动执行: $0 --push-once"
|
|
303
|
+
exit 0
|
|
304
|
+
fi
|
|
305
|
+
fi
|
|
306
|
+
|
|
307
|
+
current_branch="$(git branch --show-current)"
|
|
308
|
+
if [ -z "$current_branch" ]; then
|
|
309
|
+
log "当前仓库不在普通分支,跳过推送"
|
|
310
|
+
exit 0
|
|
311
|
+
fi
|
|
312
|
+
git push origin "$current_branch"
|
|
313
|
+
)
|