@moreih29/nexus-core 0.11.0 → 0.13.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.
Files changed (210) hide show
  1. package/README.md +48 -63
  2. package/assets/agents/architect/body.ko.md +177 -0
  3. package/{agents → assets/agents}/architect/body.md +16 -0
  4. package/assets/agents/designer/body.ko.md +125 -0
  5. package/{agents → assets/agents}/designer/body.md +16 -0
  6. package/assets/agents/engineer/body.ko.md +106 -0
  7. package/{agents → assets/agents}/engineer/body.md +14 -0
  8. package/assets/agents/lead/body.ko.md +70 -0
  9. package/assets/agents/lead/body.md +70 -0
  10. package/assets/agents/postdoc/body.ko.md +122 -0
  11. package/{agents → assets/agents}/postdoc/body.md +16 -0
  12. package/assets/agents/researcher/body.ko.md +137 -0
  13. package/{agents → assets/agents}/researcher/body.md +15 -0
  14. package/assets/agents/reviewer/body.ko.md +138 -0
  15. package/{agents → assets/agents}/reviewer/body.md +15 -0
  16. package/assets/agents/strategist/body.ko.md +116 -0
  17. package/{agents → assets/agents}/strategist/body.md +16 -0
  18. package/assets/agents/tester/body.ko.md +195 -0
  19. package/{agents → assets/agents}/tester/body.md +15 -0
  20. package/assets/agents/writer/body.ko.md +122 -0
  21. package/{agents → assets/agents}/writer/body.md +14 -0
  22. package/assets/capability-matrix.yml +198 -0
  23. package/assets/hooks/agent-bootstrap/handler.test.ts +368 -0
  24. package/assets/hooks/agent-bootstrap/handler.ts +119 -0
  25. package/assets/hooks/agent-bootstrap/meta.yml +10 -0
  26. package/assets/hooks/agent-finalize/handler.test.ts +368 -0
  27. package/assets/hooks/agent-finalize/handler.ts +76 -0
  28. package/assets/hooks/agent-finalize/meta.yml +10 -0
  29. package/assets/hooks/capability-matrix.yml +313 -0
  30. package/assets/hooks/post-tool-telemetry/handler.test.ts +302 -0
  31. package/assets/hooks/post-tool-telemetry/handler.ts +49 -0
  32. package/assets/hooks/post-tool-telemetry/meta.yml +11 -0
  33. package/assets/hooks/prompt-router/handler.test.ts +801 -0
  34. package/assets/hooks/prompt-router/handler.ts +261 -0
  35. package/assets/hooks/prompt-router/meta.yml +11 -0
  36. package/assets/hooks/session-init/handler.test.ts +274 -0
  37. package/assets/hooks/session-init/handler.ts +30 -0
  38. package/assets/hooks/session-init/meta.yml +9 -0
  39. package/assets/lsp-servers.json +55 -0
  40. package/assets/schema/lsp-servers.schema.json +67 -0
  41. package/assets/skills/nx-init/body.ko.md +197 -0
  42. package/{skills → assets/skills}/nx-init/body.md +11 -0
  43. package/assets/skills/nx-plan/body.ko.md +361 -0
  44. package/{skills → assets/skills}/nx-plan/body.md +13 -0
  45. package/assets/skills/nx-run/body.ko.md +161 -0
  46. package/{skills → assets/skills}/nx-run/body.md +11 -0
  47. package/assets/skills/nx-sync/body.ko.md +92 -0
  48. package/{skills → assets/skills}/nx-sync/body.md +10 -0
  49. package/assets/tools/tool-name-map.yml +353 -0
  50. package/dist/hooks/opencode-mount.d.ts +35 -0
  51. package/dist/hooks/opencode-mount.d.ts.map +1 -0
  52. package/dist/hooks/opencode-mount.js +332 -0
  53. package/dist/hooks/opencode-mount.js.map +1 -0
  54. package/dist/hooks/runtime.d.ts +37 -0
  55. package/dist/hooks/runtime.d.ts.map +1 -0
  56. package/dist/hooks/runtime.js +274 -0
  57. package/dist/hooks/runtime.js.map +1 -0
  58. package/dist/hooks/types.d.ts +196 -0
  59. package/dist/hooks/types.d.ts.map +1 -0
  60. package/dist/hooks/types.js +85 -0
  61. package/dist/hooks/types.js.map +1 -0
  62. package/dist/lsp/cache.d.ts +9 -0
  63. package/dist/lsp/cache.d.ts.map +1 -0
  64. package/dist/lsp/cache.js +216 -0
  65. package/dist/lsp/cache.js.map +1 -0
  66. package/dist/lsp/client.d.ts +24 -0
  67. package/dist/lsp/client.d.ts.map +1 -0
  68. package/dist/lsp/client.js +166 -0
  69. package/dist/lsp/client.js.map +1 -0
  70. package/dist/lsp/detect.d.ts +77 -0
  71. package/dist/lsp/detect.d.ts.map +1 -0
  72. package/dist/lsp/detect.js +116 -0
  73. package/dist/lsp/detect.js.map +1 -0
  74. package/dist/mcp/server.d.ts +5 -0
  75. package/dist/mcp/server.d.ts.map +1 -0
  76. package/dist/mcp/server.js +34 -0
  77. package/dist/mcp/server.js.map +1 -0
  78. package/dist/mcp/tools/artifact.d.ts +4 -0
  79. package/dist/mcp/tools/artifact.d.ts.map +1 -0
  80. package/dist/mcp/tools/artifact.js +36 -0
  81. package/dist/mcp/tools/artifact.js.map +1 -0
  82. package/dist/mcp/tools/history.d.ts +3 -0
  83. package/dist/mcp/tools/history.d.ts.map +1 -0
  84. package/dist/mcp/tools/history.js +29 -0
  85. package/dist/mcp/tools/history.js.map +1 -0
  86. package/dist/mcp/tools/lsp.d.ts +13 -0
  87. package/dist/mcp/tools/lsp.d.ts.map +1 -0
  88. package/dist/mcp/tools/lsp.js +225 -0
  89. package/dist/mcp/tools/lsp.js.map +1 -0
  90. package/dist/mcp/tools/plan.d.ts +3 -0
  91. package/dist/mcp/tools/plan.d.ts.map +1 -0
  92. package/dist/mcp/tools/plan.js +317 -0
  93. package/dist/mcp/tools/plan.js.map +1 -0
  94. package/dist/mcp/tools/task.d.ts +3 -0
  95. package/dist/mcp/tools/task.d.ts.map +1 -0
  96. package/dist/mcp/tools/task.js +252 -0
  97. package/dist/mcp/tools/task.js.map +1 -0
  98. package/dist/shared/invocations.d.ts +74 -0
  99. package/dist/shared/invocations.d.ts.map +1 -0
  100. package/dist/shared/invocations.js +247 -0
  101. package/dist/shared/invocations.js.map +1 -0
  102. package/dist/shared/json-store.d.ts +37 -0
  103. package/dist/shared/json-store.d.ts.map +1 -0
  104. package/dist/shared/json-store.js +163 -0
  105. package/dist/shared/json-store.js.map +1 -0
  106. package/dist/shared/mcp-utils.d.ts +3 -0
  107. package/dist/shared/mcp-utils.d.ts.map +1 -0
  108. package/dist/shared/mcp-utils.js +6 -0
  109. package/dist/shared/mcp-utils.js.map +1 -0
  110. package/dist/shared/paths.d.ts +21 -0
  111. package/dist/shared/paths.d.ts.map +1 -0
  112. package/dist/shared/paths.js +81 -0
  113. package/dist/shared/paths.js.map +1 -0
  114. package/dist/shared/tool-log.d.ts +8 -0
  115. package/dist/shared/tool-log.d.ts.map +1 -0
  116. package/dist/shared/tool-log.js +22 -0
  117. package/dist/shared/tool-log.js.map +1 -0
  118. package/dist/types/state.d.ts +862 -0
  119. package/dist/types/state.d.ts.map +1 -0
  120. package/dist/types/state.js +66 -0
  121. package/dist/types/state.js.map +1 -0
  122. package/docs/consuming/codex-lead-merge.md +106 -0
  123. package/docs/plugin-guide.md +360 -0
  124. package/docs/plugin-template/claude/.github/workflows/build.yml +60 -0
  125. package/docs/plugin-template/claude/README.md +110 -0
  126. package/docs/plugin-template/claude/package.json +16 -0
  127. package/docs/plugin-template/codex/.github/workflows/build.yml +51 -0
  128. package/docs/plugin-template/codex/README.md +147 -0
  129. package/docs/plugin-template/codex/package.json +17 -0
  130. package/docs/plugin-template/opencode/.github/workflows/build.yml +61 -0
  131. package/docs/plugin-template/opencode/README.md +121 -0
  132. package/docs/plugin-template/opencode/package.json +25 -0
  133. package/package.json +21 -21
  134. package/scripts/build-agents.test.ts +1279 -0
  135. package/scripts/build-agents.ts +978 -0
  136. package/scripts/build-hooks.test.ts +1385 -0
  137. package/scripts/build-hooks.ts +584 -0
  138. package/scripts/cli.test.ts +367 -0
  139. package/scripts/cli.ts +547 -0
  140. package/agents/architect/meta.yml +0 -13
  141. package/agents/designer/meta.yml +0 -13
  142. package/agents/engineer/meta.yml +0 -11
  143. package/agents/postdoc/meta.yml +0 -13
  144. package/agents/researcher/meta.yml +0 -12
  145. package/agents/reviewer/meta.yml +0 -12
  146. package/agents/strategist/meta.yml +0 -13
  147. package/agents/tester/meta.yml +0 -12
  148. package/agents/writer/meta.yml +0 -11
  149. package/conformance/README.md +0 -311
  150. package/conformance/examples/plan.extension.schema.example.json +0 -25
  151. package/conformance/lifecycle/README.md +0 -48
  152. package/conformance/lifecycle/agent-complete.json +0 -44
  153. package/conformance/lifecycle/agent-resume.json +0 -43
  154. package/conformance/lifecycle/agent-spawn.json +0 -36
  155. package/conformance/lifecycle/memory-access-record.json +0 -27
  156. package/conformance/lifecycle/session-end.json +0 -48
  157. package/conformance/scenarios/full-plan-cycle.json +0 -147
  158. package/conformance/scenarios/task-deps-ordering.json +0 -95
  159. package/conformance/schema/fixture.schema.json +0 -354
  160. package/conformance/state-schemas/agent-tracker.schema.json +0 -63
  161. package/conformance/state-schemas/history.schema.json +0 -134
  162. package/conformance/state-schemas/memory-access.schema.json +0 -36
  163. package/conformance/state-schemas/plan.schema.json +0 -77
  164. package/conformance/state-schemas/tasks.schema.json +0 -98
  165. package/conformance/tools/artifact-write.json +0 -97
  166. package/conformance/tools/context.json +0 -172
  167. package/conformance/tools/history-search.json +0 -219
  168. package/conformance/tools/plan-decide.json +0 -139
  169. package/conformance/tools/plan-start.json +0 -81
  170. package/conformance/tools/plan-status.json +0 -127
  171. package/conformance/tools/plan-update.json +0 -341
  172. package/conformance/tools/task-add.json +0 -156
  173. package/conformance/tools/task-close.json +0 -161
  174. package/conformance/tools/task-list.json +0 -177
  175. package/conformance/tools/task-update.json +0 -167
  176. package/docs/behavioral-contracts.md +0 -145
  177. package/docs/consumer-implementation-guide.md +0 -852
  178. package/docs/memory-lifecycle-contract.md +0 -119
  179. package/docs/nexus-layout.md +0 -224
  180. package/docs/nexus-outputs-contract.md +0 -344
  181. package/docs/nexus-state-overview.md +0 -170
  182. package/docs/nexus-tools-contract.md +0 -438
  183. package/manifest.json +0 -449
  184. package/schema/README.md +0 -69
  185. package/schema/agent.schema.json +0 -23
  186. package/schema/common.schema.json +0 -17
  187. package/schema/manifest.schema.json +0 -78
  188. package/schema/memory-policy.schema.json +0 -98
  189. package/schema/skill.schema.json +0 -54
  190. package/schema/task-exceptions.schema.json +0 -40
  191. package/schema/vocabulary.schema.json +0 -167
  192. package/scripts/.gitkeep +0 -0
  193. package/scripts/conformance-coverage.ts +0 -466
  194. package/scripts/import-from-claude-nexus.ts +0 -403
  195. package/scripts/lib/frontmatter.ts +0 -71
  196. package/scripts/lib/lint.ts +0 -348
  197. package/scripts/lib/structure.ts +0 -159
  198. package/scripts/lib/validate.ts +0 -794
  199. package/scripts/validate.ts +0 -90
  200. package/skills/nx-init/meta.yml +0 -8
  201. package/skills/nx-plan/meta.yml +0 -10
  202. package/skills/nx-run/meta.yml +0 -9
  203. package/skills/nx-sync/meta.yml +0 -7
  204. package/vocabulary/capabilities.yml +0 -65
  205. package/vocabulary/categories.yml +0 -11
  206. package/vocabulary/invocations.yml +0 -147
  207. package/vocabulary/memory_policy.yml +0 -88
  208. package/vocabulary/resume-tiers.yml +0 -11
  209. package/vocabulary/tags.yml +0 -60
  210. package/vocabulary/task-exceptions.yml +0 -29
