Skip to content

feat(review): decode the non-blocking findings of a stopped review in STATUS - #3174

Merged
Alan-TheGentleman merged 2 commits into
mainfrom
feat/review-status-non-blocking-decoder
Nov 12, 2026
Merged

Alan-TheGentleman merged 2 commits into
mainfrom
feat/review-status-non-blocking-decoder

Conversation

@Alan-TheGentleman

@Alan-TheGentleman Alan-TheGentleman commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

Refs #1494. First of six pull requests that make gentle_review_run return a stopped review's findings (split into bounded behavior slices; the full integrated stack is on branch docs/nbf-delivery-evidence). This one changes no behavior.

Why

When a native review ends in a correction request or escalated, the findings the provider admitted as non-blocking never reach the client: no public provider result carries them (Gentleman-Programming/gentle-ai#6088). The provider support is staged in Gentleman-Programming/gentle-ai#6107 and #6108 after merged #6092: with --non-blocking-findings, a current compact authority in correction_required or escalated carries

"non_blocking_findings": {"statement": "…", "findings": [{"id": "…", "lens": "…", "location": "…", "severity": "…", "disposition": "informational|follow_up|refuted", "claim": "…"}]}

What

The strict STATUS decoder (lib/review-integration-v2.ts and its generated twin runtime/review-integration-v2.mjs) accepts that optional key:

  • only on status/v9, for a current compact-v2 authority in correction_required or escalated (the provider's schema rule); it is rejected on approved, reviewing and status/v8;
  • with exact key sets inside it (an extra key, a missing claim, a disposition outside the three, an empty statement are rejected, like any other malformed STATUS);
  • advisory_findings and reviewer_results outside an approved closure stay rejected.

Nothing asks the provider for the key yet (the next pull request adds the flag to the STATUS request, the third bounds the result and the fourth uses it from the run), so no output changes.

Tests

  • tests/review-integration-nonblocking-findings.test.ts: accepted in the two states, rejected elsewhere, exact key sets, an old STATUS without the key decodes as before, and a real escalated v9 body captured from a provider built from the gentle-ai branch (tests/fixtures/devbinary/status-v9-escalated-non-blocking.captured.json, with its provenance) decodes in both the source and the runtime twin. Observed failing before the decoder change.
  • Locally, clean environment: review-integration, native-review-cli, review-coordinator, review-one-call, every contract test and package-manifest: 736 of 736; build-runtime-modules.mjs --check and verify-package-files.mjs pass.
  • An independent verification of the whole stack with real provider binaries (one that knows the flag, one that refuses it) confirmed the decoder claims.
  • Bench: recorded in the sixth pull request (docs(review): retain findings delivery and benchmark evidence #3215) (odd/tasks/review-one-call-bench.md); this slice has no behavior to measure.

Risk: none here (no caller yet). The stack as a whole is item 3 (shared STATUS code), verified independently.

Summary by CodeRabbit

  • New Features
    • Review status information can now include non-blocking findings for eligible correction-required and escalated reviews.
    • Findings can include severity, disposition, and claim details, with optional lens and location information.
    • Existing statuses without non-blocking findings continue to be supported.

… STATUS

gentle-ai can return, on request, the findings a review admitted as
non-blocking when it stops in correction_required or escalated
(gentle-ai#6088). The strict STATUS decoder accepts the optional key
non_blocking_findings only on status/v9 for a current compact authority
in those two states, with exact key sets, and rejects it elsewhere.
Nothing asks for it yet, so no behavior changes.

Refs #1494
@Alan-TheGentleman Alan-TheGentleman added the type:feature New feature label Nov 11, 2026
@coderabbitai

coderabbitai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The library and runtime status decoders now accept non_blocking_findings in eligible status/v9 payloads. They validate the findings and return them in the decoded status. New tests cover eligible and rejected payloads and a captured status fixture.

Changes: Status v9 non-blocking findings

Layer / File(s) Summary
Define and decode non-blocking findings
lib/review-integration-v2.ts, runtime/review-integration-v2.mjs
Both decoders add the findings data shape and accept the field only for status/v9 payloads with compact-v2 authority in correction_required or escalated. They validate the statement and finding fields, then include decoded findings in the returned status.
Verify decoding constraints
tests/review-integration-nonblocking-findings.test.ts, tests/fixtures/devbinary/status-v9-escalated-non-blocking.*
Tests cover accepted states, invalid fields, unsupported authority or schema, and closures. A captured status/v9 fixture and provenance are added.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Feature

Suggested reviewers: dnlrsls

Merge Risk: Minimal · up to b23be

This adds decoding support for an optional status field that nothing requests yet, so current behavior does not change. No merge-blocking risk was identified.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title names the primary change: the STATUS decoder now accepts and decodes the optional non_blocking_findings key for a stopped review. The changeset matches this. The raw summary shows the decode…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Full details: Title check

Explanation

The title names the primary change: the STATUS decoder now accepts and decodes the optional non_blocking_findings key for a stopped review. The changeset matches this. The raw summary shows the decoder changes in both the library and runtime twin, the fixture, and the tests. The objectives confirm that the key is accepted only for status/v9 in correction_required or escalated states. The title is specific and does not mention files. It does not cover the rejection rules or the fixture, which is expected.

Finishing Touches

Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: ASSERTIVE
  • Plan: Team
  • Run ID: 2467bad3-af48-46a1-ae1a-4f0a9c707fdb
Commits

Reviewing files that changed from the base of the PR and between defee68 and b23bed8.

Files selected for processing: 5

  • lib/review-integration-v2.ts
  • runtime/review-integration-v2.mjs
  • tests/fixtures/devbinary/status-v9-escalated-non-blocking.captured.json
  • tests/fixtures/devbinary/status-v9-escalated-non-blocking.provenance.md
  • tests/review-integration-nonblocking-findings.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant