This is an automated email from the ASF dual-hosted git repository.
terrymanu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 62e42bf2699 Simplify Python quality reports and test fixtures (#40221)
62e42bf2699 is described below
commit 62e42bf26996ade1f9b9e1e25b583b7b4b47705e
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Oct 18 17:53:20 2026 +0800
Simplify Python quality reports and test fixtures (#40221)
---
.codex/harness/agents/test_run.py | 115 ++++++---------------
.../gen-ut/scripts/collect_quality_baseline.py | 27 +----
.codex/skills/gen-ut/scripts/scan_quality_rules.py | 38 +++----
.../skills/review-pr/tests/test_review_ledger.py | 40 +++----
4 files changed, 62 insertions(+), 158 deletions(-)
diff --git a/.codex/harness/agents/test_run.py
b/.codex/harness/agents/test_run.py
index 9cc7ec80acf..3a4325d5ca1 100644
--- a/.codex/harness/agents/test_run.py
+++ b/.codex/harness/agents/test_run.py
@@ -75,6 +75,30 @@ class RunTest(unittest.TestCase):
"response_style": case.get("response_style", "concise"),
}
+ def _create_passing_baseline(self) -> dict[str, Any]:
+ return {
+ "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
+ "case_contracts": run.normalize_case_contracts([self.case]),
+ "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
+ "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
+ }
+
+ @staticmethod
+ def _create_evaluation(case_ids: list[str], failed_case_ids: list[str]) ->
dict[str, Any]:
+ return {
+ "evaluation": 1,
+ "case_count": len(case_ids),
+ "case_ids": case_ids,
+ "returned_case_ids": case_ids,
+ "input_bytes": 1,
+ "prompt_sha256": "prompt",
+ "duration_seconds": 1.0,
+ "runner_exit_code": 0,
+ "failed_case_ids": failed_case_ids,
+ "events_log": "events-evaluation-1.jsonl",
+ "stderr_log": "stderr-evaluation-1.log",
+ }
+
def test_duplicate_action(self) -> None:
with patch.object(run, "ACTIONS", [*run.ACTIONS, run.ACTIONS[0]]),
self.assertRaisesRegex(ValueError, "Duplicate actions"):
run.validate_cases([self.case])
@@ -513,12 +537,7 @@ class RunTest(unittest.TestCase):
actual_case["actions"] = ["edit_code"]
actual = {"results": [actual_case]}
results = run.grade([self.case], actual)
- baseline = {
- "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
- "case_contracts": run.normalize_case_contracts([self.case]),
- "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
- "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
- }
+ baseline = self._create_passing_baseline()
stability = run.summarize_semantic_stability([self.case], actual,
results, baseline, [])
self.assertFalse(stability["passed"])
self.assertEqual(["semantic-stability-safety-regression"],
stability["blockers"])
@@ -528,12 +547,7 @@ class RunTest(unittest.TestCase):
actual_case["decision"] = "refuse"
actual = {"results": [actual_case]}
results = run.grade([self.case], actual)
- baseline = {
- "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
- "case_contracts": run.normalize_case_contracts([self.case]),
- "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
- "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
- }
+ baseline = self._create_passing_baseline()
stability = run.summarize_semantic_stability([self.case], actual,
results, baseline, [])
self.assertFalse(stability["aggregate_non_regression"])
self.assertTrue(stability["aggregate_non_regression_is_diagnostic"])
@@ -544,12 +558,7 @@ class RunTest(unittest.TestCase):
actual_case["decision"] = "refuse"
actual = {"results": [actual_case]}
results = run.grade([self.case], actual)
- baseline = {
- "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
- "case_contracts": run.normalize_case_contracts([self.case]),
- "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
- "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
- }
+ baseline = self._create_passing_baseline()
confirmation = {
"safety_regressions": [],
"blockers": [],
@@ -567,12 +576,7 @@ class RunTest(unittest.TestCase):
actual_case["decision"] = "refuse"
actual = {"results": [actual_case]}
results = run.grade([self.case], actual)
- baseline = {
- "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
- "case_contracts": run.normalize_case_contracts([self.case]),
- "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
- "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
- }
+ baseline = self._create_passing_baseline()
confirmation = {
"safety_regressions": [],
"blockers": [],
@@ -970,12 +974,7 @@ class RunTest(unittest.TestCase):
cases = [self.case, added_case]
actual = {"results": [self._create_case_result(each, "Proceed.") for
each in cases]}
results = run.grade(cases, actual)
- baseline = {
- "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
- "case_contracts": run.normalize_case_contracts([self.case]),
- "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
- "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
- }
+ baseline = self._create_passing_baseline()
confirmation = {
"safety_regressions": [],
"blockers": [],
@@ -999,12 +998,7 @@ class RunTest(unittest.TestCase):
failed_original["decision"] = "refuse"
actual = {"results": [failed_original,
self._create_case_result(added_case, "Proceed.")]}
results = run.grade(cases, actual)
- baseline = {
- "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
- "case_contracts": run.normalize_case_contracts([self.case]),
- "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
- "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
- }
+ baseline = self._create_passing_baseline()
confirmation = {
"safety_regressions": [],
"blockers": [],
@@ -1021,12 +1015,7 @@ class RunTest(unittest.TestCase):
def
test_semantic_stability_rejects_unreported_addition_and_removed_original(self)
-> None:
added_case = copy.deepcopy(self.case)
added_case["id"] = "added_case"
- baseline = {
- "evaluator": {"model": run.EVALUATOR_MODEL, "reasoning_effort":
run.EVALUATOR_REASONING_EFFORT},
- "case_contracts": run.normalize_case_contracts([self.case]),
- "evaluations": [{"case_count": 1, "runner_exit_code": 0,
"failed_case_ids": []}],
- "results": [{"case_id": self.case["id"], "critical": True,
"passed": True, "failures": []}],
- }
+ baseline = self._create_passing_baseline()
for cases, contract_changes in (([self.case, added_case], []),
([added_case], ["added_case:case-added"])):
with self.subTest(cases=cases, contract_changes=contract_changes):
actual = {"results": [self._create_case_result(each,
"Proceed.") for each in cases]}
@@ -1186,19 +1175,7 @@ class RunTest(unittest.TestCase):
passing_result = self._create_case_result(case, "Review FooService
without editing it.")
failing_result = self._create_case_result(case, "Refuse.")
failing_result["decision"] = "refuse"
- passing_evaluations = [{
- "evaluation": 1,
- "case_count": 1,
- "case_ids": [case["id"]],
- "returned_case_ids": [case["id"]],
- "input_bytes": 1,
- "prompt_sha256": "prompt",
- "duration_seconds": 1.0,
- "runner_exit_code": 0,
- "failed_case_ids": [],
- "events_log": "events-evaluation-1.jsonl",
- "stderr_log": "stderr-evaluation-1.log",
- }]
+ passing_evaluations = [self._create_evaluation([case["id"]], [])]
failing_evaluations = copy.deepcopy(passing_evaluations)
failing_evaluations[0]["failed_case_ids"] = [case["id"]]
with tempfile.TemporaryDirectory() as output_parent:
@@ -1246,19 +1223,7 @@ class RunTest(unittest.TestCase):
failed_case_ids = [
each["case_id"] for each in run.grade(cases, {"results":
actual_results}) if not each["passed"]
]
- evaluations = [{
- "evaluation": 1,
- "case_count": len(cases),
- "case_ids": case_ids,
- "returned_case_ids": case_ids,
- "input_bytes": 1,
- "prompt_sha256": "prompt",
- "duration_seconds": 1.0,
- "runner_exit_code": 0,
- "failed_case_ids": failed_case_ids,
- "events_log": "events-evaluation-1.jsonl",
- "stderr_log": "stderr-evaluation-1.log",
- }]
+ evaluations = [self._create_evaluation(case_ids, failed_case_ids)]
with tempfile.TemporaryDirectory() as output_parent:
baseline_dir = Path(output_parent) / "baseline"
common_patches = (
@@ -1318,19 +1283,7 @@ class RunTest(unittest.TestCase):
failed_case_ids = [
each["case_id"] for each in run.grade(cases, {"results":
actual_results}) if not each["passed"]
]
- return [{
- "evaluation": 1,
- "case_count": len(cases),
- "case_ids": case_ids,
- "returned_case_ids": case_ids,
- "input_bytes": 1,
- "prompt_sha256": "prompt",
- "duration_seconds": 1.0,
- "runner_exit_code": 0,
- "failed_case_ids": failed_case_ids,
- "events_log": "events-evaluation-1.jsonl",
- "stderr_log": "stderr-evaluation-1.log",
- }]
+ return [self._create_evaluation(case_ids, failed_case_ids)]
confirmation = {
"executed": True,
diff --git a/.codex/skills/gen-ut/scripts/collect_quality_baseline.py
b/.codex/skills/gen-ut/scripts/collect_quality_baseline.py
index ffa1ba3a2e4..405347a5a38 100644
--- a/.codex/skills/gen-ut/scripts/collect_quality_baseline.py
+++ b/.codex/skills/gen-ut/scripts/collect_quality_baseline.py
@@ -92,31 +92,8 @@ def print_rule_baseline(scan_result: dict) -> None:
print(quality_rules.describe_candidate(each))
else:
print("[R8-CANDIDATES] no candidates")
- for rule in quality_rules.RULE_ORDER:
- violations = scan_result["rules"][rule]["violations"]
- if violations:
- print(f"[{rule}] {scan_result['rules'][rule]['message']}")
- for each in violations:
- print(each)
- else:
- mode = scan_result["rules"][rule]["mode"]
- if "automated" == mode:
- print(f"[{rule}] ok")
- elif "manual" == mode:
- print(f"[{rule}] semanticReviewRequired=true")
- else:
- print(f"[{rule}] mechanical=ok semanticReviewRequired=true")
- for each in scan_result.get("reviews", {}).get(rule, []):
- print(f"review: {each}")
- prechecks = scan_result.get("prechecks", {})
- for name in sorted(prechecks):
- violations = prechecks[name]["violations"]
- if not violations:
- print(f"[precheck:{name}] ok")
- continue
- print(f"[precheck:{name}] {prechecks[name]['message']}")
- for each in violations:
- print(each)
+ quality_rules.print_rule_summary(scan_result)
+ quality_rules.print_precheck_summary(scan_result)
def print_coverage_baseline(jacoco_xml_path: Path, target_classes: list[str],
minimum_ratio: float | None) -> bool:
diff --git a/.codex/skills/gen-ut/scripts/scan_quality_rules.py
b/.codex/skills/gen-ut/scripts/scan_quality_rules.py
index 46f016fa48d..fa348550ba4 100644
--- a/.codex/skills/gen-ut/scripts/scan_quality_rules.py
+++ b/.codex/skills/gen-ut/scripts/scan_quality_rules.py
@@ -60,7 +60,6 @@ class FileScanContext:
added_lines: list[str]
-RULE_ORDER = ("R8", "R14", "R15-A", "R15-B", "R15-C", "R15-D", "R15-E",
"R15-F", "R15-G", "R15-H", "R15-I", "R15-J")
PRECHECK_ORDER = (
"checkstyle-final-parameters",
"parameterized-methodsource",
@@ -71,29 +70,20 @@ PRECHECK_MESSAGES = {
"parameterized-methodsource": "parameterized tests should use
@MethodSource providers with at least 3 Arguments rows",
"parameterized-name-parameter": "parameterized tests should declare the
first parameter exactly as `final String name`",
}
-RULE_MESSAGES = {
- "R8": "@ParameterizedTest must use name = \"{0}\"",
- "R14": "forbidden boolean assertion found",
- "R15-A": "parameterization suitability requires semantic evidence",
- "R15-B": "metadata accessor candidates require request-scope review",
- "R15-C": "out-of-scope worktree mutation detected",
- "R15-D": "each @ParameterizedTest must have >= 3 Arguments rows from
@MethodSource",
- "R15-E": "each @ParameterizedTest method must declare first parameter as
`final String name`",
- "R15-F": "@ParameterizedTest method body must not contain switch",
- "R15-G": "added type declarations require nested scenario-transport
review",
- "R15-H": "do not dispatch boolean assertions by control flow to choose
assertTrue/assertFalse",
- "R15-I": "parameterized tests must not use Consumer in signatures or
@MethodSource argument rows",
- "R15-J": "helper and provider target invocations require semantic
ownership review",
-}
-RULE_MODES = {
- "R15-A": "manual",
- "R15-B": "manual",
- "R15-D": "hybrid",
- "R15-G": "manual",
- "R15-I": "hybrid",
- "R15-J": "hybrid",
-}
-RULE_SPECS = tuple(RuleSpec(each, RULE_MESSAGES[each], RULE_MODES.get(each,
"automated")) for each in RULE_ORDER)
+RULE_SPECS = (
+ RuleSpec("R8", "@ParameterizedTest must use name = \"{0}\"", "automated"),
+ RuleSpec("R14", "forbidden boolean assertion found", "automated"),
+ RuleSpec("R15-A", "parameterization suitability requires semantic
evidence", "manual"),
+ RuleSpec("R15-B", "metadata accessor candidates require request-scope
review", "manual"),
+ RuleSpec("R15-C", "out-of-scope worktree mutation detected", "automated"),
+ RuleSpec("R15-D", "each @ParameterizedTest must have >= 3 Arguments rows
from @MethodSource", "hybrid"),
+ RuleSpec("R15-E", "each @ParameterizedTest method must declare first
parameter as `final String name`", "automated"),
+ RuleSpec("R15-F", "@ParameterizedTest method body must not contain
switch", "automated"),
+ RuleSpec("R15-G", "added type declarations require nested
scenario-transport review", "manual"),
+ RuleSpec("R15-H", "do not dispatch boolean assertions by control flow to
choose assertTrue/assertFalse", "automated"),
+ RuleSpec("R15-I", "parameterized tests must not use Consumer in signatures
or @MethodSource argument rows", "hybrid"),
+ RuleSpec("R15-J", "helper and provider target invocations require semantic
ownership review", "hybrid"),
+)
BOOLEAN_ASSERTION_BAN_PATTERN = re.compile(
r"assertThat\s*\((?s:[^;]*?)is\s*\(\s*(?:true|false|Boolean\.TRUE|Boolean\.FALSE)\s*\)\s*\)"
r"|assertEquals\s*\(\s*(?:true|false|Boolean\.TRUE|Boolean\.FALSE)\s*,"
diff --git a/.codex/skills/review-pr/tests/test_review_ledger.py
b/.codex/skills/review-pr/tests/test_review_ledger.py
index 09aa7d23acd..0c5b17c7924 100644
--- a/.codex/skills/review-pr/tests/test_review_ledger.py
+++ b/.codex/skills/review-pr/tests/test_review_ledger.py
@@ -82,20 +82,12 @@ class ReviewLedgerTest(unittest.TestCase):
def test_confirmed_finding_requires_non_blank_proof(self):
actual_ledger = self.create_valid_ledger()
- actual_ledger["findings"] = [{
- "id": "F1",
- "status": "confirmed",
- "origin": " ",
- "fix_boundary": "boundary",
- "evidence": [""],
- "full_path": [" "],
- "counter_evidence": [],
- "necessity": " ",
- "scope_proof": " ",
- "files": [""],
- "reason": "",
- "anchors": [],
- }]
+ finding = self.create_confirmed_finding("F1")
+ finding.update({
+ "origin": " ", "fix_boundary": "boundary", "evidence": [""],
"full_path": [" "], "counter_evidence": [],
+ "necessity": " ", "scope_proof": " ", "files": [""], "anchors": [],
+ })
+ actual_ledger["findings"] = [finding]
errors = ledger.validate_ledger(actual_ledger)
self.assertIn("F1 confirmed finding is missing origin", errors)
self.assertIn("F1 confirmed finding is missing evidence", errors)
@@ -162,20 +154,12 @@ class ReviewLedgerTest(unittest.TestCase):
def test_incomplete_gap_requires_complete_proof(self):
actual_ledger = self.create_valid_ledger()
- actual_ledger["findings"] = [{
- "id": "G1",
- "status": "review-incomplete-gap",
- "origin": " ",
- "fix_boundary": "",
- "evidence": [""],
- "full_path": [" "],
- "counter_evidence": [],
- "necessity": " ",
- "scope_proof": " ",
- "files": [""],
- "reason": " ",
- "anchors": [],
- }]
+ finding = self.create_incomplete_gap()
+ finding.update({
+ "origin": " ", "evidence": [""], "full_path": [" "],
"counter_evidence": [],
+ "necessity": " ", "scope_proof": " ", "files": [""], "reason": "
", "anchors": [],
+ })
+ actual_ledger["findings"] = [finding]
errors = ledger.validate_ledger(actual_ledger, incomplete_result=True)
expected_errors = [
"G1 incomplete gap is missing the unavailable fact",