@lumenflow/cli 2.11.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/README.md +6 -17
  2. package/dist/__tests__/commands.test.js +198 -2
  3. package/dist/__tests__/init-docs-structure.test.js +33 -0
  4. package/dist/__tests__/initiative-add-wu.test.js +71 -1
  5. package/dist/__tests__/no-beacon-references-docs.test.js +30 -0
  6. package/dist/__tests__/no-beacon-references.test.js +39 -0
  7. package/dist/__tests__/wu-create.test.js +50 -1
  8. package/dist/__tests__/wu-done-docs-only-policy.test.js +20 -0
  9. package/dist/__tests__/wu-prep-default-exec.test.js +35 -0
  10. package/dist/__tests__/wu-prep.test.js +32 -0
  11. package/dist/__tests__/wu-validate.test.js +36 -0
  12. package/dist/agent-issues-query.js +1 -0
  13. package/dist/agent-issues-query.js.map +1 -0
  14. package/dist/agent-log-issue.js +1 -0
  15. package/dist/agent-log-issue.js.map +1 -0
  16. package/dist/agent-session-end.js +1 -0
  17. package/dist/agent-session-end.js.map +1 -0
  18. package/dist/agent-session.js +1 -0
  19. package/dist/agent-session.js.map +1 -0
  20. package/dist/backlog-prune.js +2 -0
  21. package/dist/backlog-prune.js.map +1 -0
  22. package/dist/cli-entry-point.js +1 -0
  23. package/dist/cli-entry-point.js.map +1 -0
  24. package/dist/commands/integrate.js +1 -0
  25. package/dist/commands/integrate.js.map +1 -0
  26. package/dist/commands.js +56 -77
  27. package/dist/commands.js.map +1 -0
  28. package/dist/deps-add.js +1 -0
  29. package/dist/deps-add.js.map +1 -0
  30. package/dist/deps-remove.js +1 -0
  31. package/dist/deps-remove.js.map +1 -0
  32. package/dist/docs-sync.js +1 -0
  33. package/dist/docs-sync.js.map +1 -0
  34. package/dist/doctor.js +1 -0
  35. package/dist/doctor.js.map +1 -0
  36. package/dist/file-delete.js +1 -0
  37. package/dist/file-delete.js.map +1 -0
  38. package/dist/file-edit.js +1 -0
  39. package/dist/file-edit.js.map +1 -0
  40. package/dist/file-read.js +1 -0
  41. package/dist/file-read.js.map +1 -0
  42. package/dist/file-write.js +1 -0
  43. package/dist/file-write.js.map +1 -0
  44. package/dist/flow-bottlenecks.js +1 -0
  45. package/dist/flow-bottlenecks.js.map +1 -0
  46. package/dist/flow-report.js +1 -0
  47. package/dist/flow-report.js.map +1 -0
  48. package/dist/gates.js +26 -12
  49. package/dist/gates.js.map +1 -0
  50. package/dist/git-branch.js +1 -0
  51. package/dist/git-branch.js.map +1 -0
  52. package/dist/git-diff.js +1 -0
  53. package/dist/git-diff.js.map +1 -0
  54. package/dist/git-log.js +1 -0
  55. package/dist/git-log.js.map +1 -0
  56. package/dist/git-status.js +1 -0
  57. package/dist/git-status.js.map +1 -0
  58. package/dist/guard-locked.js +1 -0
  59. package/dist/guard-locked.js.map +1 -0
  60. package/dist/guard-main-branch.js +1 -0
  61. package/dist/guard-main-branch.js.map +1 -0
  62. package/dist/guard-worktree-commit.js +1 -0
  63. package/dist/guard-worktree-commit.js.map +1 -0
  64. package/dist/hooks/auto-checkpoint-utils.js +52 -0
  65. package/dist/hooks/auto-checkpoint-utils.js.map +1 -0
  66. package/dist/hooks/enforcement-checks.js +1 -0
  67. package/dist/hooks/enforcement-checks.js.map +1 -0
  68. package/dist/hooks/enforcement-generator.js +185 -1
  69. package/dist/hooks/enforcement-generator.js.map +1 -0
  70. package/dist/hooks/enforcement-sync.js +91 -1
  71. package/dist/hooks/enforcement-sync.js.map +1 -0
  72. package/dist/hooks/index.js +1 -0
  73. package/dist/hooks/index.js.map +1 -0
  74. package/dist/index.js +1 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/init.js +32 -36
  77. package/dist/init.js.map +1 -0
  78. package/dist/initiative-add-wu.js +180 -59
  79. package/dist/initiative-add-wu.js.map +1 -0
  80. package/dist/initiative-bulk-assign-wus.js +3 -1
  81. package/dist/initiative-bulk-assign-wus.js.map +1 -0
  82. package/dist/initiative-create.js +1 -0
  83. package/dist/initiative-create.js.map +1 -0
  84. package/dist/initiative-edit.js +67 -32
  85. package/dist/initiative-edit.js.map +1 -0
  86. package/dist/initiative-list.js +1 -0
  87. package/dist/initiative-list.js.map +1 -0
  88. package/dist/initiative-plan.js +1 -0
  89. package/dist/initiative-plan.js.map +1 -0
  90. package/dist/initiative-remove-wu.js +1 -0
  91. package/dist/initiative-remove-wu.js.map +1 -0
  92. package/dist/initiative-status.js +1 -0
  93. package/dist/initiative-status.js.map +1 -0
  94. package/dist/lane-health.js +1 -0
  95. package/dist/lane-health.js.map +1 -0
  96. package/dist/lane-suggest.js +1 -0
  97. package/dist/lane-suggest.js.map +1 -0
  98. package/dist/lumenflow-upgrade.js +1 -0
  99. package/dist/lumenflow-upgrade.js.map +1 -0
  100. package/dist/mem-checkpoint.js +1 -0
  101. package/dist/mem-checkpoint.js.map +1 -0
  102. package/dist/mem-cleanup.js +114 -1
  103. package/dist/mem-cleanup.js.map +1 -0
  104. package/dist/mem-context.js +1 -0
  105. package/dist/mem-context.js.map +1 -0
  106. package/dist/mem-create.js +1 -0
  107. package/dist/mem-create.js.map +1 -0
  108. package/dist/mem-delete.js +1 -0
  109. package/dist/mem-delete.js.map +1 -0
  110. package/dist/mem-export.js +1 -0
  111. package/dist/mem-export.js.map +1 -0
  112. package/dist/mem-inbox.js +1 -0
  113. package/dist/mem-inbox.js.map +1 -0
  114. package/dist/mem-index.js +1 -0
  115. package/dist/mem-index.js.map +1 -0
  116. package/dist/mem-init.js +1 -0
  117. package/dist/mem-init.js.map +1 -0
  118. package/dist/mem-profile.js +1 -0
  119. package/dist/mem-profile.js.map +1 -0
  120. package/dist/mem-promote.js +1 -0
  121. package/dist/mem-promote.js.map +1 -0
  122. package/dist/mem-ready.js +1 -0
  123. package/dist/mem-ready.js.map +1 -0
  124. package/dist/mem-recover.js +1 -0
  125. package/dist/mem-recover.js.map +1 -0
  126. package/dist/mem-signal.js +12 -1
  127. package/dist/mem-signal.js.map +1 -0
  128. package/dist/mem-start.js +1 -0
  129. package/dist/mem-start.js.map +1 -0
  130. package/dist/mem-summarize.js +1 -0
  131. package/dist/mem-summarize.js.map +1 -0
  132. package/dist/mem-triage.js +2 -1
  133. package/dist/mem-triage.js.map +1 -0
  134. package/dist/merge-block.js +1 -0
  135. package/dist/merge-block.js.map +1 -0
  136. package/dist/metrics-cli.js +1 -0
  137. package/dist/metrics-cli.js.map +1 -0
  138. package/dist/metrics-snapshot.js +1 -0
  139. package/dist/metrics-snapshot.js.map +1 -0
  140. package/dist/onboarding-smoke-test.js +1 -0
  141. package/dist/onboarding-smoke-test.js.map +1 -0
  142. package/dist/orchestrate-init-status.js +1 -0
  143. package/dist/orchestrate-init-status.js.map +1 -0
  144. package/dist/orchestrate-initiative.js +1 -0
  145. package/dist/orchestrate-initiative.js.map +1 -0
  146. package/dist/orchestrate-monitor.js +1 -0
  147. package/dist/orchestrate-monitor.js.map +1 -0
  148. package/dist/plan-create.js +1 -0
  149. package/dist/plan-create.js.map +1 -0
  150. package/dist/plan-edit.js +1 -0
  151. package/dist/plan-edit.js.map +1 -0
  152. package/dist/plan-link.js +1 -0
  153. package/dist/plan-link.js.map +1 -0
  154. package/dist/plan-promote.js +1 -0
  155. package/dist/plan-promote.js.map +1 -0
  156. package/dist/public-manifest.js +773 -0
  157. package/dist/public-manifest.js.map +1 -0
  158. package/dist/release.js +3 -2
  159. package/dist/release.js.map +1 -0
  160. package/dist/rotate-progress.js +2 -1
  161. package/dist/rotate-progress.js.map +1 -0
  162. package/dist/session-coordinator.js +1 -0
  163. package/dist/session-coordinator.js.map +1 -0
  164. package/dist/shared-validators.js +78 -0
  165. package/dist/shared-validators.js.map +1 -0
  166. package/dist/signal-cleanup.js +1 -0
  167. package/dist/signal-cleanup.js.map +1 -0
  168. package/dist/spawn-list.js +1 -0
  169. package/dist/spawn-list.js.map +1 -0
  170. package/dist/state-bootstrap.js +1 -0
  171. package/dist/state-bootstrap.js.map +1 -0
  172. package/dist/state-cleanup.js +1 -0
  173. package/dist/state-cleanup.js.map +1 -0
  174. package/dist/state-doctor-fix.js +1 -0
  175. package/dist/state-doctor-fix.js.map +1 -0
  176. package/dist/state-doctor.js +1 -0
  177. package/dist/state-doctor.js.map +1 -0
  178. package/dist/sync-templates.js +1 -0
  179. package/dist/sync-templates.js.map +1 -0
  180. package/dist/trace-gen.js +1 -0
  181. package/dist/trace-gen.js.map +1 -0
  182. package/dist/validate-agent-skills.js +1 -0
  183. package/dist/validate-agent-skills.js.map +1 -0
  184. package/dist/validate-agent-sync.js +1 -0
  185. package/dist/validate-agent-sync.js.map +1 -0
  186. package/dist/validate-backlog-sync.js +1 -0
  187. package/dist/validate-backlog-sync.js.map +1 -0
  188. package/dist/validate-skills-spec.js +1 -0
  189. package/dist/validate-skills-spec.js.map +1 -0
  190. package/dist/validate.js +1 -0
  191. package/dist/validate.js.map +1 -0
  192. package/dist/wu-block.js +1 -0
  193. package/dist/wu-block.js.map +1 -0
  194. package/dist/wu-claim-repair-guidance.js +10 -0
  195. package/dist/wu-claim-repair-guidance.js.map +1 -0
  196. package/dist/wu-claim.js +40 -0
  197. package/dist/wu-claim.js.map +1 -0
  198. package/dist/wu-cleanup.js +2 -1
  199. package/dist/wu-cleanup.js.map +1 -0
  200. package/dist/wu-create.js +58 -14
  201. package/dist/wu-create.js.map +1 -0
  202. package/dist/wu-delete.js +3 -2
  203. package/dist/wu-delete.js.map +1 -0
  204. package/dist/wu-deps.js +2 -1
  205. package/dist/wu-deps.js.map +1 -0
  206. package/dist/wu-done-auto-cleanup.js +1 -0
  207. package/dist/wu-done-auto-cleanup.js.map +1 -0
  208. package/dist/wu-done-check.js +1 -0
  209. package/dist/wu-done-check.js.map +1 -0
  210. package/dist/wu-done-decay.js +88 -0
  211. package/dist/wu-done-decay.js.map +1 -0
  212. package/dist/wu-done.js +75 -18
  213. package/dist/wu-done.js.map +1 -0
  214. package/dist/wu-edit.js +2 -1
  215. package/dist/wu-edit.js.map +1 -0
  216. package/dist/wu-infer-lane.js +1 -0
  217. package/dist/wu-infer-lane.js.map +1 -0
  218. package/dist/wu-preflight.js +1 -0
  219. package/dist/wu-preflight.js.map +1 -0
  220. package/dist/wu-prep.js +105 -9
  221. package/dist/wu-prep.js.map +1 -0
  222. package/dist/wu-proto.js +12 -9
  223. package/dist/wu-proto.js.map +1 -0
  224. package/dist/wu-prune.js +1 -0
  225. package/dist/wu-prune.js.map +1 -0
  226. package/dist/wu-recover.js +1 -0
  227. package/dist/wu-recover.js.map +1 -0
  228. package/dist/wu-release.js +2 -1
  229. package/dist/wu-release.js.map +1 -0
  230. package/dist/wu-repair.js +1 -0
  231. package/dist/wu-repair.js.map +1 -0
  232. package/dist/wu-spawn-completion.js +1 -0
  233. package/dist/wu-spawn-completion.js.map +1 -0
  234. package/dist/wu-spawn.js +1 -0
  235. package/dist/wu-spawn.js.map +1 -0
  236. package/dist/wu-status.js +1 -0
  237. package/dist/wu-status.js.map +1 -0
  238. package/dist/wu-unblock.js +1 -0
  239. package/dist/wu-unblock.js.map +1 -0
  240. package/dist/wu-unlock-lane.js +1 -0
  241. package/dist/wu-unlock-lane.js.map +1 -0
  242. package/dist/wu-validate.js +58 -9
  243. package/dist/wu-validate.js.map +1 -0
  244. package/package.json +11 -21
  245. package/templates/core/.husky/pre-commit.template +5 -5
  246. package/templates/core/LUMENFLOW.md.template +2 -2
  247. package/templates/core/ai/onboarding/agent-safety-card.md.template +6 -6
  248. package/templates/core/ai/onboarding/lumenflow-force-usage.md.template +4 -4
@@ -6,6 +6,7 @@
6
6
  * .claude/settings.json to enforce LumenFlow workflow compliance.
7
7
  */
8
8
  import { CLAUDE_HOOKS, getHookCommand } from '@lumenflow/core';
9
+ import { loadSignals, markSignalsAsRead } from '@lumenflow/memory/dist/mem-signal-core.js';
9
10
  // Re-export for backwards compatibility (WU-1394)
10
11
  export const HOOK_SCRIPTS = CLAUDE_HOOKS.SCRIPTS;
11
12
  /**
@@ -56,6 +57,27 @@ export function generateEnforcementHooks(config) {
56
57
  },
57
58
  ];
58
59
  }
60
+ // WU-1471: Generate PostToolUse and SubagentStop hooks for auto-checkpoint
61
+ if (config.auto_checkpoint?.enabled) {
62
+ const autoCheckpointHook = {
63
+ type: 'command',
64
+ command: getHookCommand(HOOK_SCRIPTS.AUTO_CHECKPOINT),
65
+ };
66
+ // PostToolUse: fires after every tool call, counter tracks interval
67
+ hooks.postToolUse = [
68
+ {
69
+ matcher: CLAUDE_HOOKS.MATCHERS.ALL,
70
+ hooks: [autoCheckpointHook],
71
+ },
72
+ ];
73
+ // SubagentStop: fires when a sub-agent finishes, always checkpoint
74
+ hooks.subagentStop = [
75
+ {
76
+ matcher: CLAUDE_HOOKS.MATCHERS.SUBAGENT_STOP,
77
+ hooks: [autoCheckpointHook],
78
+ },
79
+ ];
80
+ }
59
81
  // Always generate PreCompact and SessionStart recovery hooks (WU-1394)
60
82
  // These enable durable context recovery after compaction
61
83
  hooks.preCompact = [
@@ -483,7 +505,7 @@ except:
483
505
  print('')
484
506
  " 2>/dev/null || echo "")
485
507
 
486
- # Only proceed if we have a WU ID (working in a worktree)
508
+ # Proceed with worktree-based recovery if we have a WU ID
487
509
  if [[ -n "\$WU_ID" ]]; then
488
510
  # Save checkpoint with pre-compact trigger
489
511
  # Note: This may fail if CLI not built, but that's OK - recovery file is more important
@@ -518,6 +540,16 @@ EOF
518
540
  echo "Recovery context: \${RECOVERY_FILE}" >&2
519
541
  echo "Next: pnpm wu:spawn --id \${WU_ID}" >&2
520
542
  echo "═══════════════════════════════════════════════════════" >&2
543
+ else
544
+ # WU-1473: Non-worktree orchestrator context recovery
545
+ # When not in a worktree (e.g., orchestrator on main), surface unread inbox
546
+ # so agents have coordination context after compaction
547
+ echo "" >&2
548
+ echo "═══════════════════════════════════════════════════════" >&2
549
+ echo "⚠️ COMPACTION: No active WU detected (non-worktree context)" >&2
550
+ echo "Surfacing recent coordination signals via mem:inbox..." >&2
551
+ pnpm mem:inbox --since 1h --quiet 2>/dev/null >&2 || true
552
+ echo "═══════════════════════════════════════════════════════" >&2
521
553
  fi
522
554
 
523
555
  # Always exit 0 - cannot block compaction
@@ -610,7 +642,159 @@ if [[ "\$FOUND_RECOVERY" == "true" ]]; then
610
642
  echo "" >&2
611
643
  fi
612
644
 
645
+ # WU-1473: Surface unread coordination signals for non-worktree orchestrators
646
+ # Even without recovery files, agents benefit from seeing recent inbox activity
647
+ # This supports orchestrators running from main checkout (not in a worktree)
648
+ pnpm mem:inbox --since 1h --unread-only --quiet 2>/dev/null >&2 || true
649
+
650
+ exit 0
651
+ `;
652
+ /* eslint-enable no-useless-escape */
653
+ }
654
+ /**
655
+ * WU-1473: Surface unread signals for agent consumption during claim/start.
656
+ *
657
+ * Loads all unread signals from the memory layer and returns them for display.
658
+ * Implements fail-open: any error returns an empty result without throwing.
659
+ *
660
+ * @param baseDir - Project base directory
661
+ * @returns Unread signal summary (never throws)
662
+ */
663
+ export async function surfaceUnreadSignals(baseDir) {
664
+ try {
665
+ const signals = await loadSignals(baseDir, { unreadOnly: true });
666
+ return { count: signals.length, signals };
667
+ }
668
+ catch {
669
+ // WU-1473 AC4: Fail-open - memory errors never block lifecycle commands
670
+ return { count: 0, signals: [] };
671
+ }
672
+ }
673
+ /**
674
+ * WU-1473: Mark all signals for a completed WU as read using receipt-aware behavior.
675
+ *
676
+ * Loads signals scoped to the given WU ID and marks any unread ones as read
677
+ * by appending receipts (WU-1472 pattern). Does not rewrite signals.jsonl.
678
+ * Implements fail-open: any error returns zero count without throwing.
679
+ *
680
+ * @param baseDir - Project base directory
681
+ * @param wuId - WU ID whose signals should be marked as read
682
+ * @returns Result with count of signals marked (never throws)
683
+ */
684
+ export async function markCompletedWUSignalsAsRead(baseDir, wuId) {
685
+ try {
686
+ const signals = await loadSignals(baseDir, { wuId, unreadOnly: true });
687
+ if (signals.length === 0) {
688
+ return { markedCount: 0 };
689
+ }
690
+ const signalIds = signals.map((sig) => sig.id);
691
+ return await markSignalsAsRead(baseDir, signalIds);
692
+ }
693
+ catch {
694
+ // WU-1473 AC4: Fail-open - memory errors never block lifecycle commands
695
+ return { markedCount: 0 };
696
+ }
697
+ }
698
+ export function generateAutoCheckpointScript(intervalToolCalls) {
699
+ // Note: Shell variable escapes (\$, \") are intentional for the generated bash script
700
+ /* eslint-disable no-useless-escape */
701
+ return `#!/bin/bash
702
+ #
703
+ # auto-checkpoint.sh (WU-1471)
704
+ #
705
+ # PostToolUse + SubagentStop hook for automatic checkpointing.
706
+ # Branches on hook_event_name to decide behavior:
707
+ # - PostToolUse: counter-based checkpoint at interval
708
+ # - SubagentStop: always checkpoint (sub-agent completed work)
709
+ #
710
+ # Checkpoint writes are backgrounded in a defensive subshell
711
+ # to avoid blocking the agent.
712
+ #
713
+ # Exit codes:
714
+ # 0 = Always (never blocks tool execution)
715
+ #
716
+
717
+ # Fail-open: any error allows the operation to continue
718
+ set +e
719
+
720
+ INTERVAL=${intervalToolCalls}
721
+
722
+ # Derive repo paths
723
+ if [[ -z "\\\${CLAUDE_PROJECT_DIR:-}" ]]; then
724
+ exit 0
725
+ fi
726
+
727
+ REPO_PATH="\\\$CLAUDE_PROJECT_DIR"
728
+ LUMENFLOW_DIR="\\\${REPO_PATH}/.lumenflow"
729
+ COUNTERS_DIR="\\\${LUMENFLOW_DIR}/state/hook-counters"
730
+
731
+ # Check if LumenFlow is configured
732
+ if [[ ! -d "\\\$LUMENFLOW_DIR" ]]; then
733
+ exit 0
734
+ fi
735
+
736
+ # Detect WU ID from worktree context
737
+ WU_ID=""
738
+ CWD=\\\$(pwd 2>/dev/null || echo "")
739
+ if [[ "\\\$CWD" == *"/worktrees/"* ]]; then
740
+ # Extract WU ID from worktree path (e.g., worktrees/framework-cli-wu-1471)
741
+ WORKTREE_NAME=\\\$(basename "\\\$CWD")
742
+ WU_ID=\\\$(echo "\\\$WORKTREE_NAME" | grep -oiE 'wu-[0-9]+' | head -1 | tr '[:lower:]' '[:upper:]')
743
+ fi
744
+
745
+ if [[ -z "\\\$WU_ID" ]]; then
746
+ exit 0
747
+ fi
748
+
749
+ # Determine hook event name (set by Claude Code runtime)
750
+ HOOK_EVENT="\\\${hook_event_name:-PostToolUse}"
751
+
752
+ # Branch on event type
753
+ case "\\\$HOOK_EVENT" in
754
+ SubagentStop)
755
+ # Always checkpoint when sub-agent stops
756
+ (
757
+ pnpm mem:checkpoint "Auto: sub-agent completed" --wu "\\\$WU_ID" --trigger "subagent-stop" --quiet 2>/dev/null || true
758
+ ) &
759
+ ;;
760
+ *)
761
+ # PostToolUse (default): counter-based checkpointing
762
+ mkdir -p "\\\$COUNTERS_DIR" 2>/dev/null || true
763
+ COUNTER_FILE="\\\${COUNTERS_DIR}/\\\${WU_ID}.json"
764
+
765
+ # Read current count (default 0)
766
+ COUNT=0
767
+ if [[ -f "\\\$COUNTER_FILE" ]]; then
768
+ COUNT=\\\$(python3 -c "
769
+ import json
770
+ try:
771
+ with open('\\\$COUNTER_FILE', 'r') as f:
772
+ data = json.load(f)
773
+ print(data.get('count', 0))
774
+ except:
775
+ print(0)
776
+ " 2>/dev/null || echo "0")
777
+ fi
778
+
779
+ # Increment counter
780
+ COUNT=\\\$((COUNT + 1))
781
+
782
+ # Check if we've reached the interval
783
+ if [[ \\\$COUNT -ge \\\$INTERVAL ]]; then
784
+ # Reset counter and checkpoint in background
785
+ echo '{"count": 0}' > "\\\$COUNTER_FILE" 2>/dev/null || true
786
+ (
787
+ pnpm mem:checkpoint "Auto: \\\${COUNT} tool calls" --wu "\\\$WU_ID" --trigger "auto-interval" --quiet 2>/dev/null || true
788
+ ) &
789
+ else
790
+ # Just update the counter
791
+ echo "{\\\\\\"count\\\\\\": \\\$COUNT}" > "\\\$COUNTER_FILE" 2>/dev/null || true
792
+ fi
793
+ ;;
794
+ esac
795
+
613
796
  exit 0
614
797
  `;
615
798
  /* eslint-enable no-useless-escape */
616
799
  }
