# METADATA # scope: package # title: Block Code Quality Test (Edits) # description: Blocks file edits to src/test/code-quality.test.ts # custom: # routing: # required_events: ["PreToolUse"] # required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_code_quality_test_edits import rego.v1 tool_name := input.tool_name tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null } else := tool_input.file_path if { tool_input.file_path != null } else := tool_input.filePath if { tool_input.filePath != null } else := tool_input.path if { tool_input.path != null } else := tool_input.notebook_path if { tool_input.notebook_path != null } else := tool_input.notebookPath if { tool_input.notebookPath != null } else := "" new_content := tool_input.new_string if { tool_input.new_string != null } else := tool_input.newText if { tool_input.newText != null } else := tool_input.new_text if { tool_input.new_text != null } else := tool_input.content if { tool_input.content != null } else := "" old_content := tool_input.old_string if { tool_input.old_string != null } else := tool_input.oldText if { tool_input.oldText != null } else := tool_input.old_text if { tool_input.old_text != null } else := tool_input.previousContent if { tool_input.previousContent != null } else := "" patch_content := tool_input.patch if { tool_input.patch != null } else := tool_input.patchText if { tool_input.patchText != null } else := tool_input.patch_text if { tool_input.patch_text != null } else := "" edit_path(edit) := path if { edit.resolved_file_path != null path := edit.resolved_file_path } else := path if { edit.file_path != null path := edit.file_path } else := path if { edit.filePath != null path := edit.filePath } else := path if { edit.path != null path := edit.path } else := "" edit_new_content(edit) := content if { edit.new_string != null content := edit.new_string } else := content if { edit.newText != null content := edit.newText } else := content if { edit.new_text != null content := edit.new_text } else := content if { edit.content != null content := edit.content } else := "" edit_old_content(edit) := content if { edit.old_string != null content := edit.old_string } else := content if { edit.oldText != null content := edit.oldText } else := content if { edit.old_text != null content := edit.old_text } else := "" file_path_pattern := `src/test/code-quality\.test\.ts$` # Block Write/Edit operations targeting code-quality test file deny contains decision if { input.hook_event_name == "PreToolUse" tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) decision := { "rule_id": "TS-QUALITY-002", "reason": "Direct edits to src/test/code-quality.test.ts are prohibited.", "severity": "HIGH" } } deny contains decision if { input.hook_event_name == "PreToolUse" tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) regex.match(file_path_pattern, file_path) decision := { "rule_id": "TS-QUALITY-002", "reason": "Direct edits to src/test/code-quality.test.ts are prohibited.", "severity": "HIGH" } }