Files
mcpctl/.taskmaster/tasks/task_150.md
Michal a869f77070 merge: AgentProject membership — the junction is now load-bearing
Merges feat/agent-project-membership (task 166/152). An agent can finally join
many projects: membership routes, per-membership role and optional brain
override, chat resolving context from the membership, and CLI attach-agent /
detach-agent / get memberships. The legacy Agent.projectId fallback is kept for
this release as the schema comment promises.

Conflict resolved in main.ts: that branch added its RBAC case to
mapUrlToPermission inline, while this branch had extracted the function to
middleware/url-permission.ts so it could be tested. Kept the extraction and
ported the case into it — joining a team is `edit:agents:<name>`, not
`create:agents`, which is the authority to mint a whole agent.

Also fixes something the extraction makes possible. security.test.ts contained a
hand-copied reproduction of mapUrlToPermission, because main.ts self-invokes
main() and nothing in it was importable. A security test asserting against a
copy stops testing the system the moment the real one changes, and this copy had
already drifted. It now imports the real function; all 18 assertions still pass,
against the code that actually runs.

Local: build clean, workspace 2550 passed, lint unchanged at 794 errors.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4wNHWf7xSwnZCWpJcyv9p
2026-08-09 23:34:18 +01:00

1.0 KiB

Task ID: 150

Title: QA/Security/SRE stage verdicts

Status: pending

Dependencies: 130

Priority: medium

Description: Implement risk-scaled verification stages that record commit-pinned verdicts

Details:

Update TaskService:

  1. recordVerdict(taskId, stage, agentId, commit, passed, summary, findings): create TaskVerdict row
  2. If !passed: transition task back to in_progress, create TaskEvent explaining why
  3. Determine required stages based on Task.risk:
    • trivial: may pass on light self-check (no mandatory QA/Security/SRE)
    • normal: requires qa_review
    • high: requires qa_review + security_review + sre_review
  4. Verdicts are immutable - append only, pinned to commit SHA
  5. Each stage persona decides its own depth (not enforced in code, just recorded)
  6. Transition to done only when all required stages have passing verdicts for current headCommit

Test Strategy:

Unit tests: test verdict creation, test failed verdict transitions back to in_progress, test risk-based stage requirements.