ultimate-pi 0.11.0 → 0.12.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 (122) hide show
  1. package/.agents/skills/harness-debate-plan/SKILL.md +44 -0
  2. package/.agents/skills/harness-decisions/SKILL.md +1 -1
  3. package/.agents/skills/harness-orchestration/SKILL.md +54 -28
  4. package/.agents/skills/harness-plan/SKILL.md +15 -20
  5. package/.pi/agents/harness/adversary.md +0 -1
  6. package/.pi/agents/harness/evaluator.md +0 -1
  7. package/.pi/agents/harness/executor.md +1 -2
  8. package/.pi/agents/harness/incident-recorder.md +0 -1
  9. package/.pi/agents/harness/meta-optimizer.md +0 -1
  10. package/.pi/agents/harness/planning/decompose.md +3 -4
  11. package/.pi/agents/harness/planning/execution-plan-author.md +30 -0
  12. package/.pi/agents/harness/planning/hypothesis-validator.md +23 -0
  13. package/.pi/agents/harness/planning/hypothesis.md +3 -4
  14. package/.pi/agents/harness/planning/plan-adversary.md +10 -42
  15. package/.pi/agents/harness/planning/plan-evaluator.md +18 -0
  16. package/.pi/agents/harness/planning/review-integrator.md +23 -0
  17. package/.pi/agents/harness/planning/scout-graphify.md +11 -5
  18. package/.pi/agents/harness/planning/scout-semantic.md +11 -6
  19. package/.pi/agents/harness/planning/scout-structure.md +12 -6
  20. package/.pi/agents/harness/planning/sprint-contract-auditor.md +18 -0
  21. package/.pi/agents/harness/planning/stack-researcher.md +24 -0
  22. package/.pi/agents/harness/tie-breaker.md +0 -1
  23. package/.pi/agents/harness/trace-librarian.md +0 -1
  24. package/.pi/extensions/debate-orchestrator.ts +90 -53
  25. package/.pi/extensions/harness-plan-approval.ts +2 -2
  26. package/.pi/extensions/harness-run-context.ts +145 -5
  27. package/.pi/extensions/harness-subagents.ts +2 -2
  28. package/.pi/extensions/lib/harness-posthog.ts +6 -1
  29. package/.pi/extensions/lib/harness-spawn-budget.ts +75 -0
  30. package/.pi/extensions/lib/harness-subagent-auth.ts +123 -0
  31. package/.pi/extensions/lib/{harness-subagents/harness-subagent-policy.ts → harness-subagent-policy.ts} +3 -6
  32. package/.pi/extensions/lib/harness-subagent-precheck.ts +95 -0
  33. package/.pi/extensions/lib/harness-subagents-bridge.ts +176 -0
  34. package/.pi/extensions/lib/plan-approval/create-plan.ts +4 -7
  35. package/.pi/extensions/lib/plan-approval/plan-review.ts +1 -1
  36. package/.pi/extensions/lib/plan-approval/types.ts +7 -1
  37. package/.pi/extensions/lib/plan-debate-envelope.ts +84 -0
  38. package/.pi/extensions/lib/{harness-subagents/spawn-policy.ts → spawn-policy.ts} +1 -0
  39. package/.pi/extensions/policy-gate.ts +1 -1
  40. package/.pi/extensions/review-integrity.ts +48 -29
  41. package/.pi/harness/agents.manifest.json +37 -25
  42. package/.pi/harness/docs/adrs/0032-harness-command-orchestration.md +4 -3
  43. package/.pi/harness/docs/adrs/0033-parent-orchestrated-planning.md +1 -1
  44. package/.pi/harness/docs/adrs/0035-plan-phase-review-gate.md +27 -0
  45. package/.pi/harness/evals/smoke/fixtures/plan-phase/minimal-med/artifacts/review-round-r1.yaml +25 -0
  46. package/.pi/harness/evals/smoke/fixtures/plan-phase/minimal-med/artifacts/review-round-r4.yaml +26 -0
  47. package/.pi/harness/evals/smoke/fixtures/plan-phase/minimal-med/artifacts/sprint-audit-r4.yaml +5 -0
  48. package/.pi/harness/evals/smoke/fixtures/plan-phase/minimal-med/plan-packet.yaml +196 -0
  49. package/.pi/harness/evals/smoke/fixtures/plan-phase/minimal-med/plan-review.md +14 -0
  50. package/.pi/harness/evals/smoke/fixtures/plan-phase/minimal-med/research-brief.yaml +32 -0
  51. package/.pi/harness/evals/smoke/run-context.fixture.json +1 -1
  52. package/.pi/harness/evals/smoke/smoke-harness-plan.mjs +88 -0
  53. package/.pi/harness/specs/harness-posthog-event.schema.json +6 -1
  54. package/.pi/harness/specs/plan-execution-plan-brief.schema.json +13 -0
  55. package/.pi/harness/specs/plan-execution-plan.schema.json +255 -0
  56. package/.pi/harness/specs/plan-packet.schema.json +14 -5
  57. package/.pi/harness/specs/plan-review-round-draft.schema.json +68 -0
  58. package/.pi/harness/specs/plan-sprint-audit-turn.schema.json +29 -0
  59. package/.pi/harness/specs/plan-stack-brief.schema.json +65 -0
  60. package/.pi/harness/specs/plan-validation-turn.schema.json +42 -0
  61. package/.pi/harness/specs/round-result.schema.json +16 -9
  62. package/.pi/lib/debate-orchestrator-types.ts +38 -0
  63. package/.pi/lib/harness-agent-discovery.mjs +81 -0
  64. package/.pi/lib/harness-run-context.ts +64 -38
  65. package/.pi/lib/harness-yaml.mjs +73 -0
  66. package/.pi/lib/harness-yaml.ts +90 -0
  67. package/.pi/prompts/harness-auto.md +13 -11
  68. package/.pi/prompts/harness-critic.md +2 -2
  69. package/.pi/prompts/harness-eval.md +3 -3
  70. package/.pi/prompts/harness-incident.md +2 -2
  71. package/.pi/prompts/harness-plan.md +79 -93
  72. package/.pi/prompts/harness-review.md +2 -2
  73. package/.pi/prompts/harness-router-tune.md +1 -1
  74. package/.pi/prompts/harness-run.md +2 -2
  75. package/.pi/prompts/harness-setup.md +15 -6
  76. package/.pi/prompts/harness-trace.md +2 -2
  77. package/.pi/scripts/harness-agents-manifest.mjs +1 -1
  78. package/.pi/scripts/harness-verify.mjs +28 -19
  79. package/.pi/scripts/validate-plan-dag.mjs +258 -0
  80. package/.pi/scripts/vendor-sync-pi-subagents.sh +19 -0
  81. package/CHANGELOG.md +12 -0
  82. package/THIRD_PARTY_NOTICES.md +8 -0
  83. package/biome.json +2 -2
  84. package/package.json +6 -4
  85. package/.pi/agents/harness/planner.md +0 -13
  86. package/.pi/agents/harness/planning/hypothesis-eval.md +0 -59
  87. package/.pi/agents/harness/planning/planner.md +0 -20
  88. package/.pi/extensions/lib/harness-subagents/agent-loader.ts +0 -126
  89. package/.pi/extensions/lib/harness-subagents/agent-manifest.ts +0 -119
  90. package/.pi/extensions/lib/harness-subagents/agent-parser.ts +0 -87
  91. package/.pi/extensions/lib/harness-subagents/blackboard-tool.ts +0 -118
  92. package/.pi/extensions/lib/harness-subagents/blackboard.ts +0 -175
  93. package/.pi/extensions/lib/harness-subagents/parent-ask-user-bridge.ts +0 -10
  94. package/.pi/extensions/lib/harness-subagents/parent-harness-ui-bridge.ts +0 -137
  95. package/.pi/extensions/lib/harness-subagents/parent-harness-ui-hooks.ts +0 -77
  96. package/.pi/extensions/lib/harness-subagents/types-blackboard.ts +0 -27
  97. package/.pi/extensions/lib/harness-subagents/vendored/agent-manager.ts +0 -558
  98. package/.pi/extensions/lib/harness-subagents/vendored/agent-runner.ts +0 -666
  99. package/.pi/extensions/lib/harness-subagents/vendored/agent-types.ts +0 -175
  100. package/.pi/extensions/lib/harness-subagents/vendored/context.ts +0 -59
  101. package/.pi/extensions/lib/harness-subagents/vendored/cross-extension-rpc.ts +0 -134
  102. package/.pi/extensions/lib/harness-subagents/vendored/custom-agents.ts +0 -5
  103. package/.pi/extensions/lib/harness-subagents/vendored/default-agents.ts +0 -123
  104. package/.pi/extensions/lib/harness-subagents/vendored/env.ts +0 -43
  105. package/.pi/extensions/lib/harness-subagents/vendored/group-join.ts +0 -144
  106. package/.pi/extensions/lib/harness-subagents/vendored/index.ts +0 -2460
  107. package/.pi/extensions/lib/harness-subagents/vendored/invocation-config.ts +0 -52
  108. package/.pi/extensions/lib/harness-subagents/vendored/memory.ts +0 -182
  109. package/.pi/extensions/lib/harness-subagents/vendored/model-resolver.ts +0 -92
  110. package/.pi/extensions/lib/harness-subagents/vendored/output-file.ts +0 -115
  111. package/.pi/extensions/lib/harness-subagents/vendored/prompts.ts +0 -103
  112. package/.pi/extensions/lib/harness-subagents/vendored/schedule-store.ts +0 -177
  113. package/.pi/extensions/lib/harness-subagents/vendored/schedule.ts +0 -416
  114. package/.pi/extensions/lib/harness-subagents/vendored/settings.ts +0 -210
  115. package/.pi/extensions/lib/harness-subagents/vendored/skill-loader.ts +0 -108
  116. package/.pi/extensions/lib/harness-subagents/vendored/types.ts +0 -187
  117. package/.pi/extensions/lib/harness-subagents/vendored/ui/agent-widget.ts +0 -639
  118. package/.pi/extensions/lib/harness-subagents/vendored/ui/conversation-viewer.ts +0 -324
  119. package/.pi/extensions/lib/harness-subagents/vendored/ui/schedule-menu.ts +0 -110
  120. package/.pi/extensions/lib/harness-subagents/vendored/usage.ts +0 -71
  121. package/.pi/extensions/lib/harness-subagents/vendored/worktree.ts +0 -195
  122. /package/.pi/extensions/{00-ultimate-pi-system-prompt.ts → custom-system-prompt.ts} +0 -0
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * smoke-harness-plan — fixture validation for plan-phase pipeline (CI).
4
+ * Usage: node .pi/harness/evals/smoke/smoke-harness-plan.mjs --fixture
5
+ */
6
+
7
+ import { access, cp, mkdir, readFile, rm } from "node:fs/promises";
8
+ import { constants } from "node:fs";
9
+ import { dirname, join, resolve } from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+ import { parse as parseYaml } from "yaml";
12
+ import { validateExecutionPlan } from "../../../scripts/validate-plan-dag.mjs";
13
+
14
+ const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "..", "..");
15
+ const FIXTURE_DIR = join(dirname(fileURLToPath(import.meta.url)), "fixtures", "plan-phase");
16
+
17
+ function fail(msg) {
18
+ console.error(`smoke-harness-plan: FAIL: ${msg}`);
19
+ process.exit(1);
20
+ }
21
+
22
+ function ok(msg) {
23
+ console.log(` ✓ ${msg}`);
24
+ }
25
+
26
+ async function runFixture() {
27
+ const fixtureRoot = join(FIXTURE_DIR, "minimal-med");
28
+ try {
29
+ await access(fixtureRoot, constants.R_OK);
30
+ } catch {
31
+ fail(`missing fixture ${fixtureRoot}`);
32
+ }
33
+
34
+ const packetPath = join(fixtureRoot, "plan-packet.yaml");
35
+ const raw = await readFile(packetPath, "utf-8");
36
+ const packet = parseYaml(raw);
37
+ if (packet.contract_version !== "1.1.0") {
38
+ fail("fixture contract_version must be 1.1.0");
39
+ }
40
+ if (!packet.execution_plan) fail("fixture missing execution_plan");
41
+
42
+ const { status, errors } = validateExecutionPlan(packet, fixtureRoot);
43
+ if (status !== "pass") {
44
+ fail(`DAG validation failed: ${errors.join("; ")}`);
45
+ }
46
+ ok("fixture plan-packet.yaml DAG pass");
47
+
48
+ const reviewPath = join(fixtureRoot, "plan-review.md");
49
+ await access(reviewPath, constants.R_OK);
50
+ ok("plan-review.md present");
51
+
52
+ const debateRounds = ["review-round-r1.yaml", "review-round-r4.yaml"];
53
+ for (const name of debateRounds) {
54
+ const p = join(fixtureRoot, "artifacts", name);
55
+ await access(p, constants.R_OK);
56
+ const draft = parseYaml(await readFile(p, "utf-8"));
57
+ if (!draft.schema_version) fail(`${name} missing schema_version`);
58
+ }
59
+ ok("debate round YAML artifacts present");
60
+
61
+ const researchPath = join(fixtureRoot, "research-brief.yaml");
62
+ const research = parseYaml(await readFile(researchPath, "utf-8"));
63
+ if (!research.decomposition || !research.hypothesis) {
64
+ fail("research-brief.yaml missing decomposition/hypothesis");
65
+ }
66
+ ok("research-brief.yaml structure");
67
+
68
+ console.log("smoke-harness-plan: all fixture checks passed");
69
+ }
70
+
71
+ async function main() {
72
+ const args = process.argv.slice(2);
73
+ if (args.includes("--fixture")) {
74
+ await runFixture();
75
+ return;
76
+ }
77
+ if (args.includes("--live")) {
78
+ console.log(
79
+ "smoke-harness-plan: --live requires manual /harness-plan run; skipping in CI",
80
+ );
81
+ return;
82
+ }
83
+ fail("Usage: smoke-harness-plan.mjs --fixture | --live");
84
+ }
85
+
86
+ main().catch((err) => {
87
+ fail(err instanceof Error ? err.message : String(err));
88
+ });
@@ -24,7 +24,12 @@
24
24
  "harness_drift_report",
