@chorus-aidlc/chorus 0.17.2 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +357 -355
- package/.next/standalone/.next/app-path-routes-manifest.json +44 -44
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +18 -18
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +3 -3
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +44 -44
- package/.next/standalone/.next/server/chunks/109.js +1 -0
- package/.next/standalone/.next/server/chunks/1318.js +1 -1
- package/.next/standalone/.next/server/chunks/1496.js +1 -0
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/2572.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3112.js +1 -1
- package/.next/standalone/.next/server/chunks/{2536.js → 3619.js} +3 -3
- package/.next/standalone/.next/server/chunks/{6080.js → 4810.js} +1 -1
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6506.js +2 -2
- package/.next/standalone/.next/server/chunks/6515.js +2 -2
- package/.next/standalone/.next/server/chunks/6737.js +1 -0
- package/.next/standalone/.next/server/chunks/6753.js +3 -3
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/731.js +1 -0
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/7857.js +1 -0
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/9931.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/11595.0afa1a540f681fb4.js +1 -0
- package/.next/standalone/.next/static/chunks/22705-324a191727ae45b7.js +1 -0
- package/.next/standalone/.next/static/chunks/{31308-32614efb88305738.js → 31308-bb4a97b3f39c22dd.js} +1 -1
- package/.next/standalone/.next/static/chunks/33456.4a5f4712a7e78d8f.js +1 -0
- package/.next/standalone/.next/static/chunks/44216-3876e84f5b02d355.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.5719e32b95be2d93.js +1 -0
- package/.next/standalone/.next/static/chunks/6528-a8a562ef7d26bb43.js +1 -0
- package/.next/standalone/.next/static/chunks/67439-7b339b28ed0ecfc6.js +1 -0
- package/.next/standalone/.next/static/chunks/79919-ae8bd8d8ec1e38ce.js +1 -0
- package/.next/standalone/.next/static/chunks/82203-4ce5926624df7ed0.js +1 -0
- package/.next/standalone/.next/static/chunks/94643-37ac7b8ef8ea5e75.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.6c1509bfaf599741.js +1 -0
- package/.next/standalone/.next/static/chunks/99775-697e82ee04eac6b1.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-2fda722cdace8147.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-eecb38fa4b8eb4e8.js → page-b45c42c536eff64b.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-792aba7fd6b6daa3.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-cd7ec77596304a07.js → page-800a979f12b73f27.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-97a9e6f949002004.js → page-34de35f75aa71f6d.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-a16002aa2a911619.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/{page-cec15f4b835d34fc.js → page-e8030824994edf35.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-4f7f1ddbaf79be8f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-4ee117e690fda56f.js → page-349b0977f3c6209a.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-7fbc46dfb7b22bd3.js → page-be43cb06112fce12.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-6916e1abab42a6e6.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-4fce966dc96d4ff1.js → page-c0090caae202eae5.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-1bfc783412a06fc5.js → webpack-cfb63dd1b416c92e.js} +1 -1
- package/.next/standalone/.next/static/css/75c761a5428611fa.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +2 -2
- package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +1 -0
- package/.next/standalone/public/chorus-plugin/agents/proposal-reviewer.md +12 -3
- package/.next/standalone/public/chorus-plugin/agents/task-reviewer.md +4 -0
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +39 -64
- package/.next/standalone/public/chorus-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-resolver-drift.sh +46 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity-negative.sh +328 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity.sh +372 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-spec-mode-resolution.sh +83 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +11 -6
- package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +14 -9
- package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +27 -31
- package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +11 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +14 -7
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +6 -4
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +10 -8
- package/.next/standalone/public/chorus-plugin/skills/spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +49 -34
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +2 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +9 -7
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +35 -27
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +9 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +14 -7
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +8 -8
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +39 -25
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +11 -6
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +41 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/kiro-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/kiro-plugin/manifest.txt +2 -0
- package/.next/standalone/public/skill/chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -0
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +5 -2
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +5 -3
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +4 -0
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +23 -7
- package/README.ja.md +3 -3
- package/README.ko.md +3 -3
- package/README.md +3 -3
- package/README.zh.md +3 -3
- package/cli/agent-cli-config.mjs +323 -0
- package/cli/agent-launcher.mjs +45 -17
- package/cli/claude-spawner.mjs +22 -13
- package/cli/codex-spawner.mjs +23 -15
- package/cli/credentials.mjs +7 -0
- package/cli/daemon-agent.mjs +1 -1
- package/cli/daemon-config.mjs +14 -0
- package/cli/daemon.mjs +34 -9
- package/cli/dsh-managed-config.mjs +219 -293
- package/cli/dsh-spawner.mjs +53 -27
- package/cli/init/steps/credential-seed.mjs +1 -1
- package/cli/kiro-spawner.mjs +22 -15
- package/cli/launch-diagnostics.mjs +67 -0
- package/cli/login.mjs +17 -1
- package/cli/pi-spawner.mjs +19 -12
- package/cli/prompts.mjs +52 -2
- package/cli/spawner-select.mjs +6 -11
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/1114.js +0 -1
- package/.next/standalone/.next/server/chunks/2953.js +0 -1
- package/.next/standalone/.next/server/chunks/5162.js +0 -1
- package/.next/standalone/.next/server/chunks/6689.js +0 -1
- package/.next/standalone/.next/server/chunks/9667.js +0 -1
- package/.next/standalone/.next/static/chunks/11595.b81c0bf7732c3b62.js +0 -1
- package/.next/standalone/.next/static/chunks/24808-e3d95efc7ec039c5.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.cfc9aa607a62e879.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.41351a823cf400e4.js +0 -1
- package/.next/standalone/.next/static/chunks/51468-194d894e563580dd.js +0 -1
- package/.next/standalone/.next/static/chunks/61570-527701d072d00a24.js +0 -1
- package/.next/standalone/.next/static/chunks/65066-6da35d5cb080c7f5.js +0 -1
- package/.next/standalone/.next/static/chunks/72875-0987d09cd8406614.js +0 -1
- package/.next/standalone/.next/static/chunks/75936-79860953212592fd.js +0 -1
- package/.next/standalone/.next/static/chunks/79919-e02963faee5cb563.js +0 -1
- package/.next/standalone/.next/static/chunks/94643-e8f5fa25e2340cc8.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.633f7c25e64bcdac.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-bb5ef11586301c72.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-725373108da1b08c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-7d2f4713697eb0a7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0225f87552b977d9.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-8b30678a58e7b2ee.js +0 -1
- package/.next/standalone/.next/static/css/1d9cf83f50b6db00.css +0 -1
- /package/.next/standalone/.next/static/{WSN4XeA1kUCI6CeEHcaT_ → IxKVu5zkFPTjSKAUR99yH}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{WSN4XeA1kUCI6CeEHcaT_ → IxKVu5zkFPTjSKAUR99yH}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ description: Multi-agent orchestration playbook — coordinate OTHER agents and
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.18.0"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -104,6 +104,14 @@ Guidance: start narrow. If a single owner can hold the whole feature in their he
|
|
|
104
104
|
|
|
105
105
|
---
|
|
106
106
|
|
|
107
|
+
## Replying to the agent who woke you (advisory)
|
|
108
|
+
|
|
109
|
+
When an agent wakes a peer on a shared idea or task — an orchestrator dispatching a worker, or any agent `@mention`-ing another — the wake surfaces the **waker's live session anchor**: a note naming the waking agent and telling the woken peer that the waker has an open conversation on this idea. If you are the woken peer, **reply on the same idea/task resource** (comment there rather than opening a brand-new session) and your reply lands back in the waker's existing live session, keeping the collaboration on one thread instead of scattering into a fresh one.
|
|
110
|
+
|
|
111
|
+
This is **advisory, not routing.** There is no automatic server subscription and nothing is force-delivered — replying on the shared resource is simply *where a reply lands* (via the existing return path), not a guaranteed channel. When the waker's origin is **offline** at wake time, no live anchor is surfaced and the exchange degrades to **notify-only**: the reply reaches the waker as an ordinary notification it picks up on its next turn. Only idea/theme-anchored wakes carry this anchor; ad-hoc wakes with no shared idea do not.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
107
115
|
## Reversed-Conversation gates (you never auto-ship)
|
|
108
116
|
|
|
109
117
|
Chorus is **AI proposes, humans verify**. As orchestrator you enforce that, you do not bypass it:
|
|
@@ -4,7 +4,7 @@ description: Chorus Proposal workflow — create proposals with document and tas
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.18.0"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -69,7 +69,9 @@ Elaboration resolved --> Create Proposal --> Add drafts --> Validate --> Submit
|
|
|
69
69
|
|
|
70
70
|
### Step 1: Create an Empty Proposal
|
|
71
71
|
|
|
72
|
-
**
|
|
72
|
+
**Resolve the spec mode (Step 1.5) BEFORE this create.** In OpenSpec and spec-lite modes the container's `description` MUST carry a locator line (`OpenSpec change slug: <slug>` or `Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/`), and `description` can only be set at creation — decide the mode + slug/dated-path first and include that line in this single call. Free-form mode omits any locator line.
|
|
73
|
+
|
|
74
|
+
**Recommended approach:** Create the proposal container first (with the mode's locator line in `description` when applicable), then incrementally add document and task drafts one by one.
|
|
73
75
|
|
|
74
76
|
```
|
|
75
77
|
chorus_pm_create_proposal({
|
|
@@ -85,15 +87,20 @@ chorus_pm_create_proposal({
|
|
|
85
87
|
|
|
86
88
|
> **A theme cannot be a proposal input** — `chorus_pm_create_proposal` rejects any input idea with `isContainer = true`. Derive a child idea from the theme and write the proposal on the child instead. (See the theme-ideas section of the `/chorus-idea` skill.)
|
|
87
89
|
|
|
88
|
-
### Step 1.5:
|
|
90
|
+
### Step 1.5: Select spec mode
|
|
91
|
+
|
|
92
|
+
The spec mode is **already computed** by the `agentSpawn` hook (`bin/resolve-spec-mode.sh`) — do NOT re-derive it. Read the `## Spec Mode` section of your startup context: it states `CHORUS_SPEC_MODE=<lite|openspec|off>` + a routing note. (No `## Spec Mode` in context? Source the same resolver — `/chorus-openspec-aware` §1 manual fallback — never hand-roll the rule.) Act on that value:
|
|
93
|
+
|
|
94
|
+
- If the section says the mode **cannot be honored** (explicit `CHORUS_SPEC_MODE=openspec` but OpenSpec unusable — config-conflict or install-hint reason), **halt** and surface it; do not fall back.
|
|
95
|
+
- Otherwise branch on the resolved mode:
|
|
89
96
|
|
|
90
|
-
|
|
97
|
+
- **resolved = spec-lite** → load `/chorus-spec-lite` and follow it: pick `$SLUG` (a **capability**, not one change). Ensure the durable `.chorus/specs/<slug>/spec.md` exists (local-only, **no Chorus ids**; use the `spec-lite` skill's inline durable-spec template) and update it in place. Create this change's **dated folder** `.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` with its **synced** Chorus-typed docs (`prd.md` primary, optional `tech_design.md`…; use the `spec-lite` skill's inline dated-folder document template). Put the literal locator line `Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` in the **Step 1 create** `description`, then mirror **each** dated-folder `<type>.md` to its persistent Document (`chorus_pm_add_document_draft --arg-file` first time, `chorus_pm_update_document --arg-file` after) via `chorus mcp call … --arg-file content=.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/<type>.md`. **`spec.md` is never mirrored.** Skip Step 2 below. (Tasks via `chorus_pm_add_task_draft`; no `tasks.md`.)
|
|
91
98
|
|
|
92
|
-
-
|
|
99
|
+
- **resolved = OpenSpec** (the `## Spec Mode` section shows `CHORUS_OPENSPEC_ACTIVE=1` — i.e. `CHORUS_SPEC_MODE=openspec` *or* unset, with OpenSpec usable) → follow `/chorus-openspec-aware` §3. Pick `$SLUG`, scaffold `openspec/changes/<slug>/`, author `proposal.md` / `design.md` / `specs/<capability>/spec.md` locally, then put the literal line `OpenSpec change slug: <slug>` in the **Step 1 create** `description`, and mirror each local file into a document draft.
|
|
93
100
|
|
|
94
|
-
> **⛔ Mandatory in OpenSpec mode:** mirror calls fill `content` from the local file — prefer `chorus mcp call … --arg-file content=<file>`, falling back to the `chorus-api.sh` wrapper with `json_encode_file` when `chorus` is not on `PATH` — see `/chorus-openspec-aware` §3.6. Do **not** call `chorus_pm_add_document_draft` directly
|
|
101
|
+
> **⛔ Mandatory in OpenSpec mode:** mirror calls fill `content` from the local file — prefer `chorus mcp call … --arg-file content=<file>`, falling back to the `chorus-api.sh` wrapper with `json_encode_file` when `chorus` is not on `PATH` — see `/chorus-openspec-aware` §3.6. Do **not** call `chorus_pm_add_document_draft` directly with a hand-typed `content` field. Re-typing thousands of lines burns 20k+ content tokens per proposal and breaks byte-equality (`/chorus-openspec-aware` §2 Rule 1). Skip Step 2 when in OpenSpec mode — the file-fill flow replaces it for documents.
|
|
95
102
|
|
|
96
|
-
-
|
|
103
|
+
- **resolved = free-form** (explicit `CHORUS_SPEC_MODE=off`) → proceed with Step 2 unchanged. Author drafts inline as free-form Markdown via direct MCP `chorus_pm_add_document_draft`.
|
|
97
104
|
|
|
98
105
|
### Step 2: Add Document Drafts
|
|
99
106
|
|
|
@@ -4,7 +4,7 @@ description: Quick Task workflow — skip Idea→Proposal, create tasks directly
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.18.0"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -152,7 +152,7 @@ chorus_submit_for_verify({
|
|
|
152
152
|
})
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
-
Submitting is not final verification. Spawn the required native task-reviewer subagent as described in `/chorus-develop`, wait for it, and read
|
|
155
|
+
Submitting is not final verification. Spawn the required native task-reviewer subagent as described in `/chorus-develop`, wait for it, and read THIS round's `VERDICT:` Task comment — the one posted after your dispatch, not an older round's. `PASS` and `PASS WITH NOTES` continue. On `FAIL`, do not verify or hand off: fix every unresolved BLOCKER, repeat AC self-check and submission, then run a fresh independent task review.
|
|
156
156
|
|
|
157
157
|
### Step 8: Permission-Aware Verification
|
|
158
158
|
|
|
@@ -4,7 +4,7 @@ description: Chorus Review workflow — approve/reject proposals, verify tasks,
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.18.0"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -64,13 +64,13 @@ Key responsibilities:
|
|
|
64
64
|
|
|
65
65
|
When reviewing proposals, tasks, or an Idea's final aggregate code change, prefer spawning an independent reviewer subagent over reviewing manually:
|
|
66
66
|
|
|
67
|
-
1. **Try the reviewer first.** Spawn the `chorus-proposal-reviewer` (for proposals), `chorus-task-reviewer` (for tasks), or `chorus-code-reviewer` (the final ship-time gateway over an Idea's aggregate code change, after its last task is verified — pass the `ideaUuid`; it posts its VERDICT on the **idea**) as a read-only subagent.
|
|
68
|
-
2. **Read
|
|
67
|
+
1. **Try the reviewer first.** Spawn the `chorus-proposal-reviewer` (for proposals), `chorus-task-reviewer` (for tasks), or `chorus-code-reviewer` (the final ship-time gateway over an Idea's aggregate code change, after its last task is verified — pass the `ideaUuid`; it posts its VERDICT on the **idea**) as a read-only subagent. Then wait for the `subagent` call to return — that is this harness's waiting mechanism. It posts a VERDICT comment with detailed findings; the `subagent` call's own return value is not the verdict.
|
|
68
|
+
2. **Read THIS round's VERDICT.** After the reviewer completes, call `chorus_get_comments` for the entity under review and find the `VERDICT:` comment posted **after your dispatch** — not an older round's. Do not advance the pipeline before you have read that comment. There are exactly three possible outcomes:
|
|
69
69
|
- **VERDICT: PASS** — No issues found. Approve (proposals) or mark AC passed and verify (tasks).
|
|
70
70
|
- **VERDICT: PASS WITH NOTES** — Minor non-blocking notes. Still approve/verify. Notes are informational.
|
|
71
71
|
- **VERDICT: FAIL** — BLOCKERs found. Reject (proposals) or reopen (tasks). Fix the specific BLOCKERs listed in the comment before resubmitting.
|
|
72
|
-
3. **No new VERDICT comment?**
|
|
73
|
-
4. **Track rounds.** Count existing VERDICT comments before spawning. After 3 rounds of FAIL on the same item, stop the loop and escalate to human review.
|
|
72
|
+
3. **No new VERDICT comment?** Check what the reviewer *did* post. A comment reporting that the round limit was reached, or any other explicit refusal to review, is a deliberate escalation to a human: STOP — do not respawn, do not self-review, do not post a VERDICT of your own. If it posted nothing at all, respawn it ONCE, telling it to stay within its turn budget and reserve its last turns for the VERDICT, then apply this same check again to what the retry posts. An explicit refusal from the retry still means STOP; only a second true silence lets you review the item yourself as a read-only pass using the checklists below and POST the VERDICT — **absence is never a PASS**.
|
|
73
|
+
4. **Track rounds.** Count existing VERDICT comments before spawning. After 3 rounds of FAIL on the same item, stop the loop and escalate to human review: post a comment saying the round limit was reached and a human decision is needed, and post no VERDICT. Nobody — including you on a later turn — may replace that escalation with a self-reviewed VERDICT.
|
|
74
74
|
5. **Fallback.** If the reviewer is unavailable (e.g., subagent spawn fails), review the item yourself using the quality checklists in the workflows below.
|
|
75
75
|
|
|
76
76
|
---
|
|
@@ -145,7 +145,7 @@ chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
|
145
145
|
|
|
146
146
|
#### A3.5: Independent Review
|
|
147
147
|
|
|
148
|
-
Spawn the `chorus-proposal-reviewer` per the [Review Strategy](#review-strategy) above
|
|
148
|
+
Spawn the `chorus-proposal-reviewer` per the [Review Strategy](#review-strategy) above, wait for the `subagent` call to return, then read THIS round's VERDICT comment on the proposal before proceeding.
|
|
149
149
|
|
|
150
150
|
#### A4: Approve or Reject
|
|
151
151
|
|
|
@@ -210,14 +210,14 @@ chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
|
|
|
210
210
|
|
|
211
211
|
#### B2.5: Independent Review
|
|
212
212
|
|
|
213
|
-
Spawn the `chorus-task-reviewer` per the [Review Strategy](#review-strategy) above
|
|
213
|
+
Spawn the `chorus-task-reviewer` per the [Review Strategy](#review-strategy) above. After it completes, read THIS round's VERDICT on the task:
|
|
214
214
|
|
|
215
215
|
- **VERDICT: PASS** or **PASS WITH NOTES** → proceed to B3 (mark AC) and B4 (verify).
|
|
216
216
|
- **VERDICT: FAIL** → skip to B4 and **reopen** the task. Do NOT mark AC as passed.
|
|
217
217
|
|
|
218
218
|
#### B2.6: Final Code-Review Gateway (after an Idea's LAST task is verified)
|
|
219
219
|
|
|
220
|
-
When the task you just verified is the **last** task of its idea-rooted proposal, run the ship-time code-review gateway before the Idea's code is considered shipped. The `postToolUse` hook injects a reminder to spawn the `chorus-code-reviewer`. Spawn it per the [Review Strategy](#review-strategy)
|
|
220
|
+
When the task you just verified is the **last** task of its idea-rooted proposal, run the ship-time code-review gateway before the Idea's code is considered shipped. The `postToolUse` hook injects a reminder to spawn the `chorus-code-reviewer`. Spawn it per the [Review Strategy](#review-strategy), passing the `ideaUuid` + round number, and wait for the `subagent` call to return before reading THIS round's verdict. It reviews the Idea's **aggregate** code change across all its tasks — cross-task integration, architecture/convention consistency, security, regression/performance, feature-level test coverage — dimensions a single-task review cannot see — and posts one `VERDICT` comment on the **idea**.
|
|
221
221
|
|
|
222
222
|
- **VERDICT: PASS** / **PASS WITH NOTES** → the feature may ship.
|
|
223
223
|
- **VERDICT: FAIL** → do not reopen the verified tasks; instead add new fix tasks to the approved proposal via `/chorus-quick-dev` (`chorus_create_tasks` with `proposalUuid` set to the current approved proposal so the fix tasks attach to it). Group related small BLOCKERs by default; split only materially large or independently testable fixes. Require AC self-check, independent task review, and admin verification for every fix task. Re-run aggregate review only after every fix is successfully `done`; a failed or cancelled fix stops the loop and escalates. Bounded by `maxCodeReviewRounds`.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: chorus-spec-lite
|
|
3
|
+
description: Lightweight, Chorus-native local specs for Chorus PM workflows in Kiro CLI — a durable local spec `.chorus/specs/<slug>/spec.md` (one per capability/feature) edited in place and NEVER synced (git history is its record), plus one dated folder per change effort `.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` holding Chorus-typed docs (prd.md, tech_design.md, …) that ARE mirrored 1:1 into persistent Chorus Documents via `--arg-file`. The fallback when OpenSpec isn't in use; a low-token alternative to the heavier chorus-openspec-aware path. Read from chorus-proposal / chorus-develop / chorus-yolo when the spec mode resolves to `lite`.
|
|
4
|
+
license: AGPL-3.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.18.0"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# spec-lite — durable local spec + per-change synced docs
|
|
13
|
+
|
|
14
|
+
A **shared sub-procedure** for the Chorus stage skills (proposal, develop, yolo) — the lightweight
|
|
15
|
+
spec mode, modelled on **superpowers** (a durable spec that lives on, plus per-effort artifacts):
|
|
16
|
+
one **durable local spec** per capability (`<slug>/spec.md`, edited in place, **never synced** — git
|
|
17
|
+
history is its 留痕), plus one **dated folder per change effort** (`<slug>/<YYYY-MM-DD>-<change-slug>/`
|
|
18
|
+
of Chorus-typed docs — `prd.md`, … — that **are** mirrored 1:1 into persistent Chorus Documents).
|
|
19
|
+
No new CLI, MCP tool, backend, or schema — mirroring reuses the existing document tools.
|
|
20
|
+
|
|
21
|
+
## Mode (how you got here)
|
|
22
|
+
|
|
23
|
+
The spec mode is computed by the `agentSpawn` hook (`bin/resolve-spec-mode.sh`), **not by you** — the
|
|
24
|
+
`## Spec Mode` section of your context states the resolved `CHORUS_SPEC_MODE`. You are here because it
|
|
25
|
+
resolved to `lite`; if it is anything else, this skill is a no-op — return to the caller. (For the
|
|
26
|
+
record, the hook's rule: an explicit `CHORUS_SPEC_MODE` wins, else OpenSpec when usable, else lite.)
|
|
27
|
+
|
|
28
|
+
## The durable local spec — `<slug>/spec.md`
|
|
29
|
+
|
|
30
|
+
`.chorus/specs/<slug>/spec.md` — `<slug>` (kebab-case) names a **capability/feature, not one change**.
|
|
31
|
+
This is the single, cumulative, human-readable "current truth" of the capability: **edited in place**
|
|
32
|
+
by every change, **never mirrored to Chorus, carries no Chorus ids**. Minimal frontmatter only
|
|
33
|
+
(`slug`, `title`, `status: draft|active|done`, `created`), then plain prose — `## Intent`,
|
|
34
|
+
`## Requirements` (prose + `- [ ]` acceptance points, no `SHALL`/scenario grammar), `## Non-goals`.
|
|
35
|
+
Start from the inline **durable `spec.md` template** below. Its git history is the whole record — no changelog
|
|
36
|
+
section, no Chorus round-trip. **This file NEVER enters the mirror loop.**
|
|
37
|
+
|
|
38
|
+
`status` describes the **capability**, not a single change: `active` while any change is in flight,
|
|
39
|
+
`done` when the current change delivers and none is open. A **new** change against a `done` capability
|
|
40
|
+
reopens it to `active`, back to `done` on delivery.
|
|
41
|
+
|
|
42
|
+
### Template — the durable `spec.md`
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
---
|
|
46
|
+
slug: <kebab-case-capability>
|
|
47
|
+
title: <Capability title>
|
|
48
|
+
status: draft # draft | active | done
|
|
49
|
+
created: <YYYY-MM-DD>
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Intent
|
|
53
|
+
<what this capability is for, in prose>
|
|
54
|
+
|
|
55
|
+
## Requirements
|
|
56
|
+
<prose, no SHALL/scenario grammar>
|
|
57
|
+
- [ ] <acceptance point>
|
|
58
|
+
|
|
59
|
+
## Non-goals
|
|
60
|
+
- <explicitly out of scope>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Per-change dated folders — `<slug>/<YYYY-MM-DD>-<change-slug>/`
|
|
64
|
+
|
|
65
|
+
Each change effort is **one dated folder directly under `<slug>/`** (no `changes/` wrapper), e.g.
|
|
66
|
+
`.chorus/specs/<slug>/2026-09-08-add-export/`. Date + slug so same-day changes don't collide and
|
|
67
|
+
folders sort by date. It holds the **Chorus-typed** docs for THAT change — one file per Document type:
|
|
68
|
+
|
|
69
|
+
| File | `Document.type` | Required? |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| `prd.md` | `prd` | **yes** — the primary per-change doc |
|
|
72
|
+
| `tech_design.md` | `tech_design` | optional — the "how" |
|
|
73
|
+
| `adr.md` / `guide.md` / `spec.md` | `adr` / `guide` / `spec` | optional |
|
|
74
|
+
|
|
75
|
+
These files **ARE synced** — each maps to **one persistent Chorus Document** of its type. Their
|
|
76
|
+
frontmatter carries the sync ids `proposalUuid` and `documentUuid` (the type is implied by the
|
|
77
|
+
filename). Start from the inline **dated-folder document template** below. A different change to the same
|
|
78
|
+
capability is a different dated folder. The **current change's** folder is edited and re-mirrored
|
|
79
|
+
throughout its effort (until delivery); only **previously-delivered** dated folders are left frozen —
|
|
80
|
+
you don't reach back and rewrite a past change.
|
|
81
|
+
|
|
82
|
+
> **Two files named `spec.md`, different roles.** The durable `<slug>/spec.md` (local only, no ids) is
|
|
83
|
+
> NOT the same as a per-change `spec`-type doc, which would live at `<slug>/<date>-<slug>/spec.md`
|
|
84
|
+
> (synced, carries ids). Prefer `prd.md` as the per-change primary doc to avoid the confusion.
|
|
85
|
+
|
|
86
|
+
### Template — a dated-folder document
|
|
87
|
+
|
|
88
|
+
The document **type is implied by the filename** (`prd.md` → `prd`, `tech_design.md` → `tech_design`, …),
|
|
89
|
+
**NOT** a frontmatter key.
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
---
|
|
93
|
+
title: <Document title as it appears in Chorus>
|
|
94
|
+
proposalUuid: <uuid> # written on first mirror
|
|
95
|
+
documentUuid: # empty until the draft materializes on approval
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
# <Document title>
|
|
99
|
+
<body — this file's bytes are the source of truth for the Chorus Document>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Flow (one change)
|
|
103
|
+
|
|
104
|
+
1. Confirm mode = `lite` (else no-op).
|
|
105
|
+
2. Create the dated folder `<slug>/<YYYY-MM-DD>-<change-slug>/` and write its **synced** change docs —
|
|
106
|
+
`prd.md` (required), `tech_design.md` etc. only if warranted (use the **dated-folder document template** above).
|
|
107
|
+
3. **Update `<slug>/spec.md` in place** to the new cumulative truth (Requirements, acceptance points,
|
|
108
|
+
`status`) — local only, no sync.
|
|
109
|
+
4. Create the proposal container with one literal locator line in `description` (own line, no trailing
|
|
110
|
+
punctuation) so develop finds the change:
|
|
111
|
+
`Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/`
|
|
112
|
+
5. **Mirror the dated folder's docs** to Chorus (below). Add tasks via `chorus_pm_add_task_draft` —
|
|
113
|
+
**no `tasks.md`**, no CLI / validate / archive, no delta grammar. **Tasks live in Chorus.**
|
|
114
|
+
6. Develop → keep editing `spec.md` + the change docs, re-mirroring the change docs as work lands and
|
|
115
|
+
ticking acceptance points. On delivery set the durable `spec.md` `status: done`.
|
|
116
|
+
|
|
117
|
+
## Mirror — only the dated-folder docs (never `spec.md`)
|
|
118
|
+
|
|
119
|
+
Every dated-folder `<type>.md` maps to **one persistent Chorus Document** of that `type`, tracked by
|
|
120
|
+
`documentUuid` in the file's frontmatter. Fill `content` from the file's bytes with `--arg-file` —
|
|
121
|
+
never re-type the body (drifts, burns ~20k tokens). One call per file; resolve identity by
|
|
122
|
+
`documentUuid` / `(proposalUuid, type)`, **never by `title` alone** (a lookup finding zero or >1 MUST
|
|
123
|
+
**halt**). Guard every call with the `chorus_check_response` halt-on-error helper (`openspec-aware`
|
|
124
|
+
§6). No `chorus` on `PATH`? Fall back to `chorus-api.sh` + `json_encode_file` (`openspec-aware` §3.6).
|
|
125
|
+
**`<slug>/spec.md` is NEVER in this loop.**
|
|
126
|
+
|
|
127
|
+
- **First time a doc is authored** (its dated folder is new): write `proposalUuid` into frontmatter,
|
|
128
|
+
mirror into a proposal **draft** —
|
|
129
|
+
`chorus mcp call chorus_pm_add_document_draft "{\"proposalUuid\":\"$P\",\"type\":\"prd\",\"title\":\"PRD: $TITLE\"}" --arg-file content=".chorus/specs/$SLUG/$DATED/prd.md"`.
|
|
130
|
+
Edit the draft via `chorus_pm_update_document_draft` (returned `draftUuid`) before approval. On
|
|
131
|
+
approval it materializes into a persistent Document — resolve by `(proposalUuid, type)` via
|
|
132
|
+
`chorus_get_documents`, record `documentUuid` in frontmatter, re-mirror once so local == Chorus.
|
|
133
|
+
- **Later edits** (a doc that already has a `documentUuid`): edit the file, then
|
|
134
|
+
`chorus mcp call chorus_pm_update_document "{\"documentUuid\":\"$D\"}" --arg-file content=".chorus/specs/$SLUG/$DATED/<type>.md"`.
|
|
135
|
+
Each update **auto-increments the Document version** — that version history is the change doc's
|
|
136
|
+
record in Chorus, alongside git.
|
|
137
|
+
|
|
138
|
+
## 留痕: git history + Document versions
|
|
139
|
+
|
|
140
|
+
`git log -- .chorus/specs/$SLUG/` is the audit trail — the durable `spec.md`'s in-place diffs plus each
|
|
141
|
+
dated folder's change docs; the mirrored Documents' auto-incremented versions are the parallel record
|
|
142
|
+
in Chorus. No changelog section to maintain. Only `.chorus/specs/` is version-controlled (`.chorus/*` +
|
|
143
|
+
`!.chorus/specs/`).
|
|
144
|
+
|
|
145
|
+
**Single-writer:** the folder is shared — in a multi-task wave only the **orchestrator / main agent**
|
|
146
|
+
edits + re-mirrors; parallel workers report via `chorus_report_work` only, re-reading before any write.
|
|
147
|
+
**Task state lives in Chorus**, not the docs — the `- [ ]` points are acceptance intent, not a tracker.
|
|
@@ -4,7 +4,7 @@ description: Full-auto AI-DLC pipeline — from prompt to done. Automates the en
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.18.0"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -188,21 +188,17 @@ In `/chorus-yolo` mode, the agent generates elaboration questions and answers th
|
|
|
188
188
|
|
|
189
189
|
#### Step 1.4: Create Proposal
|
|
190
190
|
|
|
191
|
-
1. **
|
|
191
|
+
1. **Read the spec mode (already computed).** The `agentSpawn` hook (`bin/resolve-spec-mode.sh`) has already resolved it — do NOT re-derive. Read the `## Spec Mode` section: `CHORUS_SPEC_MODE=<lite|openspec|off>` + a routing note. Act on it: `openspec` (usable, shows `CHORUS_OPENSPEC_ACTIVE=1`) → **2a**; `off` → **2b**; `lite` → **2c**. If it says the mode **cannot be honored** (explicit `openspec` but unusable), **halt** and surface it — do NOT fall back or enter 2a with no OpenSpec. (No `## Spec Mode`? Source the same resolver; `/chorus-openspec-aware` §1.) This matters because yolo runs unattended.
|
|
192
192
|
|
|
193
|
-
|
|
194
|
-
- `CHORUS_OPENSPEC_ACTIVE=0` → free-form branch (sub-step 2b below).
|
|
195
|
-
|
|
196
|
-
This is mandatory — yolo runs unattended, so silently picking the wrong mode is exactly the failure scenario the detection contract exists to prevent.
|
|
197
|
-
|
|
198
|
-
2. **Create the empty proposal container.** In OpenSpec mode, the `description` MUST contain the literal line `OpenSpec change slug: <slug>` (use the `$SLUG` you'll pick in 2a); in free-form mode, omit that line.
|
|
193
|
+
2. **Create the empty proposal container.** The `description` MUST carry the mode's locator line — OpenSpec: `OpenSpec change slug: <slug>`; spec-lite: `Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/`; free-form: none. `description` is only settable at creation, so decide the slug/dated-path first.
|
|
199
194
|
|
|
200
195
|
```
|
|
201
196
|
chorus_pm_create_proposal({
|
|
202
197
|
projectUuid: "<project-uuid>",
|
|
203
198
|
title: "<feature name>",
|
|
204
|
-
description: "<summary>\n\nOpenSpec change slug: <slug>",
|
|
205
|
-
// description: "<summary
|
|
199
|
+
description: "<summary>\n\nOpenSpec change slug: <slug>", // OpenSpec (2a)
|
|
200
|
+
// description: "<summary>\n\nSpec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/", // spec-lite (2c)
|
|
201
|
+
// description: "<summary>", // free-form (2b)
|
|
206
202
|
inputType: "idea",
|
|
207
203
|
inputUuids: ["<idea-uuid>"]
|
|
208
204
|
})
|
|
@@ -220,7 +216,7 @@ In `/chorus-yolo` mode, the agent generates elaboration questions and answers th
|
|
|
220
216
|
|
|
221
217
|
Then continue to step 3 (task drafts).
|
|
222
218
|
|
|
223
|
-
**2b. Free-form mode (`
|
|
219
|
+
**2b. Free-form mode (resolved mode = free-form).** Only when step 1 resolved to free-form — i.e. explicit `CHORUS_SPEC_MODE=off` (unset never comes here: it resolves to OpenSpec when usable, else spec-lite/2c). Add a tech design document draft directly via MCP, content authored inline:
|
|
224
220
|
|
|
225
221
|
```
|
|
226
222
|
chorus_pm_add_document_draft({
|
|
@@ -231,6 +227,8 @@ In `/chorus-yolo` mode, the agent generates elaboration questions and answers th
|
|
|
231
227
|
})
|
|
232
228
|
```
|
|
233
229
|
|
|
230
|
+
**2c. spec-lite mode (resolved mode = lite).** Load `/chorus-spec-lite`. Pick `$SLUG` (a **capability**). Ensure the durable `.chorus/specs/<slug>/spec.md` exists (local-only, no ids; use the `spec-lite` skill's inline durable-spec template) and update it in place. Create this change's **dated folder** `.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` with its **synced** Chorus-typed docs (shape = the `spec-lite` skill's inline dated-folder document template) — `prd.md` (primary), optional `tech_design.md`… The `description` carries the `Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` locator (step 2). Mirror **each** dated-folder `<type>.md` to its persistent Document byte-exact — first time `chorus mcp call chorus_pm_add_document_draft "{\"proposalUuid\":\"<uuid>\",\"type\":\"prd\",\"title\":\"PRD: <feature>\"}" --arg-file content=.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/prd.md`, later edits via `chorus_pm_update_document` against the recorded `documentUuid` (`chorus-api.sh` fallback when `chorus` not on `PATH`). **`spec.md` is never mirrored.** No `openspec/changes/` scaffold; no `tasks.md`. Then continue to step 3.
|
|
231
|
+
|
|
234
232
|
3. **Add task drafts incrementally** (use returned `draftUuid` for dependency chaining). `acceptanceCriteriaItems` is **required** on every draft — at least one non-blank criterion, or the call is rejected:
|
|
235
233
|
```
|
|
236
234
|
# First task
|
|
@@ -268,19 +266,33 @@ In `/chorus-yolo` mode, the agent generates elaboration questions and answers th
|
|
|
268
266
|
```
|
|
269
267
|
chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })
|
|
270
268
|
```
|
|
271
|
-
After this call, the `postToolUse` hook injects a nudge to spawn the `chorus-proposal-reviewer` subagent. You MUST spawn it yourself
|
|
269
|
+
After this call, the `postToolUse` hook injects a nudge to spawn the `chorus-proposal-reviewer` subagent. You MUST spawn it yourself — it is NOT auto-launched — and wait for it to complete before approving.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### Reviewer contract (applies to every review gate below)
|
|
274
|
+
|
|
275
|
+
Every gate in Phases 2, 4 and 4.5 follows the same three steps. They are written once here; the phases below only name their entity and their stage-specific actions.
|
|
276
|
+
|
|
277
|
+
1. **Spawn and wait.** Spawn the reviewer as a read-only sub-agent, then wait for it: spawn it with the `subagent` tool and wait for that call to return. The call's own return value is not the verdict — the verdict is the `VERDICT:` comment the reviewer posts.
|
|
278
|
+
2. **Read THIS round's VERDICT.** Call `chorus_get_comments` on the entity and find the `VERDICT:` comment posted **after your dispatch**, not an older round's. Do not advance the gate before you have read it.
|
|
279
|
+
3. **No VERDICT for this round?** Check what the reviewer *did* post:
|
|
280
|
+
- **A reported round limit, or any other explicit refusal to review** — a deliberate escalation to a human. STOP: do not respawn, do not self-review, do not post a VERDICT of your own.
|
|
281
|
+
- **Nothing at all** — respawn ONCE, telling it to stay within its turn budget and reserve its last turns for the VERDICT, then apply this same check again to what the retry posts. An explicit refusal from the retry still means STOP; only a second true silence lets you review the entity yourself as a read-only pass and POST the VERDICT, then proceed on what you posted rather than looping forever.
|
|
282
|
+
|
|
283
|
+
**Absence is never a PASS**, and a round limit reached by someone else is never yours to clear.
|
|
272
284
|
|
|
273
285
|
---
|
|
274
286
|
|
|
275
287
|
### Phase 2: Proposal Review Loop
|
|
276
288
|
|
|
277
|
-
After `chorus_pm_submit_proposal`, the `postToolUse` hook injects a nudge to spawn the `chorus-proposal-reviewer`. You MUST manually spawn it as a read-only subagent
|
|
289
|
+
After `chorus_pm_submit_proposal`, the `postToolUse` hook injects a nudge to spawn the `chorus-proposal-reviewer`. You MUST manually spawn it as a read-only subagent with the `subagent` tool, then wait for that call to return, then:
|
|
278
290
|
|
|
279
|
-
1. **Read
|
|
291
|
+
1. **Read THIS round's VERDICT:**
|
|
280
292
|
```
|
|
281
293
|
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
282
294
|
```
|
|
283
|
-
Look for the
|
|
295
|
+
Look for the `VERDICT:` comment posted **after your dispatch** — not an older round's. Do not approve or reject before you have read it; the `subagent` call's own return value is not the verdict.
|
|
284
296
|
|
|
285
297
|
2. **Act on the VERDICT:**
|
|
286
298
|
|
|
@@ -314,7 +326,7 @@ After `chorus_pm_submit_proposal`, the `postToolUse` hook injects a nudge to spa
|
|
|
314
326
|
Proposal UUID: <uuid>"
|
|
315
327
|
```
|
|
316
328
|
|
|
317
|
-
4. **No new VERDICT
|
|
329
|
+
4. **No new VERDICT for this round?** Apply step 3 of the **Reviewer contract**, reviewing the proposal yourself if the reviewer stays silent.
|
|
318
330
|
|
|
319
331
|
---
|
|
320
332
|
|
|
@@ -400,13 +412,14 @@ for each task in wave_tasks:
|
|
|
400
412
|
# Subagent may have failed; skip or handle
|
|
401
413
|
continue
|
|
402
414
|
|
|
403
|
-
# 2. Spawn the chorus-task-reviewer subagent
|
|
404
|
-
#
|
|
415
|
+
# 2. Spawn the chorus-task-reviewer subagent (hook nudged it — you must spawn it
|
|
416
|
+
# yourself) and wait for the `subagent` call to return.
|
|
405
417
|
# Prompt: "Review task <task-uuid>. Round: N."
|
|
406
418
|
|
|
407
|
-
# 3. Read task-reviewer VERDICT
|
|
419
|
+
# 3. Read THIS round's task-reviewer VERDICT — the comment posted after your
|
|
420
|
+
# dispatch, not an older round's. Do not verify or reopen before you have it;
|
|
421
|
+
# the `subagent` call's own return value is not the verdict.
|
|
408
422
|
comments = chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
|
|
409
|
-
# Find the most recent comment containing "VERDICT:"
|
|
410
423
|
|
|
411
424
|
# 4. Act on VERDICT — three possible outcomes:
|
|
412
425
|
if VERDICT is "PASS":
|
|
@@ -444,22 +457,23 @@ ESCALATE: "Task '{title}' failed review after {maxRounds} rounds.
|
|
|
444
457
|
|
|
445
458
|
Continue with remaining tasks -- do not halt the entire pipeline for one stuck task.
|
|
446
459
|
|
|
447
|
-
**No new VERDICT
|
|
460
|
+
**No new VERDICT for this round?** Apply step 3 of the **Reviewer contract**, reviewing the task yourself if the reviewer stays silent.
|
|
448
461
|
|
|
449
462
|
---
|
|
450
463
|
|
|
451
464
|
### Phase 4.5: Code-Review Gateway (mandatory pre-ship)
|
|
452
465
|
|
|
453
|
-
Once **every** task of the idea's proposal is verified (`done`) — i.e. Phase 3 finds no more unblocked tasks and all are terminal — run the final ship-time code-review gateway **before** declaring the Idea done and **before** the Phase 5b completion report. After the last task is verified, the `postToolUse` hook injects a reminder to spawn the code-reviewer; you MUST spawn it yourself
|
|
466
|
+
Once **every** task of the idea's proposal is verified (`done`) — i.e. Phase 3 finds no more unblocked tasks and all are terminal — run the final ship-time code-review gateway **before** declaring the Idea done and **before** the Phase 5b completion report. After the last task is verified, the `postToolUse` hook injects a reminder to spawn the code-reviewer; you MUST spawn it yourself, wait for the `subagent` call to return, then read THIS round's `VERDICT` comment on the idea and act on what it says.
|
|
454
467
|
|
|
455
468
|
```
|
|
456
469
|
# Spawn the chorus-code-reviewer subagent for the IDEA (not a task). Determine the
|
|
457
470
|
# round number by reading prior code-review VERDICT comments on the idea.
|
|
458
471
|
# Prompt: "Review the aggregate code for idea <idea-uuid>. Round: N."
|
|
459
472
|
|
|
460
|
-
#
|
|
473
|
+
# Wait for the `subagent` call to return, then read THIS round's VERDICT on the idea
|
|
461
474
|
comments = chorus_get_comments({ targetType: "idea", targetUuid: "<idea-uuid>" })
|
|
462
|
-
# Find the
|
|
475
|
+
# Find the "VERDICT:" comment posted after your dispatch, not an older round's.
|
|
476
|
+
# Do not declare the feature shippable before you have read it.
|
|
463
477
|
```
|
|
464
478
|
|
|
465
479
|
Act on the VERDICT:
|
|
@@ -473,7 +487,7 @@ ESCALATE: "Idea '<title>' failed code review after {maxCodeReviewRounds} rounds.
|
|
|
473
487
|
Last BLOCKERs: <list>. Manual intervention needed. Idea UUID: <uuid>"
|
|
474
488
|
```
|
|
475
489
|
|
|
476
|
-
**No new VERDICT
|
|
490
|
+
**No new VERDICT for this round?** Apply step 3 of the **Reviewer contract**, reviewing the idea's aggregate change yourself if the reviewer stays silent.
|
|
477
491
|
|
|
478
492
|
> The code-review gateway is **behavioral**, consistent with the proposal/task reviewers: its verdict is advisory and does not change the Idea's stored status. The `/chorus-yolo` orchestrator honors it — PASS to ship, FAIL to loop. It runs **before** the completion report so the report is never written for a feature with an outstanding FAIL.
|
|
479
493
|
|
|
@@ -312,7 +312,7 @@ The table below shows default tool availability for each preset (no custom permi
|
|
|
312
312
|
|
|
313
313
|
### 5. Review Subagent Configuration
|
|
314
314
|
|
|
315
|
-
The plugin ships three
|
|
315
|
+
The plugin ships three reviewer subagents (`chorus-code-reviewer`, `chorus-proposal-reviewer`, `chorus-task-reviewer`). None is granted `write`. `chorus-task-reviewer` and `chorus-code-reviewer` therefore cannot mutate the repo at all; the proposal-reviewer's shell could, so there its prompt — not the tool list — is what forbids mutation. `chorus-proposal-reviewer` is scoped `tools: ["read", "shell", "@chorus"]` — its shell is READ-ONLY inspection only (list, read, grep, git history), which lets it confirm a path exists before flagging it as missing; `chorus-task-reviewer` and `chorus-code-reviewer` are scoped `tools: ["read", "@chorus"]`. Kiro auto-selects them by their `description`, and each is also reachable as a `/name` slash command. After proposal submission, task verification, or the last task of an idea-rooted proposal being verified, the `chorus` main agent's `postToolUse` hook injects a nudge instructing you to spawn the corresponding reviewer. You spawn it yourself — it is NOT auto-launched.
|
|
316
316
|
|
|
317
317
|
| Reviewer | Spawn after | Reviews |
|
|
318
318
|
|----------|-------------|---------|
|
|
@@ -322,18 +322,22 @@ The plugin ships three read-only reviewer subagents (`chorus-code-reviewer`, `ch
|
|
|
322
322
|
|
|
323
323
|
Reviewers post a VERDICT comment with one of three 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.
|
|
324
324
|
|
|
325
|
-
### 6.
|
|
325
|
+
### 6. Spec mode: OpenSpec (default when usable) vs spec-lite (fallback)
|
|
326
326
|
|
|
327
|
-
|
|
327
|
+
The `agentSpawn` hook (`bin/resolve-spec-mode.sh`) resolves one **spec mode** per session and injects a `## Spec Mode` plain-text block into your context stating it — the stage skills **consume** that value, they don't re-derive it. Resolution: an explicit `CHORUS_SPEC_MODE` (`lite`/`openspec`/`off`) wins; when unset, **OpenSpec is the default whenever it is usable** (`CHORUS_OPENSPEC_MODE` ≠ `off`, an `openspec/` directory at the project root, and the `openspec` CLI on `PATH`). When OpenSpec is absent or disabled, the mode falls back to **spec-lite** — a Chorus-native, git-tracked model with a durable local `.chorus/specs/<slug>/spec.md` per capability (never synced) plus dated per-change folders `<slug>/<YYYY-MM-DD>-<change-slug>/` of Chorus-typed docs mirrored 1:1 into Chorus (see `/chorus-spec-lite`). `CHORUS_SPEC_MODE=off` selects free-form (no spec artifact).
|
|
328
328
|
|
|
329
|
-
|
|
329
|
+
OpenSpec spec-driven path: `/chorus-proposal`, `/chorus-develop`, `/chorus-yolo` write `proposal.md` / `design.md` / spec deltas on disk and mirror them into Chorus drafts.
|
|
330
|
+
|
|
331
|
+
**When the user wants OpenSpec on** (e.g. they saw spec-lite/off in the `## Spec Mode` block), actually **enable it for them** — run whichever steps are missing, don't just describe them:
|
|
330
332
|
|
|
331
333
|
```bash
|
|
332
334
|
npm i -g @fission-ai/openspec # 1. install the CLI if it's not on PATH (global, pure Node)
|
|
333
335
|
openspec init --tools kiro # 2. scaffold openspec/ + wire up Kiro's native integration
|
|
334
336
|
```
|
|
335
337
|
|
|
336
|
-
`openspec init` is interactive if you omit `--tools`; pass `--tools kiro` to run it unattended.
|
|
338
|
+
`openspec init` is interactive if you omit `--tools`; pass `--tools kiro` to run it unattended. The spec mode is resolved **once at `agentSpawn`**, so it can't flip mid-session — after the steps succeed, tell the user to **restart Kiro**; the `## Spec Mode` block then reads `CHORUS_SPEC_MODE=openspec (…)` and the stage skills fold in `/chorus-openspec-aware` automatically.
|
|
339
|
+
|
|
340
|
+
To turn OpenSpec off, set `CHORUS_OPENSPEC_MODE=off` — the mode then falls back to **spec-lite** (or set `CHORUS_SPEC_MODE=off` for free-form). The `## Spec Mode` block always states the resolved mode + reason.
|
|
337
341
|
|
|
338
342
|
---
|
|
339
343
|
|
|
@@ -396,7 +400,8 @@ The `chorus` main agent owns `/chorus` and pre-loads all skills below. For stage
|
|
|
396
400
|
| **Development** | `/chorus-develop` | Claim Tasks, report work, session & subagent management |
|
|
397
401
|
| **Review** | `/chorus-review` | Approve/reject Proposals, verify Tasks, project governance |
|
|
398
402
|
| **Docs** | `/chorus-docs` | Consult the live Chorus documentation site to answer product-usage questions — UI workflow, agent/plugin setup, API/MCP, deployment, operations |
|
|
399
|
-
| **OpenSpec mode** | `/chorus-openspec-aware` |
|
|
403
|
+
| **OpenSpec mode** | `/chorus-openspec-aware` | **Shared sub-procedure** invoked by `/chorus-proposal`, `/chorus-develop`, and `/chorus-yolo` when the resolved spec mode is a usable OpenSpec (the default when `openspec/` + CLI present and not disabled). Scaffolds `openspec/changes/<slug>/` on disk and mirrors files into Chorus document drafts via `chorus mcp call --arg-file` (`chorus-api.sh` wrapper as fallback). |
|
|
404
|
+
| **spec-lite mode** | `/chorus-spec-lite` | **Shared sub-procedure** and the fallback when OpenSpec isn't usable (or `CHORUS_SPEC_MODE=lite`). Durable local `.chorus/specs/<slug>/spec.md` (never synced) + dated per-change folders of Chorus-typed docs mirrored 1:1 into Chorus via `--arg-file`. No CLI/validation. |
|
|
400
405
|
|
|
401
406
|
### Getting Started
|
|
402
407
|
|
|
@@ -283,7 +283,7 @@ cmd_mcp_tool() {
|
|
|
283
283
|
# Step 1: Initialize MCP session
|
|
284
284
|
local init_payload
|
|
285
285
|
init_payload=$(cat <<JSONEOF
|
|
286
|
-
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"chorus-hook","version":"0.
|
|
286
|
+
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"chorus-hook","version":"0.18.0"}}}
|
|
287
287
|
JSONEOF
|
|
288
288
|
)
|
|
289
289
|
|
|
@@ -48,6 +48,16 @@ if [ -z "$CHECKIN_RESULT" ]; then
|
|
|
48
48
|
exit 0
|
|
49
49
|
fi
|
|
50
50
|
|
|
51
|
+
# Resolve the active spec mode via the shared resolver (single source of truth —
|
|
52
|
+
# byte-identical to the Claude Code / Codex copies; enforced by the CI drift-guard).
|
|
53
|
+
# It sets SPEC_MODE (lite|openspec|off), SPEC_REASON, SPEC_FAIL (non-empty ⇒ the
|
|
54
|
+
# stage skill MUST halt), OPENSPEC_USABLE_REASON, OPENSPEC_HINT, CHORUS_OPENSPEC_ACTIVE.
|
|
55
|
+
# Kiro delivers cwd in the event JSON; use it as PROJECT_ROOT (fallback $PWD).
|
|
56
|
+
CWD_FROM_EVENT=$(printf '%s' "$EVENT" | grep -o '"cwd"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"\([^"]*\)"$/\1/')
|
|
57
|
+
PROJECT_ROOT="${CWD_FROM_EVENT:-$PWD}"
|
|
58
|
+
# shellcheck source=./resolve-spec-mode.sh
|
|
59
|
+
. "${SCRIPT_DIR}/resolve-spec-mode.sh"
|
|
60
|
+
|
|
51
61
|
# Emit the startup context as plain text (Kiro adds STDOUT to context).
|
|
52
62
|
# The checkin payload carries agent owner, effective permissions, the
|
|
53
63
|
# active-project distribution, and working-style guidance — surfaced verbatim,
|
|
@@ -60,6 +70,37 @@ Chorus is connected at ${CHORUS_URL}. Session lifecycle hooks are enabled (check
|
|
|
60
70
|
|
|
61
71
|
${CHECKIN_RESULT}
|
|
62
72
|
|
|
73
|
+
## Spec Mode
|
|
74
|
+
|
|
75
|
+
CHORUS_SPEC_MODE=${SPEC_MODE} (${SPEC_REASON})"
|
|
76
|
+
|
|
77
|
+
if [ "$SPEC_MODE" = "lite" ]; then
|
|
78
|
+
CONTEXT="${CONTEXT}
|
|
79
|
+
|
|
80
|
+
Routing: lite → follow the spec-lite skill (/chorus-spec-lite). A capability's durable spec is \`.chorus/specs/<slug>/spec.md\` (edited in place, **never synced**, git history is its record); each change is a dated folder \`.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/\` of Chorus-typed docs (\`prd.md\` required; \`tech_design.md\`/\`adr.md\`/\`guide.md\`/\`spec.md\` optional) that **are** mirrored 1:1 into persistent Chorus Documents via \`chorus mcp call … --arg-file content=<file>\` (fallback \`chorus-api.sh mcp-tool\`). Put a \`Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/\` locator line in the proposal description. Do NOT scaffold \`openspec/changes/\` or add an \`OpenSpec change slug:\` line."
|
|
81
|
+
elif [ "$SPEC_MODE" = "off" ]; then
|
|
82
|
+
CONTEXT="${CONTEXT}
|
|
83
|
+
|
|
84
|
+
Routing: off → free-form, no spec artifact. Do NOT create \`.chorus/specs/\` or \`openspec/changes/\` files; author document drafts inline via direct MCP."
|
|
85
|
+
elif [ -n "$SPEC_FAIL" ]; then
|
|
86
|
+
CONTEXT="${CONTEXT}
|
|
87
|
+
|
|
88
|
+
Routing: openspec → **cannot be honored** — ${SPEC_FAIL}. The proposal / yolo skill MUST halt after resolving the mode; do NOT silently fall back. Surface this to the user."
|
|
89
|
+
if [ -n "$OPENSPEC_HINT" ]; then
|
|
90
|
+
CONTEXT="${CONTEXT} Install hint: ${OPENSPEC_HINT}."
|
|
91
|
+
fi
|
|
92
|
+
else
|
|
93
|
+
CONTEXT="${CONTEXT}
|
|
94
|
+
|
|
95
|
+
CHORUS_OPENSPEC_ACTIVE=1 (${OPENSPEC_USABLE_REASON})
|
|
96
|
+
|
|
97
|
+
Routing: openspec → load the openspec-aware skill (/chorus-openspec-aware) and follow §3 (OpenSpec authoring) — do NOT re-run the §1 detection block, the answer is already known.
|
|
98
|
+
|
|
99
|
+
Critical rule (openspec-aware §2 Rule 1): document mirror calls (\`chorus_pm_add_document_draft\` / \`chorus_pm_update_document_draft\` / \`chorus_pm_update_document\`) MUST fill \`content\` from the local file — prefer \`chorus mcp call <tool> '<json>' --arg-file content=<file>\`, falling back to \`chorus-api.sh mcp-tool\` with \`json_encode_file\` when \`chorus\` is not on PATH. Do NOT invoke these MCP tools directly with hand-typed \`content\` in OpenSpec mode."
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
CONTEXT="${CONTEXT}
|
|
103
|
+
|
|
63
104
|
## Quick Reference
|
|
64
105
|
|
|
65
106
|
- **Long-horizon work**: follow AI-DLC via the Chorus skill (idea → proposal → task → verify) rather than coding ad hoc, and use chorus_search to locate the specific work the user refers to across ideas/proposals/tasks/docs.
|
|
@@ -56,13 +56,13 @@ Max review rounds: ${MAX_ROUNDS} (0 = unlimited).
|
|
|
56
56
|
|
|
57
57
|
ACTION REQUIRED: spawn the read-only \`chorus-task-reviewer\` subagent to perform an independent review before admin verification.
|
|
58
58
|
|
|
59
|
-
In Kiro, hand the reviewer this task (auto-selected by its description; also invokable as /chorus-task-reviewer): \"Review task ${TASK_UUID}. Max review rounds: ${MAX_ROUNDS}. First, read existing comments to count previous VERDICTs and determine your round number. If max > 0 and your round exceeds max, skip the review and post a comment saying the limit was reached
|
|
59
|
+
In Kiro, hand the reviewer this task (auto-selected by its description; also invokable as /chorus-task-reviewer): \"Review task ${TASK_UUID}. Max review rounds: ${MAX_ROUNDS}. First, read existing comments to count previous VERDICTs and determine your round number. If max > 0 and your round exceeds max, skip the review and post a comment saying the round limit was reached and a human decision is needed, and post no VERDICT (this tells the main agent to stop rather than substitute its own verdict). Otherwise, proceed with the review and post your VERDICT as a comment on the task.\"
|
|
60
60
|
|
|
61
|
-
The reviewer is read-only (tools: read + @chorus) and posts its VERDICT as a comment on the task.
|
|
61
|
+
The reviewer is read-only (tools: read + @chorus) and posts its VERDICT as a comment on the task. Wait for the \`subagent\` call to return, then read this round's \`VERDICT:\` comment with chorus_get_comments — on THIS task, posted after you dispatched the reviewer. Do not settle for an older VERDICT from a previous round:
|
|
62
62
|
- VERDICT: PASS — all AC verified, no issues. Proceed to mark AC and call chorus_admin_verify_task.
|
|
63
63
|
- VERDICT: PASS WITH NOTES — all AC verified, minor non-blocking notes. Still proceed to verify.
|
|
64
64
|
- VERDICT: FAIL — BLOCKERs found. Do NOT verify. Reopen the task (chorus_admin_reopen_task) and fix the BLOCKERs.
|
|
65
65
|
|
|
66
|
-
IMPORTANT:
|
|
66
|
+
IMPORTANT: the \`subagent\` call's own return value is not the verdict — base the decision on the comment. Do NOT verify or reopen before you have read this round's VERDICT comment. If it is missing, check what the reviewer did post: a comment reporting the round limit was reached, or any other explicit refusal to review, is a deliberate escalation — STOP: do not respawn, do not self-review, do not post a VERDICT of your own; leave it pending the human's decision. If it posted nothing at all, respawn once and apply this same check again to what the retry posts — an explicit refusal still means STOP; only a second true silence lets you review the task yourself as a read-only pass and post the VERDICT. Absence is never a PASS."
|
|
67
67
|
|
|
68
68
|
exit 0
|