@lumenflow/core 3.8.6 → 3.9.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 (126) hide show
  1. package/dist/branch-check.d.ts.map +1 -1
  2. package/dist/branch-check.js +5 -4
  3. package/dist/branch-check.js.map +1 -1
  4. package/dist/cleanup-lock.js +2 -2
  5. package/dist/cleanup-lock.js.map +1 -1
  6. package/dist/color-support.d.ts.map +1 -1
  7. package/dist/color-support.js +4 -3
  8. package/dist/color-support.js.map +1 -1
  9. package/dist/commands-logger.js +4 -4
  10. package/dist/commands-logger.js.map +1 -1
  11. package/dist/delegation/index.d.ts +13 -0
  12. package/dist/delegation/index.d.ts.map +1 -0
  13. package/dist/delegation/index.js +15 -0
  14. package/dist/delegation/index.js.map +1 -0
  15. package/dist/delegation-monitor.d.ts.map +1 -1
  16. package/dist/delegation-monitor.js +2 -0
  17. package/dist/delegation-monitor.js.map +1 -1
  18. package/dist/delegation-tree.d.ts.map +1 -1
  19. package/dist/delegation-tree.js +3 -0
  20. package/dist/delegation-tree.js.map +1 -1
  21. package/dist/env-accessors.d.ts +12 -0
  22. package/dist/env-accessors.d.ts.map +1 -0
  23. package/dist/env-accessors.js +37 -0
  24. package/dist/env-accessors.js.map +1 -0
  25. package/dist/git-adapter.js +3 -3
  26. package/dist/git-adapter.js.map +1 -1
  27. package/dist/index.d.ts +38 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +38 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/lane-checker.d.ts.map +1 -1
  32. package/dist/lane-checker.js +19 -8
  33. package/dist/lane-checker.js.map +1 -1
  34. package/dist/lane-lock.js +2 -2
  35. package/dist/lane-lock.js.map +1 -1
  36. package/dist/lifecycle/index.d.ts +21 -0
  37. package/dist/lifecycle/index.d.ts.map +1 -0
  38. package/dist/lifecycle/index.js +26 -0
  39. package/dist/lifecycle/index.js.map +1 -0
  40. package/dist/lumenflow-config-schema.d.ts +33 -2
  41. package/dist/lumenflow-config-schema.d.ts.map +1 -1
  42. package/dist/lumenflow-config-schema.js +2 -0
  43. package/dist/lumenflow-config-schema.js.map +1 -1
  44. package/dist/merge-lock.js +2 -2
  45. package/dist/merge-lock.js.map +1 -1
  46. package/dist/micro-worktree.d.ts.map +1 -1
  47. package/dist/micro-worktree.js +31 -6
  48. package/dist/micro-worktree.js.map +1 -1
  49. package/dist/schemas/agents-config.d.ts +2 -2
  50. package/dist/schemas/gates-section-config.d.ts +37 -0
  51. package/dist/schemas/gates-section-config.d.ts.map +1 -1
  52. package/dist/schemas/gates-section-config.js +23 -0
  53. package/dist/schemas/gates-section-config.js.map +1 -1
  54. package/dist/schemas/memory-arg-validators.d.ts +5 -0
  55. package/dist/schemas/memory-arg-validators.d.ts.map +1 -1
  56. package/dist/schemas/memory-schemas.d.ts +11 -0
  57. package/dist/schemas/memory-schemas.d.ts.map +1 -1
  58. package/dist/schemas/memory-schemas.js +24 -1
  59. package/dist/schemas/memory-schemas.js.map +1 -1
  60. package/dist/schemas/wu-config.d.ts +32 -0
  61. package/dist/schemas/wu-config.d.ts.map +1 -1
  62. package/dist/schemas/wu-config.js +18 -0
  63. package/dist/schemas/wu-config.js.map +1 -1
  64. package/dist/spawn-guidance-generators.d.ts +6 -0
  65. package/dist/spawn-guidance-generators.d.ts.map +1 -1
  66. package/dist/spawn-guidance-generators.js +111 -3
  67. package/dist/spawn-guidance-generators.js.map +1 -1
  68. package/dist/spawn-task-builder.d.ts.map +1 -1
  69. package/dist/spawn-task-builder.js +43 -3
  70. package/dist/spawn-task-builder.js.map +1 -1
  71. package/dist/startup-env-validation.d.ts +38 -0
  72. package/dist/startup-env-validation.d.ts.map +1 -0
  73. package/dist/startup-env-validation.js +107 -0
  74. package/dist/startup-env-validation.js.map +1 -0
  75. package/dist/state-doctor-core.d.ts +6 -0
  76. package/dist/state-doctor-core.d.ts.map +1 -1
  77. package/dist/state-doctor-core.js +45 -0
  78. package/dist/state-doctor-core.js.map +1 -1
  79. package/dist/template-loader.d.ts +3 -3
  80. package/dist/template-loader.d.ts.map +1 -1
  81. package/dist/template-loader.js +19 -5
  82. package/dist/template-loader.js.map +1 -1
  83. package/dist/validation/index.d.ts +1 -0
  84. package/dist/validation/index.d.ts.map +1 -1
  85. package/dist/validation/index.js +1 -0
  86. package/dist/validation/index.js.map +1 -1
  87. package/dist/wu-claim-helpers.d.ts.map +1 -1
  88. package/dist/wu-claim-helpers.js +2 -1
  89. package/dist/wu-claim-helpers.js.map +1 -1
  90. package/dist/wu-cli-constants.d.ts +2 -0
  91. package/dist/wu-cli-constants.d.ts.map +1 -1
  92. package/dist/wu-cli-constants.js +2 -0
  93. package/dist/wu-cli-constants.js.map +1 -1
  94. package/dist/wu-constants.d.ts +1 -0
  95. package/dist/wu-constants.d.ts.map +1 -1
  96. package/dist/wu-constants.js +2 -0
  97. package/dist/wu-constants.js.map +1 -1
  98. package/dist/wu-context-constants.d.ts +34 -0
  99. package/dist/wu-context-constants.d.ts.map +1 -1
  100. package/dist/wu-context-constants.js +34 -0
  101. package/dist/wu-context-constants.js.map +1 -1
  102. package/dist/wu-done-cleanup.d.ts.map +1 -1
  103. package/dist/wu-done-cleanup.js +36 -0
  104. package/dist/wu-done-cleanup.js.map +1 -1
  105. package/dist/wu-done-rebase.d.ts.map +1 -1
  106. package/dist/wu-done-rebase.js +5 -5
  107. package/dist/wu-done-rebase.js.map +1 -1
  108. package/dist/wu-event-sourcer.d.ts +18 -0
  109. package/dist/wu-event-sourcer.d.ts.map +1 -1
  110. package/dist/wu-event-sourcer.js +30 -3
  111. package/dist/wu-event-sourcer.js.map +1 -1
  112. package/dist/wu-paths-constants.d.ts +2 -2
  113. package/dist/wu-paths-constants.d.ts.map +1 -1
  114. package/dist/wu-paths-constants.js +2 -2
  115. package/dist/wu-paths-constants.js.map +1 -1
  116. package/dist/wu-preflight-validators.js +2 -2
  117. package/dist/wu-preflight-validators.js.map +1 -1
  118. package/dist/wu-spawn.d.ts +1 -1
  119. package/dist/wu-spawn.d.ts.map +1 -1
  120. package/dist/wu-spawn.js +1 -1
  121. package/dist/wu-spawn.js.map +1 -1
  122. package/dist/wu-state-store.d.ts +1 -1
  123. package/dist/wu-state-store.d.ts.map +1 -1
  124. package/dist/wu-state-store.js +1 -1
  125. package/dist/wu-state-store.js.map +1 -1
  126. package/package.json +41 -2
@@ -134,6 +134,115 @@ function generateRefactorGuidance() {
134
134
  3. No new tests required unless behavior changes
135
135
  4. If tests fail after refactor, the refactor introduced a bug`;
136
136
  }
137
+ /** WU-2292: Generate concrete code craft guidance with examples. */
138
+ export function generateCodeCraftGuidance() {
139
+ return `## Code Craft
140
+
141
+ Use these implementation standards while you write code:
142
+
143
+ 1. **Extract repeated literals to named constants**. Use your project's duplicate-string threshold (configured in \`eslint.config.mjs\`) and extract meaningful numbers.
144
+ \`\`\`ts
145
+ // Before
146
+ if (status === 'in_progress') notify('in_progress');
147
+ if (nextStatus === 'in_progress') log('in_progress');
148
+ if (prevStatus === 'in_progress') audit('in_progress');
149
+
150
+ // After
151
+ const STATUS_IN_PROGRESS = 'in_progress';
152
+ if (status === STATUS_IN_PROGRESS) notify(STATUS_IN_PROGRESS);
153
+ \`\`\`
154
+
155
+ 2. **Write error messages with context**: what failed, why, and next action.
156
+ \`\`\`ts
157
+ // Before
158
+ die('failed');
159
+
160
+ // After
161
+ die('Failed to parse workspace.yaml: missing lane field. Run pnpm lane:setup to regenerate.');
162
+ \`\`\`
163
+
164
+ 3. **Prefer existing libraries for common problems** (parsing, validation, dates, schema, paths) before custom implementations.
165
+ \`\`\`ts
166
+ // Before
167
+ function parseDate(input: string) { /* custom parser */ }
168
+
169
+ // After
170
+ import { parseISO } from 'date-fns';
171
+ const parsed = parseISO(input);
172
+ \`\`\`
173
+
174
+ 4. **Use type narrowing instead of unsafe casts**.
175
+ \`\`\`ts
176
+ // Before
177
+ const id = (payload as { id: string }).id;
178
+
179
+ // After
180
+ if (payload && typeof payload === 'object' && 'id' in payload) {
181
+ const id = String(payload.id);
182
+ }
183
+ \`\`\`
184
+
185
+ 5. **Extract duplicated logic when it appears at your project's extraction threshold**.
186
+ \`\`\`ts
187
+ // Before: same branch checks repeated in multiple files
188
+ if (mode === 'branch-pr') { /* ... */ }
189
+
190
+ // After
191
+ function isBranchPrMode(mode: string): boolean {
192
+ return mode === 'branch-pr';
193
+ }
194
+ \`\`\`
195
+
196
+ 6. **Keep functions focused**. One function should do one clear job.
197
+ \`\`\`ts
198
+ // Before
199
+ function completeWuAndNotifyAndWriteAudit() { /* many responsibilities */ }
200
+
201
+ // After
202
+ function completeWu() { /* completion only */ }
203
+ function notifyCompletion() { /* notification only */ }
204
+ \`\`\`
205
+
206
+ 7. **Inject infrastructure dependencies into application logic** instead of importing them directly.
207
+ \`\`\`ts
208
+ // Before
209
+ import { readFileSync } from 'node:fs';
210
+ function loadSpec(path: string) { return readFileSync(path, 'utf8'); }
211
+
212
+ // After
213
+ function loadSpec(path: string, readText: (p: string) => string) {
214
+ return readText(path);
215
+ }
216
+ \`\`\``;
217
+ }
218
+ /** WU-2292: Require reading and impact analysis before editing. */
219
+ export function generateReadBeforeWriteDiscipline() {
220
+ return `## Read Before Write
221
+
222
+ Understand the change before touching code:
223
+
224
+ 1. Read each file you plan to edit from top to bottom.
225
+ 2. Read adjacent files that define related types, helpers, and boundaries.
226
+ 3. Find callers and dependents (for example with \`rg\`) before changing behavior.
227
+ 4. Confirm acceptance criteria and code_paths still match your intended scope.
228
+ 5. Never edit a file you have not read first.
229
+ 6. If you cannot determine impact from reading alone, ask before proceeding.`;
230
+ }
231
+ /** WU-2292: Force a self-review pass before completion. */
232
+ export function generateSelfReviewDirective(id) {
233
+ return `## Self-Review Before Completion
234
+
235
+ Before you finish ${id}, review your own diff against gate and craft checks:
236
+
237
+ 1. [GATE] Repeated strings at your project threshold are extracted to named constants.
238
+ 2. [STANDARD] Semantic numbers use named constants (except simple loop indexes and 0/1 guards).
239
+ 3. [STANDARD] Error messages explain what failed, why, and how to fix.
240
+ 4. [STANDARD] No \`as\` casts without preceding type narrowing or guards.
241
+ 5. [GATE] No \`TODO\` or \`FIXME\` markers in production changes.
242
+ 6. [GATE] Architecture boundaries are respected (no forbidden cross-layer imports).
243
+
244
+ Fix any failed checks before running completion commands.`;
245
+ }
137
246
  /** WU-1279: Generate the Mandatory Standards section based on resolved policy */
