Skip to content

Reset resolved baseline review blocks without approving - #149

Merged
gontzess merged 8 commits into
mainfrom
steve.gontzes/CXH-2780/baseline-self-dismissal
Oct 14, 2026
Merged

gontzess merged 8 commits into
mainfrom
steve.gontzes/CXH-2780/baseline-self-dismissal

Conversation

@gontzess

@gontzess gontzess commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Why

A clean COMMENT review does not clear the bot's earlier CHANGES_REQUESTED review. After the reported issues are fixed, that old block can remain until someone dismisses it manually.

This PR lets the reviewer dismiss its own resolved blocking reviews after a complete, successful re-review—without submitting APPROVE or satisfying an approval requirement.

What changes

  • Capture the reviewer's own prior blocking reviews and the findings that must be rechecked.
  • Ask the agent for a structured assessment of every captured finding, including current-code evidence. CI supplies run, commit and session provenance; the agent does not generate it.
  • Persist the accepted assessment before dismissal. Require a completed clean review, then recheck the current head/base, review ownership and original evidence before dismissing only the captured reviews.
  • Retain blocks when evidence is missing, incomplete, stale or inconsistent, or when capture/upload fails. Reset failures do not suppress ordinary review publication.

This applies to both baseline review profiles without an opt-in. Human and other reviewer profiles' reviews are never dismissal targets; unverifiable legacy reviews remain untouched. The existing model, tools, permissions and ordinary review publisher are unchanged.

Validation

  • 175 automated tests passed:
    python3 -m unittest discover -s .github/actions/pr-review/scripts -p 'test_*.py'
    Coverage includes exact-target dismissal, incomplete or malformed assessments, CI/session binding, stale head/base, upload failures, ownership checks and unchanged ordinary publication.
  • Live draft-PR workflow tests passed: a real blocker followed by its fix; the old block remained throughout the new review and was dismissed only after evidence upload and completed clean publication. A non-target block remained unchanged, and no approval was submitted. First-clean-run and stale-run retention cases also passed.
  • An independent code review found no blocking issues; git diff --check passed.

Validation limit: the final simplification that makes provenance exclusively CI-owned has automated-test and source-review coverage, but has not yet been rerun in the live workflow. The live results are not evidence of deployment across all caller configurations.

gontzess and others added 2 commits October 12, 2026 21:10
Add frozen obligation snapshots, native completion validation, bounded historical artifact verification, and exact-target reset helpers. Runtime wiring and verification follow separately.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
Use native read-only tool inventory, frozen original obligations, structured completion evidence, required accepted-result persistence, and artifact-backed baseline publication before exact resets. Add mocked regression coverage and document retention and runtime-validation limits. Preserve lossless diff decoding and canonical redaction; use structured audit status rather than prose heuristics.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@linear-code

linear-code Bot commented Oct 12, 2026

Copy link
Copy Markdown

CXH-2780

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 9a3cd39a5585

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: full
View review run

Review Summary

The PR limits the review model to read-only tools (--tools Read,Glob,Grep,Agent, no Bash or gh). The host now fetches the full diff into .github/pr-review.diff ahead of time and saves the earlier blocking findings to .github/prior-obligations.json. The model must return a structured result. _review_result.py checks that result against the runner's execution log and saves it as an immutable artifact before anything is published. After the report and its COMMENT review are complete, publish-review-report.py dismisses the bot's own earlier CHANGES_REQUESTED reviews, but only when every original finding was re-checked as withdrawable and no evidence was unavailable. I scanned the full diff for security and correctness, including the dismissal path, artifact download (the auth header is stripped on redirect) and the path and symlink guards. The prior-finding checks are deliberately conservative and I found no confident bugs. I did not trace every one of the roughly 1,900 lines of new tests. No repo-local criteria loaded.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New (medium confidence): .github/actions/pr-review/scripts/_review_result.py:533-603 — the completion receipt expects a specific runner format (exact tool set, permissionMode == "default", only the two named MCP servers, structured_output on the terminal message). It also depends on --json-schema accepting pattern, minLength/maxItems and ["string","null"]. None of this has been tested against a live runner. If any of it is wrong, every review run fails at validate and publish is skipped, so no report or verdict is posted. Before, a verdict was always published from the working comment. The PR body admits no live smoke test was run.
  • New (high confidence): .github/actions/pr-review/prompts/mixins/connector.md:210 still tells the model to check dependencies against "the full gh pr diff". The model no longer has a shell or gh, so connector reviews get an instruction they can't follow. Point it to .github/pr-review.diff instead.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/_review_result.py`:
- Around line 533-603 (completion_receipt) and the `--json-schema` flag in action.yml: the checks expect a specific runner format (init tools subset, permissionMode == "default", MCP servers limited to github_comment/github_inline_comment, terminal structured_output) and assume the CLI accepts the pattern/minLength/maxItems/type-array schema keywords. None of this has been confirmed on the pinned runner. Any mismatch fails every review run before publish, and no verdict is posted. Run the live candidate smoke test before enabling. Consider loosening checks that aren't security-critical (for example permissionMode or the MCP server names), or emit a distinct annotation for this failure so it is easy to tell apart from a bad model result.