25
25
  "harness_eval_verdict",
26
26
  "harness_sentrux_signal",
27
- "harness_observation"
27
+ "harness_observation",
28
+ "harness_subagent_spawned",
29
+ "harness_subagent_completed",
30
+ "harness_subagent_result_wait",
31
+ "harness_subagent_setup",
32
+ "harness_blackboard_op"
28
33
  ]
29
34
  },
30
35
  "distinct_id": {
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ultimate-pi.local/.pi/harness/specs/plan-execution-plan-brief.schema.json",
4
+ "title": "PlanExecutionPlanBrief",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "execution_plan"],
8
+ "properties": {
9
+ "schema_version": { "type": "string", "const": "1.0.0" },
10
+ "execution_plan": { "$ref": "plan-execution-plan.schema.json" },
11
+ "human_summary": { "type": "string" }
12
+ }
13
+ }
@@ -0,0 +1,255 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ultimate-pi.local/.pi/harness/specs/plan-execution-plan.schema.json",
4
+ "title": "ExecutionPlan",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "phases",
10
+ "work_items",
11
+ "sprint_contract",
12
+ "wbs_dictionary",
13
+ "risk_register",
14
+ "schedule_metadata",
15
+ "dag_validation"
16
+ ],
17
+ "properties": {
18
+ "schema_version": { "type": "string", "const": "1.0.0" },
19
+ "phases": {
20
+ "type": "array",
21
+ "minItems": 1,
22
+ "items": { "$ref": "#/$defs/phase" }
23
+ },
24
+ "work_items": {
25
+ "type": "array",
26
+ "minItems": 1,
27
+ "items": { "$ref": "#/$defs/work_item" }
28
+ },
29
+ "sprint_contract": { "$ref": "#/$defs/sprint_contract" },
30
+ "wbs_dictionary": {
31
+ "type": "array",
32
+ "items": { "$ref": "#/$defs/wbs_entry" }
33
+ },
34
+ "risk_register": {
35
+ "type": "array",
36
+ "items": { "$ref": "#/$defs/risk" }
37
+ },
38
+ "schedule_metadata": { "$ref": "#/$defs/schedule_metadata" },
39
+ "dag_validation": { "$ref": "#/$defs/dag_validation" }
40
+ },
41
+ "$defs": {
42
+ "phase": {
43
+ "type": "object",
44
+ "additionalProperties": false,
45
+ "required": [
46
+ "phase_id",
47
+ "name",
48
+ "objective",
49
+ "entry_criteria",
50
+ "exit_criteria",
51
+ "milestone",
52
+ "work_item_ids"
53
+ ],
54
+ "properties": {
55
+ "phase_id": { "type": "string", "minLength": 1 },
56
+ "name": { "type": "string", "minLength": 1 },
57
+ "objective": { "type": "string", "minLength": 1 },
58
+ "entry_criteria": {
59
+ "type": "array",
60
+ "minItems": 1,
61
+ "items": { "type": "string", "minLength": 1 }
62
+ },
63
+ "exit_criteria": {
64
+ "type": "array",
65
+ "minItems": 1,
66
+ "items": { "type": "string", "minLength": 1 }
67
+ },
68
+ "milestone": { "type": "string", "minLength": 1 },
69
+ "work_item_ids": {
70
+ "type": "array",
71
+ "minItems": 1,
72
+ "items": { "type": "string", "minLength": 1 }
73
+ }
74
+ }
75
+ },
76
+ "work_item": {
77
+ "type": "object",
78
+ "additionalProperties": false,
79
+ "required": [
80
+ "work_item_id",
81
+ "phase_id",
82
+ "title",
83
+ "description",
84
+ "depends_on",
85
+ "files",
86
+ "parallel_safe",
87
+ "done_criteria",
88
+ "acceptance_check_ids"
89
+ ],
90
+ "properties": {
91
+ "work_item_id": { "type": "string", "minLength": 1 },
92
+ "phase_id": { "type": "string", "minLength": 1 },
93
+ "title": { "type": "string", "minLength": 1 },
94
+ "description": { "type": "string", "minLength": 1 },
95
+ "depends_on": {
96
+ "type": "array",
97
+ "items": { "type": "string", "minLength": 1 }
98
+ },
99
+ "files": {
100
+ "type": "array",
101
+ "items": { "type": "string", "minLength": 1 }
102
+ },
103
+ "parallel_safe": { "type": "boolean" },
104
+ "non_code": { "type": "boolean" },
105
+ "done_criteria": { "$ref": "#/$defs/done_criteria" },
106
+ "acceptance_check_ids": {
107
+ "type": "array",
108
+ "minItems": 1,
109
+ "items": { "type": "string", "minLength": 1 }
110
+ }
111
+ }
112
+ },
113
+ "done_criteria": {
114
+ "type": "object",
115
+ "additionalProperties": false,
116
+ "required": ["type", "spec"],
117
+ "properties": {
118
+ "type": {
119
+ "type": "string",
120
+ "enum": ["command", "test", "lint", "manual", "artifact"]
121
+ },
122
+ "spec": { "type": "string", "minLength": 1 }
123
+ }
124
+ },
125
+ "sprint_contract": {
126
+ "type": "object",
127
+ "additionalProperties": false,
128
+ "required": [
129
+ "in_scope",
130
+ "out_of_scope",
131
+ "definition_of_done",
132
+ "assumptions",
133
+ "external_dependencies"
134
+ ],
135
+ "properties": {
136
+ "in_scope": {
137
+ "type": "array",
138
+ "items": { "type": "string", "minLength": 1 }
139
+ },
140
+ "out_of_scope": {
141
+ "type": "array",
142
+ "items": { "type": "string", "minLength": 1 }
143
+ },
144
+ "definition_of_done": { "type": "string", "minLength": 1 },
145
+ "assumptions": {
146
+ "type": "array",
147
+ "items": { "type": "string", "minLength": 1 }
148
+ },
149
+ "external_dependencies": {
150
+ "type": "array",
151
+ "items": { "type": "string", "minLength": 1 }
152
+ }
153
+ }
154
+ },
155
+ "wbs_entry": {
156
+ "type": "object",
157
+ "additionalProperties": false,
158
+ "required": [
159
+ "work_item_id",
160
+ "deliverable",
161
+ "owner_role",
162
+ "inputs",
163
+ "outputs"
164
+ ],
165
+ "properties": {
166
+ "work_item_id": { "type": "string", "minLength": 1 },
167
+ "deliverable": { "type": "string", "minLength": 1 },
168
+ "owner_role": {
169
+ "type": "string",
170
+ "enum": ["executor", "human", "research"]
171
+ },
172
+ "inputs": {
173
+ "type": "array",
174
+ "items": { "type": "string", "minLength": 1 }
175
+ },
176
+ "outputs": {
177
+ "type": "array",
178
+ "items": { "type": "string", "minLength": 1 }
179
+ }
180
+ }
181
+ },
182
+ "risk": {
183
+ "type": "object",
184
+ "additionalProperties": false,
185
+ "required": [
186
+ "risk_id",
187
+ "description",
188
+ "likelihood",
189
+ "impact",
190
+ "mitigation",
191
+ "linked_work_item_ids"
192
+ ],
193
+ "properties": {
194
+ "risk_id": { "type": "string", "minLength": 1 },
195
+ "description": { "type": "string", "minLength": 1 },
196
+ "likelihood": {
197
+ "type": "string",
198
+ "enum": ["low", "med", "high"]
199
+ },
200
+ "impact": {
201
+ "type": "string",
202
+ "enum": ["low", "med", "high"]
203
+ },
204
+ "mitigation": { "type": "string", "minLength": 1 },
205
+ "linked_work_item_ids": {
206
+ "type": "array",
207
+ "items": { "type": "string", "minLength": 1 }
208
+ }
209
+ }
210
+ },
211
+ "schedule_metadata": {
212
+ "type": "object",
213
+ "additionalProperties": false,
214
+ "required": [
215
+ "critical_path_work_item_ids",
216
+ "parallel_groups",
217
+ "schedule_baseline_note"
218
+ ],
219
+ "properties": {
220
+ "critical_path_work_item_ids": {
221
+ "type": "array",
222
+ "items": { "type": "string", "minLength": 1 }
223
+ },
224
+ "parallel_groups": {
225
+ "type": "array",
226
+ "items": {
227
+ "type": "array",
228
+ "items": { "type": "string", "minLength": 1 }
229
+ }
230
+ },
231
+ "schedule_baseline_note": { "type": "string", "minLength": 1 }
232
+ }
233
+ },
234
+ "dag_validation": {
235
+ "type": "object",
236
+ "additionalProperties": false,
237
+ "required": ["status", "topological_order", "cycles", "conflicts"],
238
+ "properties": {
239
+ "status": { "type": "string", "enum": ["pass", "fail"] },
240
+ "topological_order": {
241
+ "type": "array",
242
+ "items": { "type": "string", "minLength": 1 }
243
+ },
244
+ "cycles": {
245
+ "type": "array",
246
+ "items": { "type": "array", "items": { "type": "string" } }
247
+ },
248
+ "conflicts": {
249
+ "type": "array",
250
+ "items": { "type": "string", "minLength": 1 }
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://ultimate-pi.local/.pi/harness/specs/plan-packet.schema.json",
4
4
  "title": "PlanPacket",
5
- "description": "Plan-gated mutation contract emitted before execution.",
5
+ "description": "Plan-gated mutation contract emitted before execution (instance files: plan-packet.yaml).",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": [
@@ -14,7 +14,8 @@
14
14
  "assumptions",
15
15
  "risk_level",
16
16
  "acceptance_checks",
17
- "rollback_plan"
17
+ "rollback_plan",
18
+ "execution_plan"
18
19
  ],
19
20
  "properties": {
20
21
  "schema_version": {
@@ -23,7 +24,7 @@
23
24
  },
24
25
  "contract_version": {
25
26
  "type": "string",
26
- "const": "1.0.0"
27
+ "enum": ["1.0.0", "1.1.0"]
27
28
  },
28
29
  "plan_id": {
29
30
  "type": "string",
@@ -52,8 +53,13 @@
52
53
  "type": "array",
53
54
  "minItems": 1,
54
55
  "items": {
55
- "type": "string",
56
- "minLength": 1
56
+ "type": "object",
57
+ "additionalProperties": false,
58
+ "required": ["id", "description"],
59
+ "properties": {
60
+ "id": { "type": "string", "pattern": "^AC-[0-9]+$" },
61
+ "description": { "type": "string", "minLength": 1 }
62
+ }
57
63
  }
58
64
  },
59
65
  "rollback_plan": {
@@ -85,6 +91,9 @@
85
91
  }
86
92
  }
87
93
  }
94
+ },
95
+ "execution_plan": {
96
+ "$ref": "plan-execution-plan.schema.json"
88
97
  }
89
98
  }
