@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
package/README.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# SuperBridge Flow
|
|
2
|
+
|
|
3
|
+
[中文文档](./README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
SuperBridge Flow is a workflow CLI for bringing OpenSpec/SDD and Superpowers
|
|
6
|
+
together in real software delivery.
|
|
7
|
+
|
|
8
|
+
- OpenSpec/SDD owns **WHAT**: requirements, API contracts, database and field
|
|
9
|
+
semantics, tests, real-entry acceptance, and quality gates.
|
|
10
|
+
- Superpowers owns source-level **HOW**: technical design, TDD order,
|
|
11
|
+
worktree/team execution, review, and verification discipline.
|
|
12
|
+
- The full lifecycle is `docs -> design -> implement -> verify -> archive`.
|
|
13
|
+
|
|
14
|
+
The CLI installs skills, hooks, rules, scripts, handoff state, and dependency
|
|
15
|
+
guards for Claude Code and Codex.
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g @chenmk/superflow
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Then initialize a project:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
superflow init
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Interactive init lets you select:
|
|
30
|
+
|
|
31
|
+
- target agent tools: Claude Code, Codex, or both
|
|
32
|
+
- language: English or Chinese
|
|
33
|
+
- install scope: global or project
|
|
34
|
+
|
|
35
|
+
Non-interactive usage:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
superflow init --yes
|
|
39
|
+
superflow init --language en --yes
|
|
40
|
+
superflow init --language zh --yes
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## What Init Installs
|
|
44
|
+
|
|
45
|
+
`superflow init` installs and configures:
|
|
46
|
+
|
|
47
|
+
- OpenSpec CLI, then runs `openspec init <project> --tools ...`
|
|
48
|
+
- Superpowers for the selected agent tools
|
|
49
|
+
- SuperBridge Flow/OpenSpec skills
|
|
50
|
+
- hooks, scripts, and anti-drift rules
|
|
51
|
+
- Codex prompt aliases
|
|
52
|
+
- optional understand-anything integration checks
|
|
53
|
+
- `docs/sdd-context/` project context scaffolding
|
|
54
|
+
|
|
55
|
+
OpenSpec and Superpowers are hard dependencies. understand-anything is
|
|
56
|
+
best-effort and does not block initialization.
|
|
57
|
+
|
|
58
|
+
## Commands
|
|
59
|
+
|
|
60
|
+
| Command | Purpose |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `superflow init` | Install and configure SuperBridge Flow interactively |
|
|
63
|
+
| `superflow update` | Refresh installed skills, hooks, scripts, and rules |
|
|
64
|
+
| `superflow update --with-package` | Also update `@chenmk/superflow`, OpenSpec, and Superpowers |
|
|
65
|
+
| `superflow doctor` | Diagnose installed assets and project state |
|
|
66
|
+
| `superflow status` | Show active changes, current phase, next command, and risks |
|
|
67
|
+
| `superflow pipeline` | Check pipeline skill deployment |
|
|
68
|
+
| `superflow docs` | Check docs-phase skill deployment |
|
|
69
|
+
| `superflow design` | Check design-phase skill deployment |
|
|
70
|
+
| `superflow implement` | Check implement-phase skill deployment |
|
|
71
|
+
| `superflow verify` | Check verify-phase skill deployment |
|
|
72
|
+
| `superflow archive` | Check archive-phase skill deployment |
|
|
73
|
+
|
|
74
|
+
## Agent Usage
|
|
75
|
+
|
|
76
|
+
In Codex:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
Use $superflow-pipeline to analyze this requirement and drive the full workflow.
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
In Claude Code:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
/superflow-pipeline
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
For large requirements, ask the agent to read one section or one feature at a
|
|
89
|
+
time. SuperBridge Flow will route through clarification, OpenSpec docs,
|
|
90
|
+
Superpowers technical design, implementation prompts, verification, and archive.
|
|
91
|
+
|
|
92
|
+
## Automatic Update Checks
|
|
93
|
+
|
|
94
|
+
After hooks are registered, SuperBridge Flow checks core dependency updates once
|
|
95
|
+
per new session and throttles real network checks to once every 6 hours by
|
|
96
|
+
default.
|
|
97
|
+
|
|
98
|
+
Default behavior is **check only**. It reports available updates but does not
|
|
99
|
+
install them. Run this to update explicitly:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
superflow update --with-package
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Environment controls:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Default: check and report
|
|
109
|
+
export SUPERFLOW_AUTO_UPDATE=check
|
|
110
|
+
|
|
111
|
+
# Disable automatic checks
|
|
112
|
+
export SUPERFLOW_AUTO_UPDATE=0
|
|
113
|
+
|
|
114
|
+
# Optional for personal machines: install automatically when updates are found
|
|
115
|
+
export SUPERFLOW_AUTO_UPDATE=apply
|
|
116
|
+
|
|
117
|
+
# Minimum check interval in seconds; default is 21600
|
|
118
|
+
export SUPERFLOW_UPDATE_MIN_INTERVAL_SECONDS=21600
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Language Support
|
|
122
|
+
|
|
123
|
+
SuperBridge Flow supports English and Chinese installation modes.
|
|
124
|
+
|
|
125
|
+
- `--language en`: deploys English-facing SuperBridge Flow skills and CLI
|
|
126
|
+
prompts where available.
|
|
127
|
+
- `--language zh`: deploys the original Chinese full-detail skill set.
|
|
128
|
+
|
|
129
|
+
The Chinese skill set currently contains the most detailed operational
|
|
130
|
+
templates. The English skill set is designed as a practical public beta and
|
|
131
|
+
keeps the same workflow contracts.
|
|
132
|
+
|
|
133
|
+
## Requirements
|
|
134
|
+
|
|
135
|
+
- Node.js 20+
|
|
136
|
+
- Claude Code or Codex
|
|
137
|
+
- npm access to install OpenSpec and Superpowers
|
|
138
|
+
- Git Bash or a compatible shell on Windows for hook scripts
|
|
139
|
+
|
|
140
|
+
## License
|
|
141
|
+
|
|
142
|
+
MIT
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# SuperBridge Flow
|
|
2
|
+
|
|
3
|
+
[English](./README.md)
|
|
4
|
+
|
|
5
|
+
通用 SDD 开发工作流 CLI,支持 Claude Code 和 Codex。
|
|
6
|
+
|
|
7
|
+
把 SuperBridge Flow 技能和配套 hook 脚本整合为单一 npm 包,通过 CLI 自动部署到:
|
|
8
|
+
|
|
9
|
+
- Claude Code:`~/.claude/skills/`、`~/.claude/scripts/`,并注册 `~/.claude/settings.json` hook
|
|
10
|
+
- Codex:`~/.codex/skills/`、`~/.codex/hooks/`
|
|
11
|
+
|
|
12
|
+
## 安装
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g @chenmk/superflow
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
完整安装、初始化和日常使用教程见 [INSTALL.md](./INSTALL.md)。
|
|
19
|
+
|
|
20
|
+
## 快速开始
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 交互式选择 Claude Code / Codex(可多选)
|
|
24
|
+
superflow init
|
|
25
|
+
|
|
26
|
+
# 非交互模式,默认同时安装 Claude Code + Codex
|
|
27
|
+
superflow init --yes
|
|
28
|
+
|
|
29
|
+
# 跳过 hook 注册(手工管理)
|
|
30
|
+
superflow init --no-hooks
|
|
31
|
+
|
|
32
|
+
# 只打印计划不执行
|
|
33
|
+
superflow init --dry-run
|
|
34
|
+
|
|
35
|
+
# 从失败步骤继续
|
|
36
|
+
superflow init --resume
|
|
37
|
+
|
|
38
|
+
# 验证安装
|
|
39
|
+
superflow doctor
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## SDD 分工
|
|
43
|
+
|
|
44
|
+
- OpenSpec/SDD 负责 WHAT 和合同:需求、API、DB、SQL、字段语义、tests、真实入口验收和质量门禁。
|
|
45
|
+
- Superpowers 负责 HOW:源码级技术详设、TDD/RED 顺序、团队分工、worktree/端口并行、review/tester 编排和验证闭环。
|
|
46
|
+
- 完整流程是 `docs -> design -> implement -> verify -> archive`。Superpowers 技术详设落到 `docs/superpowers/specs/*-technical-design.md`,并记录到 `.sdd/state.yaml` 的 `technical_design`,避免长会话压缩后漂移。
|
|
47
|
+
- Codex 侧通常用自然语言或 `$superflow-pipeline` 触发;Claude Code 侧可以直接用 `/superflow-pipeline`、`/superflow-docs`、`/superflow-design` 等 slash command。
|
|
48
|
+
- 飞书、语雀等在线文档读取工具不内置在 SuperBridge Flow CLI 中;可自行用 `lark-cli` 等外部工具读取,再通过 `/superflow-pipeline` 或 `$superflow-pipeline` 分段分析指定小节。
|
|
49
|
+
|
|
50
|
+
## 命令
|
|
51
|
+
|
|
52
|
+
| 命令 | 说明 |
|
|
53
|
+
|------|------|
|
|
54
|
+
| `superflow init` | 一站式安装;交互终端中可多选 Claude Code / Codex |
|
|
55
|
+
| `superflow init --yes` | 非交互安装,默认 `--agent both` |
|
|
56
|
+
| `superflow init --dry-run` | 只打印计划不执行 |
|
|
57
|
+
| `superflow init --resume` | 从失败步骤继续 |
|
|
58
|
+
| `superflow init --no-hooks` | 只装技能 + 脚本,跳过 Codex/Claude hook 注册 |
|
|
59
|
+
| `superflow init --no-openspec-init` | 跳过当前项目 OpenSpec 原生初始化 |
|
|
60
|
+
| `superflow doctor` | 诊断 CLI / 第三方 / 脚本 / skills |
|
|
61
|
+
| `superflow doctor --agent codex` | 只诊断 Codex 侧 |
|
|
62
|
+
| `superflow clarify [feature]` | 校验 SuperBridge Flow clarify 阶段技能部署 |
|
|
63
|
+
| `superflow docs [change]` | 校验 SuperBridge Flow docs 阶段技能部署 |
|
|
64
|
+
| `superflow design [change]` | 校验 SuperBridge Flow design 阶段技能部署 |
|
|
65
|
+
| `superflow implement [task]` | 校验 SuperBridge Flow implement 阶段技能部署 |
|
|
66
|
+
| `superflow pipeline` | 校验 SuperBridge Flow pipeline 阶段技能部署 |
|
|
67
|
+
|
|
68
|
+
## 系统支持
|
|
69
|
+
|
|
70
|
+
- macOS 10.15+
|
|
71
|
+
- Linux(Ubuntu 20.04+ / 其它主流发行版)
|
|
72
|
+
- Windows 10+(CLI 本体支持;hook 脚本需要 Git Bash 或兼容 shell)
|
|
73
|
+
|
|
74
|
+
## 依赖
|
|
75
|
+
|
|
76
|
+
- Node.js 20+
|
|
77
|
+
- Claude Code 或 Codex(按 `--agent` 选择)
|
|
78
|
+
- 第三方(`superflow init` 自动装):
|
|
79
|
+
- openspec CLI(硬依赖,npm 全局)并在当前项目执行 `openspec init --tools ...`
|
|
80
|
+
- superpowers(硬依赖,Claude Code / Codex 对应插件)
|
|
81
|
+
- understand-anything(尽力安装,失败只警告)
|
|
82
|
+
- api-doc-changelog(辅助 skill,复制到目标 agent skills 目录)
|
|
83
|
+
|
|
84
|
+
## 自动检查更新
|
|
85
|
+
|
|
86
|
+
注册 hook 后,Superflow 会在新会话开始时轻量检查核心依赖更新:
|
|
87
|
+
|
|
88
|
+
- `@chenmk/superflow`
|
|
89
|
+
- `@fission-ai/openspec`
|
|
90
|
+
- Claude Code / Codex 的 Superpowers 插件
|
|
91
|
+
|
|
92
|
+
推荐策略是“自动检查,手动更新”:默认只提示,不自动安装;执行
|
|
93
|
+
`superflow update --with-package` 才会统一更新。
|
|
94
|
+
同一会话只检查一次,并且默认至少间隔 6 小时才真正访问 npm/plugin 源。
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# 默认:只检查并提示
|
|
98
|
+
export SUPERFLOW_AUTO_UPDATE=check
|
|
99
|
+
|
|
100
|
+
# 关闭自动检查
|
|
101
|
+
export SUPERFLOW_AUTO_UPDATE=0
|
|
102
|
+
|
|
103
|
+
# 个人机器可选:检查到新版本后自动安装
|
|
104
|
+
export SUPERFLOW_AUTO_UPDATE=apply
|
|
105
|
+
|
|
106
|
+
# 调整最小检查间隔,默认 21600 秒(6 小时)
|
|
107
|
+
export SUPERFLOW_UPDATE_MIN_INTERVAL_SECONDS=21600
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 设计文档
|
|
111
|
+
|
|
112
|
+
- 详细设计:`~/cmk-project/code-cli-config/sdd-cli-design.md`
|
|
113
|
+
- 实施 plan:`~/cmk-project/code-cli-config/sdd-cli-plan.md`
|
|
114
|
+
|
|
115
|
+
## 许可证
|
|
116
|
+
|
|
117
|
+
MIT
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# 业务规则
|
|
2
|
+
|
|
3
|
+
> **初始版来源**:`sdd-cli/assets/skills/` 抽出的散落业务引用 + SDD 方法论规则
|
|
4
|
+
> **维护方**:业务/产品 + 开发
|
|
5
|
+
> **自动化率**:30-50%(验证逻辑可挖,产品 PRD 规则需人工补)
|
|
6
|
+
|
|
7
|
+
## 1. 充电业务核心规则
|
|
8
|
+
|
|
9
|
+
### 1.1 套餐业务
|
|
10
|
+
|
|
11
|
+
- **运营商边界**:套餐不跨运营商,创建/查询时必须按运营商隔离
|
|
12
|
+
- 历史事故:CDPT-165 套餐运营商筛选不匹配(修复 commit 见 [incidents.md](./incidents.md))
|
|
13
|
+
- **适用站点**:套餐可绑定多个站点,已开通记录的适用站点应随套餐变更同步更新
|
|
14
|
+
- 历史事故:CDPT-192 修改适用站点后记录未同步
|
|
15
|
+
- **同名限制**:同一站点不允许创建相同名称的优惠套餐
|
|
16
|
+
- 历史事故:CDPT-171
|
|
17
|
+
- **有效时段**:允许跨天(如 22:00-06:00)
|
|
18
|
+
- 历史事故:CDPT-158
|
|
19
|
+
- **同车牌规则**:同车牌不同套餐、不同有效时间段允许同时开通
|
|
20
|
+
- 历史事故:CDPT-175
|
|
21
|
+
|
|
22
|
+
### 1.2 计费 / 退款 / 对账
|
|
23
|
+
|
|
24
|
+
- **停车月票退款同步**:充电套餐退款后,停车月票权益在 BEM 也必须同步退款
|
|
25
|
+
- 历史事故:CDPT-186
|
|
26
|
+
- **三方对账**:发布前必须对齐 ① 源码/Mapper 读写字段 ② 开发库结构 ③ 测试库现状 + 版本总 SQL 执行后结构
|
|
27
|
+
- 测试库已有字段不得重复 ADD
|
|
28
|
+
- 类型/注释不一致时生成 MODIFY 或写明不采纳理由
|
|
29
|
+
- **SQL 收口对账表**:每个 DB 相关 P/CR 任务必须输出
|
|
30
|
+
|
|
31
|
+
| P编号 | 表 | 字段/索引/数据 | 源码引用 | 总SQL位置 | 开发库状态 | 测试库状态 | 处理结论 |
|
|
32
|
+
|
|
33
|
+
### 1.3 车位 / 设备
|
|
34
|
+
|
|
35
|
+
- **车位枪启停**:站点未绑定车位枪时,【启用车位枪】按钮不允许打开
|
|
36
|
+
- 历史事故:CDPT-199
|
|
37
|
+
|
|
38
|
+
## 2. 批量操作规则
|
|
39
|
+
|
|
40
|
+
### 2.1 批量开通 / 续费 / 退款
|
|
41
|
+
|
|
42
|
+
- **手机号格式**:支持 1 个或 2 个手机号,逗号分隔(如 `18666666666,19888888888`)
|
|
43
|
+
- 历史事故:CDPT-185
|
|
44
|
+
- **错误提示**:遇错误/异常数据必须明确指出"哪一行、哪个字段异常",整批不插入
|
|
45
|
+
- 历史事故:CDPT-180
|
|
46
|
+
- **必填标记**:模板中必填字段必须标【必填】
|
|
47
|
+
- 历史事故:CDPT-178
|
|
48
|
+
- **当天 1 天有效期**:批量开通当天 + 1 天有效期时,记录显示已过期(页面显示生效中)
|
|
49
|
+
- 历史事故:CDPT-179 — 需验证时区与日期边界
|
|
50
|
+
- **空模板检测**:导入空 Excel 模板应报错,不应提示成功
|
|
51
|
+
- 历史事故:CDPT-181
|
|
52
|
+
|
|
53
|
+
### 2.2 批量导入
|
|
54
|
+
|
|
55
|
+
- **车位枪文件格式错误**:错误提示需优化(具体到行列)
|
|
56
|
+
- 历史事故:CDPT-198
|
|
57
|
+
- **车位枪文件类型错误**:提示需优化
|
|
58
|
+
- 历史事故:CDPT-181
|
|
59
|
+
|
|
60
|
+
## 3. 扫码充电
|
|
61
|
+
|
|
62
|
+
- **扫码后无套餐**:开通充电套餐后扫码开启充电,无套餐可用
|
|
63
|
+
- 历史事故:CDPT-163 — 需核对套餐状态/有效时段
|
|
64
|
+
- **扫码开票提示**:已退款的优惠套餐订单,扫码开票提示需优化
|
|
65
|
+
- 历史事故:CDPT-189
|
|
66
|
+
|
|
67
|
+
## 4. 数据权限 / 字段约束
|
|
68
|
+
|
|
69
|
+
- **最近操作人**:开通套餐记录中"最近操作人"取值错误(admin 后台开通时显示为前端用户)
|
|
70
|
+
- 历史事故:CDPT-164
|
|
71
|
+
- **导出 Excel**:
|
|
72
|
+
- 套餐开通记录导出,剩余充电额度为不限额时导出内容错误(CDPT-188)
|
|
73
|
+
- 套餐开通记录导出,**不合并**不连续的有效期(CDPT-177)
|
|
74
|
+
- 创建套餐页面,导出 Excel 中的使用站点列展示错误(CDPT-166)
|
|
75
|
+
- 批量开通记录导出,手机号 / 车牌应支持模糊查询(CDPT-173)
|
|
76
|
+
- **页面不显示但后端必填**:标记为 backend default 或 backend-derived(SDD 硬规则)
|
|
77
|
+
- **过设计字段**:UI 不展示但后端要写,标 backend default;UI 展示但后端不需要,标 over-designed
|
|
78
|
+
|
|
79
|
+
## 5. 状态流转
|
|
80
|
+
|
|
81
|
+
- **开票 / 退款 / 续费 状态**:套餐开通 → 生效中 → 退款 / 续费 / 过期,状态字段派生后消费仓查询条件必须同步迁移
|
|
82
|
+
- 不允许继续按旧字段过滤
|
|
83
|
+
- **有效期 / 充电额度**:派生字段(从持久化状态 / JSON 快照计算),消费仓同步改用派生表达式
|
|
84
|
+
|
|
85
|
+
## 6. 上游系统交互(占位 — 详见 [external-systems.md](./external-systems.md))
|
|
86
|
+
|
|
87
|
+
- **BEM(停车月票权益)**:退款 / 续费双向同步
|
|
88
|
+
- **Lark / 飞书**:需求来源、文档协作
|
|
89
|
+
- **B 站?财务对账**:定期对账
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 7. 维护提示
|
|
94
|
+
|
|
95
|
+
- 本文件是**初始版**,由 superflow init Step 5 自动生成 + 人工补全
|
|
96
|
+
- 后期跟 LLM 沟通解释业务系统时,可让 LLM 把新规则追加到本文件
|
|
97
|
+
- 每条规则建议标注:**事故编号(如 CDPT-XXX)| 修复 commit | 验证日期**
|
|
98
|
+
- 自动化补充:可以用 `superflow scan` 让 LLM 重扫项目,对比本文件并提示遗漏
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# 团队设计决策
|
|
2
|
+
|
|
3
|
+
> **初始版来源**:sdd-cli 散落的项目约定(端口、命名、工作流)+ evcharge-operator-api 现有架构
|
|
4
|
+
> **维护方**:架构 / 研发 lead
|
|
5
|
+
> **自动化率**:30-50%(commit "refactor" 可挖,ADR 文件不一定存在)
|
|
6
|
+
|
|
7
|
+
格式:ADR 风格(Why / Alternatives / Consequence)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. 工程约定
|
|
12
|
+
|
|
13
|
+
### ADR-001: worktree 启动端口 = base port + P/CR 编号
|
|
14
|
+
|
|
15
|
+
- **状态**:已确立
|
|
16
|
+
- **背景**:多 worktree 并行开发时,端口冲突会导致调试互相干扰
|
|
17
|
+
- **决策**:每个 worktree 启动端口 = `base server.port + P/CR 编号`
|
|
18
|
+
- 例:P50 任务 base 9250 → 启动端口 9300
|
|
19
|
+
- 冲突时 fallback 找下一个可用端口
|
|
20
|
+
- **原因**:
|
|
21
|
+
- 可预测(看 P 编号就知道端口)
|
|
22
|
+
- 不需要中心化端口分配
|
|
23
|
+
- CI / 健康检查 URL 可以静态配置
|
|
24
|
+
- **替代方案**:
|
|
25
|
+
- 动态分配(每次启动随机空闲端口)— 失去可预测性
|
|
26
|
+
- 集中注册表(K8s Service / Port Registry)— 引入新组件,过重
|
|
27
|
+
- **后果**:
|
|
28
|
+
- worktree prompt 必须显式写出推导端口 + 启动命令 + curl URL
|
|
29
|
+
- 端口用尽时(极端情况)需要扩 base
|
|
30
|
+
|
|
31
|
+
### ADR-002: P 编号 / CR 编号命名
|
|
32
|
+
|
|
33
|
+
- **状态**:已确立
|
|
34
|
+
- **背景**:实现任务需要可追溯编号
|
|
35
|
+
- **决策**:
|
|
36
|
+
- 主任务 `PXX`(大版本下递增),如 P50、P64、P65
|
|
37
|
+
- 联调 / 集成后追加项 `CR` 或 `PX`(同 P 编号空间)
|
|
38
|
+
- prompt 文件名 `pXX-xxx.md`(小写 p + 横线)
|
|
39
|
+
- batch 内嵌在 `embedded-changes/pXX-*` 目录
|
|
40
|
+
- **后果**:
|
|
41
|
+
- 已执行的 batch prompt 不修改,新增 CR/Px
|
|
42
|
+
- 不允许把无关改动混进当前 P 编号
|
|
43
|
+
- 平行 worktree 只更新自己 `pXX-*` 内的交付文档,不动顶层聚合文档
|
|
44
|
+
|
|
45
|
+
### ADR-003: SQL 总 SQL 文件作为版本合同
|
|
46
|
+
|
|
47
|
+
- **状态**:已确立
|
|
48
|
+
- **背景**:研发 agent 经常忘记执行增量 SQL,导致字段缺失 / 默认值缺失,最终绕过数据库问题产生隐蔽 bug
|
|
49
|
+
- **决策**:
|
|
50
|
+
- **写代码前必须先检查数据库**:对照 design/api/spec/tasks 中涉及的表/字段/索引/默认值/枚举值/初始化数据,连接开发库执行 DESC / SHOW CREATE TABLE 确认实际结构
|
|
51
|
+
- **独立 P/CR 任务必须回写版本总 SQL**:开发库已有 + 局部 SQL 执行过 + agent 回复里写过 SQL,都不等于交付完成。源码/Mapper 依赖的表结构或初始化数据,必须确认版本总 SQL 包含对应变更
|
|
52
|
+
- **任务完成必须有 SQL 收口对账表**:`P编号 | 表 | 字段/索引/数据 | 源码引用 | 总SQL位置 | 开发库状态 | 测试库状态 | 处理结论`
|
|
53
|
+
- **发布前必须做三方对账**:① 源码/Mapper 读写字段 ② 开发库结构 ③ 测试库现状 + 版本总 SQL 执行后结构
|
|
54
|
+
- **后果**:
|
|
55
|
+
- 数据库相关任务必须有"数据库验证"步骤(`SHOW CREATE TABLE` / `SELECT`)
|
|
56
|
+
- "开发库已经有" 不算交付完成
|
|
57
|
+
- 测试库已有字段不得重复 ADD;类型/注释不一致时 MODIFY 或写明不采纳理由
|
|
58
|
+
|
|
59
|
+
### ADR-004: 跨仓对账规则
|
|
60
|
+
|
|
61
|
+
- **状态**:已确立
|
|
62
|
+
- **背景**:实体 / Mapper / SQL 漂移会导致业务行为不一致
|
|
63
|
+
- **决策**:需求涉及共享表时必须做 7 步对账:
|
|
64
|
+
1. 指定表结构真源:哪个 SQL 文件 / 哪个库的 SHOW CREATE TABLE / 哪个仓库模型
|
|
65
|
+
2. 列出全部消费仓:直接 CRUD 仓库、互联互通仓库、定时任务、回调服务、导入导出服务、测试端点
|
|
66
|
+
3. 对每个消费仓做字段对账:`@TableName` 实体字段、`BaseMapper` 默认查询列、Mapper XML/resultMap、手写 SQL、查询条件 vs `information_schema.columns` / `SHOW CREATE TABLE`
|
|
67
|
+
4. 派生字段迁移:状态派生后查询条件必须同步
|
|
68
|
+
5. test-report 记录跨仓对账表:`表 | 真源结构 | 消费仓 | 实体/Mapper/SQL 字段 | 实际库字段 | 处理结论 | 验证证据`
|
|
69
|
+
- **后果**:
|
|
70
|
+
- 修改共享表的需求必须先列消费仓清单
|
|
71
|
+
- 改完一处必须全仓同步验证
|
|
72
|
+
|
|
73
|
+
## 2. SDD 工作流约定
|
|
74
|
+
|
|
75
|
+
### ADR-005: SDD 硬门禁
|
|
76
|
+
|
|
77
|
+
- **状态**:已确立
|
|
78
|
+
- **决策**:
|
|
79
|
+
- **understand-anything 必须先扫**:SDD 任何澄清 / 实现前,check `.understand-anything/` 等产物,不存在则先跑索引
|
|
80
|
+
- **既有代码 / 数据关系核实顺序**:understand-anything graph → source/Mapper/XML 锚点 → 只读数据库检查(源码不足时)
|
|
81
|
+
- **关系仍不清楚**:停下来问用户,标 `Blocked`,禁止凭字段名猜测设计
|
|
82
|
+
- **process one feature at a time**:按产品文档顺序,逐个 feature 串行
|
|
83
|
+
- **未确认前不生成 spec/design/tasks/tests/prompt**
|
|
84
|
+
- **不做"single-agent only" implementation prompt**:必须含 Worker + 独立 Tester + Reviewer + Leader
|
|
85
|
+
- **后果**:
|
|
86
|
+
- 实现 prompt 必含"superpower 团队 prefix" + "understand-anything 平台级影响分析" + "既有代码 / 数据关系核实" + "worktree 启动端口" 4 段
|
|
87
|
+
- 缺任意一段 → 标 Blocked
|
|
88
|
+
|
|
89
|
+
### ADR-006: 实现完成判定(不是 BUILD SUCCESS)
|
|
90
|
+
|
|
91
|
+
- **状态**:已确立
|
|
92
|
+
- **决策**:批量完成必须验证:
|
|
93
|
+
- prompt 交叉链接(prompt/implementation.md 引用 → tasks.md 引用 → traceability-matrix.md 引用 → tests/test-report.md 验证项)
|
|
94
|
+
- Markdown handoff 链接:所有引用的 `.md` 文件是相对路径可点击链接
|
|
95
|
+
- understand-anything 影响证据(test-report.md 含 受影响模块/接口/表 + 回归验证)
|
|
96
|
+
- 既有代码 / 数据关系证据(按核实顺序留痕)
|
|
97
|
+
- 编译/构建输出
|
|
98
|
+
- **测试**真的跑过(BUILD SUCCESS ≠ 测试通过)
|
|
99
|
+
- 引用 SDK / 同源项目版本号升级(1.0.8-SNAPSHOT → 1.0.9-SNAPSHOT)
|
|
100
|
+
- 三层门禁:`.sdd-enforced` / `.db-verified` hook 标记 + `superflow-verify-integration.sh` + `superflow-delivery-check.sh`
|
|
101
|
+
- 数据库相关任务:版本总 SQL 已更新 + SQL 收口对账表
|
|
102
|
+
- L3/L4 测试:curl + 真实请求参数(来源标注)+ 响应 + 断言 + DB 证据 + 日志
|
|
103
|
+
- Bug 修复:Red-Green 证据(修复前失败的 curl/test,修复后同样路径通过)
|
|
104
|
+
- **后果**:
|
|
105
|
+
- 单元测试只能作为辅助证据
|
|
106
|
+
- placeholder / mock-only / skipped / 缺测试数据 — 不算通过
|
|
107
|
+
- "问要不要启动 app" — 不算有效闭环
|
|
108
|
+
- 必须跑或请求 `openspec validate <change-id> --strict`
|
|
109
|
+
|
|
110
|
+
### ADR-007: 平行 worktree 不许动顶层聚合文档
|
|
111
|
+
|
|
112
|
+
- **状态**:已确立
|
|
113
|
+
- **决策**:
|
|
114
|
+
- Worker prompt 只更新自己 `embedded-changes/pXX-*` 内的 `tasks.md` / `test-report.md` / `sdd-quality-gate.md` 等 P-local 文档
|
|
115
|
+
- **禁止**编辑顶层聚合文档(root `tasks.md` / `test-report.md` / `traceability-matrix.md` / `sdd-quality-gate.md` / `tests.md`)
|
|
116
|
+
- 聚合文档更新由 Leader closeout worktree 单独 commit(创建 `.sdd-aggregate-closeout` 标记)
|
|
117
|
+
- **原因**:避免平行 worktree 合并冲突
|
|
118
|
+
- **后果**:
|
|
119
|
+
- `superflow-delivery-check.sh` 会 block 顶层文档改动,worker 必须移除
|
|
120
|
+
- 顶层文档改动只有 Leader worktree 能做
|
|
121
|
+
|
|
122
|
+
## 3. 业务架构决策
|
|
123
|
+
|
|
124
|
+
### ADR-008: 套餐适用站点的真源是 site 关系表
|
|
125
|
+
|
|
126
|
+
- **状态**:已确立(CDPT-165 修复后)
|
|
127
|
+
- **背景**:原版按 `t_package.operator_id` 直接过滤,未走 site 关系表,导致运营商边界漏掉
|
|
128
|
+
- **决策**:套餐分页/导出按运营商查询时,**改为按站点关系表过滤**(关联到 `t_site` / `t_site_operator` 等关系表)
|
|
129
|
+
- **原因**:
|
|
130
|
+
- 套餐适用站点是中间关系,不是直属于运营商
|
|
131
|
+
- 直查 `t_package.operator_id` 会漏掉"该运营商的站点绑定了别运营商套餐"的情况
|
|
132
|
+
- **后果**:
|
|
133
|
+
- 涉及运营商边界的查询必须 join 站点关系表
|
|
134
|
+
- 套餐分页 / 导出接口需要走同一过滤逻辑
|
|
135
|
+
- **相关**:CDPT-165 修复 commit
|
|
136
|
+
|
|
137
|
+
### ADR-009: 状态字段派生化(从持久化到 JSON/计算)
|
|
138
|
+
|
|
139
|
+
- **状态**:演进中
|
|
140
|
+
- **背景**:单字段(如 `plot_id`)切换到 JSON / 多站点快照字段
|
|
141
|
+
- **决策**:
|
|
142
|
+
- 状态 / 时段 / 额度 等"派生属性"改为计算字段或 JSON 快照,不再单字段持久化
|
|
143
|
+
- 消费仓查询条件必须同步迁移(不能继续按旧字段过滤)
|
|
144
|
+
- **后果**:
|
|
145
|
+
- 跨仓对账时派生字段要明确标注
|
|
146
|
+
- 派生 vs 持久化边界由需求阶段决定
|
|
147
|
+
|
|
148
|
+
## 4. 维护提示
|
|
149
|
+
|
|
150
|
+
- 本文件是**初始版**,由 superflow init Step 5 + 人工补全
|
|
151
|
+
- 后期可让 LLM 通过 git log + commit message 挖掘团队决策("重构因为..."、"refactor: 改用 X")
|
|
152
|
+
- 重要架构变更(影响 ≥ 2 个模块)必须追加 ADR,不允许只在 commit message 里说
|
|
153
|
+
- 决策**可被推翻**,但推翻时必须在本文件追加新 ADR 并说明旧 ADR 为何不再适用
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# 上游系统约定
|
|
2
|
+
|
|
3
|
+
> **初始版来源**:sdd-cli 散落的对账/跨仓规则 + openspec/changes/v1.1-add-charging-package-suite 涉及的外部系统引用
|
|
4
|
+
> **维护方**:架构 / 集成开发
|
|
5
|
+
> **自动化率**:80-95%(MQ topic 常量、API client 调用点静态可挖)
|
|
6
|
+
|
|
7
|
+
## 1. 系统拓扑概览
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
11
|
+
│ evcharge-operator-api (本服务) │
|
|
12
|
+
│ Spring Boot 2.x │
|
|
13
|
+
│ base port: 9250(worktree 派生端口 = 9250 + P/CR 编号) │
|
|
14
|
+
│ 职责:充电套餐核心业务 + 站点 / 设备管理 + 计费对账 │
|
|
15
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
16
|
+
↕ (HTTP / MQ / 定时任务 / 回调)
|
|
17
|
+
├── BEM (停车月票权益服务)
|
|
18
|
+
├── 财务对账系统(定期对账)
|
|
19
|
+
├── Lark / 飞书(需求 / 文档 / 通知)
|
|
20
|
+
├── 云效 / 钉钉(CI / 任务协作 / bug tracker)
|
|
21
|
+
├── 车位 / 设备 IoT(扫码 / 充电桩事件)
|
|
22
|
+
└── 支付 / 退款通道(第三方)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 2. 上游系统清单
|
|
26
|
+
|
|
27
|
+
### 2.1 BEM(停车月票权益服务)
|
|
28
|
+
|
|
29
|
+
- **职责**:管理停车月票权益,与充电套餐权益互斥 / 同步
|
|
30
|
+
- **集成方式**:HTTP API(同步)+ MQ 事件(异步)
|
|
31
|
+
- **关键事件**:
|
|
32
|
+
- 充电套餐退款 → BEM 同步退款(CDPT-186 历史事故:同步缺失)
|
|
33
|
+
- 充电套餐续费 → BEM 续费月票(CDPT-169 历史事故:续费缺失)
|
|
34
|
+
- **数据流向**:
|
|
35
|
+
- 出:本服务发退款 / 续费请求到 BEM
|
|
36
|
+
- 入:BEM 回调停车权益变化(webhook / MQ)
|
|
37
|
+
- **失败处理**:BEM 调用失败必须重试 + 告警,不能静默成功
|
|
38
|
+
- **占位**(待人工补):API 路径、MQ topic、SDK 版本号、对账窗口期
|
|
39
|
+
|
|
40
|
+
### 2.2 财务对账系统
|
|
41
|
+
|
|
42
|
+
- **职责**:充电订单 / 退款 / 套餐开通 / 续费 的财务对账
|
|
43
|
+
- **集成方式**:定时任务拉取对账文件 + T+1 对账
|
|
44
|
+
- **关键字段**:
|
|
45
|
+
- 订单号、金额、支付渠道、退款单号、套餐 ID、站点 ID、运营商 ID
|
|
46
|
+
- **三方对账要求**(见 [decisions §1 ADR-003](./decisions.md#adr-003-sql-总-sql-文件作为版本合同)):
|
|
47
|
+
- ① 源码/Mapper 读写字段
|
|
48
|
+
- ② 开发库结构
|
|
49
|
+
- ③ 测试库现状 + 版本总 SQL 执行后结构
|
|
50
|
+
- **占位**(待人工补):对账文件格式、对账时间窗、差异处理流程
|
|
51
|
+
|
|
52
|
+
### 2.3 Lark / 飞书
|
|
53
|
+
|
|
54
|
+
- **职责**:
|
|
55
|
+
- 需求来源(产品文档 / 截图 / 原型 / 会议纪要)
|
|
56
|
+
- 文档协作(API 文档 / 设计文档 / 验收记录)
|
|
57
|
+
- 通知(事故告警 / 部署通知 / 周报)
|
|
58
|
+
- **集成方式**:
|
|
59
|
+
- 文档:人工导入(云文档链接)
|
|
60
|
+
- 通知:webhook 推送到飞书群机器人
|
|
61
|
+
- 部分自动化:openspec proposal 生成后同步到飞书文档(待定)
|
|
62
|
+
- **占位**(待人工补):webhook URL、群机器人 token、文档空间 ID
|
|
63
|
+
|
|
64
|
+
### 2.4 云效 / 钉钉
|
|
65
|
+
|
|
66
|
+
- **职责**:
|
|
67
|
+
- 任务协作(产品 / 开发 / 测试 / 运维)
|
|
68
|
+
- bug tracker(CDPT-XXX 编号)
|
|
69
|
+
- CI(自动跑测试 / 构建 / 部署)
|
|
70
|
+
- 代码托管(gitee / gitlab)
|
|
71
|
+
- **集成方式**:
|
|
72
|
+
- 任务 / bug:人工操作(云效网页)
|
|
73
|
+
- CI:webhook 触发
|
|
74
|
+
- 事故编号命名规范:`CDPT-XXX`
|
|
75
|
+
- **占位**(待人工补):gitee 仓库地址、CI 配置位置
|
|
76
|
+
|
|
77
|
+
### 2.5 车位 / 设备 IoT
|
|
78
|
+
|
|
79
|
+
- **职责**:扫码充电触发、车位枪状态、充电事件
|
|
80
|
+
- **集成方式**:
|
|
81
|
+
- 扫码:HTTP API(前端 → 本服务 → IoT 网关)
|
|
82
|
+
- 车位枪状态:MQ 事件(IoT → 本服务)
|
|
83
|
+
- 充电事件:MQ 事件(IoT → 本服务 → 财务对账)
|
|
84
|
+
- **关键事件**:
|
|
85
|
+
- 扫码开启充电(CDPT-163 历史事故:开不了)
|
|
86
|
+
- 车位枪启用 / 停用(CDPT-199 历史事故:未绑定时按钮可点)
|
|
87
|
+
- **占位**(待人工补):MQ topic、IoT 网关 API、事件 schema
|
|
88
|
+
|
|
89
|
+
### 2.6 支付 / 退款通道
|
|
90
|
+
|
|
91
|
+
- **职责**:套餐购买支付、退款、续费扣款
|
|
92
|
+
- **集成方式**:HTTP API(同步)+ webhook 回调
|
|
93
|
+
- **关键流程**:
|
|
94
|
+
- 支付成功 → 开通套餐 → 同步 BEM
|
|
95
|
+
- 退款发起 → 支付通道退款 → 同步 BEM → 更新本地状态
|
|
96
|
+
- **占位**(待人工补):支付渠道(微信 / 支付宝 / 银联)、回调地址
|
|
97
|
+
|
|
98
|
+
## 3. MQ 约定(占位 — 待人工补实际 topic)
|
|
99
|
+
|
|
100
|
+
| Topic 模式 | 生产者 | 消费者 | 用途 |
|
|
101
|
+
|-----------|--------|--------|------|
|
|
102
|
+
| `evcharge.charging.event.v1` | 充电桩 / IoT | 本服务 | 充电事件(开始 / 停止 / 故障) |
|
|
103
|
+
| `evcharge.billing.refund.v1` | 本服务 | BEM | 退款事件 |
|
|
104
|
+
| `evcharge.billing.renew.v1` | 本服务 | BEM | 续费事件 |
|
|
105
|
+
| `evcharge.billing.sync.v1` | BEM | 本服务 | 停车月票权益变化 |
|
|
106
|
+
| `evcharge.finance.reconcile.v1` | 财务对账系统 | 本服务 | 对账差异推送 |
|
|
107
|
+
|
|
108
|
+
> **占位说明**:上述 topic 是命名规范示例,**实际 topic 需从代码常量 / 配置文件核对**(grep `RocketMQTemplate` / `KafkaTemplate` / `@RocketMQMessageListener` 等)
|
|
109
|
+
|
|
110
|
+
## 4. 共享表 / 跨仓约定
|
|
111
|
+
|
|
112
|
+
### 4.1 跨仓对账清单(占位 — 待人工补)
|
|
113
|
+
|
|
114
|
+
| 表 | 真源 | 消费仓 1 | 消费仓 2 | 消费仓 3 |
|
|
115
|
+
|----|------|---------|---------|---------|
|
|
116
|
+
| `t_package` | 本服务 | BEM(只读) | 财务对账 | 定时任务 |
|
|
117
|
+
| `t_package_order` | 本服务 | BEM | 财务对账 | 退款通道 |
|
|
118
|
+
| `t_site` | 本服务 | BEM | IoT 网关 | 第三方平台 |
|
|
119
|
+
| `t_operator` | 本服务 | BEM | 财务对账 | 第三方平台 |
|
|
120
|
+
|
|
121
|
+
> **占位说明**:实际表名 / 字段 / 关系 需从 `src/main/resources/sql/` 和 `application-*.yml` 核对
|
|
122
|
+
|
|
123
|
+
### 4.2 关键表(占位 — 待人工补详细 schema)
|
|
124
|
+
|
|
125
|
+
- `t_package` — 套餐主表
|
|
126
|
+
- `t_package_order` — 套餐开通 / 续费 / 退款记录
|
|
127
|
+
- `t_package_site` — 套餐与站点关系表(**注意:这是 CDPT-165 修复后引入的"中间表",运营商边界过滤必须走这里**)
|
|
128
|
+
- `t_site` — 站点表
|
|
129
|
+
- `t_operator` — 运营商表
|
|
130
|
+
- `t_site_operator` — 站点与运营商关系表
|
|
131
|
+
|
|
132
|
+
> **占位说明**:详细字段、索引、外键、默认值需查 `sql/` 目录
|
|
133
|
+
|
|
134
|
+
## 5. API 约定
|
|
135
|
+
|
|
136
|
+
### 5.1 REST 风格
|
|
137
|
+
|
|
138
|
+
- URL:`/api/v1/<resource>/<action>`
|
|
139
|
+
- 鉴权:JWT / Session(占位,待补)
|
|
140
|
+
- 错误码:4xx 业务错误 + 5xx 系统错误(占位,待补错误码表)
|
|
141
|
+
- 分页:统一 `{ page, size, total }` 格式(占位)
|
|
142
|
+
|
|
143
|
+
### 5.2 关键 API(占位 — 待人工补路径)
|
|
144
|
+
|
|
145
|
+
| API | 方法 | 用途 | 关联事故 |
|
|
146
|
+
|-----|------|------|---------|
|
|
147
|
+
| 创建套餐 | POST | 运营商创建套餐 | CDPT-165 / CDPT-171 |
|
|
148
|
+
| 套餐分页查询 | GET | 按运营商过滤 | CDPT-165 |
|
|
149
|
+
| 套餐开通 | POST | 用户购买 / 批量开通 | CDPT-179 / CDPT-180 |
|
|
150
|
+
| 套餐续费 | POST | 续费停车月票 | CDPT-169 |
|
|
151
|
+
| 套餐退款 | POST | 单笔 / 批量退款 | CDPT-186 |
|
|
152
|
+
| 套餐适用站点修改 | PUT | 修改适用站点 | CDPT-192 |
|
|
153
|
+
| 扫码充电 | POST | 触发充电 | CDPT-163 |
|
|
154
|
+
| 导出 Excel | GET | 各种导出 | CDPT-166 / CDPT-188 / CDPT-177 |
|
|
155
|
+
|
|
156
|
+
> **占位说明**:实际 API 路径 / 入参 / 出参 需查 `src/main/java/` 的 Controller
|
|
157
|
+
|
|
158
|
+
## 6. 维护提示
|
|
159
|
+
|
|
160
|
+
- 本文件是**初始版**,superflow init Step 5 + 人工补全
|
|
161
|
+
- **自动化补充重点**:
|
|
162
|
+
- 用 `superflow scan` 让 LLM 扫代码常量 → 自动填 MQ topic、API 路径、表名
|
|
163
|
+
- grep `RocketMQTemplate` / `KafkaTemplate` / `@RestController` 拿实际接口
|
|
164
|
+
- 读 `application.yml` 拿数据库连接 / Redis / MQ 连接配置
|
|
165
|
+
- **不要在事故没复盘前**补充根因 — 留空让负责人填
|
|
166
|
+
- 重要变更(升级支付渠道 / 接入新 IoT)必须追加本文件相关章节
|