In `.github/actions/pr-review/prompts/mixins/connector.md`:
- Around line 210: replace the "full `gh pr diff`" wording with the host-prefetched `.github/pr-review.diff`, because the model no longer has shell or gh access.

Comment on lines +542 to +546
require(len(init) == 1 and isinstance(init[0].get("tools"), list)
and set(init[0]["tools"]).issubset(MODEL_TOOLS)
and "Read" in init[0]["tools"] and "Bash" not in init[0]["tools"],
"runner did not use the constrained model tool inventory")
require(init[0].get("permissionMode") == "default", "unexpected model permission mode")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Suggestion (medium confidence): These checks expect a specific runner format: an exact tool set, permissionMode == "default", only the two named MCP servers, and structured_output on the terminal message. They also depend on --json-schema accepting the pattern, minLength/maxItems and ["string","null"] keywords. None of this has been confirmed against a live pinned runner. If any guess is wrong, every review fails at validate, and publish is skipped, so the PR gets no report and no verdict at all. Before enabling, run the candidate smoke test, and consider a separate failure annotation that makes this case easy to spot.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit a4f79d69bed5

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: full
View review run

Review Summary

The PR limits the review model to read-only tools (--tools Read,Glob,Grep,Agent, no Bash or gh). The host now fetches the full diff into .github/pr-review.diff ahead of time and saves the earlier blocking findings to .github/prior-obligations.json. The model must return a structured result. _review_result.py checks that result against the runner's execution log and saves it as an immutable artifact before anything is published. After the report and its COMMENT review are complete, publish-review-report.py dismisses the bot's own earlier CHANGES_REQUESTED reviews, but only when every original finding was re-checked as withdrawable and no evidence was unavailable. I scanned the full diff for security and correctness, including the dismissal path, artifact download (the auth header is stripped on redirect) and the path and symlink guards. The prior-finding checks are deliberately conservative and I found no confident bugs. I did not trace every one of the roughly 1,900 lines of new tests. No repo-local criteria loaded.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New (medium confidence): .github/actions/pr-review/scripts/_review_result.py:533-603 — the completion receipt expects a specific runner format (exact tool set, permissionMode == "default", only the two named MCP servers, structured_output on the terminal message). It also depends on --json-schema accepting pattern, minLength/maxItems and ["string","null"]. None of this has been tested against a live runner. If any of it is wrong, every review run fails at validate and publish is skipped, so no report or verdict is posted. Before, a verdict was always published from the working comment. The PR body admits no live smoke test was run.
  • New (high confidence): .github/actions/pr-review/prompts/mixins/connector.md:210 still tells the model to check dependencies against "the full gh pr diff". The model no longer has a shell or gh, so connector reviews get an instruction they can't follow. Point it to .github/pr-review.diff instead.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/_review_result.py`:
- Around line 533-603 (completion_receipt) and the `--json-schema` flag in action.yml: the checks expect a specific runner format (init tools subset, permissionMode == "default", MCP servers limited to github_comment/github_inline_comment, terminal structured_output) and assume the CLI accepts the pattern/minLength/maxItems/type-array schema keywords. None of this has been confirmed on the pinned runner. Any mismatch fails every review run before publish, and no verdict is posted. Run the live candidate smoke test before enabling. Consider loosening checks that aren't security-critical (for example permissionMode or the MCP server names), or emit a distinct annotation for this failure so it is easy to tell apart from a bad model result.

In `.github/actions/pr-review/prompts/mixins/connector.md`:
- Around line 210: replace the "full `gh pr diff`" wording with the host-prefetched `.github/pr-review.diff`, because the model no longer has shell or gh access.

Reviewed commit: 9a3cd39a5585

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found — see the full review report

Bind native completion to the current runner session instead of transporting the full structured body through env. Add trusted read-path settings, realistic MCP fixtures and file-transport regressions, and document required pre-merge runtime smoke.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit a4f79d69bed5

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 9a3cd39
View review run

Review Summary

