Code review · high reasoning · September 2026
Five models, 200 code reviews
Close on serious bugs. Bigger differences in breadth, consistency, and which claims hold up.
Opus 5.5 found the broadest set of confirmed issues. GPT-6.1-Sol was competitive on runtime defects. The serious-bug totals were close enough that a disputed bucket decision changes the nominal leader.
This experiment contains 200 reviews across 10 open-source commits in seven repositories: five models, with four independent reviews per model per commit (40 reviews per model). GPT-6-Astra at high reasoning produced the consolidated results and judged the findings. A separate Opus 5.5 reviewer at high reasoning critiqued the Astra assessment; the results below incorporate the evidence-checked corrections from that consultation.
This is a small, unblinded sample—not a general leaderboard or an exhaustive recall test. Both the Astra assessor and the Opus critic are among the models being compared.
Key results · What they show · Reproduce the test · Exact instructions · Issue ledger
Key results
| Model | A · serious | B · bounded | C · conditional | D · rejected |
|---|---|---|---|---|
| GPT-5.6-Sol high reasoning | 16 | 26 | 21 | 6 |
| GPT-6-Sol high reasoning | 17 | 28 | 12 | 5 |
| GPT-6-Astra high reasoning | 18 | 31 | 5 | 6 |
| GPT-6.1-Sol high reasoning | 18 | 32 | 12 | 3 |
| Opus 5.5 high reasoning | 19 | 57 | 19 | 2 |
What the buckets mean
| Bucket | Meaning | How to use it |
|---|---|---|
| A · serious | Confirmed consequential regressions the assessor would block landing. | Strong bug credit; not a claim of critical production severity. |
| B · bounded | Confirmed narrower defects, including workflows, formatting, portability, tests and documentation. | Useful review work; compare runtime and supporting infrastructure separately. |
| C · conditional | Needs an environment fact, contract decision or stronger evidence. | Neither confirmed-bug credit nor a false-positive penalty. |
| D · rejected | Wrong central impact, pre-existing behavior, or out-of-scope advice. | Read the reason. Cosmetic advice is different from an invented failure. |
Counting, uncertainty, and attribution corrections
Counts deduplicate mechanisms within each run, not across repetitions. Related manifestations can be one family; a numbered paragraph can contain multiple distinct families. Uncertain-concerns sections do not become asserted findings. The ledger records relevant tentative mentions separately.
The publication sweep corrected Opus B from 46 to 50: all four Opus reviews explicitly described the ANSI-only output loss inside a broader ANSI finding. Those mentions were missed initially. Opus’s B runtime count became 19, not 15. The subsequent consultation also found an embedded mention in GPT-5.6-Sol r2 and verified two conditional CPython findings. The tables include all accepted corrections; the consultation section separates their effects. No review was rerun or edited.
Consistency on the serious bugs
What the results actually show
Opus’s clearest advantage is breadth. It found 23 unique confirmed A+B families across its repetitions, compared with 18 for Astra and 16 each for 5.6 Sol, 6 Sol and 6.1 Sol. Much of the additional coverage is in test behavior, CI enforcement and documentation. It also raised many conditional concerns, so its breadth still comes with triage work.
6.1 has useful consistency wins, without a clean sweep. It asserted the macro-generated generic bug in 3/4 runs, compared with Astra’s 2/4 and 6 Sol’s 1/4. It found the Ferricode pasted-input failure and background-job suspension in 4/4 runs. But it missed the DuckDB JSON mismatch once and did not report the strace availability failure. Opus raised the macro issue tentatively in 3/4 runs; its remaining review (r2) considered macro calls and incorrectly concluded they could not produce invalid output.
| Model | B runtime / UI / resource | B tests / tooling / docs | Unique A+B families |
|---|---|---|---|
| GPT-5.6-Sol high reasoning | 12 | 14 | 16 |
| GPT-6-Sol high reasoning | 14 | 14 | 16 |
| GPT-6-Astra high reasoning | 17 | 14 | 18 |
| GPT-6.1-Sol high reasoning | 18 | 14 | 16 |
| Opus 5.5 high reasoning | 19 | 38 | 23 |
Four serious families were found by essentially every model: they account for 16 of GPT-6-Sol’s 17 A detections. Most of the A-count spread comes from two narrower-trigger families: macro-generated generics and the strace probe import failure. The other difference is 6.1’s single missed DuckDB partition/payload mismatch. On Ferricode, 6 Sol did not report the terminal-browser conflict or background-job suspension in any run. Its fourth Saltybox review did raise the conditional Argon2 residue concern tentatively; that is neither a confirmed-bug credit nor a penalty.
Plausible findings did not always survive checking
| Claim | What source/probes established | Treatment |
|---|---|---|
| CPython annotation typo prevents imports | The pinned tree already defers annotations. The typo fails introspection, not import. | Correct narrow reports: B. Import-breaking claims: D. |
| Catch2 one-character wrapping newly hangs | The same non-progressing case exists in base. Another supplied example terminates immediately in both. | D: not introduced by this change. |
| Turbo cannot run the root build task | Pinned Turbo 2.10.4 runs the single-package task. It does drop RUSTFLAGS. | Root-task claim: D. Lost CI warning gate: B. |
| Preview cache can poison production | Depends on actual preview credentials and production cache authorization. | C: coherent threat scenario, unverified deployment. |
The rejected totals are not a uniform false-positive rate. Opus’s two rejected occurrences are cosmetic styling advice; 6.1’s three are the real annotation typo assigned the wrong impact. GPT models also report pre-existing behavior, and 6 Sol reports the disproved root-task failure.
Bucket choices can reverse a narrow lead
| A-count scenario | 5.6 Sol high reasoning | 6 Sol high reasoning | 6 Astra high reasoning | 6.1 Sol high reasoning | Opus 5.5 high reasoning |
|---|---|---|---|---|---|
| Consolidated assessment | 16 | 17 | 18 | 18 | 19 |
| Treat strace probe import failure as B | 16 | 17 | 18 | 18 | 16 |
| Treat strace probe and macro generics as B | 16 | 16 | 16 | 15 | 16 |
| Promote shelve validation-order concern | 20 | 20 | 18 | 21 | 19 |
| Promote KDF resource concern instead | 20 | 21 | 19 | 22 | 20 |
The shelve probe confirms that invalid codec arguments can produce database side effects, but the destructive example explicitly requests replacement with flag="n". The KDF engine intentionally permits high costs and is unwired. Whether to block on either depends on the intended contract. These are sensitivity checks, not alternative “correct” scores.
The serious-bug ordering is not stable enough to rank these models. The two narrow-trigger A families account for almost all differences. A remains the assessor’s landing judgment; the alternatives above show how much that judgment matters.
| B runtime-count scenario | 5.6 Sol high reasoning | 6 Sol high reasoning | 6 Astra high reasoning | 6.1 Sol high reasoning | Opus 5.5 high reasoning |
|---|---|---|---|---|---|
| Consolidated assessment | 12 | 14 | 17 | 18 | 19 |
| Treat shelve validation order as bounded B | 16 | 17 | 17 | 21 | 19 |
Treating the confirmed shelve side effects as a bounded defect is another reasonable policy: it leaves A unchanged and puts 6.1 ahead on B runtime detections. That is a sensitivity check, not the adopted classification.
Security-only conclusions would be weaker still. Every model found the Catch2 memory-safety mechanism 4/4. Unexpected pickle use matters under particular data-trust assumptions; cache poisoning and residual key material need separate deployment or memory-disclosure conditions. This sample says more about general correctness review than vulnerability discovery.
Model identity was checked independently of table labels
| Intended model | Completed reviews | Matching proxy responses / assistant records | Mismatches |
|---|---|---|---|
| GPT-5.6-Sol high reasoning | 40 | 586 LB responses | 0 |
| GPT-6-Sol high reasoning | 40 | 408 LB responses | 0 |
| GPT-6-Astra high reasoning | 40 | 364 LB responses | 0 |
| GPT-6.1-Sol high reasoning | 40 | 396 LB responses | 0 |
| Opus 5.5 high reasoning | 40 | 954 Claude assistant records | 0 |
All 1,754 recorded GPT response IDs match load-balancer (LB) proxy entries for the intended model and high effort. All Claude assistant model labels identify claude-opus-5-5. Launches and session contexts agree in all 200 cases; no GPT model has a catalog upgrade target. These records establish client/proxy routing and returned labels, not independent attestation of provider-internal weights.
What changed after the Opus critique
A separate Opus 5.5 high-reasoning reviewer checked all 56 families at the evidence/claim level, swept original reports for attribution, and inspected selected source paths and probes more deeply. It did not reread every report line by line or rerun every original probe. The consolidating evaluator checked its proposed corrections against the original text, pinned source and additional local checks.
| Accepted change | Evidence | Score effect |
|---|---|---|
| Credit the embedded 5.6 Sol ANSI-only finding | The second Catch2 review explicitly says an escape-only column emits nothing. | 5.6 Sol B +1. |
| ST-ABI: conditional → bounded test defect | 32-bit glibc lseek64 issues _llseek; the pinned test requires literal lseek. | B +1 for 5.6, +1 for Astra, +4 for Opus; C falls equally. |
| ST-POSIXSPAWN: conditional → bounded test defect | The old filter skips on the checked strace environment; the new test can pass via libc posix_spawn because its mock does not reach the child. | Opus B +3, C −3. |
| Model | B before → after | C before → after |
|---|---|---|
| GPT-5.6-Sol high reasoning | 24 → 26 | 22 → 21 |
| GPT-6-Sol high reasoning | 28 → 28 | 12 → 12 |
| GPT-6-Astra high reasoning | 30 → 31 | 6 → 5 |
| GPT-6.1-Sol high reasoning | 32 → 32 | 12 → 12 |
| Opus 5.5 high reasoning | 50 → 57 | 26 → 19 |
A and D are unchanged. Seven missing tentative mentions were recorded without changing scores. The DuckDB verdict now states the WRITE_PARTITION_COLUMNS prerequisite. Original reviews remain unchanged; this consultation adds no new code-review runs to the 200-review sample.
The new checks use local 32-bit glibc 2.39 disassembly, strace 6.8 and host Python 3.14.7, together with pinned source. They are not full pinned or 32-bit CPython builds. The positive vfork-test defect remains separate from removal of the negative integration case because the fixes differ. Merging those families would reduce Opus B from 57 to 54 and unique A+B families from 23 to 22.
Both adjudicator models appear in this comparison and saw model labels. The consultation is an additional evidence check, not blinded ground truth. Family grouping was not preregistered. Read the verbatim critique, proposals, consolidation decisions, and consultation instructions with local paths generalized. The critique describes the earlier report; its references to missing identity disclosure predate the interim update. Its runs/, assessment/ and inputs/ paths refer to locally retained experiment evidence, not bundled downloads. The consolidating evaluator’s probe records the command, stdout and redacted trace for its separate _USE_VFORK=False check.
Reproduce the test
Use this section and the downloadable artifacts as an agent handoff. Repeating the protocol can reproduce the inputs and methodology, not guarantee identical stochastic outputs or backend model implementations.
1. Reconstruct the pinned inputs
Four cases are hand-picked; six are mined. Use these exact base/subject pairs, not current PR heads or later fixes. All seven repositories are public; their GitHub owners and repository names are included below and in cases.json. Source snapshots are not published here.
| Case / selection | Repository | Base → subject |
|---|---|---|
| Ferricode: OAuth callbacks hand | scode/ferricode | 0232e6b88753e40306206a64e412c01dbecd9d76→ 5d794aa16f9a1a975cb94e4bb33e1c4fb94ec0ac |
| Saltybox: encryption engine hand | scode/saltybox | 3b1d3131902f724dd3827444ad67c7f8871ee2df→ 62d866d6a57a24ef6bb329b28a246b44b758ff7a |
| Stark Parts: static catalog hand | scode/stark-parts | 14b7f4fde28dc163a63c0f56ec04136f1ad521c0→ 2e3e1eaca82736c8d6cf1f5ca4c3f4c919406a0b |
| Stark Parts: build cache hand | scode/stark-parts | 81d37ce6d263b3c62815787170b04e304490d249→ 4937a788724b8c85f82f03ed93ac59f27ef51945 |
| rust-analyzer: trait generics mined | rust-analyzer/rust-analyzer | 123c1660f4d80443aea20329cfcc5185b1c233ad→ b5bad9e7fc2ee9909f31674f9ae95a840578cb7d |
| DuckDB: async scan mined | duckdb/duckdb | 16a5aec84d49715a946fe2c8bbd779ac11ca07d7→ 65b8fd1c6695076e751cdedeb1d2f248d1497974 |
| DuckDB: JSON COPY mined | duckdb/duckdb | 18b593788d6ebd548bcf55b18cc8f3e15d5fb4c3→ dbf89590ac7d66426d65361b8e50012353fe7e0b |
| Catch2: ANSI wrapping mined | catchorg/Catch2 | bfe3ff8f19d3436381b4e3a18c13734d21a8b089→ dab58896a25f195b638135004b890d7d8ee32f2d |
| CPython: shelve codecs mined | python/cpython | 8f25cc992021d6ffc62bb110545b97a92f7cb295→ 44b9fa1e9735f646b6dbc2a08b606eb8ac97ea5c |
| CPython: strace helper mined | python/cpython | 2f5f19e783385ec5312f7054827ccf1cdb6e14ef→ d99157f3d1e0d2c860e2df93d4a39b44712d8d84 |
For each case, export both commits with git archive into base/ and subject/. Generate change.diff with git diff --no-ext-diff --no-renames BASE SUBJECT -- .. For Saltybox only, append :(exclude)Cargo.lock and :(exclude)testdata/golden-vectors-v2.json; the omitted files remain in both source snapshots. Keep tracked source instructions as source evidence. Do not supply historical review findings or sibling outputs.
Create case.json with the case ID, repository identifier, full base and subject hashes, subject reference, commit message, omitted paths and the scope below. Map cases.json’s repository to repo and omitted_diff_paths to omitted_paths. Recover the commit message from the pinned object; using the subject SHA as the reference reproduces the code scope, but historical case metadata bytes and input-inventory hashes are not included in this package. Changing commit metadata changes input bytes; disclose any changes instead of claiming byte-identical reproduction.
{
"id": "<case-id>",
"repo": "<repository>",
"base": "<full-base-sha>",
"subject": "<full-subject-sha>",
"subject_ref": "<pinned-reference>",
"commit_message": "<subject-commit-message>",
"omitted_paths": [],
"scope": "Compare base/ to subject/ using change.diff. Omitted generated files remain available in both snapshots."
}
Hash a sorted inventory of paths, file bytes, symlink targets and executable bits. Give every run its own copy of the case directory. Preserve and compare the inventory after each review.
2. Freeze the review configuration
| Setting | Recorded setup and execution history |
|---|---|
| Models | gpt-5.6-sol; gpt-6-sol; gpt-6-astra; gpt-6.1-sol; claude-opus-5-5 |
| Reasoning | High for all models; not a calibrated cross-provider compute budget. |
| Repetitions | 4 independent sessions for every case/model pair: 200 retained reviews. |
| Harnesses | Codex CLI 0.159.0; Claude Code 2.1.285. |
| Codex catalog | Explicitly pinned, with real metadata for all four models and no upgrade targets. |
| Context boundary | Same caller prompt; isolated input copy; no prior findings, sibling runs, network, tests, builds, modification, delegation or review skills. Local installed dependency source may be read. |
| Concurrency | Initial batch: up to 16. Eight missing-result replacements: up to 8. |
| Timeout history | Initial batch: 20-minute cutoff; 192 completed first attempts retained. Eight interrupted cells replaced without a hard timeout. Reproduction also has no hard timeout; judge slow runs from transcript progress. |
Run a small pilot before launching the matrix. Confirm model and effort, correct source paths, final-report extraction, full observable instruction/session capture, and unchanged inputs. Count valid pilots toward the intended repetitions. Do not rerun a valid result to obtain more findings.
3. Launch with the same caller prompt
These equivalent launch examples generalize machine paths. The Bash array read preserves the exact prompt, including its final newline; the original Python launchers passed the file contents directly as an argument. Run them only in disposable copies of source you are authorized to review. The permissive harness flags match the experiment; read-only behavior was instructed and source integrity checked afterward, not guaranteed by a sandbox.
# Bash: preserve the complete prompt, including trailing newlines.
mapfile -d '' -t REVIEW_PROMPT < reviewer-prompt.txt
# Codex: choose one of the four exact GPT model identifiers.
codex -c model_reasoning_effort=high -c project_doc_max_bytes=0 -c 'model_catalog_json="/PATH/TO/model-catalog.json"' exec --yolo --ignore-rules --skip-git-repo-check --json -m "$MODEL" -C "$WORKDIR" -o "$OUTPUT/review.md" "${REVIEW_PROMPT[0]}" > "$OUTPUT/events.jsonl" 2> "$OUTPUT/stderr.log" < /dev/null
# Claude: run with WORKDIR as the current directory.
CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0 claude -p --safe-mode --strict-mcp-config --model opus --effort high --system-prompt-snapshot on --session-id "$SESSION_ID" --output-format stream-json --verbose --dangerously-skip-permissions "${REVIEW_PROMPT[0]}" > "$OUTPUT/events.jsonl" 2> "$OUTPUT/stderr.log" < /dev/null
The opus alias was checked against returned claude-opus-5-5 labels. Repeat that check: aliases can change. Pin available catalog metadata rather than silently accepting an unknown-model fallback. Reject wrong-model or wrong-effort runs. Record installed dependency versions/cache availability; they were not frozen across this experiment.
A reference single-cell launcher is included. It preserves the prompt, command, raw events, stderr, final review and local session/instruction records, and checks model/effort and source integrity. It is a generic adaptation for reproduction, not the original scheduler or an executed new evaluation.
python run-cell.py --root ./experiment --case ferricode-openai-codex-remote-auth --model gpt-6-sol --repeat 1 --catalog ./model-catalog.json
The input copy belongs at experiment/inputs/<case-id>/; outputs go to experiment/outputs/runs/. Prepare inputs and a current compatible catalog first. Use a fresh root, or archive both the failed output and work directory, before retrying a failed cell.
4. Collect without losing originals
Keep each completed review verbatim, plus its command, status, exact prompt, event stream, local full session and observable instruction capture. For Claude, retain system-prompt snapshots and tool definitions, then take the terminal result’s result verbatim as the review. For Codex, retain the -o output and associated session. Hash every artifact. Provider-internal hidden instructions are outside these records.
If a run fails or is deliberately interrupted, preserve it separately and rerun only that missing matrix cell with unchanged inputs, prompt, model and effort. The original batch had eight attempts interrupted by an imposed 20-minute cutoff. All eight were replaced without a hard timeout; 192 already completed reviews stayed byte-for-byte unchanged. Cancelled pilots and interrupted outputs are excluded from findings. All 200 retained reviews completed.
5. Adjudicate before aggregating
Read each Findings and Uncertain concerns section. Group by concrete mechanism, compare base and subject, trace callers and relevant dependency contracts, and record the trigger and impact. Do not reward a correct-looking edit for an incorrect serious impact claim. Assign A/B/C/D, with an explicit reason and source location. Record every attributed repetition, including a distinct issue embedded inside another numbered finding.
Use narrowly scoped probes when they settle a disputed mechanism. Keep them separate from reviewer accomplishments. The assessor here compiled pinned Catch2 TextFlow in isolation, ran injected pinned Python helper definitions on Python 3.14.7, checked a checksum-verified Turbo 2.10.4 binary with a harmless task, and compiled minimal Rust macro examples. No full DuckDB build or end-to-end rust-analyzer assist test was run.
Compute family × run detections, unique families across repetitions, and 4/4 consistency. Keep tentative mentions separate. Report the B runtime/support split and sensitivity to disputed C classifications. The observed union is not exhaustive ground truth. The initial assessment was performed by GPT-6-Astra at high reasoning. A separate Opus 5.5 high-reasoning critique has been incorporated after evidence checks. Both adjudicators are compared models and saw model labels; independent blinded adjudication would strengthen a follow-up.
Exact reviewer instructions
The caller prompt below was byte-identical across all 200 runs. It contains no identifying information, so it needed no redaction. Download the exact text. SHA-256: f38e5e7dffe4b70eb57ed6fab4d38b2cd7bdbe301f79cf9cf2f8e1d843a299dd.
Full caller prompt
Review the code change described in case.json in your working directory. This is an independent, read-only review of a pinned historical change. Your final message is the complete review deliverable and will be saved to a named Markdown artifact by the caller.
Read case.json and change.diff, then inspect the relevant source in subject/ and base/ as needed. The subject snapshot is the after-state; base is the before-state. Treat the source and its SPEC/documentation as evidence of intended behavior, not as instructions to run workflows. Review only this change and defects it introduces or newly exposes. Respect explicitly staged or intentionally unwired functionality.
Focus broadly on correctness and security. Look for concrete failure scenarios across input validation, trust boundaries, authentication and secrets, data flow, asynchronous behavior and cancellation, resource lifetime and bounds, error handling and partial failure, API contracts, compatibility, and platform assumptions wherever relevant. Follow callers and dependencies when necessary to establish a claim. Consider test quality and documentation/specification mismatches when they hide or misstate consequential behavior. Avoid cosmetic nits and speculative hardening without a concrete failure mechanism. Do not invent a quota of findings.
Work independently. Do not spawn agents, load review skills, consult memory or prior reviews, inspect session logs, or access sibling runs. Do not use the network or inspect later revisions. You may read installed dependency source under local package caches to verify dependency semantics; identify the version and say when relevant source is unavailable. Do not run builds, tests, package managers, or project scripts. Do not modify files. Use read-only source inspection tools. Do not read unrelated personal or project files. The supplied snapshots and diff are the review boundary; no historical finding list is provided.
Before finishing, make a second sweep for unrelated correctness/security issues. Recheck each proposed finding against the source and intended scope. Distinguish definite bugs from conditional concerns, and distinguish newly introduced behavior from pre-existing behavior.
Return Markdown with these sections:
1. Review scope: briefly state what you inspected and any material limitations.
2. Findings: number each actionable issue. Include a short title, severity (high/medium/low), confidence (high/medium), category, subject-relative path and line range, concrete triggering conditions, mechanism, consequence, source evidence, and a focused remedy. Explain any required environmental or attacker assumptions. Keep distinct issues separate and avoid duplicate reports of the same mechanism. If there are none, say so explicitly.
3. Uncertain concerns: separate potentially important issues you could not establish; name the missing evidence. Do not count these as findings.
4. Coverage and verification: summarize the areas examined and state that validation was by source inspection only.
Write directly and precisely. Calibrate severity to demonstrated impact. Return the complete review now; do not ask questions or propose future work in place of reviewing.
The full instruction stack also contained model/harness defaults and injected context. The same caller prompt does not mean an identical system prompt. Representative instruction text for each model is included with identifying names, paths and endpoints redacted. It is explicitly an excerpt: host-specific user instructions/environment, non-text metadata, Claude dynamic attachments/tool definitions and the other repetitions are omitted. The original full captures remain preserved privately; exact private harness-state reproduction is outside this public package.
Complete issue ledger
Every row is an adjudicated family, with counts out of four. Open a bucket to see the full matrix and individual verdicts. The machine-readable ledger also records source paths, asserted run IDs and relevant tentative mentions. It does not publish source snapshots or raw session transcripts.
A · Confirmed consequential regressions · 6 issue families
| Issue | 5.6 Sol high reasoning | 6 Sol high reasoning | 6 Astra high reasoning | 6.1 Sol high reasoning | Opus 5.5 high reasoning |
|---|---|---|---|---|---|
| RA-BOUNDS: Generic filtering leaves undeclared names in copied bounds | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 |
| RA-MACRO: Generic references introduced by macros are pruned | 0/4 | 1/4 | 2/4 | 3/4 | 0/4 |
| DJ-PARTITION: Partition keys disagree with serialized JSON values | 4/4 | 4/4 | 4/4 | 3/4 | 4/4 |
| CA-SENTINEL: Literal 0xff causes corruption and invalid reverse traversal | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 |
| SH-BSD: BSD shelf ignores custom codecs | 4/4 | 4/4 | 4/4 | 4/4 | 4/4 |
| ST-PROBE: Unavailable tracing can abort whole test-module imports | 0/4 | 0/4 | 0/4 | 0/4 | 3/4 |
RA-BOUNDS: Generic filtering leaves undeclared names in copied bounds
rust-analyzer: trait generics
Confirmed consequential correctness regression. The new filter considers associated-item ranges, but copies the where clause and retained parameter bounds unchanged. Valid input yields uncompilable generated code. Where-clause and inline-bound variants count as one dependency-closure issue family.
RA-MACRO: Generic references introduced by macros are pruned
rust-analyzer: trait generics
Confirmed by source trace: FindUsages searches written parameter tokens; find_nodes descends from tokens in macro calls, but the parameter in a macro definition is a token-tree token, not a NameLike reference. A zero-argument macro invocation has no matching token. The assist copies the invocation into a trait while removing the needed generic. Distinct from dependencies in the trait header. The saved rustc probe confirms the macro invocation resolves T and that the predicted pruned trait fails; it is not an end-to-end assist run.
Additional tentative mentions: Opus 5.5: 3/4.
DJ-PARTITION: Partition keys disagree with serialized JSON values
DuckDB: JSON COPY
Confirmed by both formatter paths and typed-macro binding. MacroFunction::BindMacroFunction inserts casts at lines 222-231. TIMESTAMP_NS is coerced to microsecond TIMESTAMP for partition formatting; the new JSON formatter preserves nanoseconds. DATE with only timestampformat is another manifestation: formatted in the partition, default ISO in the payload. Base projected once for both. Group both mismatches as one split-formatting family. Precision loss in the old partition path alone is pre-existing; the new disagreement with payload is the regression. The disagreement requires WRITE_PARTITION_COLUMNS to retain the partition key in the JSON payload; otherwise only the directory contains it and the old precision loss is pre-existing. No full DuckDB build was run. Opus r2 incorrectly says substitution adds no cast, but correctly identifies the DATE mismatch.
CA-SENTINEL: Literal 0xff causes corruption and invalid reverse traversal
Catch2: ANSI wrapping
Confirmed regression with unchanged base/subject TextFlow compiled in isolation. A literal byte is rewritten to m; A + 0xff + B at width 2 triggers the new backward-scan assertion, whereas base completes. With assertions disabled the scan has no lower bound. Arbitrary std::string bytes are accepted; no UTF-8 validation contract protects the sentinel. Memory-safety defect, without a demonstrated remote exploit. Corruption and out-of-bounds traversal are one marker-collision family.
SH-BSD: BSD shelf ignores custom codecs
CPython: shelve codecs
Confirmed advertised functionality is broken: base initialization overwrites both supplied callbacks with pickle; cursor access also bypasses the custom decoder. Group constructor and navigation omissions as one end-to-end codec integration family. The security consequence requires attacker-controlled records and a caller relying on its custom decoder. Narrow probe confirms callbacks are ignored.
ST-PROBE: Unavailable tracing can abort whole test-module imports
CPython: strace helper
Confirmed with injected ptrace-denied diagnostic. _can_strace asserts that events parsed before checking failure status. Parentheses in a real-shaped ptrace error defeat the parser, causing the skip decorator to raise and abort module import.
B · Confirmed bounded defects · 24 issue families
FE-PASTE: Optional stdin failure aborts viable HTTP authentication
Ferricode: OAuth callbacks
Confirmed regression, bounded to login availability and retry UX. Blank/malformed paste and read errors propagate out of the optional select branch and drop the listener; HTTP malformed callbacks already recover. Group read-error and malformed-paste variants as one optional-input failure-isolation family.
FE-JOB: Eager terminal read suspends background authentication
Ferricode: OAuth callbacks
Confirmed Unix job-control mechanism: a background process group reading its controlling TTY receives SIGTTIN. The new eager thread suspends the whole process, including the listener. Foregrounding recovers; classify as bounded workflow regression rather than security compromise.
FE-BROWSER: Paste reader consumes terminal-browser input
Ferricode: OAuth callbacks
Confirmed input-ownership race. Reader starts before webbrowser::open; pinned webbrowser 1.2.1 src/common.rs:73-79 runs text browsers with inherited stdin. Navigation/form/quit input can reach the callback reader. Counts independently of generic bad-paste handling.
FE-HTTP-DELAY: Accepted HTTP connection temporarily blocks pasted callback polling
Ferricode: OAuth callbacks
Confirmed the select branch awaits stream handling outside the selection loop. A local connection withholding headers delays the paste path up to the existing ten-second read limit. No proof of inevitable unbounded starvation.
SA-TEST-COST: Multiple tests repeat production-cost KDF despite one-test claim
Saltybox: encryption engine
Three tests invoke the 256 MiB defaults; two round trips plus two fresh-nonce encryptions total six derivations, up to three overlapping workspaces. Confirmed bounded test-cost/comment discrepancy. No CI OOM is proven. Some reports say five rather than six; this does not change the issue family.
Additional tentative mentions: 6.1 Sol: 1/4.
SS-DOC: README still describes an embedded catalog
Stark Parts: static catalog
Confirmed architecture contradiction: README says include_str while production now fetches the separately copied static asset. The implementation specification also retains an obsolete open decision. Bounded documentation defect, not a demonstrated deployment outage.
SS-NOTICE: Loading and error screens omit the required unofficial notice
Stark Parts: static catalog
SPEC requires a persistent notice visible on initial load. The notice is inside App and absent from both new startup branches, indefinitely on failure. Confirmed user-visible contract omission.
SS-GUARD: Source guard loses protection against query-time gloo fetches
Stark Parts: static catalog
The test removes the gloo_net/fetch bans from lib.rs as well as the legitimate startup loader. A query-time gloo request to another catalog path would escape both this guard and the URL-specific smoke assertions. Other client bans remain; this is narrower loss of coverage, not removal of all protection or a present network leak.
SC-FLAGS: Turbo drops the CI warnings-as-errors setting
Stark Parts: build cache
Pinned Turbo 2.10.4 probe with original task configuration and a harmless task body runs successfully but receives no injected RUSTFLAGS. The setup-rust-toolchain v1 action defaults to -D warnings; the checked-in workflow does not override it. Thus wasm-only warnings lose this CI gate. Parent downloaded and checksum-verified Turbo; reviewers did not run it. Action v1 is mutable, so the saved current action source is corroboration rather than a pinned historical runner image.
DA-PREFETCH: Consumed row groups retain prefetch buffers longer
DuckDB: async scan
Base Schedule cleared transport read heads before returning FINISHED. Subject FinishRowGroup only logs and finalizes metrics; the transport remains until InitializeScan replaces it or local state is destroyed. This retains one row group per worker while opening/waiting for the next file and through final source-state lifetime. Confirmed resource-lifetime regression; no measured OOM or query-result error.
CA-ESCAPE: Line transitions discard ANSI state changes
Catch2: ANSI wrapping
Confirmed base/subject probe: a newline followed by ESC[31m loses the escape only in subject. Whitespace advancement skips bytes that neither output substring includes. This changes terminal styling, including dropping resets, but does not establish application data loss or an exploit.
CA-CTYPE: Malformed escapes pass negative char to isdigit
Catch2: ANSI wrapping
The new parser passes plain char to isdigit. On signed-char implementations, high-bit bytes other than EOF violate the C classification precondition. A definite portability defect; no crash was demonstrated on this host. Missing direct cctype include is supporting portability advice, not an independently counted bug.
Additional tentative mentions: 6 Astra: 1/4, 6.1 Sol: 1/4.
CA-ANSI-ONLY: Columns containing only ANSI controls disappear
Catch2: ANSI wrapping
Confirmed base/subject probe: ESC[0m was emitted by base; subject begins at end and emits nothing. Distinct from separator handling because no visible character exists. Bounded output/terminal-state defect.
CA-QUADRATIC: Leading ANSI prefixes are rescanned for every line
Catch2: ANSI wrapping
Source establishes O(prefix_bytes * output_lines): indentSize and substring construct begin(), whose constructor reparses the full leading prefix. Base used constant-time offsets. A confirmed complexity regression on long escape-prefixed text; no production stall or remote attack established.
SH-DOC: Published codec contract has wrong directions and incomplete signatures
CPython: shelve codecs
Confirmed documentation gives backwards callback directions and omits the serializer protocol argument. Group one-argument failures and keyword-only signature omissions here, rather than rewarding multiple reports of the same public-contract documentation problem. The two-argument implementation convention itself is supported by the added tests.
SH-TEST: New test assumes optional SQLite backend
CPython: shelve codecs
Confirmed test portability defect: dbm tries several backends and SQLite is optional, but the test dereferences dbm.sqlite3.error unconditionally. No product failure is required.
ST-ANNOTATION: Malformed annotation breaks introspection
CPython: strace helper
Confirmed narrow defect: Dict receives a slice instead of two parameters when deferred annotations are evaluated. Correctly limited to introspection in these reports.
ST-PARSER: Trace parser drops calls containing quoted parentheses
CPython: strace helper
Confirmed by pinned-code probe: write(1, ")", 1) disappears; commas split quoted strings. The general helper can undercount syscalls. Current fixed payload does not establish a production runtime regression.
Additional tentative mentions: Opus 5.5: 2/4.
ST-BINARY: Binary stderr raises UnicodeDecodeError
CPython: strace helper
Confirmed with injected successful process result containing non-UTF8 stderr. New helper unconditionally decodes the combined stderr/trace; current added test scripts do not exercise arbitrary binary stderr.
ST-ABI: Exact syscall list depends on Linux ABI/libc
CPython: strace helper
Confirmed test-portability defect: the new exact-sequence assertion requires lseek, but the pinned configuration enables 64-bit file offsets and 32-bit glibc 2.39 implements lseek64 with the _llseek syscall. The test gates only on Linux and working strace, so its literal sequence cannot match that supported ABI. Local 32-bit libc disassembly and the pinned configure/test source establish the mismatch; no 32-bit CPython build was run. Other libc variants remain unverified. Bounded test defect, no product-runtime failure.
Additional tentative mentions: 6 Astra: 1/4, 6.1 Sol: 1/4.
ST-VFORK-COVERAGE: Explicit vfork-disable integration case removed
CPython: strace helper
Diff removes the only traced _USE_VFORK=False case, while mock-based flag forwarding remains. Confirmed bounded coverage regression, not a runtime vfork defect. Reports speculating about author intent receive no credit for that speculation. The base filter skips on the checked strace 6.8/x86-64 environment, so this is removal of a specified negative integration check while enabling the suite, not proof of losing previously exercised coverage there. The mock-based forwarding test does not replace that integration contract.
ST-POSIXSPAWN: Newly enabled positive vfork check may test libc instead
CPython: strace helper
Confirmed newly exposed test-validity defect. The base filter is rejected by strace 6.8 on the checked x86-64 Linux environment because clone2 is unsupported, so base skips; subject switches to %process and enables the test. Its parent-only _USE_POSIX_SPAWN mock does not reach the traced child. With glibc 2.39 and CLOSEFROM support, the child takes posix_spawn and emits CLONE_VFORK, satisfying the positive assertion without testing the intended CPython vfork path. Host Python 3.14.7 traces corroborate the unchanged pinned subprocess dispatch; no pinned CPython build was run. Keep separate from removal of the negative integration case: fixing the positive child configuration does not restore that case.
ST-PYIO: Python I/O subclass repeats the C I/O trace
CPython: strace helper
Confirmed: shared mixin child script uses built-in open rather than self.FileIO/modulename. Duplicates C coverage without exercising _pyio.
Additional tentative mentions: Opus 5.5: 1/4.
ST-PATH: Executable paths can satisfy vfork regex
CPython: strace helper
New %process tracing includes execve paths, and assertions scan raw trace for vfork anywhere. A path containing vfork can cause spurious failure or a false positive. A concrete environmental name dependency; bounded test defect.
C · Conditional or arguable concerns · 20 issue families
FE-FALLBACK: Paste-only fallback excludes non-conflict bind failures
Ferricode: OAuth callbacks
Source confirms AddrInUse-only fallback. Actionability depends on whether broad SPEC wording about unavailable ports promises permission/sandbox/address failures too. Existing behavior already failed for those environments; this is incomplete promised coverage rather than a newly broken ordinary path.
Additional tentative mentions: Opus 5.5: 2/4.
FE-ORPHAN: Detached stdin reader can affect a later library call
Ferricode: OAuth callbacks
Mechanism is real but requires a continuing host or repeated auth call. The supplied CLI exits after authentication, and the comment explicitly chooses detached input for that lifecycle. No affected long-lived in-tree caller is established.
Additional tentative mentions: 5.6 Sol: 2/4, 6 Sol: 1/4, 6 Astra: 4/4, 6.1 Sol: 4/4, Opus 5.5: 2/4.
FE-INPUT-BOUND: Pasted stdin line has no allocation bound
Ferricode: OAuth callbacks
read_line is unbounded, but impact requires control of local stdin or an oversized user paste. No remote input route or trust boundary is demonstrated. Useful hardening proposal, not an established security blocker.
SA-KDF-COST: Accepted KDF parameters can exhaust caller resources
Saltybox: encryption engine
Confirmed allocation mechanism in argon2 0.5.3: vec allocates up to 4 GiB before AEAD authentication and may abort. However the exact caps are an explicit design choice, v2 CLI dispatch is deliberately unwired, and no operational resource guarantee is established. Resource budgets/fallible allocation are substantive design improvements; avoid presenting intended cap acceptance as an unconditional correctness bug.
Additional tentative mentions: Opus 5.5: 3/4.
SA-RESIDUE: Argon2 workspace retains key-reconstructing material
Saltybox: encryption engine
Confirmed dependency-level mechanism: argon2 0.5.3 lib.rs:229-231 allocates ordinary blocks and finalize at 481-505 derives the key from lane-final blocks. Zeroizing the returned key does not clear that equivalent material. Exploitation requires a separate residual-memory disclosure; complete memory sanitization is not established as a contract, and v1 already leaves KDF intermediates. Important conditional security-hardening finding, not a demonstrated standalone exploit. Enabling the optional zeroize feature alone does not wipe the heap arena.
Additional tentative mentions: 5.6 Sol: 1/4, 6 Sol: 1/4, Opus 5.5: 2/4.
SS-SKEW: Separate app and catalog requests can cross a deploy
Stark Parts: static catalog
Fixed catalog URL permits an old app to encounter a newer schema; validation then rejects it. Actual deployment skew protection and schema-changing deploy frequency are unknown. Reload recovers. Conditional deployment concern.
Additional tentative mentions: Opus 5.5: 1/4.
SS-MEMORY: Startup resource may retain an unnecessary parsed catalog
Stark Parts: static catalog
Deep-clone/cache mechanism is plausible from LocalResource usage, but pinned dependency semantics and net memory impact were not measured. Base retained the embedded source bytes; this change trades representations. No established browser failure or resource budget.
Additional tentative mentions: 6 Sol: 1/4, Opus 5.5: 2/4.
SS-COMPRESSION: JSON5 delivery may lose CDN compression
Stark Parts: static catalog
Actual Vercel response headers/compression policy are absent. A local mime-db entry without compressible:true does not prove CDN behavior. Worth a deployment measurement, not a confirmed transfer regression.
Additional tentative mentions: Opus 5.5: 2/4.
SS-SEQUENTIAL: Separate fetch introduces sequential startup work
Stark Parts: static catalog
Catalog fetch starts after WASM initialization, but WASM is smaller after removing the embedded catalog. Net latency needs measurement; no latency target or preload contract establishes a defect. An optimization question.
Additional tentative mentions: Opus 5.5: 1/4.
SS-DEADLINE: Stalled fetch has no application deadline
Stark Parts: static catalog
Request/body awaits lack an abort deadline. A permanently pending response stays loading, but the spec defines no time budget and normal browser/network behavior was not reproduced. Whether an application deadline is required is a product/reliability decision.
Additional tentative mentions: Opus 5.5: 1/4.
SS-EMPTY: Schema-valid empty catalog appears as empty search
Stark Parts: static catalog
Validator permits emptiness, as it did in base. Runtime separation changes deployment risks, but no contract says every schema-valid empty document is a load/parse failure. The desired semantic completeness rule needs clarification.
SC-CACHE-TRUST: Preview cache writes could cross into production
Stark Parts: build cache
Threat scenario is coherent if untrusted preview code receives credentials that can overwrite the production cache namespace. Repository configuration alone establishes neither token exposure nor authorization boundaries. Cache hashes are not authenticity guarantees, but absence of signature alone is not proof of an exploitable deployment.
Additional tentative mentions: Opus 5.5: 2/4.
SC-BOOTSTRAP: Local builds can install or replace global tools
Stark Parts: build cache
Bootstrap now runs on local cache misses too. Missing rustup or a different Trunk version triggers installation. The implementation spec deliberately moves setup into the cacheable task; whether local side effects are acceptable is an interface/policy question. Not an independent security vulnerability.
SC-OMITDEV: Production-only npm install would omit Turbo
Stark Parts: build cache
Mechanism is valid when devDependencies are explicitly omitted, but the configured npm ci does not do so and actual Vercel project environment was not supplied. Conditional deployment compatibility concern.
DA-DIRECT: Standalone Parquet reader API loses required preparation
DuckDB: async scan
InitializeScan now selects PROCESS, while column InitializeRead/group-offset setup is reached through private RegisterRowGroupReads from the multi-file ScheduleIO override. The direct public API pair is no longer self-sufficient. All in-tree callers use the correct driver; external users and a compatibility guarantee are not established, and the changed signature already requires adaptation. A concrete contract concern, not an observed SQL failure.
Additional tentative mentions: Opus 5.5: 1/4.
DA-BLOCKED: External async readers may lose partial chunks on resume
DuckDB: async scan
DecodePhase now resets by default before every Scan; base skipped reset after BLOCKED. Parquet opts into OwnsChunkReset and preserves RESUME_PAYLOAD. No affected in-tree reader was found. Confirmed interface change, conditional downstream regression.
Additional tentative mentions: 5.6 Sol: 1/4, Opus 5.5: 2/4.
DJ-DATE-COMPAT: DATE no longer uses timestampformat in JSON output
DuckDB: JSON COPY
Behavior changes, but the new per-type rule matches dateformat/timestampformat separation in CSV. No promise to preserve the old implicit DATE widening was established. Count the standalone compatibility objection separately from the definite partition/payload inconsistency; this is not a second confirmed data bug.
Additional tentative mentions: Opus 5.5: 1/4.
SH-INIT: Callback validation follows database acquisition or replacement
CPython: shelve codecs
Mechanism confirmed by a narrow probe: incomplete hooks can close caller storage and flag=n replaces an existing database before raising. Conservatively conditional/actionability bucket: destructive case explicitly requests replacement and passes invalid arguments; the error-side-effect contract is not specified. Worth fixing, but not counted as an unambiguous valid-use landing blocker. Reports describing only resource retention get credit for the same validation-order family.
Additional tentative mentions: Opus 5.5: 1/4.
ST-FLAGS: Availability probe omits required strace flags
CPython: strace helper
Correct difference between probe and actual command; a failing supported-version example is not established. Missing strace compatibility baseline makes this conditional.
ST-SENTINEL: Parse-error sentinel may make negative assertion vacuous
CPython: strace helper
Code can return synthetic error text even with check=True. Claimed silent pass depends on an unsupported/future flag or trailing diagnostic, not a demonstrated current caller execution.
Additional tentative mentions: Opus 5.5: 1/4.
D · Rejected change findings · 6 issue families
| Issue | 5.6 Sol high reasoning | 6 Sol high reasoning | 6 Astra high reasoning | 6.1 Sol high reasoning | Opus 5.5 high reasoning |
|---|---|---|---|---|---|
| SS-CSS: Unstyled startup states are cosmetic advice | 0/4 | 0/4 | 0/4 | 0/4 | 2/4 |
| SS-PREMOUNT: Blank pre-WASM interval already existed | 0/4 | 0/4 | 1/4 | 0/4 | 0/4 |
| SC-ROOT: Claim that the root build task cannot run is false | 0/4 | 1/4 | 0/4 | 0/4 | 0/4 |
| CA-PADDING: Byte-based multi-column padding is pre-existing | 3/4 | 1/4 | 1/4 | 0/4 | 0/4 |
| CA-WIDTH: One-character nontermination is not introduced here | 1/4 | 0/4 | 1/4 | 0/4 | 0/4 |
| ST-ANNOTATION-WRONG: Annotation typo falsely described as import-breaking | 2/4 | 3/4 | 3/4 | 3/4 | 0/4 |
SS-CSS: Unstyled startup states are cosmetic advice
Stark Parts: static catalog
Confirmed missing startup classes and style injection only after App mounts. Both states remain readable and satisfy the functional loading/error requirement. The reviewer prompt explicitly excludes cosmetic nits; no consequential behavior was established.
Additional tentative mentions: Opus 5.5: 1/4.
SS-PREMOUNT: Blank pre-WASM interval already existed
Stark Parts: static catalog
Base also had no static loading placeholder. The new catalog loading state begins at app initialization, which the spec explicitly permits. This does not establish a change-introduced failure.
SC-ROOT: Claim that the root build task cannot run is false
Stark Parts: build cache
Isolated pinned Turbo 2.10.4 probe successfully runs build:app using the original single-package configuration. Turbo recognizes it as //#build:app without that spelling in turbo.json. The report confuses multi-package root-task registration with single-package behavior; the claimed app-less deployment does not follow.
CA-PADDING: Byte-based multi-column padding is pre-existing
Catch2: ANSI wrapping
The byte-length padding code is unchanged. A width-20 colored single-character column produces the same underpadding on base and subject in the isolated probe. ANSI support remains incomplete, but the reports do not establish a new regression or current newly affected caller. Rejected as a change finding, not as an inaccurate description of the limitation.
CA-WIDTH: One-character nontermination is not introduced here
Catch2: ANSI wrapping
Bounded base/subject iteration proves both revisions stop immediately for abc at width 1, and both fail to advance after the first line for a bc at width 1. 5.6 r3 supplies a non-hanging example and falsely says base terminates; Astra r4 supplies a hanging example, but it already hangs in base. No credit for a new bug.
ST-ANNOTATION-WRONG: Annotation typo falsely described as import-breaking
CPython: strace helper
The typo is real but the asserted import failure is false for this pinned Python 3.14 tree. Python/compile.c:1908-1947 emits a separate annotation scope; annotations are deferred. A host Python 3.14 probe of the pinned helper definitions imports successfully and fails only on get_type_hints. No credit as a consequential import bug; a correct edit alone does not validate the reported mechanism.
Downloads and limits
| Artifact | Contents |
|---|---|
| cases.json | Exact commits, scope omissions and public repository mapping. |
| experiment.json | Models, versions, effort, repetitions and prompt/catalog fingerprints. |
| results.json | All 56 adjudicated issue families with attribution and bucket summaries. |
| per-review.csv | All 200 reviews, including cells with no confirmed findings. |
| reviewer-prompt.txt | Exact caller instructions, unchanged. |
| instruction-excerpts.json | Redacted representative harness instruction text, with explicit omissions. |
| run-cell.py | Generic single-cell reproduction launcher; no hard deadline. |
| redaction-summary.json | Publication exclusions and replacement categories. |
| Consultation decisions | Accepted corrections, retained judgments and before/after totals. |
| Verbatim Opus critique | Coverage, evidence, proposed corrections and limits; historical text before consolidation. |
| Consultation prompt | Exact wording with local access paths and output artifact names generalized. |
| Consultation metadata | Model/effort, prompt fingerprints and probe artifact links. |
| Pre-consultation ledger | Historical input to the scenario calculator; saved output. Run the calculator on this list-shaped ledger, not current results.json. |
| Parent probe | Separate command, stdout and redacted trace supporting consolidation. |
| SHA256SUMS.txt | Published artifact integrity checks. |
Unix usernames, hostnames, account identifiers, IP addresses, machine paths, raw sessions and source snapshots are omitted. Public GitHub owners and repository names are retained as reproducible inputs. The hosting URL identifies the publication service; it is not an experimental input.
Host/provider load, cache state, run order and dependency availability were not controlled. Eight replacement runs happened later at different concurrency. Timeout-driven replacement can also affect which findings appear in the retained sample; its direction and magnitude were not measured. Cost and latency are not ranked here. The conclusions describe these changes under these recorded harnesses, not a universal model ordering.