@cluesmith/codev 2.0.0-rc.2 → 2.0.0-rc.24

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 (149) hide show
  1. package/bin/porch.js +6 -35
  2. package/dist/agent-farm/cli.d.ts.map +1 -1
  3. package/dist/agent-farm/cli.js +2 -14
  4. package/dist/agent-farm/cli.js.map +1 -1
  5. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  6. package/dist/agent-farm/commands/cleanup.js +29 -2
  7. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  8. package/dist/agent-farm/commands/kickoff.d.ts +1 -0
  9. package/dist/agent-farm/commands/kickoff.d.ts.map +1 -1
  10. package/dist/agent-farm/commands/kickoff.js +151 -77
  11. package/dist/agent-farm/commands/kickoff.js.map +1 -1
  12. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  13. package/dist/agent-farm/commands/spawn.js +30 -54
  14. package/dist/agent-farm/commands/spawn.js.map +1 -1
  15. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  16. package/dist/agent-farm/commands/start.js +8 -50
  17. package/dist/agent-farm/commands/start.js.map +1 -1
  18. package/dist/agent-farm/servers/dashboard-server.js +17 -16
  19. package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
  20. package/dist/agent-farm/state.d.ts +0 -10
  21. package/dist/agent-farm/state.d.ts.map +1 -1
  22. package/dist/agent-farm/state.js +0 -24
  23. package/dist/agent-farm/state.js.map +1 -1
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +5 -17
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/adopt.d.ts.map +1 -1
  28. package/dist/commands/adopt.js +17 -1
  29. package/dist/commands/adopt.js.map +1 -1
  30. package/dist/commands/consult/index.d.ts.map +1 -1
  31. package/dist/commands/consult/index.js +83 -2
  32. package/dist/commands/consult/index.js.map +1 -1
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +17 -1
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/porch/checks.d.ts +16 -29
  37. package/dist/commands/porch/checks.d.ts.map +1 -1
  38. package/dist/commands/porch/checks.js +90 -144
  39. package/dist/commands/porch/checks.js.map +1 -1
  40. package/dist/commands/porch/claude.d.ts +29 -0
  41. package/dist/commands/porch/claude.d.ts.map +1 -0
  42. package/dist/commands/porch/claude.js +80 -0
  43. package/dist/commands/porch/claude.js.map +1 -0
  44. package/dist/commands/porch/index.d.ts +21 -43
  45. package/dist/commands/porch/index.d.ts.map +1 -1
  46. package/dist/commands/porch/index.js +468 -753
  47. package/dist/commands/porch/index.js.map +1 -1
  48. package/dist/commands/porch/plan.d.ts +60 -0
  49. package/dist/commands/porch/plan.d.ts.map +1 -0
  50. package/dist/commands/porch/plan.js +162 -0
  51. package/dist/commands/porch/plan.js.map +1 -0
  52. package/dist/commands/porch/prompts.d.ts +19 -0
  53. package/dist/commands/porch/prompts.d.ts.map +1 -0
  54. package/dist/commands/porch/prompts.js +270 -0
  55. package/dist/commands/porch/prompts.js.map +1 -0
  56. package/dist/commands/porch/protocol.d.ts +59 -0
  57. package/dist/commands/porch/protocol.d.ts.map +1 -0
  58. package/dist/commands/porch/protocol.js +260 -0
  59. package/dist/commands/porch/protocol.js.map +1 -0
  60. package/dist/commands/porch/repl.d.ts +33 -0
  61. package/dist/commands/porch/repl.d.ts.map +1 -0
  62. package/dist/commands/porch/repl.js +206 -0
  63. package/dist/commands/porch/repl.js.map +1 -0
  64. package/dist/commands/porch/run.d.ts +23 -0
  65. package/dist/commands/porch/run.d.ts.map +1 -0
  66. package/dist/commands/porch/run.js +743 -0
  67. package/dist/commands/porch/run.js.map +1 -0
  68. package/dist/commands/porch/signals.d.ts +38 -0
  69. package/dist/commands/porch/signals.d.ts.map +1 -0
  70. package/dist/commands/porch/signals.js +81 -0
  71. package/dist/commands/porch/signals.js.map +1 -0
  72. package/dist/commands/porch/state.d.ts +23 -112
  73. package/dist/commands/porch/state.d.ts.map +1 -1
  74. package/dist/commands/porch/state.js +119 -680
  75. package/dist/commands/porch/state.js.map +1 -1
  76. package/dist/commands/porch/types.d.ts +69 -173
  77. package/dist/commands/porch/types.d.ts.map +1 -1
  78. package/dist/commands/porch/types.js +2 -1
  79. package/dist/commands/porch/types.js.map +1 -1
  80. package/dist/commands/update.d.ts.map +1 -1
  81. package/dist/commands/update.js +12 -0
  82. package/dist/commands/update.js.map +1 -1
  83. package/dist/lib/scaffold.d.ts +24 -0
  84. package/dist/lib/scaffold.d.ts.map +1 -1
  85. package/dist/lib/scaffold.js +78 -0
  86. package/dist/lib/scaffold.js.map +1 -1
  87. package/package.json +7 -2
  88. package/skeleton/protocols/bugfix/protocol.json +1 -1
  89. package/skeleton/protocols/spider/prompts/implement.md +201 -0
  90. package/skeleton/protocols/spider/prompts/plan.md +214 -0
  91. package/skeleton/protocols/spider/prompts/review.md +217 -0
  92. package/skeleton/protocols/spider/prompts/specify.md +192 -0
  93. package/skeleton/protocols/spider/protocol.json +90 -148
  94. package/skeleton/protocols/spider/protocol.md +26 -16
  95. package/skeleton/protocols/spider/templates/plan.md +14 -0
  96. package/skeleton/protocols/tick/protocol.json +1 -1
  97. package/skeleton/roles/architect.md +140 -319
  98. package/skeleton/roles/builder.md +135 -213
  99. package/templates/dashboard/index.html +0 -27
  100. package/templates/dashboard/js/utils.js +0 -86
  101. package/dist/agent-farm/commands/rename.d.ts +0 -13
  102. package/dist/agent-farm/commands/rename.d.ts.map +0 -1
  103. package/dist/agent-farm/commands/rename.js +0 -33
  104. package/dist/agent-farm/commands/rename.js.map +0 -1
  105. package/dist/commands/pcheck/cache.d.ts +0 -48
  106. package/dist/commands/pcheck/cache.d.ts.map +0 -1
  107. package/dist/commands/pcheck/cache.js +0 -170
  108. package/dist/commands/pcheck/cache.js.map +0 -1
  109. package/dist/commands/pcheck/evaluator.d.ts +0 -15
  110. package/dist/commands/pcheck/evaluator.d.ts.map +0 -1
  111. package/dist/commands/pcheck/evaluator.js +0 -246
  112. package/dist/commands/pcheck/evaluator.js.map +0 -1
  113. package/dist/commands/pcheck/index.d.ts +0 -12
  114. package/dist/commands/pcheck/index.d.ts.map +0 -1
  115. package/dist/commands/pcheck/index.js +0 -249
  116. package/dist/commands/pcheck/index.js.map +0 -1
  117. package/dist/commands/pcheck/parser.d.ts +0 -39
  118. package/dist/commands/pcheck/parser.d.ts.map +0 -1
  119. package/dist/commands/pcheck/parser.js +0 -155
  120. package/dist/commands/pcheck/parser.js.map +0 -1
  121. package/dist/commands/pcheck/types.d.ts +0 -82
  122. package/dist/commands/pcheck/types.d.ts.map +0 -1
  123. package/dist/commands/pcheck/types.js +0 -5
  124. package/dist/commands/pcheck/types.js.map +0 -1
  125. package/dist/commands/porch/consultation.d.ts +0 -56
  126. package/dist/commands/porch/consultation.d.ts.map +0 -1
  127. package/dist/commands/porch/consultation.js +0 -330
  128. package/dist/commands/porch/consultation.js.map +0 -1
  129. package/dist/commands/porch/notifications.d.ts +0 -99
  130. package/dist/commands/porch/notifications.d.ts.map +0 -1
  131. package/dist/commands/porch/notifications.js +0 -223
  132. package/dist/commands/porch/notifications.js.map +0 -1
  133. package/dist/commands/porch/plan-parser.d.ts +0 -38
  134. package/dist/commands/porch/plan-parser.d.ts.map +0 -1
  135. package/dist/commands/porch/plan-parser.js +0 -166
  136. package/dist/commands/porch/plan-parser.js.map +0 -1
  137. package/dist/commands/porch/protocol-loader.d.ts +0 -46
  138. package/dist/commands/porch/protocol-loader.d.ts.map +0 -1
  139. package/dist/commands/porch/protocol-loader.js +0 -249
  140. package/dist/commands/porch/protocol-loader.js.map +0 -1
  141. package/dist/commands/porch/signal-parser.d.ts +0 -88
  142. package/dist/commands/porch/signal-parser.d.ts.map +0 -1
  143. package/dist/commands/porch/signal-parser.js +0 -148
  144. package/dist/commands/porch/signal-parser.js.map +0 -1
  145. package/skeleton/porch/protocols/bugfix.json +0 -85
  146. package/skeleton/porch/protocols/spider.json +0 -135
  147. package/skeleton/porch/protocols/tick.json +0 -76
  148. package/templates/dashboard/css/activity.css +0 -151
  149. package/templates/dashboard/js/activity.js +0 -112