The new commit a4f79d6 stops passing the native result through the REVIEW_STRUCTURED_OUTPUT environment variable, which avoids the per-string exec size limit. validate() now reads the terminal structured_output from the strict-JSON execution file in RUNNER_TEMP, re-checks the 1 MiB result cap, and requires the init and terminal session_id to match the action's session_id output. The commit also adds trusted settings with blockReadsOutsideWorkingDirectories and Read denies for .git, _workflow, runner temp, hidden home dirs and /proc, /sys, /dev, /tmp, plus new tests and README updates. I scanned the full PR diff for security and correctness. I confirmed that the pinned claude-code-action@9171db3 declares session_id, execution_file and settings, and that the absolute deny pattern /${{ runner.temp }} correctly expands to a //… root path. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present (medium confidence): .github/actions/pr-review/scripts/_review_result.py:533-610: completion_receipt still depends on runner output details that no one has checked on the pinned runner: the init tool subset, permissionMode == "default", MCP server names and status, terminal structured_output, and now session_id on both the init and terminal messages. It also relies on --json-schema accepting the schema's keywords, and blockReadsOutsideWorkingDirectories has not been shown to be a setting Claude Code recognizes. If any of these is wrong, every run fails at validate and no report or verdict is published. The README now marks the live smoke as required before merge/enabling, which is the right gate, but the risk remains until that smoke runs.
  • Prior — still present (high confidence): .github/actions/pr-review/prompts/mixins/connector.md:210 still tells the model to check dependencies against "the full gh pr diff". The model has no shell or gh. The base prompt already points at .github/pr-review.diff (base-pr-review.md:98,192), so the mixin should too.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/_review_result.py`:
- Around line 533-610 (completion_receipt) and the `--json-schema`/`settings` inputs in action.yml: the receipt checks assume a specific runner format: init tools subset, permissionMode == "default", MCP servers limited to github_comment/github_inline_comment with status connected, terminal structured_output, and init and terminal session_id equal to the action's session_id output. They also assume the CLI accepts the schema keywords and the `blockReadsOutsideWorkingDirectories` setting. None of this has been confirmed on pinned Claude Code 2.1.282. Run the documented live candidate smoke before enabling. Consider giving receipt-format failures a distinct annotation so they are easy to tell apart from a bad model result.

In `.github/actions/pr-review/prompts/mixins/connector.md`:
- Around line 210: replace the "full `gh pr diff`" wording with the host-prefetched `.github/pr-review.diff`, because the model no longer has shell or gh access.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit a3361e1da80f

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 9a3cd39
View review run

Review Summary

The new commit a4f79d6 stops passing the native result through the REVIEW_STRUCTURED_OUTPUT environment variable, which avoids the per-string exec size limit. validate() now reads the terminal structured_output from the strict-JSON execution file in RUNNER_TEMP, re-checks the 1 MiB result cap, and requires the init and terminal session_id to match the action's session_id output. The commit also adds trusted settings with blockReadsOutsideWorkingDirectories and Read denies for .git, _workflow, runner temp, hidden home dirs and /proc, /sys, /dev, /tmp, plus new tests and README updates. I scanned the full PR diff for security and correctness. I confirmed that the pinned claude-code-action@9171db3 declares session_id, execution_file and settings, and that the absolute deny pattern /${{ runner.temp }} correctly expands to a //… root path. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present (medium confidence): .github/actions/pr-review/scripts/_review_result.py:533-610: completion_receipt still depends on runner output details that no one has checked on the pinned runner: the init tool subset, permissionMode == "default", MCP server names and status, terminal structured_output, and now session_id on both the init and terminal messages. It also relies on --json-schema accepting the schema's keywords, and blockReadsOutsideWorkingDirectories has not been shown to be a setting Claude Code recognizes. If any of these is wrong, every run fails at validate and no report or verdict is published. The README now marks the live smoke as required before merge/enabling, which is the right gate, but the risk remains until that smoke runs.
  • Prior — still present (high confidence): .github/actions/pr-review/prompts/mixins/connector.md:210 still tells the model to check dependencies against "the full gh pr diff". The model has no shell or gh. The base prompt already points at .github/pr-review.diff (base-pr-review.md:98,192), so the mixin should too.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/_review_result.py`:
- Around line 533-610 (completion_receipt) and the `--json-schema`/`settings` inputs in action.yml: the receipt checks assume a specific runner format: init tools subset, permissionMode == "default", MCP servers limited to github_comment/github_inline_comment with status connected, terminal structured_output, and init and terminal session_id equal to the action's session_id output. They also assume the CLI accepts the schema keywords and the `blockReadsOutsideWorkingDirectories` setting. None of this has been confirmed on pinned Claude Code 2.1.282. Run the documented live candidate smoke before enabling. Consider giving receipt-format failures a distinct annotation so they are easy to tell apart from a bad model result.

In `.github/actions/pr-review/prompts/mixins/connector.md`:
- Around line 210: replace the "full `gh pr diff`" wording with the host-prefetched `.github/pr-review.diff`, because the model no longer has shell or gh access.

Reviewed commit: a4f79d69bed5

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found — see the full review report

Restore the baseline reviewer tools, permissions, report publisher and tests. Capture optional run-bound audit evidence without changing ordinary publication, then dismiss only exact positively owned prior blocks after persistence and completed clean publication.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit a3361e1da80f

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since a4f79d6
View review run

Review Summary

The new commits narrow the PR substantially. They revert the reviewer-runtime changes: the native --json-schema result, the read-path settings, the prefetched diff, the _review_result.py gate, and the publisher, _gh.py and Makefile edits. The original model tools and the publisher are back unchanged. What remains is an additive, fully continue-on-error reset path in review-reset.py:

  • prepare runs before the model and freezes the owned CHANGES_REQUESTED reviews, their count-accounted findings, and the prior-finding inputs.
  • capture takes a terminal review-reset-proof block from the execution file.
  • The proof is uploaded as an artifact.
  • dismiss runs only after the normal publisher produced a clean COMMENT, and re-checks the PR head/base, the targets, the edit history of the original evidence, and newer runs before each PUT.

