@moreih29/nexus-core 0.12.0 → 0.14.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.
- package/README.md +76 -57
- package/assets/agents/architect/body.ko.md +177 -0
- package/{agents → assets/agents}/architect/body.md +16 -0
- package/assets/agents/designer/body.ko.md +125 -0
- package/{agents → assets/agents}/designer/body.md +16 -0
- package/assets/agents/engineer/body.ko.md +106 -0
- package/{agents → assets/agents}/engineer/body.md +14 -0
- package/assets/agents/lead/body.ko.md +70 -0
- package/assets/agents/lead/body.md +70 -0
- package/assets/agents/postdoc/body.ko.md +122 -0
- package/{agents → assets/agents}/postdoc/body.md +16 -0
- package/assets/agents/researcher/body.ko.md +137 -0
- package/{agents → assets/agents}/researcher/body.md +15 -0
- package/assets/agents/reviewer/body.ko.md +138 -0
- package/{agents → assets/agents}/reviewer/body.md +15 -0
- package/assets/agents/strategist/body.ko.md +116 -0
- package/{agents → assets/agents}/strategist/body.md +16 -0
- package/assets/agents/tester/body.ko.md +195 -0
- package/{agents → assets/agents}/tester/body.md +15 -0
- package/assets/agents/writer/body.ko.md +122 -0
- package/{agents → assets/agents}/writer/body.md +14 -0
- package/assets/capability-matrix.yml +198 -0
- package/assets/hooks/agent-bootstrap/handler.test.ts +368 -0
- package/assets/hooks/agent-bootstrap/handler.ts +119 -0
- package/assets/hooks/agent-bootstrap/meta.yml +10 -0
- package/assets/hooks/agent-finalize/handler.test.ts +368 -0
- package/assets/hooks/agent-finalize/handler.ts +76 -0
- package/assets/hooks/agent-finalize/meta.yml +10 -0
- package/assets/hooks/capability-matrix.yml +313 -0
- package/assets/hooks/post-tool-telemetry/handler.test.ts +302 -0
- package/assets/hooks/post-tool-telemetry/handler.ts +49 -0
- package/assets/hooks/post-tool-telemetry/meta.yml +11 -0
- package/assets/hooks/prompt-router/handler.test.ts +801 -0
- package/assets/hooks/prompt-router/handler.ts +261 -0
- package/assets/hooks/prompt-router/meta.yml +11 -0
- package/assets/hooks/session-init/handler.test.ts +274 -0
- package/assets/hooks/session-init/handler.ts +30 -0
- package/assets/hooks/session-init/meta.yml +9 -0
- package/assets/lsp-servers.json +55 -0
- package/assets/schema/lsp-servers.schema.json +67 -0
- package/assets/skills/nx-init/body.ko.md +197 -0
- package/{skills → assets/skills}/nx-init/body.md +11 -0
- package/assets/skills/nx-plan/body.ko.md +361 -0
- package/{skills → assets/skills}/nx-plan/body.md +13 -0
- package/assets/skills/nx-run/body.ko.md +161 -0
- package/{skills → assets/skills}/nx-run/body.md +11 -0
- package/assets/skills/nx-sync/body.ko.md +92 -0
- package/{skills → assets/skills}/nx-sync/body.md +10 -0
- package/assets/tools/tool-name-map.yml +353 -0
- package/dist/assets/hooks/agent-bootstrap/handler.d.ts +4 -0
- package/dist/assets/hooks/agent-bootstrap/handler.d.ts.map +1 -0
- package/dist/assets/hooks/agent-bootstrap/handler.js +100 -0
- package/dist/assets/hooks/agent-bootstrap/handler.js.map +1 -0
- package/dist/assets/hooks/agent-finalize/handler.d.ts +4 -0
- package/dist/assets/hooks/agent-finalize/handler.d.ts.map +1 -0
- package/dist/assets/hooks/agent-finalize/handler.js +63 -0
- package/dist/assets/hooks/agent-finalize/handler.js.map +1 -0
- package/dist/assets/hooks/post-tool-telemetry/handler.d.ts +4 -0
- package/dist/assets/hooks/post-tool-telemetry/handler.d.ts.map +1 -0
- package/dist/assets/hooks/post-tool-telemetry/handler.js +40 -0
- package/dist/assets/hooks/post-tool-telemetry/handler.js.map +1 -0
- package/dist/assets/hooks/prompt-router/handler.d.ts +4 -0
- package/dist/assets/hooks/prompt-router/handler.d.ts.map +1 -0
- package/dist/assets/hooks/prompt-router/handler.js +204 -0
- package/dist/assets/hooks/prompt-router/handler.js.map +1 -0
- package/dist/assets/hooks/session-init/handler.d.ts +4 -0
- package/dist/assets/hooks/session-init/handler.d.ts.map +1 -0
- package/dist/assets/hooks/session-init/handler.js +23 -0
- package/dist/assets/hooks/session-init/handler.js.map +1 -0
- package/dist/hooks/agent-bootstrap.js +105 -0
- package/dist/hooks/agent-finalize.js +164 -0
- package/dist/hooks/post-tool-telemetry.js +55 -0
- package/dist/hooks/prompt-router.js +7300 -0
- package/dist/hooks/session-init.js +21 -0
- package/dist/manifests/claude-hooks.json +52 -0
- package/dist/manifests/codex-hooks.json +28 -0
- package/dist/manifests/opencode-manifest.json +44 -0
- package/dist/manifests/portability-report.json +87 -0
- package/dist/scripts/build-agents.d.ts +157 -0
- package/dist/scripts/build-agents.d.ts.map +1 -0
- package/dist/scripts/build-agents.js +737 -0
- package/dist/scripts/build-agents.js.map +1 -0
- package/dist/scripts/build-hooks.d.ts +16 -0
- package/dist/scripts/build-hooks.d.ts.map +1 -0
- package/dist/scripts/build-hooks.js +388 -0
- package/dist/scripts/build-hooks.js.map +1 -0
- package/dist/scripts/cli.d.ts +54 -0
- package/dist/scripts/cli.d.ts.map +1 -0
- package/dist/scripts/cli.js +467 -0
- package/dist/scripts/cli.js.map +1 -0
- package/dist/src/hooks/opencode-mount.d.ts +35 -0
- package/dist/src/hooks/opencode-mount.d.ts.map +1 -0
- package/dist/src/hooks/opencode-mount.js +352 -0
- package/dist/src/hooks/opencode-mount.js.map +1 -0
- package/dist/src/hooks/runtime.d.ts +37 -0
- package/dist/src/hooks/runtime.d.ts.map +1 -0
- package/dist/src/hooks/runtime.js +274 -0
- package/dist/src/hooks/runtime.js.map +1 -0
- package/dist/src/hooks/types.d.ts +196 -0
- package/dist/src/hooks/types.d.ts.map +1 -0
- package/dist/src/hooks/types.js +85 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/lsp/cache.d.ts +9 -0
- package/dist/src/lsp/cache.d.ts.map +1 -0
- package/dist/src/lsp/cache.js +216 -0
- package/dist/src/lsp/cache.js.map +1 -0
- package/dist/src/lsp/client.d.ts +24 -0
- package/dist/src/lsp/client.d.ts.map +1 -0
- package/dist/src/lsp/client.js +166 -0
- package/dist/src/lsp/client.js.map +1 -0
- package/dist/src/lsp/detect.d.ts +77 -0
- package/dist/src/lsp/detect.d.ts.map +1 -0
- package/dist/src/lsp/detect.js +116 -0
- package/dist/src/lsp/detect.js.map +1 -0
- package/dist/src/mcp/server.d.ts +5 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +34 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools/artifact.d.ts +4 -0
- package/dist/src/mcp/tools/artifact.d.ts.map +1 -0
- package/dist/src/mcp/tools/artifact.js +36 -0
- package/dist/src/mcp/tools/artifact.js.map +1 -0
- package/dist/src/mcp/tools/history.d.ts +3 -0
- package/dist/src/mcp/tools/history.d.ts.map +1 -0
- package/dist/src/mcp/tools/history.js +29 -0
- package/dist/src/mcp/tools/history.js.map +1 -0
- package/dist/src/mcp/tools/lsp.d.ts +13 -0
- package/dist/src/mcp/tools/lsp.d.ts.map +1 -0
- package/dist/src/mcp/tools/lsp.js +225 -0
- package/dist/src/mcp/tools/lsp.js.map +1 -0
- package/dist/src/mcp/tools/plan.d.ts +3 -0
- package/dist/src/mcp/tools/plan.d.ts.map +1 -0
- package/dist/src/mcp/tools/plan.js +317 -0
- package/dist/src/mcp/tools/plan.js.map +1 -0
- package/dist/src/mcp/tools/task.d.ts +3 -0
- package/dist/src/mcp/tools/task.d.ts.map +1 -0
- package/dist/src/mcp/tools/task.js +252 -0
- package/dist/src/mcp/tools/task.js.map +1 -0
- package/dist/src/shared/invocations.d.ts +74 -0
- package/dist/src/shared/invocations.d.ts.map +1 -0
- package/dist/src/shared/invocations.js +247 -0
- package/dist/src/shared/invocations.js.map +1 -0
- package/dist/src/shared/json-store.d.ts +37 -0
- package/dist/src/shared/json-store.d.ts.map +1 -0
- package/dist/src/shared/json-store.js +163 -0
- package/dist/src/shared/json-store.js.map +1 -0
- package/dist/src/shared/mcp-utils.d.ts +3 -0
- package/dist/src/shared/mcp-utils.d.ts.map +1 -0
- package/dist/src/shared/mcp-utils.js +6 -0
- package/dist/src/shared/mcp-utils.js.map +1 -0
- package/dist/src/shared/paths.d.ts +21 -0
- package/dist/src/shared/paths.d.ts.map +1 -0
- package/dist/src/shared/paths.js +81 -0
- package/dist/src/shared/paths.js.map +1 -0
- package/dist/src/shared/tool-log.d.ts +8 -0
- package/dist/src/shared/tool-log.d.ts.map +1 -0
- package/dist/src/shared/tool-log.js +22 -0
- package/dist/src/shared/tool-log.js.map +1 -0
- package/dist/src/types/state.d.ts +862 -0
- package/dist/src/types/state.d.ts.map +1 -0
- package/dist/src/types/state.js +66 -0
- package/dist/src/types/state.js.map +1 -0
- package/docs/consuming/codex-lead-merge.md +106 -0
- package/docs/plugin-guide.md +396 -0
- package/docs/plugin-template/claude/.github/workflows/build.yml +60 -0
- package/docs/plugin-template/claude/README.md +110 -0
- package/docs/plugin-template/claude/package.json +16 -0
- package/docs/plugin-template/codex/.github/workflows/build.yml +51 -0
- package/docs/plugin-template/codex/README.md +147 -0
- package/docs/plugin-template/codex/package.json +17 -0
- package/docs/plugin-template/opencode/.github/workflows/build.yml +61 -0
- package/docs/plugin-template/opencode/README.md +121 -0
- package/docs/plugin-template/opencode/package.json +25 -0
- package/package.json +36 -28
- package/agents/architect/meta.yml +0 -13
- package/agents/designer/meta.yml +0 -13
- package/agents/engineer/meta.yml +0 -11
- package/agents/postdoc/meta.yml +0 -13
- package/agents/researcher/meta.yml +0 -12
- package/agents/reviewer/meta.yml +0 -12
- package/agents/strategist/meta.yml +0 -13
- package/agents/tester/meta.yml +0 -12
- package/agents/writer/meta.yml +0 -11
- package/conformance/README.md +0 -311
- package/conformance/examples/plan.extension.schema.example.json +0 -25
- package/conformance/lifecycle/README.md +0 -48
- package/conformance/lifecycle/agent-complete.json +0 -44
- package/conformance/lifecycle/agent-resume.json +0 -43
- package/conformance/lifecycle/agent-spawn.json +0 -36
- package/conformance/lifecycle/memory-access-record.json +0 -27
- package/conformance/lifecycle/session-end.json +0 -48
- package/conformance/scenarios/full-plan-cycle.json +0 -147
- package/conformance/scenarios/task-deps-ordering.json +0 -95
- package/conformance/schema/fixture.schema.json +0 -354
- package/conformance/state-schemas/agent-tracker.schema.json +0 -63
- package/conformance/state-schemas/history.schema.json +0 -134
- package/conformance/state-schemas/memory-access.schema.json +0 -36
- package/conformance/state-schemas/plan.schema.json +0 -77
- package/conformance/state-schemas/tasks.schema.json +0 -98
- package/conformance/tools/artifact-write.json +0 -97
- package/conformance/tools/context.json +0 -172
- package/conformance/tools/history-search.json +0 -219
- package/conformance/tools/plan-decide.json +0 -139
- package/conformance/tools/plan-start.json +0 -81
- package/conformance/tools/plan-status.json +0 -127
- package/conformance/tools/plan-update.json +0 -341
- package/conformance/tools/task-add.json +0 -156
- package/conformance/tools/task-close.json +0 -161
- package/conformance/tools/task-list.json +0 -177
- package/conformance/tools/task-update.json +0 -167
- package/docs/behavioral-contracts.md +0 -145
- package/docs/consumer-implementation-guide.md +0 -840
- package/docs/memory-lifecycle-contract.md +0 -119
- package/docs/nexus-layout.md +0 -224
- package/docs/nexus-outputs-contract.md +0 -344
- package/docs/nexus-state-overview.md +0 -170
- package/docs/nexus-tools-contract.md +0 -438
- package/manifest.json +0 -448
- package/schema/README.md +0 -69
- package/schema/agent.schema.json +0 -23
- package/schema/common.schema.json +0 -17
- package/schema/manifest.schema.json +0 -78
- package/schema/memory-policy.schema.json +0 -98
- package/schema/skill.schema.json +0 -54
- package/schema/task-exceptions.schema.json +0 -40
- package/schema/vocabulary.schema.json +0 -167
- package/scripts/.gitkeep +0 -0
- package/scripts/conformance-coverage.ts +0 -466
- package/scripts/import-from-claude-nexus.ts +0 -403
- package/scripts/lib/frontmatter.ts +0 -71
- package/scripts/lib/lint.ts +0 -348
- package/scripts/lib/structure.ts +0 -159
- package/scripts/lib/validate.ts +0 -796
- package/scripts/validate.ts +0 -90
- package/skills/nx-init/meta.yml +0 -8
- package/skills/nx-plan/meta.yml +0 -10
- package/skills/nx-run/meta.yml +0 -8
- package/skills/nx-sync/meta.yml +0 -7
- package/vocabulary/capabilities.yml +0 -65
- package/vocabulary/categories.yml +0 -11
- package/vocabulary/invocations.yml +0 -147
- package/vocabulary/memory_policy.yml +0 -88
- package/vocabulary/resume-tiers.yml +0 -11
- package/vocabulary/tags.yml +0 -60
- 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
|
-
]
|