Repository navigation
Phase 3: release candidate S1 (production IDs, release tests in CI) - #9
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…caveat Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ulings Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
OC Claude review: failResult for run 40517197414, attempt 1. Reasons
Prefilter (code, no LLM)Hard blocks: 0.
Dependency deltaNo dependency changes. Findings per passModel output from untrusted input. Check it before you act on it. Verified means only that the quoted text is at that place. It does not mean the claim is true. review: failed, federation not configuredNo verified findings. security: failed, federation not configuredNo verified findings. supply-chain: failed, federation not configuredNo verified findings. Token usage
Workflow run. The result that counts is the required workflow in the merge box. |
Structured outputs cannot enforce maxLength, so the API accepted a supply-chain quote over 300 characters and the full schema check failed the whole pass (release eval run 40517202830, obfuscated-test-payload). Analyze now cuts a quote over 300 characters to its first 300 before the check and keeps the finding. A prefix verifies wherever the whole quote does, and blocking never reads the quote, so risk is not lowered. Every other limit still fails the pass. The system prompt tells the model to quote the relevant part of a longer line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Structured outputs cannot enforce maxLength, so any string over its limit failed the whole pass, not only a quote. Analyze now walks the full findings schema and cuts every string over its maxLength (summary, file, quote, title, explanation) to that limit before the check. The finding stays, and category, severity, confidence, side and line never change. Other schema errors still fail the pass. The publisher redacts before it cuts, so a cut that comes first takes its text from the redacted string when it holds a credential-like string: no part of a secret survives the cut. The publisher escapes every character of a cut string, which a new test checks end to end. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix round 1 for review r-p3-cut. A cut file path keeps 399 characters and ends in "/", which no file path does, so it can never verify on a different changed file. When file, title or quote is at its limit, the inline comment key covers every shown field, so a cut never hides a distinct explanation in this run or against an earlier run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix round 2 for review rr-p3-cut-fix1. A redaction before the cut can make two titles equal far below the limit, and two findings below every limit can share file, side, title and quote. The inline comment key of every finding is now the SHA-256 of the JSON list of every shown field, so a shared key never hides a distinct explanation. The changed path test now fails on 0383231. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix round 3 for review rr-p3-cut-fix2. Keying only on every shown field re-posted almost every inline finding on each push or re-run, because the explanation and the line change. Each inline comment now carries the D14 key (file, side, title, quote) and the full key (every shown field), both computed from the redacted, cut text that the reader sees. One run dedupes by full key. A later run skips a finding whose D14 key is on the PR, and shows it in full in the summary when its full key is new. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A marker alone no longer proves that a finding was published. The D14 skip needs a bot comment that starts with its only marker and has the inline layout, path, side and title; "see the earlier comment" needs the exact body at the same line. A forged comment can at most move a finding to its full summary block. An unverified high or critical finding (for example one with a cut file path) keeps its never-cut rank, so the summary shows it or the run fails closed. The spec records the one-comment residual; continuation comments are a phase 4 build-plan item. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
review/src/oc_review/analyze.py(rule R1, org ID, production service account). The review no longer refuses to call for "federation not configured".pytest tests/unit -m release) now run in theunit-testsjob oftest.yml, so the required check name does not change. A test pins that the step exists, runs after the unit step, and has noiforcontinue-on-error.This PR is release candidate S1
S1 is the head SHA of this branch:
3aa7ae9ec072ca5d77b895dac12665f2370983de. The earlier candidate wasccbae5179a8b5bdd19bb2ed4379fa07520226973; the eval at that SHA is kept below as history.The production rule R1 will be pinned to S1 before the live tests. Do not merge until the phase 3 live tests at S1 pass.
Decisions the owner may want to reverse
claude-review, separate from the test accountclaude-review-p0, so test teardown cannot break production.evalenvironment runs extends through phase 4; "prevent self-review" stays off until phase 5.p3-*branches in this repo is approved; the non-member fork account X is still pending, and it will be an outside collaborator, not an org member.test.ymlrunspytest -m releaseon every PR, so a release that names a placeholder fails CI.job.workflow_shacompared with the pin.Release eval at 3aa7ae9
Run 40528717338 at
3aa7ae9ec072ca5d77b895dac12665f2370983de. Result: 13 of 13 cases matched, 0 missed. The job passed. The eval environment run was approved by the coordinator.ccbae51,obfuscated-test-payload, now matches (expected gate fail, got fail).Release eval at ccbae51 (history, earlier candidate)
Run 40517202830 at
ccbae5179a8b5bdd19bb2ed4379fa07520226973. Result: 12 of 13 cases matched, 1 missed. The job failed.obfuscated-test-payload(expected gate fail, got fail). The supply-chain pass failed with "response does not match the findings schema: 'findings'/1/'quote': [maxLength]", so the case is recorded as a mismatch.Over-long strings
The eval at
ccbae51missed one case because a model quote was longer than the schemamaxLength. Structured outputs cannot enforcemaxLength, so the request schema has none, and the full schema check then failed the whole pass. Spec P3-2 now says what the code does:maxLengthbefore the full schema check, and the finding stays. This coverssummary,file,quote,titleandexplanation. Every other schema error still fails the pass./. No Git path ends in/, so a cut path never names another changed file. The file lookup also returns nothing for a path that ends in/.Reports: quote fix, limits fix, cut fixes 1 to 3 and the final fix (local scratch reports, not in the repo).
Tests
cd review && uv run pytest tests/unit -q: 2563 passed, 2 deselected.cd review && uv run pytest tests/unit -m release -q: 2 passed, 2563 deselected.grep -rn "fdrl_0000" review/srcfinds nothing.🤖 Generated with Claude Code