90
99
  }
@@ -0,0 +1,68 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ultimate-pi.local/.pi/harness/specs/plan-review-round-draft.schema.json",
4
+ "title": "PlanReviewRoundDraft",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "round_index",
10
+ "round_summary",
11
+ "review_gate_ready",
12
+ "recommended_packet_patches"
13
+ ],
14
+ "properties": {
15
+ "schema_version": { "type": "string", "const": "1.0.0" },
16
+ "round_index": { "type": "integer", "minimum": 1, "maximum": 4 },
17
+ "debate_round_focus": {
18
+ "type": "string",
19
+ "enum": ["spec", "wbs", "schedule", "quality"]
20
+ },
21
+ "round_summary": { "type": "string", "minLength": 1 },
22
+ "validation_summary": { "type": "string" },
23
+ "adversary_summary": { "type": "string" },
24
+ "disputes": {
25
+ "type": "array",
26
+ "items": { "type": "string", "minLength": 1 }
27
+ },
28
+ "recommended_packet_patches": {
29
+ "type": "array",
30
+ "items": {
31
+ "type": "object",
32
+ "required": ["path", "value"],
33
+ "properties": {
34
+ "path": { "type": "string", "minLength": 1 },
35
+ "value": {}
36
+ }
37
+ }
38
+ },
39
+ "review_gate_ready": { "type": "boolean" },
40
+ "participants": {
41
+ "type": "array",
42
+ "items": { "type": "string", "minLength": 1 }
43
+ },
44
+ "claims": { "type": "array", "items": { "type": "string" } },
45
+ "rebuttals": { "type": "array", "items": { "type": "string" } },
46
+ "evidence_refs": { "type": "array", "items": { "type": "string" } },
47
+ "token_usage": {
48
+ "type": "object",
49
+ "properties": {
50
+ "per_agent": {
51
+ "type": "object",
52
+ "additionalProperties": { "type": "number" }
53
+ },
54
+ "round_total": { "type": "number" }
55
+ }
56
+ },
57
+ "consensus_delta": { "type": "number" },
58
+ "severity_scores": {
59
+ "type": "object",
60
+ "properties": {
61
+ "correctness": { "type": "number" },
62
+ "security": { "type": "number" },
63
+ "architecture": { "type": "number" },
64
+ "test_integrity": { "type": "number" }
65
+ }
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ultimate-pi.local/.pi/harness/specs/plan-sprint-audit-turn.schema.json",
4
+ "title": "PlanSprintAuditTurn",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "round_index", "gaps", "recommendation"],
8
+ "properties": {
9
+ "schema_version": { "type": "string", "const": "1.0.0" },
10
+ "round_index": { "type": "integer", "minimum": 1, "maximum": 4 },
11
+ "gaps": {
12
+ "type": "array",
13
+ "items": { "type": "string", "minLength": 1 }
14
+ },
15
+ "checkpoint_issues": {
16
+ "type": "array",
17
+ "items": { "type": "string", "minLength": 1 }
18
+ },
19
+ "done_criteria_issues": {
20
+ "type": "array",
21
+ "items": { "type": "string", "minLength": 1 }
22
+ },
23
+ "recommendation": {
24
+ "type": "string",
25
+ "enum": ["proceed", "revise"]
26
+ },
27
+ "human_summary": { "type": "string" }
28
+ }
29
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ultimate-pi.local/.pi/harness/specs/plan-stack-brief.schema.json",
4
+ "title": "PlanStackBrief",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "problem_framing",
10
+ "constraints",
11
+ "options",
12
+ "recommended_primary",
13
+ "rationale"
14
+ ],
15
+ "properties": {
16
+ "schema_version": { "type": "string", "const": "1.0.0" },
17
+ "problem_framing": { "type": "string", "minLength": 1 },
18
+ "constraints": {
19
+ "type": "array",
20
+ "items": { "type": "string", "minLength": 1 }
21
+ },
22
+ "options": {
23
+ "type": "array",
24
+ "minItems": 1,
25
+ "items": { "$ref": "#/$defs/stack_option" }
26
+ },
27
+ "recommended_primary": { "type": "string", "minLength": 1 },
28
+ "rationale": { "type": "string", "minLength": 1 },
29
+ "open_questions": {
30
+ "type": "array",
31
+ "items": { "type": "string", "minLength": 1 }
32
+ }
33
+ },
34
+ "$defs": {
35
+ "stack_option": {
36
+ "type": "object",
37
+ "additionalProperties": false,
38
+ "required": [
39
+ "name",
40
+ "category",
41
+ "fit_summary",
42
+ "tradeoffs",
43
+ "risks",
44
+ "evidence_refs",
45
+ "recommendation_rank"
46
+ ],
47
+ "properties": {
48
+ "name": { "type": "string" },
49
+ "category": { "type": "string" },
50
+ "fit_summary": { "type": "string" },
51
+ "tradeoffs": {
52
+ "type": "object",
53
+ "required": ["pros", "cons"],
54
+ "properties": {
55
+ "pros": { "type": "array", "items": { "type": "string" } },
56
+ "cons": { "type": "array", "items": { "type": "string" } }
57
+ }
58
+ },
59
+ "risks": { "type": "array", "items": { "type": "string" } },
60
+ "evidence_refs": { "type": "array", "items": { "type": "string" } },
61
+ "recommendation_rank": { "type": "integer", "minimum": 1 }
62
+ }
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ultimate-pi.local/.pi/harness/specs/plan-validation-turn.schema.json",
4
+ "title": "PlanValidationTurn",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "round_index",
10
+ "debate_round_focus",
11
+ "checks",
12
+ "overall_ready"
13
+ ],
14
+ "properties": {
15
+ "schema_version": { "type": "string", "const": "1.0.0" },
16
+ "round_index": { "type": "integer", "minimum": 1, "maximum": 4 },
17
+ "debate_round_focus": {
18
+ "type": "string",
19
+ "enum": ["spec", "wbs", "schedule", "quality"]
20
+ },
21
+ "checks": {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "object",
25
+ "required": ["id", "status", "evidence"],
26
+ "properties": {
27
+ "id": { "type": "string" },
28
+ "status": { "type": "string", "enum": ["pass", "warn", "fail"] },
29
+ "evidence": { "type": "string" },
30
+ "work_item_id": { "type": "string" },
31
+ "phase_id": { "type": "string" }
32
+ }
33
+ }
34
+ },
35
+ "mitigations": {
36
+ "type": "array",
37
+ "items": { "type": "string", "minLength": 1 }
38
+ },
39
+ "overall_ready": { "type": "boolean" },
40
+ "human_summary": { "type": "string" }
41
+ }
42
+ }
@@ -46,7 +46,17 @@
46
46
  "minItems": 2,