I scanned the full 5-file PR diff for security and correctness. I also checked the reset code against the publisher helpers it reuses, including that the publisher's superseded-report collapse runs before dismiss and leaves target_evidence stable. No repo-local criteria loaded, so only the base criteria were applied. Live GitHub semantics (GraphQL edit-history fields, dismissal behaviour, the run-listing cap) were not exercised here. The PR body already gates enabling on a live candidate smoke.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New (low confidence) .github/actions/pr-review/scripts/review-reset.py:281: capture re-reads .github/review-reset.json from the workspace after the model step and only checks identity. dismiss re-derives target findings but not the frozen audit list. A rewrite of that file between prepare and capture could drop audit entries for still-present blockers. Binding the snapshot hash from prepare would close this.
  • New (high confidence) PR description vs. diff: the body still says the PR removes shell/gh tools, adds native read-path restrictions, supplies a prefetched diff, and uses "run-bound native structured results". It also reports "Validation at a4f79d6". The current diff reverts all of that: claude_args is unchanged and ActionContractTest asserts there is no --json-schema. Update the description so reviewers judge the actual, much smaller scope.

Resolved prior findings

  • _review_result.py completion_receipt runner-format and --json-schema/settings assumptions: obsolete. _review_result.py, the --json-schema input and the settings block were removed. Reset proof capture now uses only the type/subtype/session_id/result fields of the execution file (review-reset.py:285-293), and a malformed record only retains the blocks; it no longer fails publication.
  • prompts/mixins/connector.md:210 "full gh pr diff" wording: obsolete. The model has Bash(gh pr diff:*) again (action.yml:196), so the instruction is valid again.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around line 245-250 (prepare) and 281 (capture): the frozen snapshot lives in the workspace at .github/review-reset.json and is re-read after the model step with only an identity check. dismiss() re-derives target findings but not the audit list. In prepare, write sha256 of the snapshot file to GITHUB_OUTPUT. Pass it to the capture step as an env var (e.g. REVIEW_RESET_SNAPSHOT_SHA256 from steps.reset-prepare.outputs). In capture, verify the file hash before trusting snapshot["audit"]. Alternatively, re-derive the expected audit IDs from targets plus the prior/context inputs inside dismiss().

In the PR description:
- Remove the claims that the PR removes shell/gh tools, adds native read-path restrictions, supplies a prefetched diff, and uses native structured results. Refresh the validation section for the current head, because those changes were reverted.



def capture():
snapshot = read_json(SNAPSHOT)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Suggestion (low confidence): capture re-reads the frozen snapshot from the workspace (.github/review-reset.json) after the model step and only checks identity. dismiss re-derives each target's findings but never the audit list. If anything rewrites that file between prepare and capture (the model step holds Bash(gh api:*) and a write-capable token), entries for still-present blockers can be dropped and the proof would still validate. Consider writing a sha256 of the snapshot as a prepare step output and verifying it in capture, or re-deriving the audit IDs from the targets/prior inputs in dismiss.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 33f0271edb48

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since a4f79d6
View review run

Review Summary

The new commits narrow the PR substantially. They revert the reviewer-runtime changes: the native --json-schema result, the read-path settings, the prefetched diff, the _review_result.py gate, and the publisher, _gh.py and Makefile edits. The original model tools and the publisher are back unchanged. What remains is an additive, fully continue-on-error reset path in review-reset.py:

  • prepare runs before the model and freezes the owned CHANGES_REQUESTED reviews, their count-accounted findings, and the prior-finding inputs.
  • capture takes a terminal review-reset-proof block from the execution file.
  • The proof is uploaded as an artifact.
  • dismiss runs only after the normal publisher produced a clean COMMENT, and re-checks the PR head/base, the targets, the edit history of the original evidence, and newer runs before each PUT.

I scanned the full 5-file PR diff for security and correctness. I also checked the reset code against the publisher helpers it reuses, including that the publisher's superseded-report collapse runs before dismiss and leaves target_evidence stable. No repo-local criteria loaded, so only the base criteria were applied. Live GitHub semantics (GraphQL edit-history fields, dismissal behaviour, the run-listing cap) were not exercised here. The PR body already gates enabling on a live candidate smoke.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New (low confidence) .github/actions/pr-review/scripts/review-reset.py:281: capture re-reads .github/review-reset.json from the workspace after the model step and only checks identity. dismiss re-derives target findings but not the frozen audit list. A rewrite of that file between prepare and capture could drop audit entries for still-present blockers. Binding the snapshot hash from prepare would close this.
  • New (high confidence) PR description vs. diff: the body still says the PR removes shell/gh tools, adds native read-path restrictions, supplies a prefetched diff, and uses "run-bound native structured results". It also reports "Validation at a4f79d6". The current diff reverts all of that: claude_args is unchanged and ActionContractTest asserts there is no --json-schema. Update the description so reviewers judge the actual, much smaller scope.

Resolved prior findings

  • _review_result.py completion_receipt runner-format and --json-schema/settings assumptions: obsolete. _review_result.py, the --json-schema input and the settings block were removed. Reset proof capture now uses only the type/subtype/session_id/result fields of the execution file (review-reset.py:285-293), and a malformed record only retains the blocks; it no longer fails publication.
  • prompts/mixins/connector.md:210 "full gh pr diff" wording: obsolete. The model has Bash(gh pr diff:*) again (action.yml:196), so the instruction is valid again.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around line 245-250 (prepare) and 281 (capture): the frozen snapshot lives in the workspace at .github/review-reset.json and is re-read after the model step with only an identity check. dismiss() re-derives target findings but not the audit list. In prepare, write sha256 of the snapshot file to GITHUB_OUTPUT. Pass it to the capture step as an env var (e.g. REVIEW_RESET_SNAPSHOT_SHA256 from steps.reset-prepare.outputs). In capture, verify the file hash before trusting snapshot["audit"]. Alternatively, re-derive the expected audit IDs from targets plus the prior/context inputs inside dismiss().

