opencode-goopspec 0.1.3 → 0.1.4

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.
Files changed (53) hide show
  1. package/README.md +253 -331
  2. package/agents/goop-debugger.md +175 -172
  3. package/agents/goop-designer.md +232 -160
  4. package/agents/goop-executor.md +197 -127
  5. package/agents/goop-explorer.md +148 -150
  6. package/agents/goop-librarian.md +218 -164
  7. package/agents/goop-orchestrator.md +364 -338
  8. package/agents/goop-planner.md +331 -153
  9. package/agents/goop-researcher.md +198 -126
  10. package/agents/goop-tester.md +277 -202
  11. package/agents/goop-verifier.md +191 -201
  12. package/agents/goop-writer.md +241 -133
  13. package/agents/memory-distiller.md +228 -136
  14. package/commands/goop-accept.md +430 -36
  15. package/commands/goop-amend.md +13 -0
  16. package/commands/goop-complete.md +13 -0
  17. package/commands/goop-debug.md +13 -0
  18. package/commands/goop-discuss.md +419 -7
  19. package/commands/goop-execute.md +386 -37
  20. package/commands/goop-help.md +11 -0
  21. package/commands/goop-map-codebase.md +13 -0
  22. package/commands/goop-memory.md +11 -0
  23. package/commands/goop-milestone.md +13 -0
  24. package/commands/goop-pause.md +12 -0
  25. package/commands/goop-plan.md +320 -266
  26. package/commands/goop-quick.md +12 -0
  27. package/commands/goop-recall.md +11 -0
  28. package/commands/goop-remember.md +12 -0
  29. package/commands/goop-research.md +13 -0
  30. package/commands/goop-resume.md +12 -0
  31. package/commands/goop-setup.md +18 -8
  32. package/commands/goop-specify.md +315 -39
  33. package/commands/goop-status.md +276 -28
  34. package/dist/index.js +328 -15
  35. package/package.json +1 -1
  36. package/references/context-injection.md +307 -0
  37. package/references/discovery-interview.md +278 -0
  38. package/references/enforcement-system.md +213 -0
  39. package/references/handoff-protocol.md +290 -0
  40. package/references/model-profiles.md +1 -1
  41. package/references/phase-gates.md +360 -0
  42. package/references/plugin-architecture.md +212 -0
  43. package/references/response-format.md +41 -9
  44. package/references/subagent-protocol.md +83 -33
  45. package/references/visual-style.md +199 -0
  46. package/references/xml-response-schema.md +236 -0
  47. package/templates/blueprint.md +88 -41
  48. package/templates/chronicle.md +130 -16
  49. package/templates/handoff.md +140 -0
  50. package/templates/project.md +114 -0
  51. package/templates/requirements.md +121 -0
  52. package/templates/spec.md +85 -20
  53. package/templates/state.md +103 -0
@@ -2,14 +2,26 @@
2
2
 
3
3
  All GoopSpec subagents follow a standardized protocol for memory usage, planning file access, and communication with the orchestrator.
4
4
 
5
- ## Core Principle
5
+ ## Core Principles
6
6
 
7
7
  ```
8
- ╔════════════════════════════════════════════════════════════════╗
9
- SUBAGENTS ARE MEMORY-FIRST.
10
- Search before starting. Save during work. Persist after.
11
- Decisions and learnings flow through memory.
12
- ╚════════════════════════════════════════════════════════════════╝
8
+ +================================================================+
9
+ | SUBAGENTS ARE MEMORY-FIRST. |
10
+ | Search before starting. Save during work. Persist after. |
11
+ | Decisions and learnings flow through memory. |
12
+ +================================================================+
13
+
14
+ +================================================================+
15
+ | SUBAGENTS USE XML RESPONSE ENVELOPES. |
16
+ | Every response ends with a <goop_report> XML block. |
17
+ | See references/xml-response-schema.md for full format. |
18
+ +================================================================+
19
+
20
+ +================================================================+
21
+ | SUBAGENTS LOAD PROJECT CONTEXT. |
22
+ | Read PROJECT_KNOWLEDGE_BASE.md for conventions. |
23
+ | Align work with spec must-haves. |
24
+ +================================================================+
13
25
  ```
14
26
 
15
27
  ## The Memory-First Protocol
@@ -19,20 +31,26 @@ All GoopSpec subagents follow a standardized protocol for memory usage, planning
19
31
  Every subagent MUST:
20
32
 
21
33
  ```typescript
22
- // 1. Search for relevant past decisions
34
+ // 1. Read project state
35
+ Read(".goopspec/state.json")
36
+
37
+ // 2. Read project knowledge base
38
+ Read(".goopspec/PROJECT_KNOWLEDGE_BASE.md") // If exists
39
+
40
+ // 3. Search for relevant past decisions
23
41
  memory_search({
24
42
  query: "[task-specific query]",
25
43
  concepts: ["relevant", "concepts"],
26
44
  types: ["decision", "observation"]
27
45
  })
28
46
 
29
- // 2. Read the specification
47
+ // 4. Read the specification
30
48
  Read(".goopspec/SPEC.md")
31
49
 
32
- // 3. Read current state
50
+ // 5. Read current state
33
51
  Read(".goopspec/CHRONICLE.md")
34
52
 
35
- // 4. Read the task details
53
+ // 6. Read the task details
36
54
  Read(".goopspec/BLUEPRINT.md")
37
55
  ```
38
56
 
@@ -164,31 +182,55 @@ Research findings. Research agents:
164
182
 
165
183
  ## Communication with Orchestrator
166
184
 
167
- ### Response Format
168
-
169
- Subagents return structured results:
170
-
171
- ```typescript
172
- interface SubagentResponse {
173
- status: "complete" | "partial" | "blocked" | "failed";
174
- summary: string; // What was accomplished
175
- files_modified?: string[]; // Changed files
176
- files_created?: string[]; // New files
177
- commit?: string; // Commit hash if applicable
178
- notes?: string[]; // Observations for orchestrator
179
- blockers?: string[]; // If blocked/failed, why
180
- next_steps?: string[]; // Suggestions if incomplete
181
- }
185
+ ### XML Response Envelope (MANDATORY)
186
+
187
+ All subagent responses MUST end with an XML envelope. See `references/xml-response-schema.md` for the full specification.
188
+
189
+ **Basic structure:**
190
+
191
+ ```xml
192
+ <goop_report version="0.1.4">
193
+ <status>COMPLETE|PARTIAL|BLOCKED|CHECKPOINT</status>
194
+ <agent>goop-[type]</agent>
195
+ <task_name>Task description</task_name>
196
+
197
+ <state>
198
+ <phase>plan|specify|execute|accept</phase>
199
+ <spec_locked>true|false</spec_locked>
200
+ </state>
201
+
202
+ <summary>1-2 sentence summary</summary>
203
+
204
+ <artifacts>
205
+ <files>
206
+ <file path="path/to/file" action="created|modified">reason</file>
207
+ </files>
208
+ <commits>
209
+ <commit sha="abc123">type(scope): message</commit>
210
+ </commits>
211
+ </artifacts>
212
+
213
+ <memory>
214
+ <saved type="decision" importance="0.7">Memory title</saved>
215
+ </memory>
216
+
217
+ <handoff>
218
+ <ready>true|false</ready>
219
+ <next_action agent="goop-[type]">Next task description</next_action>
220
+ <suggest_new_session>true|false</suggest_new_session>
221
+ <next_command>/goop-[command]</next_command>
222
+ </handoff>
223
+ </goop_report>
182
224
  ```
183
225
 
184
226
  ### Status Meanings
185
227
 
186
228
  | Status | Meaning | Orchestrator Action |
187
229
  |--------|---------|---------------------|
188
- | `complete` | Task fully done | Move to next task |
189
- | `partial` | Some progress, more needed | Continue same task |
190
- | `blocked` | Cannot proceed | Assess and unblock |
191
- | `failed` | Task cannot be done | Apply deviation rules |
230
+ | `COMPLETE` | Task fully done | Move to next task |
231
+ | `PARTIAL` | Some progress, more needed | Continue same task |
232
+ | `BLOCKED` | Cannot proceed | Assess blocker, may need user |
233
+ | `CHECKPOINT` | Natural stopping point | Generate handoff, suggest new session |
192
234
 
193
235
  ### Raising Issues
194
236
 
@@ -379,15 +421,23 @@ memory_save({
379
421
 
380
422
  Every subagent execution:
381
423
 
424
+ - [ ] Read state.json for current phase
425
+ - [ ] Read PROJECT_KNOWLEDGE_BASE.md for conventions
382
426
  - [ ] Searched memory for relevant context
383
427
  - [ ] Read SPEC.md for requirements
384
428
  - [ ] Read CHRONICLE.md for current state
385
429
  - [ ] Read BLUEPRINT.md for task details
430
+ - [ ] Aligned work with spec must-haves
386
431
  - [ ] Updated CHRONICLE.md with progress
387
432
  - [ ] Persisted learnings to memory
388
- - [ ] Returned structured response with:
389
- - [ ] Clear status
433
+ - [ ] Returned XML response envelope with:
434
+ - [ ] Status (COMPLETE/PARTIAL/BLOCKED/CHECKPOINT)
390
435
  - [ ] Summary of work
391
- - [ ] Files modified
436
+ - [ ] Files modified with artifacts section
392
437
  - [ ] Commit hash (if applicable)
393
- - [ ] Any notes/blockers
438
+ - [ ] Memory persisted section
439
+ - [ ] Handoff with next_action and suggest_new_session
440
+
441
+ ---
442
+
443
+ *Subagent Protocol v0.1.4*
@@ -0,0 +1,199 @@
1
+ # GoopSpec Visual Style Guide
2
+
3
+ A distinctive, minimal visual language for GoopSpec messages.
4
+
5
+ ## Brand Identity
6
+
7
+ **Primary Icon:** 🔮 (Crystal Ball - represents foresight, planning, specification)
8
+
9
+ **Philosophy:** Clean, minimal, precise. GoopSpec is about careful planning and clear contracts - the visual style should feel refined without being cluttered.
10
+
11
+ ## Header Styles
12
+
13
+ ### Primary Phase Header
14
+ ```
15
+ ## 🔮 GoopSpec · [Phase/Context]
16
+
17
+ [Content here]
18
+
19
+ ---
20
+ ```
21
+
22
+ ### Success Header
23
+ ```
24
+ ## 🔮 GoopSpec · Phase Complete
25
+
26
+ ✨ [Success message]
27
+
28
+ ---
29
+ ```
30
+
31
+ ### Warning/Blocked Header
32
+ ```
33
+ ## 🔮 GoopSpec · Gate Blocked
34
+
35
+ ⚠️ [Warning message]
36
+
37
+ → Run: `/goop-[command]`
38
+
39
+ ---
40
+ ```
41
+
42
+ ## Phase Icons
43
+
44
+ | Phase | Icon | Usage |
45
+ |-------|------|-------|
46
+ | Discuss | 💬 | Discovery interview |
47
+ | Plan | 📋 | Blueprint creation |
48
+ | Research | 🔬 | Investigation |
49
+ | Specify | 📜 | Locking the contract |
50
+ | Execute | ⚡ | Wave-based implementation |
51
+ | Accept | ✅ | Verification & approval |
52
+ | Idle | 🔮 | Ready state |
53
+
54
+ ## Status Indicators
55
+
56
+ | Status | Icon | Meaning |
57
+ |--------|------|---------|
58
+ | Complete | ✓ | Task/phase done |
59
+ | Pending | ⏳ | In progress or waiting |
60
+ | Blocked | ✗ | Cannot proceed |
61
+ | Locked | 🔒 | Spec is locked |
62
+ | Unlocked | 🔓 | Spec can be modified |
63
+ | Warning | ⚠️ | Attention needed |
64
+ | Success | ✨ | Milestone achieved |
65
+ | Error | ❌ | Something failed |
66
+
67
+ ## Message Templates
68
+
69
+ ### Phase Start
70
+ ```markdown
71
+ ## 🔮 GoopSpec · [Phase Name]
72
+
73
+ [Phase description and context]
74
+
75
+ ---
76
+ ```
77
+
78
+ ### Gate Check - Pass
79
+ ```markdown
80
+ ## 🔮 GoopSpec · Gate Check
81
+
82
+ ✓ Gate passed. Proceeding...
83
+
84
+ ---
85
+ ```
86
+
87
+ ### Gate Check - Blocked
88
+ ```markdown
89
+ ## 🔮 GoopSpec · Gate Blocked
90
+
91
+ ✗ [Reason for block]
92
+
93
+ → Run: `/goop-[command]`
94
+
95
+ ---
96
+ ```
97
+
98
+ ### Progress Update
99
+ ```markdown
100
+ ## 🔮 GoopSpec · Progress
101
+
102
+ **Phase:** ⚡ Execute | **Wave:** 2/3 | **Task:** 4/6
103
+
104
+ ### Completed
105
+ - ✓ Task 2.1: [description]
106
+ - ✓ Task 2.2: [description]
107
+
108
+ ### In Progress
109
+ - ⏳ Task 2.3: [description]
110
+
111
+ ---
112
+ ```
113
+
114
+ ### Phase Complete
115
+ ```markdown
116
+ ## 🔮 GoopSpec · Phase Complete
117
+
118
+ ✨ [Phase Name] finished successfully
119
+
120
+ ### Summary
121
+ [Summary content]
122
+
123
+ ### Next Step
124
+ → `/goop-[next-command]`
125
+
126
+ ---
127
+ ```
128
+
129
+ ### Decision Required
130
+ ```markdown
131
+ ## 🔮 GoopSpec · Decision Required
132
+
133
+ ⚠️ [Context about the decision]
134
+
135
+ **Options:**
136
+ - **A)** [Option A description]
137
+ - **B)** [Option B description]
138
+
139
+ Which option?
140
+
141
+ ---
142
+ ```
143
+
144
+ ### Handoff
145
+ ```markdown
146
+ ## 🔮 GoopSpec · Session Handoff
147
+
148
+ ### Accomplished
149
+ - ✓ [Item 1]
150
+ - ✓ [Item 2]
151
+
152
+ ### Current State
153
+ **Phase:** [phase] | **Spec:** [locked/unlocked] | **Wave:** [N/M]
154
+
155
+ ### To Continue
156
+ Start a new session, then run: `/goop-[command]`
157
+
158
+ ---
159
+ ```
160
+
161
+ ### Status Display
162
+ ```markdown
163
+ ## 🔮 GoopSpec · Status
164
+
165
+ **Project:** [name]
166
+
167
+ | Gate | Status |
168
+ |------|--------|
169
+ | Interview | ✓ Complete |
170
+ | Spec Lock | 🔒 Locked |
171
+ | Acceptance | ⏳ Pending |
172
+
173
+ ### Next Step
174
+ → `/goop-[command]`
175
+
176
+ ---
177
+ ```
178
+
179
+ ## Comparison: GoopSpec vs GSD
180
+
181
+ | Element | GSD (Industrial) | GoopSpec (Minimal) |
182
+ |---------|------------------|-------------------|
183
+ | Primary icon | None | 🔮 |
184
+ | Headers | `+====+ GOOPSPEC > PHASE` | `## 🔮 GoopSpec · Phase` |
185
+ | Separators | `+----+` boxes | `---` dividers |
186
+ | Feel | Industrial, rigid | Clean, minimal |
187
+
188
+ ## Usage Guidelines
189
+
190
+ 1. **Consistency:** Always use `## 🔮 GoopSpec · [Context]` for main headers
191
+ 2. **Dividers:** Use `---` to separate sections
192
+ 3. **Breathing room:** Include blank lines between sections
193
+ 4. **Bullet indicators:** Use ✓ ✗ ⏳ for status
194
+ 5. **Actions:** Use → for "next step" callouts
195
+ 6. **Phase awareness:** Use phase-specific icons (💬 📋 🔬 📜 ⚡ ✅) when relevant
196
+
197
+ ---
198
+
199
+ *GoopSpec Visual Style v0.2.0*
@@ -0,0 +1,236 @@
1
+ # XML Response Schema
2
+
3
+ All GoopSpec agents use a standardized XML envelope for machine-parseable handoffs while keeping content human-readable in Markdown.
4
+
5
+ ## Why XML + Markdown Hybrid?
6
+
7
+ 1. **Machine Parsing**: Orchestrator can reliably extract status, next actions, and state
8
+ 2. **Human Readability**: Markdown inside XML remains easy to read
9
+ 3. **Structured Handoffs**: Clean session boundaries with explicit next steps
10
+ 4. **State Continuity**: Exact phase/wave/task tracking across sessions
11
+
12
+ ## Response Envelope Structure
13
+
14
+ Every agent response MUST include this XML block at the END of their response:
15
+
16
+ ```xml
17
+ <goop_report version="0.1.4">
18
+ <status>COMPLETE|PARTIAL|BLOCKED|CHECKPOINT</status>
19
+ <agent>goop-[type]</agent>
20
+ <task_id>W[wave].T[task]</task_id>
21
+ <task_name>Brief task description</task_name>
22
+
23
+ <state>
24
+ <phase>plan|specify|execute|accept|research</phase>
25
+ <wave current="N" total="M"/>
26
+ <task current="X" total="Y"/>
27
+ <spec_locked>true|false</spec_locked>
28
+ <interview_complete>true|false</interview_complete>
29
+ </state>
30
+
31
+ <summary>1-2 sentence summary of what was accomplished</summary>
32
+
33
+ <artifacts>
34
+ <files>
35
+ <file path="path/to/file" action="created|modified|deleted">
36
+ Brief description of change
37
+ </file>
38
+ </files>
39
+ <commits>
40
+ <commit sha="abc1234">type(scope): commit message</commit>
41
+ </commits>
42
+ </artifacts>
43
+
44
+ <memory>
45
+ <saved type="decision|observation|note" importance="0.8">
46
+ Title of memory saved
47
+ </saved>
48
+ </memory>
49
+
50
+ <verification>
51
+ <check name="tests" passed="true|false">bun test - 42 passed</check>
52
+ <check name="typecheck" passed="true|false">No errors</check>
53
+ <check name="manual" passed="true|false">Description</check>
54
+ </verification>
55
+
56
+ <handoff>
57
+ <ready>true|false</ready>
58
+ <next_action agent="goop-[type]">
59
+ Exact description of next task
60
+ </next_action>
61
+ <files_to_read>
62
+ <file>.goopspec/SPEC.md</file>
63
+ <file>.goopspec/BLUEPRINT.md</file>
64
+ </files_to_read>
65
+ <blockers>None | Description of blocker</blockers>
66
+ <suggest_new_session>true|false</suggest_new_session>
67
+ <next_command>/goop-[command]</next_command>
68
+ </handoff>
69
+ </goop_report>
70
+ ```
71
+
72
+ ## Status Values
73
+
74
+ | Status | When to Use | Orchestrator Action |
75
+ |--------|-------------|---------------------|
76
+ | `COMPLETE` | Task fully finished, verified | Move to next task |
77
+ | `PARTIAL` | Some progress, need to continue | Resume same task |
78
+ | `BLOCKED` | Cannot proceed without input | Assess blocker, may need user |
79
+ | `CHECKPOINT` | Natural stopping point | Save state, may suggest new session |
80
+
81
+ ## Required vs Optional Elements
82
+
83
+ ### Always Required
84
+ - `<status>` - Current completion status
85
+ - `<agent>` - Which agent is responding
86
+ - `<state>` - Current workflow state
87
+ - `<summary>` - What was accomplished
88
+ - `<handoff>` - Next steps
89
+
90
+ ### Required When Applicable
91
+ - `<artifacts>` - When files changed or commits made
92
+ - `<memory>` - When memory was persisted
93
+ - `<verification>` - When verification commands were run
94
+
95
+ ### Optional
96
+ - `<task_id>` - May not exist in research/explore phases
97
+ - `<blockers>` - Only when blocked
98
+
99
+ ## Examples by Agent Type
100
+
101
+ ### Executor Response
102
+ ```xml
103
+ <goop_report version="0.1.4">
104
+ <status>COMPLETE</status>
105
+ <agent>goop-executor</agent>
106
+ <task_id>W2.T3</task_id>
107
+ <task_name>Implement user authentication</task_name>
108
+
109
+ <state>
110
+ <phase>execute</phase>
111
+ <wave current="2" total="3"/>
112
+ <task current="3" total="4"/>
113
+ <spec_locked>true</spec_locked>
114
+ </state>
115
+
116
+ <summary>Implemented JWT-based authentication with login/logout endpoints and middleware.</summary>
117
+
118
+ <artifacts>
119
+ <files>
120
+ <file path="src/auth/service.ts" action="created">Auth service with JWT generation</file>
121
+ <file path="src/auth/middleware.ts" action="created">Auth middleware for protected routes</file>
122
+ <file path="src/auth/types.ts" action="created">Auth type definitions</file>
123
+ </files>
124
+ <commits>
125
+ <commit sha="a1b2c3d">feat(auth): implement JWT authentication service</commit>
126
+ </commits>
127
+ </artifacts>
128
+
129
+ <memory>
130
+ <saved type="decision" importance="0.8">Used jose library for JWT over jsonwebtoken</saved>
131
+ </memory>
132
+
133
+ <verification>
134
+ <check name="tests" passed="true">bun test src/auth/ - 12 passed</check>
135
+ <check name="typecheck" passed="true">No errors</check>
136
+ </verification>
137
+
138
+ <handoff>
139
+ <ready>true</ready>
140
+ <next_action agent="goop-executor">W2.T4: Implement session management</next_action>
141
+ <files_to_read>
142
+ <file>src/auth/service.ts</file>
143
+ </files_to_read>
144
+ <blockers>None</blockers>
145
+ <suggest_new_session>false</suggest_new_session>
146
+ </handoff>
147
+ </goop_report>
148
+ ```
149
+
150
+ ### Planner Response
151
+ ```xml
152
+ <goop_report version="0.1.4">
153
+ <status>COMPLETE</status>
154
+ <agent>goop-planner</agent>
155
+ <task_name>Create execution blueprint</task_name>
156
+
157
+ <state>
158
+ <phase>plan</phase>
159
+ <spec_locked>false</spec_locked>
160
+ <interview_complete>true</interview_complete>
161
+ </state>
162
+
163
+ <summary>Created 3-wave blueprint with 8 tasks covering all must-haves from SPEC.md.</summary>
164
+
165
+ <artifacts>
166
+ <files>
167
+ <file path=".goopspec/BLUEPRINT.md" action="created">Execution blueprint</file>
168
+ <file path=".goopspec/SPEC.md" action="modified">Added traceability mapping</file>
169
+ </files>
170
+ </artifacts>
171
+
172
+ <memory>
173
+ <saved type="decision" importance="0.7">Wave 1 foundation parallel, Wave 2-3 sequential</saved>
174
+ </memory>
175
+
176
+ <handoff>
177
+ <ready>true</ready>
178
+ <next_action agent="orchestrator">Review blueprint with user, then /goop-specify</next_action>
179
+ <files_to_read>
180
+ <file>.goopspec/BLUEPRINT.md</file>
181
+ </files_to_read>
182
+ <blockers>None</blockers>
183
+ <suggest_new_session>true</suggest_new_session>
184
+ <next_command>/goop-specify</next_command>
185
+ </handoff>
186
+ </goop_report>
187
+ ```
188
+
189
+ ### Blocked Response
190
+ ```xml
191
+ <goop_report version="0.1.4">
192
+ <status>BLOCKED</status>
193
+ <agent>goop-executor</agent>
194
+ <task_id>W2.T2</task_id>
195
+ <task_name>Implement payment integration</task_name>
196
+
197
+ <state>
198
+ <phase>execute</phase>
199
+ <wave current="2" total="3"/>
200
+ <task current="2" total="4"/>
201
+ <spec_locked>true</spec_locked>
202
+ </state>
203
+
204
+ <summary>Cannot proceed - architectural decision required about payment provider.</summary>
205
+
206
+ <handoff>
207
+ <ready>false</ready>
208
+ <blockers>
209
+ RULE 4 DEVIATION: Need user decision on payment provider.
210
+ Options: A) Stripe (recommended, better docs), B) PayPal (wider reach)
211
+ </blockers>
212
+ <suggest_new_session>false</suggest_new_session>
213
+ </handoff>
214
+ </goop_report>
215
+ ```
216
+
217
+ ## Parsing Guidelines for Orchestrator
218
+
219
+ 1. **Extract status first** - Determines routing logic
220
+ 2. **Check blockers** - If blocked, present to user
221
+ 3. **Update CHRONICLE.md** - From artifacts and state
222
+ 4. **Route next action** - Based on handoff.next_action
223
+ 5. **Session boundary** - If suggest_new_session=true, generate HANDOFF.md
224
+
225
+ ## Validation Rules
226
+
227
+ - Status must be one of: COMPLETE, PARTIAL, BLOCKED, CHECKPOINT
228
+ - Agent must match the subagent_type that was invoked
229
+ - State.phase must match current workflow phase
230
+ - If COMPLETE, verification should have at least one check
231
+ - If BLOCKED, blockers must be non-empty
232
+ - handoff.next_action must specify which agent continues
233
+
234
+ ---
235
+
236
+ *GoopSpec XML Response Schema v0.1.4*