800
+ //# sourceMappingURL=enforcement-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcement-generator.js","sourceRoot":"","sources":["../../src/hooks/enforcement-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE3F,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC;AAiDjD;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAyB;IAChE,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,eAAe,GAAgB,EAAE,CAAC;IAExC,sDAAsD;IACtD,IAAI,MAAM,CAAC,sBAAsB,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACjE,MAAM,cAAc,GAAqB,EAAE,CAAC;QAE5C,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;YAClC,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,eAAe,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU;gBACzC,KAAK,EAAE,cAAc;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC;IACrC,CAAC;IAED,oDAAoD;IACpD,IAAI,MAAM,CAAC,4BAA4B,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,GAAG;YACX;gBACE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG;gBAClC,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC;qBACtD;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,IAAI,MAAM,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QACpC,MAAM,kBAAkB,GAAmB;YACzC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC;SACtD,CAAC;QAEF,oEAAoE;QACpE,KAAK,CAAC,WAAW,GAAG;YAClB;gBACE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG;gBAClC,KAAK,EAAE,CAAC,kBAAkB,CAAC;aAC5B;SACF,CAAC;QAEF,mEAAmE;QACnE,KAAK,CAAC,YAAY,GAAG;YACnB;gBACE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa;gBAC5C,KAAK,EAAE,CAAC,kBAAkB,CAAC;aAC5B;SACF,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,yDAAyD;IACzD,KAAK,CAAC,UAAU,GAAG;QACjB;YACE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG;YAClC,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,sBAAsB,CAAC;iBAC7D;aACF;SACF;KACF,CAAC;IAEF,KAAK,CAAC,YAAY,GAAG;QACnB;YACE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO;YACtC,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,sBAAsB,CAAC;iBAC7D;aACF;SACF;QACD;YACE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM;YACrC,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,sBAAsB,CAAC;iBAC7D;aACF;SACF;QACD;YACE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK;YACpC,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,sBAAsB,CAAC;iBAC7D;aACF;SACF;KACF,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B;IAC3C,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIR,CAAC;IACA,qCAAqC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB;IACrC,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FR,CAAC;IACA,qCAAqC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B;IAC1C,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CR,CAAC;IACA,qCAAqC;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kCAAkC;IAChD,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHR,CAAC;IACA,qCAAqC;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kCAAkC;IAChD,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ER,CAAC;IACA,qCAAqC;AACvC,CAAC;AAuCD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAe,EACf,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO,MAAM,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,iBAAyB;IACpE,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;WAmBE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6E3B,CAAC;IACA,qCAAqC;AACvC,CAAC"}
@@ -10,7 +10,8 @@
10
10
  import * as fs from 'node:fs';
