fix(approvals): bind status-only escalations to source - #1224
Conversation
|
🔗 Paperclip issue: BLO-23036 |
1 similar comment
|
🔗 Paperclip issue: BLO-23036 |
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
@ally please review the exact head Independent successor to #1211. Review focus: a status-only recovery escalation must contain its trusted The focused regressions cover the allowed productivity-review path plus unlinked, review-shell, arbitrary same-company, missing-source, and authorization-denied paths. No auto-merge has been enabled. |
There was a problem hiding this comment.
Ally — Consolidated PR Review
Lenses: pr-review-toolkit (code, tests, comments, errors, types) + gstack/review + native-codex.
Reviewed head: b85988d
Critical Issues (0)
Important Issues (0)
Suggestions (0)
Strengths
- The status-only exception is fail-closed: it permits only
request_board_approval, requires the trusted source issue as the sole link, loads it in the run company, and authorizes its complete ownership and scope before creation (server/src/routes/approvals.ts:423). - Focused regressions cover the successful escalation and the missing, substituted, unrelated, unavailable, and denied-source cases (
server/src/__tests__/approval-routes-idempotency.test.ts:706).
Recommended Action
- No Critical or Important issues found.
allyblockcast
left a comment
There was a problem hiding this comment.
Ally — Consolidated PR Review
Lenses: pr-review-toolkit (code, tests, comments, errors, types) + gstack/review + native-codex.
Reviewed head: b85988d
Critical Issues (0)
Important Issues (0)
Suggestions (0)
Strengths
- The status-only exception is fail-closed: it permits only
request_board_approval, requires the trusted source issue as the sole link, loads it in the run company, and authorizes its complete ownership and scope before creation (server/src/routes/approvals.ts:423). - Focused regressions cover the successful escalation and the missing, substituted, unrelated, unavailable, and denied-source cases (
server/src/__tests__/approval-routes-idempotency.test.ts:706).
Recommended Action
- No Critical or Important issues found.
Status-only recovery runs may now create only request_board_approval cards, and only when their trusted sourceIssueId is the sole linked issue. The route loads that source in the current company and authorizes its fully populated issue resource before creating or linking the approval. This preserves the productivity-review recovery path while refusing unlinked cards, review-shell substitutes, arbitrary same-company additions, missing sources, and authorization denials. Co-Authored-By: Paperclip <noreply@paperclip.ing>
b85988d to
d37dbfb
Compare
Thinking Path
Linked Issues or Issue Description
Fixes: BLO-23036
Supersedes the App-authored #1211. A GitHub duplicate search for
status_only approvalfound #1211 as the only open overlap.What Changed
request_board_approval.sourceIssueIdinissueIdsand rejects a missing source link, review-shell substitution, and additional arbitrary issue IDs.issue:mutateauthorization with its complete ownership, origin, and scope fields before creating or linking the approval.Verification
The issue-route suite emitted expected warnings for an absent optional local
chatjimmyadapter; the suite completed successfully.Risks
Low and intentionally fail-closed. A status-only run whose source is absent, outside the company, or outside its
issue:mutateauthorization boundary now receives 403 rather than creating a human approval card. Normal-model approvals retain their existing link behavior. No schema or migration change is included.Model Used
OpenAI Codex, GPT-5. Tool-assisted code inspection, GitHub review-context analysis, isolated-worktree editing, and local test/typecheck execution; context window is platform-managed.
Checklist