@@ -1,147 +1,91 @@
1
1
  {
2
2
  "$schema": "../../protocol-schema.json",
3
3
  "name": "spider",
4
- "version": "1.0.0",
5
- "description": "Specification-driven development with multi-agent consultation",
4
+ "alias": "spir",
5
+ "version": "2.1.0",
6
+ "description": "SPIR: Specify → Plan → Implement → Review with build-verify cycles",
6
7
  "phases": [
7
8
  {
8
9
  "id": "specify",
9
10
  "name": "Specify",
10
- "description": "Collaborative design exploration and specification",
11
- "type": "once",
12
- "steps": [
13
- "clarifying_questions",
14
- "problem_analysis",
15
- "solution_exploration",
16
- "open_questions",
17
- "success_criteria",
18
- "spec_draft",
19
- "consultation_1",
20
- "human_review",
21
- "consultation_2",
22
- "spec_final"
23
- ],
24
- "consultation": {
25
- "on": "review",
26
- "models": ["gemini", "codex", "claude"],
11
+ "description": "Write specification with 3-way review",
12
+ "type": "build_verify",
13
+ "build": {
14
+ "prompt": "specify.md",
15
+ "artifact": "codev/specs/${PROJECT_ID}-*.md"
16
+ },
17
+ "verify": {
27
18
  "type": "spec-review",
28
- "parallel": true,
29
- "max_rounds": 3
19
+ "models": ["gemini", "codex", "claude"],
20
+ "parallel": true
30
21
  },
31
- "gate": {
32
- "name": "spec-approval",
33
- "description": "Human approves specification before planning",
34
- "requires": ["spec_final", "consultation_2"],
35
- "next": "plan"
36
- }
22
+ "max_iterations": 7,
23
+ "on_complete": {
24
+ "commit": true,
25
+ "push": true
26
+ },
27
+ "gate": "spec-approval",
28
+ "next": "plan"
37
29
  },
38
30
  {
39
31
  "id": "plan",
40
32
  "name": "Plan",
41
- "description": "Implementation planning with phased breakdown",
42
- "type": "once",
43
- "steps": [
44
- "analyze_spec",
45
- "identify_phases",
46
- "define_steps",
47
- "plan_draft",
48
- "consultation",
49
- "human_review",
50
- "plan_final"
51
- ],
52
- "consultation": {
53
- "on": "review",
54
- "models": ["gemini", "codex", "claude"],
33
+ "description": "Write implementation plan with 3-way review",
34
+ "type": "build_verify",
35
+ "build": {
36
+ "prompt": "plan.md",
37
+ "artifact": "codev/plans/${PROJECT_ID}-*.md"
38
+ },
39
+ "verify": {
55
40
  "type": "plan-review",
56
- "parallel": true,
57
- "max_rounds": 2
41
+ "models": ["gemini", "codex", "claude"],
42
+ "parallel": true
58
43
  },
59
- "gate": {
60
- "name": "plan-approval",
61
- "description": "Human approves plan before implementation",
62
- "requires": ["plan_final", "consultation"],
63
- "next": "implement"
64
- }
44
+ "max_iterations": 7,
45
+ "on_complete": {
46
+ "commit": true,
47
+ "push": true
48
+ },
49
+ "checks": {
50
+ "plan_exists": "test -f codev/plans/${PROJECT_ID}-*.md",
51
+ "has_phases_json": "grep -q '\"phases\":' codev/plans/${PROJECT_ID}-*.md",
52
+ "min_two_phases": "grep -o '\"id\": *\"[^\"]*\"' codev/plans/${PROJECT_ID}-*.md | wc -l | awk '$1 >= 2 {exit 0} {exit 1}'"
53
+ },
54
+ "gate": "plan-approval",
55
+ "next": "implement"
65
56
  },
66
57
  {
67
58
  "id": "implement",
68
59
  "name": "Implement",
69
- "description": "Code implementation following the plan",
60
+ "description": "Implement code with 3-way review per plan phase",
70
61
  "type": "per_plan_phase",
71
- "steps": [
72
- "read_phase",
73
- "implement_code",
74
- "self_review",
75
- "commit"
76
- ],
62
+ "build": {
63
+ "prompt": "implement.md",
64
+ "artifact": "src/**/*.{ts,tsx,js,jsx}"
65
+ },
66
+ "verify": {
67
+ "type": "impl-review",
68
+ "models": ["gemini", "codex", "claude"],
69
+ "parallel": true
70
+ },
71
+ "max_iterations": 7,
72
+ "on_complete": {
73
+ "commit": true,
74
+ "push": true
75
+ },
77
76
  "checks": {
78
77
  "build": {
79
78
  "command": "npm run build",
80
79
  "on_fail": "retry",
81
80
  "max_retries": 2
82
81
  },
83
- "typecheck": {
84
- "command": "npm run typecheck",
85
- "on_fail": "retry",
86
- "max_retries": 2
87
- }
88
- },
89
- "transition": {
90
- "on_complete": "defend",
91
- "on_fail": "implement"
92
- }
93
- },
94
- {
95
- "id": "defend",
96
- "name": "Defend",
97
- "description": "Testing and verification",
98
- "type": "per_plan_phase",
99
- "steps": [
100
- "write_tests",
101
- "run_tests",
102
- "fix_failures",
103
- "commit"
104
- ],
105
- "checks": {
106
82
  "tests": {
107
- "command": "npm test",
108
- "on_fail": "implement",
109
- "max_retries": 1
110
- },
111
- "lint": {
112
- "command": "npm run lint",
83
+ "command": "npm test -- --exclude='**/e2e/**'",
84
+ "description": "Unit tests only - e2e tests run in review phase",
113
85
  "on_fail": "retry",
114
- "max_retries": 1
86
+ "max_retries": 2
115
87
  }
116
88
  },
117
- "consultation": {
118
- "on": "complete",
119
- "models": ["gemini", "codex", "claude"],
120
- "type": "impl-review",
121
- "parallel": true,
122
- "max_rounds": 2
123
- },
124
- "transition": {
125
- "on_complete": "evaluate",
126
- "on_fail": "implement"
127
- }
128
- },
129
- {
130
- "id": "evaluate",
131
- "name": "Evaluate",
132
- "description": "Verify implementation against spec",
133
- "type": "per_plan_phase",
134
- "steps": [
135
- "check_spec_compliance",
136
- "check_success_criteria",
137
- "document_deviations"
138
- ],
139
- "gate": {
140
- "name": "phase-complete",
141
- "description": "Plan phase implementation is verified",
142
- "requires": ["all_checks_pass", "spec_compliance"],
143
- "next": "implement"
144
- },
145
89
  "transition": {
146
90
  "on_complete": "implement",
147
91
  "on_all_phases_complete": "review"
@@ -150,55 +94,53 @@
150
94
  {
151
95
  "id": "review",
152
96
  "name": "Review",
153
- "description": "Final review and lessons learned",
154
- "type": "once",
155
- "steps": [
156
- "create_review_document",
157
- "document_lessons",
158
- "final_consultation",
159
- "create_pr"
160
- ],
161
- "consultation": {
162
- "on": "review",
163
- "models": ["gemini", "codex", "claude"],
97
+ "description": "Final review and PR with 3-way review",
98
+ "type": "build_verify",
99
+ "build": {
100
+ "prompt": "review.md",
101
+ "artifact": "codev/reviews/${PROJECT_ID}-*.md"
102
+ },
103
+ "verify": {
164
104
  "type": "pr-ready",
165
- "parallel": true,
166
- "max_rounds": 1
105
+ "models": ["gemini", "codex", "claude"],
106
+ "parallel": true
167
107
  },
168
- "gate": {
169
- "name": "pr-ready",
170
- "description": "Implementation ready for PR",
171
- "requires": ["review_complete", "all_tests_pass", "consultation"],
172
- "next": null
173
- }
108
+ "max_iterations": 7,
109
+ "on_complete": {
110
+ "commit": true,
111
+ "push": true
112
+ },
113
+ "checks": {
114
+ "e2e_tests": {
115
+ "command": "npm run test:e2e 2>&1 || echo 'e2e tests skipped (not configured)'",
116
+ "description": "Full e2e test suite - only runs in review phase",
117
+ "optional": true
118
+ }
119
+ },
120
+ "gate": "pr-ready",
121
+ "next": null
174
122
  }
175
123
  ],
176
124
  "signals": {
177
125
  "PHASE_COMPLETE": {
178
- "description": "Signal current phase is complete",
179
- "transitions_to": "next_phase"
126
+ "description": "Signal current build phase is complete",
127
+ "transitions_to": "verify"
180
128
  },
181
129
  "BLOCKED": {
182
130
  "description": "Signal implementation is blocked",
183
131
  "requires": "reason"
184
- },
185
- "REVISION_NEEDED": {
186
- "description": "Signal changes requested",
187
- "transitions_to": "current_phase"
188
- },
189
- "APPROVED": {
190
- "description": "Signal gate approval received"
191
132
  }
192
133
  },
134
+ "phase_completion": {
135
+ "build_succeeds": "npm run build 2>&1",
136
+ "tests_pass": "npm test 2>&1",
137
+ "commit_has_code": "git log -1 --name-only --pretty=format: | grep -qE '\\.(ts|tsx|js|jsx|py|go|rs)$'"
138
+ },
193
139
  "defaults": {
194
- "consultation": {
195
- "enabled": true,
140
+ "max_iterations": 7,
141
+ "verify": {
196
142
  "models": ["gemini", "codex", "claude"],
197
143
  "parallel": true
198
- },
199
- "checks": {
200
- "build": "npm run build",
201
- "test": "npm test"
202
144
  }
203
145
  }
204
146
  }
@@ -1,4 +1,10 @@
1
- # SPIDER Protocol
1
+ # SPIR Protocol (formerly SPIDER)
2
+
3
+ > **Also known as**: SPIDER (legacy name)
4
+ >
5
+ > **SPIR** = **S**pecify → **P**lan → **I**mplement → **R**eview
6
+ >
7
+ > Each phase has one build-verify cycle with 3-way consultation.
2
8
 
3
9
  > **Quick Reference**: See `codev/resources/workflow-reference.md` for stage diagrams and common commands.
4
10
 
@@ -40,13 +46,21 @@ The user can specify different agents by saying: "use SPIDER with consultation f
40
46
  - **Review**: After review document
41
47
 
42
48
  ## Overview
43
- SPIDER is a structured development protocol that emphasizes specification-driven development with iterative implementation and continuous review. It builds upon the DAPPER methodology with a focus on context-first development and multi-agent collaboration.
49
+ SPIR is a structured development protocol that emphasizes specification-driven development with iterative implementation and continuous review. It builds upon the DAPPER methodology with a focus on context-first development and multi-agent collaboration.
50
+
51
+ **The SPIR Model**:
52
+ - **S - Specify**: Write specification with 3-way review → Gate: `spec-approval`
53
+ - **P - Plan**: Write implementation plan with 3-way review → Gate: `plan-approval`
54
+ - **I - Implement**: Execute each plan phase with build-verify cycle (one cycle per phase)
55
+ - **R - Review**: Final review and PR preparation with 3-way review
56
+
57
+ Each phase follows a build-verify loop: build the artifact, then verify with 3-way consultation (Gemini, Codex, Claude).
44
58
 
45
59
  **Core Principle**: Each feature is tracked through exactly THREE documents - a specification, a plan, and a review with lessons learned - all sharing the same filename and sequential identifier.
46
60
 
47
- ## When to Use SPIDER
61
+ ## When to Use SPIR
48
62
 
49
- ### Use SPIDER for:
63
+ ### Use SPIR for:
50
64
  - New feature development
51
65
  - Architecture changes
52
66
  - Complex refactoring
@@ -54,7 +68,7 @@ SPIDER is a structured development protocol that emphasizes specification-driven
54
68
  - API design and implementation
55
69
  - Performance optimization initiatives
56
70
 
57
- ### Skip SPIDER for:
71
+ ### Skip SPIR for:
58
72
  - Simple bug fixes (< 10 lines)
59
73
  - Documentation updates
60
74
  - Configuration changes
@@ -224,25 +238,21 @@ Each phase should be:
224
238
  **Template**: `templates/plan.md`
225
239
  **Review Required**: Yes - Technical lead approval AFTER consultations
226
240
 
227
- ### (IDE) - Implementation Loop
228
-
229
- Execute for each phase in the plan. This is a strict cycle that must be completed in order.
241
+ ### I - Implement (Per Plan Phase)
230
242
 
231
- **⚠️ MANDATORY**: The I-D-E cycle MUST be completed for EACH PHASE, not just at the end of all phases. Skipping D (Defend) or E (Evaluate) for any phase is a PROTOCOL VIOLATION.
243
+ Execute for each phase in the plan. Each phase follows a build-verify cycle.
232
244
 
233
245
  **CRITICAL PRECONDITION**: Before starting any phase, verify the previous phase was committed to git. No phase can begin without the prior phase's commit.
234
246
 
235
- **Phase Completion Process**:
236
- 1. **Implement** - Build the code for this phase
237
- 2. **Defend** - Write comprehensive tests that guard functionality
238
- 3. **Evaluate** - Assess and discuss with user
247
+ **Build-Verify Cycle Per Phase**:
248
+ 1. **Build** - Implement code and tests for this phase
249
+ 2. **Verify** - 3-way consultation (Gemini, Codex, Claude)
250
+ 3. **Iterate** - Address feedback until verification passes
239
251
  4. **Commit** - Single atomic commit for the phase (MANDATORY before next phase)
240
252
  5. **Proceed** - Move to next phase only after commit
241
253
 
242
254
  **Handling Failures**:
243
- - If **Defend** phase reveals gaps → return to **Implement** to fix
244
- - If **Evaluation** reveals unmet criteria → return to **Implement**
245
- - If user requests changes → return to **Implement**
255
+ - If verification reveals gaps → iterate and fix
246
256
  - If fundamental plan flaws found → mark phase as `blocked` and revise plan
247
257
 
248
258
  **Commit Requirements**:
@@ -17,6 +17,20 @@
17
17
  - [ ] Zero critical security issues
18
18
  - [ ] Documentation complete
19
19
 
20
+ ## Phases (Machine Readable)
21
+
22
+ <!-- REQUIRED: porch uses this JSON to track phase progress. Update this when adding/removing phases. -->
23
+
24
+ ```json
25
+ {
26
+ "phases": [
27
+ {"id": "phase_1", "title": "Phase 1 Title Here"},
28
+ {"id": "phase_2", "title": "Phase 2 Title Here"},
29
+ {"id": "phase_3", "title": "Phase 3 Title Here"}
30
+ ]
31
+ }
32
+ ```
33
+
20
34
  ## Phase Breakdown
21
35
 
22
36
  ### Phase 1: [Descriptive Name]
@@ -2,7 +2,7 @@
2
2
  "$schema": "../../protocol-schema.json",
3
3
  "name": "tick",
4
4
  "version": "1.0.0",
5
- "description": "Amendment workflow for existing SPIDER specifications",
5
+ "description": "Amendment workflow for existing SPIR specifications",
6
6
  "phases": [
7
7
  {
8
8
  "id": "identify",