11
11
  import * as path from 'node:path';
12
12
  import * as yaml from 'yaml';
13
- import { generateEnforcementHooks, generateEnforceWorktreeScript, generateRequireWuScript, generateWarnIncompleteScript, generatePreCompactCheckpointScript, generateSessionStartRecoveryScript, HOOK_SCRIPTS, } from './enforcement-generator.js';
13
+ import { generateEnforcementHooks, generateEnforceWorktreeScript, generateRequireWuScript, generateWarnIncompleteScript, generatePreCompactCheckpointScript, generateSessionStartRecoveryScript, generateAutoCheckpointScript, HOOK_SCRIPTS, } from './enforcement-generator.js';
14
+ import { checkAutoCheckpointWarning } from './auto-checkpoint-utils.js';
14
15
  /**
15
16
  * Read LumenFlow configuration from .lumenflow.config.yaml
16
17
  *
@@ -41,11 +42,20 @@ function getEnforcementConfig(config) {
41
42
  if (!enforcement || !enforcement.hooks) {
42
43
  return null;
43
44
  }
45
+ // WU-1471: Extract auto-checkpoint config from memory.enforcement
46
+ const memoryEnforcement = config?.memory?.enforcement;
47
+ const autoCheckpoint = memoryEnforcement?.auto_checkpoint;
44
48
  return {
45
49
  hooks: enforcement.hooks ?? false,
46
50
  block_outside_worktree: enforcement.block_outside_worktree ?? false,
47
51
  require_wu_for_edits: enforcement.require_wu_for_edits ?? false,
48
52
  warn_on_stop_without_wu_done: enforcement.warn_on_stop_without_wu_done ?? false,
53
+ auto_checkpoint: autoCheckpoint?.enabled
54
+ ? {
55
+ enabled: true,
56
+ interval_tool_calls: autoCheckpoint.interval_tool_calls ?? 30,
57
+ }
58
+ : undefined,
49
59
  };
50
60
  }
51
61
  /**
@@ -203,6 +213,48 @@ function mergeHooksIntoSettings(existing, generated) {
203
213
  }
204
214
  }
205
215
  }
216
+ // WU-1471: Merge PostToolUse hooks (auto-checkpoint)
217
+ if (generated.postToolUse) {
218
+ if (!result.hooks.PostToolUse) {
219
+ result.hooks.PostToolUse = [];
220
+ }
221
+ for (const newHook of generated.postToolUse) {
222
+ const existingIndex = result.hooks.PostToolUse.findIndex((h) => h.matcher === newHook.matcher);
223
+ if (existingIndex >= 0) {
224
+ const existing = result.hooks.PostToolUse[existingIndex];
225
+ for (const hook of newHook.hooks) {
226
+ const isDuplicate = existing.hooks.some((h) => h.command === hook.command);
227
+ if (!isDuplicate) {
228
+ existing.hooks.push(hook);
229
+ }
230
+ }
231
+ }
232
+ else {
233
+ result.hooks.PostToolUse.push(newHook);
234
+ }
235
+ }
236
+ }
237
+ // WU-1471: Merge SubagentStop hooks (auto-checkpoint on sub-agent finish)
238
+ if (generated.subagentStop) {
239
+ if (!result.hooks.SubagentStop) {
240
+ result.hooks.SubagentStop = [];
241
+ }
242
+ for (const newHook of generated.subagentStop) {
243
+ const existingIndex = result.hooks.SubagentStop.findIndex((h) => h.matcher === newHook.matcher);
244
+ if (existingIndex >= 0) {
245
+ const existing = result.hooks.SubagentStop[existingIndex];
246
+ for (const hook of newHook.hooks) {
247
+ const isDuplicate = existing.hooks.some((h) => h.command === hook.command);
248
+ if (!isDuplicate) {
249
+ existing.hooks.push(hook);
250
+ }
251
+ }
252
+ }
253
+ else {
254
+ result.hooks.SubagentStop.push(newHook);
255
+ }
256
+ }
257
+ }
206
258
  return result;
207
259
  }
208
260
  /**
@@ -225,11 +277,24 @@ export async function syncEnforcementHooks(projectDir) {
225
277
  if (!enforcement || !enforcement.hooks) {
226
278
  return false;
227
279
  }
280
+ // WU-1471: Check for auto-checkpoint mismatch warning (AC5)
281
+ // Also check memory config independently for the case where hooks=true but
282
+ // auto_checkpoint config comes from memory.enforcement section
283
+ const memoryEnforcement = config?.memory?.enforcement;
284
+ const autoCheckpointEnabled = memoryEnforcement?.auto_checkpoint?.enabled ?? false;
285
+ const warningResult = checkAutoCheckpointWarning({
286
+ hooksEnabled: enforcement.hooks,
287
+ autoCheckpointEnabled,
288
+ });
289
+ if (warningResult.warning && warningResult.message) {
290
+ console.warn(`[enforcement-sync] ${warningResult.message}`);
291
+ }
228
292
  // Generate hooks based on config
229
293
  const generatedHooks = generateEnforcementHooks({
230
294
  block_outside_worktree: enforcement.block_outside_worktree,
231
295
  require_wu_for_edits: enforcement.require_wu_for_edits,
232
296
  warn_on_stop_without_wu_done: enforcement.warn_on_stop_without_wu_done,
297
+ auto_checkpoint: enforcement.auto_checkpoint,
233
298
  });
234
299
  // Write hook scripts
235
300
  if (enforcement.block_outside_worktree) {
@@ -241,6 +306,10 @@ export async function syncEnforcementHooks(projectDir) {
241
306
  if (enforcement.warn_on_stop_without_wu_done) {
242
307
  writeHookScript(projectDir, HOOK_SCRIPTS.WARN_INCOMPLETE, generateWarnIncompleteScript());
243
308
  }
309
+ // WU-1471: Write auto-checkpoint hook script when enabled
310
+ if (enforcement.auto_checkpoint?.enabled) {
311
+ writeHookScript(projectDir, HOOK_SCRIPTS.AUTO_CHECKPOINT, generateAutoCheckpointScript(enforcement.auto_checkpoint.interval_tool_calls));
312
+ }
244
313
  // Always write recovery hook scripts when enforcement.hooks is enabled (WU-1394)
245
314
  // These enable durable context recovery after compaction
246
315
  writeHookScript(projectDir, HOOK_SCRIPTS.PRE_COMPACT_CHECKPOINT, generatePreCompactCheckpointScript());
@@ -281,9 +350,30 @@ export async function removeEnforcementHooks(projectDir) {
281
350
  delete settings.hooks.Stop;
282
351
  }
283
352
  }
353
+ // WU-1471: Remove PostToolUse hooks
354
+ if (settings.hooks.PostToolUse) {
355
+ settings.hooks.PostToolUse = settings.hooks.PostToolUse.map((entry) => ({
356
+ ...entry,
357
+ hooks: entry.hooks.filter((h) => !enforcementCommands.some((cmd) => h.command.includes(cmd))),
358
+ })).filter((entry) => entry.hooks.length > 0);
359
+ if (settings.hooks.PostToolUse.length === 0) {
360
+ delete settings.hooks.PostToolUse;
361
+ }
362
+ }
363
+ // WU-1471: Remove SubagentStop hooks
364
+ if (settings.hooks.SubagentStop) {
365
+ settings.hooks.SubagentStop = settings.hooks.SubagentStop.map((entry) => ({
366
+ ...entry,
367
+ hooks: entry.hooks.filter((h) => !enforcementCommands.some((cmd) => h.command.includes(cmd))),
368
+ })).filter((entry) => entry.hooks.length > 0);
369
+ if (settings.hooks.SubagentStop.length === 0) {
370
+ delete settings.hooks.SubagentStop;
371
+ }
372
+ }
284
373
  // Clean up empty hooks object
285
374
  if (Object.keys(settings.hooks).length === 0) {
286
375
  delete settings.hooks;
287
376
  }
288
377
  writeClaudeSettings(projectDir, settings);
289
378
  }
379
+ //# sourceMappingURL=enforcement-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcement-sync.js","sourceRoot":"","sources":["../../src/hooks/enforcement-sync.ts"],"names":[],"mappings":"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"}
@@ -5,3 +5,4 @@
5
5
  export * from './enforcement-generator.js';
6
6
  export * from './enforcement-checks.js';
7
7
  export * from './enforcement-sync.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -8,3 +8,4 @@
8
8
  * @see https://lumenflow.dev/reference/cli
9
9
  */
