diff --git a/.planning/phases/32.1-mcp-oauth-for-plugin-apps-declared-scopes-mcp-subject-on-con/32.1-REVIEW-DISPOSITION.md b/.planning/phases/32.1-mcp-oauth-for-plugin-apps-declared-scopes-mcp-subject-on-con/32.1-REVIEW-DISPOSITION.md new file mode 100644 index 00000000..a1bb9c63 --- /dev/null +++ b/.planning/phases/32.1-mcp-oauth-for-plugin-apps-declared-scopes-mcp-subject-on-con/32.1-REVIEW-DISPOSITION.md @@ -0,0 +1,53 @@ +--- +phase: 32.1 +review: 32.1-REVIEW.md +titles: json +findings: + - id: CR-01 + severity: critical + disposition: open + title: "An in-flight MCP allow recreates a consent the user just revoked" + - id: WR-01 + severity: warning + disposition: open + title: "Clearing a declared scope does not stop `read` or `write` from implying it" + - id: WR-02 + severity: warning + disposition: open + title: "`mcp_scopes` does not limit what an OAuth `read` or `write` grant can call" + - id: WR-03 + severity: warning + disposition: open + title: "The consent backfill treats unusable tokens as live grants" + - id: WR-04 + severity: warning + disposition: open + title: "Replacing a consent does not revoke refresh tokens that still carry the removed scopes" + - id: WR-05 + severity: warning + disposition: open + title: "sm-user-plugin v0.1.16 does not require the framework version it uses" + - id: WR-06 + severity: warning + disposition: open + title: "`/connect` can allow a stale request after `?request=` changes" +open: 7 +total: 7 +recorded: 2026-10-28T16:03:08.042Z +--- + +# Phase 32.1: Code Review Disposition + +| Finding | Severity | Disposition | Source | +|---------|----------|-------------|--------| +| CR-01 | critical | open | - | +| WR-01 | warning | open | - | +| WR-02 | warning | open | - | +| WR-03 | warning | open | - | +| WR-04 | warning | open | - | +| WR-05 | warning | open | - | +| WR-06 | warning | open | - | + +Dispositions: `open` (recorded, not yet triaged), `fixed`, `skipped`, `deferred`. +Set `deferred` by hand and put the reason in the Source cell; both are preserved. A `|` in the reason is kept as prose and escaped on the next run. +Re-running the gate keeps every row it can. A row the current review no longer reports is kept and its Source cell flagged, so a finding does not leave this record silently. ONE exception: when a finding id is REUSED by a different finding, the earlier decision cannot keep a row — the id is taken — and it is dropped. A RECORDED decision (anything but `open`) is named on the console when that happens; a row still at `open` is replaced silently, because `open` records no decision to lose.