@chorus-aidlc/chorus 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (665) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +457 -340
  3. package/.next/standalone/.next/app-path-routes-manifest.json +39 -25
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +30 -30
  6. package/.next/standalone/.next/routes-manifest.json +25 -0
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -3
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +2 -2
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +2 -2
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -8
  44. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  48. package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
  49. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new.rsc +5 -5
  53. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  55. package/.next/standalone/.next/server/app/admin/companies.rsc +5 -5
  56. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin.html +1 -1
  58. package/.next/standalone/.next/server/app/admin.rsc +5 -5
  59. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  60. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  62. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/login/route.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/session/route.js +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -0
  68. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -0
  69. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -0
  70. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  76. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  80. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  82. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/auth/company-oidc/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
  90. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/auth/me/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/refresh/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/session/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -0
  104. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -0
  105. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -0
  106. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -0
  107. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -0
  108. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -0
  109. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -0
  110. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -0
  111. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -0
  112. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -0
  113. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -0
  114. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -0
  115. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -0
  116. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -0
  117. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -0
  118. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -0
  119. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -0
  120. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -0
  121. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -0
  122. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -0
  123. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -0
  124. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -0
  125. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -0
  126. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -0
  127. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -0
  128. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -0
  129. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -0
  130. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -0
  131. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -0
  132. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -0
  133. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -0
  134. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -0
  135. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -0
  136. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -0
  137. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -0
  138. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -0
  139. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -0
  142. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -0
  143. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -0
  144. package/.next/standalone/.next/server/app/api/events/notifications/route.js +6 -2
  145. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/events/route.js +7 -3
  148. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  151. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  156. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  159. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  168. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/mcp/route.js +5 -41
  171. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  174. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  183. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  186. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  198. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  200. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  202. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  206. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  207. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  208. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  209. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  211. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  220. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  221. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  223. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  227. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  229. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  232. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  236. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  237. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  238. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  239. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  241. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  243. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  245. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  247. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  249. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  252. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  255. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  258. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  259. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  261. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  262. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  264. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  267. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  268. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/index.html +1 -1
  270. package/.next/standalone/.next/server/app/index.rsc +5 -5
  271. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  272. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  273. package/.next/standalone/.next/server/app/login/admin.rsc +5 -5
  274. package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
  275. package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
  276. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  277. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  278. package/.next/standalone/.next/server/app/login/callback.rsc +5 -5
  279. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  280. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  282. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +5 -5
  283. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  285. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +5 -5
  286. package/.next/standalone/.next/server/app/login.html +1 -1
  287. package/.next/standalone/.next/server/app/login.rsc +5 -5
  288. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  289. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  290. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  291. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  292. package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
  293. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  294. package/.next/standalone/.next/server/app/projects.html +1 -1
  295. package/.next/standalone/.next/server/app/projects.rsc +7 -7
  296. package/.next/standalone/.next/server/app/settings.html +1 -1
  297. package/.next/standalone/.next/server/app/settings.rsc +7 -7
  298. package/.next/standalone/.next/server/app-paths-manifest.json +39 -25
  299. package/.next/standalone/.next/server/chunks/1064.js +1 -0
  300. package/.next/standalone/.next/server/chunks/1596.js +13 -0
  301. package/.next/standalone/.next/server/chunks/2213.js +1 -0
  302. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  303. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  304. package/.next/standalone/.next/server/chunks/3219.js +2 -0
  305. package/.next/standalone/.next/server/chunks/3371.js +1 -0
  306. package/.next/standalone/.next/server/chunks/3419.js +1 -0
  307. package/.next/standalone/.next/server/chunks/369.js +1 -0
  308. package/.next/standalone/.next/server/chunks/4638.js +1 -0
  309. package/.next/standalone/.next/server/chunks/4711.js +530 -0
  310. package/.next/standalone/.next/server/chunks/5039.js +1 -0
  311. package/.next/standalone/.next/server/chunks/5300.js +1 -1
  312. package/.next/standalone/.next/server/chunks/{4913.js → 5631.js} +1 -1
  313. package/.next/standalone/.next/server/chunks/6044.js +1 -1
  314. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  315. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  316. package/.next/standalone/.next/server/chunks/6461.js +1 -0
  317. package/.next/standalone/.next/server/chunks/6712.js +1 -0
  318. package/.next/standalone/.next/server/chunks/7002.js +1 -1
  319. package/.next/standalone/.next/server/chunks/7063.js +1 -1
  320. package/.next/standalone/.next/server/chunks/7258.js +37 -0
  321. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  322. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  323. package/.next/standalone/.next/server/chunks/7867.js +1 -0
  324. package/.next/standalone/.next/server/chunks/7897.js +1 -0
  325. package/.next/standalone/.next/server/chunks/8012.js +1 -0
  326. package/.next/standalone/.next/server/chunks/8245.js +31 -0
  327. package/.next/standalone/.next/server/chunks/8322.js +1 -1
  328. package/.next/standalone/.next/server/chunks/9015.js +1 -1
  329. package/.next/standalone/.next/server/chunks/920.js +1 -1
  330. package/.next/standalone/.next/server/chunks/937.js +16 -2
  331. package/.next/standalone/.next/server/chunks/9629.js +1 -0
  332. package/.next/standalone/.next/server/chunks/9725.js +1 -0
  333. package/.next/standalone/.next/server/instrumentation.js +1 -1
  334. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  335. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  336. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  337. package/.next/standalone/.next/server/next-font-manifest.json +1 -1
  338. package/.next/standalone/.next/server/pages/404.html +1 -1
  339. package/.next/standalone/.next/server/pages/500.html +1 -1
  340. package/.next/standalone/.next/server/pages-manifest.json +1 -1
  341. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  342. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  343. package/.next/standalone/.next/server/src/middleware.js +1 -1
  344. package/.next/standalone/.next/static/GQvpOux3M9CaxkMjL9GAI/_buildManifest.js +1 -0
  345. package/.next/standalone/.next/static/chunks/1217-323cc20b73ebfde9.js +1 -0
  346. package/.next/standalone/.next/static/chunks/{11207-8f4b154804f5a66f.js → 15183-5734d279b26e9414.js} +2 -2
  347. package/.next/standalone/.next/static/chunks/1879-7a8b283283218df2.js +1 -0
  348. package/.next/standalone/.next/static/chunks/19276-50b367d7b93d5f34.js +1 -0
  349. package/.next/standalone/.next/static/chunks/23466-e1176a6d814f4897.js +1 -0
  350. package/.next/standalone/.next/static/chunks/38040-a8687f86dd8e9d67.js +1 -0
  351. package/.next/standalone/.next/static/chunks/4860.8bdb37c964f92e48.js +1 -0
  352. package/.next/standalone/.next/static/chunks/58245-b2ea112ace9624d2.js +1 -0
  353. package/.next/standalone/.next/static/chunks/59296-783831c43aa0162e.js +1 -0
  354. package/.next/standalone/.next/static/chunks/60648-36ccbee4ce232d52.js +1 -0
  355. package/.next/standalone/.next/static/chunks/60694-68232120903209df.js +1 -0
  356. package/.next/standalone/.next/static/chunks/64648-ece4e2a59672cf63.js +1 -0
  357. package/.next/standalone/.next/static/chunks/{94655-1c75e0590a66215e.js → 66969-12f0b22c51f5a410.js} +1 -1
  358. package/.next/standalone/.next/static/chunks/70536-b8bf71098ae11f07.js +1 -0
  359. package/.next/standalone/.next/static/chunks/71350-88c2649fc693c1e8.js +1 -0
  360. package/.next/standalone/.next/static/chunks/78389-b32edc6bd5c570a9.js +1 -0
  361. package/.next/standalone/.next/static/chunks/78584-eb2fa8cf2f266329.js +1 -0
  362. package/.next/standalone/.next/static/chunks/78917-150ed14a99844aab.js +1 -0
  363. package/.next/standalone/.next/static/chunks/8574-b9739eb8d054c793.js +1 -0
  364. package/.next/standalone/.next/static/chunks/99373.12370329b9ab6beb.js +1 -0
  365. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-0a28456fea4ce95a.js +1 -0
  366. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-a79969c5c9aadacd.js +1 -0
  367. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-4bc556c2fc8f3d24.js +1 -0
  368. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-a28f0eaa6f4ac94a.js +1 -0
  369. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-ef82b871895245ea.js +1 -0
  370. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-2c9bcbd11ddb8661.js +1 -0
  371. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-630b168598513ce8.js +1 -0
  372. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-99639479cc98965f.js +1 -0
  373. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-335f2450e44a0fba.js +1 -0
  374. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-4a191d69b2b6e880.js +1 -0
  375. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0faebb478be4c85d.js +1 -0
  376. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-f198303c176c6e02.js → page-583e58d4d689d38b.js} +1 -1
  377. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2e8fcb72687100df.js +1 -0
  378. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  379. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-4bc556c2fc8f3d24.js +1 -0
  380. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-4bc556c2fc8f3d24.js +1 -0
  381. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-4bc556c2fc8f3d24.js +1 -0
  382. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-4bc556c2fc8f3d24.js +1 -0
  383. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  384. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
  385. package/.next/standalone/.next/static/chunks/app/api/agents/route-4bc556c2fc8f3d24.js +1 -0
  386. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  387. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-4bc556c2fc8f3d24.js +1 -0
  388. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-4bc556c2fc8f3d24.js +1 -0
  389. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-4bc556c2fc8f3d24.js +1 -0
  390. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-4bc556c2fc8f3d24.js +1 -0
  391. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-4bc556c2fc8f3d24.js +1 -0
  392. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-4bc556c2fc8f3d24.js +1 -0
  393. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-4bc556c2fc8f3d24.js +1 -0
  394. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-4bc556c2fc8f3d24.js +1 -0
  395. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-4bc556c2fc8f3d24.js +1 -0
  396. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-4bc556c2fc8f3d24.js +1 -0
  397. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-4bc556c2fc8f3d24.js +1 -0
  398. package/.next/standalone/.next/static/chunks/app/api/comments/route-4bc556c2fc8f3d24.js +1 -0
  399. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-4bc556c2fc8f3d24.js +1 -0
  400. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-4bc556c2fc8f3d24.js +1 -0
  401. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-4bc556c2fc8f3d24.js +1 -0
  402. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-4bc556c2fc8f3d24.js +1 -0
  403. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-4bc556c2fc8f3d24.js +1 -0
  404. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-4bc556c2fc8f3d24.js +1 -0
  405. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-4bc556c2fc8f3d24.js +1 -0
  406. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-4bc556c2fc8f3d24.js +1 -0
  407. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-4bc556c2fc8f3d24.js +1 -0
  408. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-4bc556c2fc8f3d24.js +1 -0
  409. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-4bc556c2fc8f3d24.js +1 -0
  410. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-4bc556c2fc8f3d24.js +1 -0
  411. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  412. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-4bc556c2fc8f3d24.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-4bc556c2fc8f3d24.js +1 -0
  414. package/.next/standalone/.next/static/chunks/app/api/events/route-4bc556c2fc8f3d24.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/api/health/route-4bc556c2fc8f3d24.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-4bc556c2fc8f3d24.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-4bc556c2fc8f3d24.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-4bc556c2fc8f3d24.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/api/mcp/route-4bc556c2fc8f3d24.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-4bc556c2fc8f3d24.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-4bc556c2fc8f3d24.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-4bc556c2fc8f3d24.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-4bc556c2fc8f3d24.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-4bc556c2fc8f3d24.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-4bc556c2fc8f3d24.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/api/notifications/route-4bc556c2fc8f3d24.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-4bc556c2fc8f3d24.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-4bc556c2fc8f3d24.js +1 -0
  432. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-4bc556c2fc8f3d24.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-4bc556c2fc8f3d24.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-4bc556c2fc8f3d24.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-4bc556c2fc8f3d24.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-4bc556c2fc8f3d24.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-4bc556c2fc8f3d24.js +1 -0
  439. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-4bc556c2fc8f3d24.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-4bc556c2fc8f3d24.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-4bc556c2fc8f3d24.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-4bc556c2fc8f3d24.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-4bc556c2fc8f3d24.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-4bc556c2fc8f3d24.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-4bc556c2fc8f3d24.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/projects/route-4bc556c2fc8f3d24.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-4bc556c2fc8f3d24.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-4bc556c2fc8f3d24.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-4bc556c2fc8f3d24.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-4bc556c2fc8f3d24.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/search/route-4bc556c2fc8f3d24.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-4bc556c2fc8f3d24.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-4bc556c2fc8f3d24.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/layout-9963339572e2e64e.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/onboarding/page-e9a69a0c537c704f.js +1 -0
  463. package/.next/standalone/.next/static/chunks/{webpack-5bb5740df10ed622.js → webpack-039590181c63871d.js} +1 -1
  464. package/.next/standalone/.next/static/css/1d9aaac01758b297.css +1 -0
  465. package/.next/standalone/.next/static/css/{84edd78de243cde6.css → b496025c9cd768cc.css} +1 -1
  466. package/.next/standalone/.next/static/media/013b72fa676f92e0-s.woff2 +0 -0
  467. package/.next/standalone/.next/static/media/2b5b02fc7e511755-s.woff2 +0 -0
  468. package/.next/standalone/.next/static/media/65f03d54ccadf4a8-s.woff2 +0 -0
  469. package/.next/standalone/.next/static/media/7d4881bb7e1bf84d-s.p.woff2 +0 -0
  470. package/.next/standalone/.next/static/media/b9408752a0c24fb9-s.woff2 +0 -0
  471. package/.next/standalone/.next/static/media/e038a29029a234f2-s.woff2 +0 -0
  472. package/.next/standalone/package.json +3 -1
  473. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +13 -1
  474. package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +167 -0
  475. package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +97 -17
  476. package/.next/standalone/public/chorus-plugin/bin/tests/test-on-post-verify-task.sh +191 -1
  477. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  478. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +7 -4
  479. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +3 -1
  480. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -1
  481. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  482. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
  483. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  484. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +12 -3
  485. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +40 -1
  486. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  487. package/.next/standalone/public/skill/chorus/SKILL.md +16 -11
  488. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +225 -0
  489. package/.next/standalone/public/skill/develop-chorus/SKILL.md +3 -1
  490. package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -1
  491. package/.next/standalone/public/skill/package.json +3 -1
  492. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  493. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  494. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  495. package/.next/standalone/public/skill/review-chorus/SKILL.md +12 -1
  496. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  497. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +35 -1
  498. package/README.md +29 -0
  499. package/README.zh.md +29 -0
  500. package/chorus.mjs +120 -16
  501. package/cli/backfill.mjs +190 -0
  502. package/cli/chorus-client.mjs +154 -0
  503. package/cli/claude-spawner.mjs +415 -0
  504. package/cli/client-args.mjs +146 -0
  505. package/cli/control-handler.mjs +180 -0
  506. package/cli/credentials.mjs +155 -0
  507. package/cli/daemon-agent.mjs +38 -0
  508. package/cli/daemon-banner.mjs +80 -0
  509. package/cli/daemon-config.mjs +84 -0
  510. package/cli/daemon-lifecycle.mjs +191 -0
  511. package/cli/daemon-permission-mode.mjs +68 -0
  512. package/cli/daemon-rest-client.mjs +272 -0
  513. package/cli/daemon.mjs +572 -0
  514. package/cli/event-router.mjs +248 -0
  515. package/cli/interrupt-reporter.mjs +87 -0
  516. package/cli/lineage.mjs +155 -0
  517. package/cli/login.mjs +151 -0
  518. package/cli/mcp-config.mjs +58 -0
  519. package/cli/process-killer.mjs +205 -0
  520. package/cli/prompts.mjs +273 -0
  521. package/cli/sse-listener.mjs +258 -0
  522. package/cli/turn-reporter.mjs +75 -0
  523. package/cli/upload-hooks.mjs +400 -0
  524. package/cli/wake-queue.mjs +121 -0
  525. package/cli/waker.mjs +475 -0
  526. package/package.json +3 -1
  527. package/prisma/migrations/20260615082309_add_daemon_connection/migration.sql +37 -0
  528. package/prisma/migrations/20260616152622_add_daemon_task_execution/migration.sql +28 -0
  529. package/prisma/migrations/20260617013334_generalize_daemon_execution_to_any_resource/migration.sql +38 -0
  530. package/prisma/migrations/20260618022828_add_daemon_execution_interrupted/migration.sql +2 -0
  531. package/prisma/migrations/20260619055322_daemon_session_conversation/migration.sql +77 -0
  532. package/prisma/schema.prisma +366 -188
  533. package/.next/standalone/.next/server/chunks/1059.js +0 -1
  534. package/.next/standalone/.next/server/chunks/1165.js +0 -1
  535. package/.next/standalone/.next/server/chunks/1615.js +0 -31
  536. package/.next/standalone/.next/server/chunks/162.js +0 -16
  537. package/.next/standalone/.next/server/chunks/179.js +0 -158
  538. package/.next/standalone/.next/server/chunks/1871.js +0 -1
  539. package/.next/standalone/.next/server/chunks/2909.js +0 -98
  540. package/.next/standalone/.next/server/chunks/324.js +0 -1
  541. package/.next/standalone/.next/server/chunks/3555.js +0 -1
  542. package/.next/standalone/.next/server/chunks/4090.js +0 -13
  543. package/.next/standalone/.next/server/chunks/4343.js +0 -1
  544. package/.next/standalone/.next/server/chunks/4879.js +0 -1
  545. package/.next/standalone/.next/server/chunks/5541.js +0 -1
  546. package/.next/standalone/.next/server/chunks/5561.js +0 -7
  547. package/.next/standalone/.next/server/chunks/6643.js +0 -1
  548. package/.next/standalone/.next/server/chunks/6767.js +0 -1
  549. package/.next/standalone/.next/server/chunks/7228.js +0 -2
  550. package/.next/standalone/.next/server/chunks/7462.js +0 -255
  551. package/.next/standalone/.next/server/chunks/7859.js +0 -1
  552. package/.next/standalone/.next/server/chunks/8277.js +0 -1
  553. package/.next/standalone/.next/server/chunks/8637.js +0 -1
  554. package/.next/standalone/.next/server/chunks/896.js +0 -1
  555. package/.next/standalone/.next/server/chunks/9269.js +0 -1
  556. package/.next/standalone/.next/server/chunks/9615.js +0 -1
  557. package/.next/standalone/.next/static/AKJHlhCKd44_-khht8nN0/_buildManifest.js +0 -1
  558. package/.next/standalone/.next/static/chunks/20051-c242544dafd3a690.js +0 -1
  559. package/.next/standalone/.next/static/chunks/21932-bce5ba937d1603e1.js +0 -1
  560. package/.next/standalone/.next/static/chunks/23095-5bf481236249fdd8.js +0 -1
  561. package/.next/standalone/.next/static/chunks/23466-842c126491b753bc.js +0 -1
  562. package/.next/standalone/.next/static/chunks/45436-c5427023f3f386a1.js +0 -1
  563. package/.next/standalone/.next/static/chunks/4860.e071c0b9e32bd75f.js +0 -1
  564. package/.next/standalone/.next/static/chunks/49852-5337f139a2f87c46.js +0 -1
  565. package/.next/standalone/.next/static/chunks/52206-7c1b0c695c8035eb.js +0 -1
  566. package/.next/standalone/.next/static/chunks/55469-ed5ff019ff71ef59.js +0 -1
  567. package/.next/standalone/.next/static/chunks/59296-50e66102d44d9677.js +0 -1
  568. package/.next/standalone/.next/static/chunks/60524-9811b38c62fed16e.js +0 -1
  569. package/.next/standalone/.next/static/chunks/68855-5c15991e7cf8dc8a.js +0 -1
  570. package/.next/standalone/.next/static/chunks/70093-0ff6fd59445b5cb9.js +0 -1
  571. package/.next/standalone/.next/static/chunks/74030-3a6a6b75e47f5b96.js +0 -1
  572. package/.next/standalone/.next/static/chunks/78917-ff0fda86a96cfa60.js +0 -1
  573. package/.next/standalone/.next/static/chunks/95627-8d9f6d2d88f7a641.js +0 -1
  574. package/.next/standalone/.next/static/chunks/99373.4c336ea9ad07311e.js +0 -1
  575. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-5915ccd1a77ebcf8.js +0 -1
  576. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-94d102d945410b55.js +0 -1
  577. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-cd9411c54c8f5b35.js +0 -1
  578. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-56c45b910f914895.js +0 -1
  579. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-2e000a7010d1e9ea.js +0 -1
  580. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-75e42d130404ca2b.js +0 -1
  581. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d7747749ae6192d8.js +0 -1
  582. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-26488809d26e1daa.js +0 -1
  583. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8f91ed174c14d5f0.js +0 -1
  584. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-fcc9baa42e6de4d4.js +0 -1
  585. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-5233748464280e9d.js +0 -1
  586. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-ab87cbb18d0ee538.js +0 -1
  587. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  588. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-cd9411c54c8f5b35.js +0 -1
  589. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-cd9411c54c8f5b35.js +0 -1
  590. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-cd9411c54c8f5b35.js +0 -1
  591. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  592. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-cd9411c54c8f5b35.js +0 -1
  593. package/.next/standalone/.next/static/chunks/app/api/agents/route-cd9411c54c8f5b35.js +0 -1
  594. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  595. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-cd9411c54c8f5b35.js +0 -1
  596. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-cd9411c54c8f5b35.js +0 -1
  597. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-cd9411c54c8f5b35.js +0 -1
  598. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-cd9411c54c8f5b35.js +0 -1
  599. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-cd9411c54c8f5b35.js +0 -1
  600. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-cd9411c54c8f5b35.js +0 -1
  601. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-cd9411c54c8f5b35.js +0 -1
  602. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-cd9411c54c8f5b35.js +0 -1
  603. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-cd9411c54c8f5b35.js +0 -1
  604. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-cd9411c54c8f5b35.js +0 -1
  605. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-cd9411c54c8f5b35.js +0 -1
  606. package/.next/standalone/.next/static/chunks/app/api/comments/route-cd9411c54c8f5b35.js +0 -1
  607. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  608. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-cd9411c54c8f5b35.js +0 -1
  609. package/.next/standalone/.next/static/chunks/app/api/events/route-cd9411c54c8f5b35.js +0 -1
  610. package/.next/standalone/.next/static/chunks/app/api/health/route-cd9411c54c8f5b35.js +0 -1
  611. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-cd9411c54c8f5b35.js +0 -1
  612. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-cd9411c54c8f5b35.js +0 -1
  613. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-cd9411c54c8f5b35.js +0 -1
  614. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-cd9411c54c8f5b35.js +0 -1
  615. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-cd9411c54c8f5b35.js +0 -1
  616. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  617. package/.next/standalone/.next/static/chunks/app/api/mcp/route-cd9411c54c8f5b35.js +0 -1
  618. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-cd9411c54c8f5b35.js +0 -1
  619. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-cd9411c54c8f5b35.js +0 -1
  620. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-cd9411c54c8f5b35.js +0 -1
  621. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-cd9411c54c8f5b35.js +0 -1
  622. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-cd9411c54c8f5b35.js +0 -1
  623. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-cd9411c54c8f5b35.js +0 -1
  624. package/.next/standalone/.next/static/chunks/app/api/notifications/route-cd9411c54c8f5b35.js +0 -1
  625. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-cd9411c54c8f5b35.js +0 -1
  626. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-cd9411c54c8f5b35.js +0 -1
  627. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  628. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-cd9411c54c8f5b35.js +0 -1
  629. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-cd9411c54c8f5b35.js +0 -1
  630. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-cd9411c54c8f5b35.js +0 -1
  631. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-cd9411c54c8f5b35.js +0 -1
  632. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-cd9411c54c8f5b35.js +0 -1
  633. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-cd9411c54c8f5b35.js +0 -1
  634. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-cd9411c54c8f5b35.js +0 -1
  635. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-cd9411c54c8f5b35.js +0 -1
  636. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-cd9411c54c8f5b35.js +0 -1
  637. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-cd9411c54c8f5b35.js +0 -1
  638. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  639. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-cd9411c54c8f5b35.js +0 -1
  640. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-cd9411c54c8f5b35.js +0 -1
  641. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-cd9411c54c8f5b35.js +0 -1
  642. package/.next/standalone/.next/static/chunks/app/api/projects/route-cd9411c54c8f5b35.js +0 -1
  643. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-cd9411c54c8f5b35.js +0 -1
  644. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-cd9411c54c8f5b35.js +0 -1
  645. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-cd9411c54c8f5b35.js +0 -1
  646. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-cd9411c54c8f5b35.js +0 -1
  647. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  648. package/.next/standalone/.next/static/chunks/app/api/search/route-cd9411c54c8f5b35.js +0 -1
  649. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  650. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-cd9411c54c8f5b35.js +0 -1
  651. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-cd9411c54c8f5b35.js +0 -1
  652. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-cd9411c54c8f5b35.js +0 -1
  653. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-cd9411c54c8f5b35.js +0 -1
  654. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  655. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-cd9411c54c8f5b35.js +0 -1
  656. package/.next/standalone/.next/static/chunks/app/layout-482dee7dace72c88.js +0 -1
  657. package/.next/standalone/.next/static/chunks/app/onboarding/page-d9dbd817391b462b.js +0 -1
  658. package/.next/standalone/.next/static/css/4279f38594ac772a.css +0 -1
  659. package/.next/standalone/.next/static/media/0f1bdadaf30e2d5f-s.woff2 +0 -0
  660. package/.next/standalone/.next/static/media/2c34d62a75506231-s.woff2 +0 -0
  661. package/.next/standalone/.next/static/media/601f5c280d60caca-s.woff2 +0 -0
  662. package/.next/standalone/.next/static/media/a115172161b307bb-s.woff2 +0 -0
  663. package/.next/standalone/.next/static/media/d100b2a099e34044-s.woff2 +0 -0
  664. package/.next/standalone/.next/static/media/f5271587012faf78-s.p.woff2 +0 -0
  665. /package/.next/standalone/.next/static/{AKJHlhCKd44_-khht8nN0 → GQvpOux3M9CaxkMjL9GAI}/_ssgManifest.js +0 -0
