主要变更: - 新增 tb_shop_series_allocation 表,存储系列级别的一次性佣金配置 - ShopPackageAllocation 移除 one_time_commission_amount 字段 - PackageSeries 新增 enable_one_time_commission 字段控制是否启用一次性佣金 - 新增 /api/admin/shop-series-allocations CRUD 接口 - 佣金计算逻辑改为从 ShopSeriesAllocation 获取一次性佣金金额 - 删除废弃的 ShopSeriesOneTimeCommissionTier 模型 - OpenAPI Tag '系列分配' 和 '单套餐分配' 合并为 '套餐分配' 迁移脚本: - 000042: 重构佣金套餐模型 - 000043: 简化佣金分配 - 000044: 一次性佣金分配重构 - 000045: PackageSeries 添加 enable_one_time_commission 字段 测试: - 新增验收测试 (shop_series_allocation, commission_calculation) - 新增流程测试 (one_time_commission_chain) - 删除过时的单元测试(已被验收测试覆盖)
5.9 KiB
name, description, license, compatibility, metadata
| name | description | license | compatibility | metadata | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| openspec-continue-change | Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue their workflow. | MIT | Requires openspec CLI. |
|
Continue working on a change by creating the next artifact.
Input: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
Steps
-
If no change name provided, prompt for selection
Run
openspec list --jsonto get available changes sorted by most recently modified. Then use the AskUserQuestion tool to let the user select which change to work on.Present the top 3-4 most recently modified changes as options, showing:
- Change name
- Schema (from
schemafield if present, otherwise "spec-driven") - Status (e.g., "0/5 tasks", "complete", "no tasks")
- How recently it was modified (from
lastModifiedfield)
Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to continue.
IMPORTANT: Do NOT guess or auto-select a change. Always let the user choose.
-
Check current status
openspec status --change "<name>" --jsonParse the JSON to understand current state. The response includes:
schemaName: The workflow schema being used (e.g., "spec-driven")artifacts: Array of artifacts with their status ("done", "ready", "blocked")isComplete: Boolean indicating if all artifacts are complete
-
Act based on status:
If all artifacts are complete (
isComplete: true):- Congratulate the user
- Show final status including the schema used
- Suggest: "All artifacts created! You can now implement this change or archive it."
- STOP
If artifacts are ready to create (status shows artifacts with
status: "ready"):- Pick the FIRST artifact with
status: "ready"from the status output - Get its instructions:
openspec instructions <artifact-id> --change "<name>" --json - Parse the JSON. The key fields are:
context: Project background (constraints for you - do NOT include in output)rules: Artifact-specific rules (constraints for you - do NOT include in output)template: The structure to use for your output fileinstruction: Schema-specific guidanceoutputPath: Where to write the artifactdependencies: Completed artifacts to read for context
- Create the artifact file:
- Read any completed dependency files for context
- Use
templateas the structure - fill in its sections - Apply
contextandrulesas constraints when writing - but do NOT copy them into the file - Write to the output path specified in instructions
- Show what was created and what's now unlocked
- STOP after creating ONE artifact
If no artifacts are ready (all blocked):
- This shouldn't happen with a valid schema
- Show status and suggest checking for issues
-
After creating an artifact, show progress
openspec status --change "<name>"
Output
After each invocation, show:
- Which artifact was created
- Schema workflow being used
- Current progress (N/M complete)
- What artifacts are now unlocked
- Prompt: "Want to continue? Just ask me to continue or tell me what to do next."
Artifact Creation Guidelines
The artifact types and their purpose depend on the schema. Use the instruction field from the instructions output to understand what to create.
Common artifact patterns:
spec-driven schema (proposal → specs → design → tasks):
-
proposal.md: Ask user about the change if not clear. Fill in Why, What Changes, Capabilities, Impact.
- The Capabilities section is critical - each capability listed will need a spec file.
-
specs//spec.md: Create one spec per capability listed in the proposal's Capabilities section (use the capability name, not the change name).
-
design.md: Document technical decisions, architecture, and implementation approach.
-
tasks.md: Break down implementation into checkboxed tasks, following TDD workflow structure:
TDD Tasks Structure (MUST follow):
## 0. 测试准备(实现前执行) - [ ] 0.1 生成验收测试和流程测试(/opsx:gen-tests) - [ ] 0.2 运行测试确认全部 FAIL(证明测试有效) ## 1. 基础设施(数据库 + Model) - [ ] 1.x 创建迁移、Model、DTO - [ ] 1.y 验证:编译通过 ## 2. 功能单元 A(完整垂直切片) - [ ] 2.1 Store 层 - [ ] 2.2 Service 层 - [ ] 2.3 Handler 层 + 路由 - [ ] 2.4 **验证:功能 A 相关验收测试 PASS** ## N. 最终验证 - [ ] N.1 全部验收测试 PASS - [ ] N.2 全部流程测试 PASS - [ ] N.3 完整测试套件无回归Key principles:
- Task group 0 MUST be test preparation (generate tests + confirm all FAIL)
- Organize by functional units, NOT by technical layers (Store/Service/Handler)
- Each functional unit MUST end with "verify related tests PASS"
- Final validation MUST include all acceptance + flow tests passing
For other schemas, follow the instruction field from the CLI output.
Guardrails
- Create ONE artifact per invocation
- Always read dependency artifacts before creating a new one
- Never skip artifacts or create out of order
- If context is unclear, ask the user before creating
- Verify the artifact file exists after writing before marking progress
- Use the schema's artifact sequence, don't assume specific artifact names
- IMPORTANT:
contextandrulesare constraints for YOU, not content for the file- Do NOT copy
<context>,<rules>,<project_context>blocks into the artifact - These guide what you write, but should never appear in the output
- Do NOT copy