In the PR description:
- Remove the claims that the PR removes shell/gh tools, adds native read-path restrictions, supplies a prefetched diff, and uses native structured results. Refresh the validation section for the current head, because those changes were reverted.

Reviewed commit: a3361e1da80f

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found — see the full review report

Validate the returned workflow URL against the exact GitHub API root and repository, permitting standard and org-required workflow namespaces before paginating competing runs.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 33f0271edb48

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since a3361e1
View review run

Review Summary

The new commit (33f0271) changes how check_newer_runs lists competing runs (review-reset.py:317-322):

  • Before, it built actions/workflows/{workflow_id}/runs. Now it uses the run's own workflow_url.
  • That URL must first match the exact API_ROOT/repos/{repo}/actions/(workflows|required_workflows)/<digits> pattern. re.fullmatch is used and the repo is regex-escaped.
  • An unexpected URL raises before any list call, so the existing reviews stay blocked. _gh._api_url passes absolute URLs through unchanged, and the existing pagination and total_count checks still apply.
  • New tests cover both URL shapes, many foreign or malformed URLs, and incomplete pagination.

I scanned the full PR diff (5 files, about 1,070 lines) for security and correctness and found no new issues. No repo-local criteria loaded, so only the base criteria were applied.

Coverage gap: one behavior is untested live. For ruleset-required workflows, workflow_url may point at the repository that defines the workflow rather than the PR repository. If it does, the new check rejects the URL and dismissal never happens. That outcome is safe (the block stays) but it disables the feature. The PR already lists live candidate validation as outstanding.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present (high confidence): the PR description doesn't match the diff. The body still says the PR removes shell/gh tools, adds native read-path restrictions, prefetches the diff, and uses "run-bound native structured results", and it cites "Validation at a4f79d6". The current action.yml:196 still allows Bash(gh pr diff:*), Bash(gh pr view:*) and Bash(gh api:*), and there is no --json-schema.
  • Prior — still present (low confidence): capture (scripts/review-reset.py:281-282) re-reads the workspace file .github/review-reset.json after the model step and checks only identity. Nothing binds a hash of the snapshot written by prepare (:245), so a rewrite between the two steps could drop audit entries. The risk is lower because the model's allowed tools include no file-write tool.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In the PR description (PR #149 body):
- Rewrite the summary so it matches the current, smaller scope. The diff no longer removes shell/gh tools, adds native read-path restrictions, prefetches the full diff, or uses native structured results (`--json-schema`); `action.yml:196` still allows `Bash(gh pr diff:*)`, `Bash(gh pr view:*)` and `Bash(gh api:*)`. Replace "Validation at a4f79d6" with validation run against the current head.

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around lines 245 and 281-282: in `prepare`, emit a sha256 of the written `.github/review-reset.json` as a step output. Pass it to `capture` through an env var in `action.yml`, and have `capture` require that the re-read file's hash matches it before trusting the snapshot's `audit`/`targets`. A rewrite between prepare and capture then fails closed.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 63c54cdc3fba

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since a3361e1
View review run

Review Summary

The new commit (33f0271) changes how check_newer_runs lists competing runs (review-reset.py:317-322):

  • Before, it built actions/workflows/{workflow_id}/runs. Now it uses the run's own workflow_url.
  • That URL must first match the exact API_ROOT/repos/{repo}/actions/(workflows|required_workflows)/<digits> pattern. re.fullmatch is used and the repo is regex-escaped.
  • An unexpected URL raises before any list call, so the existing reviews stay blocked. _gh._api_url passes absolute URLs through unchanged, and the existing pagination and total_count checks still apply.
  • New tests cover both URL shapes, many foreign or malformed URLs, and incomplete pagination.

I scanned the full PR diff (5 files, about 1,070 lines) for security and correctness and found no new issues. No repo-local criteria loaded, so only the base criteria were applied.

Coverage gap: one behavior is untested live. For ruleset-required workflows, workflow_url may point at the repository that defines the workflow rather than the PR repository. If it does, the new check rejects the URL and dismissal never happens. That outcome is safe (the block stays) but it disables the feature. The PR already lists live candidate validation as outstanding.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present (high confidence): the PR description doesn't match the diff. The body still says the PR removes shell/gh tools, adds native read-path restrictions, prefetches the diff, and uses "run-bound native structured results", and it cites "Validation at a4f79d6". The current action.yml:196 still allows Bash(gh pr diff:*), Bash(gh pr view:*) and Bash(gh api:*), and there is no --json-schema.
  • Prior — still present (low confidence): capture (scripts/review-reset.py:281-282) re-reads the workspace file .github/review-reset.json after the model step and checks only identity. Nothing binds a hash of the snapshot written by prepare (:245), so a rewrite between the two steps could drop audit entries. The risk is lower because the model's allowed tools include no file-write tool.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In the PR description (PR #149 body):