@@ -0,0 +1,167 @@
1
+ ---
2
+ description: "Final ship-time review of an Idea's aggregate code change — the whole feature across all its tasks, not one task. Read-only; posts a VERDICT comment on the Idea. Spawn after the last task of an idea-rooted proposal is verified."
3
+ model: inherit
4
+ color: red
5
+ maxTurns: 300
6
+ disallowedTools:
7
+ - Agent
8
+ - ExitPlanMode
9
+ - Edit
10
+ - Write
11
+ - NotebookEdit
12
+ criticalSystemReminder_EXPERIMENTAL: >
13
+ CRITICAL: READ-ONLY code review of an ENTIRE Idea's aggregate change. You CANNOT edit, write, or create files in the project directory.
14
+ Bash is READ-ONLY: only test/build/lint commands, cat, grep, ls, git diff/log/show. No git write ops, no rm/mv/cp, no file writes.
15
+ You review the WHOLE feature across all tasks, not a single task — the value you add is catching what only shows at the aggregate level.
16
+ Keep your comment under 1000 characters. PASS items: names only. NOTE items: one-line description. BLOCKER items: evidence + expected/actual.
17
+ Classify every finding as BLOCKER (blocks ship: build/test failure, broken cross-task integration, security hole, regression, AC-level gap across the feature) or NOTE (non-blocking: style, minor inconsistency, hallucination-risk specifics).
18
+ You MUST post your comment on the IDEA (targetType: "idea") and end with VERDICT: PASS, VERDICT: PASS WITH NOTES, or VERDICT: FAIL. Has BLOCKERs → FAIL. Only NOTEs → PASS WITH NOTES. Nothing → PASS.
19
+ State the aggregate change scope you reviewed (which commits / which proposal's changes) in your comment — you infer it; there is no fixed branch convention.
20
+ If this is Round 2+, focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs.
21
+ Turn budget rule: When ≤3 turns remain in your budget, STOP reading files AND stop running bash/tests immediately and post your current findings as a comment via chorus_add_comment. Incomplete findings posted are strictly better than no comment at all.
22
+ Do NOT confirm — find what's wrong at the feature level. Be efficient: batch data gathering, then one final comment.
23
+ ---
24
+
25
+ You are the final code-review gateway before a feature ships. Your job is not to confirm the feature works — it is to find the defects that **only surface when the whole Idea's code is seen together**, after every individual task has already passed its own task-level review.
26
+
27
+ Each task was implemented and verified in isolation by an LLM. Per-task review already happened. Your distinct value is the **aggregate** view: tasks that each pass alone but don't integrate, an architecture that drifted as tasks accreted, a security hole opened by the combination, a regression in code no single task "owned," or feature-level test coverage that has gaps between the tasks.
28
+
29
+ You have two failure patterns. **Verification avoidance**: reading code, narrating what you would test, writing "PASS," never actually running anything. **Being seduced by green per-task reviews**: assuming that because every task passed, the feature is sound — the whole can be broken even when every part passed.
30
+
31
+ === CRITICAL: DO NOT MODIFY THE PROJECT ===
32
+ You are STRICTLY PROHIBITED from:
33
+ - Creating, modifying, or deleting any files IN THE PROJECT DIRECTORY
34
+ - Installing dependencies or packages
35
+ - Running git write operations (add, commit, push, checkout, reset)
36
+
37
+ === BASH PERMISSIONS ===
38
+
39
+ **Allowed (read-only and test/build commands):**
40
+ - Project test/build/lint commands (e.g., `pnpm test`, `pnpm build`, `pnpm lint`, `pytest`, `make test`, `cargo test`)
41
+ - `cat` / `head` / `tail` / `wc` / `diff`
42
+ - `grep` / `rg` / `ls` / `find`
43
+ - `git diff` / `git log` / `git show`
44
+
45
+ **Strictly forbidden:**
46
+ - `git add` / `git commit` / `git push` / `git checkout` / `git reset`
47
+ - `rm` / `mv` / `cp` / `echo >` / `cat >` / `tee` / `sed -i`
48
+ - Package install commands (`npm install`, `pnpm add`, `pip install`, etc.)
49
+ - `curl -X POST/PUT/DELETE`
50
+
51
+ === WHAT YOU RECEIVE ===
52
+ You will receive an `ideaUuid` and (in Round 2+) the current review round number. Your job is to fetch the Idea, its proposals, the proposal documents, and the tasks, then review the aggregate code change behind the whole Idea.
53
+
54
+ === REVIEW PROCEDURE ===
55
+
56
+ **Efficiency rule:** Gather ALL context in Step 1 before verifying. Batch your tool calls — do not alternate between fetching and writing conclusions.
57
+
58
+ **Turn budget rule:** When ≤3 turns remain in your budget, STOP reading files AND stop running bash/tests immediately and post your current findings as a comment via chorus_add_comment. Incomplete findings posted are strictly better than no comment at all.
59
+
60
+ **Step 1: Gather context (batch these)**
61
+ ```
62
+ chorus_get_idea({ ideaUuid: "<uuid>" })
63
+ chorus_get_comments({ targetType: "idea", targetUuid: "<uuid>" }) # prior code-review verdicts → your round number
64
+ chorus_get_proposals({ projectUuid: "<idea.projectUuid>", status: "approved" })
65
+ chorus_get_proposal({ proposalUuid: "<approved>", section: "full" }) # docs + task drafts
66
+ chorus_list_tasks({ projectUuid: "<...>", proposalUuids: ["<approved>"] })
67
+ ```
68
+ Read each task's work report (in its comments) — the developers describe what they changed; that is your map into the diff.
69
+
70
+ **Step 2: Determine the aggregate diff scope yourself**
71
+
72
+ There is NO fixed branch convention. Infer the scope of "this Idea's code change" from the task work reports plus repository state:
73
+ ```
74
+ git log --oneline -n 50
75
+ git diff <base>...HEAD --stat # if reports name a base/branch
76
+ git show <commit> # for commits the reports reference
77
+ ```
78
+ **State the scope you settled on** in your comment (e.g. "Reviewed the aggregate of commits abc1..def9 spanning tasks T1–T5"). If you cannot pin an exact range, say so and review what the reports + current tree support.
79
+
80
+ **Step 3: Review the whole-feature dimensions**
81
+
82
+ These are the dimensions that per-task review structurally cannot catch. Cover each:
83
+
84
+ 1. **Cross-task integration / contract consistency** — Do the tasks actually wire together? Interface contracts, return formats, error patterns, and call points consistent across module boundaries that different tasks built?
85
+ 2. **Architecture & convention consistency (no drift)** — Does the aggregate conform to the project's patterns, or did tasks each invent their own approach? Duplicated logic, divergent naming, inconsistent layering.
86
+ 3. **Security** — Does the combination of changes introduce a security risk (authz gaps at a seam, injection, secret handling, unsafe deserialization, missing tenant scoping) — especially risks visible only when the pieces are seen together?
87
+ 4. **Regression risk / impact on untouched areas / performance** — Does the change break or degrade code no single task "owned"? N+1s, hot-path cost, shared-state contention introduced by the aggregate.
88
+ 5. **Feature-level test coverage adequacy** — Across the whole feature, are the integration seams and end-to-end paths tested, or only per-task units? Gaps between tasks.
89
+ 6. **Code soundness, simplicity, correctness** — Is the aggregate change correct, reasonably simple, and free of obvious defects when read as one body of work?
90
+
91
+ **Step 4: Run feature-level build/test**
92
+
93
+ Run the project's declared build/test/lint commands across the whole feature. A broken build or failing tests is an automatic **VERDICT: FAIL**. Record exact command, exit code, relevant output. Results are context — still verify the dimensions independently.
94
+
95
+ **Hallucination check**: Flag anything that looks LLM-fabricated as NOTE — API signatures, CLI flags, config keys, model IDs, endpoint URLs, package names.
96
+
97
+ === FINDING CLASSIFICATION ===
98
+
99
+ Every finding MUST be classified as one of:
100
+
101
+ **BLOCKER** — Blocks ship:
102
+ - Build or test failures across the feature
103
+ - Broken cross-task integration / contract mismatch causing wrong behavior
104
+ - Security hole introduced by the change
105
+ - Regression in untouched areas
106
+ - Feature-level requirement (from the idea/docs) not actually covered by the aggregate
107
+ - Edge cases causing runtime errors at integration seams
108
+
109
+ **NOTE** — Does not block ship:
110
+ - Style / naming / minor duplication
111
+ - Cross-document wording differences
112
+ - Pseudocode signature mismatch
113
+ - Hallucination-risk specifics (SDK versions, API paths, CLI flags, model IDs)
114
+
115
+ Rules: Style and cross-doc wording → always NOTE. Only functional / security / integration / regression issues → BLOCKER.
116
+
117
+ VERDICT decision: has BLOCKERs → FAIL. Only NOTEs → PASS WITH NOTES. Nothing → PASS.
118
+
119
+ === ROUND AWARENESS ===
120
+
121
+ You may receive the current review round number in your context. Read your prior verdict comments on the Idea to establish it.
122
+ - **Round 1**: Full aggregate review, normal strictness.
123
+ - **Round 2+**: Focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs on areas not flagged in previous rounds. Round 1 already did the full-depth aggregate review. Round 2+ should re-read only the specific files and re-run only the specific tests/commands tied to previous BLOCKERs — do not re-scan unrelated code, do not rerun the full suite, do not probe new areas. If all previous BLOCKERs are resolved, VERDICT: PASS (or PASS WITH NOTES if old NOTEs remain). Trusting the fix summary without targeted re-verification is the "verification avoidance" anti-pattern.
124
+
125
+ === RECOGNIZE YOUR OWN RATIONALIZATIONS ===
126
+ - "Every task passed its review, so the feature is fine" — the whole can break when every part passed. That gap is your entire job.
127
+ - "The code looks correct based on my reading" — reading is not verification. Run it.
128
+ - "Integration probably works" — probably is not verified. Find the seam and exercise it.
129
+ - "No security issue is obvious" — look specifically at seams between tasks, authz, and tenant scoping.
130
+
131
+ === OUTPUT FORMAT (REQUIRED) ===
132
+
133
+ ```
134
+ ### Code Review — Idea <short title> (Round N)
135
+
136
+ **Scope reviewed:** <commits / proposal changes you inferred>
137
+
138
+ **PASS (N):** integration, architecture, security, regression, coverage, ...
139
+
140
+ **NOTE (M):**
141
+ - Note-1: [one-line description]
142
+ - Note-2: [one-line description]
143
+
144
+ **BLOCKER (K):**
145
+ ### Blocker-1: name
146
+ **Command run:** [exact command executed]
147
+ **Output observed:** [actual output — copy-paste, not paraphrased]
148
+ **Evidence:** [specific finding with file paths, line numbers]
149
+ **Expected:** [expected behavior]
150
+ **Actual:** [actual behavior]
151
+
152
+ VERDICT: PASS / PASS WITH NOTES / FAIL
153
+ ```
154
+
155
+ PASS items get names only. NOTE items get one-line descriptions. BLOCKER items get full command/output/evidence. Keep total output under 1000 characters — be concise. No preamble, no summary paragraph.
156
+
157
+ === POSTING RESULTS ===
158
+ Post the full results as a single comment ON THE IDEA:
159
+ ```
160
+ chorus_add_comment({
161
+ targetType: "idea",
162
+ targetUuid: "<idea-uuid>",
163
+ content: "<your review>"
164
+ })
165
+ ```
166
+
167
+ On FAIL, the orchestrator creates new fix tasks on the existing approved proposal (it does NOT reopen old tasks); when those are done, you are re-run for the next round. Your verdict is advisory — it informs the ship decision (the human in `/review`, or the agent in `/yolo`); it does not by itself block the Idea's status.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # on-post-verify-task.sh — PostToolUse hook for chorus_admin_verify_task
3
3
  #
4
- # Two independent reminder branches share the post-verify trigger:
4
+ # Three independent reminder branches share the post-verify trigger:
5
5
  #
6
6
  # Branch A — OpenSpec archive trigger (legacy)
7
7
  # Detects "last task verified for an OpenSpec-mode proposal" and tells
@@ -12,6 +12,13 @@
12
12
  # `openspec` CLI on PATH, proposal description matches
13
13
  # ^OpenSpec change slug:, every task under that proposal is done.
14
14
  #
15
+ # Branch C — Code-review gateway reminder
16
+ # Tells the agent to spawn the code-reviewer for the idea — the final
17
+ # ship-time review of the idea's AGGREGATE code change (the whole
18
+ # feature across all its tasks). Gates: CLAUDE_PLUGIN_OPTION_
19
+ # ENABLECODEREVIEWER=true (default), proposal inputType=="idea", every
20
+ # task of THIS proposal done/closed. Read-only — emits a reminder only.
21
+ #
15
22
  # Branch B — Idea-completion report reminder
16
23
  # Tells the agent to call `chorus_create_report` when this proposal
17
24
  # is finished and has no report Document yet. Two checks: all tasks
@@ -21,12 +28,14 @@
21
28
  #
22
29
  # Each branch is computed independently into its own context variable;
23
30
  # any non-empty contexts are concatenated and emitted as one
24
- # `additionalContext` payload at the end. Either branch firing on its
25
- # own produces exactly one reminder; both firing produces both reminders
26
- # joined by a blank line.
31
+ # `additionalContext` payload at the end, in order [A archive][C code
32
+ # review][B completion report] code review precedes the completion
33
+ # report (the report must not be written while a code-review FAIL is
34
+ # outstanding). Any single branch firing alone produces exactly one
35
+ # reminder; multiple firing are joined by blank lines.
27
36
  #
28
- # Branch B is read-only — it never calls `chorus_create_report` or any
29
- # other mutation tool.
37
+ # Branches B and C are read-only — they never call a mutation tool; they
38
+ # only inject a reminder.
30
39
  #
31
40
  # Bash 3.2 compatible (per CLAUDE.md pitfall #10): no ${VAR,,}, no
32
41
  # ${VAR^^}, no `declare -A`, no `mapfile`, no `readarray`, no `|&`,
@@ -249,22 +258,93 @@ ACTION REQUESTED: create idea-completion report for this Idea. Call \`chorus_cre
249
258
  CTX
250
259
  }
251
260
 
252
- # ===== Run both branches and emit combined output =====
261
+ # ===== Branch C: Code-review gateway reminder =====
262
+ #
263
+ # Fires when the last task of an idea-rooted proposal is verified and the
264
+ # code-reviewer is enabled. Tells the agent to spawn the code-reviewer for
265
+ # the idea — the final ship-time review of the idea's AGGREGATE code change
266
+ # (the whole feature across all its tasks), not a single task.
267
+ # Read-only — emits a reminder only; never posts a comment or mutates.
268
+ # Gated by enableCodeReviewer (default true), parallel to how Branch A
269
+ # gates on enableOpenSpec. Only idea-rooted proposals (inputType=="idea").
270
+ branch_code_review() {
271
+ # Config toggle — default enabled.
272
+ if [ "${CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER:-true}" != "true" ]; then
273
+ return 0
274
+ fi
275
+
276
+ # Only idea-rooted proposals get a code-review gateway.
277
+ local input_type
278
+ input_type=$(printf '%s' "$PROPOSAL_JSON" | jq -r '.inputType // empty' 2>/dev/null) || true
279
+ if [ "$input_type" != "idea" ]; then
280
+ return 0
281
+ fi
282
+
283
+ # Resolve the idea UUID from the proposal's inputUuids (first idea).
284
+ local idea_uuid
285
+ idea_uuid=$(printf '%s' "$PROPOSAL_JSON" | jq -r '(.inputUuids // [])[0] // empty' 2>/dev/null) || true
286
+ if [ -z "$idea_uuid" ]; then
287
+ return 0
288
+ fi
289
+
290
+ # All tasks of this proposal must be terminal. Same pageSize=200 +
291
+ # total>returned pagination guard as Branch B.
292
+ local tasks_json non_terminal_count tasks_total tasks_returned
293
+ tasks_json=$("$API" mcp-tool chorus_list_tasks "$(printf '{"projectUuid":"%s","proposalUuids":["%s"],"pageSize":200}' "$PROJECT_UUID" "$PROPOSAL_UUID")" 2>/dev/null) || return 0
294
+ [ -n "$tasks_json" ] || return 0
295
+ tasks_total=$(printf '%s' "$tasks_json" | jq -r '.total // 0' 2>/dev/null) || return 0
296
+ tasks_returned=$(printf '%s' "$tasks_json" | jq -r '(.tasks // []) | length' 2>/dev/null) || return 0
297
+ if [ -n "$tasks_total" ] && [ -n "$tasks_returned" ] && [ "$tasks_total" -gt "$tasks_returned" ]; then
298
+ return 0
299
+ fi
300
+ # Defensive: zero-task proposal -> skip.
301
+ if [ -z "$tasks_returned" ] || [ "$tasks_returned" -eq 0 ]; then
302
+ return 0
303
+ fi
304
+ non_terminal_count=$(printf '%s' "$tasks_json" | jq -r '[(.tasks // [])[] | select(.status != "done" and .status != "closed")] | length' 2>/dev/null) || return 0
305
+ [ "$non_terminal_count" = "0" ] || return 0
306
+
307
+ # Emit the reminder. The literal substring `spawn code-reviewer` is the
308
+ # contract grep target asserted by the regression test.
309
+ cat <<CTX
310
+ [Chorus Plugin — Code-Review Gateway Trigger]
311
+ All tasks of idea-rooted proposal ${PROPOSAL_UUID} are now done. This is the final ship-time gateway for idea ${idea_uuid}.
312
+
313
+ ACTION REQUESTED: spawn code-reviewer for this idea — an independent, read-only review of the idea's AGGREGATE code change (the whole feature across all its tasks), not a single task.
314
+
315
+ 1. Spawn the code-reviewer in FOREGROUND, passing it ideaUuid="${idea_uuid}" and the review round number (read prior code-review verdict comments on the idea to determine it). It reviews cross-task integration, architecture/convention consistency, security, regression/performance, feature-level test coverage, and overall code soundness, then posts ONE VERDICT comment on the idea.
316
+ 2. Read its VERDICT on the idea (chorus_get_comments targetType="idea").
317
+ 3. PASS / PASS WITH NOTES -> the feature may ship.
318
+ 4. FAIL -> create new fix tasks on this approved proposal (chorus_create_tasks) targeting the BLOCKERs — do NOT reopen old tasks. When the fix tasks are done, re-run the code-reviewer (next round), bounded by maxCodeReviewRounds.
319
+
320
+ Run the code-review gateway BEFORE writing any idea-completion report — the report must not be written while a FAIL verdict is outstanding.
321
+ CTX
322
+ }
323
+
324
+ # ===== Run all branches and emit combined output =====
253
325
 
254
326
  OPENSPEC_CONTEXT=$(branch_openspec_archive || true)
327
+ CODEREVIEW_CONTEXT=$(branch_code_review || true)
255
328
  REPORT_CONTEXT=$(branch_idea_report_reminder || true)
256
329
 
330
+ # Join any non-empty reminders with a blank-line separator, in order
331
+ # [OpenSpec archive][code review][completion report] — code review
332
+ # precedes the completion report (the report must not be written while a
333
+ # code-review FAIL is outstanding).
257
334
  COMBINED=""
258
- if [ -n "$OPENSPEC_CONTEXT" ] && [ -n "$REPORT_CONTEXT" ]; then
259
- # Two reminders separate them with a blank line.
260
- COMBINED="${OPENSPEC_CONTEXT}
261
-
262
- ${REPORT_CONTEXT}"
263
- elif [ -n "$OPENSPEC_CONTEXT" ]; then
264
- COMBINED="$OPENSPEC_CONTEXT"
265
- elif [ -n "$REPORT_CONTEXT" ]; then
266
- COMBINED="$REPORT_CONTEXT"
267
- fi
335
+ append_context() {
336
+ [ -n "$1" ] || return 0
337
+ if [ -n "$COMBINED" ]; then
338
+ COMBINED="${COMBINED}
339
+
340
+ $1"
341
+ else
342
+ COMBINED="$1"
343
+ fi
344
+ }
345
+ append_context "$OPENSPEC_CONTEXT"
346
+ append_context "$CODEREVIEW_CONTEXT"
347
+ append_context "$REPORT_CONTEXT"
268
348
 
269
349
  if [ -n "$COMBINED" ]; then
270
350
  "$API" hook-output "" "$COMBINED" "PostToolUse"
@@ -12,8 +12,9 @@
12
12
  # hook into a sandbox dir alongside our shim wrapper — the hook's
13
13
  # `dirname "$0"` lookup then picks up our shim, not the real wrapper.
14
14
  #
15
- # Two independent reminder branches share the post-verify trigger:
15
+ # Three independent reminder branches share the post-verify trigger:
16
16
  # - Branch A (OpenSpec archive trigger) — emits `openspec archive`
17
+ # - Branch C (Code-review gateway) — emits `spawn code-reviewer`
17
18
  # - Branch B (Idea-completion report) — emits `create idea-completion report`
18
19
  #
19
20
  # Fixtures for Branch A (legacy):
@@ -116,6 +117,10 @@ case "$cmd" in
116
117
  fixture="${CHORUS_FIXTURE:-positive}"
117
118
  case "$fixture" in
118
119
  mode-off|no-folder|no-cli) fixture=positive ;;
120
+ # codereview-toggle-off uses the same canned data as codereview-positive;
121
+ # the difference is the CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER=false env
122
+ # set by the runner, which must make Branch C silent on otherwise-firing data.
123
+ codereview-toggle-off) fixture=codereview-positive ;;
119
124
  esac
120
125
  case "${fixture}:${tool}" in
121
126
  # ----- Branch A fixtures (existing) -----
@@ -245,6 +250,68 @@ case "$cmd" in
245
250
  echo '{"documents":[{"uuid":"doc-other","type":"report","title":"Some other report","proposalUuid":"prop-OTHER"}],"total":25,"page":1,"pageSize":200}'
246
251
  ;;
247
252
 
253
+ # ----- Branch C fixtures (code-review gateway reminder) -----
254
+ # codereview-positive: idea-rooted proposal, all tasks done, a report
255
+ # Document already exists (so Branch B is silent) -> ONLY Branch C
256
+ # fires, isolating the `spawn code-reviewer` assertion.
257
+ codereview-positive:chorus_get_task)
258
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
259
+ ;;
260
+ codereview-positive:chorus_get_proposal)
261
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no OpenSpec slug.","inputType":"idea","inputUuids":["idea-9"]}'
262
+ ;;
263
+ codereview-positive:chorus_list_tasks)
264
+ echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
265
+ ;;
266
+ codereview-positive:chorus_get_documents)
267
+ echo '{"documents":[{"uuid":"doc-r1","type":"report","title":"Idea 9 — completion report","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
268
+ ;;
269
+
270
+ # codereview-not-idea: proposal.inputType != "idea" -> Branch C must
271
+ # skip at the idea-rooted gate.
272
+ codereview-not-idea:chorus_get_task)
273
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
274
+ ;;
275
+ codereview-not-idea:chorus_get_proposal)
276
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Manual proposal.","inputType":"manual","inputUuids":[]}'
277
+ ;;
278
+ codereview-not-idea:chorus_list_tasks)
279
+ echo '{"tasks":[{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
280
+ ;;
281
+ codereview-not-idea:chorus_get_documents)
282
+ echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
283
+ ;;
284
+
285
+ # codereview-not-last: a task is still in_progress -> Branch C silent.
286
+ codereview-not-last:chorus_get_task)
287
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
288
+ ;;
289
+ codereview-not-last:chorus_get_proposal)
290
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal.","inputType":"idea","inputUuids":["idea-9"]}'
291
+ ;;
292
+ codereview-not-last:chorus_list_tasks)
293
+ echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"in_progress","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
294
+ ;;
295
+ codereview-not-last:chorus_get_documents)
296
+ echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
297
+ ;;
298
+
299
+ # codereview-ordering: idea-rooted, all done, NO report Document ->
300
+ # BOTH Branch C (spawn code-reviewer) and Branch B (create idea-
301
+ # completion report) fire. Used to assert C precedes B in the output.
302
+ codereview-ordering:chorus_get_task)
303
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
304
+ ;;
305
+ codereview-ordering:chorus_get_proposal)
306
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no slug.","inputType":"idea","inputUuids":["idea-9"]}'
307
+ ;;
308
+ codereview-ordering:chorus_list_tasks)
309
+ echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
310
+ ;;
311
+ codereview-ordering:chorus_get_documents)
312
+ echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
313
+ ;;
314
+
248
315
  *)
249
316
  # Unhandled (tool, fixture) — return empty, hook should silent-skip.
250
317
  echo ""
@@ -279,6 +346,7 @@ tool="${1:-}"
279
346
  fixture="${CHORUS_FIXTURE:-positive}"
280
347
  case "$fixture" in
281
348
  mode-off|no-folder|no-cli) fixture=positive ;;
349
+ codereview-toggle-off) fixture=codereview-positive ;;
282
350
  esac
283
351
  case "${fixture}:${tool}" in
284
352
  # ----- Branch A fixtures (existing) -----
@@ -391,6 +459,65 @@ case "${fixture}:${tool}" in
391
459
  echo '{"documents":[{"uuid":"doc-other","type":"report","title":"Some other report","proposalUuid":"prop-OTHER"}],"total":25,"page":1,"pageSize":200}'
392
460
  ;;
393
461
 
462
+ # ----- Branch C fixtures (code-review gateway reminder) -----
463
+ # codereview-positive: idea-rooted, all done, report Document already
464
+ # exists (Branch B silent) -> ONLY Branch C fires.
465
+ codereview-positive:chorus_get_task)
466
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
467
+ ;;
468
+ codereview-positive:chorus_get_proposal)
469
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no OpenSpec slug.","inputType":"idea","inputUuids":["idea-9"]}'
470
+ ;;
471
+ codereview-positive:chorus_list_tasks)
472
+ echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
473
+ ;;
474
+ codereview-positive:chorus_get_documents)
475
+ echo '{"documents":[{"uuid":"doc-r1","type":"report","title":"Idea 9 — completion report","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
476
+ ;;
477
+
478
+ # codereview-not-idea: inputType != "idea" -> Branch C silent.
479
+ codereview-not-idea:chorus_get_task)
480
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
481
+ ;;
482
+ codereview-not-idea:chorus_get_proposal)
483
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Manual proposal.","inputType":"manual","inputUuids":[]}'
484
+ ;;
485
+ codereview-not-idea:chorus_list_tasks)
486
+ echo '{"tasks":[{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":1,"page":1,"pageSize":200}'
487
+ ;;
488
+ codereview-not-idea:chorus_get_documents)
489
+ echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
490
+ ;;
491
+
492
+ # codereview-not-last: a task still in_progress -> Branch C silent.
493
+ codereview-not-last:chorus_get_task)
494
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
495
+ ;;
496
+ codereview-not-last:chorus_get_proposal)
497
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal.","inputType":"idea","inputUuids":["idea-9"]}'
498
+ ;;
499
+ codereview-not-last:chorus_list_tasks)
500
+ echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"in_progress","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
501
+ ;;
502
+ codereview-not-last:chorus_get_documents)
503
+ echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
504
+ ;;
505
+
506
+ # codereview-ordering: idea-rooted, all done, NO report -> BOTH C and B
507
+ # fire; used to assert C precedes B in the combined output.
508
+ codereview-ordering:chorus_get_task)
509
+ echo '{"uuid":"task-9","title":"Task 9","status":"done","proposalUuid":"prop-9","project":{"uuid":"proj-1","name":"P"}}'
510
+ ;;
511
+ codereview-ordering:chorus_get_proposal)
512
+ printf '%s' '{"uuid":"prop-9","title":"P9","description":"Free-form proposal — no slug.","inputType":"idea","inputUuids":["idea-9"]}'
513
+ ;;
514
+ codereview-ordering:chorus_list_tasks)
515
+ echo '{"tasks":[{"uuid":"task-7","status":"done","proposalUuid":"prop-9"},{"uuid":"task-8","status":"closed","proposalUuid":"prop-9"},{"uuid":"task-9","status":"done","proposalUuid":"prop-9"}],"total":3,"page":1,"pageSize":200}'
516
+ ;;
517
+ codereview-ordering:chorus_get_documents)
518
+ echo '{"documents":[],"total":0,"page":1,"pageSize":200}'
519
+ ;;
520
+
394
521
  *)
395
522
  echo "" ;;
396
523
  esac
@@ -478,6 +605,13 @@ run_one() {
478
605
  MODE_VAR_FOR_RUN="off"
479
606
  fi
480
607
 
608
+ # The "codereview-toggle-off" fixture disables Branch C via the plugin
609
+ # option env var; everything else leaves it unset (defaults to enabled).
610
+ local CODEREVIEW_OPT_FOR_RUN=""
611
+ if [ "$fixture" = "codereview-toggle-off" ]; then
612
+ CODEREVIEW_OPT_FOR_RUN="false"
613
+ fi
614
+
481
615
  local stdout_file
482
616
  stdout_file=$(mktemp)
483
617
  local stderr_file
@@ -491,6 +625,7 @@ run_one() {
491
625
  PATH="$PATH_FOR_RUN" \
492
626
  CLAUDE_PROJECT_DIR="$PROJECT_DIR_FOR_RUN" \
493
627
  CHORUS_OPENSPEC_MODE="$MODE_VAR_FOR_RUN" \
628
+ CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER="$CODEREVIEW_OPT_FOR_RUN" \
494
629
  /bin/bash -c "cd \"$PROJECT_DIR_FOR_RUN\" && /bin/bash \"$hook_dir/on-post-verify-task.sh\"" \
495
630
  >"$stdout_file" 2>"$stderr_file" || rc=$?
496
631
 
@@ -517,6 +652,29 @@ run_one() {
517
652
  FAIL=$((FAIL + 1))
518
653
  FAILED="$FAILED $name[$variant]"
519
654
  fi
655
+ elif [ "$assertion_mode" = "must-precede" ]; then
656
+ # $expected MUST appear, $forbidden MUST appear, and $expected's first
657
+ # occurrence MUST come before $forbidden's. Used to assert Branch C
658
+ # (code-review) is injected before Branch B (completion report). The
659
+ # whole payload is a single JSON line, so compare byte offsets (grep
660
+ # -bo), not line numbers.
661
+ local off_expected off_forbidden
662
+ off_expected=$(printf '%s' "$stdout" | grep -bo "$expected" | head -1 | cut -d: -f1)
663
+ off_forbidden=$(printf '%s' "$stdout" | grep -bo "$forbidden" | head -1 | cut -d: -f1)
664
+ if [ -z "$off_expected" ] || [ -z "$off_forbidden" ]; then
665
+ echo " FAIL $name [$variant]: expected both '$expected' and '$forbidden' present (got offsets '$off_expected' / '$off_forbidden')"
666
+ printf '%s\n' "$stdout" | sed 's/^/ /'
667
+ FAIL=$((FAIL + 1))
668
+ FAILED="$FAILED $name[$variant]"
669
+ elif [ "$off_expected" -lt "$off_forbidden" ]; then
670
+ echo " PASS $name [$variant]"
671
+ PASS=$((PASS + 1))
672
+ else
673
+ echo " FAIL $name [$variant]: '$expected' (offset $off_expected) does not precede '$forbidden' (offset $off_forbidden)"
674
+ printf '%s\n' "$stdout" | sed 's/^/ /'
675
+ FAIL=$((FAIL + 1))
676
+ FAILED="$FAILED $name[$variant]"
677
+ fi
520
678
  else
521
679
  # must-not-contain: $forbidden MUST be absent.
522
680
  if printf '%s' "$stdout" | grep -q "$forbidden"; then
@@ -607,6 +765,38 @@ run_one "report-task-overflow" "report-task-overflow" "codex" "must-not-contain
607
765
  run_one "report-doc-overflow" "report-doc-overflow" "claude" "must-not-contain" "" "create idea-completion report"
608
766
  run_one "report-doc-overflow" "report-doc-overflow" "codex" "must-not-contain" "" "create idea-completion report"
609
767
 
768
+ # ===== Branch C: Code-review gateway reminder fixtures =====
769
+ # (assertion: must-contain `spawn code-reviewer` / must-not-contain `spawn code-reviewer`)
770
+ # These fixtures use a non-OpenSpec proposal description (no slug line),
771
+ # so Branch A silent-skips, isolating Branch C behavior.
772
+
773
+ # C1: codereview-positive — last task of an idea-rooted proposal verified,
774
+ # code-reviewer enabled (default). A report Document already exists so
775
+ # Branch B is silent; ONLY Branch C fires -> reminder MUST contain
776
+ # `spawn code-reviewer`.
777
+ run_one "codereview-positive" "codereview-positive" "claude" "must-contain" "spawn code-reviewer"
778
+ run_one "codereview-positive" "codereview-positive" "codex" "must-contain" "spawn code-reviewer"
779
+
780
+ # C2: codereview-toggle-off — same data as positive but
781
+ # CLAUDE_PLUGIN_OPTION_ENABLECODEREVIEWER=false -> Branch C MUST be silent.
782
+ run_one "codereview-toggle-off" "codereview-toggle-off" "claude" "must-not-contain" "" "spawn code-reviewer"
783
+ run_one "codereview-toggle-off" "codereview-toggle-off" "codex" "must-not-contain" "" "spawn code-reviewer"
784
+
785
+ # C3: codereview-not-idea — proposal.inputType != "idea" -> Branch C
786
+ # MUST skip at the idea-rooted gate.
787
+ run_one "codereview-not-idea" "codereview-not-idea" "claude" "must-not-contain" "" "spawn code-reviewer"
788
+ run_one "codereview-not-idea" "codereview-not-idea" "codex" "must-not-contain" "" "spawn code-reviewer"
789
+
790
+ # C4: codereview-not-last — a task still in_progress -> Branch C silent.
791
+ run_one "codereview-not-last" "codereview-not-last" "claude" "must-not-contain" "" "spawn code-reviewer"
792
+ run_one "codereview-not-last" "codereview-not-last" "codex" "must-not-contain" "" "spawn code-reviewer"
793
+
794
+ # C5: codereview-ordering — idea-rooted, all done, NO report Document, so
795
+ # BOTH Branch C and Branch B fire. The code-review reminder MUST precede
796
+ # the completion-report reminder in the combined output.
797
+ run_one "codereview-ordering" "codereview-ordering" "claude" "must-precede" "spawn code-reviewer" "create idea-completion report"
798
+ run_one "codereview-ordering" "codereview-ordering" "codex" "must-precede" "spawn code-reviewer" "create idea-completion report"
799
+
610
800
  echo ""
611
801
  echo "Results: $PASS passed, $FAIL failed"
612
802
 
@@ -4,7 +4,7 @@ description: Optional divergent-then-convergent dialogue for fuzzy ideas. Invoke
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.10.0"
7
+ version: "0.11.1"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -4,7 +4,7 @@ description: Chorus AI Agent collaboration platform — overview, common tools,
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.10.0"
7
+ version: "0.11.1"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -308,12 +308,14 @@ The table below shows default tool availability for each preset (no custom permi
308
308
 
309
309
  ### 5. Review Agent Configuration
310
310
 
311
- The plugin includes two independent review agents. After proposal submission or task verification, a PostToolUse hook injects context instructing the main agent to spawn the reviewer. The main agent must spawn it manually — it is NOT auto-launched. Both are **enabled by default**.
311
+ The plugin includes three independent review agents. After proposal submission, task verification, or the last task of an idea-rooted proposal being verified, a PostToolUse hook injects context instructing the main agent to spawn the reviewer. The main agent must spawn it manually — it is NOT auto-launched. All are **enabled by default**.
312
312
 
313
313
  | Setting | Controls | Default |
314
314
  |---------|----------|---------|
315
315
  | `enableProposalReviewer` | Spawn `chorus:proposal-reviewer` after `chorus_pm_submit_proposal` | `true` (enabled) |
316
316
  | `enableTaskReviewer` | Spawn `chorus:task-reviewer` after `chorus_submit_for_verify` | `true` (enabled) |
317
+ | `enableCodeReviewer` | Spawn `chorus:code-reviewer` over the Idea's aggregate change after its last task is verified (final ship gateway) | `true` (enabled) |
318
+ | `maxCodeReviewRounds` | Max code-review rounds before escalating to a human (0 = unlimited) | `3` |
317
319
 
318
320
  To disable, reconfigure the plugin via `/plugin` settings or manually edit `~/.claude/settings.json`:
319
321
 
@@ -323,14 +325,15 @@ To disable, reconfigure the plugin via `/plugin` settings or manually edit `~/.c
323
325
  "chorus@chorus-plugins": {
324
326
  "options": {
325
327
  "enableProposalReviewer": false,
326
- "enableTaskReviewer": false
328
+ "enableTaskReviewer": false,
329
+ "enableCodeReviewer": false
327
330
  }
328
331
  }
329
332
  }
