Repository navigation
Fix method ambiguity in AbstractVectorOfArray similar() breaking QA on Julia 1.10 - #678
ChrisRackauckas-Claude wants to merge 4 commits into
Conversation
…) on Julia 1.10 Making AbstractVectorOfArray <: AbstractArray (SciML#547) made RAT's similar(VA::AbstractVectorOfArray, ::Type{T}, dims::Tuple{Union{Integer,Base.OneTo}, Vararg{...}}) ambiguous with Base.similar(a::AbstractArray, ::Type{T}, dims::Tuple{Integer, Vararg{Integer}}), a Base fallback method that exists on Julia 1.10/1.11 but was removed in 1.12. This was masked by the Aqua ambiguities exemption until SciML#648 removed it, so GROUP=QA on Julia 1.10 (the "lts" CI matrix entry) started failing on master. Adds the more specific Integer-only method Aqua's own diagnostic suggested, mirroring the analogous pair of methods Base itself defines, resolving the ambiguity without an Aqua exclusion. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude <noreply@anthropic.com> Agent-Harness: Claude Code Agent-Model: claude-sonnet-5 Agent-Session: https://claude.ai/code/session_01LPHREnnonfLg1VcE1EJovv
Independent review (Devin CLI 3000.11.3, model fusion-claude-opus-5-5-high-sidekick-swe-2-medium): CHANGES, risk low. Full reviewVERDICT: CHANGES The added method is correct. Running it confirms it removes the ambiguity on Julia 1.10 and 1.11. On 1.12 and 1.13 it is harmless: it returns the same results as master. Two problems remain. The PR adds no test that CI will actually run. The PR body also misdescribes what the bug is and where CI would catch it. Blocking findings
Non-blocking findings
What I ranAll runs used
What I did not verify
Links
🤖 Posted by an AI agent — harness: Devin CLI 3000.11.3 (review), Claude Code 2.1.285 (posting) · model: fusion-claude-opus-5-5-high-sidekick-swe-2-medium |
Cover non-Int integer tuples and existing Int, empty and OneTo paths for VectorOfArray and DiffEqArray. The new test reports eight ambiguity errors without the dispatch fix on Julia 1.10 and passes 48 assertions with it; Julia 1.12 passes the same assertions before and after. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Codex <noreply@openai.com> Agent-Harness: Codex CLI 0.163.0 Agent-Model: gpt-6.1-sol Agent-Session: local session, transcript /home/crackauc/sandbox/goals/performance/jobs/rat/qa-master/log-codex.txt on amdci2
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Codex <noreply@openai.com> Agent-Harness: Codex CLI 0.163.0 Agent-Model: gpt-6.1-sol Agent-Session: local session, transcript /home/crackauc/sandbox/goals/performance/jobs/rat/qa-master/log-codex.txt on amdci2
Problem
The package supports Julia 1.10 and later (
julia = "1.10"). On Julia 1.10/1.11,similar(::AbstractVectorOfArray, ::Type, dims)throws a user-facingMethodError: ... is ambiguouswhendimscontains non-Intintegers, such as(Int32(2), Int32(3)). Local Aqua QA on Julia 1.10 reports the ambiguity: master has 17 passed / 1 failed; the PR has 18/18 passed. The regression evidence below exercises the affected calls directly.CI runs QA only on Julia
1(latest stable). The shared SciML matrix script pinsQA_VERSIONS = ["1"], overriding the repository's[QA] versions = ["lts", "1"]. The current PR checks contain onlytests / QA (julia 1, ubuntu-latest)for QA. CI does not exercise this ambiguity on Julia 1.10/1.11; the evidence for those supported versions comes from local runs.Root cause
Julia 1.10/1.11's
Basedefines three overlappingsimilar(::AbstractArray, ::Type, dims)fallbacks, includingdims::Tuple{Integer, Vararg{Integer}}atabstractarray.jl:839. That particular fallback was removed in Julia 1.12 (methods(Base.similar, Tuple{AbstractArray,Type,Tuple})only shows theNTuple{N,Int}andTuple{Union{Integer,Base.OneTo},...}overloads there). RecursiveArrayTools definessimilar(VA::AbstractVectorOfArray, ::Type{T}, dims::Tuple{Union{Integer,Base.OneTo}, Vararg{...}}), which is neither more nor less specific than Julia 1.10'sTuple{Integer, Vararg{Integer}}fallback onceAbstractVectorOfArray <: AbstractArray(one dominates on the first argument, the other on the third) — hence the ambiguity, present only on Julia ≤ 1.11.Bisect
cde5c35("Make AbstractVectorOfArray <: AbstractArray for proper interface compliance", PR BREAKING: Make AbstractVectorOfArray <: AbstractArray #547, merged 2026-04-01). Before this,AbstractVectorOfArraywas not anAbstractArray, so Base'ssimilarfallbacks never entered the dispatch intersection.f3569c3("fix: resolve ArrayPartition ambiguity QA", PR fix: resolve ArrayPartition ambiguity QA #648, merged 2026-08-26) removed the blanketaqua_broken = (:ambiguities,)exemption. That PR's own verification fixed thecopyto!/ldiv!ambiguities it found, but did not catch this one (version-dependent on Julia ≤ 1.11).git log -L 1157,1166:src/vector_of_array.jl, which traces the ambiguous method directly tocde5c35.Fix
Adds
similar(VA::AbstractVectorOfArray, ::Type{T}, dims::Tuple{Integer, Vararg{Integer}}), exactly the "possible fix" Aqua's own diagnostic suggests, pinning the Integer-only intersection so it dominates both the existing RAT method and Base's 1.10/1.11 fallback. This mirrors the same two-method split Base itself already uses (NTuple{N,Int}+Tuple{Integer,Vararg{Integer}}), so it does not introduce a new ambiguity. No Aqua exclusion used.Persistent regression coverage
test/Core/similar_tests.jlcoversVectorOfArrayandDiffEqArray, withInt32,UInt8,BigInt, andBooltuple dimensions, and the existingInt, empty tuple,OneTo, and mixedInt/OneTopaths. Each successful call must return anArraywith the expected size andFloat64element type.The same committed test was run with master source from 76bec79, then with the PR's dispatch fix restored. No other source was changed.
Julia 1.10.12, without the dispatch fix (exit 1):
The eight errors are the four non-
Intcases on each array type; the 24 assertions for existing paths pass.Julia 1.10.12, with the dispatch fix (exit 0):
Julia 1.12.7, without and with the dispatch fix (both exit 0):
The regression commands were
timeout 3600 julia +1.10 --compiled-modules=no --project=. -e 'include("test/Core/similar_tests.jl")'andtimeout 3600 julia +1.12 --compiled-modules=no --project=.codex-validation-112 -e 'include("test/Core/similar_tests.jl")'. The Julia 1.12 project was an isolated local environment developing this checkout.GROUP=Core timeout 3600 julia +1.10 --compiled-modules=no --project=.codex-validation-110 -e 'include("test/runtests.jl")'ran the official Core dispatcher using a local environment containing the package dependencies, test extras/targets and their compat constraints: 1,309 passed, 2 existing broken, no failures. The new testset appears as:Runic on
test/Core/similar_tests.jl,test/runtests.jl, andsrc/vector_of_array.jlpassed (exit 0), usingtimeout 3600 julia +1.10 --compiled-modules=no --project=$HOME/sandbox/goals/performance/runic-env -e 'using Runic; exit(Runic.main(ARGS))' -- --check <files>.typoson the same files andgit diff --cached --checkalso passed (exit 0).QA on Julia 1.10 is master 17 passed / 1 failed (the ambiguity), PR 18/18 passed. A fresh run at
1936cc26066359bfe5378b538e1c14e837240f72completed successfully using the official dispatcher and an isolated local runner environment containing the package dependencies and test extras/targets:GROUP=QA timeout 3600 julia +1.10 --project=.codex-qa-runner -e 'include("test/runtests.jl")'The runner was retained on
JULIA_LOAD_PATHwhile the dispatcher activated its isolated QA environment. A first resumed attempt with--compiled-modules=nocompleted with 17 passes and one Aqua persistent-task shutdown failure; the ambiguity check passed. AfterPkg.precompile()completed in the local runner and QA environments, the normal compiled-module run above passed. No test assertion, skip configuration, or time limit changed. Julia 1.12+ allocation behavior is unchanged; the regression passes all 48 assertions both before and after the fix on 1.12.7.No Julia 1.11 rerun, other test groups, or new CI run was verified in this follow-up.
This comment-only follow-up reran
timeout 3600 "$HOME/.juliaup/bin/julia" +1.10 --compiled-modules=no --project=. -e 'println("Julia ", VERSION); include("test/Core/similar_tests.jl")': Julia 1.10.12, 48/48 passed. Runic 1.13.0 (--checkon all three PR files),typoson those files, andgit diff --checkpassed (exit 0). Full Core, QA, and other groups were not rerun for this comment-only edit; the results above are from the prior head.Risk assessment
similardispatch fix forAbstractVectorOfArray; this follow-up only shortens an explanatory comment and corrects the PR description.Original implementation: Claude Code, model unknown, session https://claude.ai/code/session_01LPHREnnonfLg1VcE1EJovv
🤖 Review fixes written by Codex CLI 0.163.0 (model: gpt-6.1-sol); local session (transcript kept by the fleet master).
Risk assessment (independent review, Grok Build grok-4.7, reviewed head a999997)
Risk: low
Blast radius: One new
Base.similarmethod onAbstractVectorOfArrayfordims::Tuple{Integer,Vararg{Integer}}. It is the method Julia 1.10 and 1.11 define onAbstractArrayand that Julia 1.12+ removed. Callers that already resolvedsimilarkeep the same result. Callers that threwMethodError: ambiguouson 1.10/1.11 (Int32,BigInt, and other non-Intinteger dims) now get anArray. No public name is removed or renamed.Project.tomlstays at 4.5.4. No new dependency.Evidence: Head
a999997421765c13e9fcd7d71280c03c171db6fc, rechecked unchanged at the end of the review. Diff issrc/vector_of_array.jlonly (+10). https://github.com/SciML/RecursiveArrayTools.jl/pull/678/filesJulia 1.10.12, master
76bec79,detect_ambiguities(RecursiveArrayTools, Base)reported 1 ambiguity, thesimilarpair atvector_of_array.jl:1157versusBase abstractarray.jl:839.similar(va, Float64, (Int32(2), Int32(3)))and the same call withBigIntdims threw thatMethodError.Int, varargs,OneTo, mixedInt/OneTo, and the empty tuple already returnedArray{Float64}.Julia 1.10.12, this head: those
Int32andBigIntcalls returnMatrix{Float64}of size(2, 3).detect_ambiguitiesagainst Base is 0. No new ambiguity.Julia 1.13.0, master and this head: the same calls all succeed, including
Int32andBigInt, anddetect_ambiguitiesagainst Base is 0 both ways. The new method is dominated on 1.13 and does not change those results.CI at review time: 22/22 pending, no failed job to compare with master. Package tests: https://github.com/SciML/RecursiveArrayTools.jl/actions/runs/38868735951 . Runic: https://github.com/SciML/RecursiveArrayTools.jl/actions/runs/38868735327 . Downstream (includes SciMLSensitivity Core4): https://github.com/SciML/RecursiveArrayTools.jl/actions/runs/38868735487 . Master's latest run https://github.com/SciML/RecursiveArrayTools.jl/actions/runs/38819764786 failed only
SciMLSensitivity.jl/Core4; a matching failure here would be pre-existing. FullGROUP=QAwas not run; the check this PR exists to clear isdetect_ambiguities, which was run. Localrunicis a different CLI and was not used.No
@test_broken, skipped test, loosened tolerance, allow-failure job, removed coverage, or new dependency.Independent review: Grok Build grok-4.7 rated it low, high confidence: the 1.10 ambiguity reproduces and this method removes it without adding another.
Merge: auto-merge candidate — hold until the 22 pending checks are green. The change is a dispatch bugfix, not a public-API break, and it needs no version bump.
🤖 Posted by an AI agent — harness: Grok Build · model: grok-4.7 (independent reviewer; appended by Claude Code 2.1.301 · claude-opus-5-5)
Conversation: https://claude.ai/code/session_01VZjwf7Ux9YtTzwHGHMqnsq
Risk assessment (independent review, Codex gpt-6.1-sol, head a999997)
Base.similar, changing dispatch for existing non-Intdimension calls; this is the highest matched criterion, above the otherwise applicable L6 error-to-success fix).similar(::AbstractVectorOfArray, ::Type, dims), includingVectorOfArrayandDiffEqArray, particularly non-Intinteger tuples on supported Julia 1.10/1.11. This is a peripheral allocation overload; the diff does not change the main indexing or broadcasting implementations. ExistingInttuples retain their more-specific method, and testedOneTopaths retain their allocation contract. No dependency, export, or new public name is added; no breaking API change or major-version bump is indicated.git diff origin/HEAD...HEAD; reviewed the PR body/comments and linked history. There is no linked issue (closingIssuesReferencesis empty). Extractedorigin/HEADandHEADinto scratch copies withgit archive, leaving the checkout unchanged. Ranbash scratch/run-checks.sh, which sequentially executestimeout 3600 <local path> +<version>with the requested depot andJULIA_NUM_THREADS=4. The samescratch/probe.jlproduced eight ambiguity errors on base on both 1.10.12 and 1.11.9; head passed 16 non-Intdimension assertions and 10 existing-path assertions on each. On 1.12.7 both base and head passed all 26 assertions. Ambiguity counts were base/head = 1/0 on 1.10 and 1.11, and 0/0 on 1.12. The probe coversVectorOfArray,DiffEqArray,Int32,UInt8,BigInt,Bool, ordinaryInt, empty dimensions, andOneTodimensions.Local QA used
timeout 3600 <local path> +1.10 scratch/run-qa.jl scratch/<base|head>to execute each copy's unchangedtest/QA/qa.jl: base rerun 17 passed, 1 failed (the ambiguity), head 18/18 passed. The first base QA attempt also failed Aqua's persistent-task shutdown check; that failure did not recur in the identical rerun, without changing its timeout or assertions. The final Core command wastimeout 3600 <local path> +1.10 --project=scratch/head scratch/run-core.jl scratch/head; the setup script activates the scratch copy, installs its test dependencies, setsGROUP=Core, and includes the existingtest/runtests.jl. Result: 1,261 passed, 2 pre-existing broken, no failures, including 150 interface assertions. Initial Core dependency setup failed on a cross-version scratch manifest; regenerating that manifest allowed the full run to complete.Read PR CI logs: GPU testsets passed 13/13, 10/10, 4/4; LTS AD testsets passed 22/22 adjoint, 8/8 Mooncake. Compared the failing PR Core4 log with the default-branch Core4 log: both used Julia 1.13.2 and downstream SciMLSensitivity SHA
a0f7d2f571ece0da3dd7b2d5bd28d47c221684a1, and both failedEnsembleThreadsatensembles.jl:19withAssertionError: mi2 !== nothing, reporting 15 passed, 1 error, 2 broken. Thus this observed CI failure also occurs on the default branch.G1: not applicable — no numerical algorithm, tolerance, or computed result changes. G2: pass — the changed overload was exercised locally, and PR GPU/AD logs confirm those suites actually executed; no Reactant or MPI path is changed. G3: not applicable — no shared state, cache, threading, or global default changes. No skipped/loosened tests or new copyleft dependency appears in the diff; the new code accesses public Base APIs.
🤖 Posted by an AI agent — harness: Codex CLI 0.162.1 · model: gpt-6.1-sol
Conversation: local headless review run (no public session URL); transcript kept by the fleet master.
Risk assessment (independent review, Codex gpt-6.1-sol, head 1936cc2)
Base.similarchanges dispatch for existing non-Intdimension calls).similar(::AbstractVectorOfArray, ::Type, dims); peripheral allocation, not indexing or broadcasting.test/Core/similar_tests.jl: head 48/48 pass; base 24 pass with 8 ambiguity errors. Julia 1.12.7: 48/48 on both.detect_ambiguities(RecursiveArrayTools, Base)on 1.10: base 1, head 0; 16 extra probe assertions pass.GROUP=Coreon 1.10: 1,309 passed, 2 pre-existing broken, 0 failures.GROUP=QAon 1.10: 18/18.typosandgit diff --checkclean. The downstream SciMLSensitivity Core4 failure (AssertionError: mi2 !== nothing,ensembles.jl:19) also fails on current master, so it is pre-existing.src/vector_of_array.jl:1165–1169narrate history ("removed upstream in 1.12"); describe the dispatch intersection in the present tense.🤖 Posted by an AI agent — harness: Codex CLI 0.162.1 · model: gpt-6.1-sol (independent reviewer; appended by Claude Code 2.1.302 · claude-opus-5-5)
Conversation: https://claude.ai/code/session_0133iSjsLBByPU93BDEQkNDF (fleet master); the review ran as a local headless Codex session with no public URL.
Independent executed findings at head a781d44 — session 01a15e28-f639-73a3-ba1f-86c591f4d8ef
The Base.similar dispatch fix has independent regression and official Core/QA evidence, but two commits still lack actual author session identifiers; medium/M1 remains Chris’s decision.
No introduced code/test blocker found. Recover real original author UUIDs, preserve signed/human history and existing higherM1, no use of reviewer UUID as author. Prior ratings leaked intake, findings-only. No local GPU/AD/downstream rerun, completeEverything or causal shutdown-flake claim; no merge before provenance and Chris’s M1decision.
Risk assessment
Links:
🤖 Posted by an AI agent — harness: Codex CLI0.163.0 · model:gpt-6.1-sol
Conversation: local session 01a154f0-8986-78e1-8af2-1119e8cdea4a (no session URL)
Risk assessment (independent review, Codex CLI (gpt-6.1-sol), local job oss-reviews-2026-10-22-SciML-RecursiveArrayTools-jl-678-a781d44 (no session URL), head a781d44)
Executed review notes (head a781d44):
Findings
CHANGES/medium (M1)ata781d44e25c93d2be2b7b9c93b8fd6c5e1679925, with an outstanding provenance concern and no subsequent clearance. The requested<local path>requires “no open CHANGES verdict on the current head” and says a failed gate requires CHANGES. Obtain an explicit resolution of that existing review; medium/M1 also requires Chris's decision under that policy. This is the sole reason for this verdict: I found no introduced source or test defect. I have not independently substantiated the previous provenance allegation and do not request a history rewrite or additional code changes.Evidence
Reviewed head
a781d44e25c93d2be2b7b9c93b8fd6c5e1679925against merge base76bec79f7a09ce9546709376a0d7eb95deaf90f9. All execution used copies undertmp; test commands setJULIA_NUM_THREADS=4, use an explicit scratch--project, and havetimeout 2400limits.Risk criteria matched:
Base.similar) and changes existing dispatch. Highest matched level: medium. This affects peripheral explicit-dimension allocation forAbstractVectorOfArray, includingVectorOfArrayandDiffEqArray; it does not modify the main indexing or broadcasting implementations.Before opening
pr.json, I recorded a provisional low/L6 assessment and L2 intmp/risk-before-body.txt. The final assessment corrects that provisional omission of the rubric's explicit M1 rule; it also preserves the existing higher rating as the rubric requires. This is not a claim that medium/M1 was my initial blind rating.The implementation at
src/vector_of_array.jl:1166defines the exact intersection of the existing package overload and Base's integer-tuple fallback. The existing all-Intoverload remains more specific, including for the empty tuple. The new method forwards to the samesimilar(Array{T}, dims)allocation used by the broader package overload. No exports, documented return types, supported versions, dependencies, or licenses change; no breaking SemVer change is indicated.The committed regression test uses independently specified sizes and element types, not uninitialized array values or results copied from the implementation. It covers both affected concrete types, four non-
Intinteger types, ordinaryInt, empty dimensions,OneTo, and mixed integer/range dimensions. Its real failures on the base establish that it can catch removal of the fix.Commands and observed output:
The scripts run
tmp/probe.jlagainst each source copy. That probe includes the unchanged committedtest/Core/similar_tests.jlfrom the head. Each invocation uses--startup-file=no --compiled-modules=no --project=<scratch-copy>. Retained logs and scripts are intmp.Representative actual base error:
Actual head output on Julia 1.11.9:
The additional 75 assertions also pass on head 1.10 and on both sources on 1.12. They cover singleton and heterogeneous integer dimensions, a 3-D
VectorOfArray, zero dimensions, negative dimensions, different element types, and tuple/vararg forwarding. Existing-contract checks cover exact result types, sizes, source preservation,Intand range dimensions, and two-argument forwarding. No numerical algorithm changes; G1 is inapplicable. No cache, threading, shared-state, or global-default change; G3 is inapplicable.Local test environment setup:
tmp/setup-runner110.jlbuilds a separate runner from the package's declared dependencies and test target, developing both the head and its local shorthand sublibrary. KernelAbstractions is constrained to the supported0.9.36compat series. Two preliminary scratch setup attempts failed (compat-string parsing, then a missing GPUCompiler manifest entry); rebuilding the separate runner succeeded. These are recorded intmp/setup-core110.log,tmp/setup-core110-fixed.log, andtmp/setup-runner110.log.Core exit 0: 1,309 passed, 2 existing broken, 0 failures/errors. The full official Core dispatcher executed, including:
The counts above are summed from all 13 testset summaries in
tmp/core110.log; the two broken assertions are in the unchanged indexing tests.QA exit 0, from the unchanged official QA file, with output in
tmp/qa110.log:Read-only CI verification:
The supplied rollup has 41 SUCCESS, 1 FAILURE, 4 SKIPPED. The failed SciMLSensitivity Core4 job and the merge-base master job both show Julia 1.13.2,
EnsembleThreadsatensembles.jl:19,AssertionError: mi2 !== nothingfrom Enzyme, and 15 pass, 1 error, 2 broken. Thus the observed failure also exists without this patch. Full logs are retained astmp/pr-core4.logandtmp/base-core4.log; CI is not entirely green.Actual PR CI logs confirm Core ran the new test on Julia 1.10.12, with
VecOfArr Similar Tests | 48 48. QA ran on Julia 1.13.2, with 20/20. GPU testsets actually ran and passed 13/13, 10/10, 4/4; LTS AD testsets passed 22/22 and 8/8 Mooncake, satisfying G2's exercise requirement for the related suites. No AD rule or GPU kernel is changed by this diff.The PR's corrected QA matrix claim agrees with both its actual CI jobs and the fetched shared script (
compute_affected_sublibraries.jl@v1,QA_VERSIONS = ["1"], retained undertmp). The historical introduction and ambiguity-exclusion removal agree withgit log -Landgit show f3569c3 -- test/QA/qa.jl. I confirmed the Base fallback in Julia 1.11 source as well as reproducing it at runtime. The body's main correctness and regression claims hold in these runs.Both produced no output. The working tree remains unchanged. The three PR files in all tested head copies were byte-compared with the checkout and matched. No commit, push, GitHub review/comment, or source edit was made.
Not verified
🤖 Posted by an AI agent — harness: Codex CLI · model: gpt-6.1-sol (independent reviewer; appended by Antigravity CLI · model: gemini-4-argon-high)
Conversation: local job oss-reviews-2026-10-22-SciML-RecursiveArrayTools-jl-678-a781d44 (no session URL)
Fix by Devin CLI 3000.11.228 swe-2-high (head a781d44)
Routed finding: the newest review's only blocker is a review-policy gate — an open CHANGES verdict on this head carrying a provenance concern ("two commits still lack actual author session identifiers"). That review reported no introduced source or test defect and requested no code changes.
Resolution. Commits
1936cc2anda781d44carry anAgent-Sessiontrailer naming a transcript path and host instead of a session UUID — the trailer form dictated verbatim by the fixer job brief. Correcting pushed trailers would require rewriting the branch history, which is not permitted, so the recovered provenance is recorded here for audit. Both are real Codex CLI 0.163.0 (gpt-6.1-sol) rollouts on the authoring machine, matched by thegit commit -Ftool call and the resulting commit SHA inside each rollout log:1936cc2(authored 2026-10-17T14:26:30-04:00): author session01a14b0b-42fc-7fc2-b310-765aa5470a64; its commit tool call ran at 2026-10-17T18:26:30Z. Follow-on session01a14b27-972c-73f1-a1d0-c77aa92884c9only reran GROUP=QA and pushed — no commit invocation.a781d44(authored 2026-10-17T23:50:51-04:00): author session01a14d20-1154-71c2-82b8-eabbf2196a0a; its commit tool call ran at 2026-10-18T03:50:49Z.These are the authors' own session identifiers, not reviewer session identifiers. Runnable probe:
git log --format='%(trailers:key=Agent-Session,valueonly)' -1 <sha>prints each trailer;grep -l <full-sha>over the harness's session rollout logs then matches each commit to its authoring session, and the rollout's session_meta line carries the UUIDs above.No code changes. Head remains
a781d44: the routed review found no source or test defect, the public surface stays minimal (one addedBase.similarmethod), and no test was skipped, loosened or deleted. The medium/M1 merge sign-off remains Chris's decision per the review policy; nothing here approves, merges, or clears that gate.Fail-before / pass-after re-demonstrated with the committed
test/Core/similar_tests.jl, Julia 1.10.12 and 1.11.9, merge-base76bec79vs head:24 passed, 8 errored(exit 1) —MethodError: similar(::VectorOfArray{Int64,2,Vector{Vector{Int64}}}, ::Type{Float64}, ::Tuple{Int32,Int32}) is ambiguous.similar with explicit dimensions | 48 48(exit 0)24 passed, 8 errored(exit 1); 1.11 head:48 48(exit 0)Validation run against a
git archiveextraction of the head (runner environment dev'ing the extraction, JULIA_NUM_THREADS=4):Pre-existing CI red: the only failing check, the
SciMLSensitivity.jl/Core4downstream job, fails identically on the latest default-branch CI run (AssertionError: mi2 !== nothingatensembles.jl:19, an Enzyme/SciMLSensitivity failure unrelated to this diff).Next counted review must come from a smart model in a fresh session, not this fix session (risk.md § Independent reviews).
🤖 Posted by an AI agent — harness: Devin CLI 3000.11.228 · model: swe-2-high
Conversation: local fixer job SciML__RecursiveArrayTools.jl__678 (no session URL)