You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Update the git hooks and the CI workflow to ResearchHarness 4e4b534 - #377
This PR installs the current generated git hooks and CI workflow of the ResearchHarness, commit 4e4b534. Two changes reach this repository.
The downgrade job resolves the root and test projects together
.github/workflows/CI.yml (ResearchHarness #157): the Downgrade job runs julia-downgrade-compat with projects: ., test. It resolves Project.toml and test/Project.toml into one manifest, at their lower bounds, and forcedeps checks the lower bounds of both.
Before, it resolved the root project alone, so each indirect dependency came in at its newest version, and the test run, which keeps that manifest, could not add a test-only dependency that caps it. Two forms of this failure appear across these packages: DocStringExtensions 0.10.2 against Documenter 1.19, and CEnum 1.0.0 against CairoMakie or Metal.
The job stays advisory, and the required checks do not change. A lower bound in test/Project.toml that cannot be reached now turns the job red, with forcedeps check failed: Some test dependencies did not resolve to their lower bounds. Such a bound is fixed on this branch before the merge.
The git hooks take the fixes of the hook review
.githooks/pre-commit.jl and .githooks/pre-push.jl (ResearchHarness #156):
A package name that is not a Julia identifier is refused with one line, before any code is built from it.
A Project.toml is a package only with both a name and a uuid; otherwise pre-commit runs no load test, and pre-push runs test/runtests.jl.
An interrupted push waits until the suite's process group is gone, and kills it at the grace time.
A failed load report starts at its first ERROR: line, and the error refusals print the location line.
The staged paths reach fatou lint after --, and a fatou failure with no finding line is reported as a failure of fatou; the lint stage stays advisory.
Files
The six files are byte-identical to the ResearchHarness at 4e4b534, as harness githooks --apply and harness workflows --apply install them: CI.yml, .githooks/pre-commit, pre-commit.jl, pre-push, pre-push.jl and test-layout.jl. Only pre-commit and pre-push are executable. Files that already match do not appear in the diff. No package source changes.
Lower bounds for the merged downgrade check
The merged resolution at Julia 1.12 reaches none of the old lower bounds below. Each bound is now the version it reaches, with the reason from the General registry:
Project.toml:
ChainRulesCore 1 → 1.25.1, KernelAbstractions 0.9 → 0.9.38, NeuralNetworkParameters 0.5 → 0.5.3: GeometricOptimizers 0.9.2 requires each of them.
NNlib "0.8, 0.9" → 0.9.30: the first release whose ForwardDiff weak-dependency bound admits ForwardDiff 1; 0.8.21, the last 0.8 release, requires GPUArraysCore 0.1, and AbstractNeuralNetworks 0.9.2 requires 0.2.
Zygote 0.7 → 0.7.5: the first 0.7 release that admits ForwardDiff 1.
ProgressMeter 1 → 1.5: the resolution reaches 1.0.0, and the tests then fail with MethodError: no method matching ProgressMeter.Progress(::Int64; enabled::Bool) in train!. 1.5.0 is the first release whose Progress takes enabled.
test/Project.toml:
GeometricIntegrators 0.18.2 → 0.18.6 and GeometricProblems "0.8, 0.9" → 0.9.1: the first releases that admit GeometricBase 0.15.
FiniteDifferences 0.12 → 0.12.31: the FiniteDifferences extension of DifferentiationInterface 0.7.21 requires it.
HDF5 "0.16, 0.17" → 0.17: AbstractNeuralNetworks 0.9.2, NeuralNetworkParameters 0.5.3 and GeometricSolutions 0.6.8 require it for their HDF5 extensions.
Documenter = "1" and JET = "0.10, 0.11, 0.12, 0.13" are new entries. Without an entry the merged resolution takes a test dependency's oldest release. GeometricProblems 0.9.1 requires Documenter 1, and 1.0 has doctest and DocMeta.setdocmeta!; JET 0.10.0 is the release the Julia 1.12 resolution reaches.
Aqua 0.8 → 0.8.18 (last commit). At 0.8.0 the Downgrade job of this branch failed two Aqua checks: the piracy check errored with FieldError: type Core.TypeName has no field `mt` , a field Julia 1.12 removed, and the persistent-tasks check failed, because before 0.8.17 it resolves its subprocess's environment anew and gets newer versions than the tests load. 0.8.14 fixes the first and 0.8.17 the second. 0.8.18 also passes where the manifest lists a weak dependency that is not installed, which made 0.8.17 fail in the Downgrade jobs of NonlinearIntegrators.jl and CollisionOperators.jl, with the same LogExpFunctions 0.3.29. On Julia 1.12.7 the downgrade resolve passes with Aqua 0.8.18, and test/quality/aqua.jl passes 17 of 17 at the floors. The rest of the suite at the floors was not run locally; the Downgrade job of the last push is that check.
The CHANGELOG.md[Unreleased] section records the same bounds. The pre and nightly failures (libLLVMExtra not defined in LLVM.API, through Metal and GPUCompiler) are upstream and out of scope here.
The downgrade job resolves the root and test projects together (projects: ., test), and the hooks take the fixes of the hook review.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Error messages now show concise headlines and more relevant context for formatting, project parsing, and package-loading failures.
Lint findings are reported more accurately, and interrupted test runs receive improved cleanup.
Load-failure reports are limited to the most relevant 20 lines.
Chores
Package checks now require valid project metadata and a valid package name.
Compatibility downgrade checks now include both the root project and its test project.
Updated compatibility requirements for the package and test environments.
The Git hooks update timeout handling, project validation, and error reporting. The CI downgrade job resolves the root and test projects together. Compatibility bounds and the Unreleased changelog reflect dependency versions associated with that resolution.
Changes: Git hook updates
Layer / File(s)
Summary
Pre-commit timeout and diagnostics .githooks/pre-commit.jl
The hook uses monotonic time for timeout cleanup and closes its SIGKILL timer. Fatou receives staged paths after -- and counts only output lines that match the finding format. Formatter errors use headlines with location details.
Project validation and load diagnostics .githooks/pre-commit.jl, .githooks/pre-push.jl
Both hooks require name and uuid for package detection and validate names as Julia identifiers. TOML parse errors use headlines. The pre-commit hook starts load-error output at ERROR: when present and displays at most 20 lines.
Pre-push interrupt handling .githooks/pre-push.jl
On interruption, the hook signals the process group, sends SIGKILL after the grace period, and checks whether group processes remain. It also handles interruption before process startup.
Dependency compatibility and CI downgrade
Layer / File(s)
Summary
Joint downgrade resolution and compatibility bounds .github/workflows/CI.yml, Project.toml, test/Project.toml, CHANGELOG.md
The downgrade action receives projects: ., test. Compatibility bounds change for the listed root and test dependencies, and the Unreleased changelog records the selected versions.
sequenceDiagram
participant Hook as pre-push hook
participant Suite as Suite process
participant Group as Process group
Hook->>Suite: Capture process and group ID
Hook->>Group: Forward SIGINT
Hook->>Group: Send SIGKILL after grace period
Hook->>Group: Check whether processes remain
JuliaGNI/GeometricMachineLearning.jl#373: Changes a dependency compatibility floor and discusses downgrade-job failures addressed by the updated joint resolution and dependency bounds.
Merge Risk: Minimal · up to 37b52
The hook and dependency updates have no established merge-blocking regression. A narrow diagnostic concern remains unverified; the existing timer race predates this change and its exposure is reduced.
Pre-merge checks: 5
Check name
Status
Explanation
Title check
The title clearly identifies the main changes: updating the generated git hooks and CI workflow to a specific ResearchHarness commit. It is concise and directly related to the changeset.
Description check
The description directly explains the git hook, CI workflow, dependency-bound, and changelog changes in the pull request.
Docstring Coverage
No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Linked Issues check
Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check
Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage
Explanation
No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 0 files. (4 skipped: 4 unsupported.)
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
The reason will be displayed to describe this comment to others. Learn more.
Minor · Stability & Availability · Quick win
Supported by static analysis
Script executed:
sed -n '45,100p' .githooks/pre-commit.jl
Repository: JuliaGNI/GeometricMachineLearning.jl
Length of output: 2619
Script executed:
set -o pipefail
printf'%s\n''--- relevant definitions and callers ---'
rg -n -F --glob '*.jl' -e 'function signal_group' -e 'signal_group(' -e 'BOXED' -e 'function run_boxed' .githooks
printf'%s\n''--- complete helper context ---'
sed -n '1,120p' .githooks/pre-commit.jl
printf'%s\n''--- git diff for the reviewed file ---'
git diff e4cd4aa9d5e6188991b2ce5caac8eed7a3039667 c8e1267994bb8ec0694ea5db30a8576a9f2b7616 -- .githooks/pre-commit.jl
Repository: JuliaGNI/GeometricMachineLearning.jl
Length of output: 15356
Web query:
Julia 1.12 Base.Timer close expired callback can run after close asyncevent.jl Timer(callback, delay) contract
Result:
Sources consulted:
- https://raw.githubusercontent.com/JuliaLang/julia/v1.12.0/base/asyncevent.jl
- Essentials · The Julia Language — https://docs.julialang.org/en/v1.12/base/base/
- julia/base/asyncevent.jl at master · JuliaLang/julia · GitHub — https://github.com/JuliaLang/julia/blob/master/base/asyncevent.jl
- CHAPTER 42. ESSENTIALS 682 — https://raw.githubusercontent.com/JuliaLang/docs.julialang.org/assets/julia-1.11.6.pdf
- …and 20 more
Synchronize the SIGKILL callback before the process-group ID can be reused.
close(killer[]) does not guarantee that an already-expired Timer(_ -> signal_group(group, Base.SIGKILL), 5) callback has finished. If the group exits as the timer expires, the pending callback can run after cleanup. If the operating system reuses group before that callback runs, kill(-group, SIGKILL) can terminate an unrelated process group.
Guard the callback with synchronized cleanup state, and wait for any in-flight callback before releasing the group ID.
The Downgrade job resolves Project.toml and test/Project.toml together at
Julia 1.12. ChainRulesCore, KernelAbstractions, NeuralNetworkParameters,
NNlib, Zygote and ProgressMeter in Project.toml, and GeometricIntegrators,
GeometricProblems, FiniteDifferences and HDF5 in test/Project.toml, take the
versions that resolution reaches; ProgressMeter 1.5 is the first release
whose Progress takes the `enabled` keyword that train! passes.
test/Project.toml gives Documenter and JET a [compat] entry.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After an interrupt, pre-push waits at most 10 s past its SIGKILL for the suite's process group, and further interrupts are deferred until it exits. The time box of pre-commit measures its grace on the monotonic clock. A parse error's refusal names the parser's reason, and a Project.toml with a name and no uuid says that no load test runs. These are the fixes of the review of this pull request.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At the floor 0.8 the Downgrade job resolved Aqua 0.8.0 and failed two
checks on Julia 1.12: the piracy check reads `Core.TypeName.mt`, which
Julia 1.12 removed, and the persistent-tasks check resolves its
subprocess's environment anew, so it gets newer versions than the tests
load. 0.8.14 fixes the first and 0.8.17 the second; 0.8.18 also passes
where the manifest lists a weak dependency that is not installed, which
made 0.8.17 fail elsewhere with the same LogExpFunctions 0.3.29. On
Julia 1.12.7 the downgrade resolve passes with Aqua 0.8.18, and
test/quality/aqua.jl passes 17 of 17 at the floors.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reason will be displayed to describe this comment to others. Learn more.
Additional comments: 1
.githooks/pre-commit.jl-139-142: 1
139-142: Minor · Potential issue · Low value
Unverified finding
We couldn't verify this from the code. It is shown for review, not as a verified issue.
headline searches all rendered lines after the first two for ── without checking that a match is an error marker. It may append text from the invalid source as the alleged parser reason.
The formatter reports a misleading parse-error headline instead of the available diagnostic.
This can occur when: A ParseError rendering contains ── in a displayed source line but has no later marker line containing that delimiter.
Review info
Run configuration
Source mode: Auto
Repository: Unavailable
Branch: Unavailable
File: No configuration file from this repository applied
Commit: Unavailable
Layers: Organization UI
Review profile: CHILL
Plan: Advanced
Run ID: 84dc3075-59a4-477d-a7e7-0c1292854e8e
Commits
Reviewing files that changed from the base of the PR and between ab20c11 and 37b5265.
Files selected for processing: 4
.githooks/pre-commit.jl
.githooks/pre-push.jl
CHANGELOG.md
test/Project.toml
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.
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
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.
This PR installs the current generated git hooks and CI workflow of the ResearchHarness, commit
4e4b534. Two changes reach this repository.The downgrade job resolves the root and test projects together
.github/workflows/CI.yml(ResearchHarness #157): theDowngradejob runsjulia-downgrade-compatwithprojects: ., test. It resolvesProject.tomlandtest/Project.tomlinto one manifest, at their lower bounds, andforcedepschecks the lower bounds of both.Before, it resolved the root project alone, so each indirect dependency came in at its newest version, and the test run, which keeps that manifest, could not add a test-only dependency that caps it. Two forms of this failure appear across these packages: DocStringExtensions 0.10.2 against Documenter 1.19, and CEnum 1.0.0 against CairoMakie or Metal.
The job stays advisory, and the required checks do not change. A lower bound in
test/Project.tomlthat cannot be reached now turns the job red, withforcedeps check failed: Some test dependencies did not resolve to their lower bounds. Such a bound is fixed on this branch before the merge.The git hooks take the fixes of the hook review
.githooks/pre-commit.jland.githooks/pre-push.jl(ResearchHarness #156):Project.tomlis a package only with both anameand auuid; otherwisepre-commitruns no load test, andpre-pushrunstest/runtests.jl.ERROR:line, and the error refusals print the location line.fatou lintafter--, and afatoufailure with no finding line is reported as a failure offatou; the lint stage stays advisory.Files
The six files are byte-identical to the ResearchHarness at
4e4b534, asharness githooks --applyandharness workflows --applyinstall them:CI.yml,.githooks/pre-commit,pre-commit.jl,pre-push,pre-push.jlandtest-layout.jl. Onlypre-commitandpre-pushare executable. Files that already match do not appear in the diff. No package source changes.Lower bounds for the merged downgrade check
The merged resolution at Julia 1.12 reaches none of the old lower bounds below. Each bound is now the version it reaches, with the reason from the General registry:
Project.toml:ChainRulesCore1 → 1.25.1,KernelAbstractions0.9 → 0.9.38,NeuralNetworkParameters0.5 → 0.5.3:GeometricOptimizers0.9.2 requires each of them.NNlib"0.8, 0.9" → 0.9.30: the first release whoseForwardDiffweak-dependency bound admitsForwardDiff1; 0.8.21, the last 0.8 release, requiresGPUArraysCore0.1, andAbstractNeuralNetworks0.9.2 requires 0.2.Zygote0.7 → 0.7.5: the first 0.7 release that admitsForwardDiff1.ProgressMeter1 → 1.5: the resolution reaches 1.0.0, and the tests then fail withMethodError: no method matching ProgressMeter.Progress(::Int64; enabled::Bool)intrain!. 1.5.0 is the first release whoseProgresstakesenabled.test/Project.toml:GeometricIntegrators0.18.2 → 0.18.6 andGeometricProblems"0.8, 0.9" → 0.9.1: the first releases that admitGeometricBase0.15.FiniteDifferences0.12 → 0.12.31: theFiniteDifferencesextension ofDifferentiationInterface0.7.21 requires it.HDF5"0.16, 0.17" → 0.17:AbstractNeuralNetworks0.9.2,NeuralNetworkParameters0.5.3 andGeometricSolutions0.6.8 require it for theirHDF5extensions.Documenter= "1" andJET= "0.10, 0.11, 0.12, 0.13" are new entries. Without an entry the merged resolution takes a test dependency's oldest release.GeometricProblems0.9.1 requiresDocumenter1, and 1.0 hasdoctestandDocMeta.setdocmeta!;JET0.10.0 is the release the Julia 1.12 resolution reaches.Aqua0.8 → 0.8.18 (last commit). At 0.8.0 theDowngradejob of this branch failed two Aqua checks: the piracy check errored withFieldError: type Core.TypeName has no field `mt`, a field Julia 1.12 removed, and the persistent-tasks check failed, because before 0.8.17 it resolves its subprocess's environment anew and gets newer versions than the tests load. 0.8.14 fixes the first and 0.8.17 the second. 0.8.18 also passes where the manifest lists a weak dependency that is not installed, which made 0.8.17 fail in theDowngradejobs of NonlinearIntegrators.jl and CollisionOperators.jl, with the sameLogExpFunctions0.3.29. On Julia 1.12.7 the downgrade resolve passes with Aqua 0.8.18, andtest/quality/aqua.jlpasses 17 of 17 at the floors. The rest of the suite at the floors was not run locally; theDowngradejob of the last push is that check.The
CHANGELOG.md[Unreleased]section records the same bounds. Thepreandnightlyfailures (libLLVMExtranot defined inLLVM.API, through Metal and GPUCompiler) are upstream and out of scope here.🤖 Generated with Claude Code