- Rewrite the summary so it matches the current, smaller scope. The diff no longer removes shell/gh tools, adds native read-path restrictions, prefetches the full diff, or uses native structured results (`--json-schema`); `action.yml:196` still allows `Bash(gh pr diff:*)`, `Bash(gh pr view:*)` and `Bash(gh api:*)`. Replace "Validation at a4f79d6" with validation run against the current head.

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around lines 245 and 281-282: in `prepare`, emit a sha256 of the written `.github/review-reset.json` as a step output. Pass it to `capture` through an env var in `action.yml`, and have `capture` require that the re-read file's hash matches it before trusting the snapshot's `audit`/`targets`. A rewrite between prepare and capture then fails closed.

Reviewed commit: 33f0271edb48

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found — see the full review report

Replace owned reset files atomically, clear stale reset inputs before preparation, and capture from a runner-temporary authoritative snapshot. Keep all original blocking obligations and typed prior findings while leaving scraped deduplication context informational. Skip optional proof capture and upload when no eligible target exists.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 63c54cdc3fba

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 1 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 33f0271
View review run

Review Summary

The new commits change four things:

  • prepare now writes the authoritative reset snapshot to runner.temp (REVIEW_RESET_SNAPSHOT), and capture reads only that copy. The workspace .github/review-reset.json becomes model-readable input only.
  • write_json now writes atomically (temp file plus os.replace), so it no longer follows a planted symlink. prepare also clears stale snapshots before doing anything that can fail.
  • A has_targets output now skips proof capture and upload when there are no eligible targets.
  • Scraped existing_findings (and the suggestion scraping) are no longer audit obligations. Only the target reviews' count-accounted blocking rows and the typed prior-findings.json entries remain.

I scanned the full PR diff (5 files) for security and correctness. Both action.yml steps derive the same snapshot path from the same comment ID. The tests cover symlink replacement, cleanup after a failed write, clearing a planted snapshot, and capture ignoring a tampered workspace copy. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present (high confidence): the PR description doesn't match the diff.
    • The body still says the PR removes shell/gh tools, adds native read-path restrictions, prefetches the full diff, and uses "run-bound native structured results".
    • It also cites "Validation at a4f79d6".
    • But action.yml:196 still allows Bash(gh pr diff:*), Bash(gh pr view:*) and Bash(gh api:*), and there is no --json-schema.