138
247
  export function generateMandatoryStandards(policy) {
139
248
  const lines = ['## Mandatory Standards', ''];
@@ -158,9 +267,8 @@ export function generateMandatoryStandards(policy) {
158
267
  }
159
268
  // For architecture: 'none', we don't add any architecture guidance
160
269
  // Always include these standards
161
- lines.push('- **SOLID/DRY/YAGNI/KISS**: No over-engineering, no premature abstraction');
162
- lines.push('- **Library-First**: Search context7 before writing custom code. No reinventing wheels');
163
- lines.push('- **Code Quality**: No string literals, no magic numbers, no brittle regexes when libraries exist');
270
+ lines.push('- **Code Craft**: See Code Craft section below for constants, DRY, SRP, DI, error handling, and type safety rules with examples');
271
+ lines.push('- **KISS/YAGNI**: Solve the stated problem with the minimum code. Do not add features, parameters, abstractions, or configurability beyond what acceptance criteria require');
164
272
  lines.push('- **Worktree Discipline**: ALWAYS use `pnpm wu:claim` to create worktrees (never `git worktree add` directly). Work ONLY in the worktree, never edit main');
165
273
  lines.push('- **Documentation**: Update tooling docs if changing tools. Keep docs in sync with code');
166
274
  lines.push('- **Sub-agents**: Use Explore agent for codebase investigation. Activate mandatory agents as configured for your project');
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-guidance-generators.js","sourceRoot":"","sources":["../src/spawn-guidance-generators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn-guidance-generators.js","sourceRoot":"","sources":["../src/spawn-guidance-generators.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-task-builder.d.ts","sourceRoot":"","sources":["../src/spawn-task-builder.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYzD,OAAO,EACL,KAAK,KAAK,EAaX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,aAAa,EAQnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMlE;;GAEG;AACH,UAAU,4BAA4B;IACpC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyBD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,KAAK,EACV,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,MAAM,CA8MR;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,KAAK,EACV,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,MAAM,CA6GR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMrE;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,4BAAiC,GACzC,MAAM,CAiBR"}
1
+ {"version":3,"file":"spawn-task-builder.d.ts","sourceRoot":"","sources":["../src/spawn-task-builder.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAezD,OAAO,EACL,KAAK,KAAK,EAaX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,aAAa,EAQnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMlE;;GAEG;AACH,UAAU,4BAA4B;IACpC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAyBD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,KAAK,EACV,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,MAAM,CA6NR;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,KAAK,EACV,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,MAAM,CAyIR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAMrE;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,4BAAiC,GACzC,MAAM,CAiBR"}
@@ -22,7 +22,7 @@ import { DIRECTORIES } from './wu-constants.js';
22
22
  import { generateExecutionModeSection, generateThinkToolGuidance } from './wu-spawn-helpers.js';
23
23
  import { generateClientSkillsGuidance, generateSkillsSelectionSection } from './wu-spawn-skills.js';
24
24
  import { TRUNCATION_WARNING_BANNER } from './spawn-template-assembler.js';
25
- import { generatePolicyBasedTestGuidance, generateDesignContextSection, generateMandatoryStandards, generateEnforcementSummary, } from './spawn-guidance-generators.js';
25
+ import { generatePolicyBasedTestGuidance, generateDesignContextSection, generateMandatoryStandards, generateEnforcementSummary, generateCodeCraftGuidance, generateReadBeforeWriteDiscipline, generateSelfReviewDirective, } from './spawn-guidance-generators.js';
26
26
  import { generateConstraints, generateCodexConstraints } from './spawn-constraints-generator.js';
27
27
  import { generateEffortScalingRules, generateParallelToolCallGuidance, generateIterativeSearchHeuristics, generateTokenBudgetAwareness, generateCompletionFormat, generateAgentCoordinationSection, generateQuickFixCommands, generateLaneSelectionSection, generateWorktreePathGuidance, generateBugDiscoverySection, generateLaneGuidance, generateActionSection, } from './spawn-agent-guidance.js';
28
28
  import { formatAcceptance, generateImplementationContext, detectMandatoryAgents, generateMandatoryAgentSection, generatePreamble, generateClientBlocksSection, generateInvariantsPriorArtSection, } from './spawn-prompt-helpers.js';
@@ -80,6 +80,8 @@ export function generateTaskInvocation(doc, id, strategy, options = {}) {
80
80
  const enforcementSummary = generateEnforcementSummary(policy);
81
81
  // WU-1279: Generate mandatory standards based on resolved policy
82
82
  const mandatoryStandards = generateMandatoryStandards(policy);
83
+ const codeCraftGuidance = generateCodeCraftGuidance();
84
+ const readBeforeWrite = generateReadBeforeWriteDiscipline();
83
85
  const clientSkillsGuidance = generateClientSkillsGuidance(clientContext);
84
86
  const skillsSection = generateSkillsSelectionSection(doc, config, clientContext?.name) +
85
87
  (clientSkillsGuidance ? `\n${clientSkillsGuidance}` : '');
@@ -88,6 +90,7 @@ export function generateTaskInvocation(doc, id, strategy, options = {}) {
88
90
  const laneGuidance = generateLaneGuidance(doc.lane);
89
91
  const bugDiscoverySection = generateBugDiscoverySection(id);
90
92
  const action = generateActionSection(doc, id, config);
93
+ const selfReviewDirective = generateSelfReviewDirective(id);
91
94
  // WU-1900: Generate constraints with conditional TDD CHECKPOINT
92
95
  const shouldIncludeTddCheckpoint = classification.domain !== 'ui' && policy.testing !== 'none';
93
96
  const constraints = generateConstraints(id, {
@@ -168,6 +171,14 @@ ${mandatoryStandards}
168
171
 
169
172
  ${enforcementSummary}
170
173
 
174
+ ---
175
+
176
+ ${codeCraftGuidance}
177
+
178
+ ---
179
+
180
+ ${readBeforeWrite}
181
+
171
182
  ${designContextSection ? `---\n\n${designContextSection}\n\n` : ''}${clientBlocks ? `---\n\n${clientBlocks}\n\n` : ''}${worktreeGuidance ? `---\n\n${worktreeGuidance}\n\n` : ''}---
172
183
 
173
184
  ${bugDiscoverySection}
@@ -210,6 +221,10 @@ ${laneGuidance}${laneGuidance ? '\n\n---\n\n' : ''}## Action
210
221
 
211
222
  ${action}
212
223
 
224
+ ---
225
+
226
+ ${selfReviewDirective}
227
+
213
228
  ${constraints}`;
214
229
  // Escape special characters for XML output
215
230
  const escapedPrompt = taskPrompt
@@ -252,6 +267,13 @@ export function generateCodexPrompt(doc, id, strategy, options = {}) {
252
267
  const implementationContext = generateImplementationContext(doc);
253
268
  const clientContext = options.client;
254
269
  const config = options.config || getConfig();
270
+ const classificationConfig = config?.methodology?.work_classification;
271
+ const classification = classifyWork({
272
+ code_paths: doc.code_paths,
273
+ lane: doc.lane,
274
+ type: doc.type,
275
+ description: doc.description,
276
+ }, classificationConfig);
255
277
  const worktreesDirSegment = resolveWorktreesDirSegment(config);
256
278
  const worktreePathHint = resolveWorktreePathHint(doc, id, config);
257
279
  const mainRef = `${config.git.defaultRemote}/${config.git.mainBranch}`;
@@ -266,11 +288,17 @@ export function generateCodexPrompt(doc, id, strategy, options = {}) {
266
288
  const clientBlocks = generateClientBlocksSection(clientContext);
267
289
  // WU-1290: Resolve policy and use policy-based test guidance
268
290
  const policy = resolvePolicy(config);
269
- const testGuidance = generatePolicyBasedTestGuidance(doc.type || 'feature', policy);
291
+ const testGuidance = generatePolicyBasedTestGuidance(doc.type || 'feature', policy, {
292
+ testMethodologyHint: classification.testMethodologyHint,
293
+ });
270
294
  // WU-1290: Generate enforcement summary from resolved policy
271
295
  const enforcementSummary = generateEnforcementSummary(policy);
272
296
  // WU-1290: Generate mandatory standards based on resolved policy
273
297
  const mandatoryStandards = generateMandatoryStandards(policy);
298
+ const codeCraftGuidance = generateCodeCraftGuidance();
299
+ const readBeforeWrite = generateReadBeforeWriteDiscipline();
300
+ const selfReviewDirective = generateSelfReviewDirective(id);
301
+ const designContextSection = generateDesignContextSection(classification);
274
302
  const executionModeSection = generateExecutionModeSection(options);
275
303
  const thinkToolGuidance = generateThinkToolGuidance(options);
276
304
  const thinkingSections = [executionModeSection, thinkToolGuidance]
@@ -321,6 +349,14 @@ ${enforcementSummary}
321
349
 
322
350
  ---
323
351
 
352
+ ${codeCraftGuidance}
353
+
354
+ ---
355
+
356
+ ${readBeforeWrite}
357
+
358
+ ${designContextSection ? `---\n\n${designContextSection}\n\n` : ''}---
359
+
324
360
  ${skillsSection}
325
361
 
326
362
  ---
@@ -342,7 +378,11 @@ ${mandatorySection}${implementationContext ? `${implementationContext}\n\n---\n\
342
378
 
343
379
  ---
344
380
 
345
- ${laneGuidance}${laneGuidance ? '\n\n---\n\n' : ''}${constraints}
381
+ ${laneGuidance}${laneGuidance ? '\n\n---\n\n' : ''}${selfReviewDirective}
382
+
383
+ ---
384
+
385
+ ${constraints}
346
386
  `;
347
387
  }
348
388
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-task-builder.js","sourceRoot":"","sources":["../src/spawn-task-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn-task-builder.js","sourceRoot":"","sources":["../src/spawn-task-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { EnvVarName } from './wu-context-constants.js';
2
+ export declare const STARTUP_ENV_POLICY: {
3
+ readonly ERROR: "error";
4
+ readonly WARN: "warn";
5
+ };
6
+ export type StartupEnvPolicy = (typeof STARTUP_ENV_POLICY)[keyof typeof STARTUP_ENV_POLICY];
7
+ interface EnvParseSuccess<T> {
8
+ valid: true;
9
+ value: T;
10
+ }
11
+ interface EnvParseFailure {
12
+ valid: false;
13
+ expected: string;
14
+ }
15
+ type EnvParseResult<T> = EnvParseSuccess<T> | EnvParseFailure;
16
+ export type EnvValueParser<T> = (rawValue: string) => EnvParseResult<T>;
17
+ export interface StartupEnvSchemaField<T> {
18
+ envVar: EnvVarName;
19
+ required?: boolean;
20
+ defaultValue?: T;
21
+ parse: EnvValueParser<T>;
22
+ }
23
+ export type StartupEnvSchema = Record<string, StartupEnvSchemaField<unknown>>;
24
+ export type StartupEnvValues<TSchema extends StartupEnvSchema> = {
25
+ [Key in keyof TSchema]: TSchema[Key] extends StartupEnvSchemaField<infer TValue> ? TValue : never;
26
+ };
27
+ export interface ValidateStartupEnvSchemaOptions<TSchema extends StartupEnvSchema> {
28
+ context: string;
29
+ env: NodeJS.ProcessEnv;
30
+ schema: TSchema;
31
+ policy?: StartupEnvPolicy;
32
+ onWarning?: (diagnosticMessage: string) => void;
33
+ }
34
+ export declare function validateStartupEnvSchema<TSchema extends StartupEnvSchema>(options: ValidateStartupEnvSchemaOptions<TSchema>): StartupEnvValues<TSchema>;
35
+ export declare function parseNonEmptyEnvValue(expectedDescription?: string): EnvValueParser<string>;
36
+ export declare function parseEnumEnvValue<TAllowed extends readonly string[]>(allowedValues: TAllowed): EnvValueParser<TAllowed[number]>;
37
+ export {};
38
+ //# sourceMappingURL=startup-env-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-env-validation.d.ts","sourceRoot":"","sources":["../src/startup-env-validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAQ5D,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAE5F,UAAU,eAAe,CAAC,CAAC;IACzB,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;CACV;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,cAAc,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC;AAE9D,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC;AAExE,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9E,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,gBAAgB,IAAI;KAC9D,GAAG,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,qBAAqB,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK;CAClG,CAAC;AASF,MAAM,WAAW,+BAA+B,CAAC,OAAO,SAAS,gBAAgB;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AA+BD,wBAAgB,wBAAwB,CAAC,OAAO,SAAS,gBAAgB,EACvE,OAAO,EAAE,+BAA+B,CAAC,OAAO,CAAC,GAChD,gBAAgB,CAAC,OAAO,CAAC,CAiD3B;AAED,wBAAgB,qBAAqB,CACnC,mBAAmB,SAAsB,GACxC,cAAc,CAAC,MAAM,CAAC,CAexB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,SAAS,SAAS,MAAM,EAAE,EAClE,aAAa,EAAE,QAAQ,GACtB,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAkBlC"}
@@ -0,0 +1,107 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { createError, ErrorCodes } from './error-handler.js';
4
+ const ISSUE_PREFIX = '- ';
5
+ const NEWLINE = '\n';
6
+ const RECEIVED_PREFIX = 'Received: ';
7
+ const MISSING_MESSAGE = 'Missing required value.';
8
+ const INVALID_MESSAGE = 'Invalid value.';
9
+ export const STARTUP_ENV_POLICY = {
10
+ ERROR: 'error',
11
+ WARN: 'warn',
12
+ };
13
+ function formatIssueLine(issue) {
14
+ const fragments = [`${ISSUE_PREFIX}${issue.envVar}: ${issue.message}`];
15
+ if (issue.expected) {
16
+ fragments.push(`Expected ${issue.expected}.`);
17
+ }
18
+ if (issue.received !== undefined) {
19
+ fragments.push(`${RECEIVED_PREFIX}"${issue.received}".`);
20
+ }
21
+ return fragments.join(' ');
22
+ }
23
+ function formatDiagnosticMessage(context, issues) {
24
+ const issueLines = issues.map(formatIssueLine).join(NEWLINE);
25
+ return `${context} environment validation failed.${NEWLINE}${issueLines}`;
26
+ }
27
+ function assignFallbackValue(values, fieldName, field) {
28
+ if (field.defaultValue !== undefined) {
29
+ values[fieldName] = field.defaultValue;
30
+ }
31
+ }
32
+ export function validateStartupEnvSchema(options) {
33
+ const policy = options.policy ?? STARTUP_ENV_POLICY.ERROR;
34
+ const values = {};
35
+ const issues = [];
36
+ for (const [fieldName, field] of Object.entries(options.schema)) {
37
+ const rawValue = options.env[field.envVar];
38
+ if (rawValue === undefined) {
39
+ if (field.required) {
40
+ issues.push({
41
+ envVar: field.envVar,
42
+ message: MISSING_MESSAGE,
43
+ expected: 'a non-empty value',
44
+ });
45
+ }
46
+ assignFallbackValue(values, fieldName, field);
47
+ continue;
48
+ }
49
+ const parsed = field.parse(rawValue);
50
+ if (parsed.valid) {
51
+ values[fieldName] = parsed.value;
52
+ continue;
53
+ }
54
+ issues.push({
55
+ envVar: field.envVar,
56
+ message: INVALID_MESSAGE,
57
+ expected: parsed.expected,
58
+ received: rawValue,
59
+ });
60
+ assignFallbackValue(values, fieldName, field);
61
+ }
62
+ if (issues.length === 0) {
63
+ return values;
64
+ }
65
+ const diagnosticMessage = formatDiagnosticMessage(options.context, issues);
66
+ if (policy === STARTUP_ENV_POLICY.WARN) {
67
+ options.onWarning?.(diagnosticMessage);
68
+ return values;
69
+ }
70
+ throw createError(ErrorCodes.CONFIG_ERROR, diagnosticMessage, {
71
+ context: options.context,
72
+ issues,
73
+ });
74
+ }
75
+ export function parseNonEmptyEnvValue(expectedDescription = 'a non-empty value') {
76
+ return (rawValue) => {
77
+ const trimmedValue = rawValue.trim();
78
+ if (trimmedValue.length === 0) {
79
+ return {
80
+ valid: false,
81
+ expected: expectedDescription,
82
+ };
83
+ }
84
+ return {
85
+ valid: true,
86
+ value: trimmedValue,
87
+ };
88
+ };
89
+ }
90
+ export function parseEnumEnvValue(allowedValues) {
91
+ const allowedSet = new Set(allowedValues);
92
+ const expected = `one of: ${allowedValues.join(', ')}`;
93
+ return (rawValue) => {
94
+ const normalizedValue = rawValue.trim();
95
+ if (allowedSet.has(normalizedValue)) {
96
+ return {
97
+ valid: true,
98
+ value: normalizedValue,
99
+ };
100
+ }
101
+ return {
102
+ valid: false,
103
+ expected,
104
+ };
105
+ };
106
+ }
107
+ //# sourceMappingURL=startup-env-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-env-validation.js","sourceRoot":"","sources":["../src/startup-env-validation.ts"],"names":[],"mappings":"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"}
@@ -106,6 +106,10 @@ export interface StateDoctorDeps {
106
106
  emitEvent?: (event: EmitEventPayload) => Promise<void>;
107
107
  /** List WU IDs referenced in backlog.md (WU-2229) */
108
108
  listBacklogRefs?: () => Promise<string[]>;
109
+ /** List WU IDs in status.md "In Progress" section (WU-2285) */
110
+ listInProgressStatusRefs?: () => Promise<string[]>;
111
+ /** List WU IDs in backlog.md "In Progress" section (WU-2285) */
112
+ listInProgressBacklogRefs?: () => Promise<string[]>;
109
113
  }
110
114
  /**
111
115
  * A detected issue in the state
@@ -127,6 +131,8 @@ export interface DiagnosisIssue {
127
131
  canAutoFix: boolean;
128
132
  /** Status mismatch details for fixing (WU-1420) */
129
133
  statusMismatch?: StatusMismatchDetails;
134
+ /** Source document metadata for stale in-progress references (WU-2285) */
135
+ staleReferenceSource?: 'status_in_progress' | 'backlog_in_progress';
130
136
  }
131
137
  /**
132
138
  * A fix error that occurred during auto-repair
@@ -1 +1 @@
1
- {"version":3,"file":"state-doctor-core.d.ts","sourceRoot":"","sources":["../src/state-doctor-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-doctor-core.d.ts","sourceRoot":"","sources":["../src/state-doctor-core.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,12 @@ const STATUS_MISMATCH_SUGGESTION = {
64
64
  AUTO_FIX: 'Emit corrective event using: pnpm state:doctor --fix',
65
65
  MANUAL_FIX: 'Manual reconciliation required: state transition is not representable via corrective events',
66
66
  };
67
+ const STALE_IN_PROGRESS_REFERENCE_SUGGESTION = 'Regenerate backlog.md and status.md from state store using: pnpm state:doctor --fix';
68
+ const NON_ACTIVE_STATUSES = new Set([
69
+ WU_STATUS.DONE,
70
+ WU_STATUS.CANCELLED,
71
+ WU_STATUS.SUPERSEDED,
72
+ ]);
67
73
  /**
68
74
  * Derive WU status from events (WU-1420)
69
75
  *
@@ -242,6 +248,30 @@ function detectOrphanBacklogRefs(backlogRefs, wuIds) {
242
248
  }
243
249
  return issues;
244
250
  }
251
+ function detectStaleInProgressRefs(refs, wuById, source) {
252
+ const issues = [];
253
+ for (const wuId of refs) {
254
+ const wu = wuById.get(wuId);
255
+ if (!wu) {
256
+ continue;
257
+ }
258
+ const normalizedStatus = wu.status.trim().toLowerCase();
259
+ if (!NON_ACTIVE_STATUSES.has(normalizedStatus)) {
260
+ continue;
261
+ }
262
+ const sourceLabel = source === 'status_in_progress' ? 'status.md' : 'backlog.md';
263
+ issues.push({
264
+ type: ISSUE_TYPES.STATUS_MISMATCH,
265
+ severity: ISSUE_SEVERITY.WARNING,
266
+ wuId,
267
+ description: `WU ${wuId} is listed in ${sourceLabel} In Progress but canonical YAML status is '${normalizedStatus}'`,
268
+ suggestion: STALE_IN_PROGRESS_REFERENCE_SUGGESTION,
269
+ canAutoFix: false,
270
+ staleReferenceSource: source,
271
+ });
272
+ }
273
+ return issues;
274
+ }
245
275
  /**
246
276
  * Calculate summary statistics from issues
247
277
  */
@@ -429,11 +459,24 @@ export async function diagnoseState(_baseDir, deps, options = {}) {
429
459
  // Build lookup sets
430
460
  const wuIds = new Set(wus.map((wu) => wu.id));
431
461
  const stampIds = new Set(stamps);
462
+ const wuById = new Map(wus.map((wu) => [wu.id, wu]));
432
463
  // Detect issues
433
464
  const orphanedWUissues = detectOrphanedWUs(wus, stampIds);
434
465
  const danglingSignalIssues = detectDanglingSignals(signals, wuIds);
435
466
  const brokenEventIssues = detectBrokenEvents(events, wuIds);
436
467
  const statusMismatchIssues = detectStatusMismatches(wus, events);
468
+ const inProgressStatusRefs = deps.listInProgressStatusRefs
469
+ ? await deps.listInProgressStatusRefs()
470
+ : [];
471
+ const inProgressBacklogRefs = deps.listInProgressBacklogRefs
472
+ ? await deps.listInProgressBacklogRefs()
473
+ : [];
474
+ const staleStatusRefIssues = inProgressStatusRefs.length > 0
475
+ ? detectStaleInProgressRefs(inProgressStatusRefs, wuById, 'status_in_progress')
476
+ : [];
477
+ const staleBacklogRefIssues = inProgressBacklogRefs.length > 0
478
+ ? detectStaleInProgressRefs(inProgressBacklogRefs, wuById, 'backlog_in_progress')
479
+ : [];
437
480
  // WU-2229: Detect orphan backlog references (optional — backward compatible)
438
481
  const backlogRefs = deps.listBacklogRefs ? await deps.listBacklogRefs() : [];
439
482
  const orphanBacklogRefIssues = backlogRefs.length > 0 ? detectOrphanBacklogRefs(backlogRefs, wuIds) : [];
@@ -442,6 +485,8 @@ export async function diagnoseState(_baseDir, deps, options = {}) {
442
485
  ...danglingSignalIssues,
443
486
  ...brokenEventIssues,
444
487
  ...statusMismatchIssues,
488
+ ...staleStatusRefIssues,
489
+ ...staleBacklogRefIssues,
445
490
  ...orphanBacklogRefIssues,
446
491
  ];
447
492
  const summary = calculateSummary(issues);