@rpamis/comet 0.1.4 → 0.1.6

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/README.md CHANGED
@@ -30,10 +30,11 @@ comet init
30
30
 
31
31
  1. Prompt you to select AI platforms (auto-detects existing configs)
32
32
  2. Choose install scope: project-level (current directory) or global (home directory)
33
- 3. Install [OpenSpec](https://github.com/Fission-AI/OpenSpec) skills
34
- 4. Install [Superpowers](https://github.com/obra/superpowers) skills
35
- 5. Deploy Comet skills to selected platforms
36
- 6. Create `docs/superpowers/specs/` and `docs/superpowers/plans/` working directories
33
+ 3. Select language for Comet skills: English or 中文
34
+ 4. Install [OpenSpec](https://github.com/Fission-AI/OpenSpec) skills
35
+ 5. Install [Superpowers](https://github.com/obra/superpowers) skills
36
+ 6. Deploy Comet skills (in your chosen language) to selected platforms
37
+ 7. Create `docs/superpowers/specs/` and `docs/superpowers/plans/` working directories
37
38
 
38
39
  ## Commands
39
40
 
@@ -1,15 +1,19 @@
1
- {
2
- "version": "0.1.0",
3
- "skills": [
4
- "comet/SKILL.md",
5
- "comet/scripts/comet-guard.sh",
6
- "comet/scripts/comet-yaml-validate.sh",
7
- "comet-open/SKILL.md",
8
- "comet-design/SKILL.md",
9
- "comet-build/SKILL.md",
10
- "comet-verify/SKILL.md",
11
- "comet-archive/SKILL.md",
12
- "comet-hotfix/SKILL.md",
13
- "comet-tweak/SKILL.md"
14
- ]
15
- }
1
+ {
2
+ "version": "0.1.0",
3
+ "skills": [
4
+ "comet/SKILL.md",
5
+ "comet/scripts/comet-guard.sh",
6
+ "comet/scripts/comet-yaml-validate.sh",
7
+ "comet-open/SKILL.md",
8
+ "comet-design/SKILL.md",
9
+ "comet-build/SKILL.md",
10
+ "comet-verify/SKILL.md",
11
+ "comet-archive/SKILL.md",
12
+ "comet-hotfix/SKILL.md",
13
+ "comet-tweak/SKILL.md"
14
+ ],
15
+ "languages": [
16
+ { "id": "en", "name": "English", "skillsDir": "skills" },
17
+ { "id": "zh", "name": "中文", "skillsDir": "skills-zh" }
18
+ ]
19
+ }
@@ -1,204 +1,206 @@
1
- ---
2
- name: comet
3
- description: "Comet — OpenSpec + Superpowers 双星开发流程。用 /comet 启动,自动检测阶段并分发到子命令。五阶段:开启深度设计计划与构建验证与收尾归档。"
4
- ---
5
-
6
- # Comet — OpenSpec + Superpowers 双星开发流程
7
-
8
- OpenSpec Superpowers 如双星系统围绕同一目标运转。OpenSpec 负责 WHATSuperpowers 负责 HOW
9
-
10
- ```
11
- OpenSpec 负责 WHAT — 大纲、提案、spec 生命周期、归档
12
- Superpowers 负责 HOW — 技术设计、计划、执行、收尾
13
- ```
14
-
15
- **核心原则:brainstorming 必不可跳过。每次变更都必须经过深度设计(hotfix tweak preset 除外)。**
16
-
17
- <IMPORTANT>
18
- ## 阶段衔接
19
-
20
- 单次 `/comet` 调用会从检测到的阶段开始执行,并在每个阶段退出条件满足后提示或进入下一阶段。
21
-
22
- 流转链:open → design → build → verify → archive
23
-
24
- 需要用户参与的节点:
25
- 1. brainstorming 过程中确认设计方案
26
- 2. build 阶段选择执行方式
27
- 3. verify 不通过时决定修复或接受偏差
28
- 4. finishing-branch 选择分支处理方式
29
- 5. 遇到升级条件(hotfix/tweak → 完整流程)
30
-
31
- agent 不应跳过这些决策点;其他明确无歧义的阶段衔接可以继续推进。
32
- </IMPORTANT>
33
-
34
- ## 阶段自动检测
35
-
36
- ### Step 0: 活跃 Change 发现
37
-
38
- **立即执行:**
39
-
40
- 1. 运行 `openspec list --json` 获取所有活跃 change
41
- 2. 对每个 change,检查 `docs/superpowers/specs/` `docs/superpowers/plans/` 匹配关联文件,判断阶段和进度
42
-
43
- **分支逻辑:**
44
-
45
- | 情况 | 行为 |
46
- |------|------|
47
- | 无活跃 change | → 调用 `/comet-open` |
48
- | 恰好 1 个活跃 change | → 自动选中,进入阶段判定(Step 1 |
49
- | 多个活跃 change | → 列出清单让用户选择 |
50
-
51
- **多 change 选择**:使用 AskUserQuestion 展示,格式示例:
52
-
53
- ```
54
- | # | Change 名称 | 当前阶段 | 任务进度 |
55
- |---|------------|---------|---------|
56
- | 1 | xxx-feature | Build | 3/5 tasks |
57
- | 2 | yyy-fix | Design | No design doc |
58
- ```
59
-
60
- 用户选择后,对选中的 change 进入阶段判定。
61
-
62
- **Preset 检测**:
63
- - 如用户明确描述为 bug fix / 热修复,且满足 hotfix 适用条件,直接调用 `/comet-hotfix`(跳过选择)。
64
- - 如用户明确描述为文案、配置、文档、prompt 或小范围非 bug 调整,且满足 tweak 适用条件,直接调用 `/comet-tweak`(跳过选择)。
65
-
66
- ### Step 1: Comet 状态元数据读取
67
-
68
- 优先读取 `openspec/changes/<name>/.comet.yaml`。若该文件不存在,再回退到 `openspec status --change "<name>" --json`、`tasks.md` `docs/superpowers/` 文件检查。
69
-
70
- 推荐元数据结构:
71
-
72
- ```yaml
73
- workflow: full
74
- phase: build
75
- design_doc: docs/superpowers/specs/YYYY-MM-DD-topic-design.md
76
- plan: docs/superpowers/plans/YYYY-MM-DD-feature.md
77
- build_mode: subagent-driven-development
78
- verify_mode: light
79
- verify_result: pending
80
- verified_at: null
81
- archived: false
82
- ```
83
-
84
- 字段含义:
85
-
86
- | 字段 | 含义 |
87
- |------|------|
88
- | `workflow` | `full`、`hotfix` 或 `tweak` |
89
- | `phase` | 当前阶段:`open`、`design`、`build`、`verify`、`archive` |
90
- | `design_doc` | 关联的 Superpowers Design Doc 路径,可为空 |
91
- | `plan` | 关联的 Superpowers Plan 路径,可为空 |
92
- | `build_mode` | 已选择的执行方式,可为空 |
93
- | `verify_mode` | `light` `full`,可为空 |
94
- | `verify_result` | `pending`、`pass` `fail` |
95
- | `verified_at` | 验证通过时间,可为空 |
96
- | `archived` | change 是否已归档 |
97
-
98
- ### Step 2: 阶段判定
99
-
100
- 对选中的 change,按以下顺序判断当前状态:
101
-
102
- 1. **`archived: true` change 已移入 archive** 流程已完成
103
- 2. **`verify_result: pass` 且 `archived` 不是 `true`** → 调用 `/comet-archive`
104
- 3. **`phase: verify` tasks.md 全部勾选**调用 `/comet-verify`
105
- 4. **`phase: build` 或已有 Design Doc 但计划/执行未完成**调用 `/comet-build`
106
- 5. **`phase: design` 或有 change 但无 Design Doc** → 调用 `/comet-design`
107
- 6. **无活跃 change 或状态无法判定**调用 `/comet-open`
108
-
109
- 如果元数据与文件状态冲突,以可验证的文件状态为准,并在继续阶段前修正 `.comet.yaml`。
110
-
111
- ---
112
-
113
- ## 子命令
114
-
115
- | 命令 | 阶段 | 归属 | 产物 |
116
- |------|------|------|------|
117
- | `/comet-open` | 1. 开启 | OpenSpec | proposal.md、design.md、tasks.md |
118
- | `/comet-design` | 2. 深度设计 | Superpowers | Design Doc、delta spec |
119
- | `/comet-build` | 3. 计划与构建 | Superpowers | 实施计划、代码提交 |
120
- | `/comet-verify` | 4. 验证与收尾 | Both | 验证报告、分支处理 |
121
- | `/comet-archive` | 5. 归档 | OpenSpec | delta→main spec 同步、design doc 标注、归档 |
122
- | `/comet-hotfix` | 预设路径 | Both | 快速修复(跳过 brainstorming) |
123
- | `/comet-tweak` | 预设路径 | Both | 小改动(跳过 brainstorming 和完整 plan) |
124
-
125
- ---
126
-
127
- ## 流程图
128
-
129
- ```
130
- /comet
131
- ↓ 自动检测
132
- /comet-open ──→ /comet-design ──→ /comet-build ──→ /comet-verify ──→ /comet-archive
133
- (OpenSpec) (Superpowers) (Superpowers) (Both) (OpenSpec)
134
-
135
- /comet-hotfix(预设路径,跳过 brainstorming)
136
- open ──→ build ──→ verify ──→ archive
137
- 如触发升级条件 补充 Design Doc → 回到完整流程
138
-
139
- /comet-tweak(预设路径,跳过 brainstorming 和完整 plan)
140
- open ──→ lightweight build ──→ light verify ──→ archive
141
- 如触发升级条件 补充 Design Doc → 回到完整流程
142
- ```
143
-
144
- ---
145
-
146
- ## 错误处理
147
-
148
- | 场景 | 处理方式 |
149
- |------|---------|
150
- | `openspec list --json` 失败 | 检查 openspec 是否已安装,提示用户运行 `openspec init` |
151
- | 子 skill 不可用(如 `superpowers:brainstorming`) | 停止流程,提示安装或启用对应 skill |
152
- | `.comet.yaml` 格式异常或缺失 | 以文件状态为准(tasks.md、docs/superpowers/),修正元数据后继续 |
153
- | Maven 编译/测试失败 | 返回 build 阶段修复,不进入 verify |
154
- | change 目录结构不完整 | `comet-open` 的产物要求补齐缺失文件 |
155
-
156
- ---
157
-
158
- ## 快速参考
159
-
160
- ### 脚本定位
161
-
162
- Comet 阶段守卫脚本 `comet-guard.sh` 随 skill 包分发,位于 `comet/scripts/` 目录。
163
- **不硬编码平台路径**,运行时通过以下命令自定位:
164
-
165
- ```bash
166
- COMET_GUARD=$(find . -path '*/comet/scripts/comet-guard.sh' -type f -print -quit)
167
- bash "$COMET_GUARD" <change-name> <phase>
168
- ```
169
-
170
- 后续文档中 `bash $COMET_GUARD <change> <phase>` 均指此命令。加载 comet 后,agent 应在 shell 环境中缓存 `COMET_GUARD` 路径,避免重复 `find`。
171
-
172
- ### 文件结构
173
-
174
- ```
175
- openspec/ # OpenSpec — WHAT
176
- ├── config.yaml
177
- ├── changes/
178
- ├── <name>/ # 活跃 change
179
- │ │ ├── .openspec.yaml
180
- ├── .comet.yaml
181
- │ │ ├── proposal.md # Why + What
182
- │ │ ├── design.md # 高层架构决策
183
- │ │ ├── specs/<capability>/spec.md # Delta 能力规格
184
- │ │ └── tasks.md # 任务清单
185
- └── archive/YYYY-MM-DD-<name>/ # 已归档
186
- └── specs/<capability>/spec.md # specs(归档时从 delta 同步)
187
-
188
- docs/superpowers/ # Superpowers HOW
189
- ├── specs/YYYY-MM-DD-<topic>-design.md # 设计文档(技术 RFC,归档时标注状态)
190
- └── plans/YYYY-MM-DD-<feature>.md # 实施计划(文件头含 change 关联元数据)
191
- ```
192
-
193
- ### 最佳实践
194
-
195
- 1. **brainstorming 不可跳过** — 每次变更必须经过深度设计(hotfix 和 tweak 除外)
196
- 2. **delta spec 是活文档** — 阶段 3 期间可自由修改,归档时同步
197
- 3. **保持 tasks.md 同步**完成一个勾一个
198
- 4. **频繁提交**每个任务一次提交,message 体现设计意图
199
- 5. **先验证再归档**`/comet-verify` 通过后才执行 `/comet-archive`
200
- 6. **增量更新分级**小编辑、中重 brainstorming、大新 change
201
- 7. **Plan 必须关联 change** — 文件头包含 `change:` `design-doc:` 元数据
202
- 8. **归档闭环**design doc plan 必须标注 `archived-with` 状态
203
- 9. **增量修改已有功能**基于 main spec 创建 delta spec 基线,不从零编写
204
- 10. **Preset 有上限**hotfix/tweak 满足升级条件时及时切换到完整流程
1
+ ---
2
+ name: comet
3
+ description: "Comet — OpenSpec + Superpowers dual-star development workflow. Start with /comet for automatic phase detection and dispatch to subcommands. Five phases: open designbuildverifyarchive."
4
+ ---
5
+
6
+ # Comet — OpenSpec + Superpowers Dual-Star Development Workflow
7
+
8
+ OpenSpec and Superpowers orbit the same goal like a binary star system. OpenSpec handles WHAT, Superpowers handles HOW.
9
+
10
+ ```
11
+ OpenSpec handles WHAT — outline, proposal, spec lifecycle, archive
12
+ Superpowers handles HOW — technical design, planning, execution, closing
13
+ ```
14
+
15
+ **Core principle: brainstorming cannot be skipped. Every change must undergo deep design (except hotfix and tweak presets).**
16
+
17
+ <IMPORTANT>
18
+ ## Phase Transitions
19
+
20
+ A single `/comet` invocation starts from the detected phase and prompts or advances to the next phase when exit conditions are met.
21
+
22
+ Flow chain: open → design → build → verify → archive
23
+
24
+ Nodes requiring user participation:
25
+ 1. Confirm design approach during brainstorming
26
+ 2. Select execution mode during build phase
27
+ 3. Decide to fix or accept deviation when verify fails
28
+ 4. Choose branch handling method for finishing-branch
29
+ 5. Encounter upgrade conditions (hotfix/tweak → full workflow)
30
+
31
+ Agents should not skip these decision points; other unambiguous phase transitions can proceed automatically.
32
+ </IMPORTANT>
33
+
34
+ ## Automatic Phase Detection
35
+
36
+ ### Step 0: Active Change Discovery
37
+
38
+ **Execute immediately:**
39
+
40
+ 1. Run `openspec list --json` to get all active changes
41
+ 2. For each change, check `docs/superpowers/specs/` and `docs/superpowers/plans/` for associated files to determine phase and progress
42
+
43
+ **Branch logic:**
44
+
45
+ | Situation | Action |
46
+ |-----------|--------|
47
+ | No active change | → Invoke `/comet-open` |
48
+ | Exactly 1 active change | → Auto-select, enter phase determination (Step 1) |
49
+ | Multiple active changes | → List for user selection |
50
+
51
+ **Multi-change selection**: Display using AskUserQuestion, example format:
52
+
53
+ ```
54
+ | # | Change Name | Current Phase | Task Progress |
55
+ |---|-------------|---------------|---------------|
56
+ | 1 | xxx-feature | Build | 3/5 tasks |
57
+ | 2 | yyy-fix | Design | No design doc |
58
+ ```
59
+
60
+ After user selection, enter phase determination for the selected change.
61
+
62
+ **Preset detection**:
63
+ - If user explicitly describes as bug fix / hotfix and hotfix conditions are met, directly invoke `/comet-hotfix` (skip selection).
64
+ - If user explicitly describes as copy, config, docs, prompt, or small non-bug adjustment and tweak conditions are met, directly invoke `/comet-tweak` (skip selection).
65
+
66
+ ### Step 1: Comet State Metadata Reading
67
+
68
+ Prefer reading `openspec/changes/<name>/.comet.yaml`. If not available, fall back to `openspec status --change "<name>" --json`, `tasks.md`, and `docs/superpowers/` file checks.
69
+
70
+ Recommended metadata structure:
71
+
72
+ ```yaml
73
+ workflow: full
74
+ phase: build
75
+ design_doc: docs/superpowers/specs/YYYY-MM-DD-topic-design.md
76
+ plan: docs/superpowers/plans/YYYY-MM-DD-feature.md
77
+ build_mode: subagent-driven-development
78
+ isolation: branch
79
+ verify_mode: light
80
+ verify_result: pending
81
+ verified_at: null
82
+ archived: false
83
+ ```
84
+
85
+ Field meanings:
86
+
87
+ | Field | Meaning |
88
+ |-------|---------|
89
+ | `workflow` | `full`, `hotfix`, or `tweak` |
90
+ | `phase` | Current phase: `open`, `design`, `build`, `verify`, `archive` |
91
+ | `design_doc` | Associated Superpowers Design Doc path, can be empty |
92
+ | `plan` | Associated Superpowers Plan path, can be empty |
93
+ | `build_mode` | Selected execution mode, can be empty |
94
+ | `isolation` | `branch` or `worktree`, workspace isolation method, defaults to `branch` |
95
+ | `verify_mode` | `light` or `full`, can be empty |
96
+ | `verify_result` | `pending`, `pass`, or `fail` |
97
+ | `verified_at` | Verification pass time, can be empty |
98
+ | `archived` | Whether change is archived |
99
+
100
+ ### Step 2: Phase Determination
101
+
102
+ For the selected change, determine current state in the following order:
103
+
104
+ 1. **`archived: true` or change moved to archive** Workflow complete
105
+ 2. **`verify_result: pass` and `archived` is not `true`** Invoke `/comet-archive`
106
+ 3. **`phase: verify` or tasks.md all checked** → Invoke `/comet-verify`
107
+ 4. **`phase: build` or has Design Doc but plan/execution incomplete** Invoke `/comet-build`
108
+ 5. **`phase: design` or has change but no Design Doc** → Invoke `/comet-design`
109
+ 6. **No active change or state undeterminable** → Invoke `/comet-open`
110
+
111
+ If metadata conflicts with file state, use verifiable file state as source of truth and correct `.comet.yaml` before continuing phase.
112
+
113
+ ---
114
+
115
+ ## Subcommands
116
+
117
+ | Command | Phase | Owner | Artifacts |
118
+ |---------|-------|-------|-----------|
119
+ | `/comet-open` | 1. Open | OpenSpec | proposal.md、design.md、tasks.md |
120
+ | `/comet-design` | 2. Deep Design | Superpowers | Design Doc、delta spec |
121
+ | `/comet-build` | 3. Plan & Build | Superpowers | Implementation plan、code commits |
122
+ | `/comet-verify` | 4. Verify & Close | Both | Verification report、branch handling |
123
+ | `/comet-archive` | 5. Archive | OpenSpec | delta→main spec sync、design doc markup、archive |
124
+ | `/comet-hotfix` | Preset path | Both | Quick fix (skip brainstorming) |
125
+ | `/comet-tweak` | Preset path | Both | Small change (skip brainstorming and full plan) |
126
+
127
+ ---
128
+
129
+ ## Flow Diagram
130
+
131
+ ```
132
+ /comet
133
+ ↓ Auto-detect
134
+ /comet-open ──→ /comet-design ──→ /comet-build ──→ /comet-verify ──→ /comet-archive
135
+ (OpenSpec) (Superpowers) (Superpowers) (Both) (OpenSpec)
136
+
137
+ /comet-hotfix(preset path, skip brainstorming)
138
+ open ──→ build ──→ verify ──→ archive
139
+ If upgrade triggered → supplement Design Doc → return to full workflow
140
+
141
+ /comet-tweak(preset path, skip brainstorming and full plan)
142
+ open ──→ lightweight build ──→ light verify ──→ archive
143
+ ↑ If upgrade triggered → supplement Design Doc → return to full workflow
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Error Handling
149
+
150
+ | Scenario | Handling |
151
+ |----------|----------|
152
+ | `openspec list --json` fails | Check if openspec is installed, prompt user to run `openspec init` |
153
+ | Sub-skill unavailable (e.g., `superpowers:brainstorming`) | Stop workflow, prompt to install or enable corresponding skill |
154
+ | `.comet.yaml` malformed or missing | Use file state as source of truth (tasks.md、docs/superpowers/), correct metadata then continue |
155
+ | Maven compile/test fails | Return to build phase for fixes, do not enter verify |
156
+ | Incomplete change directory structure | Fill missing files according to `comet-open` artifact requirements |
157
+
158
+ ---
159
+
160
+ ## Quick Reference
161
+
162
+ ### Script Location
163
+
164
+ Comet phase guard script `comet-guard.sh` is distributed with the skill package, located in `comet/scripts/` directory.
165
+ **Do not hardcode platform paths**, self-locate at runtime with:
166
+
167
+ ```bash
168
+ COMET_GUARD=$(find . -path '*/comet/scripts/comet-guard.sh' -type f -print -quit)
169
+ bash "$COMET_GUARD" <change-name> <phase>
170
+ ```
171
+
172
+ In subsequent documentation, `bash $COMET_GUARD <change> <phase>` refers to this command. After loading comet, agents should cache `COMET_GUARD` path in shell environment to avoid repeated `find`.
173
+
174
+ ### File Structure
175
+
176
+ ```
177
+ openspec/ # OpenSpec — WHAT
178
+ ├── config.yaml
179
+ ├── changes/
180
+ │ ├── <name>/ # Active change
181
+ │ │ ├── .openspec.yaml
182
+ │ │ ├── .comet.yaml
183
+ │ │ ├── proposal.md # Why + What
184
+ │ │ ├── design.md # High-level architecture decisions
185
+ │ ├── specs/<capability>/spec.md # Delta capability spec
186
+ │ │ └── tasks.md # Task checklist
187
+ │ └── archive/YYYY-MM-DD-<name>/ # Archived
188
+ └── specs/<capability>/spec.md # Main specs (sync from delta at archive)
189
+
190
+ docs/superpowers/ # Superpowers HOW
191
+ ├── specs/YYYY-MM-DD-<topic>-design.md # Design doc (technical RFC, mark status at archive)
192
+ └── plans/YYYY-MM-DD-<feature>.md # Implementation plan (file header contains change association metadata)
193
+ ```
194
+
195
+ ### Best Practices
196
+
197
+ 1. **brainstorming cannot be skipped** Every change must undergo deep design (except hotfix and tweak)
198
+ 2. **delta spec is a living document** Freely modify during phase 3, sync at archive
199
+ 3. **Keep tasks.md in sync** Check off each completed task
200
+ 4. **Commit frequently** One commit per task, message reflects design intent
201
+ 5. **Verify before archive** — Execute `/comet-archive` only after `/comet-verify` passes
202
+ 6. **Classify incremental updates** Small edits, medium brainstorming, large new changes
203
+ 7. **Plan must associate with change** File header contains `change:` and `design-doc:` metadata
204
+ 8. **Archive closure**design doc and plan must mark `archived-with` status
205
+ 9. **Incremental modification of existing features** — Create delta spec baseline based on main spec, not from scratch
206
+ 10. **Preset has limits** — Switch to full workflow promptly when hotfix/tweak meet upgrade conditions
@@ -49,7 +49,7 @@ warn_msg() { warn " WARN: $1"; WARNINGS=$((WARNINGS + 1)); }
49
49
  echo "[VALIDATE] $YAML" >&2
50
50
 
51
51
  # --- Required fields ---
52
- REQUIRED_FIELDS="workflow phase design_doc plan build_mode verify_mode verify_result verified_at archived"
52
+ REQUIRED_FIELDS="workflow phase design_doc plan build_mode isolation verify_mode verify_result verified_at archived"
53
53
  for field in $REQUIRED_FIELDS; do
54
54
  if ! grep -q "^${field}:" "$YAML" 2>/dev/null; then
55
55
  fail "missing required field '$field'"
@@ -78,6 +78,7 @@ validate_enum() {
78
78
  workflow=$(field_value "workflow")
79
79
  phase=$(field_value "phase")
80
80
  build_mode=$(field_value "build_mode")
81
+ isolation=$(field_value "isolation")
81
82
  verify_mode=$(field_value "verify_mode")
82
83
  verify_result=$(field_value "verify_result")
83
84
  archived=$(field_value "archived")
@@ -87,6 +88,7 @@ plan=$(field_value "plan")
87
88
  validate_enum "workflow" "$workflow" "full hotfix tweak"
88
89
  validate_enum "phase" "$phase" "design build verify archive"
89
90
  validate_enum "build_mode" "$build_mode" "subagent-driven-development executing-plans direct"
91
+ validate_enum "isolation" "$isolation" "branch worktree"
90
92
  validate_enum "verify_mode" "$verify_mode" "light full"
91
93
  validate_enum "verify_result" "$verify_result" "pending pass fail"
92
94
  validate_enum "archived" "$archived" "true false"
@@ -106,7 +108,7 @@ if [ -n "$plan" ] && [ "$plan" != "null" ]; then
106
108
  fi
107
109
 
108
110
  # --- Unknown keys check ---
109
- KNOWN_KEYS="workflow phase design_doc plan build_mode verify_mode verify_result verified_at archived"
111
+ KNOWN_KEYS="workflow phase design_doc plan build_mode isolation verify_mode verify_result verified_at archived"
110
112
  while IFS=: read -r key _; do
111
113
  key="${key// /}"
112
114
  [ -z "$key" ] && continue