Skip to content

Commit 9cdf358

Browse files
committed
fix: align default quality gates and validator signal semantics
Set wrong-solution-kill gate default to opt-in and treat skipped validator checks as not executed so verification signals and pack gating stay consistent with intended workflow behavior. Made-with: Cursor
1 parent 7d1b13d commit 9cdf358

5 files changed

Lines changed: 10 additions & 8 deletions

File tree

scripts/workflow_guard.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"require_validation_passed": True,
1616
"require_tests_verified": True,
1717
"require_limit_semantics": True,
18-
"require_wrong_solution_kill": True,
18+
"require_wrong_solution_kill": False,
1919
"require_validator_check": True,
2020
"min_limit_case_ratio": 0.5,
2121
}

src/autocode_mcp/templates/autocode.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"require_validation_passed": true,
1515
"require_tests_verified": true,
1616
"require_limit_semantics": true,
17-
"require_wrong_solution_kill": true,
17+
"require_wrong_solution_kill": false,
1818
"require_validator_check": true,
1919
"min_limit_case_ratio": 0.5
2020
},

src/autocode_mcp/tools/test_verify.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ def _build_quality_signals(self, verify_types: list[str], results: dict) -> dict
245245
for verify_name, signal_name in signal_map.items():
246246
result = results.get(verify_name)
247247
executed = verify_name in verify_set and isinstance(result, dict)
248+
if executed and bool(result.get("skipped", False)):
249+
executed = False
248250
signals[signal_name] = {
249251
"executed": executed,
250252
"passed": bool(result.get("passed")) if executed else False,

src/autocode_mcp/workflow/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class QualityGates(BaseModel):
2727
require_validation_passed: bool = True
2828
require_tests_verified: bool = True
2929
require_limit_semantics: bool = True
30-
require_wrong_solution_kill: bool = True
30+
require_wrong_solution_kill: bool = False
3131
require_validator_check: bool = True
3232
min_limit_case_ratio: float = Field(default=0.5, ge=0, le=1)
3333

tests/test_workflow_guard.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ def test_pre_tool_denies_interactive_generator_before_interactor(tmp_path, capsy
156156
"interactive": True,
157157
"sol_built": True,
158158
"brute_built": True,
159+
"solution_analyzed": True,
160+
"std_audited": True,
161+
"brute_audited": True,
159162
"interactor_ready": False,
160163
}
161164
module.save_state(str(problem_dir), state)
@@ -171,10 +174,7 @@ def test_pre_tool_denies_interactive_generator_before_interactor(tmp_path, capsy
171174
assert exit_code == 0
172175
parsed = json.loads(captured)
173176
assert parsed["hookSpecificOutput"]["permissionDecision"] == "deny"
174-
assert (
175-
"interactor_build" in parsed["hookSpecificOutput"]["permissionDecisionReason"]
176-
or "solution_analyze" in parsed["hookSpecificOutput"]["permissionDecisionReason"]
177-
)
177+
assert "interactor_build" in parsed["hookSpecificOutput"]["permissionDecisionReason"]
178178

179179

180180
def test_pre_tool_denies_pack_before_tests_verified(tmp_path, capsys):
@@ -430,7 +430,7 @@ def test_pre_tool_enforces_solution_audits_before_generator_build(tmp_path, caps
430430
captured = capsys.readouterr().out
431431
parsed = json.loads(captured)
432432
assert parsed["hookSpecificOutput"]["permissionDecision"] == "deny"
433-
assert "solution_audit_std" in parsed["hookSpecificOutput"]["permissionDecisionReason"]
433+
assert "solution_audit_brute" in parsed["hookSpecificOutput"]["permissionDecisionReason"]
434434

435435

436436
def test_pre_tool_pack_respects_quality_gate_override(tmp_path, capsys):

0 commit comments

Comments
 (0)