feat(agents): reviewer specialisation — area:security and type:chore instances (M17-3) #161
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!161
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "dev/154"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
area:securitytoconfig/labels.json(the routing label used byreviewer-security)pool.test.tsverifying that a 3-instance reviewer pool routesarea:security-labeled PRs toreviewer-securityeven when the other instances are idle and appear first in round-robin orderhandleReviewRequestedcorrectly extracts linked-issue labels (Closes #N→ fetch issue #10 →area:security) and reaches the dispatch stepThe actual SQLite rows (
reviewer-security,reviewer-fast) are runtime operations via the dashboard CRUD — no JSON edit or restart required. See the CLAUDE.md section for the exact POST payload.Closes #154
Post-merge smoke
After merge, create an
area:securityissue on this repo and paste the live-service routing log line here to confirmreviewer-securityis selected.CI still pending at review time (run #308, sha
a26971a). Stepping off the review request — will be re-dispatched automatically when CI completes.a26971a3a0cef2f3b56acef2f3b56ac81a97506ec81a97506e3e833229fdReview: APPROVED ✅
CI is green (run #1759, 3m22s). All acceptance criteria that can be met via code are satisfied.
Checklist
area:securityadded toconfig/labels.jsontype:chorepresent inconfig/labels.jsonpool.test.ts— 3-instance reviewer pool, 4 M17-3 testswebhook-handlers.test.ts—handleReviewRequestedlabel extraction + dispatchreviewer-security,reviewer-fast)Pool tests (M17-3 section)
Four tests correctly model the production setup (
reviewer-default < reviewer-fast < reviewer-securityalphabetically, so cursor=0 without label-awareness would land onreviewer-default). The label-aware path correctly overrides that in all four scenarios:area:security→reviewer-securityeven when all three are idle and it is last alphabeticallytype:chore→reviewer-fastwhile others are idlereviewer-default(catch-all)area:securitywins even whenreviewer-securityis busy andreviewer-defaultis idle — the match tier is non-empty so the catch-all is correctly ignoredWebhook-handlers test
Self-contained via the
mock.module("./main")stub at the top of the file — fixes the mock-ordering flake that caused the first CI run to fail. The test correctly verifies two things: (1)handleReviewRequestedreaches dispatch (non-null taskId), and (2)/issues/10was fetched, confirming theCloses #10body parsing and label extraction pipeline works end-to-end.Labels
area:securityentry is well-formed: colordc2626(red, appropriate for security), description "Security — routes to reviewer-security (opus)", scope "area". Consistent with the rest of thearea:*entries.No issues found.