Skip to content

fix(api): restrict survey triage to reviewer groups by confidentiality - #1111

Merged
ericfitz merged 7 commits into
mainfrom
fix/1100-triage-reviewer-authz
Oct 18, 2026
Merged

ericfitz merged 7 commits into
mainfrom
fix/1100-triage-reviewer-authz

Conversation

@ericfitz

@ericfitz ericfitz commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Triage endpoints (/triage/survey_responses/*, including metadata and triage notes) are open only to Security Reviewers for non-confidential responses and to Confidential Project Reviewers for confidential ones. Ownership and the row ACL grant no triage access. This is a human decision; see the ADR docs/superpowers/specs/2026-10-17-adr-triage-access-by-reviewer-group.md.
  • A denied request returns 404, and an unknown confidentiality value fails closed as confidential. The list is filtered in the store on is_confidential, so a non-reviewer gets an empty 200.
  • PATCH /intake/survey_responses/{id} may set status only to draft or submitted; any other value returns 400. This closes a path where a submitter could approve their own response (human decision, confirmed 2026-10-17).
  • The integration workflow test now triages as reviewer-group members.
  • CATS seed data makes the fuzzing identity (charlie) a Security Reviewer, so seeding triage notes and fuzzing triage keep working.

Notes

Test plan

  • Unit tests for the access guard, list scope and intake status validation
  • make verify
  • Combined integration run: 97 passed, 0 failed
  • Oracle review: APPROVED WITH NOTES (notes addressed or parked)

Fixes #1100

🤖 Generated with Claude Code

https://claude.ai/code/session_015szS68rpMLaq712AFsbMfr

ericfitz and others added 7 commits October 17, 2026 23:34
Triage endpoints now require membership in Security Reviewers (non-confidential
responses) or Confidential Project Reviewers (confidential responses);
ownership and the row ACL grant no triage access. Denial is 404; the list is
scoped via an is_confidential store filter and is empty for non-reviewers.

Fixes #1100

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015szS68rpMLaq712AFsbMfr
Intake PATCH may now set status only to draft or submitted, closing a bypass
of the triage reviewer restriction. Also resolve membership once in the triage
list scope, add triage metadata positive-path tests, and refresh SEM markers.

Fixes #1100

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015szS68rpMLaq712AFsbMfr
Refs #1100

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The submitter now gets 404 on triage per-id routes and a 400 when PATCHing
intake status to ready_for_review. Security Reviewers and Confidential Project
Reviewers members triage via the group-membership path.

Refs #1100

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015szS68rpMLaq712AFsbMfr
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015szS68rpMLaq712AFsbMfr
…ding

Triage endpoints now admit only reviewer-group members, so seeding a
triage note as charlie (admin, not a reviewer) returned 404.

Refs #1100

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015szS68rpMLaq712AFsbMfr
@ericfitz
ericfitz force-pushed the fix/1100-triage-reviewer-authz branch from 90b1ddf to edb84e8 Compare October 18, 2026 03:38
@ericfitz
ericfitz merged commit e3c91a4 into main Oct 18, 2026
18 checks passed
@ericfitz
ericfitz deleted the fix/1100-triage-reviewer-authz branch October 18, 2026 03:46
ericfitz-version-bump Bot added a commit that referenced this pull request Oct 18, 2026
Folds 1 merged commit(s):
- e3c91a4 fix(api): restrict survey triage to reviewer groups by confidentiality (#1111)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(api): restrict survey triage to reviewer groups by confidentiality, not ownership

1 participant