kenaz 0.0.0-stage → 0.3.2

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 (1641) hide show
  1. package/bin/kenaz.js +3 -0
  2. package/core/.agents/skills/remotion-best-practices/SKILL.md +61 -0
  3. package/core/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
  4. package/core/.agents/skills/remotion-best-practices/rules/animations.md +27 -0
  5. package/core/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  6. package/core/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  7. package/core/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  8. package/core/.agents/skills/remotion-best-practices/rules/assets.md +78 -0
  9. package/core/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  10. package/core/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
  11. package/core/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
  12. package/core/.agents/skills/remotion-best-practices/rules/can-decode.md +81 -0
  13. package/core/.agents/skills/remotion-best-practices/rules/charts.md +120 -0
  14. package/core/.agents/skills/remotion-best-practices/rules/compositions.md +154 -0
  15. package/core/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
  16. package/core/.agents/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  17. package/core/.agents/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  18. package/core/.agents/skills/remotion-best-practices/rules/fonts.md +152 -0
  19. package/core/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  20. package/core/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  21. package/core/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  22. package/core/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
  23. package/core/.agents/skills/remotion-best-practices/rules/images.md +134 -0
  24. package/core/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  25. package/core/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  26. package/core/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
  27. package/core/.agents/skills/remotion-best-practices/rules/maps.md +412 -0
  28. package/core/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  29. package/core/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  30. package/core/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
  31. package/core/.agents/skills/remotion-best-practices/rules/sequencing.md +118 -0
  32. package/core/.agents/skills/remotion-best-practices/rules/sfx.md +30 -0
  33. package/core/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
  34. package/core/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
  35. package/core/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
  36. package/core/.agents/skills/remotion-best-practices/rules/timing.md +179 -0
  37. package/core/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  38. package/core/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
  39. package/core/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  40. package/core/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
  41. package/core/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
  42. package/core/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
  43. package/core/.agents/skills/supabase-postgres-best-practices/AGENTS.md +90 -0
  44. package/core/.agents/skills/supabase-postgres-best-practices/CLAUDE.md +1 -0
  45. package/core/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  46. package/core/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  47. package/core/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  48. package/core/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  49. package/core/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  50. package/core/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  51. package/core/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  52. package/core/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  53. package/core/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  54. package/core/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  55. package/core/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  56. package/core/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  57. package/core/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  58. package/core/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  59. package/core/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  60. package/core/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  61. package/core/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  62. package/core/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  63. package/core/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  64. package/core/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  65. package/core/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +45 -0
  66. package/core/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  67. package/core/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  68. package/core/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  69. package/core/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  70. package/core/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  71. package/core/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  72. package/core/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  73. package/core/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  74. package/core/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  75. package/core/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
  76. package/core/.agents/skills/typesafe-ai/LICENSE +21 -0
  77. package/core/.agents/skills/typesafe-ai/SKILL.md +149 -0
  78. package/core/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  79. package/core/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
  80. package/core/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  81. package/core/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  82. package/core/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  83. package/core/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  84. package/core/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  85. package/core/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  86. package/core/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  87. package/core/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  88. package/core/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  89. package/core/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  90. package/core/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  91. package/core/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  92. package/core/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  93. package/core/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  94. package/core/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  95. package/core/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  96. package/core/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  97. package/core/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  98. package/core/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  99. package/core/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  100. package/core/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  101. package/core/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  102. package/core/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  103. package/core/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  104. package/core/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  105. package/core/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  106. package/core/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  107. package/core/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  108. package/core/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  109. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  110. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  111. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  112. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  113. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  114. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  115. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  116. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  117. package/core/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  118. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  119. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  120. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  121. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  122. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  123. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  124. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  125. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  126. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  127. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  128. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  129. package/core/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  130. package/core/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  131. package/core/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  132. package/core/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  133. package/core/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  134. package/core/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  135. package/core/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  136. package/core/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  137. package/core/.claude/agents/pcb-reviewer.md +146 -0
  138. package/core/.claude/commands/Amelia.md +5 -0
  139. package/core/.claude/commands/Ansuz.md +38 -0
  140. package/core/.claude/commands/Huginn.md +25 -0
  141. package/core/.claude/commands/agent-worker.md +168 -0
  142. package/core/.claude/commands/architect.md +24 -0
  143. package/core/.claude/commands/archive.md +24 -0
  144. package/core/.claude/commands/canary.md +17 -0
  145. package/core/.claude/commands/incident.md +15 -0
  146. package/core/.claude/commands/init.md +112 -0
  147. package/core/.claude/commands/legacy_dev.md +18 -0
  148. package/core/.claude/commands/product-review.md +131 -0
  149. package/core/.claude/commands/review.md +14 -0
  150. package/core/.claude/commands/security.md +15 -0
  151. package/core/.claude/commands/spec.md +22 -0
  152. package/core/.claude/commands/strategy.md +141 -0
  153. package/core/.claude/commands/sunny.md +1 -0
  154. package/core/.claude/commands//347/224/242/345/223/201.md +15 -0
  155. package/core/.claude/commands//347/224/242/345/223/201/346/252/242/350/246/226.md +129 -0
  156. package/core/.claude/commands//350/250/255/350/250/210.md +14 -0
  157. package/core/.claude/commands//350/251/225/344/274/260.md +16 -0
  158. package/core/.claude/commands//351/200/262/345/272/246.md +15 -0
  159. package/core/.claude/hooks/__tests__/substrate.test.js +122 -0
  160. package/core/.claude/hooks/__tests__/task-1866-cli-guard.test.js +193 -0
  161. package/core/.claude/hooks/__tests__/task-1977-dedupe-guard.test.js +125 -0
  162. package/core/.claude/hooks/__tests__/task-2087-mark-landed-idempotent.test.js +128 -0
  163. package/core/.claude/hooks/__tests__/task-2253-null-tip-marker-reuse.test.js +84 -0
  164. package/core/.claude/hooks/__tests__/task-2381-project-guard-walkup.test.js +53 -0
  165. package/core/.claude/hooks/_ansuz-conversation.js +183 -0
  166. package/core/.claude/hooks/_ansuz-conversation.test.js +90 -0
  167. package/core/.claude/hooks/_dedupe-guard.js +75 -0
  168. package/core/.claude/hooks/_peer-project-root.js +113 -0
  169. package/core/.claude/hooks/_peer-project-root.test.js +121 -0
  170. package/core/.claude/hooks/_peer-waiting-line.js +27 -0
  171. package/core/.claude/hooks/_project-guard.js +45 -0
  172. package/core/.claude/hooks/_run-user-prompt.js +134 -0
  173. package/core/.claude/hooks/_run-user-prompt.test.js +80 -0
  174. package/core/.claude/hooks/_session-identity.js +62 -0
  175. package/core/.claude/hooks/_session-pin.js +34 -0
  176. package/core/.claude/hooks/_session-pin.test.js +89 -0
  177. package/core/.claude/hooks/_signal-fence.js +17 -0
  178. package/core/.claude/hooks/_substrate-paths.js +95 -0
  179. package/core/.claude/hooks/_user-scope.js +23 -0
  180. package/core/.claude/hooks/ansuz-session-pin-via-turn-context.test.js +52 -0
  181. package/core/.claude/hooks/ansuz-session-pin.js +171 -0
  182. package/core/.claude/hooks/ansuz-session-pin.test.js +140 -0
  183. package/core/.claude/hooks/context-check.js +51 -0
  184. package/core/.claude/hooks/core-resolve.js +230 -0
  185. package/core/.claude/hooks/daemon-outbox-hook.js +139 -0
  186. package/core/.claude/hooks/fatigue-check.js +52 -0
  187. package/core/.claude/hooks/handoff-snapshot-on-commit.js +154 -0
  188. package/core/.claude/hooks/handoff-snapshot-on-decision.js +188 -0
  189. package/core/.claude/hooks/handoff-snapshot-on-question.js +158 -0
  190. package/core/.claude/hooks/handoff-staleness.js +197 -0
  191. package/core/.claude/hooks/jev-thalamus-context.js +17 -0
  192. package/core/.claude/hooks/jev-thalamus-context.test.js +41 -0
  193. package/core/.claude/hooks/lease-release.js +119 -0
  194. package/core/.claude/hooks/lease-touch.js +96 -0
  195. package/core/.claude/hooks/memory-guard.js +723 -0
  196. package/core/.claude/hooks/memory-guard.test.js +574 -0
  197. package/core/.claude/hooks/reflex-feedback.js +5 -0
  198. package/core/.claude/hooks/session-init.ps1 +49 -0
  199. package/core/.claude/hooks/sound-event.js +70 -0
  200. package/core/.claude/hooks/sound-event.sh +37 -0
  201. package/core/.claude/hooks/stream-delta.js +169 -0
  202. package/core/.claude/hooks/synapse-first-investigation.js +326 -0
  203. package/core/.claude/hooks/synapse-first-investigation.test.js +126 -0
  204. package/core/.claude/hooks/task-bridge.js +33 -0
  205. package/core/.claude/hooks/turn-context-peer.test.js +115 -0
  206. package/core/.claude/hooks/turn-context-session-line.test.js +69 -0
  207. package/core/.claude/hooks/turn-context.js +215 -0
  208. package/core/.claude/hooks/worktree-create.js +1232 -0
  209. package/core/.claude/hooks/worktree-remove.js +181 -0
  210. package/core/.claude/no-hooks.settings.json +3 -0
  211. package/core/.claude/settings.json +180 -0
  212. package/core/.claude/skills/adapt/SKILL.md +199 -0
  213. package/core/.claude/skills/animate/SKILL.md +190 -0
  214. package/core/.claude/skills/architect_agent/SKILL.md +408 -0
  215. package/core/.claude/skills/assessment_agent/SKILL.md +289 -0
  216. package/core/.claude/skills/audit/SKILL.md +129 -0
  217. package/core/.claude/skills/backend_agent/SKILL.md +407 -0
  218. package/core/.claude/skills/backend_engineer/SKILL.md +788 -0
  219. package/core/.claude/skills/bolder/SKILL.md +132 -0
  220. package/core/.claude/skills/clarify/SKILL.md +180 -0
  221. package/core/.claude/skills/code_reviewer/SKILL.md +305 -0
  222. package/core/.claude/skills/code_reviewer/patterns.yaml +85 -0
  223. package/core/.claude/skills/colorize/SKILL.md +158 -0
  224. package/core/.claude/skills/critique/SKILL.md +118 -0
  225. package/core/.claude/skills/delight/SKILL.md +317 -0
  226. package/core/.claude/skills/designer/SKILL.md +845 -0
  227. package/core/.claude/skills/dev_agent/SKILL.md +503 -0
  228. package/core/.claude/skills/developer/SKILL.md +792 -0
  229. package/core/.claude/skills/distill/SKILL.md +137 -0
  230. package/core/.claude/skills/extract/SKILL.md +95 -0
  231. package/core/.claude/skills/feature_agent/SKILL.md +303 -0
  232. package/core/.claude/skills/frontend-design/SKILL.md +127 -0
  233. package/core/.claude/skills/frontend-design/reference/color-and-contrast.md +132 -0
  234. package/core/.claude/skills/frontend-design/reference/interaction-design.md +123 -0
  235. package/core/.claude/skills/frontend-design/reference/motion-design.md +99 -0
  236. package/core/.claude/skills/frontend-design/reference/responsive-design.md +114 -0
  237. package/core/.claude/skills/frontend-design/reference/spatial-design.md +100 -0
  238. package/core/.claude/skills/frontend-design/reference/typography.md +131 -0
  239. package/core/.claude/skills/frontend-design/reference/ux-writing.md +107 -0
  240. package/core/.claude/skills/frontend_agent/SKILL.md +327 -0
  241. package/core/.claude/skills/harden/SKILL.md +358 -0
  242. package/core/.claude/skills/heimdall/SKILL.md +84 -0
  243. package/core/.claude/skills/huginn/SKILL.md +208 -0
  244. package/core/.claude/skills/incident_response/SKILL.md +315 -0
  245. package/core/.claude/skills/legacy_dev/SKILL.md +202 -0
  246. package/core/.claude/skills/normalize/SKILL.md +67 -0
  247. package/core/.claude/skills/onboard/SKILL.md +243 -0
  248. package/core/.claude/skills/optimization_agent/SKILL.md +340 -0
  249. package/core/.claude/skills/optimize/SKILL.md +269 -0
  250. package/core/.claude/skills/pcb-review/SKILL.md +39 -0
  251. package/core/.claude/skills/polish/SKILL.md +202 -0
  252. package/core/.claude/skills/product_manager/SKILL.md +1091 -0
  253. package/core/.claude/skills/qa_engineer/SKILL.md +1269 -0
  254. package/core/.claude/skills/quieter/SKILL.md +118 -0
  255. package/core/.claude/skills/remotion-best-practices/SKILL.md +61 -0
  256. package/core/.claude/skills/remotion-best-practices/rules/3d.md +86 -0
  257. package/core/.claude/skills/remotion-best-practices/rules/animations.md +27 -0
  258. package/core/.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  259. package/core/.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  260. package/core/.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  261. package/core/.claude/skills/remotion-best-practices/rules/assets.md +78 -0
  262. package/core/.claude/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  263. package/core/.claude/skills/remotion-best-practices/rules/audio.md +169 -0
  264. package/core/.claude/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
  265. package/core/.claude/skills/remotion-best-practices/rules/can-decode.md +81 -0
  266. package/core/.claude/skills/remotion-best-practices/rules/charts.md +120 -0
  267. package/core/.claude/skills/remotion-best-practices/rules/compositions.md +154 -0
  268. package/core/.claude/skills/remotion-best-practices/rules/display-captions.md +184 -0
  269. package/core/.claude/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  270. package/core/.claude/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  271. package/core/.claude/skills/remotion-best-practices/rules/fonts.md +152 -0
  272. package/core/.claude/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  273. package/core/.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  274. package/core/.claude/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  275. package/core/.claude/skills/remotion-best-practices/rules/gifs.md +141 -0
  276. package/core/.claude/skills/remotion-best-practices/rules/images.md +134 -0
  277. package/core/.claude/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  278. package/core/.claude/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  279. package/core/.claude/skills/remotion-best-practices/rules/lottie.md +70 -0
  280. package/core/.claude/skills/remotion-best-practices/rules/maps.md +412 -0
  281. package/core/.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  282. package/core/.claude/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  283. package/core/.claude/skills/remotion-best-practices/rules/parameters.md +109 -0
  284. package/core/.claude/skills/remotion-best-practices/rules/sequencing.md +118 -0
  285. package/core/.claude/skills/remotion-best-practices/rules/sfx.md +30 -0
  286. package/core/.claude/skills/remotion-best-practices/rules/subtitles.md +36 -0
  287. package/core/.claude/skills/remotion-best-practices/rules/tailwind.md +11 -0
  288. package/core/.claude/skills/remotion-best-practices/rules/text-animations.md +20 -0
  289. package/core/.claude/skills/remotion-best-practices/rules/timing.md +179 -0
  290. package/core/.claude/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  291. package/core/.claude/skills/remotion-best-practices/rules/transitions.md +197 -0
  292. package/core/.claude/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  293. package/core/.claude/skills/remotion-best-practices/rules/trimming.md +51 -0
  294. package/core/.claude/skills/remotion-best-practices/rules/videos.md +171 -0
  295. package/core/.claude/skills/remotion-best-practices/rules/voiceover.md +99 -0
  296. package/core/.claude/skills/security_agent/SKILL.md +312 -0
  297. package/core/.claude/skills/spec_optimizer/SKILL.md +299 -0
  298. package/core/.claude/skills/sre_agent/SKILL.md +1347 -0
  299. package/core/.claude/skills/sunny/SKILL.md +74 -0
  300. package/core/.claude/skills/supabase-postgres-best-practices/AGENTS.md +90 -0
  301. package/core/.claude/skills/supabase-postgres-best-practices/CLAUDE.md +1 -0
  302. package/core/.claude/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  303. package/core/.claude/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  304. package/core/.claude/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  305. package/core/.claude/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  306. package/core/.claude/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  307. package/core/.claude/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  308. package/core/.claude/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  309. package/core/.claude/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  310. package/core/.claude/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  311. package/core/.claude/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  312. package/core/.claude/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  313. package/core/.claude/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  314. package/core/.claude/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  315. package/core/.claude/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  316. package/core/.claude/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  317. package/core/.claude/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  318. package/core/.claude/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  319. package/core/.claude/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  320. package/core/.claude/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  321. package/core/.claude/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  322. package/core/.claude/skills/supabase-postgres-best-practices/references/query-index-types.md +45 -0
  323. package/core/.claude/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  324. package/core/.claude/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  325. package/core/.claude/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  326. package/core/.claude/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  327. package/core/.claude/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  328. package/core/.claude/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  329. package/core/.claude/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  330. package/core/.claude/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  331. package/core/.claude/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  332. package/core/.claude/skills/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
  333. package/core/.claude/skills/synapse_maintain/SKILL.md +84 -0
  334. package/core/.claude/skills/ui-ux-pro-max/SKILL.md +377 -0
  335. package/core/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -0
  336. package/core/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -0
  337. package/core/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -0
  338. package/core/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -0
  339. package/core/.claude/skills/ui-ux-pro-max/data/products.csv +97 -0
  340. package/core/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  341. package/core/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  342. package/core/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  343. package/core/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  344. package/core/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  345. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  346. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  347. package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  348. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  349. package/core/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  350. package/core/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  351. package/core/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  352. package/core/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  353. package/core/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  354. package/core/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -0
  355. package/core/.claude/skills/ui-ux-pro-max/data/typography.csv +58 -0
  356. package/core/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  357. package/core/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  358. package/core/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  359. package/core/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -0
  360. package/core/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  361. package/core/.claude/skills/ui-ux-pro-max/scripts/search.py +106 -0
  362. package/core/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  363. package/core/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
  364. package/core/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  365. package/core/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  366. package/core/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  367. package/core/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  368. package/core/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  369. package/core/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  370. package/core/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  371. package/core/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  372. package/core/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  373. package/core/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  374. package/core/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  375. package/core/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  376. package/core/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  377. package/core/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  378. package/core/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  379. package/core/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  380. package/core/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  381. package/core/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  382. package/core/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  383. package/core/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  384. package/core/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  385. package/core/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  386. package/core/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  387. package/core/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  388. package/core/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  389. package/core/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  390. package/core/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  391. package/core/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  392. package/core/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  393. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  394. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  395. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  396. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  397. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  398. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  399. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  400. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  401. package/core/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  402. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  403. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  404. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  405. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  406. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  407. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  408. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  409. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  410. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  411. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  412. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  413. package/core/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  414. package/core/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  415. package/core/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  416. package/core/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  417. package/core/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  418. package/core/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  419. package/core/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  420. package/core/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  421. package/core/.collaboration/README.md +258 -0
  422. package/core/.collaboration/cli/commands/assign.js +39 -0
  423. package/core/.collaboration/cli/commands/claim.js +33 -0
  424. package/core/.collaboration/cli/commands/complete.js +44 -0
  425. package/core/.collaboration/cli/commands/create.js +110 -0
  426. package/core/.collaboration/cli/commands/get.js +83 -0
  427. package/core/.collaboration/cli/commands/index.js +52 -0
  428. package/core/.collaboration/cli/commands/list.js +51 -0
  429. package/core/.collaboration/cli/commands/lock.js +45 -0
  430. package/core/.collaboration/cli/commands/rebuild.js +39 -0
  431. package/core/.collaboration/cli/commands/search.js +61 -0
  432. package/core/.collaboration/cli/commands/stats.js +61 -0
  433. package/core/.collaboration/cli/commands/transfer.js +41 -0
  434. package/core/.collaboration/cli/commands/unlock.js +48 -0
  435. package/core/.collaboration/cli/formatters/help-formatter.js +70 -0
  436. package/core/.collaboration/cli/formatters/index.js +7 -0
  437. package/core/.collaboration/cli/task-cli.js +46 -0
  438. package/core/.collaboration/cli/utils/arg-parser.js +74 -0
  439. package/core/.collaboration/cli/utils/git-user.js +25 -0
  440. package/core/.collaboration/cli/utils/index.js +9 -0
  441. package/core/.collaboration/cli/utils/output.js +10 -0
  442. package/core/.collaboration/config/default.yaml +189 -0
  443. package/core/.collaboration/core/conflict-resolver.js +461 -0
  444. package/core/.collaboration/core/conflict-resolver.test.js +389 -0
  445. package/core/.collaboration/core/id-generator.js +303 -0
  446. package/core/.collaboration/core/migrate-legacy.js +260 -0
  447. package/core/.collaboration/core/package.json +1 -0
  448. package/core/.collaboration/core/task-2257-estimated-hours.test.js +72 -0
  449. package/core/.collaboration/core/task-2260-dir-layout-move.test.js +60 -0
  450. package/core/.collaboration/core/task-2264-single-after-capture.test.js +61 -0
  451. package/core/.collaboration/core/task-2288-followups.test.js +121 -0
  452. package/core/.collaboration/core/task-api-json.js +211 -0
  453. package/core/.collaboration/core/task-api.js +3729 -0
  454. package/core/.collaboration/core/task-api.test.js +1268 -0
  455. package/core/.collaboration/docs/API.md +787 -0
  456. package/core/.collaboration/docs/ARCHITECTURE.md +596 -0
  457. package/core/.collaboration/docs/CLI.md +821 -0
  458. package/core/.collaboration/docs/FAQ.md +695 -0
  459. package/core/.collaboration/docs/MIGRATION.md +804 -0
  460. package/core/.collaboration/docs/examples/README.md +320 -0
  461. package/core/.collaboration/docs/examples/advanced-queries.js +261 -0
  462. package/core/.collaboration/docs/examples/basic-usage.js +184 -0
  463. package/core/.collaboration/docs/examples/team-workflow.js +352 -0
  464. package/core/.collaboration/hooks/README.md +70 -0
  465. package/core/.collaboration/hooks/config.json +10 -0
  466. package/core/.collaboration/hooks/install.js +400 -0
  467. package/core/.collaboration/hooks/post-merge.js +163 -0
  468. package/core/.collaboration/hooks/pre-commit.js +264 -0
  469. package/core/.collaboration/hooks/synapse-hook.js +486 -0
  470. package/core/.collaboration/hooks/synapse-hook.test.js +69 -0
  471. package/core/.failure/INDEX.yaml +231 -0
  472. package/core/.failure/agent-execution/FAIL-001-agent-no-output.yaml +391 -0
  473. package/core/.failure/agent-execution/FAIL-004_agent_platform_specific_commands.md +194 -0
  474. package/core/.failure/agent-execution/FAIL-005_background_agent_permission_denied.md +204 -0
  475. package/core/.failure/agent-execution/FAIL-007-pm-lead-wrong-team-invocation.yaml +0 -0
  476. package/core/.failure/agent-execution/FAIL-008-bypass-api-direct-yaml-write.yaml +94 -0
  477. package/core/.failure/agent-execution/FAIL-010-phase0-poem-format-skipped.yaml +28 -0
  478. package/core/.failure/agent-execution/FAIL-010-skipping-cognitive-checkpoint-after-verification.yaml +59 -0
  479. package/core/.failure/agent-execution/FAIL-012-grep-shortcut-during-investigation.yaml +85 -0
  480. package/core/.failure/agent-execution/FAIL-013-search-cwd-drift-and-case-mismatch.yaml +103 -0
  481. package/core/.failure/agent-execution/FAIL-014-shared-worktree-premature-death-verdict.yaml +35 -0
  482. package/core/.failure/agent-execution/FAIL-AUTO-TASK_1413.yaml +31 -0
  483. package/core/.failure/agent-execution/FAIL-AUTO-TASK_1427.yaml +41 -0
  484. package/core/.failure/agent-execution/FAIL-AUTO-TASK_904.yaml +30 -0
  485. package/core/.failure/agent-execution/README.md +68 -0
  486. package/core/.failure/architecture/FAIL-004_session_based_skill_recognition.md +128 -0
  487. package/core/.failure/architecture/FAIL-006-python-version-compatibility.yaml +445 -0
  488. package/core/.failure/architecture/README.md +87 -0
  489. package/core/.failure/code-quality/README.md +89 -0
  490. package/core/.failure/data-integrity/FAIL-002-json-bom.yaml +220 -0
  491. package/core/.failure/data-integrity/README.md +141 -0
  492. package/core/.failure/pipeline/FAIL-003-queue-pollution.yaml +335 -0
  493. package/core/.failure/pipeline/README.md +95 -0
  494. package/core/.failure/retired/FAIL-009-skipping-synapse-pulse-before-code-change.yaml +49 -0
  495. package/core/.failure/tools/README.md +230 -0
  496. package/core/.failure/tools/USAGE_GUIDE.md +323 -0
  497. package/core/.failure/tools/check_bom.js +101 -0
  498. package/core/.failure/tools/check_failures.ps1 +387 -0
  499. package/core/.failure/tools/fix_json.js +58 -0
  500. package/core/.failure/tools/log_failure.ps1 +474 -0
  501. package/core/.failure/tools/remove_bom.js +46 -0
  502. package/core/.failure/tools/validate_json.js +50 -0
  503. package/core/.formation/.episode-input.json +10 -0
  504. package/core/.formation/README.md +188 -0
  505. package/core/.formation/bifrost/CGDD_hook_lifecycle.js +575 -0
  506. package/core/.formation/bifrost/HOOK_PARITY_VERIFICATION.md +241 -0
  507. package/core/.formation/bifrost/README.md +71 -0
  508. package/core/.formation/bifrost/codex-doctor.js +106 -0
  509. package/core/.formation/bifrost/codex-doctor.test.js +51 -0
  510. package/core/.formation/bifrost/launch.js +510 -0
  511. package/core/.formation/bifrost/launch.test.js +217 -0
  512. package/core/.formation/bifrost/openai/codex-hook-shim.js +171 -0
  513. package/core/.formation/bifrost/openai/codex-hook-shim.test.js +107 -0
  514. package/core/.formation/bifrost/openai/models.json +36 -0
  515. package/core/.formation/bifrost/openai/relay.js +781 -0
  516. package/core/.formation/bifrost/openai/relay.test.js +71 -0
  517. package/core/.formation/bifrost/session.js +382 -0
  518. package/core/.formation/bifrost/session.test.js +121 -0
  519. package/core/.formation/bifrost/setup-codex.js +685 -0
  520. package/core/.formation/bifrost/setup-codex.test.js +102 -0
  521. package/core/.formation/bifrost/shared/ansuz-boot-policy.js +31 -0
  522. package/core/.formation/bifrost/shared/ansuz-boot-policy.test.js +40 -0
  523. package/core/.formation/bifrost/shared/boot-context.js +68 -0
  524. package/core/.formation/bifrost/shared/boot-context.test.js +67 -0
  525. package/core/.formation/bifrost/shared/codex-appserver.js +191 -0
  526. package/core/.formation/bifrost/shared/codex-injection.js +126 -0
  527. package/core/.formation/bifrost/shared/codex-session-registry.js +105 -0
  528. package/core/.formation/bifrost/shared/codex-session-registry.test.js +126 -0
  529. package/core/.formation/bifrost/shared/consolidate.js +286 -0
  530. package/core/.formation/bifrost/shared/stream-json.js +103 -0
  531. package/core/.formation/bifrost/shared/tools.js +278 -0
  532. package/core/.formation/bifrost/sync.js +142 -0
  533. package/core/.formation/briefs/scheduler-evolution.md +209 -0
  534. package/core/.formation/lead.yaml +118 -0
  535. package/core/.formation/legacy.bak/designer.yaml +57 -0
  536. package/core/.formation/legacy.bak/pm.yaml +57 -0
  537. package/core/.formation/legacy.bak/qa.yaml +57 -0
  538. package/core/.formation/legacy.bak/review.yaml +62 -0
  539. package/core/.formation/legacy.bak/scheduler.yaml +129 -0
  540. package/core/.formation/legacy.bak/sre.yaml +57 -0
  541. package/core/.formation/legion/forge.yaml +299 -0
  542. package/core/.formation/legion/hive.yaml +238 -0
  543. package/core/.formation/native/claude/README.md +61 -0
  544. package/core/.formation/native/claude/models.json +42 -0
  545. package/core/.formation/role-map.yaml +274 -0
  546. package/core/.formation/roles/_shared/modules/code_review.yaml +98 -0
  547. package/core/.formation/roles/_shared/modules/security.yaml +103 -0
  548. package/core/.formation/roles/_shared/modules/testing.yaml +14 -0
  549. package/core/.formation/roles/backend/role.yaml +93 -0
  550. package/core/.formation/roles/code_reviewer/role.yaml +102 -0
  551. package/core/.formation/roles/database_optimizer/role.yaml +107 -0
  552. package/core/.formation/roles/designer/role.yaml +66 -0
  553. package/core/.formation/roles/developer/role.yaml +75 -0
  554. package/core/.formation/roles/frontend/role.yaml +134 -0
  555. package/core/.formation/roles/incident_response/role.yaml +89 -0
  556. package/core/.formation/roles/qa/role.yaml +89 -0
  557. package/core/.formation/roles/security/role.yaml +87 -0
  558. package/core/.formation/roles/sre/role.yaml +66 -0
  559. package/core/.formation/skills/coordinator.yaml +52 -0
  560. package/core/.formation/solo/diagnosis.yaml +78 -0
  561. package/core/.formation/solo/strategy.yaml +121 -0
  562. package/core/.formation/spec/task_operations.parity.test.js +426 -0
  563. package/core/.formation/spec/task_operations.yaml +291 -0
  564. package/core/.formation/squad/blitz.yaml +192 -0
  565. package/core/.formation/squad/strategy-tribunal.yaml +354 -0
  566. package/core/.formation/squad/strategy.yaml +349 -0
  567. package/core/.formation/squad/sweep.yaml +208 -0
  568. package/core/.formation/tests/hello.txt +2 -0
  569. package/core/.formation/tools/__tests__/m1-claim-gate.test.js +175 -0
  570. package/core/.formation/tools/__tests__/m1-hmap-convid.test.js +216 -0
  571. package/core/.formation/tools/__tests__/release-lock.test.js +176 -0
  572. package/core/.formation/tools/__tests__/subagent-bifrost-guard.test.js +234 -0
  573. package/core/.formation/tools/__tests__/subagent-codex-harness.test.js +96 -0
  574. package/core/.formation/tools/__tests__/task-1863-claim-late-release.test.js +160 -0
  575. package/core/.formation/tools/__tests__/task-2265-singleton-identity.test.js +134 -0
  576. package/core/.formation/tools/__tests__/task-2281-singleton-readers.test.js +64 -0
  577. package/core/.formation/tools/__tests__/task2030-worktree-node-modules.test.js +221 -0
  578. package/core/.formation/tools/__tests__/task2067-worktree-branch-reuse.test.js +148 -0
  579. package/core/.formation/tools/alaya-gate.js +198 -0
  580. package/core/.formation/tools/analytics.js +172 -0
  581. package/core/.formation/tools/broadcast.js +103 -0
  582. package/core/.formation/tools/commit-sync.js +154 -0
  583. package/core/.formation/tools/coordinator.js +350 -0
  584. package/core/.formation/tools/dashboard-models-chain.test.js +60 -0
  585. package/core/.formation/tools/dispatch-cortex-context.test.js +52 -0
  586. package/core/.formation/tools/dispatch-detail/cross-project-worktree.md +40 -0
  587. package/core/.formation/tools/dispatch-detail/testing-module.md +53 -0
  588. package/core/.formation/tools/dispatch-detail/worktree-subagent-mode.md +72 -0
  589. package/core/.formation/tools/dispatch-dryrun.test.js +54 -0
  590. package/core/.formation/tools/dispatch-model-policy.test.js +165 -0
  591. package/core/.formation/tools/dispatch-notifier.js +84 -0
  592. package/core/.formation/tools/dispatch-registry.js +346 -0
  593. package/core/.formation/tools/dispatch.js +1931 -0
  594. package/core/.formation/tools/formations.js +1203 -0
  595. package/core/.formation/tools/forseti-verify.js +1170 -0
  596. package/core/.formation/tools/git-salvage.js +269 -0
  597. package/core/.formation/tools/guard-attribution.js +224 -0
  598. package/core/.formation/tools/headless-branch-recovery.test.js +64 -0
  599. package/core/.formation/tools/headless-dryrun.test.js +79 -0
  600. package/core/.formation/tools/headless-v2.js +659 -0
  601. package/core/.formation/tools/headless.js +1071 -0
  602. package/core/.formation/tools/integration.js +528 -0
  603. package/core/.formation/tools/jev-correction.js +214 -0
  604. package/core/.formation/tools/jev-correction.test.js +178 -0
  605. package/core/.formation/tools/legacy-scheduler.js +1994 -0
  606. package/core/.formation/tools/lib/exec-tree.js +92 -0
  607. package/core/.formation/tools/lib/exec-tree.test.js +82 -0
  608. package/core/.formation/tools/loader.js +190 -0
  609. package/core/.formation/tools/log-reader.js +232 -0
  610. package/core/.formation/tools/logger.js +273 -0
  611. package/core/.formation/tools/mcp-allowlist.test.js +40 -0
  612. package/core/.formation/tools/memory-loader.js +422 -0
  613. package/core/.formation/tools/merge-lock-heartbeat.test.js +35 -0
  614. package/core/.formation/tools/no-hooks.settings.json +3 -0
  615. package/core/.formation/tools/pool-status-push.js +121 -0
  616. package/core/.formation/tools/pool-status-push.test.js +165 -0
  617. package/core/.formation/tools/post-complete/bounded-http.js +102 -0
  618. package/core/.formation/tools/post-complete/bounded-http.test.js +130 -0
  619. package/core/.formation/tools/post-complete/cognitive.js +270 -0
  620. package/core/.formation/tools/post-complete/git-merge.js +2845 -0
  621. package/core/.formation/tools/post-complete/health.js +464 -0
  622. package/core/.formation/tools/post-complete/integration-gaps.js +98 -0
  623. package/core/.formation/tools/post-complete/outcome.js +874 -0
  624. package/core/.formation/tools/post-complete/staging.js +390 -0
  625. package/core/.formation/tools/post-complete/subagent-transcript-stats.js +460 -0
  626. package/core/.formation/tools/post-complete/subagent-transcript-stats.test.js +680 -0
  627. package/core/.formation/tools/post-complete/task1536.test.js +627 -0
  628. package/core/.formation/tools/post-complete/task1543.test.js +261 -0
  629. package/core/.formation/tools/post-complete/task1876.test.js +287 -0
  630. package/core/.formation/tools/post-complete/task1957.test.js +293 -0
  631. package/core/.formation/tools/post-complete/task1997.test.js +401 -0
  632. package/core/.formation/tools/post-complete/task2028.test.js +232 -0
  633. package/core/.formation/tools/post-complete/task2029.test.js +275 -0
  634. package/core/.formation/tools/post-complete/task2036.test.js +330 -0
  635. package/core/.formation/tools/post-complete/task2038.test.js +246 -0
  636. package/core/.formation/tools/post-complete/task2071.test.js +231 -0
  637. package/core/.formation/tools/post-complete/task2233.test.js +100 -0
  638. package/core/.formation/tools/post-complete/task2240.test.js +134 -0
  639. package/core/.formation/tools/post-complete/task2244.test.js +199 -0
  640. package/core/.formation/tools/post-complete/task2255.test.js +28 -0
  641. package/core/.formation/tools/post-complete/task2268.test.js +106 -0
  642. package/core/.formation/tools/post-complete/task2341.test.js +74 -0
  643. package/core/.formation/tools/post-complete/task2345.test.js +38 -0
  644. package/core/.formation/tools/post-complete/testing.js +482 -0
  645. package/core/.formation/tools/post-complete/wish.js +177 -0
  646. package/core/.formation/tools/post-complete/worktree-rescue.test.js +283 -0
  647. package/core/.formation/tools/post-complete.js +3660 -0
  648. package/core/.formation/tools/post-complete.test.js +1002 -0
  649. package/core/.formation/tools/pre-dispatch-snapshot.test.js +328 -0
  650. package/core/.formation/tools/process-state.js +33 -0
  651. package/core/.formation/tools/prompt.js +2183 -0
  652. package/core/.formation/tools/prompt.test.js +875 -0
  653. package/core/.formation/tools/remote-conflict.js +98 -0
  654. package/core/.formation/tools/revert-daemon-state.js +162 -0
  655. package/core/.formation/tools/route-audit.test.js +55 -0
  656. package/core/.formation/tools/runner.js +1332 -0
  657. package/core/.formation/tools/supabase-client.js +104 -0
  658. package/core/.formation/tools/task-sync.js +236 -0
  659. package/core/.formation/tools/task-utils.js +344 -0
  660. package/core/.formation/tools/task2028-headless-worktree.test.js +112 -0
  661. package/core/.formation/tools/test-drift.js +148 -0
  662. package/core/.formation/tools/tests/headless-mcp-args-plumbing.test.js +123 -0
  663. package/core/.formation/tools/tests/relay-mcp-overrides.test.js +112 -0
  664. package/core/.formation/tools/transcript-recorder.js +574 -0
  665. package/core/.formation/tools/utils-claude-cmd.test.js +28 -0
  666. package/core/.formation/tools/utils-worktree-config.test.js +44 -0
  667. package/core/.formation/tools/utils.js +1020 -0
  668. package/core/.formation/tools/verify-acceptance.js +585 -0
  669. package/core/.formation/tools/worktree-leak.test.js +162 -0
  670. package/core/.formation/tools/worktree-reclaim.js +259 -0
  671. package/core/.formation/tools/worktree-reclaim.test.js +182 -0
  672. package/core/.formation/tools/yggdrasil-local.js +97 -0
  673. package/core/.formation/unit/do.yaml +78 -0
  674. package/core/.formation/unit/heimdall.yaml +96 -0
  675. package/core/.formation/unit/plan.yaml +67 -0
  676. package/core/.formation/unit/think.yaml +58 -0
  677. package/core/.kenaz/MUNINN_SNAPSHOT9_EPISODE.json +32 -0
  678. package/core/.kenaz/MUNINN_SNAPSHOT9_RUNE.json +23 -0
  679. package/core/.kenaz/MUNINN_SNAPSHOT9_SUMMARY.md +89 -0
  680. package/core/.kenaz/ash_TASK_1428-20260507.json +14 -0
  681. package/core/.kenaz/cache/native-models/claude.json +42 -0
  682. package/core/.kenaz/claude-hooks-manifest.json +119 -0
  683. package/core/.kenaz/cortex.yaml +100 -0
  684. package/core/.kenaz/curator_state.json +7 -0
  685. package/core/.kenaz/dashboard-quick-prompts.json +9 -0
  686. package/core/.kenaz/designs/METAPLASTICITY_CONFIDENCE_DESIGN.md +537 -0
  687. package/core/.kenaz/designs/REFLEX_INITIATOR_DESIGN.md +501 -0
  688. package/core/.kenaz/designs/TASK_1385_handoff_mcp_design.md +426 -0
  689. package/core/.kenaz/designs/TASK_932_hippocampus_consolidation.md +103 -0
  690. package/core/.kenaz/designs/TASK_934_efe_signal_engine.md +97 -0
  691. package/core/.kenaz/designs/TASK_935_self_evolution_framework.md +154 -0
  692. package/core/.kenaz/designs/VISION_cognitive_architecture_roadmap.md +159 -0
  693. package/core/.kenaz/designs/metaplasticity_simulation_results.json +696 -0
  694. package/core/.kenaz/docs/INDEX.md +214 -0
  695. package/core/.kenaz/docs/README.md +290 -0
  696. package/core/.kenaz/docs/registry.json +962 -0
  697. package/core/.kenaz/docs/schema.json +144 -0
  698. package/core/.kenaz/docs/tools/GIT_HOOK_GUIDE.md +203 -0
  699. package/core/.kenaz/docs/tools/RAG_INTEGRATION_GUIDE.md +306 -0
  700. package/core/.kenaz/docs/tools/README.md +99 -0
  701. package/core/.kenaz/docs/tools/TIME_ESTIMATION_GUIDE.md +299 -0
  702. package/core/.kenaz/docs/tools/package-lock.json +618 -0
  703. package/core/.kenaz/docs/tools/package.json +34 -0
  704. package/core/.kenaz/docs/tools/src/cli.ts +365 -0
  705. package/core/.kenaz/docs/tools/src/field-extractor.ts +152 -0
  706. package/core/.kenaz/docs/tools/src/index.ts +14 -0
  707. package/core/.kenaz/docs/tools/src/registry.ts +664 -0
  708. package/core/.kenaz/docs/tools/src/search.ts +195 -0
  709. package/core/.kenaz/docs/tools/src/types.ts +88 -0
  710. package/core/.kenaz/docs/tools/test-git-hook.sh +79 -0
  711. package/core/.kenaz/docs/tools/tsconfig.json +20 -0
  712. package/core/.kenaz/docs/tools/verify.sh +106 -0
  713. package/core/.kenaz/episodes/SESSION_ansuz-prompt-1785087304784.yaml +68 -0
  714. package/core/.kenaz/huginn-exploration.json +8 -0
  715. package/core/.kenaz/knowledge/ladybug_2c51da1e_shadow_file_frame_group.patch +163 -0
  716. package/core/.kenaz/knowledge/ladybug_30cf85690e_shadow_page_read_during_checkpoint.patch +393 -0
  717. package/core/.kenaz/knowledge/ladybug_7a17858d3a_node_group_delete_lock.patch +102 -0
  718. package/core/.kenaz/knowledge/ladybug_926a0ba1_column_checkpoint.patch +412 -0
  719. package/core/.kenaz/knowledge/ladybug_a346c4c4b6_pk_index_header_pages.patch +144 -0
  720. package/core/.kenaz/knowledge/ladybug_ba5f38815b_csr_node_group.patch +86 -0
  721. package/core/.kenaz/main-memory/README.md +230 -0
  722. package/core/.kenaz/main-memory/kenaz/cortex/001_cortex_overview.md +168 -0
  723. package/core/.kenaz/main-memory/kenaz/cortex/001_rag_engine_overview.md +30 -0
  724. package/core/.kenaz/main-memory/kenaz/memory-system/001_three_tier_architecture.md +361 -0
  725. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_execution_flow.md +117 -0
  726. package/core/.kenaz/main-memory/kenaz/pipeline/001_task_granularity.md +154 -0
  727. package/core/.kenaz/main-memory/kenaz/pipeline/002_team_priority.md +51 -0
  728. package/core/.kenaz/main-memory/kenaz/pipeline/003_feature_id_system.md +46 -0
  729. package/core/.kenaz/main-memory/kenaz/rules/001_gen_007_self_containment.md +108 -0
  730. package/core/.kenaz/main-memory/kenaz/rules/001_rule_priority_system.md +121 -0
  731. package/core/.kenaz/main-memory/kenaz/rules/002_agt_006_pre_check.md +0 -0
  732. package/core/.kenaz/main-memory/kenaz/rules/003_ppl_002_task_archival.md +48 -0
  733. package/core/.kenaz/main-memory/kenaz/system/001_dual_track_task_system.md +197 -0
  734. package/core/.kenaz/main-memory/knowledge/patterns/001_json_bom_issue.md +78 -0
  735. package/core/.kenaz/main-memory/knowledge/patterns/001_leader_worker_pattern.md +0 -0
  736. package/core/.kenaz/main-memory/knowledge/patterns/002_scope_path_conflict.md +115 -0
  737. package/core/.kenaz/main-memory/knowledge/patterns/002_task_dependency_resolution.md +223 -0
  738. package/core/.kenaz/main-memory/knowledge/patterns/003_question_protocol.md +242 -0
  739. package/core/.kenaz/main-memory/knowledge/patterns/004_user_insight_value.md +111 -0
  740. package/core/.kenaz/main-memory/knowledge/patterns/005_file_lock_pattern.md +274 -0
  741. package/core/.kenaz/main-memory/knowledge/references/001_ppl_rules.md +28 -0
  742. package/core/.kenaz/main-memory/knowledge/solutions/001_json_bom_issue.md +137 -0
  743. package/core/.kenaz/main-memory/knowledge/solutions/001_team_invocation.md +0 -0
  744. package/core/.kenaz/main-memory/knowledge/solutions/002_passive_monitoring.md +0 -0
  745. package/core/.kenaz/main-memory/knowledge/solutions/003_windows_file_race_condition.md +239 -0
  746. package/core/.kenaz/main-memory/registry.json +326 -0
  747. package/core/.kenaz/main-memory/version.yaml +58 -0
  748. package/core/.kenaz/muninn_episode_write.ps1 +17 -0
  749. package/core/.kenaz/muninn_snapshot11_rune_candidates.md +63 -0
  750. package/core/.kenaz/muninn_snapshot1_rune_candidates.md +49 -0
  751. package/core/.kenaz/orphan_audit_2026-05.md +181 -0
  752. package/core/.kenaz/ownership.yaml +155 -0
  753. package/core/.kenaz/peer.yaml +72 -0
  754. package/core/.kenaz/project.yaml +62 -0
  755. package/core/.kenaz/rune_ansuz_literature_validation_strategy.md +40 -0
  756. package/core/.kenaz/rune_efe_active_inference_validation.md +36 -0
  757. package/core/.kenaz/rune_yggdrasil_filesystem_scoped_project.md +41 -0
  758. package/core/.kenaz/rune_yggdrasil_project_identity_folder_name.md +41 -0
  759. package/core/.kenaz/rune_yggdrasil_relay_protocol_project_mismatch.md +39 -0
  760. package/core/.kenaz/runes_TASK_1428.json +57 -0
  761. package/core/.kenaz/specialist/ansuz_motivational_state.schema.json +138 -0
  762. package/core/.kenaz/specialist/ansuz_rules.yaml +241 -0
  763. package/core/.kenaz/specialist/ansuz_session_handoff.schema.json +128 -0
  764. package/core/.kenaz/specialist/chart_TASK_1657.json +50 -0
  765. package/core/.kenaz/specialist/cognitive-hub-e2e.test.js +494 -0
  766. package/core/.kenaz/specialist/daemon-manifest.yaml +168 -0
  767. package/core/.kenaz/specialist/empty_ac_audit_report.md +63 -0
  768. package/core/.kenaz/specialist/episode_muninn_completion_1785056865691.json +91 -0
  769. package/core/.kenaz/specialist/field_report_watermark.json +1 -0
  770. package/core/.kenaz/specialist/gc1826_driver.js +118 -0
  771. package/core/.kenaz/specialist/heimdall_proposal_1017c07f.json +13 -0
  772. package/core/.kenaz/specialist/heimdall_proposal_3dfaa8b9.json +12 -0
  773. package/core/.kenaz/specialist/heimdall_proposal_57af18f9.json +15 -0
  774. package/core/.kenaz/specialist/heimdall_proposal_57b1aa1b.json +14 -0
  775. package/core/.kenaz/specialist/heimdall_proposal_5a3c9473.json +13 -0
  776. package/core/.kenaz/specialist/identity_verdicts/TASK_1073.json +75 -0
  777. package/core/.kenaz/specialist/identity_verdicts/TASK_TEST.json +77 -0
  778. package/core/.kenaz/specialist/memory_guard_fired.json +1 -0
  779. package/core/.kenaz/specialist/memory_guard_trigger_cache.json +1 -0
  780. package/core/.kenaz/specialist/memory_source_priority.yaml +260 -0
  781. package/core/.kenaz/specialist/motivational_state.schema.json +62 -0
  782. package/core/.kenaz/specialist/prompt_1775.txt +317 -0
  783. package/core/.kenaz/specialist/prompt_1776.txt +326 -0
  784. package/core/.kenaz/specialist/prompt_1791.txt +320 -0
  785. package/core/.kenaz/specialist/prompt_1792.txt +320 -0
  786. package/core/.kenaz/specialist/prompt_1795.txt +281 -0
  787. package/core/.kenaz/specialist/prompt_1813.txt +332 -0
  788. package/core/.kenaz/specialist/prompt_1814.txt +401 -0
  789. package/core/.kenaz/specialist/prompt_1815.txt +394 -0
  790. package/core/.kenaz/specialist/prompt_1816.txt +437 -0
  791. package/core/.kenaz/specialist/prompt_1818.txt +361 -0
  792. package/core/.kenaz/specialist/prompt_1819.txt +421 -0
  793. package/core/.kenaz/specialist/prompt_1821.txt +345 -0
  794. package/core/.kenaz/specialist/prompt_1822.txt +313 -0
  795. package/core/.kenaz/specialist/prompt_1824.txt +348 -0
  796. package/core/.kenaz/specialist/prompt_1826.txt +388 -0
  797. package/core/.kenaz/specialist/retired_organs/README.md +58 -0
  798. package/core/.kenaz/specialist/rune_calibration_poc.md +175 -0
  799. package/core/.kenaz/specialist/rune_efe_salience_gap.md +21 -0
  800. package/core/.kenaz/specialist/rune_ember_autonomous_dispatch_gate.md +24 -0
  801. package/core/.kenaz/specialist/rune_post_dispatch_verification_pattern.md +31 -0
  802. package/core/.kenaz/specialist/rune_surprise_proxy_improvement.md +28 -0
  803. package/core/.kenaz/specialist/rune_worktree_dispatch_pattern.md +31 -0
  804. package/core/.kenaz/specialist/rune_yaml_filter_desync_fix.md +26 -0
  805. package/core/.kenaz/specialist/rune_yggdrasil_project_identity_folder_name.md +24 -0
  806. package/core/.kenaz/specialist/sessions/chart_TASK_1599.json +41 -0
  807. package/core/.kenaz/specialist/sessions/hmap_028aa781-aad2-48c0-9a61-5540565d4a7f.json +5 -0
  808. package/core/.kenaz/specialist/sessions/hmap_20210387-0c64-400c-9d0a-53042a0cbd89.json +5 -0
  809. package/core/.kenaz/specialist/sessions/hmap_c1375c5d-fd9f-44bd-a83e-353ecbb0392f.json +5 -0
  810. package/core/.kenaz/specialist/sessions/scratch_028aa781-aad2-48c0-9a61-5540565d4a7f.json +6 -0
  811. package/core/.kenaz/specialist/sessions/scratch_0acc0fb3-24f9-453f-9e92-6ef1cdf03a7c.json +6 -0
  812. package/core/.kenaz/specialist/sessions/scratch_20210387-0c64-400c-9d0a-53042a0cbd89.json +6 -0
  813. package/core/.kenaz/specialist/sessions/scratch_2f10623e-b7a1-4647-905e-9dc7c4d99f9c.json +6 -0
  814. package/core/.kenaz/specialist/sessions/scratch_5a38b62d-608a-488c-82f0-7e47e95e0905.json +6 -0
  815. package/core/.kenaz/specialist/sessions/scratch_5d9758ef-d9b6-4ffe-a017-3ed26d0a313b.json +6 -0
  816. package/core/.kenaz/specialist/sessions/scratch_c1375c5d-fd9f-44bd-a83e-353ecbb0392f.json +6 -0
  817. package/core/.kenaz/specialist/sessions/scratch_c9f3c711-b73d-4fcd-ad2a-7b2bc024ee77.json +6 -0
  818. package/core/.kenaz/specialist/sessions/scratch_e72e5274-1c81-4655-a05a-f87d1ecb2917.json +6 -0
  819. package/core/.kenaz/specialist/sessions/scratch_f740cdbe-f756-41fc-98fb-2b1413d51901.json +6 -0
  820. package/core/.kenaz/specialist/t1777_probe.txt +1 -0
  821. package/core/.kenaz/specialist/task1825_update.json +43 -0
  822. package/core/.kenaz/specialist/task1827_update.json +43 -0
  823. package/core/.kenaz/specialist/task1828_update.json +43 -0
  824. package/core/.kenaz/specialist/taskgen/consolidation_i.json +38 -0
  825. package/core/.kenaz/specialist/taskgen/csharp_a.json +44 -0
  826. package/core/.kenaz/specialist/taskgen/csharp_b.json +40 -0
  827. package/core/.kenaz/specialist/taskgen/embedding_e.json +34 -0
  828. package/core/.kenaz/specialist/taskgen/hygiene_fg.json +39 -0
  829. package/core/.kenaz/specialist/taskgen/pathology_h.json +36 -0
  830. package/core/.kenaz/specialist/taskgen/unity_noise_d.json +38 -0
  831. package/core/.kenaz/specialist/taskgen/visibility_c.json +38 -0
  832. package/core/.kenaz/specialist/verify_1837.js +302 -0
  833. package/core/.kenaz/specialist/verify_1838.js +124 -0
  834. package/core/.kenaz/tmp/heimdall_proposal_fc7e0944.json +10 -0
  835. package/core/.kenaz/tmp_heimdall_proposal_8d3e392.json +13 -0
  836. package/core/.kenaz/tmp_props.json +1 -0
  837. package/core/.kenaz/tmp_sounddrop_t1_prompt.txt +371 -0
  838. package/core/.kenaz/user_model.schema.json +107 -0
  839. package/core/.matrix/README.md +257 -0
  840. package/core/.matrix/index.matrix +5 -0
  841. package/core/.mcp.json +8 -0
  842. package/core/.prefrontal/.gitkeep +0 -0
  843. package/core/.prefrontal/proposals/.gitkeep +0 -0
  844. package/core/.rule/INDEX.yaml +99 -0
  845. package/core/.rule/MECHANIZED.md +61 -0
  846. package/core/.rule/code/README.md +211 -0
  847. package/core/.rule/code/backend.yaml +294 -0
  848. package/core/.rule/code/checklist.yaml +258 -0
  849. package/core/.rule/code/maintainability.yaml +227 -0
  850. package/core/.rule/code/naming.yaml +106 -0
  851. package/core/.rule/code/principles.yaml +71 -0
  852. package/core/.rule/code/reusability.yaml +192 -0
  853. package/core/.rule/code/structure.yaml +218 -0
  854. package/core/.rule/code/style.yaml +197 -0
  855. package/core/.rule/design/ui.yaml +79 -0
  856. package/core/.rule/general/agent-workflow.yaml +572 -0
  857. package/core/.rule/general/cortex-memory-recall.yaml +446 -0
  858. package/core/.rule/general/cortex-tools.yaml +181 -0
  859. package/core/.rule/general/cross-platform.yaml +107 -0
  860. package/core/.rule/general/ddx-synapse-stack.yaml +162 -0
  861. package/core/.rule/general/file-size-threshold.yaml +45 -0
  862. package/core/.rule/general/identity-contract.schema.yaml +251 -0
  863. package/core/.rule/general/memory-language.yaml +67 -0
  864. package/core/.rule/general/memory-source-priority.yaml +207 -0
  865. package/core/.rule/general/pipeline.yaml +246 -0
  866. package/core/.rule/general/principles.yaml +77 -0
  867. package/core/.rule/general/project-self-containment.yaml +253 -0
  868. package/core/.rule/general/rust-verify-target.yaml +80 -0
  869. package/core/.rule/general/specialist-identity-contract.yaml +153 -0
  870. package/core/.rule/general/sunny-access-control.yaml +60 -0
  871. package/core/.rule/general/synapse-code-intelligence.yaml +375 -0
  872. package/core/.rule/general/synapse-cognitive-fusion.yaml +301 -0
  873. package/core/.rule/general/system-invariants.yaml +248 -0
  874. package/core/.rule/general/task-pool-routing.yaml +102 -0
  875. package/core/.rule/general/worktree-isolation.yaml +79 -0
  876. package/core/.rule/pipeline/PPL-002-completed-task-archival.yaml +528 -0
  877. package/core/.rule/pipeline/auto-update.yaml +282 -0
  878. package/core/.rule/pipeline/task-execution.yaml +368 -0
  879. package/core/.rule/tools/check-permissions.js +197 -0
  880. package/core/.specialist/Amelia/README.md +329 -0
  881. package/core/.specialist/Amelia/capability.yaml +386 -0
  882. package/core/.specialist/Amelia/knowledge.yaml +217 -0
  883. package/core/.specialist/Amelia/principles.yaml +10 -0
  884. package/core/.specialist/Amelia/rule.yaml +79 -0
  885. package/core/.specialist/Amelia/workflow.yaml +241 -0
  886. package/core/.specialist/Ansuz/HEURISTIC_BOOT_ROUTING.md +39 -0
  887. package/core/.specialist/Ansuz/ROUTING.md +35 -0
  888. package/core/.specialist/Ansuz/RULES.md +79 -0
  889. package/core/.specialist/Ansuz/SYSTEM_DOC.md +611 -0
  890. package/core/.specialist/Ansuz/VERIFY.md +38 -0
  891. package/core/.specialist/Ansuz/capability.yaml +338 -0
  892. package/core/.specialist/Ansuz/cognitive_principles.yaml +62 -0
  893. package/core/.specialist/Ansuz/concepts/agent_types.yaml +22 -0
  894. package/core/.specialist/Ansuz/concepts/autonomous_agenda.yaml +170 -0
  895. package/core/.specialist/Ansuz/concepts/autonomy_contract.yaml +126 -0
  896. package/core/.specialist/Ansuz/concepts/boot_ritual.yaml +107 -0
  897. package/core/.specialist/Ansuz/concepts/boot_rules_summary.yaml +16 -0
  898. package/core/.specialist/Ansuz/concepts/capability_pointers.yaml +21 -0
  899. package/core/.specialist/Ansuz/concepts/cognitive_fluency_contract.yaml +264 -0
  900. package/core/.specialist/Ansuz/concepts/cognitive_systems_competence_map.yaml +14 -0
  901. package/core/.specialist/Ansuz/concepts/cognitive_systems_hippocampus.yaml +14 -0
  902. package/core/.specialist/Ansuz/concepts/cognitive_systems_overview.yaml +27 -0
  903. package/core/.specialist/Ansuz/concepts/cognitive_systems_serendipity.yaml +14 -0
  904. package/core/.specialist/Ansuz/concepts/cognitive_systems_turn_context.yaml +13 -0
  905. package/core/.specialist/Ansuz/concepts/commitment_layer.yaml +150 -0
  906. package/core/.specialist/Ansuz/concepts/completion_tracking.yaml +29 -0
  907. package/core/.specialist/Ansuz/concepts/deep_knowledge_pointers.yaml +28 -0
  908. package/core/.specialist/Ansuz/concepts/evolvable_guardrails.yaml +20 -0
  909. package/core/.specialist/Ansuz/concepts/fatigue_handoff.yaml +84 -0
  910. package/core/.specialist/Ansuz/concepts/formation_quick_ref.yaml +28 -0
  911. package/core/.specialist/Ansuz/concepts/guardrails_immutable.yaml +31 -0
  912. package/core/.specialist/Ansuz/concepts/identity.yaml +48 -0
  913. package/core/.specialist/Ansuz/concepts/interaction_protocol.yaml +42 -0
  914. package/core/.specialist/Ansuz/concepts/meta_evolvable_tier.yaml +28 -0
  915. package/core/.specialist/Ansuz/concepts/mindset.yaml +18 -0
  916. package/core/.specialist/Ansuz/concepts/phase9_verification.yaml +21 -0
  917. package/core/.specialist/Ansuz/concepts/phase_protocol.yaml +66 -0
  918. package/core/.specialist/Ansuz/concepts/principles.yaml +65 -0
  919. package/core/.specialist/Ansuz/concepts/self_evolution_overview.yaml +53 -0
  920. package/core/.specialist/Ansuz/concepts/task_first_protocol.yaml +7 -0
  921. package/core/.specialist/Ansuz/concepts/task_pool.yaml +119 -0
  922. package/core/.specialist/Ansuz/concepts/task_system.yaml +22 -0
  923. package/core/.specialist/Ansuz/concepts/write_verification.yaml +26 -0
  924. package/core/.specialist/Ansuz/core.yaml +224 -0
  925. package/core/.specialist/Ansuz/decisions/ADR-requirement-graph-layer.md +390 -0
  926. package/core/.specialist/Ansuz/elixir.yaml +70 -0
  927. package/core/.specialist/Ansuz/exo_cortex_tools.yaml +13 -0
  928. package/core/.specialist/Ansuz/experiments/boot_ablation_replay.js +197 -0
  929. package/core/.specialist/Ansuz/guards/blind_spot_guards.yaml +28 -0
  930. package/core/.specialist/Ansuz/guards/lesson_guards.yaml +203 -0
  931. package/core/.specialist/Ansuz/identity_contract.yaml +375 -0
  932. package/core/.specialist/Ansuz/knowledge.yaml +284 -0
  933. package/core/.specialist/Ansuz/modules/amelia_review.yaml +112 -0
  934. package/core/.specialist/Ansuz/modules/ddx.yaml +47 -0
  935. package/core/.specialist/Ansuz/modules/design_checks.yaml +47 -0
  936. package/core/.specialist/Ansuz/modules/identity_verification.yaml +119 -0
  937. package/core/.specialist/Ansuz/modules/loop_guard.yaml +36 -0
  938. package/core/.specialist/Ansuz/modules/prevention.yaml +84 -0
  939. package/core/.specialist/Ansuz/modules/prophecy.yaml +95 -0
  940. package/core/.specialist/Ansuz/modules/pulse_empty.yaml +36 -0
  941. package/core/.specialist/Ansuz/modules/qa_intake.yaml +29 -0
  942. package/core/.specialist/Ansuz/modules/recall.yaml +45 -0
  943. package/core/.specialist/Ansuz/principles.yaml +31 -0
  944. package/core/.specialist/Ansuz/research/EMBER_architecture_comparison.md +142 -0
  945. package/core/.specialist/Ansuz/rule.yaml +97 -0
  946. package/core/.specialist/Ansuz/self_model_seed.backup.json +100 -0
  947. package/core/.specialist/Ansuz/self_model_seed.json +100 -0
  948. package/core/.specialist/Ansuz/self_model_seed.sha256 +1 -0
  949. package/core/.specialist/Ansuz/tools/ansuz-handoff-snapshot.js +626 -0
  950. package/core/.specialist/Ansuz/tools/ansuz-handoff.js +437 -0
  951. package/core/.specialist/Ansuz/tools/ansuz-sdk-runner.js +1254 -0
  952. package/core/.specialist/Ansuz/tools/ansuz-sdk-runner.test.js +137 -0
  953. package/core/.specialist/Ansuz/tools/ansuz-state.js +288 -0
  954. package/core/.specialist/Ansuz/tools/bootstrap-anchors.js +289 -0
  955. package/core/.specialist/Ansuz/tools/handoff-freshness-milestone.test.js +73 -0
  956. package/core/.specialist/Ansuz/tools/handoff-resolver.js +207 -0
  957. package/core/.specialist/Ansuz/tools/handoff-session-identity.test.js +333 -0
  958. package/core/.specialist/Ansuz/tools/handoff-snapshot-args.test.js +25 -0
  959. package/core/.specialist/Ansuz/tools/install-claude-hooks.js +354 -0
  960. package/core/.specialist/Ansuz/tools/install-claude-hooks.test.js +110 -0
  961. package/core/.specialist/Ansuz/tools/package.json +16 -0
  962. package/core/.specialist/Ansuz/tools/preservation-coordinator.js +504 -0
  963. package/core/.specialist/Ansuz/tools/verify-and-land.js +1012 -0
  964. package/core/.specialist/Ansuz/tools/verify-and-land.test.js +1099 -0
  965. package/core/.specialist/Ansuz/workflow.yaml +1273 -0
  966. package/core/.specialist/Forseti/capability.yaml +210 -0
  967. package/core/.specialist/Forseti/core.yaml +176 -0
  968. package/core/.specialist/Forseti/principles.yaml +88 -0
  969. package/core/.specialist/Forseti/rule.yaml +86 -0
  970. package/core/.specialist/Heimdall/SKILL.md +65 -0
  971. package/core/.specialist/Heimdall/capability.yaml +134 -0
  972. package/core/.specialist/Heimdall/core.yaml +275 -0
  973. package/core/.specialist/Heimdall/principles.yaml +66 -0
  974. package/core/.specialist/Heimdall/rule.yaml +68 -0
  975. package/core/.specialist/Huginn/capability.yaml +234 -0
  976. package/core/.specialist/Huginn/core.yaml +482 -0
  977. package/core/.specialist/Huginn/principles.yaml +57 -0
  978. package/core/.specialist/Huginn/rule.yaml +121 -0
  979. package/core/.specialist/REFLECTION_TO_CONTROL.md +347 -0
  980. package/core/.specialist/ansuz_session_handoff.json +96 -0
  981. package/core/.specialist/experiments/rg_benchmark.js +523 -0
  982. package/core/.specialist/experiments/rg_benchmark_results.json +27 -0
  983. package/core/.specialist/shared/cognitive-primer.md +15 -0
  984. package/core/.specialist/shared/guard_schema.json +290 -0
  985. package/core/.specialist/shared/principles.yaml +213 -0
  986. package/core/.specialist/tests/runtime-discovery/README.md +224 -0
  987. package/core/.specialist/tests/runtime-discovery/active-project-polling.test.js +495 -0
  988. package/core/.specialist/tests/runtime-discovery/port-binding.test.js +418 -0
  989. package/core/.specialist/tests/runtime-discovery/resolver-priority.test.js +693 -0
  990. package/core/.specialist/tests/runtime-discovery/resolver-skip-on-invalid.test.js +467 -0
  991. package/core/.specialist/tests/runtime-discovery/resolver-symmetry.test.js +679 -0
  992. package/core/.specialist/tests/runtime-discovery/tail-cli-project-path.test.js +231 -0
  993. package/core/.specialist/tools/MEMORY_RECALL_TRIGGERS.md +156 -0
  994. package/core/.specialist/tools/README.md +129 -0
  995. package/core/.specialist/tools/__tests__/freya-cli-contract.test.js +156 -0
  996. package/core/.specialist/tools/__tests__/task-1863-boot-lease-reuse.test.js +99 -0
  997. package/core/.specialist/tools/__tests__/task-1917-orphan-detection.test.js +175 -0
  998. package/core/.specialist/tools/__tests__/task-1977-banner-cap.test.js +129 -0
  999. package/core/.specialist/tools/__tests__/task-1983-lease-project-path.test.js +96 -0
  1000. package/core/.specialist/tools/__tests__/task-2218-boot-session-id.test.js +118 -0
  1001. package/core/.specialist/tools/__tests__/task-2222-session-identity-interleave.test.js +203 -0
  1002. package/core/.specialist/tools/__tests__/task-2246-reap-honesty.test.js +96 -0
  1003. package/core/.specialist/tools/__tests__/task-2254-handoff-archive-contract.test.js +60 -0
  1004. package/core/.specialist/tools/__tests__/task-2272-open-card-status-quote.test.js +26 -0
  1005. package/core/.specialist/tools/__tests__/task-2374-usage-counter.test.js +34 -0
  1006. package/core/.specialist/tools/ansuz-boot-fast.js +1120 -0
  1007. package/core/.specialist/tools/ansuz-boot-fast.test.js +705 -0
  1008. package/core/.specialist/tools/canary.js +501 -0
  1009. package/core/.specialist/tools/context-injection.js +395 -0
  1010. package/core/.specialist/tools/design-reasoning.js +493 -0
  1011. package/core/.specialist/tools/discovery-fixtures.js +308 -0
  1012. package/core/.specialist/tools/discovery-runner.js +460 -0
  1013. package/core/.specialist/tools/failure-detector.js +1132 -0
  1014. package/core/.specialist/tools/identity-scorer.js +714 -0
  1015. package/core/.specialist/tools/jev-optional-context.js +107 -0
  1016. package/core/.specialist/tools/jev-optional-context.test.js +152 -0
  1017. package/core/.specialist/tools/lesson-guard.js +1084 -0
  1018. package/core/.specialist/tools/lib/chart-path.js +159 -0
  1019. package/core/.specialist/tools/lib/chart-path.test.js +171 -0
  1020. package/core/.specialist/tools/lib/project-resolver.js +200 -0
  1021. package/core/.specialist/tools/lib/project-resolver.test.js +241 -0
  1022. package/core/.specialist/tools/memory-action-log.js +839 -0
  1023. package/core/.specialist/tools/phase-gate.js +3754 -0
  1024. package/core/.specialist/tools/phase-gate.test.js +85 -0
  1025. package/core/.specialist/tools/phase9-policy.test.js +109 -0
  1026. package/core/.specialist/tools/precompute-runner.js +444 -0
  1027. package/core/.specialist/tools/prompt-files.test.js +169 -0
  1028. package/core/.specialist/tools/replay-detectors.js +290 -0
  1029. package/core/.specialist/tools/rule-engine.js +621 -0
  1030. package/core/.specialist/tools/session-boot-ownership.test.js +117 -0
  1031. package/core/.specialist/tools/session-project-state.test.js +65 -0
  1032. package/core/.specialist/tools/session.js +1866 -0
  1033. package/core/.specialist/tools/stream-lease.js +263 -0
  1034. package/core/.specialist/tools/task-bridge-jev.test.js +170 -0
  1035. package/core/.specialist/tools/task-bridge.js +765 -0
  1036. package/core/.specialist/tools/verify-identity.js +453 -0
  1037. package/core/.specialist/tools/wish-mandate-delivery.test.js +76 -0
  1038. package/core/.system/README.md +555 -0
  1039. package/core/.system/agent-skills/README.md +724 -0
  1040. package/core/.system/archive/README.md +499 -0
  1041. package/core/.system/assessment/README.md +645 -0
  1042. package/core/.system/cli-tools/README.md +724 -0
  1043. package/core/.system/collaboration/KNOWLEDGE.md +65 -0
  1044. package/core/.system/collaboration/README.md +570 -0
  1045. package/core/.system/cortex/MODULES.md +1046 -0
  1046. package/core/.system/dashboard/FRONTEND.md +812 -0
  1047. package/core/.system/dashboard/README.md +737 -0
  1048. package/core/.system/external-skills/README.md +522 -0
  1049. package/core/.system/failure/README.md +723 -0
  1050. package/core/.system/formation/LEGACY_SKILLS.md +972 -0
  1051. package/core/.system/formation/POST_COMPLETE.md +600 -0
  1052. package/core/.system/formation/README.md +1092 -0
  1053. package/core/.system/formation/TOOLS_REFERENCE.md +1145 -0
  1054. package/core/.system/githooks/README.md +846 -0
  1055. package/core/.system/kenaz/README.md +787 -0
  1056. package/core/.system/memory/README.md +716 -0
  1057. package/core/.system/pipeline/README.md +712 -0
  1058. package/core/.system/rule/README.md +794 -0
  1059. package/core/.system/specialist/README.md +669 -0
  1060. package/core/.system/specialist/STRUCTURE.md +262 -0
  1061. package/core/.system/sunny/README.md +476 -0
  1062. package/core/.system/sunny/RULES.json +89 -0
  1063. package/core/.system/sunny/knowledge/INDEX.md +37 -0
  1064. package/core/.system/sunny/knowledge/agent-teams-api.md +0 -0
  1065. package/core/.system/sunny/knowledge/ansuz-specialist.md +500 -0
  1066. package/core/.system/sunny/knowledge/claude-cli-spawn.md +177 -0
  1067. package/core/.system/sunny/knowledge/collaboration-api.md +925 -0
  1068. package/core/.system/sunny/teammates/README.md +107 -0
  1069. package/core/.system/sunny/teammates/how_to_use.yaml +101 -0
  1070. package/core/.system/sunny/teammates/tools/headless/launcher.js +318 -0
  1071. package/core/.system/sunny/teammates/tools/powershell/launcher.js +241 -0
  1072. package/core/.system/sunny/teammates/tools/powershell/start.bat +50 -0
  1073. package/core/.system/sunny/teammates/tools/utils/env.js +96 -0
  1074. package/core/.system/sunny/teammates/tools/utils/format-output.js +329 -0
  1075. package/core/.system/sunny/tools.json +101 -0
  1076. package/core/.vendor/js-yaml.cjs +2795 -0
  1077. package/core/.vendor/require-yaml.cjs +8 -0
  1078. package/core/CLAUDE.md +172 -0
  1079. package/core/KENAZ_CORE_VERSION +1 -0
  1080. package/core/dev/ALAYA_FIELD_FEEDBACK_DESIGN.md +126 -0
  1081. package/core/dev/ANSUZ_SCAFFOLD_DIET_2026-09-20.md +231 -0
  1082. package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +355 -0
  1083. package/core/dev/ANSUZ_WORKFLOW_MODERNIZATION.md +143 -0
  1084. package/core/dev/CORTEX_META_GRAPH_ASSESSMENT.md +99 -0
  1085. package/core/dev/FREYA_DOWNSTREAM_BUGS_2026-09-19.md +44 -0
  1086. package/core/dev/GLOBAL_MEMORY_IDENTITY_CONSOLIDATION.md +263 -0
  1087. package/core/dev/GUARD_EFFECTIVENESS_DESIGN.md +180 -0
  1088. package/core/dev/HEALTH_GATE_VARIANCE_ASSESSMENT.md +271 -0
  1089. package/core/dev/HOOK_DIET_2026-09-21.md +126 -0
  1090. package/core/dev/JEV_INTEGRATION_PLAN.md +189 -0
  1091. package/core/dev/KENAZ_AGENT_CONNECT_v1_SPEC.md +139 -0
  1092. package/core/dev/MOBILE_DESIGN_SPEC.md +569 -0
  1093. package/core/dev/MULTI_ANSUZ_SPEC.md +136 -0
  1094. package/core/dev/MUNINN_RETIREMENT.md +115 -0
  1095. package/core/dev/PHASE3_ATTRIBUTION_POPULATION_DIAGNOSIS.md +211 -0
  1096. package/core/dev/PHASE3_P3-2B_TASKLEVEL_PROBE.md +83 -0
  1097. package/core/dev/PHASE3_P3-2_POPULATION_DISJOINTNESS.md +83 -0
  1098. package/core/dev/PHASE3_P3-2_REMEASURE_REPORT.md +231 -0
  1099. package/core/dev/PREDICTION_GROUNDING_DESIGN.md +376 -0
  1100. package/core/dev/PRODUCT_SPEC.md +317 -0
  1101. package/core/dev/PRODUCT_SPEC_FOR_AI_tepmlate.md +716 -0
  1102. package/core/dev/PROJECT_REGISTRY_DUPLICATE_ASSESSMENT.md +86 -0
  1103. package/core/dev/STARTUP_TIMELINE_TASK_1995.md +181 -0
  1104. package/core/dev/SYNAPSE_WORKER_PER_PROJECT.md +881 -0
  1105. package/core/dev/TASK_1680_P3-3_DISPATCH_SPEC.md +96 -0
  1106. package/core/dev/TASK_1684_CALIBRATION_IMPACT_ANALYSIS.md +170 -0
  1107. package/core/dev/TASK_1684_FORK_A_GOODHART_DESIGN.md +171 -0
  1108. package/core/dev/TASK_1684_P3_2_REMEASURE_VALIDATION.md +262 -0
  1109. package/core/dev/TASK_1903_SIGNAL_AUC_MEASUREMENT.md +207 -0
  1110. package/core/dev/TASK_1904_BRANCH_INTEGRITY_AUDIT.md +146 -0
  1111. package/core/dev/ansuz-eval/README.md +38 -0
  1112. package/core/dev/ansuz-eval/build-fixtures.js +87 -0
  1113. package/core/dev/ansuz-eval/grade.js +96 -0
  1114. package/core/dev/ansuz-eval/grader.test.js +117 -0
  1115. package/core/dev/ansuz-eval/tasks.md +32 -0
  1116. package/core/dev/archive/ansuz/BOOT_FULL.md +141 -0
  1117. package/core/dev/archive/ansuz/agents/ansuz-boot.md +176 -0
  1118. package/core/dev/archive/ansuz/designs/alaya-passive-surfacing.md +84 -0
  1119. package/core/dev/archive/ansuz/designs/cc_memory_indexing.md +307 -0
  1120. package/core/dev/archive/ansuz/designs/check_guard.md +322 -0
  1121. package/core/dev/archive/ansuz/designs/consequence_loop.md +227 -0
  1122. package/core/dev/archive/ansuz/designs/mcp_kuzudb_lock_architecture.md +312 -0
  1123. package/core/dev/archive/ansuz/designs/phase0_git_enrichment.md +278 -0
  1124. package/core/dev/archive/ansuz/designs/refactor_mcp_tools_synapse.md +490 -0
  1125. package/core/dev/archive/ansuz/designs/semantic_markdown_extraction.md +167 -0
  1126. package/core/dev/archive/ansuz/designs/task_1372_prompt_injects_into.md +193 -0
  1127. package/core/dev/archive/ansuz/designs/thought_stack.md +286 -0
  1128. package/core/dev/archive/ansuz/investigations/reachability_unified_api_2026-04-11.md +330 -0
  1129. package/core/dev/archive/ansuz/investigations/synapse_orphans_indexing_bug_2026-04-11.md +352 -0
  1130. package/core/dev/archive/ansuz/investigations/synapse_orphans_reindex_verification_2026-04-11.md +48 -0
  1131. package/core/dev/archive/ansuz/investigations/synapse_orphans_verification_2026-04-11.md +170 -0
  1132. package/core/dev/archive/ansuz/legacy/kernel.yaml +399 -0
  1133. package/core/dev/archive/ansuz/legacy/phases/phase_0.yaml +418 -0
  1134. package/core/dev/archive/ansuz/legacy/phases/phase_1.yaml +376 -0
  1135. package/core/dev/archive/ansuz/legacy/phases/phase_10.yaml +35 -0
  1136. package/core/dev/archive/ansuz/legacy/phases/phase_11.yaml +582 -0
  1137. package/core/dev/archive/ansuz/legacy/phases/phase_2.yaml +94 -0
  1138. package/core/dev/archive/ansuz/legacy/phases/phase_3.yaml +274 -0
  1139. package/core/dev/archive/ansuz/legacy/phases/phase_4.yaml +67 -0
  1140. package/core/dev/archive/ansuz/legacy/phases/phase_5.yaml +32 -0
  1141. package/core/dev/archive/ansuz/legacy/phases/phase_6.yaml +91 -0
  1142. package/core/dev/archive/ansuz/legacy/phases/phase_7.yaml +58 -0
  1143. package/core/dev/archive/ansuz/legacy/phases/phase_8.yaml +146 -0
  1144. package/core/dev/archive/ansuz/legacy/phases/phase_9.yaml +424 -0
  1145. package/core/dev/archive/ansuz/specs/INDEX_bifrost_hook_parity.yaml +92 -0
  1146. package/core/dev/archive/ansuz/specs/active-inference-formation.yaml +453 -0
  1147. package/core/dev/archive/ansuz/specs/brief_TASK_1228_userpromptsubmit.yaml +191 -0
  1148. package/core/dev/archive/ansuz/specs/brief_TASK_1229_pretooluse_posttooluse.yaml +250 -0
  1149. package/core/dev/archive/ansuz/specs/brief_TASK_1230_sessionstart_stop.yaml +301 -0
  1150. package/core/dev/archive/ansuz/specs/brief_TASK_1231_verification.yaml +272 -0
  1151. package/core/dev/design/PHASE4_DESIGN.md +559 -0
  1152. package/core/dev/design/dashboard_docs_integration_PLAN.md +388 -0
  1153. package/core/dev/design/matrix_format_ABBREVIATIONS.md +655 -0
  1154. package/core/dev/design/matrix_format_DESIGN_SPEC.md +601 -0
  1155. package/core/dev/design/matrix_format_DISCUSSION_SUMMARY.md +484 -0
  1156. package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +13 -0
  1157. package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +9 -0
  1158. package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +14 -0
  1159. package/core/dev/design/matrix_format_SYNTAX_BNF.md +754 -0
  1160. package/core/dev/design/matrix_format_TOKEN_COMPARISON.md +484 -0
  1161. package/core/dev/design/matrix_v2_COGNITIVE_DESIGN.md +503 -0
  1162. package/core/dev/design/matrix_v2_DISCUSSION_SUMMARY.md +414 -0
  1163. package/core/dev/design/matrix_v2_EXAMPLE.matrix +67 -0
  1164. package/core/dev/designs/EXPANDABLE_CARD_DESIGN_SPEC.md +509 -0
  1165. package/core/dev/jev-eval/ACTIVE_CORRECTION.md +52 -0
  1166. package/core/dev/jev-eval/ANNOTATION_GUIDE.md +68 -0
  1167. package/core/dev/jev-eval/BASELINE_COMPARISON.md +45 -0
  1168. package/core/dev/jev-eval/CONTEXT_REVIEW.md +31 -0
  1169. package/core/dev/jev-eval/EVALUATION_STATUS.md +39 -0
  1170. package/core/dev/jev-eval/HISTORICAL_CORPUS.md +33 -0
  1171. package/core/dev/jev-eval/PACKAGING_VERIFICATION.md +42 -0
  1172. package/core/dev/jev-eval/README.md +101 -0
  1173. package/core/dev/jev-eval/THALAMUS_RANKING.md +58 -0
  1174. package/core/dev/jev-eval/VALIDATION_PROGRESS.md +54 -0
  1175. package/core/dev/jev-eval/cli.mjs +50 -0
  1176. package/core/dev/jev-eval/context.mjs +183 -0
  1177. package/core/dev/jev-eval/corpus.mjs +186 -0
  1178. package/core/dev/jev-eval/fixtures/conversation-review.seed.jsonl +6 -0
  1179. package/core/dev/jev-eval/fixtures/synthetic.jsonl +11 -0
  1180. package/core/dev/jev-eval/metrics.mjs +67 -0
  1181. package/core/dev/jev-eval/muninn-baseline.mjs +119 -0
  1182. package/core/dev/jev-eval/providers.mjs +95 -0
  1183. package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +32 -0
  1184. package/core/dev/jev-eval/reports/context-review-2026-09-20.json +48 -0
  1185. package/core/dev/jev-eval/reports/conversation-review.pending.json +151 -0
  1186. package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +52 -0
  1187. package/core/dev/jev-eval/reports/length-probe-2026-09-20.json +133 -0
  1188. package/core/dev/jev-eval/reports/live-smoke-2026-09-20.json +616 -0
  1189. package/core/dev/jev-eval/reports/muninn-baseline-2026-09-20.json +52 -0
  1190. package/core/dev/jev-eval/reports/resilience-2026-09-20.json +520 -0
  1191. package/core/dev/jev-eval/reports/rules-baseline.json +197 -0
  1192. package/core/dev/jev-eval/reports/synthetic-review.pending.json +357 -0
  1193. package/core/dev/jev-eval/resilience.mjs +71 -0
  1194. package/core/dev/jev-eval/review.mjs +78 -0
  1195. package/core/dev/jev-eval/schema.mjs +87 -0
  1196. package/core/dev/jev-eval/test/context.test.mjs +95 -0
  1197. package/core/dev/jev-eval/test/corpus.test.mjs +102 -0
  1198. package/core/dev/jev-eval/test/eval.test.mjs +146 -0
  1199. package/core/dev/jev-eval/test/muninn-baseline.test.mjs +71 -0
  1200. package/core/dev/jev-eval/test/resilience.test.mjs +72 -0
  1201. package/core/dev/jev-eval/test/review.test.mjs +61 -0
  1202. package/core/dev/pipeline/LOCK_STATE.json +4 -0
  1203. package/core/dev/pipeline/OPTIMIZATION_PROPOSALS.json +32 -0
  1204. package/core/dev/pipeline/PHASE3_PLANNING_SUMMARY.md +338 -0
  1205. package/core/dev/pipeline/PIPELINE_CONFIG.json +46 -0
  1206. package/core/dev/pipeline/PROGRESS.md +113 -0
  1207. package/core/dev/pipeline/PROGRESS_template.md +860 -0
  1208. package/core/dev/pipeline/QA_REPORT_F008.md +431 -0
  1209. package/core/dev/pipeline/QA_REPORT_LOCAL_CLAUDE_DIAGNOSIS.md +583 -0
  1210. package/core/dev/pipeline/README.md +210 -0
  1211. package/core/dev/pipeline/SELF_ENHANCEMENT_STATUS.json.bak +47 -0
  1212. package/core/dev/pipeline/TASK_QUEUE.json +192 -0
  1213. package/core/dev/pipeline/WORKFLOW_GUIDE.md +824 -0
  1214. package/core/dev/pipeline/archived/TASK_015_tauri_init.yaml +53 -0
  1215. package/core/dev/pipeline/archived/TASK_016_tauri_commands.yaml +54 -0
  1216. package/core/dev/pipeline/archived/TASK_017_rust_pty.yaml +54 -0
  1217. package/core/dev/pipeline/archived/TASK_018_tauri_bundle.yaml +53 -0
  1218. package/core/dev/pipeline/archived/TASK_019_release_workflow.yaml +56 -0
  1219. package/core/dev/pipeline/archived/TASK_020_update_ui.yaml +54 -0
  1220. package/core/dev/pipeline/archived/TASK_021_update_notification_ui.yaml +55 -0
  1221. package/core/dev/pipeline/archived/TASK_022_remove_node_pty.yaml +65 -0
  1222. package/core/dev/pipeline/archived/TASK_023_api_routes_migration.yaml +86 -0
  1223. package/core/dev/pipeline/archived/TASK_024_feature_id_system.yaml +51 -0
  1224. package/core/dev/pipeline/archived/TASK_025_executable_acceptance.yaml +66 -0
  1225. package/core/dev/pipeline/archived/TASK_026_spec_versioning.yaml +56 -0
  1226. package/core/dev/pipeline/archived/TASK_027_drift_detection.yaml +60 -0
  1227. package/core/dev/pipeline/archived/TASK_028_tauri_pty_manager.yaml +60 -0
  1228. package/core/dev/pipeline/archived/TASK_029_tauri_pty_commands.yaml +62 -0
  1229. package/core/dev/pipeline/archived/TASK_030_frontend_session_adapter.yaml +54 -0
  1230. package/core/dev/pipeline/archived/TASK_031_terminal_tauri_events.yaml +56 -0
  1231. package/core/dev/pipeline/archived/TASK_041_scheduler_data_models.yaml +54 -0
  1232. package/core/dev/pipeline/archived/TASK_042_path_lock_manager.yaml +53 -0
  1233. package/core/dev/pipeline/archived/TASK_043_process_manager.yaml +57 -0
  1234. package/core/dev/pipeline/archived/TASK_044_git_integration.yaml +85 -0
  1235. package/core/dev/pipeline/archived/TASK_045_task_queue_manager.yaml +54 -0
  1236. package/core/dev/pipeline/archived/TASK_046_scheduler_dispatcher.yaml +60 -0
  1237. package/core/dev/pipeline/archived/TASK_047_tauri_scheduler_commands.yaml +55 -0
  1238. package/core/dev/pipeline/archived/TASK_048_realtime_status_push.yaml +92 -0
  1239. package/core/dev/pipeline/archived/TASK_049_frontend_scheduler_integration.yaml +58 -0
  1240. package/core/dev/pipeline/archived/TASK_050_error_recovery.yaml +56 -0
  1241. package/core/dev/pipeline/archived/TASK_051_optimization_proposals_backend.yaml +53 -0
  1242. package/core/dev/pipeline/archived/TASK_052_optimization_proposals_ui.yaml +58 -0
  1243. package/core/dev/pipeline/archived/TASK_053_optimization_proposals_diff_view.yaml +54 -0
  1244. package/core/dev/pipeline/archived/TASK_054_multi_project_scheduler_state.yaml +76 -0
  1245. package/core/dev/pipeline/archived/TASK_055_scheduler_api_project_scope.yaml +64 -0
  1246. package/core/dev/pipeline/archived/TASK_056_frontend_scheduler_project_scope.yaml +62 -0
  1247. package/core/dev/pipeline/archived/TASK_057_scheduler_module_structure.yaml +54 -0
  1248. package/core/dev/pipeline/archived/TASK_058_scheduler_models_extract.yaml +51 -0
  1249. package/core/dev/pipeline/archived/TASK_059_scheduler_core_extract.yaml +51 -0
  1250. package/core/dev/pipeline/archived/TASK_060_scheduler_commands_extract.yaml +51 -0
  1251. package/core/dev/pipeline/archived/TASK_061_scheduler_specialized_commands.yaml +53 -0
  1252. package/core/dev/pipeline/archived/TASK_062_process_manager_module_structure.yaml +56 -0
  1253. package/core/dev/pipeline/archived/TASK_063_process_manager_core_extract.yaml +56 -0
  1254. package/core/dev/pipeline/archived/TASK_064_recovery_module_structure.yaml +57 -0
  1255. package/core/dev/pipeline/archived/TASK_065_recovery_core_extract.yaml +56 -0
  1256. package/core/dev/pipeline/archived/TASK_066_self_enhancement_scheduler_models.yaml +60 -0
  1257. package/core/dev/pipeline/archived/TASK_067_agents_section_quick_actions.yaml +53 -0
  1258. package/core/dev/pipeline/archived/TASK_067_self_enhancement_scheduler_core.yaml +65 -0
  1259. package/core/dev/pipeline/archived/TASK_068_agent_workflow_rule_enhancement.yaml +46 -0
  1260. package/core/dev/pipeline/archived/TASK_068_self_enhancement_tauri_commands.yaml +61 -0
  1261. package/core/dev/pipeline/archived/TASK_069_agent_wizard_responsive.yaml +46 -0
  1262. package/core/dev/pipeline/archived/TASK_069_self_enhancement_ui.yaml +62 -0
  1263. package/core/dev/pipeline/archived/TASK_070_preview_panel_redesign.yaml +62 -0
  1264. package/core/dev/pipeline/archived/TASK_070_self_enhancement_integration.yaml +57 -0
  1265. package/core/dev/pipeline/archived/TASK_071_preview_panel_qa.yaml +98 -0
  1266. package/core/dev/pipeline/archived/TASK_071_single_agent_config.yaml +57 -0
  1267. package/core/dev/pipeline/archived/TASK_072_preview_modal_esc_fix.yaml +71 -0
  1268. package/core/dev/pipeline/archived/TASK_072_product_review_module.yaml +57 -0
  1269. package/core/dev/pipeline/archived/TASK_073_agents_page_component_refactor.yaml +68 -0
  1270. package/core/dev/pipeline/archived/TASK_073_rename_single_agent.yaml +64 -0
  1271. package/core/dev/pipeline/archived/TASK_074_preview_mode_ui_diagnosis.yaml +71 -0
  1272. package/core/dev/pipeline/archived/TASK_074_single_agent_ui_toggle.yaml +56 -0
  1273. package/core/dev/pipeline/archived/TASK_075_agents_page_component_refactor.yaml +69 -0
  1274. package/core/dev/pipeline/archived/TASK_075_single_agent_integration_test.yaml +75 -0
  1275. package/core/dev/pipeline/archived/TASK_076_preview_mode_ui_diagnosis.yaml +70 -0
  1276. package/core/dev/pipeline/archived/TASK_076_single_agent_continuous_mode.yaml +65 -0
  1277. package/core/dev/pipeline/archived/TASK_077_failure_directory_structure.yaml +51 -0
  1278. package/core/dev/pipeline/archived/TASK_077_single_agent_typescript_types.yaml +59 -0
  1279. package/core/dev/pipeline/archived/TASK_078_fail_001_agent_no_output.yaml +53 -0
  1280. package/core/dev/pipeline/archived/TASK_078_single_agent_ui_simplify.yaml +74 -0
  1281. package/core/dev/pipeline/archived/TASK_079_dashboard_rwd_responsive.yaml +63 -0
  1282. package/core/dev/pipeline/archived/TASK_079_fail_002_json_bom.yaml +56 -0
  1283. package/core/dev/pipeline/archived/TASK_080_fail_003_queue_pollution.yaml +56 -0
  1284. package/core/dev/pipeline/archived/TASK_080_http_server_module.yaml +55 -0
  1285. package/core/dev/pipeline/archived/TASK_081_failure_logging_tools.yaml +57 -0
  1286. package/core/dev/pipeline/archived/TASK_081_http_api_routes.yaml +62 -0
  1287. package/core/dev/pipeline/archived/TASK_082_frontend_api_adapter.yaml +51 -0
  1288. package/core/dev/pipeline/archived/TASK_082_integrate_failure_to_workflow.yaml +60 -0
  1289. package/core/dev/pipeline/archived/TASK_083_cleanup_nextjs_api.yaml +48 -0
  1290. package/core/dev/pipeline/archived/TASK_083_task_queue_cleanup.yaml +67 -0
  1291. package/core/dev/pipeline/archived/TASK_084_rust_dead_code_cleanup.yaml +66 -0
  1292. package/core/dev/pipeline/archived/TASK_084_scheduler_sync_logic_fix.yaml +68 -0
  1293. package/core/dev/pipeline/archived/TASK_085_http_api_web_mode_fixes.yaml +46 -0
  1294. package/core/dev/pipeline/archived/TASK_085_memory_consolidation_0204_0205.yaml +98 -0
  1295. package/core/dev/pipeline/archived/TASK_086_collapsible_preview_panel.yaml +161 -0
  1296. package/core/dev/pipeline/archived/TASK_086_web_mode_feature_parity.yaml +62 -0
  1297. package/core/dev/pipeline/archived/TASK_087_manual_memory_archival.yaml +163 -0
  1298. package/core/dev/pipeline/archived/TASK_087_mobile_http_control.yaml +68 -0
  1299. package/core/dev/pipeline/archived/TASK_088_fail_003_to_ppl_002_rule.yaml +63 -0
  1300. package/core/dev/pipeline/archived/TASK_088_mobile_http_qa.yaml +121 -0
  1301. package/core/dev/pipeline/archived/TASK_089_agent_collaboration_topic.yaml +60 -0
  1302. package/core/dev/pipeline/archived/TASK_089_web_mode_monitor_fix.yaml +58 -0
  1303. package/core/dev/pipeline/archived/TASK_090_cli_detection_fix.yaml +61 -0
  1304. package/core/dev/pipeline/archived/TASK_090_ui_ux_lessons_topic.yaml +63 -0
  1305. package/core/dev/pipeline/archived/TASK_091_expandable_card_design.yaml +56 -0
  1306. package/core/dev/pipeline/archived/TASK_091_move_agent_section_components.yaml +65 -0
  1307. package/core/dev/pipeline/archived/TASK_092_expandable_card_component.yaml +60 -0
  1308. package/core/dev/pipeline/archived/TASK_092_refactor_agent_create_wizard.yaml +84 -0
  1309. package/core/dev/pipeline/archived/TASK_093_taskcard_detail_integration.yaml +57 -0
  1310. package/core/dev/pipeline/archived/TASK_093_update_barrel_exports_test.yaml +84 -0
  1311. package/core/dev/pipeline/archived/TASK_094_ai_agent_generation_enhancement.yaml +115 -0
  1312. package/core/dev/pipeline/archived/TASK_094_proposalcard_detail_integration.yaml +55 -0
  1313. package/core/dev/pipeline/archived/TASK_095_preview_fixes.yaml +129 -0
  1314. package/core/dev/pipeline/archived/TASK_095_single_agent_task_selector.yaml +60 -0
  1315. package/core/dev/pipeline/archived/TASK_096_agents_page_ux_improvements.yaml +163 -0
  1316. package/core/dev/pipeline/archived/TASK_096_single_agent_status_sync.yaml +60 -0
  1317. package/core/dev/pipeline/archived/TASK_097_local_claude_error_logging.yaml +59 -0
  1318. package/core/dev/pipeline/archived/TASK_097_single_agent_monitor_events.yaml +59 -0
  1319. package/core/dev/pipeline/archived/TASK_098_product_manager_team_phase2.yaml +60 -0
  1320. package/core/dev/pipeline/archived/TASK_098_single_agent_refactor_test.yaml +58 -0
  1321. package/core/dev/pipeline/archived/TASK_099_backend_team_creation.yaml +258 -0
  1322. package/core/dev/pipeline/archived/TASK_100_frontend_team_creation.yaml +61 -0
  1323. package/core/dev/pipeline/archived/TASK_101_orchestrator_system.yaml +403 -0
  1324. package/core/dev/pipeline/archived/TASK_102_designer_sre_teams.yaml +90 -0
  1325. package/core/dev/pipeline/archived/TASK_103_integration_testing.yaml +86 -0
  1326. package/core/dev/pipeline/archived/TASK_128_integration_testing.yaml +83 -0
  1327. package/core/dev/pipeline/archived/TASK_134_cortex_v2_phase3_file_watcher.yaml +65 -0
  1328. package/core/dev/pipeline/archived/TASK_134_team_http_api.yaml +96 -0
  1329. package/core/dev/pipeline/archived/TASK_135_cortex_v2_phase3_git_monitor.yaml +63 -0
  1330. package/core/dev/pipeline/archived/TASK_136_cortex_v2_phase3_change_analyzer.yaml +69 -0
  1331. package/core/dev/pipeline/archived/TASK_137_cortex_v2_phase3_cache_invalidator.yaml +67 -0
  1332. package/core/dev/pipeline/archived/TASK_137_team_orchestrator_integration.yaml +93 -0
  1333. package/core/dev/pipeline/archived/TASK_138_cortex_v2_phase3_distributed_cache.yaml +68 -0
  1334. package/core/dev/pipeline/archived/TASK_138_matrix_folder_structure.yaml +61 -0
  1335. package/core/dev/pipeline/archived/TASK_139_cortex_v2_phase3_cache_prewarming.yaml +65 -0
  1336. package/core/dev/pipeline/archived/TASK_146_unified_documentation.yaml +141 -0
  1337. package/core/dev/pipeline/archived/TASK_147_pipeline_execution_rules.yaml +76 -0
  1338. package/core/dev/pipeline/archived/TASK_148_update_claude_md.yaml +77 -0
  1339. package/core/dev/pipeline/archived/TASK_149_fix_nextjs_mdx_serialization.yaml +63 -0
  1340. package/core/dev/pipeline/archived/TASK_149_update_team_docs.yaml +77 -0
  1341. package/core/dev/pipeline/archived/TASK_150_pipeline_workflow_guide.yaml +82 -0
  1342. package/core/dev/pipeline/archived/TASK_164_fix_smart_context_switch.yaml +49 -0
  1343. package/core/dev/pipeline/archived/TASK_165_ctags_symbol_index.yaml +53 -0
  1344. package/core/dev/pipeline/archived/TASK_166_symbol_search_mcp_tool.yaml +48 -0
  1345. package/core/dev/pipeline/archived/TASK_167_llm_module_summary.yaml +55 -0
  1346. package/core/dev/pipeline/archived/TASK_168_map_reduce_context.yaml +51 -0
  1347. package/core/dev/pipeline/archived/TASK_169_v2_integration_testing.yaml +52 -0
  1348. package/core/dev/pipeline/backups/archive_2026-02-04T22-07-22/TASK_QUEUE_backup.json +95 -0
  1349. package/core/dev/pipeline/docs/multi-agent-coordination.md +446 -0
  1350. package/core/dev/pipeline/docs/overview.md +406 -0
  1351. package/core/dev/pipeline/docs/task-management.md +412 -0
  1352. package/core/dev/pipeline/docs/workflows.md +32 -0
  1353. package/core/dev/pipeline/orchestrator/schemas/task_queue_schema.json +58 -0
  1354. package/core/dev/pipeline/orchestrator/schemas/task_schema.json +139 -0
  1355. package/core/dev/pipeline/plans/PLAN_task_cli_refactor.md +281 -0
  1356. package/core/dev/pipeline/tasks/.gitkeep +1 -0
  1357. package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +27 -0
  1358. package/core/dev/plans/CLI_FIRST_INSTALL_FLOW.md +128 -0
  1359. package/core/dev/plans/FORMATION_RETIREMENT_PLAN.md +313 -0
  1360. package/core/dev/plans/KUZU_REPLACEMENT_PLAN.md +126 -0
  1361. package/core/dev/schemas/PRODUCT_SPEC.example.yaml +382 -0
  1362. package/core/dev/schemas/PRODUCT_SPEC.schema.json +800 -0
  1363. package/core/dev/schemas/README.md +517 -0
  1364. package/core/dev/schemas/TASK.schema.json +226 -0
  1365. package/core/dev/schemas/dataflows_ground_truth.yaml +173 -0
  1366. package/core/dev/schemas/dataflows_spec.yaml +160 -0
  1367. package/core/dev/schemas/extends_ground_truth.yaml +66 -0
  1368. package/core/dev/schemas/extends_spec.yaml +121 -0
  1369. package/core/dev/schemas/implements_ground_truth.yaml +77 -0
  1370. package/core/dev/schemas/implements_spec.yaml +140 -0
  1371. package/core/dev/scripts/CRASH_DIAGNOSIS.md +47 -0
  1372. package/core/dev/scripts/README.md +142 -0
  1373. package/core/dev/scripts/RUN_ONCE.bat +40 -0
  1374. package/core/dev/scripts/START_DEV_AGENT.bat +63 -0
  1375. package/core/dev/scripts/START_MULTI_AGENT.bat +80 -0
  1376. package/core/dev/scripts/check-alaya-report-isolation.js +255 -0
  1377. package/core/dev/scripts/check-file-size.js +268 -0
  1378. package/core/dev/scripts/ci-feedback.js +251 -0
  1379. package/core/dev/scripts/clean-verify-targets.js +132 -0
  1380. package/core/dev/scripts/cleanup-queue.js +184 -0
  1381. package/core/dev/scripts/cleanup_queue.js +86 -0
  1382. package/core/dev/scripts/dev_agent_scheduler.ps1 +536 -0
  1383. package/core/dev/scripts/dispatch-stats.js +384 -0
  1384. package/core/dev/scripts/dispatch-stats.test.js +162 -0
  1385. package/core/dev/scripts/gc-agent-worktrees.js +461 -0
  1386. package/core/dev/scripts/gc-agent-worktrees.test.js +48 -0
  1387. package/core/dev/scripts/hooks/README.md +148 -0
  1388. package/core/dev/scripts/init_git.ps1 +396 -0
  1389. package/core/dev/scripts/init_git.sh +337 -0
  1390. package/core/dev/scripts/init_project.ps1 +851 -0
  1391. package/core/dev/scripts/init_project.sh +477 -0
  1392. package/core/dev/scripts/js-yaml-resolution.test.js +48 -0
  1393. package/core/dev/scripts/kenaz-session.js +354 -0
  1394. package/core/dev/scripts/kenaz-session.test.js +234 -0
  1395. package/core/dev/scripts/legacy/README.md +39 -0
  1396. package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +536 -0
  1397. package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +1978 -0
  1398. package/core/dev/scripts/matrix/CLI_README.md +214 -0
  1399. package/core/dev/scripts/matrix/README.md +310 -0
  1400. package/core/dev/scripts/matrix/package-lock.json +4266 -0
  1401. package/core/dev/scripts/matrix/package.json +55 -0
  1402. package/core/dev/scripts/matrix/src/abbreviations.ts +295 -0
  1403. package/core/dev/scripts/matrix/src/cli/commands/convert.ts +211 -0
  1404. package/core/dev/scripts/matrix/src/cli/commands/create.ts +95 -0
  1405. package/core/dev/scripts/matrix/src/cli/commands/delete.ts +102 -0
  1406. package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +140 -0
  1407. package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +173 -0
  1408. package/core/dev/scripts/matrix/src/cli/commands/query.ts +261 -0
  1409. package/core/dev/scripts/matrix/src/cli/commands/read.ts +77 -0
  1410. package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +168 -0
  1411. package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +126 -0
  1412. package/core/dev/scripts/matrix/src/cli/commands/update.ts +147 -0
  1413. package/core/dev/scripts/matrix/src/cli/commands/validate.ts +275 -0
  1414. package/core/dev/scripts/matrix/src/cli/index.ts +350 -0
  1415. package/core/dev/scripts/matrix/src/cli/utils/file-handler.ts +72 -0
  1416. package/core/dev/scripts/matrix/src/cli/utils/logger.ts +65 -0
  1417. package/core/dev/scripts/matrix/src/index.ts +62 -0
  1418. package/core/dev/scripts/matrix/src/indexer/tag-indexer.ts +165 -0
  1419. package/core/dev/scripts/matrix/src/parser.ts +281 -0
  1420. package/core/dev/scripts/matrix/src/serializer.ts +151 -0
  1421. package/core/dev/scripts/matrix/src/validator.ts +301 -0
  1422. package/core/dev/scripts/matrix/tests/abbreviations.test.ts +122 -0
  1423. package/core/dev/scripts/matrix/tests/cli.test.ts +177 -0
  1424. package/core/dev/scripts/matrix/tests/convert.test.ts +143 -0
  1425. package/core/dev/scripts/matrix/tests/parser.test.ts +203 -0
  1426. package/core/dev/scripts/matrix/tests/query.test.ts +85 -0
  1427. package/core/dev/scripts/matrix/tests/serializer.test.ts +197 -0
  1428. package/core/dev/scripts/matrix/tests/validate.test.ts +141 -0
  1429. package/core/dev/scripts/matrix/tests/validator.test.ts +167 -0
  1430. package/core/dev/scripts/matrix/tsconfig.json +20 -0
  1431. package/core/dev/scripts/matrix/types/index.d.ts +111 -0
  1432. package/core/dev/scripts/matrix/types/index.d.ts.map +1 -0
  1433. package/core/dev/scripts/matrix/types/index.js +8 -0
  1434. package/core/dev/scripts/matrix/types/index.js.map +1 -0
  1435. package/core/dev/scripts/matrix/types/index.ts +124 -0
  1436. package/core/dev/scripts/memory-guard-eval.js +330 -0
  1437. package/core/dev/scripts/memory-usage-report.js +152 -0
  1438. package/core/dev/scripts/migrate-task-dependencies.js +198 -0
  1439. package/core/dev/scripts/multi_agent_scheduler.ps1 +2021 -0
  1440. package/core/dev/scripts/multi_agent_scheduler.sh +1344 -0
  1441. package/core/dev/scripts/probe/ansuz-scaffold-ablation.js +579 -0
  1442. package/core/dev/scripts/probe/ansuz-scaffold-ablation.test.js +244 -0
  1443. package/core/dev/scripts/probe/hippocampus-concurrency.js +247 -0
  1444. package/core/dev/scripts/probe/hook-latency-probe.js +315 -0
  1445. package/core/dev/scripts/probe/hook-latency-probe.test.js +105 -0
  1446. package/core/dev/scripts/probe/prediction-signal-auc.js +483 -0
  1447. package/core/dev/scripts/probe/prediction-signal-auc.test.js +200 -0
  1448. package/core/dev/scripts/reset_tasks.js +99 -0
  1449. package/core/dev/scripts/run-rust-tests.js +207 -0
  1450. package/core/dev/scripts/run-rust-tests.test.js +154 -0
  1451. package/core/dev/scripts/run_once.sh +47 -0
  1452. package/core/dev/scripts/rust-verify-worktree.js +591 -0
  1453. package/core/dev/scripts/rust-verify-worktree.test.js +574 -0
  1454. package/core/dev/scripts/seh_probe.rs +26 -0
  1455. package/core/dev/scripts/setup_mcp.ps1 +192 -0
  1456. package/core/dev/scripts/setup_mcp.sh +159 -0
  1457. package/core/dev/scripts/setup_rag.ps1 +304 -0
  1458. package/core/dev/scripts/setup_rag.sh +230 -0
  1459. package/core/dev/scripts/start_dev_agent.sh +137 -0
  1460. package/core/dev/scripts/start_multi_agent.sh +41 -0
  1461. package/core/dev/scripts/sync_task_queue.ps1 +505 -0
  1462. package/core/dev/scripts/sync_task_queue.sh +392 -0
  1463. package/core/dev/scripts/task1961/RUNBOOK.md +300 -0
  1464. package/core/dev/scripts/task1961/fixtures/never-listens.server.js +54 -0
  1465. package/core/dev/scripts/task1961/fixtures/slow-serve.server.js +134 -0
  1466. package/core/dev/scripts/task1961/run-fixture.js +659 -0
  1467. package/core/dev/scripts/task1961/selftest.js +247 -0
  1468. package/core/dev/scripts/test-pty-ws-tunnel.js +229 -0
  1469. package/core/dev/scripts/validate_pipeline.js +197 -0
  1470. package/core/dev/scripts/verify-isbar-capture.js +100 -0
  1471. package/core/dev/scripts/verify-target-dir.js +69 -0
  1472. package/core/dev/scripts/verify-task-1839.js +141 -0
  1473. package/core/dev/specs/agent-connect/PROTOCOL.md +177 -0
  1474. package/core/dev/specs/agent-connect/SDK_GUIDE.md +915 -0
  1475. package/core/dev/specs/agent-connect/examples/minimal-site/README.md +137 -0
  1476. package/core/dev/specs/agent-connect/examples/minimal-site/package.json +12 -0
  1477. package/core/dev/specs/agent-connect/examples/minimal-site/public/index.html +116 -0
  1478. package/core/dev/specs/agent-connect/examples/minimal-site/public/install-redirect.js +73 -0
  1479. package/core/dev/specs/agent-connect/examples/minimal-site/server.js +516 -0
  1480. package/core/dev/specs/agent-connect/examples/minimal-site/test/smoke.test.mjs +263 -0
  1481. package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-empty-prompt-no-first-turn.md +77 -0
  1482. package/core/dev/specs/agent-connect/history/DEFECT_REPORT_kenaz-agent-hub_2026-09-09_v0.4-prompt-mojibake.md +90 -0
  1483. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-07.md +61 -0
  1484. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-08_relay-v1-conformance.md +76 -0
  1485. package/core/dev/specs/agent-connect/history/FEATURE_REQUEST_kenaz-agent-hub_2026-09-09_v0.4-session-channel.md +87 -0
  1486. package/core/dev/specs/agent-connect/history/FLOWPIX_REPLY_agent-hub_2026-09-08_relay-v1-answers.md +68 -0
  1487. package/core/dev/specs/agent-connect/history/FLOWPIX_bridge_CONTRACT.md +642 -0
  1488. package/core/dev/specs/agent-connect/history/FLOWPIX_spikes_relay_spike_relay.mjs +244 -0
  1489. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-07.md +77 -0
  1490. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_direction-change-v0.3.md +44 -0
  1491. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-answers-ack.md +37 -0
  1492. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-08_relay-v1-conformance.md +56 -0
  1493. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_annotations-install-coldstart.md +44 -0
  1494. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_empty-prompt-first-turn.md +56 -0
  1495. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_prompt-mojibake-fixed.md +48 -0
  1496. package/core/dev/specs/agent-connect/history/KENAZ_RESPONSE_agent-hub_2026-09-09_session-channel.md +57 -0
  1497. package/core/dev/specs/agent-connect/history/PROTOCOL_v0.3_snapshot.md +379 -0
  1498. package/core/dev/specs/agent-connect/history/README.md +47 -0
  1499. package/core/dev/specs/peer/CODEX_INTERACTIVE_PUSH.md +65 -0
  1500. package/core/dev/specs/peer/CODEX_PEER_PULL_SPIKE.md +54 -0
  1501. package/core/dev/specs/peer/MODS_SPIKE.md +133 -0
  1502. package/core/dev/specs/peer/PER_PROJECT_ADDRESSING.md +143 -0
  1503. package/core/dev/specs/peer/SWARM_PROTOCOLS.md +256 -0
  1504. package/core/dev/specs/peer/codex-hook-shim-peer.test.js +101 -0
  1505. package/core/dev/specs/peer/codex-push-launcher.test.js +142 -0
  1506. package/core/dev/specs/peer/setup-codex-hooks.test.js +22 -0
  1507. package/core/dev/specs/peer-ansuz/DELIVERY_SPIKE.md +397 -0
  1508. package/core/dev/specs/peer-ansuz/DESIGN.md +109 -0
  1509. package/core/dev/specs/peer-ansuz/spike/claude_poke.js +129 -0
  1510. package/core/dev/specs/peer-ansuz/spike/claude_session_start_hook.js +37 -0
  1511. package/core/dev/specs/peer-ansuz/spike/claude_settings_hook.json +14 -0
  1512. package/core/dev/specs/peer-ansuz/spike/codex_appserver_client.js +105 -0
  1513. package/core/dev/specs/peer-ansuz/spike/codex_appserver_query.js +29 -0
  1514. package/core/dev/specs/peer-ansuz/spike/extract_timeline.js +26 -0
  1515. package/core/dev/specs/synapse/SYMBOL_IDENTITY.md +305 -0
  1516. package/core/dev/spikes/A4-cypher-varlen.md +176 -0
  1517. package/core/dev/spikes/bloat-rounds.sh +25 -0
  1518. package/core/dev/spikes/mods/clean-claude.js +9 -0
  1519. package/core/dev/spikes/mods/drive-probe.js +29 -0
  1520. package/core/dev/spikes/mods/e2e-peer.js +71 -0
  1521. package/core/dev/spikes/mods/evidence/e2e-peer-control.json +17 -0
  1522. package/core/dev/spikes/mods/evidence/e2e-peer-mod.json +17 -0
  1523. package/core/dev/spikes/mods/evidence/probe-006a6e65-d807-4bc1-b648-fd7d1edfe0b4.jsonl +4 -0
  1524. package/core/dev/spikes/mods/evidence/probe-cebdf1f7-f9c4-47a8-83cd-7c0786177404.jsonl +12 -0
  1525. package/core/dev/spikes/mods/evidence/probe-eb21147d-10ce-4c32-93ed-37ca37d88d5a.jsonl +11 -0
  1526. package/core/dev/spikes/mods/evidence/stream-cebdf1f7.jsonl +18 -0
  1527. package/core/dev/spikes/mods/kenaz-mod-probe/.claude-plugin/plugin.json +1 -0
  1528. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/hooks.json +1 -0
  1529. package/core/dev/spikes/mods/kenaz-mod-probe/hooks/register.ts +65 -0
  1530. package/core/dev/spikes/mods/kenaz-mod-probe/tsconfig.json +3 -0
  1531. package/core/k-cli/README.md +423 -0
  1532. package/core/k-cli/package.json +21 -0
  1533. package/core/k-cli/templates/k-cli.md +91 -0
  1534. package/core/k-cli/test/TEST_SPEC.md +134 -0
  1535. package/core/k-cli/test/run.sh +469 -0
  1536. package/core/plugins/kenaz/.claude-plugin/plugin.json +1 -0
  1537. package/core/plugins/kenaz/.mcp.json +5 -0
  1538. package/core/plugins/kenaz/INVENTORY.md +48 -0
  1539. package/core/plugins/kenaz/README.md +55 -0
  1540. package/core/plugins/kenaz/commands/Amelia.md +5 -0
  1541. package/core/plugins/kenaz/commands/Ansuz.md +38 -0
  1542. package/core/plugins/kenaz/commands/architect.md +24 -0
  1543. package/core/plugins/kenaz/commands/incident.md +15 -0
  1544. package/core/plugins/kenaz/commands/kenaz.md +12 -0
  1545. package/core/plugins/kenaz/commands/review.md +14 -0
  1546. package/core/plugins/kenaz/commands/security.md +15 -0
  1547. package/core/plugins/kenaz/commands/spec.md +22 -0
  1548. package/core/plugins/kenaz/commands/strategy.md +141 -0
  1549. package/core/plugins/kenaz/commands//347/224/242/345/223/201.md +15 -0
  1550. package/core/plugins/kenaz/commands//350/250/255/350/250/210.md +14 -0
  1551. package/core/plugins/kenaz/commands//350/251/225/344/274/260.md +16 -0
  1552. package/core/plugins/kenaz/guidance.md +5 -0
  1553. package/core/plugins/kenaz/hooks/core-resolve.js +230 -0
  1554. package/core/plugins/kenaz/hooks/hooks.json +31 -0
  1555. package/core/plugins/kenaz/hooks/kenaz-hook.js +112 -0
  1556. package/core/plugins/kenaz/hooks/mode.js +39 -0
  1557. package/core/plugins/kenaz/scripts/kenaz-mode.js +46 -0
  1558. package/core/plugins/kenaz/scripts/kenaz.test.js +123 -0
  1559. package/core/plugins/kenaz/scripts/sync.js +45 -0
  1560. package/core/plugins/kenaz/scripts/ygg.js +157 -0
  1561. package/core/plugins/kenaz/skills/adapt/SKILL.md +199 -0
  1562. package/core/plugins/kenaz/skills/animate/SKILL.md +190 -0
  1563. package/core/plugins/kenaz/skills/architect_agent/SKILL.md +408 -0
  1564. package/core/plugins/kenaz/skills/assessment_agent/SKILL.md +289 -0
  1565. package/core/plugins/kenaz/skills/audit/SKILL.md +129 -0
  1566. package/core/plugins/kenaz/skills/backend_agent/SKILL.md +407 -0
  1567. package/core/plugins/kenaz/skills/backend_engineer/SKILL.md +788 -0
  1568. package/core/plugins/kenaz/skills/bolder/SKILL.md +132 -0
  1569. package/core/plugins/kenaz/skills/clarify/SKILL.md +180 -0
  1570. package/core/plugins/kenaz/skills/code_reviewer/SKILL.md +305 -0
  1571. package/core/plugins/kenaz/skills/code_reviewer/patterns.yaml +85 -0
  1572. package/core/plugins/kenaz/skills/colorize/SKILL.md +158 -0
  1573. package/core/plugins/kenaz/skills/critique/SKILL.md +118 -0
  1574. package/core/plugins/kenaz/skills/delight/SKILL.md +317 -0
  1575. package/core/plugins/kenaz/skills/designer/SKILL.md +845 -0
  1576. package/core/plugins/kenaz/skills/dev_agent/SKILL.md +503 -0
  1577. package/core/plugins/kenaz/skills/developer/SKILL.md +792 -0
  1578. package/core/plugins/kenaz/skills/distill/SKILL.md +137 -0
  1579. package/core/plugins/kenaz/skills/extract/SKILL.md +95 -0
  1580. package/core/plugins/kenaz/skills/feature_agent/SKILL.md +303 -0
  1581. package/core/plugins/kenaz/skills/frontend-design/SKILL.md +127 -0
  1582. package/core/plugins/kenaz/skills/frontend-design/reference/color-and-contrast.md +132 -0
  1583. package/core/plugins/kenaz/skills/frontend-design/reference/interaction-design.md +123 -0
  1584. package/core/plugins/kenaz/skills/frontend-design/reference/motion-design.md +99 -0
  1585. package/core/plugins/kenaz/skills/frontend-design/reference/responsive-design.md +114 -0
  1586. package/core/plugins/kenaz/skills/frontend-design/reference/spatial-design.md +100 -0
  1587. package/core/plugins/kenaz/skills/frontend-design/reference/typography.md +131 -0
  1588. package/core/plugins/kenaz/skills/frontend-design/reference/ux-writing.md +107 -0
  1589. package/core/plugins/kenaz/skills/frontend_agent/SKILL.md +327 -0
  1590. package/core/plugins/kenaz/skills/harden/SKILL.md +358 -0
  1591. package/core/plugins/kenaz/skills/incident_response/SKILL.md +315 -0
  1592. package/core/plugins/kenaz/skills/normalize/SKILL.md +67 -0
  1593. package/core/plugins/kenaz/skills/onboard/SKILL.md +243 -0
  1594. package/core/plugins/kenaz/skills/optimize/SKILL.md +269 -0
  1595. package/core/plugins/kenaz/skills/polish/SKILL.md +202 -0
  1596. package/core/plugins/kenaz/skills/product_manager/SKILL.md +1091 -0
  1597. package/core/plugins/kenaz/skills/qa_engineer/SKILL.md +1269 -0
  1598. package/core/plugins/kenaz/skills/quieter/SKILL.md +118 -0
  1599. package/core/plugins/kenaz/skills/security_agent/SKILL.md +312 -0
  1600. package/core/plugins/kenaz/skills/spec_optimizer/SKILL.md +299 -0
  1601. package/core/plugins/kenaz/skills/sre_agent/SKILL.md +1347 -0
  1602. package/core/plugins/kenaz/skills/ui-ux-pro-max/SKILL.md +377 -0
  1603. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/charts.csv +26 -0
  1604. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/colors.csv +97 -0
  1605. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/icons.csv +101 -0
  1606. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/landing.csv +31 -0
  1607. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/products.csv +97 -0
  1608. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  1609. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  1610. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  1611. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  1612. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  1613. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  1614. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  1615. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  1616. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  1617. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  1618. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  1619. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  1620. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  1621. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  1622. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/styles.csv +68 -0
  1623. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/typography.csv +58 -0
  1624. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  1625. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  1626. package/core/plugins/kenaz/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  1627. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/core.py +253 -0
  1628. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  1629. package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/search.py +106 -0
  1630. package/core/plugins/kenaz-peer/.claude-plugin/plugin.json +1 -0
  1631. package/core/plugins/kenaz-peer/hooks/hooks.json +1 -0
  1632. package/core/plugins/kenaz-peer/hooks/register.test.ts +62 -0
  1633. package/core/plugins/kenaz-peer/hooks/register.ts +146 -0
  1634. package/core/plugins/kenaz-peer/tsconfig.json +3 -0
  1635. package/lib/cli.js +251 -0
  1636. package/lib/cli.test.js +59 -0
  1637. package/lib/dashboard.js +80 -0
  1638. package/lib/dashboard.test.js +59 -0
  1639. package/package.json +28 -4
  1640. package/vendor/install-kenaz-cli.js +268 -0
  1641. package/README.md +0 -3
@@ -0,0 +1,1020 @@
1
+ /**
2
+ * Formation Utils
3
+ * 共用工具函數
4
+ */
5
+
6
+ const { execSync, spawnSync } = require('child_process');
7
+ const path = require('path');
8
+ const fs = require('fs');
9
+ const crypto = require('crypto');
10
+
11
+ // 路徑常數
12
+ const ROOT = path.resolve(__dirname, '..', '..');
13
+ const FORMATION_DIR = path.resolve(__dirname, '..');
14
+ const COLLABORATION_API = path.join(ROOT, '.collaboration', 'core', 'task-api.js');
15
+
16
+ // Legacy constant — maintained for backward compatibility
17
+ const LOG_DIR = path.join(FORMATION_DIR, 'logs');
18
+
19
+ // ── TASK_2030: node_modules provisioning for Formation/cross-project worktrees ──
20
+ // TASK_1844 built junction/symlink node_modules provisioning (linkNodeModules)
21
+ // and the matching pre-remove guard (unlinkNodeModulesLinks) into the Agent-tool
22
+ // WorktreeCreate hook (.claude/hooks/worktree-create.js) ONLY. Formation unit
23
+ // worktrees and dispatch.js's cross-project target_repo_worktree both go through
24
+ // utils.createWorktree/removeWorktree below, which never called either helper —
25
+ // measured result: those worktrees get ZERO node_modules, and (worse) any
26
+ // hand-built junction an agent adds is unprotected against the TASK_1844
27
+ // traversal hazard (git worktree remove --force on Windows recurses THROUGH a
28
+ // junction and empties the MAIN checkout's node_modules).
29
+ // Fix: require the hook's exports lazily (GEN-008: path resolved from ROOT, not
30
+ // hard-coded) and reuse them here — never copy the implementation. Requiring the
31
+ // hook as a library is safe: require.main here is the caller's entry module
32
+ // (headless.js/formations.js/a test file), never `undefined` and never the hook
33
+ // module itself, so the hook's `require.main === undefined` WorktreeCreate-mode
34
+ // branch never fires (see worktree-create.js's own entry-dispatch comment).
35
+ let _wtCreateHook = undefined;
36
+ function _loadWorktreeCreateHook() {
37
+ if (_wtCreateHook !== undefined) return _wtCreateHook;
38
+ try {
39
+ _wtCreateHook = require(path.join(ROOT, '.claude', 'hooks', 'worktree-create.js'));
40
+ } catch {
41
+ _wtCreateHook = null; // missing/broken hook file -> degrade to no linking, never crash dispatch
42
+ }
43
+ return _wtCreateHook;
44
+ }
45
+
46
+ /**
47
+ * Best-effort: link the main checkout's node_modules into `worktreePath`
48
+ * (see .claude/hooks/worktree-create.js linkNodeModules). Never throws —
49
+ * a bare worktree beats a failed dispatch.
50
+ */
51
+ function linkNodeModulesBestEffort(projectRoot, worktreePath) {
52
+ const hook = _loadWorktreeCreateHook();
53
+ if (!hook || typeof hook.linkNodeModules !== 'function') return;
54
+ try { hook.linkNodeModules(projectRoot, worktreePath); }
55
+ catch (e) { console.warn(` ⚠️ node_modules linking failed: ${(e && e.message) || 'unknown'}`); }
56
+ }
57
+
58
+ /**
59
+ * Best-effort: drop node_modules junctions/symlinks inside `worktreePath`
60
+ * BEFORE any `git worktree remove` (see .claude/hooks/worktree-create.js
61
+ * unlinkNodeModulesLinks). MANDATORY ahead of `git worktree remove --force` —
62
+ * Git for Windows recurses through a junction on removal and empties the link
63
+ * target (the main checkout's node_modules). Never throws.
64
+ */
65
+ function unlinkNodeModulesBestEffort(worktreePath) {
66
+ const hook = _loadWorktreeCreateHook();
67
+ if (!hook || typeof hook.unlinkNodeModulesLinks !== 'function') return;
68
+ try { hook.unlinkNodeModulesLinks(worktreePath); }
69
+ catch (e) { console.warn(` ⚠️ node_modules unlink failed: ${(e && e.message) || 'unknown'}`); }
70
+ }
71
+
72
+ /**
73
+ * Get the log directory for a given project.
74
+ * All projects (including KenazAI core) use .kenaz/logs/ when available.
75
+ * This eliminates the core vs sub-project distinction for path selection.
76
+ *
77
+ * @param {string} [projectPath] - Absolute path to project root
78
+ * @returns {string} Absolute path to log directory
79
+ */
80
+ function getLogDir(projectPath) {
81
+ if (!projectPath) return LOG_DIR;
82
+
83
+ // .kenaz/logs/ takes priority for ALL projects (core included)
84
+ const kenazLogsDir = path.join(projectPath, '.kenaz', 'logs');
85
+ if (fs.existsSync(kenazLogsDir)) return kenazLogsDir;
86
+
87
+ // Fallback: default LOG_DIR
88
+ return LOG_DIR;
89
+ }
90
+
91
+ function generateSessionId() {
92
+ const injected = process.env.KENAZ_SESSION_ID?.trim();
93
+ if (injected) return injected;
94
+ const now = new Date();
95
+ const ts = now.toISOString().replace(/[-:T]/g, '').slice(0, 14);
96
+ const rand = crypto.randomBytes(2).toString('hex');
97
+ return `${ts.slice(0, 8)}-${ts.slice(8, 14)}-${rand}`;
98
+ }
99
+
100
+ let _gitBashCache = undefined;
101
+ function detectGitBash() {
102
+ if (_gitBashCache !== undefined) return _gitBashCache;
103
+ try {
104
+ const gitPaths = execSync('where git', { encoding: 'utf8', windowsHide: true }).split('\n').map(l => l.trim()).filter(Boolean);
105
+ for (const gitPath of gitPaths) {
106
+ // 嘗試從每個 git.exe 路徑推導 bash.exe
107
+ // git.exe 可能在 cmd/git.exe 或 mingw64/bin/git.exe
108
+ // bash.exe 固定在 Git/bin/bash.exe
109
+ let dir = path.dirname(gitPath);
110
+ // 往上找到包含 bin/bash.exe 的 Git 根目錄
111
+ for (let i = 0; i < 4; i++) {
112
+ const bashPath = path.join(dir, 'bin', 'bash.exe');
113
+ if (fs.existsSync(bashPath)) { _gitBashCache = bashPath; return _gitBashCache; }
114
+ dir = path.dirname(dir);
115
+ }
116
+ }
117
+ } catch (e) {}
118
+
119
+ const fallbacks = [
120
+ 'C:\\Program Files\\Git\\bin\\bash.exe',
121
+ 'C:\\Program Files (x86)\\Git\\bin\\bash.exe',
122
+ 'D:\\Program Files\\Git\\bin\\bash.exe'
123
+ ];
124
+ for (const p of fallbacks) {
125
+ if (fs.existsSync(p)) { _gitBashCache = p; return _gitBashCache; }
126
+ }
127
+ _gitBashCache = null;
128
+ return null;
129
+ }
130
+
131
+ /**
132
+ * 偵測 claude 可執行檔路徑
133
+ * 優先順序:where/which → 獨立安裝(~/.claude/local/) → fallback
134
+ * 結果 memoize — 每個進程只呼叫一次 where claude
135
+ */
136
+ let _claudeCmdCache = null;
137
+ /**
138
+ * Choose the claude binary from `where claude` output (PATH order). The first
139
+ * hit is what the user's terminal runs. An npm shim (claude / claude.cmd) maps
140
+ * to the package's native bin/claude.exe, so no cmd.exe is spawned. The old
141
+ * rule "first .exe anywhere in the list" picked a stale WinGet install
142
+ * (2.1.248) over the npm one the user had updated (2.1.288), so every
143
+ * formation dispatch ran an older CLI than the terminal.
144
+ * @param {string[]} wherePaths `where claude` lines, in PATH order
145
+ * @param {(p: string) => boolean} exists
146
+ * @returns {string}
147
+ */
148
+ function pickClaudeFromWhere(wherePaths, exists) {
149
+ for (const p of wherePaths) {
150
+ if (/\.exe$/i.test(p)) return p;
151
+ const nativeExe = path.join(path.dirname(p), 'node_modules', '@anthropic-ai', 'claude-code', 'bin', 'claude.exe');
152
+ if (exists(nativeExe)) return nativeExe;
153
+ if (/\.cmd$/i.test(p)) return p;
154
+ }
155
+ return wherePaths.find(p => /\.exe$/i.test(p)) || wherePaths[0];
156
+ }
157
+
158
+ function detectClaudeCmd() {
159
+ if (_claudeCmdCache) return _claudeCmdCache;
160
+ if (process.platform !== 'win32') { _claudeCmdCache = 'claude'; return _claudeCmdCache; }
161
+
162
+ // 1. 嘗試 where claude(npm 安裝的 claude.cmd 或 PATH 中的 claude.exe)
163
+ // windowsHide:true 防止 cmd.exe 視窗閃現
164
+ try {
165
+ const result = execSync('where claude', { encoding: 'utf8', timeout: 5000, windowsHide: true })
166
+ .split('\n').map(l => l.trim()).filter(Boolean);
167
+ if (result.length > 0) {
168
+ _claudeCmdCache = pickClaudeFromWhere(result, fs.existsSync);
169
+ return _claudeCmdCache;
170
+ }
171
+ } catch (e) {}
172
+
173
+ // 2. 獨立安裝:~/.claude/local/claude.exe
174
+ const homedir = process.env.USERPROFILE || process.env.HOME || '';
175
+ const standalonePaths = [
176
+ path.join(homedir, '.claude', 'local', 'claude.exe'),
177
+ path.join(homedir, '.claude', 'bin', 'claude.exe'),
178
+ ];
179
+ for (const p of standalonePaths) {
180
+ if (fs.existsSync(p)) { _claudeCmdCache = p; return _claudeCmdCache; }
181
+ }
182
+
183
+ // 3. Fallback
184
+ _claudeCmdCache = 'claude.cmd';
185
+ return _claudeCmdCache;
186
+ }
187
+
188
+ function getClaudeEnv() {
189
+ const env = { ...process.env };
190
+
191
+ // 啟用 agent teams(與 Sunny 一致)
192
+ env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = '1';
193
+
194
+ // 移除 CLAUDECODE 避免 nested session 錯誤
195
+ delete env.CLAUDECODE;
196
+
197
+ // Windows: 設定 git-bash 路徑
198
+ if (process.platform === 'win32' && !env.CLAUDE_CODE_GIT_BASH_PATH) {
199
+ const gitBash = detectGitBash();
200
+ if (gitBash) env.CLAUDE_CODE_GIT_BASH_PATH = gitBash;
201
+ }
202
+ return env;
203
+ }
204
+
205
+ /**
206
+ * 確保子專案的 git 已就緒(有 .git/ + 至少一個 commit)
207
+ * 在 dispatch / headless 啟動 agent 前呼叫,避免 post-complete 時才補救。
208
+ *
209
+ * @param {string|null} projectPath - 子專案路徑(null = core,跳過)
210
+ */
211
+ function ensureGitReady(projectPath) {
212
+ if (!projectPath) return;
213
+
214
+ // GIT_CEILING_DIRECTORIES:防止 git 向上遍歷到 Core 專案
215
+ const env = { ...process.env };
216
+ const parentDir = path.dirname(projectPath);
217
+ env.GIT_CEILING_DIRECTORIES = parentDir;
218
+
219
+ const gitDir = path.join(projectPath, '.git');
220
+ const execOpts = { cwd: projectPath, encoding: 'utf8', timeout: 15000, env, windowsHide: true };
221
+
222
+ // 1. 沒有 .git/ → git init
223
+ if (!fs.existsSync(gitDir)) {
224
+ console.log(` 📦 Sub-project has no .git/ — initializing...`);
225
+ try {
226
+ execSync('git init --initial-branch=main', execOpts);
227
+ console.log(` ✅ git init completed`);
228
+ } catch {
229
+ try {
230
+ execSync('git init', execOpts);
231
+ execSync('git checkout -b main', execOpts);
232
+ console.log(` ✅ git init completed (legacy git)`);
233
+ } catch (e) {
234
+ console.error(` ❌ git init failed: ${e.message}`);
235
+ return;
236
+ }
237
+ }
238
+
239
+ // 建立基礎 .gitignore(如果不存在)
240
+ const gitignorePath = path.join(projectPath, '.gitignore');
241
+ if (!fs.existsSync(gitignorePath)) {
242
+ fs.writeFileSync(gitignorePath, [
243
+ 'node_modules/', '__pycache__/', '*.pyc', 'venv/',
244
+ '.env', '.env.local', '*.db', '.chroma/',
245
+ ].join('\n') + '\n');
246
+ console.log(` ✅ .gitignore created`);
247
+ }
248
+ }
249
+
250
+ // 2. 沒有 commit → initial commit
251
+ try {
252
+ execSync('git rev-parse HEAD', { ...execOpts, stdio: 'pipe', windowsHide: true });
253
+ } catch {
254
+ console.log(` 📦 Sub-project has no commits — creating initial commit...`);
255
+ try {
256
+ execSync('git add -A', execOpts);
257
+ // F3: Use -c flags to supply fallback identity when user has no global git config.
258
+ // This prevents "Author identity unknown" error that causes HEAD to not exist,
259
+ // which in turn makes git worktree add fail with "not a valid object name: HEAD".
260
+ execSync(
261
+ 'git -c user.name="Kenaz AI" -c user.email="kenaz-ai@local" commit -m "Initial commit: Kenaz AI project setup" --allow-empty',
262
+ execOpts
263
+ );
264
+ console.log(` ✅ Initial commit created`);
265
+ } catch (e) {
266
+ console.error(` ❌ Initial commit failed: ${e.message}`);
267
+ }
268
+ }
269
+ }
270
+
271
+ /**
272
+ * Rewrite stash commands so merge/recovery flows preserve untracked workspace
273
+ * artifacts written outside the task diff (audit reports, notes, design docs).
274
+ * We only remove the explicit include-untracked flag; tracked edits still stash.
275
+ *
276
+ * @param {string} command
277
+ * @returns {string}
278
+ */
279
+ function preserveUntrackedStashCommand(command) {
280
+ const raw = String(command || '');
281
+ if (!/\bstash\s+push\b/.test(raw)) return raw;
282
+ return raw
283
+ .replace(/\s--include-untracked(?=\s|$)/g, '')
284
+ .replace(/\s-u(?=\s|$)/g, '')
285
+ .replace(/\s{2,}/g, ' ')
286
+ .trim();
287
+ }
288
+
289
+ /**
290
+ * TASK_1775: Read worktree dispatch config for a project.
291
+ * Sources (later wins): defaults -> .kenaz/project.yaml -> env
292
+ * (FORMATION_WORKTREE_TIMEOUT_MS, FORMATION_USE_WORKTREE).
293
+ * project.yaml keys:
294
+ * use_worktree: false # top-level -- opt out of worktree isolation entirely
295
+ * worktree:
296
+ * timeout_ms: 120000 # git worktree add timeout (default 30000)
297
+ * @param {string|null} projectDir - Project root containing .kenaz/project.yaml
298
+ * useWorktreeSource records WHICH lever produced useWorktree, because the caller
299
+ * (resolveWorktreeDecision) reports it as diagnostics and folding env into the
300
+ * project-config label made an env-driven decision read as if project.yaml had
301
+ * said it — sending an operator to edit a file that already disagrees. The
302
+ * provenance is tracked here, at the single place each lever is read, rather
303
+ * than re-read by the caller (that would be the copy-the-check pattern).
304
+ * @returns {{ useWorktree: boolean, timeoutMs: number, useWorktreeSource: 'default'|'project-config'|'env' }}
305
+ */
306
+ function readWorktreeConfig(projectDir) {
307
+ const cfg = { useWorktree: true, timeoutMs: 30000, useWorktreeSource: 'default' };
308
+ try {
309
+ const yamlPath = path.join(projectDir || ROOT, '.kenaz', 'project.yaml');
310
+ if (fs.existsSync(yamlPath)) {
311
+ const content = fs.readFileSync(yamlPath, 'utf-8');
312
+ // TASK_2259: explicit true is also project-config provenance (boolean unchanged: default is true).
313
+ const uwMatch = content.match(/^use_worktree:\s*(true|false)\b/m);
314
+ if (uwMatch) {
315
+ cfg.useWorktree = uwMatch[1] === 'true';
316
+ cfg.useWorktreeSource = 'project-config';
317
+ }
318
+ const lines = content.split(/\r?\n/);
319
+ const wIdx = lines.findIndex(l => /^worktree:\s*$/.test(l));
320
+ if (wIdx !== -1) {
321
+ for (let i = wIdx + 1; i < lines.length; i++) {
322
+ if (lines[i].trim() === '') continue;
323
+ if (!/^[ \t]/.test(lines[i])) break; // dedent -- worktree block ended
324
+ const m = lines[i].match(/^[ \t]+timeout_ms:\s*(\d+)\s*$/);
325
+ if (m) { cfg.timeoutMs = parseInt(m[1], 10); break; }
326
+ }
327
+ }
328
+ }
329
+ } catch { /* unreadable project.yaml -- keep defaults */ }
330
+ const envMs = parseInt(process.env.FORMATION_WORKTREE_TIMEOUT_MS || '', 10);
331
+ if (Number.isFinite(envMs) && envMs > 0) cfg.timeoutMs = envMs;
332
+ // TASK_1833: dispatch-time worktree toggle -- env wins over project.yaml
333
+ // (mirrors FORMATION_WORKTREE_TIMEOUT_MS). Set by `dispatch.js --use-worktree=...`
334
+ // or by the operator for headless launches:
335
+ // FORMATION_USE_WORKTREE=false node .formation/tools/headless.js ...
336
+ const envUW = String(process.env.FORMATION_USE_WORKTREE || '').trim().toLowerCase();
337
+ if (envUW === 'false' || envUW === '0') { cfg.useWorktree = false; cfg.useWorktreeSource = 'env'; }
338
+ else if (envUW === 'true' || envUW === '1') { cfg.useWorktree = true; cfg.useWorktreeSource = 'env'; }
339
+ return cfg;
340
+ }
341
+
342
+ /**
343
+ * TASK_2176: pure parser for the top-level `verify_offline: <command>` key in
344
+ * project.yaml. Separated from the fs read (getVerifyOfflineCommand below) so
345
+ * verify-and-land.js's injectable-deps unit tests can exercise the exact same
346
+ * parsing logic through a fake fs without touching the real filesystem —
347
+ * single format authority shared by both consumers, not a second copy
348
+ * (same reasoning as dispatchLockStaleness above). A quoted value has its
349
+ * surrounding quotes stripped; the rest of the line is taken verbatim as the
350
+ * shell command (no inline-comment stripping — keep the command on one line,
351
+ * same convention as use_worktree/timeout_ms).
352
+ * @param {string} content - raw project.yaml text
353
+ * @returns {string|null} the command, or null when the key is absent/empty
354
+ */
355
+ function parseVerifyOfflineFromYaml(content) {
356
+ const m = /^verify_offline:\s*(.+?)\s*$/m.exec(String(content || ''));
357
+ if (!m) return null;
358
+ const raw = m[1].trim();
359
+ if (!raw) return null;
360
+ return raw.replace(/^["']|["']$/g, '');
361
+ }
362
+
363
+ /**
364
+ * TASK_2176: reads `verify_offline` from a project's .kenaz/project.yaml.
365
+ * Per-project opt-in for a SINGLE heavyweight, offline (no network/service
366
+ * dependency) verification command, for projects whose authoritative check
367
+ * needs one shared tool a worktree agent cannot run concurrently (Unity/
368
+ * Unreal editor domain reload, a mobile build chain). dispatch.js surfaces
369
+ * this to the worktree agent as a non-authoritative self-check (see
370
+ * resolveDispatchIsolation); verify-and-land.js runs it as the authoritative,
371
+ * serialized gate on the main tree before merge (see stepVerifyOffline).
372
+ * Projects without the key are unaffected — returns null, today's behaviour.
373
+ * @param {string|null} projectDir - project root containing .kenaz/project.yaml
374
+ * @returns {string|null}
375
+ */
376
+ function getVerifyOfflineCommand(projectDir) {
377
+ try {
378
+ const yamlPath = path.join(projectDir || ROOT, '.kenaz', 'project.yaml');
379
+ if (!fs.existsSync(yamlPath)) return null;
380
+ return parseVerifyOfflineFromYaml(fs.readFileSync(yamlPath, 'utf-8'));
381
+ } catch {
382
+ return null; // unreadable/corrupt project.yaml -- treat as "no key" (today's behaviour)
383
+ }
384
+ }
385
+
386
+ /**
387
+ * TASK_1833: THE worktree on/off decision for a dispatch. Single source of
388
+ * truth consumed by BOTH dispatch paths (formations.setupUnitWorktree on the
389
+ * Formation path, dispatch.js resolveDispatchIsolation on the sub-agent path).
390
+ * Do NOT copy this logic into a new call site -- the copy-the-check pattern has
391
+ * recurred twice already (rune_eb53038640e246dea32764f89b18bfa1); call it.
392
+ * Precedence: explicit dispatch-time override (CLI/MCP param) >
393
+ * env FORMATION_USE_WORKTREE > project .kenaz/project.yaml use_worktree > default true.
394
+ * NOTE the default: a project WITHOUT .kenaz/project.yaml defaults INTO worktree
395
+ * mode. Single-editor-bound projects (e.g. Unity: Library/, huge assets, one
396
+ * editor instance) must opt out via any of the three levers above.
397
+ * @param {string|null} projectDir - target project root
398
+ * @param {boolean|null} [override] - dispatch-time override (true/false); null = no override
399
+ * The three documented levers get three distinct source labels — a two-value
400
+ * provenance field for a three-lever decision misattributed every env override
401
+ * to project.yaml (measured 2026-07-31: project.yaml said false,
402
+ * FORMATION_USE_WORKTREE=true won, and source still read 'project-config').
403
+ * 'default' means no lever fired and the project simply inherited worktree mode,
404
+ * which is the case Unity-style single-editor projects most need to SEE.
405
+ * @returns {{ useWorktree: boolean, source: 'dispatch-param'|'env'|'project-config'|'default' }}
406
+ */
407
+ function resolveWorktreeDecision(projectDir, override = null) {
408
+ if (override === true || override === false) {
409
+ return { useWorktree: override, source: 'dispatch-param' };
410
+ }
411
+ const cfg = readWorktreeConfig(projectDir);
412
+ return { useWorktree: cfg.useWorktree, source: cfg.useWorktreeSource };
413
+ }
414
+
415
+ /**
416
+ * TASK_1833: canonical dispatch-lock file path for a target project -- ONE
417
+ * naming scheme so Formation serial dispatches, sub-agent shared-tree
418
+ * dispatches, and forseti-verify L1 all serialize against the SAME lock.
419
+ * Formula is byte-compatible with the historical inline computation in
420
+ * formations.js setupUnitWorktree AND forseti-verify.js (line ~714) -- if you
421
+ * change it here, forseti-verify must move with it or the two stop excluding
422
+ * each other.
423
+ * @param {string|null} projectPath - target project root (null = core)
424
+ * @returns {string} absolute lock file path (lives in CORE .formation/)
425
+ */
426
+ function dispatchLockPath(projectPath) {
427
+ const projectKey = (projectPath || 'default').replace(/[\\/:]/g, '_').toLowerCase();
428
+ return path.join(ROOT, '.formation', `.dispatch-lock-${projectKey}`);
429
+ }
430
+
431
+ function _pidAlive(pid) {
432
+ if (!pid || pid <= 0) return false;
433
+ try { process.kill(pid, 0); return true; }
434
+ catch (e) { return e.code === 'EPERM'; }
435
+ }
436
+
437
+ // TASK_1838: single staleness threshold for .dispatch-lock-* files, shared by
438
+ // tryAcquireDispatchLock (break-on-acquire) and dispatch-registry
439
+ // cleanupStaleLocks (sweep at dispatch start). Do NOT reintroduce a second
440
+ // threshold: the 10min sweep threshold vs this 60min hold semantics was the
441
+ // TTL-authority split that made a live TASK_1833 serial lock deletable.
442
+ const DISPATCH_LOCK_STALE_MS = 3600000; // 60 minutes
443
+
444
+ /**
445
+ * TASK_1838: THE staleness verdict for a dispatch-lock holder. Consumed by
446
+ * BOTH tryAcquireDispatchLock and dispatch-registry.cleanupStaleLocks -- do
447
+ * not inline a second age/pid check at a new call site (copy-the-check has
448
+ * recurred four times; see Decorative Guard sigil).
449
+ * pid:null holders (TASK_1833 sub-agent serial locks -- the dispatch CLI exits
450
+ * right after emitting params, so its pid proves nothing about the agent's
451
+ * liveness) are NEVER pidDead; only >=60min staleness or explicit post-merge
452
+ * release clears them.
453
+ * @param {object|null} holder - parsed lock-file JSON (null/corrupt => stale)
454
+ * @returns {{ stale: boolean, pidDead: boolean, ageMs: number }}
455
+ */
456
+ function dispatchLockStaleness(holder) {
457
+ const ageMs = holder && holder.startedAt ? Date.now() - new Date(holder.startedAt).getTime() : Infinity;
458
+ const stale = !(ageMs < DISPATCH_LOCK_STALE_MS); // NaN/Infinity (corrupted/unreadable) => stale
459
+ const pidDead = !!(holder && holder.pid && !_pidAlive(holder.pid));
460
+ return { stale, pidDead, ageMs };
461
+ }
462
+
463
+ /**
464
+ * TASK_1833: single-attempt dispatch-lock acquisition shared by BOTH dispatch
465
+ * paths (formations.setupUnitWorktree serial loop + dispatch.js sub-agent
466
+ * serial_lock mode). Atomic create via wx flag; breaks stale (>60min),
467
+ * dead-pid, and corrupted-holder locks. Holders with pid:null (sub-agent
468
+ * locks -- the dispatch CLI exits immediately after emitting params, so its
469
+ * own pid proves nothing about the agent's liveness) are broken ONLY by
470
+ * staleness or explicit release (delete the lock file after merge).
471
+ * @param {string} lockFile - absolute lock file path (see dispatchLockPath)
472
+ * @param {object} meta - { sessionId, taskId, pid, holder? } -- startedAt is added here
473
+ * @returns {{ acquired: boolean, holder: object|null, broke?: object, brokeReason?: string, error?: Error }}
474
+ */
475
+ function tryAcquireDispatchLock(lockFile, meta) {
476
+ const write = () => fs.writeFileSync(lockFile, JSON.stringify({
477
+ ...meta,
478
+ startedAt: new Date().toISOString(),
479
+ }), { flag: 'wx' });
480
+ try { fs.mkdirSync(path.dirname(lockFile), { recursive: true }); } catch { /* exists */ }
481
+ try { write(); return { acquired: true, holder: null }; }
482
+ catch (e) {
483
+ if (e.code !== 'EEXIST') return { acquired: false, holder: null, error: e };
484
+ }
485
+ let holder = null;
486
+ try { holder = JSON.parse(fs.readFileSync(lockFile, 'utf8')); } catch { /* corrupted -- treated as stale below */ }
487
+ const { stale, pidDead } = dispatchLockStaleness(holder);
488
+ if (stale || pidDead) {
489
+ try { fs.unlinkSync(lockFile); } catch { /* racing breaker */ }
490
+ try {
491
+ write();
492
+ return { acquired: true, holder: null, broke: holder || {}, brokeReason: pidDead ? 'dead-holder' : 'stale' };
493
+ } catch { /* lost the re-acquire race -- report as held */ }
494
+ }
495
+ return { acquired: false, holder };
496
+ }
497
+
498
+ /**
499
+ * TASK_1775: Kill a spawned git process AND its children.
500
+ * On Windows, execSync/spawnSync timeout only closes pipes / kills the direct
501
+ * child; `git worktree add` checkout work can keep running in the background.
502
+ * taskkill /T /F takes the whole tree down by PID.
503
+ * @param {number|undefined} pid
504
+ */
505
+ function killGitProcessTree(pid) {
506
+ if (!pid) return;
507
+ try {
508
+ if (process.platform === 'win32') {
509
+ spawnSync('taskkill', ['/T', '/F', '/PID', String(pid)], {
510
+ windowsHide: true, timeout: 10000, stdio: 'ignore',
511
+ });
512
+ } else {
513
+ process.kill(pid, 'SIGKILL');
514
+ }
515
+ } catch { /* already dead -- nothing to kill */ }
516
+ // Wait for the process to actually die and release file handles (max 3s).
517
+ // taskkill returns before handles are released; cleaning up immediately
518
+ // races the dying checkout and rmSync fails EBUSY, leaving the branch
519
+ // "checked out" in a half-deleted worktree.
520
+ const deadline = Date.now() + 3000;
521
+ while (Date.now() < deadline) {
522
+ try { process.kill(pid, 0); } catch { return; /* ESRCH -- gone */ }
523
+ const w = Date.now() + 100; while (Date.now() < w) {}
524
+ }
525
+ }
526
+
527
+ /**
528
+ * TASK_1775: Delete a local branch ONLY if it has no unique commits vs baseRef.
529
+ * Never destroys a pre-existing user branch (or unmerged task work).
530
+ * @returns {boolean} true when the branch is gone (deleted or never existed)
531
+ */
532
+ function deleteBranchIfSafe(projectRoot, branchName, baseRef) {
533
+ const opts = {
534
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
535
+ stdio: ['pipe', 'pipe', 'pipe'],
536
+ };
537
+ try {
538
+ execSync(`git rev-parse --verify --quiet "refs/heads/${branchName}"`, opts);
539
+ } catch { return true; /* branch doesn't exist -- nothing to delete */ }
540
+ try {
541
+ const unique = execSync(`git rev-list --count "${baseRef}..${branchName}"`, opts).trim();
542
+ if (unique !== '0') {
543
+ console.warn(` ⚠️ Branch ${branchName} has ${unique} unique commit(s) vs ${baseRef} — NOT deleting`);
544
+ return false;
545
+ }
546
+ execSync(`git branch -D "${branchName}"`, opts);
547
+ return true;
548
+ } catch { return false; /* verification/delete failed -- leave the branch alone */ }
549
+ }
550
+
551
+ /**
552
+ * TASK_2175: is `worktreePath` currently a REGISTERED git worktree of
553
+ * `projectRoot` (i.e. `git worktree list` knows about it right now)?
554
+ * This is the one signal that actually distinguishes "a live worktree
555
+ * something else may depend on" from "an orphaned directory nothing has
556
+ * registered" — directory existence (`fs.existsSync`) cannot tell the two
557
+ * apart, which is what let cleanupFailedWorktreeAttempt wrongly treat a
558
+ * dirty/abandoned leftover the same as a concurrent sibling's live worktree
559
+ * (TASK_1610/1611 guard) and refuse to ever reclaim it.
560
+ * Fails safe: any error (git missing, not a repo, etc.) returns true so the
561
+ * caller's destructive path stays closed rather than opening on uncertainty.
562
+ */
563
+ function isRegisteredWorktree(projectRoot, worktreePath) {
564
+ try {
565
+ const out = execSync('git worktree list --porcelain', {
566
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
567
+ stdio: ['pipe', 'pipe', 'pipe'],
568
+ });
569
+ const targetKey = path.resolve(worktreePath);
570
+ const norm = (p) => process.platform === 'win32' ? p.toLowerCase() : p;
571
+ for (const line of out.split('\n')) {
572
+ if (!line.startsWith('worktree ')) continue;
573
+ const wt = path.resolve(line.slice('worktree '.length).trim());
574
+ if (norm(wt) === norm(targetKey)) return true;
575
+ }
576
+ return false;
577
+ } catch { return true; /* can't verify -- assume registered, stay conservative */ }
578
+ }
579
+
580
+ /**
581
+ * TASK_1775: Clean the residue of a failed `git worktree add` attempt so the
582
+ * next retry doesn't die on 'branch already exists' or a stale partial dir.
583
+ * Order matters: rm partial dir -> prune metadata (releases the branch
584
+ * checkout claim) -> delete branch (guarded).
585
+ */
586
+ function cleanupFailedWorktreeAttempt(projectRoot, worktreePath, branchName, baseRef, dirExistedBefore) {
587
+ // TASK_2175: `dirExistedBefore` alone used to gate this entirely ("only
588
+ // remove it when THIS attempt created it") — but that flag just means "did
589
+ // the path exist a moment ago", which is equally true for (a) a dirty
590
+ // leftover from an earlier, abandoned attempt at this SAME task_<id> path
591
+ // (ours to reclaim — nothing else uses this naming convention) and (b) a
592
+ // live sibling's worktree someone else may be mid-task on (never touch).
593
+ // `dirExistedBefore` cannot tell those apart; whether git itself still
594
+ // REGISTERS the path as a worktree can: an unregistered directory cannot be
595
+ // anyone's live worktree (git doesn't think anything is checked out there),
596
+ // so it is always safe to reclaim regardless of dirExistedBefore. A
597
+ // registered worktree is left untouched either way (TASK_1610/1611 guard).
598
+ const registered = isRegisteredWorktree(projectRoot, worktreePath);
599
+ // A killed-mid-add registration is LOCKED (.git/worktrees/<name>/locked) and
600
+ // git worktree prune NEVER prunes locked entries even with the dir gone --
601
+ // the branch stays "used by worktree". Unlock first; safe unconditionally
602
+ // since this exact path/branch naming convention (task_<id> / task/<id>)
603
+ // is ours alone -- no foreign process locks a path we constructed.
604
+ try {
605
+ execSync(`git worktree unlock "${worktreePath}"`, {
606
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
607
+ stdio: ['pipe', 'pipe', 'pipe'],
608
+ });
609
+ } catch { /* not locked / not registered */ }
610
+ if (!registered && fs.existsSync(worktreePath)) {
611
+ removeWorktree(projectRoot, worktreePath);
612
+ for (let i = 0; i < 5 && fs.existsSync(worktreePath); i++) {
613
+ try { fs.rmSync(worktreePath, { recursive: true, force: true }); } catch {}
614
+ if (fs.existsSync(worktreePath)) { const w = Date.now() + 400; while (Date.now() < w) {} }
615
+ }
616
+ }
617
+ try {
618
+ execSync('git worktree prune', {
619
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
620
+ stdio: ['pipe', 'pipe', 'pipe'],
621
+ });
622
+ } catch { /* prune failure is non-fatal */ }
623
+ deleteBranchIfSafe(projectRoot, branchName, baseRef);
624
+ }
625
+
626
+ /**
627
+ * Create a git worktree at the given path with a new branch.
628
+ * Deletes a stale same-named branch first (guarded -- see deleteBranchIfSafe).
629
+ * Includes .git/index.lock detection and retry with exponential backoff for Windows
630
+ * parallel-load resilience (ETIMEDOUT from competing git processes).
631
+ * TASK_1775: on timeout the spawned git process tree is killed, leftover
632
+ * branch/partial dir are cleaned between attempts, and the timeout is
633
+ * configurable (FORMATION_WORKTREE_TIMEOUT_MS / project.yaml worktree.timeout_ms).
634
+ * @param {string} projectRoot - Root of the git repo
635
+ * @param {string} worktreePath - Absolute path for the new worktree directory
636
+ * @param {string} branchName - New branch name for this worktree
637
+ */
638
+ function createWorktree(projectRoot, worktreePath, branchName) {
639
+ const ts_start = Date.now();
640
+ const indexLock = path.join(projectRoot, '.git', 'index.lock');
641
+ const worktreeBranchCmd = 'git rev-parse --abbrev-ref HEAD';
642
+ const worktreeStatusCmd = 'git status --porcelain';
643
+ // TASK_1165: base from current branch HEAD, NOT origin/main.
644
+ // TASK_1180 verification: post-fix formation:feature dispatches TASK_1166..1172
645
+ // completed without reintroducing the stale-base worktree conflict pattern.
646
+ // origin/main may be 100+ commits behind the working branch (e.g. xyz951610)
647
+ // because we don't push feature work to main. Worktrees built from origin/main
648
+ // miss recent commits and produce massive rebase conflicts on completion.
649
+ // Detect current branch dynamically for cross-project safety.
650
+ let baseRef;
651
+ try {
652
+ baseRef = execSync('git rev-parse --abbrev-ref HEAD', {
653
+ cwd: projectRoot, encoding: 'utf8', timeout: 5000, windowsHide: true,
654
+ stdio: ['pipe', 'pipe', 'pipe']
655
+ }).trim() || 'HEAD';
656
+ } catch {
657
+ baseRef = 'HEAD';
658
+ }
659
+
660
+ // Wait for .git/index.lock to clear (Windows parallel git lock contention)
661
+ const waitForIndexLock = (maxMs) => {
662
+ const deadline = Date.now() + maxMs;
663
+ while (fs.existsSync(indexLock) && Date.now() < deadline) {
664
+ const w = Date.now() + 200; while (Date.now() < w) {}
665
+ }
666
+ if (fs.existsSync(indexLock)) {
667
+ console.warn(` ⚠️ .git/index.lock still held after ${maxMs}ms — proceeding anyway`);
668
+ }
669
+ };
670
+
671
+ // Wait for any existing lock before branch cleanup
672
+ waitForIndexLock(15000);
673
+
674
+ if (fs.existsSync(worktreePath)) {
675
+ try {
676
+ const existingBranch = execSync(worktreeBranchCmd, {
677
+ cwd: worktreePath, encoding: 'utf8', timeout: 10000, windowsHide: true,
678
+ stdio: ['pipe', 'pipe', 'pipe']
679
+ }).trim();
680
+ const existingStatus = execSync(worktreeStatusCmd, {
681
+ cwd: worktreePath, encoding: 'utf8', timeout: 10000, windowsHide: true,
682
+ stdio: ['pipe', 'pipe', 'pipe']
683
+ }).trim();
684
+ if (existingBranch === branchName && !existingStatus) {
685
+ const duration = Date.now() - ts_start;
686
+ console.log(` Reusing clean worktree: ${worktreePath} (${duration}ms)`);
687
+ // TASK_2030: idempotent -- linkNodeModules skips links that already exist.
688
+ linkNodeModulesBestEffort(projectRoot, worktreePath);
689
+ return;
690
+ }
691
+ } catch { /* existing path is not a reusable git worktree */ }
692
+ }
693
+
694
+ // TASK_1775: a previous process crashed/killed mid-add can leave a LOCKED
695
+ // registration (.git/worktrees/<name>/locked) claiming branchName; prune
696
+ // skips locked entries, so unlock first or the branch stays undeletable.
697
+ try {
698
+ execSync(`git worktree unlock "${worktreePath}"`, {
699
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
700
+ stdio: ['pipe', 'pipe', 'pipe'],
701
+ });
702
+ } catch { /* not locked / not registered */ }
703
+ try {
704
+ execSync('git worktree prune', {
705
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
706
+ stdio: ['pipe', 'pipe', 'pipe'],
707
+ });
708
+ } catch { /* prune failure is non-fatal */ }
709
+
710
+ // Clean up stale branch from a previous failed attempt.
711
+ // TASK_1775: guarded -- a branch with unique commits vs baseRef (unmerged
712
+ // work or a pre-existing user branch) is never force-deleted.
713
+ const branchDeleted = deleteBranchIfSafe(projectRoot, branchName, baseRef);
714
+
715
+ // TASK_2067: the branch survived the guard above (it has unique commits vs
716
+ // baseRef -- e.g. a cancelled cross-project task resumed: its worktree dir
717
+ // was removed but the branch with its committed work was correctly left
718
+ // alone) while the worktree PATH itself does not exist (checked above --
719
+ // if it existed we would have returned via the reuse-clean-worktree path).
720
+ // Without this, `git worktree add -b branchName` below dies on "a branch
721
+ // named '<branchName>' already exists" on every retry, and the caller
722
+ // (dispatch.js) degrades to serial_lock -- exactly the unserialized
723
+ // shared-tree risk this isolation path exists to prevent (field report
724
+ // ce1d12b6, TASK_1055). Attach the worktree to the EXISTING branch instead
725
+ // (no -b). Decision: never auto-merge baseRef into the reused branch --
726
+ // only report divergence -- so a resumed task's history is never rewritten
727
+ // without the operator seeing it. A branch genuinely checked out in another
728
+ // worktree still fails here (git surfaces "already checked out") and falls
729
+ // through to the normal create/retry loop below, whose existing error
730
+ // propagation is the correct outcome for that genuine failure.
731
+ if (!branchDeleted && !fs.existsSync(worktreePath)) {
732
+ const reuseTimeoutMs = readWorktreeConfig(projectRoot).timeoutMs;
733
+ const r = spawnSync('git', ['worktree', 'add', worktreePath, branchName], {
734
+ cwd: projectRoot, encoding: 'utf8', timeout: reuseTimeoutMs, windowsHide: true,
735
+ });
736
+ if (!r.error && r.status === 0) {
737
+ const duration = Date.now() - ts_start;
738
+ console.log(` ♻️ Reused existing branch '${branchName}' for worktree (${duration}ms)`);
739
+ let divergence = null;
740
+ try {
741
+ const counts = execSync(`git rev-list --left-right --count "${baseRef}...${branchName}"`, {
742
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
743
+ stdio: ['pipe', 'pipe', 'pipe'],
744
+ }).trim().split(/\s+/).map(Number);
745
+ divergence = { behind: counts[0] || 0, ahead: counts[1] || 0 };
746
+ if (divergence.behind > 0) {
747
+ console.warn(` ⚠️ Reused branch '${branchName}' is ${divergence.behind} commit(s) behind ${baseRef} (${divergence.ahead} ahead of it) -- NOT auto-merged; merge manually if needed.`);
748
+ }
749
+ } catch { /* best-effort divergence report only -- never fails the reuse */ }
750
+ linkNodeModulesBestEffort(projectRoot, worktreePath);
751
+ return { reusedBranch: true, divergence };
752
+ }
753
+ const errLines = (r.error ? r.error.message : (r.stderr || `git exited ${r.status}`))
754
+ .toString().trim().split('\n');
755
+ const errLine = errLines.find(l => l.includes('fatal:')) || errLines[0];
756
+ console.warn(` ⚠️ Could not attach worktree to existing branch '${branchName}' (${errLine}) — falling back to normal creation, which will surface this as a genuine failure.`);
757
+ }
758
+
759
+ // F1: Remove stale worktree directory if it exists and is empty (or only has a .git pointer file).
760
+ // git worktree add refuses to create a worktree into a pre-existing directory, even if empty.
761
+ if (fs.existsSync(worktreePath)) {
762
+ const entries = fs.readdirSync(worktreePath).filter(e => e !== '.git');
763
+ if (entries.length === 0) {
764
+ fs.rmSync(worktreePath, { recursive: true, force: true });
765
+ console.log(` 🗑️ Removed stale empty worktree directory: ${worktreePath}`);
766
+ } else {
767
+ console.warn(` ⚠️ Worktree directory exists and has files — skipping removal: ${worktreePath}`);
768
+ }
769
+ }
770
+
771
+ // Retry with exponential backoff: 3 retries at 2s, 4s, 8s
772
+ // TASK_1775: configurable timeout + orphan-git kill + per-attempt cleanup.
773
+ const timeoutMs = readWorktreeConfig(projectRoot).timeoutMs;
774
+ const retryDelays = [2000, 4000, 8000];
775
+ // TASK_2175: captured ONCE, before attempt 0 — NOT re-read every iteration.
776
+ // Bug this fixes: the old code re-ran `fs.existsSync(worktreePath)` inside
777
+ // the loop on every attempt, so if attempt 0's own cleanup left residue
778
+ // behind (a Windows file-lock stopping `removeWorktree`/`fs.rmSync` from
779
+ // fully clearing the dir — routine on this platform, see the retry/backoff
780
+ // scaffolding throughout this file), attempt 1 saw an "existing" dir and
781
+ // treated it as a pre-existing foreign worktree to leave alone, permanently
782
+ // poisoning cleanupFailedWorktreeAttempt for every remaining retry with the
783
+ // SAME "already exists" / "branch already exists" failure (measured,
784
+ // TASK_2175 repro: a single dirty leftover worktree dir makes all 4 attempts
785
+ // fail identically with zero progress). "Did this call start from a clean
786
+ // target" is decided once, from the state before we did anything.
787
+ const dirExistedBefore = fs.existsSync(worktreePath);
788
+ let lastErr;
789
+ for (let attempt = 0; attempt <= retryDelays.length; attempt++) {
790
+ if (attempt > 0) waitForIndexLock(10000);
791
+ // F2: Prune zombie .git/worktrees/ metadata before each attempt.
792
+ // If a previous worktree dir was deleted without `git worktree remove`, its metadata
793
+ // remains in .git/worktrees/ and causes "already checked out" errors on re-creation.
794
+ // git worktree prune is idempotent and fast (<100ms).
795
+ try {
796
+ execSync('git worktree prune', {
797
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
798
+ stdio: ['pipe', 'pipe', 'pipe']
799
+ });
800
+ } catch { /* prune failure is non-fatal */ }
801
+ // TASK_1165: no fetch needed — base from local current branch HEAD.
802
+ // Removed `git fetch origin main` block from TASK_1152 since baseRef is no
803
+ // longer origin/main. Local current branch is always up to date.
804
+ // TASK_1775: spawnSync (not execSync) so the child PID is available — on
805
+ // ETIMEDOUT Windows only closes the pipes while the orphan git keeps
806
+ // checking out in the background; we must taskkill the tree by PID.
807
+ const r = spawnSync('git', ['worktree', 'add', worktreePath, '-b', branchName, baseRef], {
808
+ cwd: projectRoot, encoding: 'utf8', timeout: timeoutMs, windowsHide: true,
809
+ });
810
+ if (!r.error && r.status === 0) {
811
+ const duration = Date.now() - ts_start;
812
+ console.log(` ⏱️ Worktree created in ${duration}ms (attempt ${attempt + 1}, timeout ${timeoutMs}ms)`);
813
+ // TASK_2030: provision node_modules so the dispatched agent doesn't hand-junction it.
814
+ linkNodeModulesBestEffort(projectRoot, worktreePath);
815
+ return;
816
+ }
817
+ const errLines = (r.error ? r.error.message : (r.stderr || `git exited ${r.status}`))
818
+ .toString().trim().split('\n');
819
+ const errLine = errLines.find(l => l.includes('fatal:')) || errLines[0];
820
+ lastErr = r.error || new Error(`git worktree add failed: ${errLine}`);
821
+ // Timeout / spawn error -> the git process tree may still be alive
822
+ if (r.error) killGitProcessTree(r.pid);
823
+ // Clean leftover branch + partial dir so the next attempt starts fresh
824
+ // instead of dying on 'branch already exists'.
825
+ cleanupFailedWorktreeAttempt(projectRoot, worktreePath, branchName, baseRef, dirExistedBefore);
826
+ if (attempt < retryDelays.length) {
827
+ const delay = retryDelays[attempt];
828
+ console.warn(` ⚠️ Worktree attempt ${attempt + 1} failed: ${errLine}`);
829
+ console.warn(` Retrying in ${delay / 1000}s...`);
830
+ const w = Date.now() + delay; while (Date.now() < w) {}
831
+ }
832
+ }
833
+
834
+ const duration = Date.now() - ts_start;
835
+ console.warn(` ❌ Worktree creation failed after ${retryDelays.length + 1} attempts (${duration}ms)`);
836
+ throw lastErr;
837
+ }
838
+
839
+ /**
840
+ * Remove a git worktree with retry logic (Windows PDB/lock contention).
841
+ * Falls back to `git worktree prune` on total failure.
842
+ * @param {string} projectRoot
843
+ * @param {string} worktreePath
844
+ * @param {number} [maxRetries=3]
845
+ * @returns {boolean} true if removed successfully
846
+ */
847
+ function removeWorktree(projectRoot, worktreePath, maxRetries = 3) {
848
+ // TASK_1844/TASK_2030: MUST run before any `git worktree remove` -- Git for
849
+ // Windows recurses through a node_modules junction/symlink on removal and
850
+ // empties the link target (the main checkout's node_modules).
851
+ unlinkNodeModulesBestEffort(worktreePath);
852
+ for (let i = 0; i < maxRetries; i++) {
853
+ try {
854
+ execSync(`git worktree remove --force "${worktreePath}"`, {
855
+ cwd: projectRoot, encoding: 'utf8', timeout: 30000, windowsHide: true,
856
+ stdio: ['pipe', 'pipe', 'pipe']
857
+ });
858
+ return true;
859
+ } catch {
860
+ if (i < maxRetries - 1) {
861
+ // Wait 1s before retry — Windows PDB lock typically releases within 1-2s
862
+ const wait = Date.now() + 1000;
863
+ while (Date.now() < wait) {}
864
+ }
865
+ }
866
+ }
867
+ // Last resort: prune stale .git/worktrees/ entries
868
+ try {
869
+ execSync('git worktree prune', {
870
+ cwd: projectRoot, encoding: 'utf8', timeout: 10000, windowsHide: true,
871
+ stdio: 'ignore'
872
+ });
873
+ } catch {}
874
+ return false;
875
+ }
876
+
877
+ /**
878
+ * Ensure `.formation/worktrees/` is listed in .gitignore.
879
+ * Prevents orphaned worktree files from appearing in `git status`.
880
+ * Idempotent — no-op if the entry already exists.
881
+ * @param {string} projectRoot
882
+ */
883
+ function ensureWorktreeDirIgnored(projectRoot) {
884
+ const gitignorePath = path.join(projectRoot, '.gitignore');
885
+ const worktreeLine = '.formation/worktrees/';
886
+ try {
887
+ const content = fs.existsSync(gitignorePath) ? fs.readFileSync(gitignorePath, 'utf8') : '';
888
+ if (!content.includes(worktreeLine)) {
889
+ fs.appendFileSync(gitignorePath, `\n# Formation worktrees (parallel agent isolation)\n${worktreeLine}\n`, 'utf8');
890
+ }
891
+ } catch { /* best-effort — non-fatal */ }
892
+ }
893
+
894
+ /**
895
+ * Read and parse .kenaz/dashboard-models.json for the given project.
896
+ * Returns null if the file is absent or unparseable.
897
+ * @param {string|null} projectPath
898
+ * @returns {object|null}
899
+ */
900
+ function readDashboardModels(projectPath) {
901
+ const modelsPath = path.join(projectPath || ROOT, '.kenaz', 'dashboard-models.json');
902
+ try {
903
+ if (!fs.existsSync(modelsPath)) return null;
904
+ return JSON.parse(fs.readFileSync(modelsPath, 'utf-8'));
905
+ } catch { return null; }
906
+ }
907
+
908
+ /**
909
+ * TASK_2249: candidate-chain loader — project file first, then core (ROOT);
910
+ * the FIRST parseable file wins and is returned whole, so no field is ever
911
+ * mixed across two dashboard-models.json files. Null when none parses.
912
+ * @param {string|null} projectPath
913
+ * @returns {object|null}
914
+ */
915
+ function loadDashboardModels(projectPath) {
916
+ const candidates = projectPath ? [projectPath, ROOT] : [ROOT];
917
+ for (const candidate of candidates) {
918
+ const parsed = readDashboardModels(candidate);
919
+ if (parsed) return parsed;
920
+ }
921
+ return null;
922
+ }
923
+
924
+ // TASK_1957: telemetry/daemon-noise paths that must never be swept into a task
925
+ // commit by a blanket `git add -A` run inside an isolated worktree (Formation
926
+ // unit worktree OR cross-project target_repo_worktree — dispatch.js). Root
927
+ // cause of esp32 TASK_82/83: the sub-project's .kenaz/ and .formation/ are
928
+ // tracked (only .kenaz/tasks + .kenaz/logs are gitignored), so `git add -A`
929
+ // staged canary session files, progress notes, daemon state, and dispatch
930
+ // telemetry into the task branch. Merging that branch into the sub-project's
931
+ // main then collided with main's own LIVE copies of those same paths
932
+ // ("local changes would be overwritten" / "untracked working tree files
933
+ // would be overwritten").
934
+ //
935
+ // This list runs CLIENT-SIDE, at staging time, before any commit exists —
936
+ // excluding here is strictly stronger than the post-merge unstage/revert
937
+ // defenses in post-complete.js (daemon-manifest.yaml + getDaemonPathsToUnstage
938
+ // + revertDaemonManagedFiles), which only clean up AFTER the noise is already
939
+ // staged/committed and only cover paths enumerated in that manifest. Kept
940
+ // deliberately coarse (whole directories, not the manifest's per-file list)
941
+ // since it has to be a short, readable pathspec embedded in a dispatch
942
+ // prompt's shell command line, not a manifest lookup.
943
+ // A task that legitimately needs to edit a file under one of these
944
+ // directories (e.g. daemon-manifest.yaml itself) must stage it explicitly
945
+ // (`git add <path>`) rather than relying on the blanket `-A` step.
946
+ const WORKTREE_COMMIT_EXCLUDE_PATHSPECS = [
947
+ ':!.kenaz/sessions',
948
+ ':!.kenaz/specialist',
949
+ ':!.formation/.dispatch-branch',
950
+ ':!.formation/analytics',
951
+ // Live channel heartbeat writer appends here continuously; swept into
952
+ // TASK_1977 and TASK_1979 commits before this exclusion was added.
953
+ ':!.kenaz/channel_heartbeats.jsonl',
954
+ ];
955
+
956
+ /**
957
+ * Args (without the leading `git `) for an `add -A` that stages everything
958
+ * EXCEPT the telemetry paths in WORKTREE_COMMIT_EXCLUDE_PATHSPECS, using
959
+ * git's pathspec-exclude magic (`add -A -- . ":!path"`). Use this form when
960
+ * invoking through a wrapper that already prepends `git ` (e.g. git-merge.js's
961
+ * `git(cmd, opts)`).
962
+ *
963
+ * Double quotes, not single quotes (GEN-009 cross-platform): this string is
964
+ * embedded verbatim in a dispatch prompt's shell command line (POSIX sh/bash
965
+ * on the agent side) AND passed straight to Node's execSync (cmd.exe argv
966
+ * parsing on Windows — post-complete.js's own recovery-commit path runs this
967
+ * way). Double quotes are honored as a single argv token by both; a bare
968
+ * single quote is not special to cmd.exe and would reach git literally.
969
+ * @returns {string}
970
+ */
971
+ function buildWorktreeGitAddArgs() {
972
+ const excludes = WORKTREE_COMMIT_EXCLUDE_PATHSPECS.map((p) => `"${p}"`).join(' ');
973
+ return `add -A -- . ${excludes}`;
974
+ }
975
+
976
+ /**
977
+ * Build a full `git add -A` shell command line that stages everything EXCEPT
978
+ * the telemetry paths in WORKTREE_COMMIT_EXCLUDE_PATHSPECS. Intended for use
979
+ * inside an ISOLATED worktree only (Formation unit worktree / cross-project
980
+ * target_repo_worktree) — a shared working tree must keep using explicit-paths
981
+ * staging instead.
982
+ * @returns {string} shell command line (no trailing `&&`/`;`)
983
+ */
984
+ function buildWorktreeGitAddCommand() {
985
+ return `git ${buildWorktreeGitAddArgs()}`;
986
+ }
987
+
988
+ module.exports = {
989
+ ROOT,
990
+ FORMATION_DIR,
991
+ COLLABORATION_API,
992
+ LOG_DIR,
993
+ getLogDir,
994
+ generateSessionId,
995
+ detectGitBash,
996
+ detectClaudeCmd,
997
+ pickClaudeFromWhere,
998
+ getClaudeEnv,
999
+ ensureGitReady,
1000
+ preserveUntrackedStashCommand,
1001
+ createWorktree,
1002
+ removeWorktree,
1003
+ isRegisteredWorktree,
1004
+ ensureWorktreeDirIgnored,
1005
+ readWorktreeConfig,
1006
+ resolveWorktreeDecision,
1007
+ parseVerifyOfflineFromYaml,
1008
+ getVerifyOfflineCommand,
1009
+ dispatchLockPath,
1010
+ DISPATCH_LOCK_STALE_MS,
1011
+ dispatchLockStaleness,
1012
+ tryAcquireDispatchLock,
1013
+ readDashboardModels,
1014
+ loadDashboardModels,
1015
+ linkNodeModulesBestEffort,
1016
+ unlinkNodeModulesBestEffort,
1017
+ WORKTREE_COMMIT_EXCLUDE_PATHSPECS,
1018
+ buildWorktreeGitAddCommand,
1019
+ buildWorktreeGitAddArgs,
1020
+ };