Skip to content

Impurity annotation#83

Merged
mernst merged 76 commits intorandoop:mainfrom
mernst:impurity-annotation
Feb 21, 2026
Merged

Impurity annotation#83
mernst merged 76 commits intorandoop:mainfrom
mernst:impurity-annotation

Conversation

@mernst
Copy link
Member

@mernst mernst commented Nov 13, 2025

@varuniy @776styjsu
Should this pull request be merged?

776styjsu and others added 30 commits July 30, 2025 07:35
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e216c95 and 50215bf.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .github/workflows/make.yml (1 hunks)
  • Makefile (2 hunks)
  • pyproject.toml (1 hunks)
  • scripts/experiment-scripts/generate-grt-figures.py (1 hunks)
🧰 Additional context used
🪛 Ruff (0.14.7)
scripts/experiment-scripts/generate-grt-figures.py

31-31: Redefinition of unused matplotlib.figure from line 29

Remove definition: matplotlib.figure

(F811)

🔇 Additional comments (5)
Makefile (1)

11-24: Good integration of build dependency changes.

The .plume-scripts target correctly establishes a prerequisite repository, and the new style-check: markdownlint-check dependency (line 24) properly chains the markdown linting step into the style-check flow. The shell script globs in lines 54–55 correctly exclude the new .plume-scripts directory to avoid linting its contents.

.github/workflows/make.yml (1)

14-24: Clean workflow restructuring for uv-based build system.

The multi-line formatting improves clarity, and the addition of the Python uv installer (lines 20–21) properly supports the new uv_build backend introduced in pyproject.toml. The quiet flags on apt commands reduce unnecessary CI log output. Ordering and sequencing of steps is logical.

pyproject.toml (3)

1-6: Build-system configuration is properly scoped.

The new [build-system] section correctly specifies uv_build as the backend with an appropriate version constraint (>= 0.9.11, < 0.10.0), preventing potential breaking changes from future minor/major versions.


14-14: PyYAML dependency addition aligns with new build scripts.

The new pyyaml >= 6.0.3 dependency correctly supports the YAML-based configuration introduced by the build scripts (subject-programs/build-info.yaml per the PR summary).


1-16: No action needed. Python 3.14 was released on October 7, 2025, and is the current stable version as of December 2025. The requires-python = ">=3.14" requirement in pyproject.toml is valid and intentional.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
pyproject.toml (1)

1-4: Verify uv_build version constraint and consider the existing whitespace issue.

The version constraint for uv_build is quite restrictive (>= 0.9.11, <0.10.0). Please verify that this version range is appropriate and that version 0.9.11 exists and is stable.

Additionally, the past review comment flagged trailing whitespace at line 4 (the blank line after build-backend). Consider addressing that issue if it hasn't been resolved.

Please search for the latest uv_build documentation to verify the version:

What is the latest stable version of uv_build Python package?
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 50215bf and 02b1993.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • .python-version (1 hunks)
  • pyproject.toml (1 hunks)
🔇 Additional comments (4)
pyproject.toml (3)

10-10: Python version requirement corrected appropriately.

The change from >=3.14 to >=3.10 is appropriate, as Python 3.14 is not yet available. This aligns with the .python-version file change. However, please ensure that all dependencies are compatible with Python 3.10 (see comment on .python-version).


14-14: LGTM! PyYAML dependency aligns with PR objectives.

The addition of pyyaml>=6.0.3 is appropriate given that the PR introduces YAML-based build manifest for project configurations. The version compatibility with Python 3.10 will be verified as part of the overall dependency check.


6-6: Verify that the project name change doesn't break existing references.

The project name has been simplified from "grt-testing-branch-main" to "grt-testing". Ensure this change doesn't affect imports, package references, build configurations, or CI/CD scripts that depend on the old name. Check pyproject.toml's effect on any: setup.py or setup.cfg if present, GitHub Actions workflows, documentation, or version constraints in downstream dependencies.

.python-version (1)

1-1: The review comment is based on incorrect dependency versions that do not exist.

The cited dependency versions (matplotlib>=3.10.7, pandas>=2.3.3, etc.) do not appear to exist on PyPI. matplotlib's latest version is in the 3.8-3.9 range, and pandas 2.x is in the 2.0-2.2 range. Verify the actual dependencies in pyproject.toml before assessing Python 3.10 compatibility. If real dependencies are specified, their actual requires_python constraints should be checked against Python 3.10 to ensure compatibility.

Likely an incorrect or invalid review comment.

dev = [
"ty>=0.0.1a31",
]
# dynamic = ["version"]
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Consider removing or documenting the commented line.

The commented # dynamic = ["version"] line suggests future work with dynamic versioning. If this is planned, consider adding a TODO comment explaining the intent. Otherwise, consider removing it to reduce clutter.

🤖 Prompt for AI Agents
In pyproject.toml around line 22, there is a commented line "# dynamic =
[\"version\"]"; either remove this commented line if it's not needed to reduce
clutter, or replace it with a short TODO comment documenting intent (e.g., note
that dynamic versioning via setuptools_scm or similar is planned and link to
issue/PR) so future readers know whether it's intentional work-in-progress.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
Makefile (1)

11-13: Shallow clone recommended for bandwidth optimization.

Based on the previous review feedback, consider using a shallow clone (--depth 1) to reduce the fetch size:

 .plume-scripts:
-	git clone -q https://github.com/plume-lib/plume-scripts.git .plume-scripts
+	git clone -q --depth 1 https://github.com/plume-lib/plume-scripts.git .plume-scripts

This aligns with the optimization suggestion from the prior review.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 02b1993 and c7b8867.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (3)
  • .github/workflows/make.yml (1 hunks)
  • .gitignore (2 hunks)
  • Makefile (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-10-14T03:30:11.765Z
Learnt from: varuniy
Repo: randoop/grt-testing PR: 64
File: scripts/defects4j-randoop.sh:332-335
Timestamp: 2025-10-14T03:30:11.765Z
Learning: In defects4j-randoop.sh, the script intentionally removes RegressionTest.java and ErrorTest.java (the driver/suite files) after test generation because run_bug_detection.pl does not expect these files. The numbered test files (RegressionTest0.java, RegressionTest1.java, ErrorTest0.java, etc.) remain in TEST_DIR and are packaged for defect detection.

Applied to files:

  • .gitignore
🔇 Additional comments (4)
.gitignore (3)

19-25: ✓ Subject-programs directory and file patterns are well-structured.

The new ignore patterns correctly use trailing slashes for directories (src-grt/, src-upstream/, etc.) and no slash for files (files.diff), following the existing style conventions in the file. These align well with the PR's subject-programs reorganization.


34-34: ✓ Comment typo fixed.

The documentation comment was corrected from "runnin" to "running", improving clarity.


38-38: .pymarkdown entry is appropriate.

The new .pymarkdown entry correctly ignores markdown linter output, keeping generated artifacts out of version control.

Makefile (1)

11-20: Redundant clone logic: explicit target and fallback conditional are both cloning.

Lines 11–13 define an explicit .plume-scripts target that clones the repository, while lines 17–19 include a fallback conditional clone that executes at include-time if the directory doesn't exist. Both mechanisms serve the same purpose and will clone the repository if it's missing.

Consider consolidating to a single approach:

  • Option 1 (preferred): Keep only the explicit target (lines 11–13) and remove the fallback conditional (lines 17–19). Rely on the target's idempotency and the conditional include guard.
  • Option 2: Keep only the fallback conditional (lines 17–19) if immediate availability at include-time is critical, and remove the explicit target (lines 11–13) to avoid confusion.
 .plume-scripts:
 	git clone -q https://github.com/plume-lib/plume-scripts.git .plume-scripts
 
 
 # Code style; defines `style-check` and `style-fix`.
 CODE_STYLE_EXCLUSIONS_USER := --exclude-dir subject-programs
-ifeq (,$(wildcard .plume-scripts))
-dummy != git clone -q https://github.com/plume-lib/plume-scripts.git .plume-scripts
-endif
 include .plume-scripts/code-style.mak

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
Makefile (1)

11-13: Apply shallow clone to reduce bandwidth.

The past review suggested using --depth 1 to make the clone lightweight, but it was not applied. This is still unaddressed.

 .plume-scripts:
-	git clone -q https://github.com/plume-lib/plume-scripts.git .plume-scripts
+	git clone -q --depth 1 https://github.com/plume-lib/plume-scripts.git .plume-scripts
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c7b8867 and 1586c5c.

📒 Files selected for processing (1)
  • Makefile (1 hunks)
🔇 Additional comments (1)
Makefile (1)

16-16: Verify CODE_STYLE_EXCLUSIONS_USER variable usage.

The new variable CODE_STYLE_EXCLUSIONS_USER := --exclude-dir subject-programs is defined but its usage should be confirmed in the included .plume-scripts/code-style.mak file to ensure it's correctly integrated into the style-check and style-fix targets.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (2)
.github/workflows/make.yml (1)

22-23: Remove the duplicate uv install step (already installed via astral-sh/setup-uv).

This is redundant and may introduce PATH/version inconsistencies vs the action-managed install.

pyproject.toml (1)

23-23: Either remove or document the intent of # dynamic = ["version"].

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1586c5c and fb4dce7.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .github/workflows/make.yml (1 hunks)
  • .gitignore (2 hunks)
  • pyproject.toml (3 hunks)
  • scripts/mutation-randoop.sh (5 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-10-14T03:30:11.765Z
Learnt from: varuniy
Repo: randoop/grt-testing PR: 64
File: scripts/defects4j-randoop.sh:332-335
Timestamp: 2025-10-14T03:30:11.765Z
Learning: In defects4j-randoop.sh, the script intentionally removes RegressionTest.java and ErrorTest.java (the driver/suite files) after test generation because run_bug_detection.pl does not expect these files. The numbered test files (RegressionTest0.java, RegressionTest1.java, ErrorTest0.java, etc.) remain in TEST_DIR and are packaged for defect detection.

Applied to files:

  • scripts/mutation-randoop.sh
  • .gitignore
🔇 Additional comments (6)
.github/workflows/make.yml (1)

25-26: Style-check command change is fine.

.gitignore (2)

19-25: New ignore patterns match the subject-programs source layout.


34-35: Comment typo fix is fine.

scripts/mutation-randoop.sh (2)

465-471: Adding checker-qual.jar to the Randoop classpath is reasonable for impurity annotation.


367-368: Jaxen jar path update looks OK; ensure the new jar is actually present in subject-programs/jars.

If that jar is produced/downloaded elsewhere now, this branch will fail at runtime.

#!/bin/bash
# quick repo check (adjust if paths differ)
ls -la subject-programs/jars | sed -n '1,200p'
pyproject.toml (1)

1-3: No action needed. The uv_build >= 0.9.11, <0.10.0 backend configuration is correct and uses a valid stable version released in late 2025. The backend name and version range will not break packaging or CI.

Likely an incorrect or invalid review comment.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/mutation-evosuite.sh (1)

171-176: ⚠️ Potential issue | 🟠 Major

Fail fast with a clear error when the subject JAR is missing.
Line 175 uses realpath under set -e; if the JAR isn’t in the new subject-programs/jars/ location, the script exits with a cryptic error. Use require_file before realpath so failures are actionable.

Proposed fix
-# Path to the jar file of the subject program.
-SRC_JAR=$(realpath "$SCRIPT_DIR/../subject-programs/jars/$SUBJECT_PROGRAM.jar")
+# Path to the jar file of the subject program.
+RAW_SRC_JAR="$SCRIPT_DIR/../subject-programs/jars/$SUBJECT_PROGRAM.jar"
+require_file "$RAW_SRC_JAR"
+SRC_JAR=$(realpath "$RAW_SRC_JAR")

@varuniy
Copy link
Collaborator

varuniy commented Feb 21, 2026

@mernst Can this be merged?

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In @.github/workflows/make.yml:
- Around line 22-23: Remove the redundant curl-based "Install Python `uv`" step
(the run: curl -LsSf https://astral.sh/uv/install.sh | sh) since the setup is
already done by the astral-sh/setup-uv@v7 action; delete that run step (the step
titled "Install Python `uv`") to avoid duplicate installation and eliminate the
supply-chain risk of piping an unversioned remote script into sh.
- Around line 22-23: Remove the redundant curl-based installation step that runs
"curl -LsSf https://astral.sh/uv/install.sh | sh" (the duplicate "Install Python
`uv`" step) because the action "astral-sh/setup-uv@v7" already installs and
configures uv; delete the step that invokes the remote install script to avoid
wasted CI time and supply-chain risk and rely on the earlier
"astral-sh/setup-uv@v7" action to provide uv on PATH.

In `@scripts/mutation-randoop.sh`:
- Around line 232-234: The else branch sets SRC_JAR via realpath without
verifying the file exists, causing cryptic failures later; update the else
branch that assigns SRC_JAR to first check that
"$SCRIPT_DIR/../subject-programs/jars/$SUBJECT_PROGRAM.jar" exists (using a file
test like [ -f ... ]), emit a clear error and exit if missing, and only then set
SRC_JAR=$(realpath "...") so subsequent uses (e.g., jar -tf on SRC_JAR) are
safe; reference the SRC_JAR variable, SCRIPT_DIR and SUBJECT_PROGRAM in your
change.
- Around line 60-65: The script currently calls realpath when assigning
CHECKER_QUAL_JAR (and other JAR vars), which on macOS can exit non-zero before
require_file runs; change the pattern to first assign raw, non-resolved paths
(e.g., CHECKER_QUAL_JAR="${SCRIPT_DIR}/build/..."), then call
require_file/checks (the existing require_file function) to validate existence,
and only after successful validation canonicalize the paths with realpath (or
realpath -e if desired); update the assignments for CHECKER_QUAL_JAR (and the
other JAR vars using realpath) and move the realpath resolution to after the
require_file calls so the script fails with a helpful error message instead of
aborting early.

@mernst mernst merged commit 2601591 into randoop:main Feb 21, 2026
2 checks passed
@mernst mernst deleted the impurity-annotation branch February 21, 2026 12:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants