millhouse 0.3.9 → 1.0.1

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 (71) hide show
  1. package/README.md +88 -161
  2. package/dist/analysis/issue-analyzer.d.ts +6 -1
  3. package/dist/analysis/issue-analyzer.d.ts.map +1 -1
  4. package/dist/analysis/issue-analyzer.js +45 -13
  5. package/dist/analysis/issue-analyzer.js.map +1 -1
  6. package/dist/analysis/plan-parser.d.ts +7 -1
  7. package/dist/analysis/plan-parser.d.ts.map +1 -1
  8. package/dist/analysis/plan-parser.js +81 -22
  9. package/dist/analysis/plan-parser.js.map +1 -1
  10. package/dist/cli/cleanup.d.ts +1 -1
  11. package/dist/cli/cleanup.d.ts.map +1 -1
  12. package/dist/cli/cleanup.js +24 -28
  13. package/dist/cli/cleanup.js.map +1 -1
  14. package/dist/cli/commands/init.d.ts +6 -0
  15. package/dist/cli/commands/init.d.ts.map +1 -0
  16. package/dist/cli/commands/init.js +156 -0
  17. package/dist/cli/commands/init.js.map +1 -0
  18. package/dist/cli/commands/list.d.ts +6 -0
  19. package/dist/cli/commands/list.d.ts.map +1 -0
  20. package/dist/cli/commands/list.js +111 -0
  21. package/dist/cli/commands/list.js.map +1 -0
  22. package/dist/cli/commands/load.d.ts +2 -0
  23. package/dist/cli/commands/load.d.ts.map +1 -0
  24. package/dist/cli/commands/load.js +111 -0
  25. package/dist/cli/commands/load.js.map +1 -0
  26. package/dist/cli/commands/resume.d.ts.map +1 -1
  27. package/dist/cli/commands/resume.js +5 -28
  28. package/dist/cli/commands/resume.js.map +1 -1
  29. package/dist/cli/commands/run.d.ts +2 -3
  30. package/dist/cli/commands/run.d.ts.map +1 -1
  31. package/dist/cli/commands/run.js +44 -237
  32. package/dist/cli/commands/run.js.map +1 -1
  33. package/dist/cli/commands/save.d.ts +2 -0
  34. package/dist/cli/commands/save.d.ts.map +1 -0
  35. package/dist/cli/commands/save.js +220 -0
  36. package/dist/cli/commands/save.js.map +1 -0
  37. package/dist/cli/commands/setup.js +3 -3
  38. package/dist/cli/progress-display.d.ts +7 -14
  39. package/dist/cli/progress-display.d.ts.map +1 -1
  40. package/dist/cli/progress-display.js +94 -102
  41. package/dist/cli/progress-display.js.map +1 -1
  42. package/dist/core/orchestrator.d.ts +11 -12
  43. package/dist/core/orchestrator.d.ts.map +1 -1
  44. package/dist/core/orchestrator.js +150 -113
  45. package/dist/core/orchestrator.js.map +1 -1
  46. package/dist/core/scheduler.d.ts +6 -1
  47. package/dist/core/scheduler.d.ts.map +1 -1
  48. package/dist/core/scheduler.js +48 -9
  49. package/dist/core/scheduler.js.map +1 -1
  50. package/dist/execution/claude-runner.d.ts +2 -2
  51. package/dist/execution/claude-runner.d.ts.map +1 -1
  52. package/dist/execution/claude-runner.js +1 -1
  53. package/dist/execution/claude-runner.js.map +1 -1
  54. package/dist/index.js +30 -29
  55. package/dist/index.js.map +1 -1
  56. package/dist/storage/json-store.d.ts +1 -0
  57. package/dist/storage/json-store.d.ts.map +1 -1
  58. package/dist/storage/json-store.js +36 -0
  59. package/dist/storage/json-store.js.map +1 -1
  60. package/dist/storage/worklist-store.d.ts +19 -0
  61. package/dist/storage/worklist-store.d.ts.map +1 -0
  62. package/dist/storage/worklist-store.js +131 -0
  63. package/dist/storage/worklist-store.js.map +1 -0
  64. package/dist/types.d.ts +38 -70
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/types.js +3 -24
  67. package/dist/types.js.map +1 -1
  68. package/package.json +3 -5
  69. package/prompts/issue-analysis.prompt.md +56 -22
  70. package/prompts/plan-analysis.prompt.md +48 -10
  71. package/commands/millhouse.md +0 -223
