@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
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: openspec-aware
|
|
3
|
-
description:
|
|
3
|
+
description: OpenSpec-mode authoring for Chorus PM workflows in Claude Code. The default whenever OpenSpec is usable; consumes the resolved `## Spec Mode` (never re-detects). Scaffolds `openspec/changes/<slug>/` on disk, and mirrors Markdown files into Chorus document drafts via `chorus mcp call --arg-file` (bash `chorus-api.sh` wrapper as fallback). Required reading for the proposal, develop, and yolo skills. When OpenSpec is not the resolved mode, this skill no-ops and the caller follows the resolved mode (spec-lite or free-form).
|
|
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
|
---
|
|
@@ -14,7 +14,9 @@ metadata:
|
|
|
14
14
|
This skill is a **shared sub-procedure** invoked by the Chorus stage skills (proposal, develop, yolo) whenever the user wants spec-driven authoring through the [OpenSpec CLI](https://github.com/Fission-AI/OpenSpec). It is opt-in:
|
|
15
15
|
|
|
16
16
|
- Activates when **all three** signals hold (see §1): `CHORUS_OPENSPEC_MODE` is not `off`, an `openspec/` directory exists at the project root, and the `openspec` CLI is on `PATH`.
|
|
17
|
-
- Otherwise the calling skill
|
|
17
|
+
- Otherwise the calling skill follows the resolved `SPEC_MODE` — **spec-lite** (the default when OpenSpec isn't usable) or free-form (`=off`).
|
|
18
|
+
|
|
19
|
+
> **See also — `spec-lite` (the lightweight fallback):** OpenSpec (this skill) stays the **default whenever it is usable** (`openspec/` dir + CLI, not disabled). When OpenSpec is absent or disabled — or when `CHORUS_SPEC_MODE=lite` is set explicitly — the mode resolves to **spec-lite**: a Chorus-native, git-tracked model with a durable local spec `.chorus/specs/<slug>/spec.md` per capability (edited in place, **never synced**), plus one dated folder per change effort `.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` of plain-markdown docs named by Document type (`prd.md`, `tech_design.md`, …), those dated-folder docs each mirrored 1:1 into a persistent Chorus Document via the same `--arg-file` transport, with no CLI and no strict validation. A session that resolves to OpenSpec follows everything below unchanged. See the `spec-lite` skill (`skills/spec-lite/SKILL.md`).
|
|
18
20
|
|
|
19
21
|
When you reach a point in proposal / develop / yolo where this skill is referenced, **read the value of `CHORUS_OPENSPEC_ACTIVE` from the SessionStart context** (see §1) and branch on it. Do not re-run the detection block — the SessionStart hook has already done it once for this session.
|
|
20
22
|
|
|
@@ -22,7 +24,7 @@ When you reach a point in proposal / develop / yolo where this skill is referenc
|
|
|
22
24
|
|
|
23
25
|
## §1. Detection — already done at SessionStart
|
|
24
26
|
|
|
25
|
-
The Chorus plugin's SessionStart hook (`bin/on-session-start.sh`)
|
|
27
|
+
The Chorus plugin's SessionStart hook (`bin/on-session-start.sh`) resolves the active spec mode once when the session opens and writes a `## Spec Mode` section into the plugin's injected context. When the resolved mode is a usable OpenSpec, that section also carries a `CHORUS_OPENSPEC_ACTIVE=1` line. `CHORUS_OPENSPEC_ACTIVE` is `1` only when **all three** of these hold:
|
|
26
28
|
|
|
27
29
|
1. `CHORUS_OPENSPEC_MODE` is **not** set to `off` (explicit opt-out wins).
|
|
28
30
|
2. The project root contains an `openspec/` directory (i.e. someone ran `openspec init` here).
|
|
@@ -32,44 +34,38 @@ Both signals (2) and (3) are required because the OpenSpec authoring path needs
|
|
|
32
34
|
|
|
33
35
|
### How to read the value
|
|
34
36
|
|
|
35
|
-
You should already see something like this in your context (look for the `##
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
## OpenSpec Mode
|
|
37
|
+
You should already see something like this in your context (look for the `## Spec Mode` section near the top of the conversation). This skill is only loaded when the mode resolved to a usable OpenSpec, so you should see:
|
|
39
38
|
|
|
40
|
-
CHORUS_OPENSPEC_ACTIVE=1 (openspec/ directory + openspec CLI both present)
|
|
41
39
|
```
|
|
40
|
+
## Spec Mode
|
|
42
41
|
|
|
43
|
-
|
|
42
|
+
CHORUS_SPEC_MODE=openspec (explicit; openspec/ directory + openspec CLI both present)
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
## OpenSpec Mode
|
|
47
|
-
|
|
48
|
-
CHORUS_OPENSPEC_ACTIVE=0 (no openspec/ directory at /path/to/repo/openspec)
|
|
44
|
+
CHORUS_OPENSPEC_ACTIVE=1 (openspec/ directory + openspec CLI both present)
|
|
49
45
|
```
|
|
50
46
|
|
|
51
47
|
Branch:
|
|
52
48
|
|
|
53
49
|
- `CHORUS_OPENSPEC_ACTIVE=1` → follow §3 (OpenSpec authoring).
|
|
54
|
-
- `CHORUS_OPENSPEC_ACTIVE=
|
|
50
|
+
- No `CHORUS_OPENSPEC_ACTIVE=1` line (the section shows `CHORUS_SPEC_MODE=lite` / `off`, or you were spawned without SessionStart context) → this skill is a no-op; return to the calling skill's path. **Do not** scaffold `openspec/changes/`. **Do not** add the slug line to the proposal description. (Reconstruct the value with the manual fallback below if you genuinely have no context.)
|
|
55
51
|
|
|
56
|
-
### Manual fallback
|
|
52
|
+
### Manual fallback (no SessionStart context)
|
|
57
53
|
|
|
58
|
-
If you're in a sub-shell, sub-agent, or session that did not see
|
|
54
|
+
If you're in a sub-shell, sub-agent, or session that did not see the `## Spec Mode` section (e.g. spawned mid-session without the parent's context), **do not hand-roll the detection** — source the *same* resolver the hook uses, so there is one computation of the mode:
|
|
59
55
|
|
|
60
56
|
```bash
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
57
|
+
# The resolver sits beside the plugin hooks; ${CLAUDE_PLUGIN_ROOT} is the plugin
|
|
58
|
+
# root Claude Code exports (the same var hooks.json uses).
|
|
59
|
+
RESOLVER="${CLAUDE_PLUGIN_ROOT}/bin/resolve-spec-mode.sh"
|
|
60
|
+
if [ -f "$RESOLVER" ]; then
|
|
61
|
+
. "$RESOLVER" # sets SPEC_MODE (lite|openspec|off), SPEC_FAIL (non-empty ⇒ halt),
|
|
62
|
+
# and CHORUS_OPENSPEC_ACTIVE (1 only for a usable openspec)
|
|
67
63
|
else
|
|
68
|
-
|
|
64
|
+
echo "resolve-spec-mode.sh not found; set CHORUS_SPEC_MODE explicitly and re-launch" >&2
|
|
69
65
|
fi
|
|
70
66
|
```
|
|
71
67
|
|
|
72
|
-
|
|
68
|
+
Then: if `SPEC_FAIL` is non-empty, halt and surface it; if `CHORUS_OPENSPEC_ACTIVE=1` follow §3; otherwise this skill is a no-op — return to the caller, which follows the resolved `SPEC_MODE` (spec-lite or free-form). If you genuinely cannot locate the helper, set `CHORUS_SPEC_MODE` explicitly and re-launch rather than guessing — never re-derive the rule inline (the hook/helper is the single source of truth).
|
|
73
69
|
|
|
74
70
|
---
|
|
75
71
|
|
|
@@ -376,14 +372,14 @@ The hook is read-only; you (the agent) perform the archive:
|
|
|
376
372
|
|
|
377
373
|
---
|
|
378
374
|
|
|
379
|
-
## §4.
|
|
375
|
+
## §4. When OpenSpec is not the resolved mode
|
|
380
376
|
|
|
381
|
-
When
|
|
377
|
+
When `CHORUS_OPENSPEC_ACTIVE` is not `1`, this skill is a **no-op** — return to the calling skill, which follows whatever the resolved `SPEC_MODE` is: **spec-lite** (the default when OpenSpec isn't usable) or **free-form** (`CHORUS_SPEC_MODE=off`). Either way, from this skill's side:
|
|
382
378
|
|
|
383
379
|
- No `openspec/changes/` folder is created or referenced.
|
|
384
380
|
- No `OpenSpec change slug: …` line is added to the proposal description.
|
|
385
|
-
- Document
|
|
386
|
-
- Rule 1 (wrapper-only mirror) does not apply — there is no local file
|
|
381
|
+
- Document authoring is whatever the resolved mode dictates (spec-lite: mirror `.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/<type>.md`; free-form: inline `chorus_pm_add_document_draft`) — not this skill's concern.
|
|
382
|
+
- Rule 1 (wrapper-only mirror) does not apply to OpenSpec here — there is no `openspec/` local file for this skill to mirror.
|
|
387
383
|
- The §3.9 archive hook does nothing (no slug → silent exit).
|
|
388
384
|
|
|
389
385
|
---
|
|
@@ -468,8 +464,8 @@ This is project-wide policy: no silent errors.
|
|
|
468
464
|
|
|
469
465
|
When invoked from a stage skill (proposal / develop / yolo):
|
|
470
466
|
|
|
471
|
-
1. Read `CHORUS_OPENSPEC_ACTIVE` from the `##
|
|
472
|
-
2. If `CHORUS_OPENSPEC_ACTIVE
|
|
467
|
+
1. Read `CHORUS_OPENSPEC_ACTIVE` from the `## Spec Mode` section in the SessionStart context (§1). If it isn't there, fall back to the manual probe in §1.
|
|
468
|
+
2. If `CHORUS_OPENSPEC_ACTIVE` is not `1` → no-op; return to the caller, which follows the resolved `SPEC_MODE` (spec-lite or free-form) — see §4.
|
|
473
469
|
3. Otherwise:
|
|
474
470
|
a. Pick `$SLUG` (§3.1).
|
|
475
471
|
b. `openspec new change "$SLUG"` (§3.2).
|
|
@@ -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
|
---
|
|
@@ -79,6 +79,8 @@ Chorus ships three read-only reviewer sub-agents. As orchestrator you spawn them
|
|
|
79
79
|
|
|
80
80
|
Each posts exactly one `VERDICT: PASS` / `PASS WITH NOTES` / `FAIL` comment. Verdicts are **advisory** — they do not auto-approve, auto-verify, or hard-block; you read the BLOCKERs and decide. A `FAIL` means route the BLOCKERs back for a fix before advancing (for a code-review FAIL, add fix tasks to the *approved* proposal via `/quick-dev` and re-run once they are `done`). See `/review` and the plugin's Review Agent Configuration for the full pattern.
|
|
81
81
|
|
|
82
|
+
**First-principles alignment (a stage-tailored instruction in each reviewer).** Every one of the three reviewers also checks, top-down, that the work still serves the *original Idea's intent* — it resolves the Idea from the entity under review, reads it via the existing `chorus_get_idea` + `chorus_get_elaboration` + `chorus_get_comments`, builds the intent baseline from **human-authored** content only, and flags scope creep, requirement loss/shrink, or semantic drift. Unauthorized drift is a **BLOCKER → FAIL / reject**, downgraded to a NOTE only when traceable to a **human-originated** authorization (a human-authored Idea comment, a human-answered elaboration entry, or an explicit human override at the gate) — an agent's own comment never authorizes, so a drifting agent cannot self-clear. As orchestrator, route an alignment FAIL back for a fix like any other BLOCKER, or record the human override at the gate.
|
|
83
|
+
|
|
82
84
|
---
|
|
83
85
|
|
|
84
86
|
## Choosing a collaboration mode
|
|
@@ -104,6 +106,14 @@ Guidance: start narrow. If a single owner can hold the whole feature in their he
|
|
|
104
106
|
|
|
105
107
|
---
|
|
106
108
|
|
|
109
|
+
## Replying to the agent who woke you (advisory)
|
|
110
|
+
|
|
111
|
+
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.
|
|
112
|
+
|
|
113
|
+
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.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
107
117
|
## Reversed-Conversation gates (you never auto-ship)
|
|
108
118
|
|
|
109
119
|
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,13 +69,15 @@ 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 — so decide the mode + slug/dated-path first and include that line in this single call. Do NOT create a bare container and then realize you needed the line (that would strand it without the locator or force a duplicate). 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({
|
|
76
78
|
projectUuid: "<project-uuid>",
|
|
77
79
|
title: "Implement <feature name>",
|
|
78
|
-
description: "Analysis and implementation plan for Idea #xxx",
|
|
80
|
+
description: "Analysis and implementation plan for Idea #xxx\n\n<locator line here in OpenSpec / spec-lite mode>",
|
|
79
81
|
inputType: "idea",
|
|
80
82
|
inputUuids: ["<idea-uuid>"]
|
|
81
83
|
})
|
|
@@ -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 `/idea` skill.)
|
|
87
89
|
|
|
88
|
-
### Step 1.5:
|
|
90
|
+
### Step 1.5: Select spec mode
|
|
91
|
+
|
|
92
|
+
The spec mode is **already computed for you** by the SessionStart hook (`bin/resolve-spec-mode.sh`) — do NOT re-derive it. Read the `## Spec Mode` section of your SessionStart context: it states `CHORUS_SPEC_MODE=<lite|openspec|off>` plus a one-line routing note. (Spawned without that context? Source the *same* `bin/resolve-spec-mode.sh` to get `SPEC_MODE`/`SPEC_FAIL` — never hand-roll the rule.) Just act on that value:
|
|
93
|
+
|
|
94
|
+
- If the section says the requested mode **cannot be honored** (e.g. `CHORUS_SPEC_MODE=openspec` but OpenSpec isn't usable — it prints "cannot be honored" with a config-conflict or install-hint reason), **halt** and surface that reason; do not fall back.
|
|
95
|
+
- Otherwise branch on the stated mode:
|
|
89
96
|
|
|
90
|
-
|
|
97
|
+
- **resolved = spec-lite** → load the `spec-lite` skill (`skills/spec-lite/SKILL.md`) and follow it: pick `$SLUG` (a **capability/feature** name — `.chorus/specs/<slug>/` holds the durable local spec `spec.md`, edited in place across changes, not one folder per change). Ensure the durable `spec.md` exists (local-only, **no Chorus ids** — Intent / plain-prose Requirements + `- [ ]` acceptance points / Non-goals; use the `spec-lite` skill's inline durable-spec template) and update it in place to the new truth. Create this change's **dated folder** `.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/` and write its **synced** Chorus-typed docs — `prd.md` (primary), plus `tech_design.md` etc. only if warranted (shape = 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` (that's why the mode is resolved before creating), then mirror **each** dated-folder `<type>.md` to its persistent Document (`chorus_pm_add_document_draft --arg-file` the first time a doc is authored, `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 — the file-fill mirror replaces inline drafting for these documents. (Add tasks via `chorus_pm_add_task_draft` as usual — there is 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 `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` (mode resolved before creating), and mirror each local file into a document draft.
|
|
93
100
|
|
|
94
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 `openspec-aware` §3.6. Do **not** call `chorus_pm_add_document_draft` directly from the MCP harness with a hand-typed `content` field. Re-typing thousands of lines through the LLM burns 20k+ content tokens per proposal and breaks byte-equality with the local source of truth (`openspec-aware` §2 Rule 1 explains the full reasoning). Skip Step 2 below when in OpenSpec mode — the file-fill flow in `openspec-aware` §3.6 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 independent task-reviewer sub-agent as described in `/develop`, wait for it, and read
|
|
155
|
+
Submitting is not final verification. Spawn the required independent task-reviewer sub-agent as described in `/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
|
|
|
@@ -170,12 +170,14 @@ This handoff applies in interactive and headless daemon sessions. Do not use an
|
|
|
170
170
|
|
|
171
171
|
## Session Integration
|
|
172
172
|
|
|
173
|
-
Quick Tasks work with
|
|
173
|
+
Quick Tasks work with sub-agent execution just like proposal-based tasks:
|
|
174
174
|
|
|
175
|
-
- **
|
|
175
|
+
- **Main agent**: create quick tasks, then hand each to a sub-agent via its task UUID
|
|
176
176
|
- **Sub-agents**: the Chorus Plugin auto-injects session context — just pass `sessionUuid` to `chorus_update_task` and `chorus_report_work`
|
|
177
177
|
- **Session lifecycle** is fully automated by the plugin
|
|
178
178
|
|
|
179
|
+
> There is no team object to create: to run several quick tasks in parallel, dispatch one sub-agent per task, issuing the whole batch in a single message — that is what makes them run in parallel. If sub-agent dispatch is unavailable (no sub-agent primitive, permission denied) or sub-agents fail repeatedly, work the tasks sequentially as the main agent.
|
|
180
|
+
|
|
179
181
|
---
|
|
180
182
|
|
|
181
183
|
## Tips
|
|
@@ -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,15 +64,17 @@ Key responsibilities:
|
|
|
64
64
|
|
|
65
65
|
When reviewing proposals, tasks, or an Idea's final aggregate code change, prefer spawning an independent reviewer sub-agent over reviewing manually:
|
|
66
66
|
|
|
67
|
-
1. **Try the reviewer first.** Spawn `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 sub-agent.
|
|
68
|
-
2. **Read
|
|
67
|
+
1. **Try the reviewer first.** Spawn `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 sub-agent. Then wait for it to complete using this harness's waiting mechanism — in Claude Code, the sub-agent's completion notification. The launch result is not the verdict: these reviewer subagent types report an async launch regardless of the flag you pass, so the decision must come from the comment, not the dispatch. It posts a VERDICT comment with detailed findings.
|
|
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., agent type not registered, sub-agent spawn fails), review the item yourself using the quality checklists in the workflows below.
|
|
75
75
|
|
|
76
|
+
**First-principles alignment (a stage-tailored instruction in all three reviewers).** Each reviewer also checks, top-down, that the work still serves the *original Idea's intent*: it resolves the Idea from the entity under review, reads it via the existing `chorus_get_idea` + `chorus_get_elaboration` + `chorus_get_comments`, builds the intent baseline from **human-authored** content only, and flags **scope creep**, **requirement loss / shrink**, or **semantic drift**. Unauthorized drift is a **BLOCKER → VERDICT: FAIL / reject**, downgraded to a NOTE only when traceable to a **human-originated** authorization (a human-authored Idea comment, a human-answered elaboration, or an explicit human override at the gate) — an agent's own comment never authorizes, so a drifting agent cannot self-clear. So a `FAIL` may come from intent drift, not just local defects; treat it the same way — reject/reopen and fix, or record a human override.
|
|
77
|
+
|
|
76
78
|
---
|
|
77
79
|
|
|
78
80
|
## Workflow
|
|
@@ -145,7 +147,7 @@ chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
|
145
147
|
|
|
146
148
|
#### A3.5: Independent Review
|
|
147
149
|
|
|
148
|
-
Spawn `chorus:proposal-reviewer` per the [Review Strategy](#review-strategy) above
|
|
150
|
+
Spawn `chorus:proposal-reviewer` per the [Review Strategy](#review-strategy) above, wait for its completion notification, then read THIS round's VERDICT comment on the proposal before proceeding.
|
|
149
151
|
|
|
150
152
|
#### A4: Approve or Reject
|
|
151
153
|
|
|
@@ -210,14 +212,14 @@ chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
|
|
|
210
212
|
|
|
211
213
|
#### B2.5: Independent Review
|
|
212
214
|
|
|
213
|
-
Spawn `chorus:task-reviewer` per the [Review Strategy](#review-strategy) above
|
|
215
|
+
Spawn `chorus:task-reviewer` per the [Review Strategy](#review-strategy) above. After it completes, read THIS round's VERDICT on the task:
|
|
214
216
|
|
|
215
217
|
- **VERDICT: PASS** or **PASS WITH NOTES** → proceed to B3 (mark AC) and B4 (verify).
|
|
216
218
|
- **VERDICT: FAIL** → skip to B4 and **reopen** the task. Do NOT mark AC as passed.
|
|
217
219
|
|
|
218
220
|
#### B2.6: Final Code-Review Gateway (after an Idea's LAST task is verified)
|
|
219
221
|
|
|
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 `chorus:code-reviewer` (gated by `enableCodeReviewer`, default on). Spawn it per the [Review Strategy](#review-strategy)
|
|
222
|
+
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 `chorus:code-reviewer` (gated by `enableCodeReviewer`, default on). Spawn it per the [Review Strategy](#review-strategy), passing the `ideaUuid` + round number, and wait for its completion notification 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
223
|
|
|
222
224
|
- **VERDICT: PASS** / **PASS WITH NOTES** → the feature may ship.
|
|
223
225
|
- **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: spec-lite
|
|
3
|
+
description: Lightweight, Chorus-native local specs for Chorus PM workflows — 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 openspec-aware path. Read from proposal / develop / 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 SessionStart 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.
|