Skip to content

feat: persist structured review findings - #204

Merged
oratis merged 33 commits into
mainfrom
codex/structured-review-findings
Aug 2, 2026
Merged

feat: persist structured review findings#204
oratis merged 33 commits into
mainfrom
codex/structured-review-findings

Conversation

@oratis

@oratis oratis commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Summary

  • add read-only SubmitReviewFinding built-in tool with validated workspace-relative path, tight line range, priority, and optional replacement
  • project successful tool results into durable review_finding completed items
  • render and forward those findings through VS Code, Desktop, and native LSP protocol events
  • add shared reviewApplyPrompt and apply selected findings as ordinary canonical turns
  • keep Apply behind existing Edit/Write permissions, approval, hooks, sandbox, cancellation, and snapshots; no direct write endpoint
  • reject malformed external finding payloads, absolute/traversal paths, control chars, invalid ranges, and oversized replacements

Validation

  • pnpm format:check
  • pnpm lint (one pre-existing warning)
  • pnpm typecheck
  • pnpm test (1022 passed, 12 skipped)
  • pnpm docs:check
  • pnpm build
  • pnpm --filter @deepcode/desktop test:e2e (4 passed)
  • sidecar and VS Code child CJS syntax checks
  • VSIX: 8 files, 177.25 KB

t added 30 commits August 1, 2026 13:32
@oratis
oratis force-pushed the codex/structured-review-findings branch from fda042a to 360a214 Compare August 1, 2026 09:07
@oratis
oratis changed the base branch from codex/diff-review-protocol to main August 2, 2026 06:36
@oratis
oratis marked this pull request as ready for review August 2, 2026 06:45
@oratis

oratis commented Aug 2, 2026

Copy link
Copy Markdown
Owner Author

Review: approved ✅

The design decision I want to endorse explicitly: SubmitReviewFinding is read-only and there is no direct write endpoint. Applying a finding goes through an ordinary canonical turn, so it inherits Edit/Write permissions, approval, hooks, sandbox, cancellation, and snapshots.

A "just apply this suggested replacement" endpoint would have been the natural shortcut and would have punched a hole straight through #181's central gate — a tool-authored payload writing to disk without passing the dispatcher. Routing Apply through a normal turn instead means review findings get no privilege the model doesn't already have. That's the right call even though it costs a round trip.

What I checked

  • Input validation rejects absolute paths, traversal, control characters, invalid ranges, and oversized replacements. Path traversal is the obvious one; rejecting control characters also matters because findings are rendered into terminals and webviews where escape sequences are actionable.
  • Workspace-relative paths with a tight line range keep findings anchored and bounded.
  • Successful results project into durable review_finding completed items, consistent with feat: define experimental runtime protocol #186's persist-completed-items rule, so findings survive resume.
  • Malformed external finding payloads are rejected — findings can arrive from a client, so the server can't assume its own tool produced them.
  • Shared reviewApplyPrompt means the three clients issue the same apply semantics rather than each phrasing it differently.

Validation: CI green; full suite green locally at the stack tip.

@oratis
oratis merged commit 05767ab into main Aug 2, 2026
5 checks passed
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.

1 participant