47
47
  "items": {
48
48
  "type": "string",
49
- "enum": ["EvaluatorAgent", "AdversaryAgent", "TieBreakerAgent"]
49
+ "enum": [
50
+ "EvaluatorAgent",
51
+ "AdversaryAgent",
52
+ "TieBreakerAgent",
53
+ "PlanEvaluatorAgent",
54
+ "PlanAdversaryAgent",
55
+ "HypothesisValidatorAgent",
56
+ "SprintContractAuditorAgent",
57
+ "ReviewIntegratorAgent",
58
+ "StackResearchAgent"
59
+ ]
50
60
  }
51
61
  },
52
62
  "claims": {
@@ -80,7 +90,7 @@
80
90
  "additionalProperties": {
81
91
  "type": "integer",
82
92
  "minimum": 0,
83
- "maximum": 2500
93
+ "maximum": 35000
84
94
  }
85
95
  },
86
96
  "round_total": {
@@ -101,19 +111,16 @@
101
111
  "properties": {
102
112
  "name": {
103
113
  "type": "string",
104
- "const": "aggressive"
114
+ "enum": ["aggressive", "plan"]
105
115
  },
106
116
  "max_rounds": {
107
- "type": "integer",
108
- "const": 6
117
+ "type": "integer"
109
118
  },
110
119
  "round_token_cap": {
111
- "type": "integer",
112
- "const": 2500
120
+ "type": "integer"
113
121
  },
114
122
  "debate_global_cap": {
115
- "type": "integer",
116
- "const": 35000
123
+ "type": "integer"
117
124
  }
118
125
  }
119
126
  },