@@ -1,219 +0,0 @@
1
- [
2
- {
3
- "test_id": "history_search_no_history_file",
4
- "description": "history_search returns empty results with total:0 and showing:0 when history.json does not exist",
5
- "covers": {
6
- "return_value": {
7
- "history_search": ["total", "showing", "cycles"]
8
- }
9
- },
10
- "precondition": {
11
- "state_files": {
12
- ".nexus/history.json": null
13
- }
14
- },
15
- "action": {
16
- "tool": "history_search",
17
- "params": {}
18
- },
19
- "postcondition": {
20
- "return_value": {
21
- "$.total": 0,
22
- "$.showing": 0,
23
- "$.cycles.length": 0
24
- }
25
- }
26
- },
27
- {
28
- "test_id": "history_search_no_query",
29
- "description": "history_search with no query or last_n returns all cycles when history.json contains 3 cycles",
30
- "covers": {
31
- "return_value": {
32
- "history_search": ["total", "showing", "cycles", "cycles[].completed_at", "cycles[].branch", "cycles[].topic", "cycles[].task_count"]
33
- }
34
- },
35
- "precondition": {
36
- "state_files": {
37
- ".nexus/history.json": {
38
- "cycles": [
39
- {
40
- "completed_at": "2026-04-10T10:00:00.000Z",
41
- "branch": "main",
42
- "plan": { "id": 1, "topic": "Initial setup", "issues": [], "created_at": "2026-04-10T09:00:00.000Z" },
43
- "tasks": [
44
- { "id": 1, "title": "Bootstrap project", "context": "Setup", "status": "completed", "deps": [] }
45
- ]
46
- },
47
- {
48
- "completed_at": "2026-04-11T10:00:00.000Z",
49
- "branch": "feature/state",
50
- "plan": { "id": 2, "topic": "Refactor state layer", "issues": [], "created_at": "2026-04-11T09:00:00.000Z" },
51
- "tasks": [
52
- { "id": 1, "title": "Decouple state access", "context": "Refactor", "status": "completed", "deps": [] },
53
- { "id": 2, "title": "Add state schema", "context": "Schema", "status": "completed", "deps": [] }
54
- ]
55
- },
56
- {
57
- "completed_at": "2026-04-12T10:00:00.000Z",
58
- "branch": "feature/conformance",
59
- "plan": { "id": 3, "topic": "Conformance fixtures", "issues": [], "created_at": "2026-04-12T09:00:00.000Z" },
60
- "tasks": [
61
- { "id": 1, "title": "Write fixture schema", "context": "Schema", "status": "completed", "deps": [] }
62
- ]
63
- }
64
- ]
65
- }
66
- }
67
- },
68
- "action": {
69
- "tool": "history_search",
70
- "params": {}
71
- },
72
- "postcondition": {
73
- "return_value": {
74
- "$.total": 3,
75
- "$.showing": 3,
76
- "$.cycles.length": 3
77
- }
78
- }
79
- },
80
- {
81
- "test_id": "history_search_query_match",
82
- "description": "history_search matches cycles case-insensitively when the query term appears in the cycle JSON, returning at least one result for query 'STATE'",
83
- "covers": {
84
- "return_value": {
85
- "history_search": ["total", "showing", "cycles", "cycles[].topic"]
86
- }
87
- },
88
- "uncovered_params": ["query"],
89
- "precondition": {
90
- "state_files": {
91
- ".nexus/history.json": {
92
- "cycles": [
93
- {
94
- "completed_at": "2026-04-11T10:00:00.000Z",
95
- "branch": "feature/state",
96
- "plan": { "id": 2, "topic": "Refactor state layer", "issues": [], "created_at": "2026-04-11T09:00:00.000Z" },
97
- "tasks": []
98
- },
99
- {
100
- "completed_at": "2026-04-12T10:00:00.000Z",
101
- "branch": "feature/conformance",
102
- "plan": { "id": 3, "topic": "Conformance fixtures", "issues": [], "created_at": "2026-04-12T09:00:00.000Z" },
103
- "tasks": []
104
- }
105
- ]
106
- }
107
- }
108
- },
109
- "action": {
110
- "tool": "history_search",
111
- "params": {
112
- "query": "STATE"
113
- }
114
- },
115
- "postcondition": {
116
- "return_value": {
117
- "$.total": { "type": "number", "min": 1 },
118
- "$.cycles.length": { "type": "number", "min": 1 }
119
- }
120
- }
121
- },
122
- {
123
- "test_id": "history_search_query_no_match",
124
- "description": "history_search returns total:0 and an empty cycles array when the query term matches no cycles in history.json",
125
- "covers": {
126
- "return_value": {
127
- "history_search": ["total", "showing", "cycles"]
128
- }
129
- },
130
- "uncovered_params": ["query"],
131
- "precondition": {
132
- "state_files": {
133
- ".nexus/history.json": {
134
- "cycles": [
135
- {
136
- "completed_at": "2026-04-11T10:00:00.000Z",
137
- "branch": "feature/state",
138
- "plan": { "id": 2, "topic": "Refactor state layer", "issues": [], "created_at": "2026-04-11T09:00:00.000Z" },
139
- "tasks": []
140
- }
141
- ]
142
- }
143
- }
144
- },
145
- "action": {
146
- "tool": "history_search",
147
- "params": {
148
- "query": "nonexistent-xyz"
149
- }
150
- },
151
- "postcondition": {
152
- "return_value": {
153
- "$.total": 0,
154
- "$.cycles.length": 0
155
- }
156
- }
157
- },
158
- {
159
- "test_id": "history_search_last_n_limit",
160
- "description": "history_search with last_n:2 returns only the 2 most recent cycles while reporting the full total of matching cycles",
161
- "covers": {
162
- "return_value": {
163
- "history_search": ["total", "showing", "cycles"]
164
- }
165
- },
166
- "uncovered_params": ["last_n"],
167
- "precondition": {
168
- "state_files": {
169
- ".nexus/history.json": {
170
- "cycles": [
171
- {
172
- "completed_at": "2026-04-08T10:00:00.000Z",
173
- "branch": "main",
174
- "plan": { "id": 1, "topic": "Cycle 1", "issues": [], "created_at": "2026-04-08T09:00:00.000Z" },
175
- "tasks": []
176
- },
177
- {
178
- "completed_at": "2026-04-09T10:00:00.000Z",
179
- "branch": "main",
180
- "plan": { "id": 2, "topic": "Cycle 2", "issues": [], "created_at": "2026-04-09T09:00:00.000Z" },
181
- "tasks": []
182
- },
183
- {
184
- "completed_at": "2026-04-10T10:00:00.000Z",
185
- "branch": "main",
186
- "plan": { "id": 3, "topic": "Cycle 3", "issues": [], "created_at": "2026-04-10T09:00:00.000Z" },
187
- "tasks": []
188
- },
189
- {
190
- "completed_at": "2026-04-11T10:00:00.000Z",
191
- "branch": "main",
192
- "plan": { "id": 4, "topic": "Cycle 4", "issues": [], "created_at": "2026-04-11T09:00:00.000Z" },
193
- "tasks": []
194
- },
195
- {
196
- "completed_at": "2026-04-12T10:00:00.000Z",
197
- "branch": "main",
198
- "plan": { "id": 5, "topic": "Cycle 5", "issues": [], "created_at": "2026-04-12T09:00:00.000Z" },
199
- "tasks": []
200
- }
201
- ]
202
- }
203
- }
204
- },
205
- "action": {
206
- "tool": "history_search",
207
- "params": {
208
- "last_n": 2
209
- }
210
- },
211
- "postcondition": {
212
- "return_value": {
213
- "$.total": 5,
214
- "$.showing": 2,
215
- "$.cycles.length": 2
216
- }
217
- }
218
- }
219
- ]
@@ -1,139 +0,0 @@
1
- [
2
- {
3
- "test_id": "plan_decide_happy_path",
4
- "description": "plan_decide marks an issue as decided and records the decision text on the issue object",
5
- "covers": {
6
- "state_schemas": {
7
- "plan.schema.json": ["issues[].status", "issues[].decision"]
8
- },
9
- "return_value": {
10
- "plan_decide": ["decided", "allComplete", "remaining"]
11
- }
12
- },
13
- "uncovered_params": ["issue_id", "decision"],
14
- "precondition": {
15
- "state_files": {
16
- ".nexus/state/plan.json": {
17
- "id": 1,
18
- "topic": "Introduce conformance test fixtures",
19
- "issues": [
20
- {
21
- "id": 1,
22
- "title": "What fixture format best supports harness-neutral assertions?",
23
- "status": "pending"
24
- },
25
- {
26
- "id": 2,
27
- "title": "Which tools should be covered in the MVP?",
28
- "status": "pending"
29
- }
30
- ],
31
- "research_summary": "Reviewed state-schemas and tool implementations.",
32
- "created_at": "2026-04-12T00:00:00.000Z"
33
- }
34
- }
35
- },
36
- "action": {
37
- "tool": "plan_decide",
38
- "params": {
39
- "issue_id": 1,
40
- "decision": "Use declarative JSON with JSONPath assertions. Harness-neutral tool names only."
41
- }
42
- },
43
- "postcondition": {
44
- "return_value": {
45
- "$.decided": true,
46
- "$.allComplete": false,
47
- "$.remaining.length": 1
48
- },
49
- "state_files": {
50
- ".nexus/state/plan.json": {
51
- "$.issues[0].status": "decided",
52
- "$.issues[0].decision": "Use declarative JSON with JSONPath assertions. Harness-neutral tool names only.",
53
- "$.issues[1].status": "pending"
54
- }
55
- }
56
- }
57
- },
58
- {
59
- "test_id": "plan_decide_no_active_plan_error",
60
- "description": "plan_decide returns an error when no plan.json exists, because there is no active plan session to record decisions against",
61
- "covers": {
62
- "state_schemas": {
63
- "plan.schema.json": []
64
- }
65
- },
66
- "uncovered_params": ["issue_id", "decision"],
67
- "precondition": {
68
- "state_files": {
69
- ".nexus/state/plan.json": null
70
- }
71
- },
72
- "action": {
73
- "tool": "plan_decide",
74
- "params": {
75
- "issue_id": 1,
76
- "decision": "Some decision"
77
- }
78
- },
79
- "postcondition": {
80
- "return_value": {
81
- "$.error": "No active plan session"
82
- }
83
- }
84
- },
85
- {
86
- "test_id": "plan_decide_with_how_agents",
87
- "description": "plan_decide persists how_agents, how_summary, and how_agent_ids on the issue when those optional params are provided",
88
- "covers": {
89
- "state_schemas": {
90
- "plan.schema.json": ["issues[].how_agents", "issues[].how_agents[]", "issues[].how_summary", "issues[].how_agent_ids"]
91
- }
92
- },
93
- "uncovered_params": ["issue_id", "decision"],
94
- "precondition": {
95
- "state_files": {
96
- ".nexus/state/plan.json": {
97
- "id": 1,
98
- "topic": "Introduce conformance test fixtures",
99
- "issues": [
100
- {
101
- "id": 1,
102
- "title": "What fixture format best supports harness-neutral assertions?",
103
- "status": "pending"
104
- }
105
- ],
106
- "research_summary": "Reviewed state-schemas and tool implementations.",
107
- "created_at": "2026-04-12T00:00:00.000Z"
108
- }
109
- }
110
- },
111
- "action": {
112
- "tool": "plan_decide",
113
- "params": {
114
- "issue_id": 1,
115
- "decision": "Declarative JSON with JSONPath assertions, harness-neutral.",
116
- "how_agents": ["architect", "postdoc"],
117
- "how_summary": {
118
- "architect": "JSONPath assertions provide harness-agnostic verifiability.",
119
- "postdoc": "Prior art in contract-testing frameworks confirms this approach."
120
- },
121
- "how_agent_ids": {
122
- "architect": "uuid-ac01",
123
- "postdoc": "uuid-pd02"
124
- }
125
- }
126
- },
127
- "postcondition": {
128
- "state_files": {
129
- ".nexus/state/plan.json": {
130
- "$.issues[0].status": "decided",
131
- "$.issues[0].how_agents.length": 2,
132
- "$.issues[0].how_agents[0]": "architect",
133
- "$.issues[0].how_summary.architect": "JSONPath assertions provide harness-agnostic verifiability.",
134
- "$.issues[0].how_agent_ids.architect": "uuid-ac01"
135
- }
136
- }
137
- }
138
- }
139
- ]
@@ -1,81 +0,0 @@
1
- [
2
- {
3
- "test_id": "plan_start_happy_path",
4
- "description": "plan_start creates plan.json with correct structure when given a topic, issues, and research_summary",
5
- "covers": {
6
- "state_schemas": {
7
- "plan.schema.json": ["schema_version", "id", "topic", "issues[].id", "issues[].title", "issues[].status", "research_summary", "created_at"]
8
- },
9
- "return_value": {
10
- "plan_start": ["created", "plan_id", "topic", "issueCount"]
11
- }
12
- },
13
- "precondition": {
14
- "state_files": {
15
- ".nexus/state/plan.json": null
16
- }
17
- },
18
- "action": {
19
- "tool": "plan_start",
20
- "params": {
21
- "topic": "Introduce conformance test fixtures",
22
- "issues": [
23
- "What fixture format best supports harness-neutral assertions?",
24
- "Which tools should be covered in the MVP?"
25
- ],
26
- "research_summary": "Reviewed existing state-schemas and claude-nexus MCP tool implementations. Conformance fixtures should be declarative JSON with JSONPath assertions."
27
- }
28
- },
29
- "postcondition": {
30
- "return_value": {
31
- "$.created": true,
32
- "$.plan_id": { "type": "number", "min": 1 },
33
- "$.topic": "Introduce conformance test fixtures",
34
- "$.issueCount": 2
35
- },
36
- "state_files": {
37
- ".nexus/state/plan.json": {
38
- "$.id": { "type": "number", "min": 1 },
39
- "$.topic": "Introduce conformance test fixtures",
40
- "$.issues.length": 2,
41
- "$.issues[0].id": 1,
42
- "$.issues[0].title": "What fixture format best supports harness-neutral assertions?",
43
- "$.issues[0].status": "pending",
44
- "$.issues[1].id": 2,
45
- "$.issues[1].title": "Which tools should be covered in the MVP?",
46
- "$.issues[1].status": "pending",
47
- "$.research_summary": { "type": "string", "minLength": 10 },
48
- "$.created_at": { "type": "iso8601" }
49
- }
50
- }
51
- }
52
- },
53
- {
54
- "test_id": "plan_start_missing_research_summary_error",
55
- "description": "plan_start rejects the invocation when research_summary is omitted — the field is required to enforce that research happened before planning",
56
- "covers": {
57
- "state_schemas": {
58
- "plan.schema.json": []
59
- }
60
- },
61
- "uncovered_params": ["topic", "issues"],
62
- "precondition": {
63
- "state_files": {
64
- ".nexus/state/plan.json": null
65
- }
66
- },
67
- "action": {
68
- "tool": "plan_start",
69
- "params": {
70
- "topic": "Some topic",
71
- "issues": ["Issue A"]
72
- }
73
- },
74
- "postcondition": {
75
- "error": true,
76
- "state_files": {
77
- ".nexus/state/plan.json": null
78
- }
79
- }
80
- }
81
- ]
@@ -1,127 +0,0 @@
1
- [
2
- {
3
- "test_id": "plan_status_inactive",
4
- "description": "plan_status returns active:false when no plan.json exists, indicating no active planning session",
5
- "covers": {
6
- "return_value": {
7
- "plan_status": ["active"]
8
- }
9
- },
10
- "precondition": {
11
- "state_files": {
12
- ".nexus/state/plan.json": null
13
- }
14
- },
15
- "action": {
16
- "tool": "plan_status",
17
- "params": {}
18
- },
19
- "postcondition": {
20
- "return_value": {
21
- "$.active": false
22
- }
23
- }
24
- },
25
- {
26
- "test_id": "plan_status_active_full",
27
- "description": "plan_status returns the full session snapshot including research_summary, decided issues with how_agents and how_summary, and a correct summary breakdown when a plan is active",
28
- "covers": {
29
- "state_schemas": {
30
- "plan.schema.json": ["id", "topic", "issues[].id", "issues[].status", "issues[].decision", "issues[].how_agents", "issues[].how_summary", "research_summary"]
31
- },
32
- "return_value": {
33
- "plan_status": ["active", "plan_id", "topic", "issues", "research_summary", "summary.total", "summary.pending", "summary.decided", "issues[].how_agents", "issues[].how_summary"]
34
- }
35
- },
36
- "precondition": {
37
- "state_files": {
38
- ".nexus/state/plan.json": {
39
- "id": 10,
40
- "topic": "Migrate storage to event-sourced model",
41
- "issues": [
42
- {
43
- "id": 1,
44
- "title": "Define event schema",
45
- "status": "decided",
46
- "decision": "Use typed discriminated unions per aggregate.",
47
- "how_agents": ["architect"],
48
- "how_summary": {
49
- "architect": "Recommends sealed event types with version field for forward compatibility."
50
- }
51
- },
52
- {
53
- "id": 2,
54
- "title": "Plan migration rollout strategy",
55
- "status": "pending"
56
- }
57
- ],
58
- "research_summary": "Reviewed CQRS literature and existing state-schema patterns in conformance/.",
59
- "created_at": "2026-04-13T00:00:00.000Z"
60
- }
61
- }
62
- },
63
- "action": {
64
- "tool": "plan_status",
65
- "params": {}
66
- },
67
- "postcondition": {
68
- "return_value": {
69
- "$.active": true,
70
- "$.plan_id": 10,
71
- "$.topic": "Migrate storage to event-sourced model",
72
- "$.research_summary": "Reviewed CQRS literature and existing state-schema patterns in conformance/.",
73
- "$.summary.total": 2,
74
- "$.summary.pending": 1,
75
- "$.summary.decided": 1,
76
- "$.issues.length": 2,
77
- "$.issues[0].how_agents[0]": "architect",
78
- "$.issues[0].how_summary.architect": "Recommends sealed event types with version field for forward compatibility."
79
- }
80
- }
81
- },
82
- {
83
- "test_id": "plan_status_active_minimal",
84
- "description": "plan_status returns a valid active snapshot when the plan has no research_summary and all issues are still pending",
85
- "covers": {
86
- "state_schemas": {
87
- "plan.schema.json": ["id", "topic", "issues[].status"]
88
- },
89
- "return_value": {
90
- "plan_status": ["active", "plan_id", "topic", "summary.total", "summary.pending", "summary.decided"]
91
- }
92
- },
93
- "precondition": {
94
- "state_files": {
95
- ".nexus/state/plan.json": {
96
- "id": 11,
97
- "topic": "Minimal plan with no research",
98
- "issues": [
99
- {
100
- "id": 1,
101
- "title": "First issue",
102
- "status": "pending"
103
- },
104
- {
105
- "id": 2,
106
- "title": "Second issue",
107
- "status": "pending"
108
- }
109
- ],
110
- "created_at": "2026-04-13T00:00:00.000Z"
111
- }
112
- }
113
- },
114
- "action": {
115
- "tool": "plan_status",
116
- "params": {}
117
- },
118
- "postcondition": {
119
- "return_value": {
120
- "$.active": true,
121
- "$.summary.total": 2,
122
- "$.summary.pending": 2,
123
- "$.summary.decided": 0
124
- }
125
- }
126
- }
127
- ]