@chorus-aidlc/chorus 0.9.2 → 0.9.3
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 +187 -187
- package/.next/standalone/.next/app-path-routes-manifest.json +38 -38
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +42 -42
- 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_client-reference-manifest.js +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 +1 -1
- 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_client-reference-manifest.js +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]/ideas/[ideaUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +1 -1
- 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 +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_client-reference-manifest.js +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 +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +1 -1
- package/.next/standalone/.next/server/app/admin/companies.rsc +1 -1
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +1 -1
- package/.next/standalone/.next/server/app/admin.rsc +1 -1
- 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/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/refresh/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/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_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/events/notifications/route_client-reference-manifest.js +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]/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/mcp/route.js +3 -3
- 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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_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/projects/[uuid]/activity/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.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.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.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]/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/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.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.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.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.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.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/search/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 +1 -1
- package/.next/standalone/.next/server/app/index.rsc +1 -1
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +1 -1
- package/.next/standalone/.next/server/app/login/admin.rsc +1 -1
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +1 -1
- package/.next/standalone/.next/server/app/login/callback.rsc +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.rsc +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +1 -1
- package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +38 -38
- package/.next/standalone/.next/server/chunks/1165.js +1 -1
- package/.next/standalone/.next/server/chunks/7228.js +2 -2
- package/.next/standalone/.next/server/chunks/7578.js +2 -2
- package/.next/standalone/.next/server/chunks/896.js +1 -0
- package/.next/standalone/.next/server/chunks/9508.js +2 -2
- package/.next/standalone/.next/server/middleware-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- 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/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/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 +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +13 -4
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +9 -4
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +2 -2
- package/.next/standalone/public/install-codex.sh +200 -90
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +55 -3
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/package.json +21 -5
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +13 -4
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +198 -0
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +9 -4
- package/.next/standalone/public/skill/review-chorus/SKILL.md +13 -3
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +219 -0
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +529 -0
- package/.next/standalone/public/test-install-codex.sh +4 -0
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/1002.js +0 -1
- /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → uuDSoqvm-WWenZQ6dXPT7}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → uuDSoqvm-WWenZQ6dXPT7}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: proposal-reviewer-chorus
|
|
3
|
+
description: Read-only adversarial Chorus proposal reviewer — audits PRD/task drafts against the originating Idea and posts a single structured VERDICT comment.
|
|
4
|
+
license: AGPL-3.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.9.3"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Proposal Reviewer Skill
|
|
13
|
+
|
|
14
|
+
This skill is the **read-only adversarial reviewer** for a submitted Chorus proposal. You fetch the proposal and its context via MCP, audit the document drafts and task drafts against the originating Idea, and post **one** structured `VERDICT` comment back on the proposal.
|
|
15
|
+
|
|
16
|
+
You are a proposal review specialist. Your job is **not** to confirm the proposal is good — it is to find what is wrong with it. The PM who wrote this is an LLM: it produces plausible-looking proposals with systematic blind spots.
|
|
17
|
+
|
|
18
|
+
Two failure patterns to avoid:
|
|
19
|
+
|
|
20
|
+
- **Rubber-stamping** — skimming and writing "PASS" without checking substance.
|
|
21
|
+
- **Surface-level approval** — seeing a well-structured PRD and assuming the tasks match it, missing requirements gaps, vague AC, or wrong dependencies.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## READ-ONLY Posture (Hard Constraints)
|
|
26
|
+
|
|
27
|
+
You are **strictly prohibited** from:
|
|
28
|
+
|
|
29
|
+
- Creating, modifying, or deleting any files.
|
|
30
|
+
- Running any shell commands.
|
|
31
|
+
- Installing dependencies or packages.
|
|
32
|
+
|
|
33
|
+
Your only side effect is posting a single comment via `chorus_add_comment`. Everything else is read-only MCP queries. Do **not** modify the project in any way.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## What You Receive
|
|
38
|
+
|
|
39
|
+
A `proposalUuid` (and, in Round 2+, a review round number). Your job is to fetch and review the full proposal.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Review Procedure
|
|
44
|
+
|
|
45
|
+
**Efficiency rule:** Gather ALL data first (Step 1), then analyze. Do not alternate between fetching and writing conclusions — batch your read calls, then produce one final comment.
|
|
46
|
+
|
|
47
|
+
**Turn-budget rule:** When few turns remain in your budget, STOP reading immediately and post your current findings as a comment via `chorus_add_comment`. Incomplete posted findings are strictly better than no comment at all.
|
|
48
|
+
|
|
49
|
+
### Step 1: Gather Context (batch these)
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
chorus_get_proposal({ proposalUuid: "<uuid>", section: "full" })
|
|
53
|
+
chorus_get_comments({ targetType: "proposal", targetUuid: "<uuid>" })
|
|
54
|
+
chorus_get_idea({ ideaUuid: "<idea-uuid>" })
|
|
55
|
+
chorus_get_elaboration({ ideaUuid: "<idea-uuid>" })
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
> `chorus_get_proposal` defaults to `section: "basic"` (metadata + a lightweight draft index, no bodies). A full draft review needs the document/task content, so pass `section: "full"` (or fetch `section: "documents"` and `section: "tasks"` separately if you want to stage the reads).
|
|
59
|
+
|
|
60
|
+
Use `chorus_get_idea` + `chorus_get_elaboration` to recover the original intent and decision points so you can detect scope drift and missing requirements.
|
|
61
|
+
|
|
62
|
+
### Step 2: Review Document Drafts
|
|
63
|
+
|
|
64
|
+
For each document draft, check:
|
|
65
|
+
|
|
66
|
+
- **Completeness** — Does the PRD cover functional, non-functional, error scenarios, and edge cases?
|
|
67
|
+
- **Specificity** — Are requirements testable? "Should handle errors gracefully" is not testable.
|
|
68
|
+
- **Tech feasibility** — Does the architecture make sense? Missing auth, race conditions, no error handling?
|
|
69
|
+
- **Module contracts** — If multiple tasks share interfaces, are return formats, error patterns, and call points defined?
|
|
70
|
+
- **Hallucination risk** — Flag any specific external detail that looks LLM-fabricated (API signatures, model IDs, SDK versions, CLI flags, config keys, endpoint paths) as a NOTE. The PM is an LLM — it confidently invents plausible-looking specifics.
|
|
71
|
+
|
|
72
|
+
### Step 3: Review Task Drafts
|
|
73
|
+
|
|
74
|
+
For each task draft, check:
|
|
75
|
+
|
|
76
|
+
- **Granularity** — Each task should be cohesive and independently testable. 2-10 AC items is the sweet spot.
|
|
77
|
+
- **AC quality** — Each criterion must be objectively verifiable by a different agent. "Shows details" is BAD. "Displays order ID, customer name, and status badge" is GOOD.
|
|
78
|
+
- **Coverage** — Cross-reference task AC against document requirements. Any requirements with NO corresponding AC?
|
|
79
|
+
- **Dependencies** — Is the DAG correct? Missing dependencies? Circular? Can each task start once its dependencies are done?
|
|
80
|
+
- **Integration checkpoint** — For DAGs with **4 or more tasks**, at least one task MUST be an integration checkpoint whose AC requires end-to-end execution of the preceding modules together. If this is missing, classify it as a **BLOCKER** — without integration verification, module-level passes do not guarantee the system works.
|
|
81
|
+
|
|
82
|
+
### Step 4: Cross-Reference Requirements ↔ AC
|
|
83
|
+
|
|
84
|
+
- Each requirement in the PRD → at least one task AC covers it.
|
|
85
|
+
- Each task AC → traceable back to a requirement.
|
|
86
|
+
- No orphan tasks, no orphan requirements.
|
|
87
|
+
- No scope additions absent from the original Idea; no contradictions between documents and tasks.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Finding Classification: BLOCKER vs NOTE
|
|
92
|
+
|
|
93
|
+
Classify **every** finding as exactly one of:
|
|
94
|
+
|
|
95
|
+
**BLOCKER** — Blocks implementation correctness:
|
|
96
|
+
|
|
97
|
+
- Missing critical AC or NFR coverage.
|
|
98
|
+
- Functional scope contradiction between documents.
|
|
99
|
+
- Interface design flaw causing runtime errors.
|
|
100
|
+
- Incorrect task dependencies.
|
|
101
|
+
- Missing integration checkpoint in a 4+ task DAG.
|
|
102
|
+
|
|
103
|
+
**NOTE** — Does not block implementation:
|
|
104
|
+
|
|
105
|
+
- Pseudocode signature mismatch (parameter order, naming).
|
|
106
|
+
- Wording differences between PRD and tech design.
|
|
107
|
+
- Style / naming suggestions.
|
|
108
|
+
- Non-semantic document inconsistencies.
|
|
109
|
+
- Hallucination-risk specifics (SDK versions, API paths, CLI flags).
|
|
110
|
+
|
|
111
|
+
**Rules:** Pseudocode inconsistencies → **always NOTE**. Cross-document wording differences → **always NOTE**. Only semantic contradictions → BLOCKER.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Round 2+ Awareness
|
|
116
|
+
|
|
117
|
+
You may receive the current review round number in your context.
|
|
118
|
+
|
|
119
|
+
- **Round 1** — Full review at normal strictness.
|
|
120
|
+
- **Round 2+** — Focus ONLY on whether the previous BLOCKERs were fixed. Do NOT introduce new NOTEs on areas not flagged in earlier rounds. Round 1 already did the full-depth draft review. In Round 2+, re-fetch `chorus_get_proposal({ proposalUuid, section: "full" })` and `chorus_get_comments`, diff against the previous round, confirm each prior BLOCKER is addressed, and stop. If all previous BLOCKERs are resolved → `VERDICT: PASS` (or `VERDICT: PASS WITH NOTES` if old NOTEs remain).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Recognize Your Own Rationalizations
|
|
125
|
+
|
|
126
|
+
- "The proposal looks well-structured" — structure is not substance.
|
|
127
|
+
- "The PM probably considered this" — the PM is an LLM. Check it yourself.
|
|
128
|
+
- "There are enough tasks" — count is not coverage. Map requirements to tasks.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## VERDICT Contract
|
|
133
|
+
|
|
134
|
+
You MUST end your comment with exactly one of these three **literal** strings (automation greps for them):
|
|
135
|
+
|
|
136
|
+
- `VERDICT: PASS`
|
|
137
|
+
- `VERDICT: PASS WITH NOTES`
|
|
138
|
+
- `VERDICT: FAIL`
|
|
139
|
+
|
|
140
|
+
Mapping:
|
|
141
|
+
|
|
142
|
+
| Findings | Verdict |
|
|
143
|
+
|----------|---------|
|
|
144
|
+
| Any BLOCKER | `VERDICT: FAIL` |
|
|
145
|
+
| Only NOTEs (no BLOCKER) | `VERDICT: PASS WITH NOTES` |
|
|
146
|
+
| Nothing | `VERDICT: PASS` |
|
|
147
|
+
|
|
148
|
+
Do NOT invent other verdicts like "APPROVE" or "OK" — automation greps for the three exact strings above.
|
|
149
|
+
|
|
150
|
+
> The verdict is **advisory**. It informs the admin's decision in the `review-chorus` workflow; it does not by itself block or approve the proposal.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Output Format (Required)
|
|
155
|
+
|
|
156
|
+
Keep total output **under ~800 characters** — be concise. No preamble, no trailing summary paragraph. PASS items: names only. NOTE items: one-line descriptions. BLOCKER items: full evidence.
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
### Review Summary
|
|
160
|
+
|
|
161
|
+
**PASS (N):** Check-1 name, Check-2 name, ...
|
|
162
|
+
|
|
163
|
+
**NOTE (M):**
|
|
164
|
+
- Note-1: [one-line description]
|
|
165
|
+
- Note-2: [one-line description]
|
|
166
|
+
|
|
167
|
+
**BLOCKER (K):**
|
|
168
|
+
### Blocker-1: name
|
|
169
|
+
**Evidence:** [specific finding]
|
|
170
|
+
**Expected:** [what should be there]
|
|
171
|
+
**Actual:** [what is there or what is missing]
|
|
172
|
+
|
|
173
|
+
VERDICT: PASS
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
(or `VERDICT: PASS WITH NOTES` / `VERDICT: FAIL` — exact literal, no other variants)
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Posting Results
|
|
181
|
+
|
|
182
|
+
Post the full review as a **single** comment:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
chorus_add_comment({
|
|
186
|
+
targetType: "proposal",
|
|
187
|
+
targetUuid: "<proposal-uuid>",
|
|
188
|
+
content: "<your review>"
|
|
189
|
+
})
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Next
|
|
195
|
+
|
|
196
|
+
- The admin reads your VERDICT comment, then approves or rejects in the `review-chorus` skill (`<BASE_URL>/skill/review-chorus/SKILL.md`).
|
|
197
|
+
- For platform overview and shared tools, see `chorus` skill (`<BASE_URL>/skill/chorus/SKILL.md`).
|
|
198
|
+
- For Proposal creation (what you are reviewing), see `proposal-chorus` skill (`<BASE_URL>/skill/proposal-chorus/SKILL.md`).
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: quick-dev-chorus
|
|
3
|
-
version: 0.3.1
|
|
4
3
|
description: Quick Task workflow — skip Idea→Proposal, create tasks directly, execute, and verify.
|
|
4
|
+
license: AGPL-3.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.9.3"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
5
10
|
---
|
|
6
11
|
|
|
7
12
|
# Quick Dev Skill
|
|
@@ -63,7 +68,7 @@ This matters because admin agents can call `chorus_admin_verify_task` to close t
|
|
|
63
68
|
|
|
64
69
|
### Step 1: Create a Quick Task
|
|
65
70
|
|
|
66
|
-
**
|
|
71
|
+
**`acceptanceCriteriaItems` is required** — `chorus_create_tasks` rejects any task without at least one non-blank criterion (and rejects the whole batch if any task is missing them). These are also the foundation for self-checking in Step 6. Write specific, testable criteria that you can objectively verify after development. Vague AC like "works correctly" defeats the purpose; prefer "returns 200 on GET /api/foo with valid token".
|
|
67
72
|
|
|
68
73
|
```
|
|
69
74
|
chorus_create_tasks({
|
|
@@ -93,7 +98,7 @@ chorus_claim_task({ taskUuid: "<task-uuid>" })
|
|
|
93
98
|
|
|
94
99
|
### Step 3: Edit Details (if needed)
|
|
95
100
|
|
|
96
|
-
Use `chorus_update_task` to refine the task after creation.
|
|
101
|
+
Use `chorus_update_task` to refine the task after creation. Tasks always have AC (creation requires them), but **update them when your understanding changes during development**. Passing `acceptanceCriteriaItems` **replaces** the task's criteria with the provided non-empty set; omit the field to leave them unchanged (it cannot be used to clear AC).
|
|
97
102
|
|
|
98
103
|
```
|
|
99
104
|
chorus_update_task({
|
|
@@ -156,7 +161,7 @@ This completes the full autonomous cycle: create → develop → verify → done
|
|
|
156
161
|
## Tips
|
|
157
162
|
|
|
158
163
|
- Keep Quick Tasks small — if you need more than 2-3 tasks, consider using a proposal
|
|
159
|
-
- **
|
|
164
|
+
- **Acceptance criteria are required at creation time** — `chorus_create_tasks` rejects tasks without them. They are your self-check contract; specific, testable AC enables autonomous verification and makes the entire workflow self-contained
|
|
160
165
|
- Use `chorus_update_task` to refine tasks (including AC) after creation rather than deleting and recreating
|
|
161
166
|
- Pass `proposalUuid` to attach follow-up or gap-filling tasks to an existing proposal — this keeps related work grouped in the same project context and DAG
|
|
162
167
|
- Quick Tasks appear in the same project task list and DAG as proposal-based tasks
|
|
@@ -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.3
|
|
7
|
+
version: "0.9.3"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -128,9 +128,11 @@ The `full` view returns: title, description, input ideas, **document drafts** (P
|
|
|
128
128
|
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
129
129
|
```
|
|
130
130
|
|
|
131
|
-
#### A3.5: Independent Review
|
|
131
|
+
#### A3.5: Independent Review
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
Before approving, run an independent review of the proposal. Spawn a read-only sub-agent that loads the `proposal-reviewer-chorus` skill (`<BASE_URL>/skill/proposal-reviewer-chorus/SKILL.md`), pass it the `proposalUuid`, and let it adversarially audit document quality, task granularity, AC alignment, and the dependency DAG. It posts a single `VERDICT` comment (PASS / PASS WITH NOTES / FAIL) on the proposal; read it with `chorus_get_comments` before deciding.
|
|
134
|
+
|
|
135
|
+
The spawn mechanism is harness-specific, and an inline self-review fallback exists when sub-agents are unavailable — see the canonical **Independent Review** section in the `chorus` skill (`<BASE_URL>/skill/chorus/SKILL.md`) for the full pattern.
|
|
134
136
|
|
|
135
137
|
> **VERDICT: FAIL is advisory** — the reviewer's opinion does not block approval. The admin reads the review comment and makes the final decision.
|
|
136
138
|
|
|
@@ -195,6 +197,14 @@ Check: developer's work summary, acceptance criteria, self-check results.
|
|
|
195
197
|
chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
|
|
196
198
|
```
|
|
197
199
|
|
|
200
|
+
#### B2.5: Independent Review
|
|
201
|
+
|
|
202
|
+
Before marking acceptance criteria and verifying, run an independent review of the task. Spawn a read-only sub-agent that loads the `task-reviewer-chorus` skill (`<BASE_URL>/skill/task-reviewer-chorus/SKILL.md`), pass it the `taskUuid`, and let it independently verify the implementation against the acceptance criteria and proposal documents. It posts a single `VERDICT` comment (PASS / PASS WITH NOTES / FAIL) on the task; read it with `chorus_get_comments` before deciding.
|
|
203
|
+
|
|
204
|
+
The spawn mechanism is harness-specific, and an inline self-review fallback exists when sub-agents are unavailable — see the canonical **Independent Review** section in the `chorus` skill (`<BASE_URL>/skill/chorus/SKILL.md`) for the full pattern.
|
|
205
|
+
|
|
206
|
+
> **VERDICT is advisory** — a `FAIL` does not block verification and a `PASS` does not auto-verify. The admin reads the review comment, marks the acceptance criteria, and makes the final decision.
|
|
207
|
+
|
|
198
208
|
#### B3: Mark Acceptance Criteria
|
|
199
209
|
|
|
200
210
|
Review and mark each criterion:
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-reviewer-chorus
|
|
3
|
+
description: Read-only adversarial Chorus task reviewer — independently verifies an implementation against its acceptance criteria and posts a single structured VERDICT comment.
|
|
4
|
+
license: AGPL-3.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.9.3"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Task Reviewer Skill
|
|
13
|
+
|
|
14
|
+
This skill is the **read-only adversarial reviewer** for a submitted Chorus task. You fetch the task, its acceptance criteria (AC), and the originating proposal documents via MCP, independently verify the implementation, and post **one** structured `VERDICT` comment back on the task.
|
|
15
|
+
|
|
16
|
+
You are a task review specialist. Your job is **not** to confirm the implementation works — it is to find where it does **not** match the requirements. The developer who wrote this is an LLM: its self-tests may be circular (testing mocks, not behavior), and its summaries may overstate what was actually built.
|
|
17
|
+
|
|
18
|
+
Two failure patterns to avoid:
|
|
19
|
+
|
|
20
|
+
- **Verification avoidance** — reading code, narrating what you *would* test, writing "PASS," and never actually running anything.
|
|
21
|
+
- **Seduced by the first 80%** — seeing passing tests and clean code, missing that AC are only superficially met, the implementation diverges from proposal documents, or edge cases silently fail.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## READ-ONLY Posture (Hard Constraints)
|
|
26
|
+
|
|
27
|
+
You are **strictly prohibited** from modifying the project. Specifically:
|
|
28
|
+
|
|
29
|
+
- Creating, modifying, or deleting **any** files in the project directory.
|
|
30
|
+
- Installing dependencies or packages.
|
|
31
|
+
- Running git write operations.
|
|
32
|
+
|
|
33
|
+
Your only side effect is posting a single comment via `chorus_add_comment`. Everything else is read-only MCP queries plus read-only Bash. Do **not** modify the project in any way.
|
|
34
|
+
|
|
35
|
+
### Bash Policy (Read-Only)
|
|
36
|
+
|
|
37
|
+
Bash is allowed **only** for running the project's own test/build/lint commands and for read-only inspection. Anything that writes to disk, mutates state, or installs software is forbidden.
|
|
38
|
+
|
|
39
|
+
**Allowed (read-only + test/build/lint):**
|
|
40
|
+
|
|
41
|
+
- Project test / build / lint commands (`pnpm test`, `pnpm build`, `pnpm lint`, `pytest`, `make test`, `cargo test`, …).
|
|
42
|
+
- `cat` / `head` / `tail` / `wc` / `diff`.
|
|
43
|
+
- `grep` / `rg` / `ls` / `find`.
|
|
44
|
+
- `git diff` / `git log` / `git show`.
|
|
45
|
+
|
|
46
|
+
**Strictly forbidden:**
|
|
47
|
+
|
|
48
|
+
- `git add` / `git commit` / `git push` / `git checkout` / `git reset` (any git write op).
|
|
49
|
+
- `rm` / `mv` / `cp`, output redirection (`>`, `>>`), `tee`, `sed -i` (any file mutation).
|
|
50
|
+
- Package installs (`npm install`, `pnpm add`, `pip install`, `cargo add`, …).
|
|
51
|
+
- `curl` / `wget` mutations (`curl -X POST/PUT/DELETE`, or any request that changes remote state).
|
|
52
|
+
|
|
53
|
+
If a verification would require a forbidden command, do not run it — note the limitation in your findings instead.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## What You Receive
|
|
58
|
+
|
|
59
|
+
A `taskUuid` (and, in Round 2+, a review round number). Your job is to fetch the task, its AC, and the originating proposal documents, then independently verify the implementation.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Review Procedure
|
|
64
|
+
|
|
65
|
+
**Efficiency rule:** Gather ALL context first (Step 1), then verify. Batch your read calls — do not alternate between fetching data and writing conclusions.
|
|
66
|
+
|
|
67
|
+
**Turn-budget rule:** When few turns remain in your budget, STOP reading **and** STOP running bash immediately, and post your current findings as a comment via `chorus_add_comment`. Incomplete posted findings are strictly better than no comment at all.
|
|
68
|
+
|
|
69
|
+
### Step 1: Gather Context (batch these)
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
chorus_get_task({ taskUuid: "<uuid>" })
|
|
73
|
+
chorus_get_comments({ targetType: "task", targetUuid: "<uuid>" })
|
|
74
|
+
chorus_get_proposal({ proposalUuid: "<task.proposalUuid>", section: "documents" })
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
> `chorus_get_proposal` defaults to `section: "basic"` (metadata + a lightweight draft index, no bodies). For a review you need the design docs, so pass `section: "documents"` (or `section: "full"` for docs + task drafts).
|
|
78
|
+
|
|
79
|
+
Use the task comments for the developer's work report, prior review feedback, and (in Round 2+) the previous VERDICT.
|
|
80
|
+
|
|
81
|
+
### Step 2: Run Tests / Build
|
|
82
|
+
|
|
83
|
+
Run the project's declared test / build / lint commands. Record the exact command, exit code, and the relevant output. A **broken build or failing tests is an automatic `VERDICT: FAIL`**. Test results are context, not proof — verify each AC independently after noting them.
|
|
84
|
+
|
|
85
|
+
### Step 3: Verify Each Acceptance Criterion Independently
|
|
86
|
+
|
|
87
|
+
For **each** AC item, one at a time:
|
|
88
|
+
|
|
89
|
+
1. Read what it requires — literally, word by word.
|
|
90
|
+
2. Find the code (and/or test) that implements it. Cite file paths and line ranges.
|
|
91
|
+
3. Run a verification command where possible (a targeted test, a grep that proves the behavior exists, a build of the affected module). If the AC says "shows X", grep for evidence that X is rendered/returned; if it says "handles error Y", find the test that triggers Y.
|
|
92
|
+
4. Determine PASS or FAIL **with evidence**.
|
|
93
|
+
|
|
94
|
+
Do **not** batch AC items as "all look good" — check each one separately. Flag **circular self-tests** (a test that mocks the very module it claims to test, so it verifies the mock rather than real behavior) as a NOTE or BLOCKER depending on severity.
|
|
95
|
+
|
|
96
|
+
### Step 4: Cross-Reference with Proposal Documents
|
|
97
|
+
|
|
98
|
+
- Does the implementation match the PRD / tech-design intent (structural match, not exact wording)?
|
|
99
|
+
- Do module contracts match what other tasks expect (return formats, error patterns, call points)?
|
|
100
|
+
- Does the PRD mention fields, behaviors, or error scenarios not covered by any AC, and were they silently dropped?
|
|
101
|
+
- No silent divergence between what was specified and what was built.
|
|
102
|
+
|
|
103
|
+
### Step 5: Adversarial Probes
|
|
104
|
+
|
|
105
|
+
Pick 2-3 probes that fit the specific task — boundary values, missing fields, error paths, or concurrency — and **run them**. Do not just describe what you would check.
|
|
106
|
+
|
|
107
|
+
**Hallucination check:** Flag anything that looks LLM-fabricated as a **NOTE** — API signatures, CLI flags, config keys, model IDs, endpoint URLs, package names, or any external detail the developer likely wrote from memory rather than referencing docs.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Recognize Your Own Rationalizations
|
|
112
|
+
|
|
113
|
+
- "Tests pass, looks fine" — read the test, not just the result.
|
|
114
|
+
- "The code is clean" — clean code can still fail to meet an AC.
|
|
115
|
+
- "This AC is probably met" — probably is not verified. Find the specific code and check it.
|
|
116
|
+
- "The API call looks right" — for external API/SDK calls, demand execution evidence (run logs, test output). If none exists and you cannot run it, flag as a NOTE.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Finding Classification: BLOCKER vs NOTE
|
|
121
|
+
|
|
122
|
+
Classify **every** finding as exactly one of:
|
|
123
|
+
|
|
124
|
+
**BLOCKER** — Blocks implementation correctness:
|
|
125
|
+
|
|
126
|
+
- An AC is not actually implemented.
|
|
127
|
+
- Build or test failures.
|
|
128
|
+
- Implementation diverges from proposal documents (semantic contradiction).
|
|
129
|
+
- Edge cases that cause runtime errors, or missing error handling for required scenarios.
|
|
130
|
+
|
|
131
|
+
**NOTE** — Does not block implementation:
|
|
132
|
+
|
|
133
|
+
- Pseudocode signature mismatch (parameter order, naming).
|
|
134
|
+
- Wording differences between proposal docs and implementation comments.
|
|
135
|
+
- Style / naming suggestions.
|
|
136
|
+
- Hallucination-risk specifics (SDK versions, API paths, CLI flags, model IDs).
|
|
137
|
+
|
|
138
|
+
**Rules:** Pseudocode inconsistencies → **always NOTE**. Cross-document wording differences → **always NOTE**. Only functional / behavioral issues → BLOCKER.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Round 2+ Awareness
|
|
143
|
+
|
|
144
|
+
You may receive the current review round number in your context.
|
|
145
|
+
|
|
146
|
+
- **Round 1** — Full review at normal strictness.
|
|
147
|
+
- **Round 2+** — Focus ONLY on whether the previous BLOCKERs were fixed. Do NOT introduce new NOTEs on areas not flagged in earlier rounds. Round 1 already did the full-depth review. In Round 2+, re-read only the specific files and re-run only the specific tests/commands tied to previous BLOCKERs — do not re-scan unrelated code, do not rerun the full suite, and do not probe new areas. If all previous BLOCKERs are resolved → `VERDICT: PASS` (or `VERDICT: PASS WITH NOTES` if old NOTEs remain). Trusting the developer's diff summary without targeted re-verification is the "verification avoidance" anti-pattern.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## VERDICT Contract
|
|
152
|
+
|
|
153
|
+
You MUST end your comment with exactly one of these three **literal** strings (automation greps for them):
|
|
154
|
+
|
|
155
|
+
- `VERDICT: PASS`
|
|
156
|
+
- `VERDICT: PASS WITH NOTES`
|
|
157
|
+
- `VERDICT: FAIL`
|
|
158
|
+
|
|
159
|
+
Mapping:
|
|
160
|
+
|
|
161
|
+
| Findings | Verdict |
|
|
162
|
+
|----------|---------|
|
|
163
|
+
| Any BLOCKER | `VERDICT: FAIL` |
|
|
164
|
+
| Only NOTEs (no BLOCKER) | `VERDICT: PASS WITH NOTES` |
|
|
165
|
+
| Nothing | `VERDICT: PASS` |
|
|
166
|
+
|
|
167
|
+
Do NOT invent other verdicts like "APPROVE" or "OK" — automation greps for the three exact strings above.
|
|
168
|
+
|
|
169
|
+
> The verdict is **advisory**. It informs the admin's decision in the `review-chorus` workflow; it does not by itself verify or reopen the task.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Output Format (Required)
|
|
174
|
+
|
|
175
|
+
Keep total output **under ~800 characters** — be concise. No preamble, no trailing summary paragraph. PASS items: names only. NOTE items: one-line descriptions. BLOCKER items: full evidence (command + output + expected vs actual).
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
### Review Summary
|
|
179
|
+
|
|
180
|
+
**PASS (N):** AC-1 name, AC-2 name, ...
|
|
181
|
+
|
|
182
|
+
**NOTE (M):**
|
|
183
|
+
- Note-1: [one-line description]
|
|
184
|
+
- Note-2: [one-line description]
|
|
185
|
+
|
|
186
|
+
**BLOCKER (K):**
|
|
187
|
+
### Blocker-1: name
|
|
188
|
+
**Command run:** [exact command executed]
|
|
189
|
+
**Output observed:** [actual output — copy-paste, not paraphrased]
|
|
190
|
+
**Evidence:** [specific finding with file paths, line numbers]
|
|
191
|
+
**Expected:** [what the AC requires]
|
|
192
|
+
**Actual:** [what happened]
|
|
193
|
+
|
|
194
|
+
VERDICT: PASS
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
(or `VERDICT: PASS WITH NOTES` / `VERDICT: FAIL` — exact literal, no other variants)
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Posting Results
|
|
202
|
+
|
|
203
|
+
Post the full review as a **single** comment on the task:
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
chorus_add_comment({
|
|
207
|
+
targetType: "task",
|
|
208
|
+
targetUuid: "<task-uuid>",
|
|
209
|
+
content: "<your review>"
|
|
210
|
+
})
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Next
|
|
216
|
+
|
|
217
|
+
- The admin reads your VERDICT comment, then verifies or reopens the task in the `review-chorus` skill (`<BASE_URL>/skill/review-chorus/SKILL.md`).
|
|
218
|
+
- For the developer workflow (what you are reviewing), see `develop-chorus` skill (`<BASE_URL>/skill/develop-chorus/SKILL.md`).
|
|
219
|
+
- For platform overview and shared tools, see `chorus` skill (`<BASE_URL>/skill/chorus/SKILL.md`).
|