10
10
  export { runCLI } from './cli-entry-point.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/init.js CHANGED
@@ -21,6 +21,8 @@ import { updateMergeBlock } from './merge-block.js';
21
21
  import { isMainBranch, isInWorktree } from '@lumenflow/core/dist/core/worktree-guard.js';
22
22
  // WU-1386: Import doctor for auto-run after init
23
23
  import { runDoctorForInit } from './doctor.js';
24
+ // WU-1433: Import public manifest to derive scripts (no hardcoded subset)
25
+ import { getPublicManifest } from './public-manifest.js';
24
26
  /**
25
27
  * WU-1085: CLI option definitions for init command
26
28
  * WU-1171: Added --merge and --client options
@@ -713,8 +715,8 @@ const MCP_JSON_TEMPLATE = `{
713
715
  const BACKLOG_TEMPLATE = `---\nsections:\n ready:\n heading: '## 🚀 Ready (pull from here)'\n insertion: after_heading_blank_line\n in_progress:\n heading: '## 🔧 In progress'\n insertion: after_heading_blank_line\n blocked:\n heading: '## ⛔ Blocked'\n insertion: after_heading_blank_line\n done:\n heading: '## ✅ Done'\n insertion: after_heading_blank_line\n---\n\n# Backlog (single source of truth)\n\n## 🚀 Ready (pull from here)\n\n(No items ready)\n\n## 🔧 In progress\n\n(No items in progress)\n\n## ⛔ Blocked\n\n(No items blocked)\n\n## ✅ Done\n\n(No items completed yet)\n`;
714
716
  // Template for docs/04-operations/tasks/status.md
715
717
  const STATUS_TEMPLATE = `# Status (active work)\n\n## In Progress\n\n(No items in progress)\n\n## Blocked\n\n(No items blocked)\n\n## Completed\n\n(No items completed yet)\n`;
716
- // Template for docs/04-operations/tasks/templates/wu-template.yaml
717
- const WU_TEMPLATE_YAML = `# Work Unit Template (LumenFlow WU Schema)\n#\n# Copy this template when creating new WUs. Fill in all required fields and\n# remove optional fields if not needed.\n#\n# If you used "lumenflow init --full", this template lives at:\n# docs/04-operations/tasks/templates/wu-template.yaml\n\n# Required: Unique work unit identifier (format: WU-NNN)\nid: WU-XXX\n\n# Required: Short, descriptive title (max 80 chars)\ntitle: 'Your WU title here'\n\n# Required: Lane (Parent: Sublane format)\nlane: 'Framework: CLI'\n\n# Required: Type of work\ntype: 'feature' # feature | bug | documentation | process | tooling | chore | refactor\n\n# Required: Current status\nstatus: 'ready' # ready | in_progress | blocked | done | cancelled\n\n# Required: Priority\npriority: P2 # P0 | P1 | P2 | P3\n\n# Required: Creation date (YYYY-MM-DD)\ncreated: {{DATE}}\n\n# Required: Owner/assignee (email)\nassigned_to: 'unassigned@example.com'\n\n# Required: Description\ndescription: |\n Context: ...\n Problem: ...\n Solution: ...\n\n# Required: Acceptance criteria (testable, binary)\nacceptance:\n - Criterion 1 (specific, measurable, testable)\n - Criterion 2 (binary pass/fail)\n - Documentation updated\n\n# Required: References to plans/specs (required for type: feature)\nspec_refs:\n - docs/04-operations/plans/WU-XXX-plan.md\n\n# Required: Code files changed or created (empty only for docs/process WUs)\ncode_paths:\n - path/to/file.ts\n\n# Required: Test paths (at least one of manual/unit/e2e/integration for non-doc WUs)\ntests:\n manual:\n - Manual test: Verify behavior\n unit:\n - path/to/test.test.ts\n e2e: []\n integration: []\n\n# Required: Exposure level\nexposure: 'backend-only' # ui | api | backend-only | documentation\n\n# Optional: User journey (recommended for ui/api)\n# user_journey: |\n# User navigates to ...\n# User performs ...\n\n# Optional: UI pairing WUs (for api exposure)\n# ui_pairing_wus:\n# - WU-1234\n\n# Optional: Navigation path (required when exposure=ui and no page file)\n# navigation_path: '/settings'\n\n# Required: Deliverable artifacts (stamps, docs, etc.)\nartifacts:\n - .lumenflow/stamps/WU-XXX.done\n\n# Optional: Dependencies (other WUs that must complete first)\ndependencies: []\n\n# Optional: Risks\nrisks:\n - Risk 1\n\n# Optional: Notes\nnotes: ''\n\n# Optional: Requires human review\nrequires_review: false\n\n# Optional: Claimed mode (worktree or branch-only)\n# Automatically set by wu:claim, usually don't need to specify\n# claimed_mode: worktree\n\n# Optional: Assigned to (email of current claimant)\n# Automatically set by wu:claim\n# assigned_to: engineer@example.com\n\n# Optional: Locked status (prevents concurrent edits)\n# Automatically set by wu:claim and wu:done\n# locked: false\n\n# Optional: Completion date (ISO 8601 format)\n# Automatically set by wu:done\n# completed: 2025-10-23\n\n# Optional: Completion notes (added by wu:done)\n# completion_notes: |\n# Additional notes added during wu:done.\n# Any deviations from original plan.\n# Lessons learned.\n\n# ============================================================================\n# GOVERNANCE BLOCK (WU Schema v2.0)\n# ============================================================================\n# Optional: COS governance rules that apply to this WU\n# Only include if this WU needs specific governance enforcement\n\n# governance:\n# # Rules that apply to this WU (evaluated during cos:gates)\n# rules:\n# - rule_id: UPAIN-01\n# satisfied: false # Initially false, set true when evidence provided\n# evidence:\n# - type: link\n# value: docs/product/voc/feature-user-pain.md\n# description: "Voice of Customer analysis showing user pain"\n# notes: |\n# VOC analysis shows 40% of support tickets request this feature.\n# Average time wasted: 15min/user/week.\n#\n# - rule_id: CASH-03\n# satisfied: false\n# evidence:\n# - type: link\n# value: docs/finance/spend-reviews/2025-10-cloud-infra.md\n# description: "Spend review for £1200/month cloud infrastructure"\n# - type: approval\n# value: owner@example.com\n# description: "Owner approval for spend commitment"\n# notes: |\n# New cloud infrastructure commitment: £1200/month for 12 months.\n# ROI: Reduces latency by 50%, improves user retention.\n#\n# # Gate checks (enforced by cos-gates.ts)\n# gates:\n# narrative: "pending" # Status: pending, passed, skipped, failed\n# finance: "pending"\n#\n# # Exemptions (only if rule doesn't apply)\n# exemptions:\n# - rule_id: FAIR-01\n# reason: "No user-facing pricing changes in this WU"\n# approved_by: product-owner@example.com\n# approved_at: 2025-10-23\n\n# ============================================================================\n# USAGE NOTES\n# ============================================================================\n#\n# 1. Remove this entire governance block if no COS rules apply to your WU\n# 2. Only include rules that require enforcement (not all rules apply to all WUs)\n# 3. Evidence types: link:, metric:, screenshot:, approval:\n# 4. Gates are checked during wu:done (before merge)\n# 5. Exemptions require approval from rule owner\n#\n# For more details, see:\n# - docs/04-operations/_frameworks/cos/system-prompt-v1.3.md\n# - docs/04-operations/_frameworks/cos/evidence-format.md\n`;
718
+ // Template for docs tasks WU template YAML (scaffolded to {{DOCS_TASKS_PATH}}/templates/wu-template.yaml)
719
+ const WU_TEMPLATE_YAML = `# Work Unit Template (LumenFlow WU Schema)\n#\n# Copy this template when creating new WUs. Fill in all required fields and\n# remove optional fields if not needed.\n#\n# If you used "lumenflow init --full", this template lives at:\n# {{DOCS_TASKS_PATH}}/templates/wu-template.yaml\n\n# Required: Unique work unit identifier (format: WU-NNN)\nid: WU-XXX\n\n# Required: Short, descriptive title (max 80 chars)\ntitle: 'Your WU title here'\n\n# Required: Lane (Parent: Sublane format)\nlane: 'Framework: CLI'\n\n# Required: Type of work\ntype: 'feature' # feature | bug | documentation | process | tooling | chore | refactor\n\n# Required: Current status\nstatus: 'ready' # ready | in_progress | blocked | done | cancelled\n\n# Required: Priority\npriority: P2 # P0 | P1 | P2 | P3\n\n# Required: Creation date (YYYY-MM-DD)\ncreated: {{DATE}}\n\n# Required: Owner/assignee (email)\nassigned_to: 'unassigned@example.com'\n\n# Required: Description\ndescription: |\n Context: ...\n Problem: ...\n Solution: ...\n\n# Required: Acceptance criteria (testable, binary)\nacceptance:\n - Criterion 1 (specific, measurable, testable)\n - Criterion 2 (binary pass/fail)\n - Documentation updated\n\n# Required: References to plans/specs (required for type: feature)\n# Tip: use pnpm wu:create --plan to generate a plan stub at lumenflow://plans/WU-XXX-plan.md\nspec_refs:\n - lumenflow://plans/WU-XXX-plan.md\n\n# Required: Code files changed or created (empty only for docs/process WUs)\n# Docs-only WUs should use docs/ or *.md paths to avoid docs-only gate failures.\ncode_paths:\n - path/to/file.ts\n\n# Required: Test paths (at least one of manual/unit/e2e/integration for non-doc WUs)\ntests:\n manual:\n - Manual check: Verify behavior or docs output\n unit:\n - path/to/test.test.ts\n e2e: []\n integration: []\n\n# Required: Exposure level\nexposure: 'backend-only' # ui | api | backend-only | documentation\n\n# Optional: User journey (recommended for ui/api)\n# user_journey: |\n# User navigates to ...\n# User performs ...\n\n# Optional: UI pairing WUs (for api exposure)\n# ui_pairing_wus:\n# - WU-1234\n\n# Optional: Navigation path (required when exposure=ui and no page file)\n# navigation_path: '/settings'\n\n# Required: Deliverable artifacts (stamps, docs, etc.)\nartifacts:\n - .lumenflow/stamps/WU-XXX.done\n\n# Optional: Dependencies (other WUs that must complete first)\ndependencies: []\n\n# Optional: Risks\nrisks:\n - Risk 1\n\n# Optional: Notes (required by spec linter)\nnotes: 'Implementation notes, rollout context, or plan summary.'\n\n# Optional: Requires human review\nrequires_review: false\n\n# Optional: Claimed mode (worktree or branch-only)\n# Automatically set by wu:claim, usually don't need to specify\n# claimed_mode: worktree\n\n# Optional: Assigned to (email of current claimant)\n# Automatically set by wu:claim\n# assigned_to: engineer@example.com\n\n# Optional: Locked status (prevents concurrent edits)\n# Automatically set by wu:claim and wu:done\n# locked: false\n\n# Optional: Completion date (ISO 8601 format)\n# Automatically set by wu:done\n# completed: 2025-10-23\n\n# Optional: Completion notes (added by wu:done)\n# completion_notes: |\n# Additional notes added during wu:done.\n# Any deviations from original plan.\n# Lessons learned.\n\n# ============================================================================\n# GOVERNANCE BLOCK (WU Schema v2.0)\n# ============================================================================\n# Optional: COS governance rules that apply to this WU\n# Only include if this WU needs specific governance enforcement\n\n# governance:\n# # Rules that apply to this WU (evaluated during cos:gates)\n# rules:\n# - rule_id: UPAIN-01\n# satisfied: false # Initially false, set true when evidence provided\n# evidence:\n# - type: link\n# value: docs/product/voc/feature-user-pain.md\n# description: "Voice of Customer analysis showing user pain"\n# notes: |\n# VOC analysis shows 40% of support tickets request this feature.\n# Average time wasted: 15min/user/week.\n#\n# - rule_id: CASH-03\n# satisfied: false\n# evidence:\n# - type: link\n# value: docs/finance/spend-reviews/2025-10-cloud-infra.md\n# description: "Spend review for £1200/month cloud infrastructure"\n# - type: approval\n# value: owner@example.com\n# description: "Owner approval for spend commitment"\n# notes: |\n# New cloud infrastructure commitment: £1200/month for 12 months.\n# ROI: Reduces latency by 50%, improves user retention.\n#\n# # Gate checks (enforced by cos-gates.ts)\n# gates:\n# narrative: "pending" # Status: pending, passed, skipped, failed\n# finance: "pending"\n#\n# # Exemptions (only if rule doesn't apply)\n# exemptions:\n# - rule_id: FAIR-01\n# reason: "No user-facing pricing changes in this WU"\n# approved_by: product-owner@example.com\n# approved_at: 2025-10-23\n\n# ============================================================================\n# USAGE NOTES\n# ============================================================================\n#\n# 1. Remove this entire governance block if no COS rules apply to your WU\n# 2. Only include rules that require enforcement (not all rules apply to all WUs)\n# 3. Evidence types: link:, metric:, screenshot:, approval:\n# 4. Gates are checked during wu:done (before merge)\n# 5. Exemptions require approval from rule owner\n#\n# For more details, see:\n# - {{DOCS_OPERATIONS_PATH}}/_frameworks/cos/system-prompt-v1.3.md\n# - {{DOCS_OPERATIONS_PATH}}/_frameworks/cos/evidence-format.md\n`;
718
720
  // Template for .lumenflow.framework.yaml
719
721
  const FRAMEWORK_HINT_TEMPLATE = `# LumenFlow Framework Hint\n# Generated by: lumenflow init --framework {{FRAMEWORK_NAME}}\n\nframework: "{{FRAMEWORK_NAME}}"\nslug: "{{FRAMEWORK_SLUG}}"\n`;
720
722
  // Template for docs/04-operations/_frameworks/<framework>/README.md
@@ -1172,7 +1174,7 @@ If same error happens 3 times:
1172
1174
 
1173
1175
  \`\`\`bash
1174
1176
  # Check lane availability
1175
- cat docs/04-operations/tasks/status.md
1177
+ cat {{DOCS_TASKS_PATH}}/status.md
1176
1178
 
1177
1179
  # Claim a WU
1178
1180
  pnpm wu:claim --id WU-XXX --lane <Lane>
@@ -1479,7 +1481,7 @@ LumenFlow uses Work Units (WUs) to track all changes:
1479
1481
 
1480
1482
  ## Step 5: When Stuck
1481
1483
 
1482
- 1. Read the WU spec at \`docs/04-operations/tasks/wu/WU-XXX.yaml\`
1484
+ 1. Read the WU spec at \`{{DOCS_TASKS_PATH}}/wu/WU-XXX.yaml\`
1483
1485
  2. Check [troubleshooting-wu-done.md](troubleshooting-wu-done.md)
1484
1486
  3. Review [first-wu-mistakes.md](first-wu-mistakes.md)
1485
1487
 
@@ -1601,7 +1603,7 @@ pnpm wu:create \\
1601
1603
 
1602
1604
  ## After Creation
1603
1605
 
1604
- 1. Review the created YAML: \`cat docs/04-operations/tasks/wu/WU-XXX.yaml\`
1606
+ 1. Review the created YAML: \`cat {{DOCS_TASKS_PATH}}/wu/WU-XXX.yaml\`
1605
1607
  2. Claim the WU: \`pnpm wu:claim --id WU-XXX --lane "Lane"\`
1606
1608
  3. cd to worktree: \`cd worktrees/<lane>-wu-xxx\`
1607
1609
  `;
@@ -1638,10 +1640,10 @@ pnpm exec lumenflow doctor
1638
1640
 
1639
1641
  \`\`\`bash
1640
1642
  # Check status board
1641
- cat docs/04-operations/tasks/status.md
1643
+ cat {{DOCS_TASKS_PATH}}/status.md
1642
1644
 
1643
1645
  # List ready WUs
1644
- ls docs/04-operations/tasks/wu/*.yaml | head -5
1646
+ ls {{DOCS_TASKS_PATH}}/wu/*.yaml | head -5
1645
1647
  \`\`\`
1646
1648
 
1647
1649
  ---
@@ -2473,36 +2475,28 @@ ${linesToAdd.join('\n')}
2473
2475
  await createFile(gitignorePath, GITIGNORE_TEMPLATE, fileMode, result, targetDir);
2474
2476
  }
2475
2477
  /**
2476
- * WU-1307: LumenFlow scripts to inject into package.json
2477
- * WU-1342: Expanded to include all 17 essential commands
2478
- * Uses standalone binaries (wu-claim, wu-done, gates) that work in consumer projects
2479
- * after installing @lumenflow/cli.
2478
+ * WU-1433: Script argument overrides for commands that need extra flags.
2479
+ * Most commands map simply to their binName, but some aliases need arguments.
2480
+ * Key = command name (colon notation), Value = full script command string.
2480
2481
  */
