@lumenflow/core 2.18.3 → 2.20.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 (215) hide show
  1. package/dist/adapters/terminal-renderer.adapter.d.ts.map +1 -1
  2. package/dist/adapters/terminal-renderer.adapter.js +6 -4
  3. package/dist/adapters/terminal-renderer.adapter.js.map +1 -1
  4. package/dist/arg-parser.js +2 -2
  5. package/dist/arg-parser.js.map +1 -1
  6. package/dist/atomic-merge.d.ts +21 -0
  7. package/dist/atomic-merge.d.ts.map +1 -0
  8. package/dist/atomic-merge.js +83 -0
  9. package/dist/atomic-merge.js.map +1 -0
  10. package/dist/context/wu-state-reader.d.ts +2 -0
  11. package/dist/context/wu-state-reader.d.ts.map +1 -1
  12. package/dist/context/wu-state-reader.js +3 -0
  13. package/dist/context/wu-state-reader.js.map +1 -1
  14. package/dist/delegation-escalation.d.ts +91 -0
  15. package/dist/delegation-escalation.d.ts.map +1 -0
  16. package/dist/delegation-escalation.js +258 -0
  17. package/dist/delegation-escalation.js.map +1 -0
  18. package/dist/delegation-monitor.d.ts +230 -0
  19. package/dist/delegation-monitor.d.ts.map +1 -0
  20. package/dist/delegation-monitor.js +675 -0
  21. package/dist/delegation-monitor.js.map +1 -0
  22. package/dist/delegation-recovery.d.ts +83 -0
  23. package/dist/delegation-recovery.d.ts.map +1 -0
  24. package/dist/delegation-recovery.js +299 -0
  25. package/dist/delegation-recovery.js.map +1 -0
  26. package/dist/delegation-registry-schema.d.ts +80 -0
  27. package/dist/delegation-registry-schema.d.ts.map +1 -0
  28. package/dist/delegation-registry-schema.js +91 -0
  29. package/dist/delegation-registry-schema.js.map +1 -0
  30. package/dist/delegation-registry-store.d.ts +159 -0
  31. package/dist/delegation-registry-store.d.ts.map +1 -0
  32. package/dist/delegation-registry-store.js +299 -0
  33. package/dist/delegation-registry-store.js.map +1 -0
  34. package/dist/delegation-tree.d.ts +57 -0
  35. package/dist/delegation-tree.d.ts.map +1 -0
  36. package/dist/delegation-tree.js +203 -0
  37. package/dist/delegation-tree.js.map +1 -0
  38. package/dist/gates-agent-mode.d.ts +25 -0
  39. package/dist/gates-agent-mode.d.ts.map +1 -1
  40. package/dist/gates-agent-mode.js +41 -0
  41. package/dist/gates-agent-mode.js.map +1 -1
  42. package/dist/index.d.ts +16 -7
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +20 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/lumenflow-config-schema.d.ts +9 -3
  47. package/dist/lumenflow-config-schema.d.ts.map +1 -1
  48. package/dist/lumenflow-config-schema.js +19 -4
  49. package/dist/lumenflow-config-schema.js.map +1 -1
  50. package/dist/lumenflow-config.d.ts +2 -0
  51. package/dist/lumenflow-config.d.ts.map +1 -1
  52. package/dist/lumenflow-config.js +1 -0
  53. package/dist/lumenflow-config.js.map +1 -1
  54. package/dist/micro-worktree.d.ts.map +1 -1
  55. package/dist/micro-worktree.js +15 -9
  56. package/dist/micro-worktree.js.map +1 -1
  57. package/dist/rollback-utils.d.ts +52 -0
  58. package/dist/rollback-utils.d.ts.map +1 -1
  59. package/dist/rollback-utils.js +111 -0
  60. package/dist/rollback-utils.js.map +1 -1
  61. package/dist/sandbox-allowlist.d.ts +16 -0
  62. package/dist/sandbox-allowlist.d.ts.map +1 -0
  63. package/dist/sandbox-allowlist.js +75 -0
  64. package/dist/sandbox-allowlist.js.map +1 -0
  65. package/dist/sandbox-backend-linux.d.ts +6 -0
  66. package/dist/sandbox-backend-linux.d.ts.map +1 -0
  67. package/dist/sandbox-backend-linux.js +65 -0
  68. package/dist/sandbox-backend-linux.js.map +1 -0
  69. package/dist/sandbox-backend-macos.d.ts +6 -0
  70. package/dist/sandbox-backend-macos.d.ts.map +1 -0
  71. package/dist/sandbox-backend-macos.js +64 -0
  72. package/dist/sandbox-backend-macos.js.map +1 -0
  73. package/dist/sandbox-backend-windows.d.ts +6 -0
  74. package/dist/sandbox-backend-windows.d.ts.map +1 -0
  75. package/dist/sandbox-backend-windows.js +28 -0
  76. package/dist/sandbox-backend-windows.js.map +1 -0
  77. package/dist/sandbox-profile.d.ts +53 -0
  78. package/dist/sandbox-profile.d.ts.map +1 -0
  79. package/dist/sandbox-profile.js +62 -0
  80. package/dist/sandbox-profile.js.map +1 -0
  81. package/dist/schemas/index.d.ts +3 -3
  82. package/dist/schemas/index.d.ts.map +1 -1
  83. package/dist/schemas/index.js +6 -6
  84. package/dist/schemas/index.js.map +1 -1
  85. package/dist/schemas/initiative-arg-validators.d.ts +1 -0
  86. package/dist/schemas/initiative-arg-validators.d.ts.map +1 -1
  87. package/dist/schemas/initiative-schemas.d.ts +3 -1
  88. package/dist/schemas/initiative-schemas.d.ts.map +1 -1
  89. package/dist/schemas/initiative-schemas.js +2 -1
  90. package/dist/schemas/initiative-schemas.js.map +1 -1
  91. package/dist/schemas/setup-arg-validators.d.ts +4 -4
  92. package/dist/schemas/setup-arg-validators.d.ts.map +1 -1
  93. package/dist/schemas/setup-arg-validators.js +6 -6
  94. package/dist/schemas/setup-arg-validators.js.map +1 -1
  95. package/dist/schemas/setup-schemas.d.ts +7 -7
  96. package/dist/schemas/setup-schemas.d.ts.map +1 -1
  97. package/dist/schemas/setup-schemas.js +11 -11
  98. package/dist/schemas/setup-schemas.js.map +1 -1
  99. package/dist/schemas/wu-lifecycle-arg-validators.d.ts +2 -1
  100. package/dist/schemas/wu-lifecycle-arg-validators.d.ts.map +1 -1
  101. package/dist/schemas/wu-lifecycle-schemas.d.ts +5 -3
  102. package/dist/schemas/wu-lifecycle-schemas.d.ts.map +1 -1
  103. package/dist/schemas/wu-lifecycle-schemas.js +6 -2
  104. package/dist/schemas/wu-lifecycle-schemas.js.map +1 -1
  105. package/dist/spawn-strategy.d.ts +1 -1
  106. package/dist/spawn-strategy.js +1 -1
  107. package/dist/template-loader.d.ts +7 -3
  108. package/dist/template-loader.d.ts.map +1 -1
  109. package/dist/template-loader.js +22 -6
  110. package/dist/template-loader.js.map +1 -1
  111. package/dist/validation/types.d.ts +2 -0
  112. package/dist/validation/types.d.ts.map +1 -1
  113. package/dist/wu-consistency-checker.d.ts +1 -0
  114. package/dist/wu-consistency-checker.d.ts.map +1 -1
  115. package/dist/wu-consistency-checker.js +31 -2
  116. package/dist/wu-consistency-checker.js.map +1 -1
  117. package/dist/wu-context-constants.d.ts +4 -2
  118. package/dist/wu-context-constants.d.ts.map +1 -1
  119. package/dist/wu-context-constants.js +4 -2
  120. package/dist/wu-context-constants.js.map +1 -1
  121. package/dist/wu-done-branch-only.d.ts +2 -11
  122. package/dist/wu-done-branch-only.d.ts.map +1 -1
  123. package/dist/wu-done-branch-only.js +81 -45
  124. package/dist/wu-done-branch-only.js.map +1 -1
  125. package/dist/wu-done-cleanup.js +33 -1
  126. package/dist/wu-done-cleanup.js.map +1 -1
  127. package/dist/wu-done-initiative-sync.d.ts.map +1 -1
  128. package/dist/wu-done-initiative-sync.js +20 -5
  129. package/dist/wu-done-initiative-sync.js.map +1 -1
  130. package/dist/wu-done-machine.d.ts +175 -0
  131. package/dist/wu-done-machine.d.ts.map +1 -0
  132. package/dist/wu-done-machine.js +225 -0
  133. package/dist/wu-done-machine.js.map +1 -0
  134. package/dist/wu-done-metadata.d.ts.map +1 -1
  135. package/dist/wu-done-metadata.js +3 -1
  136. package/dist/wu-done-metadata.js.map +1 -1
  137. package/dist/wu-done-preflight.d.ts +8 -0
  138. package/dist/wu-done-preflight.d.ts.map +1 -1
  139. package/dist/wu-done-preflight.js +17 -1
  140. package/dist/wu-done-preflight.js.map +1 -1
  141. package/dist/wu-done-validation.d.ts +0 -37
  142. package/dist/wu-done-validation.d.ts.map +1 -1
  143. package/dist/wu-done-validation.js +1 -155
  144. package/dist/wu-done-validation.js.map +1 -1
  145. package/dist/wu-done-validators.d.ts +1 -2
  146. package/dist/wu-done-validators.d.ts.map +1 -1
  147. package/dist/wu-done-validators.js +1 -3
  148. package/dist/wu-done-validators.js.map +1 -1
  149. package/dist/wu-done-worktree-services.d.ts +191 -0
  150. package/dist/wu-done-worktree-services.d.ts.map +1 -0
  151. package/dist/wu-done-worktree-services.js +273 -0
  152. package/dist/wu-done-worktree-services.js.map +1 -0
  153. package/dist/wu-done-worktree.d.ts +0 -19
  154. package/dist/wu-done-worktree.d.ts.map +1 -1
  155. package/dist/wu-done-worktree.js +165 -118
  156. package/dist/wu-done-worktree.js.map +1 -1
  157. package/dist/wu-git-constants.d.ts +4 -0
  158. package/dist/wu-git-constants.d.ts.map +1 -1
  159. package/dist/wu-git-constants.js +4 -0
  160. package/dist/wu-git-constants.js.map +1 -1
  161. package/dist/wu-helpers.d.ts +5 -1
  162. package/dist/wu-helpers.d.ts.map +1 -1
  163. package/dist/wu-helpers.js +5 -1
  164. package/dist/wu-helpers.js.map +1 -1
  165. package/dist/wu-lint.d.ts +53 -37
  166. package/dist/wu-lint.d.ts.map +1 -1
  167. package/dist/wu-lint.js +95 -105
  168. package/dist/wu-lint.js.map +1 -1
  169. package/dist/wu-paths-constants.d.ts +3 -3
  170. package/dist/wu-paths-constants.d.ts.map +1 -1
  171. package/dist/wu-paths-constants.js +3 -3
  172. package/dist/wu-paths-constants.js.map +1 -1
  173. package/dist/wu-preflight-validators.d.ts +28 -77
  174. package/dist/wu-preflight-validators.d.ts.map +1 -1
  175. package/dist/wu-preflight-validators.js +86 -130
  176. package/dist/wu-preflight-validators.js.map +1 -1
  177. package/dist/wu-recovery.d.ts +89 -0
  178. package/dist/wu-recovery.d.ts.map +1 -1
  179. package/dist/wu-recovery.js +118 -0
  180. package/dist/wu-recovery.js.map +1 -1
  181. package/dist/wu-rules-core.d.ts +95 -0
  182. package/dist/wu-rules-core.d.ts.map +1 -0
  183. package/dist/wu-rules-core.js +399 -0
  184. package/dist/wu-rules-core.js.map +1 -0
  185. package/dist/wu-rules-engine.d.ts +29 -0
  186. package/dist/wu-rules-engine.d.ts.map +1 -0
  187. package/dist/wu-rules-engine.js +59 -0
  188. package/dist/wu-rules-engine.js.map +1 -0
  189. package/dist/wu-rules-resolvers.d.ts +19 -0
  190. package/dist/wu-rules-resolvers.d.ts.map +1 -0
  191. package/dist/wu-rules-resolvers.js +208 -0
  192. package/dist/wu-rules-resolvers.js.map +1 -0
  193. package/dist/wu-schema.d.ts +24 -9
  194. package/dist/wu-schema.d.ts.map +1 -1
  195. package/dist/wu-schema.js +14 -1
  196. package/dist/wu-schema.js.map +1 -1
  197. package/dist/wu-spawn-context.d.ts +1 -1
  198. package/dist/wu-spawn-context.d.ts.map +1 -1
  199. package/dist/wu-spawn-context.js +8 -2
  200. package/dist/wu-spawn-context.js.map +1 -1
  201. package/dist/wu-spawn-helpers.js +2 -2
  202. package/dist/wu-spawn-helpers.js.map +1 -1
  203. package/dist/wu-state-schema.d.ts +12 -12
  204. package/dist/wu-state-schema.d.ts.map +1 -1
  205. package/dist/wu-state-schema.js +10 -10
  206. package/dist/wu-state-schema.js.map +1 -1
  207. package/dist/wu-state-store.d.ts +10 -4
  208. package/dist/wu-state-store.d.ts.map +1 -1
  209. package/dist/wu-state-store.js +309 -11
  210. package/dist/wu-state-store.js.map +1 -1
  211. package/dist/wu-transaction.d.ts +21 -0
  212. package/dist/wu-transaction.d.ts.map +1 -1
  213. package/dist/wu-transaction.js +17 -0
  214. package/dist/wu-transaction.js.map +1 -1
  215. package/package.json +14 -11
@@ -93,6 +93,8 @@ export const GIT_FLAGS = {
93
93
  REBASE: '--rebase',
94
94
  /** Check ancestry without output (merge-base) */
95
95
  IS_ANCESTOR: '--is-ancestor',
96
+ /** Write merged tree object and return conflict status code */
97
+ WRITE_TREE: '--write-tree',
96
98
  /** Set upstream tracking */
97
99
  UPSTREAM: '-u',
98
100
  /** Delete branch (safe - only if merged) */
@@ -145,6 +147,8 @@ export const GIT_COMMANDS = {
145
147
  LOG: 'log',
146
148
  /** Git merge-base command */
147
149
  MERGE_BASE: 'merge-base',
150
+ /** Git merge-tree command */
151
+ MERGE_TREE: 'merge-tree',
148
152
  /** Git rev-parse command */
149
153
  REV_PARSE: 'rev-parse',
150
154
  /** Git diff flags */
@@ -1 +1 @@
1
- {"version":3,"file":"wu-git-constants.js","sourceRoot":"","sources":["../src/wu-git-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ,EAAE,+CAA+C;IACjE,4DAA4D;IAC5D,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,8CAA8C;IAC9C,MAAM,EAAE,CAAC,UAAkB,EAAE,UAAkB,EAAE,EAAE,CAAC,GAAG,UAAU,IAAI,UAAU,EAAE;IACjF,+BAA+B;IAC/B,WAAW,EAAE,aAAa;IAC1B,uBAAuB;IACvB,IAAI,EAAE,MAAM;IACZ,mBAAmB;IACnB,QAAQ,EAAE,MAAM;IAChB,8BAA8B;IAC9B,cAAc,EAAE,YAAY;IAC5B,qBAAqB;IACrB,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,yEAAyE;IACzE,gBAAgB,EAAE,CAAC;IACnB,4DAA4D;IAC5D,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,8DAA8D;IAC9D,UAAU,EAAE,cAAc;IAE1B,iDAAiD;IACjD,SAAS,EAAE,aAAa;IAExB,yCAAyC;IACzC,MAAM,EAAE,IAAI;IAEZ,6BAA6B;IAC7B,KAAK,EAAE,SAAS;IAEhB,8BAA8B;IAC9B,WAAW,EAAE,IAAI;IAEjB,8BAA8B;IAC9B,OAAO,EAAE,WAAW;IAEpB,oDAAoD;IACpD,MAAM,EAAE,UAAU;IAElB,iDAAiD;IACjD,WAAW,EAAE,eAAe;IAE5B,4BAA4B;IAC5B,QAAQ,EAAE,IAAI;IAEd,4CAA4C;IAC5C,MAAM,EAAE,IAAI;IAEZ,iDAAiD;IACjD,YAAY,EAAE,IAAI;IAElB,wDAAwD;IACxD,aAAa,EAAE,UAAU;IAEzB,sBAAsB;IACtB,IAAI,EAAE,QAAQ;IAEd,sBAAsB;IACtB,IAAI,EAAE,QAAQ;IAEd,oDAAoD;IACpD,QAAQ,EAAE,KAAK;IAEf,oDAAoD;IACpD,QAAQ,EAAE,KAAK;IAEf,wDAAwD;IACxD,SAAS,EAAE,aAAa;IAExB,6CAA6C;IAC7C,WAAW,EAAE,eAAe;IAE5B,0BAA0B;IAC1B,OAAO,EAAE,WAAW;IAEpB,sCAAsC;IACtC,KAAK,EAAE,SAAS;IAEhB,6DAA6D;IAC7D,cAAc,EAAE,IAAI;CACrB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,iBAAiB;IACjB,GAAG,EAAE,KAAK;IAEV,wBAAwB;IACxB,KAAK,EAAE,OAAO;IAEd,yDAAyD;IACzD,OAAO,EAAE,SAAS;IAElB,6BAA6B;IAC7B,SAAS,EAAE,WAAW;IAEtB,mBAAmB;IACnB,IAAI,EAAE,MAAM;IAEZ,mBAAmB;IACnB,IAAI,EAAE,MAAM;IAEZ,uBAAuB;IACvB,IAAI,EAAE,MAAM;IAEZ,sBAAsB;IACtB,GAAG,EAAE,KAAK;IAEV,6BAA6B;IAC7B,UAAU,EAAE,YAAY;IAExB,4BAA4B;IAC5B,SAAS,EAAE,WAAW;IAEtB,qBAAqB;IACrB,MAAM,EAAE,UAAU;IAClB,SAAS,EAAE,aAAa;IACxB,eAAe,EAAE,mBAAmB;CACrC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,wCAAwC;IACxC,WAAW,EAAE,mBAAmB;IAEhC,gCAAgC;IAChC,iBAAiB,EAAE,+BAA+B;IAElD,0DAA0D;IAC1D,eAAe,EAAE,iDAAiD;IAElE,mEAAmE;IACnE,wBAAwB,EAAE,uBAAuB;IAEjD,8BAA8B;IAC9B,yBAAyB,EAAE,iCAAiC;CAC7D,CAAC"}
1
+ {"version":3,"file":"wu-git-constants.js","sourceRoot":"","sources":["../src/wu-git-constants.ts"],"names":[],"mappings":"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"}
@@ -127,7 +127,11 @@ export declare function ensureOnMain(git: any): Promise<void>;
127
127
  *
128
128
  * @param {object} git - Git adapter with async fetch() and getCommitHash() methods
129
129
  * @param {string} [scriptName='wu'] - Script name for logging
130
+ * @param {object} [options] - Options
131
+ * @param {boolean} [options.skipRemote=false] - WU-1653: Skip remote check (requireRemote=false)
130
132
  * @throws {Error} If main is out of sync with origin
131
133
  */
132
- export declare function ensureMainUpToDate(git: any, _scriptName?: string): Promise<void>;
134
+ export declare function ensureMainUpToDate(git: any, _scriptName?: string, { skipRemote }?: {
135
+ skipRemote?: boolean;
136
+ }): Promise<void>;
133
137
  //# sourceMappingURL=wu-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wu-helpers.d.ts","sourceRoot":"","sources":["../src/wu-helpers.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAUH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,KAAA,QAIpC;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,GAAG,KAAA,EAAE,IAAI,KAAK,UAMjC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,WAE/B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,WAK5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,YAM7B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,KAAA,OAQzC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,KAAA;;;;;;;;;;EAqBxC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,KAAA,OAa9B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,KAAA,EAAE,eAAe,WAA6B;;;;EA4B/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAA,UAQhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,KAAA,OAiBjD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAAC,GAAG,KAAA,iBAarC;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,KAAA,EAAE,WAAW,SAAO,iBAS/D"}
1
+ {"version":3,"file":"wu-helpers.d.ts","sourceRoot":"","sources":["../src/wu-helpers.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAUH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,KAAA,QAIpC;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,GAAG,KAAA,EAAE,IAAI,KAAK,UAMjC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,WAE/B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,WAK5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,YAM7B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,KAAA,OAQzC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,KAAA;;;;;;;;;;EAqBxC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,KAAA,OAa9B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,KAAA,EAAE,eAAe,WAA6B;;;;EA4B/E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAA,UAQhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,KAAA,OAiBjD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAAC,GAAG,KAAA,iBAarC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,KAAA,EAAE,WAAW,SAAO,EAAE,EAAE,UAAkB,EAAE;;CAAK,iBAU5F"}
@@ -247,9 +247,13 @@ export async function ensureOnMain(git) {
247
247
  *
248
248
  * @param {object} git - Git adapter with async fetch() and getCommitHash() methods
249
249
  * @param {string} [scriptName='wu'] - Script name for logging
250
+ * @param {object} [options] - Options
251
+ * @param {boolean} [options.skipRemote=false] - WU-1653: Skip remote check (requireRemote=false)
250
252
  * @throws {Error} If main is out of sync with origin
251
253
  */
252
- export async function ensureMainUpToDate(git, _scriptName = 'wu') {
254
+ export async function ensureMainUpToDate(git, _scriptName = 'wu', { skipRemote = false } = {}) {
255
+ if (skipRemote)
256
+ return;
253
257
  await git.fetch(REMOTES.ORIGIN, BRANCHES.MAIN);
254
258
  const localMain = await git.getCommitHash(BRANCHES.MAIN);
255
259
  const remoteMain = await git.getCommitHash(`${REMOTES.ORIGIN}/${BRANCHES.MAIN}`);
@@ -1 +1 @@
1
- {"version":3,"file":"wu-helpers.js","sourceRoot":"","sources":["../src/wu-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wu-helpers.js","sourceRoot":"","sources":["../src/wu-helpers.ts"],"names":[],"mappings":"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"}
package/dist/wu-lint.d.ts CHANGED
@@ -5,10 +5,9 @@
5
5
  * 1. Acceptance criteria cannot reference file paths absent from code_paths
6
6
  * 2. Acceptance/code_paths cannot conflict with invariants.yml
7
7
  *
8
- * This prevents specs that create work contradicting prior fixes.
9
- *
10
- * @module tools/lib/wu-lint
8
+ * Shared phase-aware checks are delegated to wu-rules-engine.
11
9
  */
10
+ import { type ValidationPhase } from './wu-rules-engine.js';
12
11
  /**
13
12
  * Error type constants for WU spec linting
14
13
  */
@@ -16,32 +15,27 @@ export declare const WU_LINT_ERROR_TYPES: {
16
15
  ACCEPTANCE_PATH_NOT_IN_CODE_PATHS: string;
17
16
  CODE_PATH_CONFLICTS_INVARIANT: string;
18
17
  ACCEPTANCE_CONFLICTS_INVARIANT: string;
19
- /** WU-1504: CLI command registration parity missing */
18
+ /** CLI registration parity surface missing */
20
19
  REGISTRATION_PARITY_MISSING: string;
20
+ /** Backward-compatible key for minimum test intent */
21
+ UNIT_TESTS_REQUIRED: string;
22
+ /** Canonical minimum test intent key */
23
+ MINIMUM_TEST_INTENT_REQUIRED: string;
21
24
  };
22
25
  /**
23
- * WU-1504: Registration surface paths that must be present when CLI commands change
26
+ * Registration surface paths required when CLI bin changes.
24
27
  */
25
28
  export declare const REGISTRATION_SURFACES: {
26
29
  readonly PUBLIC_MANIFEST: "packages/@lumenflow/cli/src/public-manifest.ts";
27
30
  readonly MCP_TOOLS: "packages/@lumenflow/mcp/src/tools.ts";
28
31
  };
29
32
  /**
30
- * WU-1504 + WU-1530: Patterns that indicate a CLI command surface change.
31
- *
32
- * Only package.json triggers parity checks (indicates new bin entry).
33
- * Existing CLI source files can have internal changes without needing
34
- * registration surface updates.
33
+ * Paths historically used to indicate CLI command surface changes.
34
+ * Kept exported for compatibility and docs/tests.
35
35
  */
36
36
  export declare const CLI_COMMAND_PATTERNS: string[];
37
37
  /**
38
38
  * Validate that acceptance criteria only reference paths in code_paths
39
- *
40
- * @param {object} wu - WU spec object
41
- * @param {string} wu.id - WU ID
42
- * @param {string[]} wu.acceptance - Acceptance criteria
43
- * @param {string[]} wu.code_paths - Code paths
44
- * @returns {{valid: boolean, errors: Array<object>}} Validation result
45
39
  */
46
40
  export declare function validateAcceptanceCodePaths(wu: any): {
47
41
  valid: boolean;
@@ -49,32 +43,46 @@ export declare function validateAcceptanceCodePaths(wu: any): {
49
43
  };
50
44
  /**
51
45
  * Validate that code_paths and acceptance do not conflict with invariants
52
- *
53
- * @param {object} wu - WU spec object
54
- * @param {Array<object>} invariants - Array of invariant definitions
55
- * @returns {{valid: boolean, errors: Array<object>}} Validation result
56
46
  */
57
47
  export declare function validateInvariantsCompliance(wu: any, invariants: any): {
58
48
  valid: boolean;
59
49
  errors: any[];
60
50
  };
61
51
  /**
62
- * WU-1504: Validate CLI command registration parity.
63
- *
64
- * When WU code_paths include package.json bin-entry changes, registration
65
- * surfaces (public-manifest.ts and MCP tools.ts) must also be present in
66
- * code_paths.
67
- *
68
- * Skips validation for terminal WU statuses (done, cancelled, etc.) since
69
- * those specs are historical and should not be retroactively flagged.
52
+ * Backward-compatible adapter for minimum test intent.
53
+ */
54
+ export declare function validateUnitTestsRequirement(wu: {
55
+ id: string;
56
+ type?: string;
57
+ status?: string;
58
+ code_paths?: string[];
59
+ tests?: {
60
+ unit?: string[];
61
+ e2e?: string[];
62
+ integration?: string[];
63
+ manual?: string[];
64
+ };
65
+ }): {
66
+ valid: boolean;
67
+ errors: Array<{
68
+ type: string;
69
+ wuId: string;
70
+ message: string;
71
+ suggestion: string;
72
+ }>;
73
+ };
74
+ /**
75
+ * Adapter for parity surface validation.
70
76
  *
71
- * @param wu - WU spec object with id, code_paths, and optional status
72
- * @returns Validation result with errors for missing registration surfaces
77
+ * Parity is enforced in reality-phase preflight where git diff context is available.
78
+ * This adapter only enforces when caller explicitly confirms `binChanged`.
73
79
  */
74
80
  export declare function validateRegistrationParity(wu: {
75
81
  id: string;
76
82
  code_paths?: string[];
77
83
  status?: string;
84
+ }, options?: {
85
+ binChanged?: boolean;
78
86
  }): {
79
87
  valid: boolean;
80
88
  errors: Array<{
@@ -83,6 +91,12 @@ export declare function validateRegistrationParity(wu: {
83
91
  message: string;
84
92
  suggestion: string;
85
93
  }>;
94
+ warnings?: Array<{
95
+ type: string;
96
+ wuId: string;
97
+ message: string;
98
+ suggestion: string;
99
+ }>;
86
100
  };
87
101
  /**
88
102
  * Options for linting WU spec
@@ -92,23 +106,25 @@ export interface LintWUSpecOptions {
92
106
  invariants?: unknown[];
93
107
  /** Path to invariants.yml */
94
108
  invariantsPath?: string;
109
+ /** Validation phase for shared rule engine */
110
+ phase?: ValidationPhase;
111
+ /** Optional validation context */
112
+ context?: {
113
+ cwd?: string;
114
+ baseRef?: string;
115
+ headRef?: string;
116
+ };
95
117
  }
96
118
  /**
97
119
  * Lint a WU spec against all rules
98
- *
99
- * @param {object} wu - WU spec object
100
- * @param {LintWUSpecOptions} [options={}] - Options
101
- * @returns {{valid: boolean, errors: Array<object>}} Lint result
102
120
  */
103
121
  export declare function lintWUSpec(wu: any, options?: LintWUSpecOptions): {
104
122
  valid: boolean;
105
123
  errors: any[];
124
+ warnings: any[];
106
125
  };
107
126
  /**
108
127
  * Format lint errors for display
109
- *
110
- * @param {Array<object>} errors - Array of lint errors
111
- * @returns {string} Formatted error message
112
128
  */
113
129
  export declare function formatLintErrors(errors: any): string;
114
130
  //# sourceMappingURL=wu-lint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wu-lint.d.ts","sourceRoot":"","sources":["../src/wu-lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;IAI9B,uDAAuD;;CAExD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;CAGxB,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAA6C,CAAC;AAqEvF;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,KAAA;;;EAyB7C;AAuED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,KAAA,EAAE,UAAU,KAAA;;;EAe1D;AA8BD;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG;IACF,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpF,CAyCA;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAA,EAAE,OAAO,GAAE,iBAAsB;;;EAiC7D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,KAAA,UAgBtC"}
1
+ {"version":3,"file":"wu-lint.d.ts","sourceRoot":"","sources":["../src/wu-lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAML,KAAK,eAAe,EAErB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;IAI9B,8CAA8C;;IAE9C,sDAAsD;;IAEtD,wCAAwC;;CAEzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;CAGxB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAA4B,CAAC;AAkDtE;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,KAAA;;;EAyB7C;AAsDD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,KAAA,EAAE,UAAU,KAAA;;;EAe1D;AAwCD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACxF,GAAG;IACF,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpF,CAuBA;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,EAAE,EAAE;IACF,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,EACD,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL;IACD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvF,CAkDA;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,kCAAkC;IAClC,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAA,EAAE,OAAO,GAAE,iBAAsB;;;;EAmD7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,KAAA,UAgBtC"}
package/dist/wu-lint.js CHANGED
@@ -5,14 +5,13 @@
5
5
  * 1. Acceptance criteria cannot reference file paths absent from code_paths
6
6
  * 2. Acceptance/code_paths cannot conflict with invariants.yml
7
7
  *
8
- * This prevents specs that create work contradicting prior fixes.
9
- *
10
- * @module tools/lib/wu-lint
8
+ * Shared phase-aware checks are delegated to wu-rules-engine.
11
9
  */
12
10
  import { existsSync } from 'node:fs';
13
11
  import { minimatch } from 'minimatch';
14
12
  import { loadInvariants, INVARIANT_TYPES } from './invariants-runner.js';
15
13
  import { WU_STATUS } from './wu-constants.js';
14
+ import { CLI_PACKAGE_JSON_PATH, REGISTRATION_SURFACES as RULE_REGISTRATION_SURFACES, RULE_CODES, normalizeValidationIssue, validateWURulesSync, } from './wu-rules-engine.js';
16
15
  /**
17
16
  * Error type constants for WU spec linting
18
17
  */
@@ -20,76 +19,59 @@ export const WU_LINT_ERROR_TYPES = {
20
19
  ACCEPTANCE_PATH_NOT_IN_CODE_PATHS: 'acceptance_path_not_in_code_paths',
21
20
  CODE_PATH_CONFLICTS_INVARIANT: 'code_path_conflicts_invariant',
22
21
  ACCEPTANCE_CONFLICTS_INVARIANT: 'acceptance_conflicts_invariant',
23
- /** WU-1504: CLI command registration parity missing */
22
+ /** CLI registration parity surface missing */
24
23
  REGISTRATION_PARITY_MISSING: 'registration_parity_missing',
24
+ /** Backward-compatible key for minimum test intent */
25
+ UNIT_TESTS_REQUIRED: 'unit_tests_required',
26
+ /** Canonical minimum test intent key */
27
+ MINIMUM_TEST_INTENT_REQUIRED: 'minimum_test_intent_required',
25
28
  };
26
29
  /**
27
- * WU-1504: Registration surface paths that must be present when CLI commands change
30
+ * Registration surface paths required when CLI bin changes.
28
31
  */
29
32
  export const REGISTRATION_SURFACES = {
30
- PUBLIC_MANIFEST: 'packages/@lumenflow/cli/src/public-manifest.ts',
31
- MCP_TOOLS: 'packages/@lumenflow/mcp/src/tools.ts',
33
+ PUBLIC_MANIFEST: RULE_REGISTRATION_SURFACES.PUBLIC_MANIFEST,
34
+ MCP_TOOLS: RULE_REGISTRATION_SURFACES.MCP_TOOLS,
32
35
  };
33
36
  /**
34
- * WU-1504 + WU-1530: Patterns that indicate a CLI command surface change.
35
- *
36
- * Only package.json triggers parity checks (indicates new bin entry).
37
- * Existing CLI source files can have internal changes without needing
38
- * registration surface updates.
37
+ * Paths historically used to indicate CLI command surface changes.
38
+ * Kept exported for compatibility and docs/tests.
39
39
  */
40
- export const CLI_COMMAND_PATTERNS = ['packages/@lumenflow/cli/package.json'];
40
+ export const CLI_COMMAND_PATTERNS = [CLI_PACKAGE_JSON_PATH];
41
41
  /**
42
42
  * WU-1504: Patterns that exclude files from parity check trigger.
43
- * Test files, lib/shared helpers, and the registration surfaces themselves
44
- * do not imply a new command registration.
43
+ * Kept for backwards compatibility; parity is now reality-phase + diff-aware.
45
44
  */
46
45
  const CLI_COMMAND_EXCLUDE_PATTERNS = [
47
46
  '__tests__/',
48
47
  '/lib/',
49
48
  '/shared/',
50
49
  '/commands/',
51
- // WU-1518: init.ts is scaffolding logic, not a CLI command registration
52
50
  '/init.ts',
53
51
  REGISTRATION_SURFACES.PUBLIC_MANIFEST,
54
52
  REGISTRATION_SURFACES.MCP_TOOLS,
55
53
  ];
56
54
  /**
57
55
  * Regex to detect file paths in acceptance criteria text
58
- * Matches patterns like: apps/web/src/file.ts, tools/lib/helper.ts
59
- * Uses explicit character sets to avoid regex backtracking issues
60
56
  */
61
57
  const FILE_PATH_PATTERN = /(?:^|[\s'"`])([a-zA-Z0-9_-]+\/[a-zA-Z0-9_./-]+\.[a-zA-Z0-9]+)/g;
62
- /**
63
- * Extract file paths from acceptance criteria text
64
- *
65
- * @param {string} text - Acceptance criterion text
66
- * @returns {string[]} Array of file paths found
67
- */
68
58
  function extractFilePaths(text) {
69
59
  const paths = [];
70
60
  let match;
71
61
  while ((match = FILE_PATH_PATTERN.exec(text)) !== null) {
72
62
  paths.push(match[1]);
73
63
  }
74
- // Reset regex state
75
64
  FILE_PATH_PATTERN.lastIndex = 0;
76
65
  return paths;
77
66
  }
78
67
  /**
79
68
  * Check if a file path matches any pattern in code_paths
80
- * Supports glob patterns (e.g., apps/web/src/**\/*.ts)
81
- *
82
- * @param {string} filePath - File path to check
83
- * @param {string[]} codePaths - Array of code_paths (may include globs)
84
- * @returns {boolean} True if path matches any code_paths pattern
85
69
  */
86
70
  function pathMatchesCodePaths(filePath, codePaths) {
87
71
  for (const pattern of codePaths) {
88
- // Exact match
89
72
  if (filePath === pattern) {
90
73
  return true;
91
74
  }
92
- // Glob match
93
75
  if (minimatch(filePath, pattern)) {
94
76
  return true;
95
77
  }
@@ -98,12 +80,6 @@ function pathMatchesCodePaths(filePath, codePaths) {
98
80
  }
99
81
  /**
100
82
  * Validate that acceptance criteria only reference paths in code_paths
101
- *
102
- * @param {object} wu - WU spec object
103
- * @param {string} wu.id - WU ID
104
- * @param {string[]} wu.acceptance - Acceptance criteria
105
- * @param {string[]} wu.code_paths - Code paths
106
- * @returns {{valid: boolean, errors: Array<object>}} Validation result
107
83
  */
108
84
  export function validateAcceptanceCodePaths(wu) {
109
85
  const { id, acceptance = [], code_paths = [] } = wu;
@@ -128,17 +104,9 @@ export function validateAcceptanceCodePaths(wu) {
128
104
  errors,
129
105
  };
130
106
  }
131
- /**
132
- * Check forbidden-file invariant for conflicts
133
- *
134
- * @param {object} invariant - Invariant definition
135
- * @param {object} wu - WU spec object
136
- * @returns {Array<object>} Array of errors (empty if no conflicts)
137
- */
138
107
  function checkForbiddenFileInvariant(invariant, wu) {
139
108
  const { id, acceptance = [], code_paths = [] } = wu;
140
109
  const errors = [];
141
- // Check if code_paths includes the forbidden file
142
110
  if (code_paths.includes(invariant.path)) {
143
111
  errors.push({
144
112
  type: WU_LINT_ERROR_TYPES.CODE_PATH_CONFLICTS_INVARIANT,
@@ -149,7 +117,6 @@ function checkForbiddenFileInvariant(invariant, wu) {
149
117
  suggestion: invariant.message || `Remove '${invariant.path}' from code_paths`,
150
118
  });
151
119
  }
152
- // Check if acceptance mentions creating the forbidden file
153
120
  for (const criterion of acceptance) {
154
121
  if (criterion.includes(invariant.path)) {
155
122
  errors.push({
@@ -165,17 +132,9 @@ function checkForbiddenFileInvariant(invariant, wu) {
165
132
  }
166
133
  return errors;
167
134
  }
168
- /**
169
- * Check mutual-exclusivity invariant for conflicts
170
- *
171
- * @param {object} invariant - Invariant definition
172
- * @param {object} wu - WU spec object
173
- * @returns {Array<object>} Array of errors (empty if no conflicts)
174
- */
175
135
  function checkMutualExclusivityInvariant(invariant, wu) {
176
136
  const { id, code_paths = [] } = wu;
177
137
  const errors = [];
178
- // Check if code_paths includes multiple files from the mutual-exclusivity set
179
138
  const conflictingPaths = invariant.paths.filter((p) => code_paths.includes(p));
180
139
  if (conflictingPaths.length > 1) {
181
140
  errors.push({
@@ -191,10 +150,6 @@ function checkMutualExclusivityInvariant(invariant, wu) {
191
150
  }
192
151
  /**
193
152
  * Validate that code_paths and acceptance do not conflict with invariants
194
- *
195
- * @param {object} wu - WU spec object
196
- * @param {Array<object>} invariants - Array of invariant definitions
197
- * @returns {{valid: boolean, errors: Array<object>}} Validation result
198
153
  */
199
154
  export function validateInvariantsCompliance(wu, invariants) {
200
155
  const errors = [];
@@ -212,12 +167,7 @@ export function validateInvariantsCompliance(wu, invariants) {
212
167
  };
213
168
  }
214
169
  /**
215
- * WU-1504 + WU-1530: Check if a code_path indicates a CLI command surface
216
- * change that would require registration in public-manifest and MCP tools.
217
- *
218
- * A path triggers parity checks if it:
219
- * 1. Matches any CLI_COMMAND_PATTERNS prefix
220
- * 2. Does NOT match any exclusion pattern (tests, lib, shared, etc.)
170
+ * Legacy parity trigger helper kept for compatibility tests/docs.
221
171
  */
222
172
  function isCliCommandPath(codePath) {
223
173
  const matchesCommand = CLI_COMMAND_PATTERNS.some((pattern) => codePath.includes(pattern));
@@ -226,10 +176,6 @@ function isCliCommandPath(codePath) {
226
176
  const isExcluded = CLI_COMMAND_EXCLUDE_PATTERNS.some((pattern) => codePath.includes(pattern));
227
177
  return !isExcluded;
228
178
  }
229
- /**
230
- * WU-1504: Terminal WU statuses that should skip parity validation.
231
- * Matches the same set used by WU-1384 for completeness check skipping.
232
- */
233
179
  const TERMINAL_STATUSES = new Set([
234
180
  WU_STATUS.DONE,
235
181
  WU_STATUS.CANCELLED,
@@ -237,68 +183,102 @@ const TERMINAL_STATUSES = new Set([
237
183
  WU_STATUS.ABANDONED,
238
184
  WU_STATUS.SUPERSEDED,
239
185
  ]);
186
+ const LINT_TYPE_BY_RULE_CODE = {
187
+ [RULE_CODES.MINIMUM_TEST_INTENT]: WU_LINT_ERROR_TYPES.MINIMUM_TEST_INTENT_REQUIRED,
188
+ [RULE_CODES.PARITY_MISSING_SURFACE]: WU_LINT_ERROR_TYPES.REGISTRATION_PARITY_MISSING,
189
+ };
190
+ function toLintIssue(wuId, issue) {
191
+ const normalized = normalizeValidationIssue(issue, {
192
+ wuId,
193
+ typeByCode: LINT_TYPE_BY_RULE_CODE,
194
+ });
195
+ return {
196
+ type: normalized.type,
197
+ wuId,
198
+ message: normalized.message,
199
+ suggestion: normalized.suggestion,
200
+ };
201
+ }
240
202
  /**
241
- * WU-1504: Validate CLI command registration parity.
242
- *
243
- * When WU code_paths include package.json bin-entry changes, registration
244
- * surfaces (public-manifest.ts and MCP tools.ts) must also be present in
245
- * code_paths.
246
- *
247
- * Skips validation for terminal WU statuses (done, cancelled, etc.) since
248
- * those specs are historical and should not be retroactively flagged.
203
+ * Backward-compatible adapter for minimum test intent.
204
+ */
205
+ export function validateUnitTestsRequirement(wu) {
206
+ const result = validateWURulesSync({
207
+ id: wu.id,
208
+ type: wu.type,
209
+ status: wu.status,
210
+ code_paths: wu.code_paths,
211
+ tests: wu.tests,
212
+ }, { phase: 'structural' });
213
+ const errors = result.errors
214
+ .filter((issue) => issue.code === RULE_CODES.MINIMUM_TEST_INTENT)
215
+ .map((issue) => ({
216
+ ...toLintIssue(wu.id, issue),
217
+ type: WU_LINT_ERROR_TYPES.UNIT_TESTS_REQUIRED,
218
+ }));
219
+ return {
220
+ valid: errors.length === 0,
221
+ errors,
222
+ };
223
+ }
224
+ /**
225
+ * Adapter for parity surface validation.
249
226
  *
250
- * @param wu - WU spec object with id, code_paths, and optional status
251
- * @returns Validation result with errors for missing registration surfaces
227
+ * Parity is enforced in reality-phase preflight where git diff context is available.
228
+ * This adapter only enforces when caller explicitly confirms `binChanged`.
252
229
  */
253
- export function validateRegistrationParity(wu) {
230
+ export function validateRegistrationParity(wu, options = {}) {
254
231
  const { id, code_paths = [], status } = wu;
255
232
  const errors = [];
256
- // Skip parity check for terminal WU statuses (WU-1384 pattern)
233
+ const warnings = [];
257
234
  if (status && TERMINAL_STATUSES.has(status)) {
258
- return { valid: true, errors };
235
+ return { valid: true, errors, warnings };
259
236
  }
260
- // Check if any code_path triggers the parity heuristic
261
- const hasCliCommandPath = code_paths.some((p) => isCliCommandPath(p));
262
- if (!hasCliCommandPath) {
263
- return { valid: true, errors };
237
+ if (!options.binChanged) {
238
+ const hasCliCommandPath = code_paths.some((p) => isCliCommandPath(p));
239
+ if (hasCliCommandPath) {
240
+ warnings.push({
241
+ type: WU_LINT_ERROR_TYPES.REGISTRATION_PARITY_MISSING,
242
+ wuId: id,
243
+ message: 'Parity check requires diff context and is enforced in reality phase (wu:prep/wu:done preflight).',
244
+ suggestion: 'Run wu:prep or wu:done preflight to evaluate bin-diff-aware registration parity.',
245
+ });
246
+ }
247
+ return { valid: true, errors, warnings };
264
248
  }
265
- // Check for missing registration surfaces
266
249
  const hasPublicManifest = code_paths.includes(REGISTRATION_SURFACES.PUBLIC_MANIFEST);
267
250
  const hasMcpTools = code_paths.includes(REGISTRATION_SURFACES.MCP_TOOLS);
268
251
  if (!hasPublicManifest) {
269
252
  errors.push({
270
253
  type: WU_LINT_ERROR_TYPES.REGISTRATION_PARITY_MISSING,
271
254
  wuId: id,
272
- message: `CLI command change detected but '${REGISTRATION_SURFACES.PUBLIC_MANIFEST}' (public-manifest.ts) is not in code_paths`,
273
- suggestion: `Add '${REGISTRATION_SURFACES.PUBLIC_MANIFEST}' to code_paths if this WU adds or changes a CLI command`,
255
+ message: `CLI bin change detected but '${REGISTRATION_SURFACES.PUBLIC_MANIFEST}' is not in code_paths`,
256
+ suggestion: `Add '${REGISTRATION_SURFACES.PUBLIC_MANIFEST}' to code_paths`,
274
257
  });
275
258
  }
276
259
  if (!hasMcpTools) {
277
260
  errors.push({
278
261
  type: WU_LINT_ERROR_TYPES.REGISTRATION_PARITY_MISSING,
279
262
  wuId: id,
280
- message: `CLI command change detected but '${REGISTRATION_SURFACES.MCP_TOOLS}' (tools.ts) is not in code_paths`,
281
- suggestion: `Add '${REGISTRATION_SURFACES.MCP_TOOLS}' to code_paths if this WU adds or changes a CLI command`,
263
+ message: `CLI bin change detected but '${REGISTRATION_SURFACES.MCP_TOOLS}' is not in code_paths`,
264
+ suggestion: `Add '${REGISTRATION_SURFACES.MCP_TOOLS}' to code_paths`,
282
265
  });
283
266
  }
284
267
  return {
285
268
  valid: errors.length === 0,
286
269
  errors,
270
+ warnings,
287
271
  };
288
272
  }
289
273
  /**
290
274
  * Lint a WU spec against all rules
291
- *
292
- * @param {object} wu - WU spec object
293
- * @param {LintWUSpecOptions} [options={}] - Options
294
- * @returns {{valid: boolean, errors: Array<object>}} Lint result
295
275
  */
296
276
  export function lintWUSpec(wu, options = {}) {
297
277
  const allErrors = [];
298
- // 1. Validate acceptance/code_paths consistency
278
+ const allWarnings = [];
279
+ const phase = options.phase || 'structural';
299
280
  const acceptanceResult = validateAcceptanceCodePaths(wu);
300
281
  allErrors.push(...acceptanceResult.errors);
301
- // 2. Load invariants if not provided
302
282
  let invariants = options.invariants || [];
303
283
  if (!options.invariants && options.invariantsPath) {
304
284
  try {
@@ -307,27 +287,37 @@ export function lintWUSpec(wu, options = {}) {
307
287
  }
308
288
  }
309
289
  catch {
310
- // If invariants can't be loaded, continue without them
290
+ // Continue without invariants when loading fails.
311
291
  }
312
292
  }
313
- // 3. Validate invariants compliance
314
293
  if (invariants.length > 0) {
315
294
  const invariantsResult = validateInvariantsCompliance(wu, invariants);
316
295
  allErrors.push(...invariantsResult.errors);
317
296
  }
318
- // 4. WU-1504: Validate CLI command registration parity
319
- const parityResult = validateRegistrationParity(wu);
320
- allErrors.push(...parityResult.errors);
297
+ const rulesResult = validateWURulesSync({
298
+ id: wu.id,
299
+ type: wu.type,
300
+ status: wu.status,
301
+ code_paths: wu.code_paths,
302
+ tests: wu.tests || wu.test_paths,
303
+ cwd: options.context?.cwd,
304
+ baseRef: options.context?.baseRef,
305
+ headRef: options.context?.headRef,
306
+ }, { phase });
307
+ for (const issue of rulesResult.errors) {
308
+ allErrors.push(toLintIssue(wu.id, issue));
309
+ }
310
+ for (const issue of rulesResult.warnings) {
311
+ allWarnings.push(toLintIssue(wu.id, issue));
312
+ }
321
313
  return {
322
314
  valid: allErrors.length === 0,
323
315
  errors: allErrors,
316
+ warnings: allWarnings,
324
317
  };
325
318
  }
326
319
  /**
327
320
  * Format lint errors for display
328
- *
329
- * @param {Array<object>} errors - Array of lint errors
330
- * @returns {string} Formatted error message
331
321
  */
332
322
  export function formatLintErrors(errors) {
333
323
  if (errors.length === 0) {