ralphctl 0.2.3 → 0.2.5

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 (32) hide show
  1. package/README.md +21 -9
  2. package/dist/{add-K7LNOYQ4.mjs → add-3T225IX5.mjs} +3 -3
  3. package/dist/{add-DWNLZQ7Q.mjs → add-6A5432U2.mjs} +4 -4
  4. package/dist/{chunk-QYF7QIZJ.mjs → chunk-742XQ7FL.mjs} +3 -3
  5. package/dist/{chunk-ORVGM6EV.mjs → chunk-CSICORGV.mjs} +583 -204
  6. package/dist/{chunk-V4ZUDZCG.mjs → chunk-DUU5346E.mjs} +1 -1
  7. package/dist/{chunk-7TBO6GOT.mjs → chunk-EUNAUHC3.mjs} +1 -1
  8. package/dist/{chunk-GLDPHKEW.mjs → chunk-IB6OCKZW.mjs} +15 -2
  9. package/dist/{chunk-ITRZMBLJ.mjs → chunk-JRFOUFD3.mjs} +1 -1
  10. package/dist/{chunk-LAERLCL5.mjs → chunk-UBPZHHCD.mjs} +2 -2
  11. package/dist/cli.mjs +29 -12
  12. package/dist/{create-5MILNF7E.mjs → create-MYGOWO2F.mjs} +3 -3
  13. package/dist/{handle-2BACSJLR.mjs → handle-TA4MYNQJ.mjs} +1 -1
  14. package/dist/{project-XC7AXA4B.mjs → project-YONEJICR.mjs} +2 -2
  15. package/dist/prompts/harness-context.md +5 -0
  16. package/dist/prompts/ideate-auto.md +34 -17
  17. package/dist/prompts/ideate.md +18 -2
  18. package/dist/prompts/plan-auto.md +7 -12
  19. package/dist/prompts/plan-common.md +18 -2
  20. package/dist/prompts/plan-interactive.md +8 -13
  21. package/dist/prompts/signals-evaluation.md +6 -0
  22. package/dist/prompts/signals-planning.md +5 -0
  23. package/dist/prompts/signals-task.md +7 -0
  24. package/dist/prompts/task-evaluation-resume.md +34 -0
  25. package/dist/prompts/task-evaluation.md +8 -0
  26. package/dist/prompts/task-execution.md +10 -19
  27. package/dist/prompts/validation-checklist.md +14 -0
  28. package/dist/{resolver-CFY6DIOP.mjs → resolver-RXEY6EJE.mjs} +2 -2
  29. package/dist/{sprint-F4VRAEWZ.mjs → sprint-FGLWYWKX.mjs} +2 -2
  30. package/dist/{wizard-RCQ4QQOL.mjs → wizard-XZ7OGBCJ.mjs} +6 -6
  31. package/package.json +1 -1
  32. package/schemas/tasks.schema.json +10 -1
@@ -0,0 +1,14 @@
1
+ ## Pre-Output Validation
2
+
3
+ Before writing the JSON output, verify EVERY item:
4
+
5
+ 1. **Requirements complete** — Problem statement, acceptance criteria, and scope boundaries are all present (when applicable)
6
+ 2. **No file overlap** — No two tasks modify the same files (or overlap is explicitly delineated in steps)
7
+ 3. **Foundations before dependents** — Tasks are ordered so prerequisites come first
8
+ 4. **Valid dependencies** — All `blockedBy` references point to earlier tasks with real code dependencies
9
+ 5. **Maximized parallelism** — Independent tasks do NOT block each other unnecessarily
10
+ 6. **Precise steps** — Every task has 3+ specific, actionable steps with file references
11
+ 7. **Verification steps** — Every task ends with project-appropriate verification commands
12
+ 8. **`projectPath` assigned** — Every task uses a path from the available repositories
13
+ 9. **Verification criteria** — Every task has 2-4 `verificationCriteria` that are testable and unambiguous
14
+ 10. **Output format compliance** — Output matches the schema exactly: no markdown fences around JSON, no commentary, no surrounding text. The harness parses raw output as JSON.
@@ -11,7 +11,7 @@ var dynamicResolvers = {
11
11
  "--project": async () => {
12
12
  const result = await wrapAsync(
13
13
  async () => {
14
- const { listProjects } = await import("./project-XC7AXA4B.mjs");
14
+ const { listProjects } = await import("./project-YONEJICR.mjs");
15
15
  return listProjects();
16
16
  },
17
17
  (err) => new IOError("Failed to load projects for completion", err instanceof Error ? err : void 0)
@@ -45,7 +45,7 @@ var configValueCompletions = {
45
45
  async function getSprintCompletions() {
46
46
  const result = await wrapAsync(
47
47
  async () => {
48
- const { listSprints } = await import("./sprint-F4VRAEWZ.mjs");
48
+ const { listSprints } = await import("./sprint-FGLWYWKX.mjs");
49
49
  return listSprints();
50
50
  },
51
51
  (err) => new IOError("Failed to load sprints for completion", err instanceof Error ? err : void 0)
@@ -12,9 +12,9 @@ import {
12
12
  listSprints,
13
13
  resolveSprintId,
14
14
  saveSprint
15
- } from "./chunk-ITRZMBLJ.mjs";
15
+ } from "./chunk-JRFOUFD3.mjs";
16
16
  import "./chunk-OEUJDSHY.mjs";
17
- import "./chunk-GLDPHKEW.mjs";
17
+ import "./chunk-IB6OCKZW.mjs";
18
18
  import {
19
19
  NoCurrentSprintError,
20
20
  SprintNotFoundError,
@@ -3,25 +3,25 @@ import {
3
3
  sprintPlanCommand,
4
4
  sprintRefineCommand,
5
5
  sprintStartCommand
6
- } from "./chunk-ORVGM6EV.mjs";
6
+ } from "./chunk-CSICORGV.mjs";
7
7
  import "./chunk-7LZ6GOGN.mjs";
8
8
  import {
9
9
  sprintCreateCommand
10
- } from "./chunk-V4ZUDZCG.mjs";
10
+ } from "./chunk-DUU5346E.mjs";
11
11
  import {
12
12
  addSingleTicketInteractive
13
- } from "./chunk-QYF7QIZJ.mjs";
13
+ } from "./chunk-742XQ7FL.mjs";
14
14
  import "./chunk-7TG3EAQ2.mjs";
15
- import "./chunk-7TBO6GOT.mjs";
15
+ import "./chunk-EUNAUHC3.mjs";
16
16
  import {
17
17
  getCurrentSprint,
18
18
  getSprint
19
- } from "./chunk-ITRZMBLJ.mjs";
19
+ } from "./chunk-JRFOUFD3.mjs";
20
20
  import {
21
21
  ensureError,
22
22
  wrapAsync
23
23
  } from "./chunk-OEUJDSHY.mjs";
24
- import "./chunk-GLDPHKEW.mjs";
24
+ import "./chunk-IB6OCKZW.mjs";
25
25
  import "./chunk-EDJX7TT6.mjs";
26
26
  import {
27
27
  colors,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralphctl",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Agent harness for long-running AI coding tasks — orchestrates Claude Code & GitHub Copilot across repositories",
5
5
  "homepage": "https://github.com/lukas-grigis/ralphctl",
6
6
  "type": "module",
@@ -82,7 +82,16 @@
82
82
  },
83
83
  "evaluationOutput": {
84
84
  "type": "string",
85
- "description": "Output from the evaluation run (truncated to 2000 chars)"
85
+ "description": "Output from the evaluation run (truncated to 2000 chars; full critique in evaluationFile)"
86
+ },
87
+ "evaluationStatus": {
88
+ "type": "string",
89
+ "enum": ["passed", "failed", "malformed"],
90
+ "description": "Evaluation outcome discriminator. 'malformed' = evaluator output had no parseable signal."
91
+ },
92
+ "evaluationFile": {
93
+ "type": "string",
94
+ "description": "Sidecar file path containing the full untruncated critique"
86
95
  }
87
96
  }
88
97
  }