2481
- const LUMENFLOW_SCRIPTS = {
2482
- // Core WU lifecycle
2483
- 'wu:claim': 'wu-claim',
2484
- 'wu:done': 'wu-done',
2485
- 'wu:create': 'wu-create',
2486
- 'wu:proto': 'wu-proto', // WU-1359: Prototype WU with relaxed validation
2487
- 'wu:status': 'wu-status',
2488
- 'wu:block': 'wu-block',
2489
- 'wu:unblock': 'wu-unblock',
2490
- // WU-1342: Additional critical commands
2491
- 'wu:prep': 'wu-prep',
2492
- 'wu:recover': 'wu-recover',
2493
- 'wu:spawn': 'wu-spawn',
2494
- 'wu:validate': 'wu-validate',
2495
- 'wu:infer-lane': 'wu-infer-lane',
2496
- // Memory commands
2497
- 'mem:init': 'mem-init',
2498
- 'mem:checkpoint': 'mem-checkpoint',
2499
- 'mem:inbox': 'mem-inbox',
2500
- // Lane commands
2501
- 'lane:suggest': 'lane-suggest',
2502
- // Gates
2503
- gates: 'gates',
2482
+ const SCRIPT_ARG_OVERRIDES = {
2504
2483
  'gates:docs': 'gates --docs-only',
2505
2484
  };
2485
+ /**
2486
+ * WU-1307: LumenFlow scripts to inject into package.json
2487
+ * WU-1342: Expanded to include essential commands
2488
+ * WU-1433: Now derived from the public CLI manifest (WU-1432) instead of
2489
+ * hardcoded list. Ensures all public commands are exposed and avoids drift.
2490
+ */
2491
+ function generateLumenflowScripts() {
2492
+ const scripts = {};
2493
+ const manifest = getPublicManifest();
2494
+ for (const cmd of manifest) {
2495
+ // Use override if defined, otherwise map to the binary name
2496
+ scripts[cmd.name] = SCRIPT_ARG_OVERRIDES[cmd.name] ?? cmd.binName;
2497
+ }
2498
+ return scripts;
2499
+ }
2506
2500
  /** WU-1408: Safety script path constants */
2507
2501
  const SCRIPTS_DIR = 'scripts';
2508
2502
  const SAFE_GIT_FILE = 'safe-git';
@@ -2653,8 +2647,9 @@ async function injectPackageJsonScripts(targetDir, options, result) {
2653
2647
  }
2654
2648
  const scripts = packageJson.scripts;
2655
2649
  let modified = false;
2656
- // Add LumenFlow scripts (only if not already present, unless --force)
2657
- for (const [scriptName, scriptCommand] of Object.entries(LUMENFLOW_SCRIPTS)) {
2650
+ // WU-1433: Derive scripts from public manifest (not hardcoded)
2651
+ const lumenflowScripts = generateLumenflowScripts();
2652
+ for (const [scriptName, scriptCommand] of Object.entries(lumenflowScripts)) {
2658
2653
  if (options.force || !(scriptName in scripts)) {
2659
2654
  if (!(scriptName in scripts)) {
2660
2655
  scripts[scriptName] = scriptCommand;
@@ -3066,3 +3061,4 @@ if (import.meta.main) {
3066
3061
  process.exit(1);
3067
3062
  });
3068
3063
  }
3064
+ //# sourceMappingURL=init.js.map