Resolved prior findings

  • Fixed: snapshot rewritten between prepare and capture. capture no longer trusts the workspace file. It reads the host-side copy in runner.temp (scripts/review-reset.py:290, action.yml:142,206). prepare clears both copies before running (scripts/review-reset.py:208-210). test_capture_uses_host_snapshot_not_mutable_workspace_copy covers this.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In the PR description (pull request #149 body):
- Rewrite the summary so it matches the current, smaller scope. The diff does not remove shell/gh tools, add native read-path restrictions, prefetch the full diff, or use native structured results (`--json-schema`); `.github/actions/pr-review/action.yml:196` still allows `Bash(gh pr diff:*)`, `Bash(gh pr view:*)` and `Bash(gh api:*)`. Replace "Validation at a4f79d6" with validation run against the current head (63c54cd), and describe the runner.temp host snapshot, atomic writes, has_targets skip, and removal of scraped existing_findings from the audit.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 833ed14a3a26

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 1 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 33f0271
View review run

Review Summary

The new commits change four things:

  • prepare now writes the authoritative reset snapshot to runner.temp (REVIEW_RESET_SNAPSHOT), and capture reads only that copy. The workspace .github/review-reset.json becomes model-readable input only.
  • write_json now writes atomically (temp file plus os.replace), so it no longer follows a planted symlink. prepare also clears stale snapshots before doing anything that can fail.
  • A has_targets output now skips proof capture and upload when there are no eligible targets.
  • Scraped existing_findings (and the suggestion scraping) are no longer audit obligations. Only the target reviews' count-accounted blocking rows and the typed prior-findings.json entries remain.

I scanned the full PR diff (5 files) for security and correctness. Both action.yml steps derive the same snapshot path from the same comment ID. The tests cover symlink replacement, cleanup after a failed write, clearing a planted snapshot, and capture ignoring a tampered workspace copy. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present (high confidence): the PR description doesn't match the diff.
    • The body still says the PR removes shell/gh tools, adds native read-path restrictions, prefetches the full diff, and uses "run-bound native structured results".
    • It also cites "Validation at a4f79d6".
    • But action.yml:196 still allows Bash(gh pr diff:*), Bash(gh pr view:*) and Bash(gh api:*), and there is no --json-schema.

Resolved prior findings

  • Fixed: snapshot rewritten between prepare and capture. capture no longer trusts the workspace file. It reads the host-side copy in runner.temp (scripts/review-reset.py:290, action.yml:142,206). prepare clears both copies before running (scripts/review-reset.py:208-210). test_capture_uses_host_snapshot_not_mutable_workspace_copy covers this.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In the PR description (pull request #149 body):
- Rewrite the summary so it matches the current, smaller scope. The diff does not remove shell/gh tools, add native read-path restrictions, prefetch the full diff, or use native structured results (`--json-schema`); `.github/actions/pr-review/action.yml:196` still allows `Bash(gh pr diff:*)`, `Bash(gh pr view:*)` and `Bash(gh api:*)`. Replace "Validation at a4f79d6" with validation run against the current head (63c54cd), and describe the runner.temp host snapshot, atomic writes, has_targets skip, and removal of scraped existing_findings from the audit.

Reviewed commit: 63c54cdc3fba

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found — see the full review report

Preserve supporting details in each original blocking finding and report short redacted per-review retention reasons during preparation.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 833ed14a3a26

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 63c54cd
View review run

Review Summary

The new commit (833ed14) rewrites how review-reset.py reads a prior report's blocking findings. The old scraper counted every non-blank line as a separate finding. The new blocking_findings() groups each top-level Security/Correctness list item with its nested bullets, wrapped prose and fenced/quoted examples. Anything else (orphan text, mixed None found., unclosed fences, a missing or duplicate section, a count mismatch) keeps the block in place. The commit also logs a sanitized, one-line, 240-char retain reason per target, and adds tests and README text.

I scanned the full PR diff (action.yml, prompt, reset script, tests, README) for security and correctness. Every failure path here retains the block, so no path dismisses a review by mistake. Retain reasons pass through sanitized() (review-reset.py:301) before printing, so tokens are redacted. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New .github/actions/pr-review/scripts/review-reset.py:212-215: findings without a list marker can no longer be reset. The summary template (prompts/base-pr-review.md:339-344) asks for "one line per distinct active issue" and never requires a -/1. marker. Reports that write findings as plain lines used to count as rows; now they are always retained and need manual dismissal. This fails safe (medium confidence).
  • Prior — still present (partially) PR description: the scope text now matches the narrowed implementation. But "Validation at 63c54cd" and "165 tests passed" predate this commit, which adds 6 tests and a new parser, so validation at 833ed14 isn't recorded (low severity).
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around line 212-215: blocking_findings() raises when a Security/Correctness line is non-indented, not a list item, and has no current owner. The summary template in .github/actions/pr-review/prompts/base-pr-review.md (lines 339-344) does not require list markers, so prior reports that write findings as plain lines are now always retained. Either update the template to require top-level "- " list items in the Security/Correctness sections, or treat a non-indented, non-quoted, non-list line with no current owner as the start of a new group. Add a test for either choice.

In the PR description:
- Update the "Validation at 63c54cd" section to reflect a run at head 833ed14, including the new test count.

groups.append(current)
else:
# Wrapped prose, nested items and quotes must have a real owner.
require(current is not None, error)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Suggestion (medium confidence): The summary template in base-pr-review.md:339-344 asks for "one line per distinct active issue" and never requires a -/1. list marker. When a prior report writes findings as plain lines (e.g. **New** — file.go:12 ...), this branch raises on the first one. The old row scraper accepted those reports; now they are always retained and need manual dismissal. Either have the template require top-level list items for Security/Correctness, or accept an unowned non-indented line as its own group.

@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 5c44effb8e98

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 63c54cd
View review run

Review Summary

The new commit (833ed14) rewrites how review-reset.py reads a prior report's blocking findings. The old scraper counted every non-blank line as a separate finding. The new blocking_findings() groups each top-level Security/Correctness list item with its nested bullets, wrapped prose and fenced/quoted examples. Anything else (orphan text, mixed None found., unclosed fences, a missing or duplicate section, a count mismatch) keeps the block in place. The commit also logs a sanitized, one-line, 240-char retain reason per target, and adds tests and README text.

I scanned the full PR diff (action.yml, prompt, reset script, tests, README) for security and correctness. Every failure path here retains the block, so no path dismisses a review by mistake. Retain reasons pass through sanitized() (review-reset.py:301) before printing, so tokens are redacted. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New .github/actions/pr-review/scripts/review-reset.py:212-215: findings without a list marker can no longer be reset. The summary template (prompts/base-pr-review.md:339-344) asks for "one line per distinct active issue" and never requires a -/1. marker. Reports that write findings as plain lines used to count as rows; now they are always retained and need manual dismissal. This fails safe (medium confidence).
  • Prior — still present (partially) PR description: the scope text now matches the narrowed implementation. But "Validation at 63c54cd" and "165 tests passed" predate this commit, which adds 6 tests and a new parser, so validation at 833ed14 isn't recorded (low severity).
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around line 212-215: blocking_findings() raises when a Security/Correctness line is non-indented, not a list item, and has no current owner. The summary template in .github/actions/pr-review/prompts/base-pr-review.md (lines 339-344) does not require list markers, so prior reports that write findings as plain lines are now always retained. Either update the template to require top-level "- " list items in the Security/Correctness sections, or treat a non-indented, non-quoted, non-list line with no current owner as the start of a new group. Add a test for either choice.

In the PR description:
- Update the "Validation at 63c54cd" section to reflect a run at head 833ed14, including the new test count.

Reviewed commit: 833ed14a3a26

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found — see the full review report

Limit optional model proof to review completion, coverage, blockers and audit evidence. Reuse the existing frozen snapshot and runner completion envelope for provenance, preserving host and session binding checks.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 5c44effb8e98

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 833ed14
View review run

Review Summary

The new commit takes provenance fields (run_id, run_attempt, head_sha, base_sha) out of the model-written review-reset-proof. validate_proof now rejects them even when they are correct (review-reset.py:315). Binding now comes only from CI-owned data:

  • capture() checks the frozen snapshot identity against publication_identity() and requires exactly one runner init message whose session matches REVIEW_SESSION_ID and the terminal result (review-reset.py:341-350).
  • dismiss() checks the snapshot identity again, plus started_at, terminal_success, the repo/PR environment, and live head/base via check_pr (review-reset.py:400-405).

The prompt, README and tests were updated to match. The old model-echoed fields were copies of snapshot values, so removing them loses no real binding. I scanned the full PR diff (5 files) for security and correctness. The incremental diff is complete, with no dropped paths and no truncation. No repo-local criteria loaded, so the base criteria applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present .github/actions/pr-review/scripts/review-reset.py:210-216: only lines starting with a list marker (-, *, +, 1.) open a blocking finding. A plain-prose first line raises an error, so that review is retained and needs manual dismissal. The summary template (prompts/base-pr-review.md) asks for "one line per distinct active issue" but never requires a marker. This fails safe (medium confidence).
  • Prior — still present (updated) PR description: "Validation at 833ed14 / 171 tests passed" and the "corrected-candidate live focused smoke" predate 5c44eff. This commit changes the terminal proof wire format (model provenance is now rejected) and adds 4 tests. The live self-dismissal smoke therefore used a proof format the current code rejects, so the new format has no live evidence (low severity).
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around line 210-216: blocking_findings() only starts a new finding on a list-marker line; a plain-prose first finding line raises an error and the review is retained. Either have the summary template in prompts/base-pr-review.md require each Security/Correctness finding to start with "- ", or document that marker-less reports always need manual dismissal.

In the PR description:
- Update "Validation at 833ed14" / "171 tests passed" to the current head 5c44eff with the new test count. Re-run or explicitly mark as pending the live self-dismissal smoke, because the review-reset-proof format changed (model-supplied provenance is now rejected).

@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

General PR Review: [CXH-2780] Reset resolved baseline review blocks without approving

Blocking Issues: 0 | Suggestions: 2 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base ce5fc28e14cb.
Review mode: incremental since 833ed14
View review run

Review Summary

The new commit takes provenance fields (run_id, run_attempt, head_sha, base_sha) out of the model-written review-reset-proof. validate_proof now rejects them even when they are correct (review-reset.py:315). Binding now comes only from CI-owned data:

  • capture() checks the frozen snapshot identity against publication_identity() and requires exactly one runner init message whose session matches REVIEW_SESSION_ID and the terminal result (review-reset.py:341-350).
  • dismiss() checks the snapshot identity again, plus started_at, terminal_success, the repo/PR environment, and live head/base via check_pr (review-reset.py:400-405).

The prompt, README and tests were updated to match. The old model-echoed fields were copies of snapshot values, so removing them loses no real binding. I scanned the full PR diff (5 files) for security and correctness. The incremental diff is complete, with no dropped paths and no truncation. No repo-local criteria loaded, so the base criteria applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • Prior — still present .github/actions/pr-review/scripts/review-reset.py:210-216: only lines starting with a list marker (-, *, +, 1.) open a blocking finding. A plain-prose first line raises an error, so that review is retained and needs manual dismissal. The summary template (prompts/base-pr-review.md) asks for "one line per distinct active issue" but never requires a marker. This fails safe (medium confidence).
  • Prior — still present (updated) PR description: "Validation at 833ed14 / 171 tests passed" and the "corrected-candidate live focused smoke" predate 5c44eff. This commit changes the terminal proof wire format (model provenance is now rejected) and adds 4 tests. The live self-dismissal smoke therefore used a proof format the current code rejects, so the new format has no live evidence (low severity).
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/pr-review/scripts/review-reset.py`:
- Around line 210-216: blocking_findings() only starts a new finding on a list-marker line; a plain-prose first finding line raises an error and the review is retained. Either have the summary template in prompts/base-pr-review.md require each Security/Correctness finding to start with "- ", or document that marker-less reports always need manual dismissal.

In the PR description:
- Update "Validation at 833ed14" / "171 tests passed" to the current head 5c44eff with the new test count. Re-run or explicitly mark as pending the live self-dismissal smoke, because the review-reset-proof format changed (model-supplied provenance is now rejected).

Reviewed commit: 5c44effb8e98

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found — see the full review report

@gontzess gontzess changed the title [CXH-2780] Reset resolved baseline review blocks without approving Reset resolved baseline review blocks without approving Oct 13, 2026
@gontzess
gontzess marked this pull request as ready for review October 13, 2026 19:31
@gontzess
gontzess merged commit 31ce169 into main Oct 14, 2026
3 checks passed
@gontzess
gontzess deleted the steve.gontzes/CXH-2780/baseline-self-dismissal branch October 14, 2026 18:39
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.

2 participants