package/dist/types.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { z } from 'zod';
2
1
  export interface WorkItem {
3
2
  id: number;
4
3
  title: string;
@@ -22,6 +21,8 @@ export interface AnalyzedIssue extends GitHubIssue {
22
21
  affectedPaths: string[];
23
22
  dependencies: number[];
24
23
  analyzedAt: string;
24
+ githubIssueNumber?: number;
25
+ noWorkNeeded?: boolean;
25
26
  }
26
27
  export declare function issueToWorkItem(issue: AnalyzedIssue): AnalyzedWorkItem;
27
28
  export type TaskStatus = 'queued' | 'blocked' | 'ready' | 'in-progress' | 'completed' | 'failed';
@@ -57,75 +58,29 @@ export interface WorktreeInfo {
57
58
  branch: string;
58
59
  createdAt: string;
59
60
  }
60
- export declare const ConfigSchema: z.ZodObject<{
61
- execution: z.ZodDefault<z.ZodObject<{
62
- concurrency: z.ZodDefault<z.ZodNumber>;
63
- baseBranch: z.ZodDefault<z.ZodString>;
64
- maxBudgetPerIssue: z.ZodDefault<z.ZodNumber>;
65
- maxTotalBudget: z.ZodDefault<z.ZodNumber>;
66
- continueOnError: z.ZodDefault<z.ZodBoolean>;
67
- }, "strip", z.ZodTypeAny, {
68
- concurrency: number;
69
- baseBranch: string;
70
- maxBudgetPerIssue: number;
71
- maxTotalBudget: number;
72
- continueOnError: boolean;
73
- }, {
74
- concurrency?: number | undefined;
75
- baseBranch?: string | undefined;
76
- maxBudgetPerIssue?: number | undefined;
77
- maxTotalBudget?: number | undefined;
78
- continueOnError?: boolean | undefined;
79
- }>>;
80
- pullRequests: z.ZodDefault<z.ZodObject<{
81
- createAsDraft: z.ZodDefault<z.ZodBoolean>;
82
- mergeStrategy: z.ZodDefault<z.ZodEnum<["merge", "squash", "rebase"]>>;
83
- branchPrefix: z.ZodDefault<z.ZodString>;
84
- }, "strip", z.ZodTypeAny, {
85
- createAsDraft: boolean;
86
- mergeStrategy: "merge" | "squash" | "rebase";
87
- branchPrefix: string;
88
- }, {
89
- createAsDraft?: boolean | undefined;
90
- mergeStrategy?: "merge" | "squash" | "rebase" | undefined;
91
- branchPrefix?: string | undefined;
92
- }>>;
93
- }, "strip", z.ZodTypeAny, {
94
- execution: {
95
- concurrency: number;
96
- baseBranch: string;
97
- maxBudgetPerIssue: number;
98
- maxTotalBudget: number;
99
- continueOnError: boolean;
100
- };
101
- pullRequests: {
102
- createAsDraft: boolean;
103
- mergeStrategy: "merge" | "squash" | "rebase";
104
- branchPrefix: string;
105
- };
106
- }, {
107
- execution?: {
108
- concurrency?: number | undefined;
109
- baseBranch?: string | undefined;
110
- maxBudgetPerIssue?: number | undefined;
111
- maxTotalBudget?: number | undefined;
112
- continueOnError?: boolean | undefined;
113
- } | undefined;
114
- pullRequests?: {
115
- createAsDraft?: boolean | undefined;
116
- mergeStrategy?: "merge" | "squash" | "rebase" | undefined;
117
- branchPrefix?: string | undefined;
118
- } | undefined;
119
- }>;
120
- export type Config = z.infer<typeof ConfigSchema>;
121
- export declare const MILLHOUSE_LABELS: {
122
- readonly QUEUED: "millhouse:queued";
123
- readonly IN_PROGRESS: "millhouse:in-progress";
124
- readonly BLOCKED: "millhouse:blocked";
125
- readonly FAILED: "millhouse:failed";
126
- readonly DONE: "millhouse:done";
127
- };
128
- export type MillhouseLabel = typeof MILLHOUSE_LABELS[keyof typeof MILLHOUSE_LABELS];
61
+ export type WorklistItemStatus = 'pending' | 'completed' | 'failed';
62
+ export interface WorklistItem {
63
+ id: number;
64
+ title: string;
65
+ body: string;
66
+ dependencies: number[];
67
+ status: WorklistItemStatus;
68
+ githubIssueNumber?: number;
69
+ noWorkNeeded?: boolean;
70
+ startedAt?: string;
71
+ completedAt?: string;
72
+ error?: string;
73
+ }
74
+ export interface Worklist {
75
+ version: 1;
76
+ createdAt: string;
77
+ updatedAt: string;
78
+ source: 'plan' | 'github';
79
+ title?: string;
80
+ description?: string;
81
+ indexIssueNumber?: number;
82
+ items: WorklistItem[];
83
+ }
129
84
  export type SchedulerEvent = {
130
85
  type: 'task-started';
131
86
  issueNumber: number;
@@ -141,4 +96,17 @@ export type SchedulerEvent = {
141
96
  type: 'tasks-unblocked';
142
97
  issueNumbers: number[];
143
98
  };
99
+ export interface JsonPlanItem {
100
+ id: number;
101
+ title: string;
102
+ body: string;
103
+ dependencies: number[];
104
+ }
105
+ export interface JsonPlan {
106
+ version: 1;
107
+ name?: string;
108
+ createdAt: string;
109
+ sourcePlan?: string;
110
+ items: JsonPlanItem[];
111
+ }
144
112
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,4 +1,6 @@
1
- import { z } from 'zod';
1
+ // =============================================================================
2
+ // Work Items (abstraction for both GitHub issues and local items)
3
+ // =============================================================================
2
4
  // Convert AnalyzedIssue to AnalyzedWorkItem
3
5
  export function issueToWorkItem(issue) {
4
6
  return {
@@ -10,27 +12,4 @@ export function issueToWorkItem(issue) {
10
12
  analyzedAt: issue.analyzedAt,
11
13
  };
12
14
  }
13
- // Configuration schema
14
- export const ConfigSchema = z.object({
15
- execution: z.object({
16
- concurrency: z.number().min(1).max(16).default(8),
17
- baseBranch: z.string().default('main'),
18
- maxBudgetPerIssue: z.number().positive().default(5.0),
19
- maxTotalBudget: z.number().positive().default(100.0),
20
- continueOnError: z.boolean().default(true),
21
- }).default({}),
22
- pullRequests: z.object({
23
- createAsDraft: z.boolean().default(true),
24
- mergeStrategy: z.enum(['merge', 'squash', 'rebase']).default('squash'),
25
- branchPrefix: z.string().default('millhouse/issue-'),
26
- }).default({}),
27
- });
28
- // Millhouse labels
29
- export const MILLHOUSE_LABELS = {
30
- QUEUED: 'millhouse:queued',
31
- IN_PROGRESS: 'millhouse:in-progress',
32
- BLOCKED: 'millhouse:blocked',
33
- FAILED: 'millhouse:failed',
34
- DONE: 'millhouse:done',
35
- };
36
15
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0CxB,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,MAAM;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAiDD,uBAAuB;AACvB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QACtC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACpD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACd,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QACrB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;KACrD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACf,CAAC,CAAC;AAIH,mBAAmB;AACnB,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,kBAAkB;IAC1B,WAAW,EAAE,uBAAuB;IACpC,OAAO,EAAE,mBAAmB;IAC5B,MAAM,EAAE,kBAAkB;IAC1B,IAAI,EAAE,gBAAgB;CACd,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kEAAkE;AAClE,gFAAgF;AAwChF,4CAA4C;AAC5C,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,MAAM;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "millhouse",
3
- "version": "0.3.9",
4
- "description": "Orchestrate parallel Claude Code instances to implement GitHub issues or plan files",
3
+ "version": "1.0.1",
4
+ "description": "Orchestrate parallel Claude Code instances to implement work items",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -9,7 +9,6 @@
9
9
  },
10
10
  "files": [
11
11
  "dist",
12
- "commands",
13
12
  "prompts"
14
13
  ],
15
14
  "scripts": {
@@ -36,8 +35,7 @@
36
35
  "commander": "^12.1.0",
37
36
  "graphlib": "^2.1.8",
38
37
  "ora": "^8.0.1",
39
- "string-width": "^8.1.0",
40
- "zod": "^3.23.0"
38
+ "string-width": "^8.1.0"
41
39
  },
42
40
  "devDependencies": {
43
41
  "@types/graphlib": "^2.1.12",
@@ -1,4 +1,4 @@
1
- Analyze these GitHub issues and determine their dependencies and execution order.
1
+ Analyze these GitHub issues to determine their dependencies and optimal execution order.
2
2
 
3
3
  ## Issues to Analyze
4
4
 
@@ -8,27 +8,61 @@ Analyze these GitHub issues and determine their dependencies and execution order
8
8
 
9
9
  ## Your Task
10
10
 
11
- Analyze each issue and determine:
11
+ **DO NOT use TodoWrite, TaskCreate, or any task/todo tools. Only use Read, Glob, Grep, and Bash.**
12
+
13
+ 1. First, use Read, Glob, and Grep to explore the codebase structure
14
+ 2. Then analyze each issue semantically to determine dependencies
15
+
16
+ For each issue determine:
12
17
  1. **dependencies**: Which issues MUST be completed BEFORE this issue can start
13
18
  2. **affectedPaths**: File paths this issue will likely create or modify
19
+ 3. **noWorkNeeded**: True if this is a meta/index issue that requires no actual code changes (e.g., tracking issues, index issues that just link to other issues, documentation-only issues)
20
+
21
+ Also provide a summary title and description for this entire set of issues.
22
+
23
+ ## Dependency Analysis Guidelines
24
+
25
+ Analyze the **semantic meaning** of each issue, not just explicit keywords. Consider:
26
+
27
+ - **Explicit mentions**: "depends on #X", "after #X", "blocked by #X", "requires #X"
28
+ - **Logical ordering**: If issue A creates something that issue B uses, B depends on A
29
+ - **Feature flow**: Setup/infrastructure issues before features that use them
30
+ - **Data dependencies**: Schema/model changes before code that uses those models
31
+ - **API dependencies**: API endpoints before UI that calls them
32
+
33
+ Issues written by humans may not have explicit dependency markers - use your understanding of software development to infer the correct order.
34
+
35
+ ---
36
+
37
+ ## Required Output Format
38
+
39
+ After exploring the codebase, output ONLY a JSON object. No other text after the JSON.
40
+
41
+ ```json
42
+ {
43
+ "title": "Short summary title for all issues (e.g. 'Add user authentication')",
44
+ "description": "A 1-2 sentence summary of what these issues accomplish together.",
45
+ "issues": [
46
+ {
47
+ "issueNumber": 1,
48
+ "dependencies": [],
49
+ "affectedPaths": ["src/path/to/file.ts"],
50
+ "noWorkNeeded": false
51
+ },
52
+ {
53
+ "issueNumber": 2,
54
+ "dependencies": [1],
55
+ "affectedPaths": ["src/other/file.ts"],
56
+ "noWorkNeeded": false
57
+ },
58
+ {
59
+ "issueNumber": 3,
60
+ "dependencies": [1, 2],
61
+ "affectedPaths": [],
62
+ "noWorkNeeded": true
63
+ }
64
+ ]
65
+ }
66
+ ```
14
67
 
15
- Respond with ONLY a JSON array (no markdown, no explanation):
16
- [
17
- {
18
- "issueNumber": 1,
19
- "dependencies": [],
20
- "affectedPaths": ["src/path/to/file.ts"]
21
- },
22
- {
23
- "issueNumber": 2,
24
- "dependencies": [1],
25
- "affectedPaths": ["src/other/file.ts"]
26
- }
27
- ]
28
-
29
- Rules:
30
- - Look for explicit dependency mentions: "depends on #X", "after #X", "blocked by #X", "requires #X"
31
- - Also infer logical dependencies (e.g., if issue B imports from a file that issue A creates)
32
- - Only include dependencies between issues in this list
33
- - affectedPaths should be specific file paths mentioned or implied
34
- - Respond with ONLY valid JSON, nothing else
68
+ The JSON must be valid. Only include dependencies between issues in this list.
@@ -1,18 +1,56 @@
1
- IMPORTANT: Your response must be ONLY a valid JSON array. No explanations, no markdown, no other text.
1
+ Break this plan into discrete work items for parallel execution.
2
2
 
3
- Break this plan into discrete work items:
3
+ ## Plan
4
4
 
5
5
  {{plan}}
6
6
 
7
7
  ---
8
8
 
9
- Output a JSON array where each item has:
10
- - "id": number (starting from 1)
11
- - "title": string (short title)
12
- - "body": string (full implementation details, file paths, acceptance criteria)
13
- - "dependencies": number[] (IDs of prerequisite work items)
9
+ ## Your Task
14
10
 
15
- RESPOND WITH ONLY THE JSON ARRAY. Example format:
16
- [{"id":1,"title":"First task","body":"Details...","dependencies":[]},{"id":2,"title":"Second task","body":"Details...","dependencies":[1]}]
11
+ 1. Use Read, Glob, and Grep tools to explore the codebase
12
+ 2. Output a JSON object with summary and work items
17
13
 
18
- DO NOT include any text before or after the JSON. DO NOT use markdown code blocks. ONLY output the JSON array.
14
+ **DO NOT use TodoWrite, TaskCreate, or any task/todo tools. Only use Read, Glob, Grep, and Bash.**
15
+
16
+ ## Context
17
+
18
+ Work items will be executed by parallel Claude instances in isolated contexts. Each item must be completely self-contained with all information needed.
19
+
20
+ ## Work Item Guidelines
21
+
22
+ - Each item should be completable in one session
23
+ - Include exact file paths, function signatures, patterns to follow
24
+ - Use `"dependencies": [1, 2]` for prerequisite items
25
+ - Only add dependencies that are truly required
26
+
27
+ ---
28
+
29
+ ## Required Output Format
30
+
31
+ After exploring the codebase, output ONLY a JSON object. No other text after the JSON.
32
+
33
+ Use \n for newlines in body text. Keep body content concise.
34
+
35
+ ```json
36
+ {
37
+ "title": "Short summary title for the whole plan (e.g. 'Add user authentication')",
38
+ "description": "A 1-2 sentence summary of what this plan accomplishes overall.",
39
+ "items": [
40
+ {
41
+ "id": 1,
42
+ "title": "Short title",
43
+ "body": "Implementation details. File: src/foo.ts. Pattern: follow existing style.",
44
+ "dependencies": []
45
+ },
46
+ {
47
+ "id": 2,
48
+ "title": "Another task",
49
+ "body": "More details here.",
50
+ "dependencies": [1]
51
+ }
52
+ ]
53
+ }
54
+ ```
55
+
56
+ The JSON must be valid. Use \n for newlines, escape quotes with backslash.
@@ -1,223 +0,0 @@
1
- # Millhouse
2
-
3
- Orchestrate parallel Claude Code instances to implement work items.
4
-
5
- ## Usage
6
-
7
- Parse $ARGUMENTS to determine the subcommand:
8
-
9
- - `/millhouse plan [plan-file]` - Refine a plan for millhouse execution
10
- - `/millhouse issues [plan-file]` - Create GitHub issues from a plan
11
-
12
- ---
13
-
14
- ## /millhouse plan
15
-
16
- Refine and improve a plan to make it suitable for millhouse execution. This should be fast and unattended - don't ask clarifying questions, just improve the plan.
17
-
18
- ### Context
19
-
20
- Millhouse executes work items in **parallel using separate Claude Code instances**, each running **unattended in its own context window**. This means:
21
-
22
- - Each work item is a fresh start with no memory of previous work
23
- - Work items must be completely self-contained
24
- - Nothing can be assumed or left implicit
25
-
26
- ### Instructions
27
-
28
- 1. Read the plan from the file path argument. If no file given, look for plan.md or ask for the filename only.
29
- 2. Analyze the plan and rewrite it following the guidelines below
30
- 3. Save the improved plan to the same file (overwrite), or `plan.md` if it was a new plan
31
- 4. **Do not ask questions about features, scope, or implementation details** - work with what's given
32
- 5. **Do not suggest additions** - only restructure and clarify what's already in the plan
33
-
34
- ### Plan Improvement Guidelines
35
-
36
- Transform the plan to be millhouse-ready:
37
-
38
- **1. Separate work items clearly**
39
- - Each work item should be a distinct section
40
- - Work items will run in separate contexts, stage by stage
41
- - Make boundaries between items obvious
42
-
43
- **2. Split into appropriately-sized tasks**
44
- - Break large tasks into smaller sub-tasks where necessary
45
- - Each task should be small enough to complete in one go, unattended
46
- - A task that's "create an entire application" is too big
47
- - A task that's "create a function that adds two numbers" might be too small (unless it's a dependency)
48
-
49
- **3. Make each task self-contained**
50
- - Include ALL context needed to implement the task
51
- - Specify exact file paths to create or modify
52
- - Include function signatures, types, interfaces
53
- - Don't assume knowledge from other tasks
54
-
55
- **4. Add thorough acceptance criteria**
56
- - How do we know this task is done?
57
- - What commands verify it works? (e.g., `npm test`, `go build`)
58
- - What should the output look like?
59
- - What edge cases should be handled?
60
-
61
- **5. Add testing instructions**
62
- - Specific test commands to run
63
- - Expected results
64
- - How to verify integration with other components
65
-
66
- **6. Make dependencies explicit**
67
- - Which tasks must complete before this one can start?
68
- - What does this task need from its dependencies? (files, exports, etc.)
69
- - Use clear language like "This requires the math utilities from task 1"
70
-
71
- ### Important: Be Non-Interactive
72
-
73
- - **Don't ask** if the user wants to add features, tests, or documentation
74
- - **Don't suggest** expanding scope or adding "nice to haves"
75
- - **Just restructure** the existing plan into millhouse-ready format
76
- - If something is ambiguous, make a reasonable assumption and note it in the task
77
-
78
- ### Example Transformation
79
-
80
- **Before (too vague):**
81
- ```markdown
82
- # My App
83
- - Build a calculator
84
- - Add tests
85
- ```
86
-
87
- **After (millhouse-ready):**
88
- ```markdown
89
- # Calculator App
90
-
91
- ## 1. Initialize TypeScript Project
92
- Create the project structure with TypeScript configuration.
93
-
94
- ### Implementation
95
- - Create `package.json` with name "calculator", typescript and vitest as dev dependencies
96
- - Create `tsconfig.json` with strict mode, ES2020 target, NodeNext module resolution
97
- - Create `src/` directory
98
-
99
- ### Testing
100
- Run `npm install` and `npx tsc --noEmit` - should complete without errors.
101
-
102
- ### Acceptance Criteria
103
- - [ ] `package.json` exists with correct dependencies
104
- - [ ] `tsconfig.json` exists with strict mode enabled
105
- - [ ] `src/` directory exists
106
- - [ ] `npm install && npx tsc --noEmit` succeeds
107
-
108
- ## 2. Create Math Utilities
109
- Create basic arithmetic functions used by the calculator.
110
-
111
- **Depends on task 1** - needs the TypeScript project structure.
112
-
113
- ### Implementation
114
- Create `src/math.ts` with:
115
- - `add(a: number, b: number): number` - returns sum
116
- - `subtract(a: number, b: number): number` - returns difference
117
- - `multiply(a: number, b: number): number` - returns product
118
- - `divide(a: number, b: number): number` - returns quotient, throws on division by zero
119
-
120
- ### Testing
121
- Create `src/math.test.ts` with vitest tests for all functions including edge cases.
122
- Run `npx vitest run` - all tests should pass.
123
-
124
- ### Acceptance Criteria
125
- - [ ] `src/math.ts` exports all four functions
126
- - [ ] `src/math.test.ts` has tests for each function
127
- - [ ] Tests cover division by zero error case
128
- - [ ] `npx vitest run` passes all tests
129
- ```
130
-
131
- ---
132
-
133
- ## /millhouse issues
134
-
135
- Convert a plan into GitHub issues formatted for Millhouse.
136
-
137
- ### Critical Context
138
-
139
- These issues will be implemented by Claude Code instances running **unattended in separate context windows**. Each issue is a fresh start with no memory of previous conversations. This means:
140
-
141
- - Every issue must be completely self-contained
142
- - All relevant context, requirements, and constraints must be explicitly stated
143
- - Nothing can be assumed or left implicit
144
-
145
- ### Instructions
146
-
147
- 1. Read the plan from the file path argument, or ask the user to describe it
148
- 2. Break it into discrete, implementable issues
149
- 3. For each issue, identify dependencies on other issues
150
- 4. Create issues in order using `gh issue create`, starting with issues that have no dependencies
151
- 5. Use the actual issue numbers returned by GitHub for dependency references
152
- 6. After creating all issues, create an **index issue** that lists them all (see below)
153
-
154
- ### Issue Content Requirements
155
-
156
- Each issue MUST include:
157
-
158
- **Implementation Details**
159
- - Specific file paths to create or modify
160
- - Function signatures, types, or interfaces expected
161
- - Any specific libraries or patterns to use
162
-
163
- **Testing & Verification**
164
- - How to verify the implementation works
165
- - Specific test commands to run (e.g., `npm test`, `npm run build`)
166
- - Expected output or behavior
167
-
168
- **Acceptance Criteria**
169
- - Clear, checkable criteria for when the issue is "done"
170
- - Edge cases to handle
171
- - Error conditions to consider
172
-
173
- **Dependencies**
174
- - `**Depends on #N**` if it depends on another issue
175
- - What specifically it needs from that dependency (files, exports, etc.)
176
-
177
- ### Example Issue Body
178
-
179
- ```markdown
180
- Create `src/utils/math.ts` with basic arithmetic functions.
181
-
182
- ## Implementation
183
- - Export functions: `add(a: number, b: number): number` and `multiply(a: number, b: number): number`
184
- - Use ES module syntax (export, not module.exports)
185
- - No external dependencies
186
-
187
- ## Testing
188
- Run `npx tsc --noEmit` to verify no type errors.
189
-
190
- ## Acceptance Criteria
191
- - [ ] File exists at `src/utils/math.ts`
192
- - [ ] Both functions are exported
193
- - [ ] TypeScript compiles without errors
194
- ```
195
-
196
- ### Index Issue
197
-
198
- After creating all implementation issues, create a final **index issue** that serves as an overview. Title it something like "Implement [feature name]" and include:
199
-
200
- - A one-line summary of the overall goal
201
- - A list of all created issues with their numbers and a brief description
202
- - The command to run: `millhouse run issues <index-number>`
203
-
204
- Example:
205
-
206
- ```markdown
207
- Implement a calculator library with math utilities.
208
-
209
- ## Issues
210
-
211
- - #1 Create math utilities (`src/utils/math.ts`)
212
- - #2 Create string helpers (`src/utils/string.ts`)
213
- - #3 Create calculator class (`src/calculator.ts`)
214
- - #4 Create main entry point (`src/index.ts`)
215
-
216
- ## Run
217
-
218
- \`\`\`bash
219
- millhouse run issues <this-issue-number>
220
- \`\`\`
221
- ```
222
-
223
- The index issue should **not** include detailed dependency information—Millhouse will discover dependencies from the individual issues.