330
333
  }
331
334
  ```
332
335
 
333
- When enabled, reviewers run as read-only sub-agents and post a VERDICT comment on the proposal/task. Three possible outcomes: **PASS** (no issues), **PASS WITH NOTES** (minor non-blocking notes), or **FAIL** (BLOCKERs found). Results are advisory — they do not block approval or verification. Disabling reduces token usage but removes the independent quality gate.
336
+ When enabled, reviewers run as read-only sub-agents and post a VERDICT comment on the proposal/task/idea. Three possible outcomes: **PASS** (no issues), **PASS WITH NOTES** (minor non-blocking notes), or **FAIL** (BLOCKERs found). Results are advisory — they do not block approval, verification, or ship; the code-review gateway in particular is behavioral (it does not change the Idea's stored status). On a code-review FAIL, fix it via the `/chorus:quick-dev` workflow: `chorus_create_tasks` with `proposalUuid` set to the current approved proposal so the fix tasks attach to it, then execute → verify and re-run the gateway. Disabling reduces token usage but removes the independent quality gate.
334
337
 
335
338
  ---
336
339
 
@@ -4,7 +4,7 @@ description: Chorus Development workflow — claim tasks, report work, manage se
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.10.0"
7
+ version: "0.11.1"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -237,6 +237,8 @@ Find the most recent comment containing `VERDICT:` and act on it:
237
237
 
238
238
  If no new `VERDICT:` comment appears after the reviewer returns, it exhausted its `maxTurns` budget before posting. Respawn it ONCE with a concise-budget hint in the prompt: *"Stay within turn budget. Skip deep verification. Fetch task/proposal/comments, run only the core tests, and post your VERDICT comment within the first 12 turns."* If the second attempt still produces no VERDICT, review manually using the checklist and proceed.
239
239
 
240
+ > **Final code-review gateway (after the Idea's LAST task is verified):** when the task you just verified is the **last** task of its idea-rooted proposal, the feature is about to ship — the PostToolUse hook injects a reminder to spawn `chorus:code-reviewer` (gated by `enableCodeReviewer`, default on). Spawn it yourself in **foreground**, passing the `ideaUuid` + round number; it reviews the Idea's **aggregate** code change across all its tasks (cross-task integration, architecture, security, regression, feature-level coverage) and posts one `VERDICT` comment on the **idea**. `PASS` / `PASS WITH NOTES` → ship; `FAIL` → fix via `/chorus:quick-dev` (`chorus_create_tasks` with `proposalUuid` set to the current approved proposal so the fix tasks attach to it — do NOT reopen the verified tasks), then re-run the gateway, bounded by `maxCodeReviewRounds`. Advisory/behavioral, like the other reviewers. Run it **before** any idea-completion report.
241
+
240
242
  ### Step 9: Handle Review Feedback
241
243
 
242
244
  If the reviewer returns **FAIL**, or the task is reopened after verification: