Agent skill
rule-authoring
Create or update inspequte analysis rules and harness-based tests. Use when adding new rules, modifying rule metadata, or writing JVM harness tests for rules in src/rules/*.rs.
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/rule-authoring
SKILL.md
Rule authoring (inspequte)
Workflow
- Define rule metadata: unique
id, clearname, and shortdescription. - Implement
Rule::runusingAnalysisContextand helpers fromcrate::rules(ex:result_message,method_location_with_line,class_location). - Add harness tests in the same rule file (
#[cfg(test)]): compile Java sources withJvmTestHarness, analyze, then assert onrule_idand message text. - Register the rule in
src/rules/mod.rsandsrc/engine.rsif it is new. - Keep output deterministic (results are sorted by
rule_id/message; avoid non-deterministic ordering in rule code).
See references/rule-checklist.md for a compact checklist.
Harness testing
- Use
JvmTestHarness::new(); it requiresJAVA_HOME(Java 21). - Prefer local stub sources over downloading jars.
- Filter SARIF results by
rule_idfor assertions. - Cover both happy-path and edge cases: include cases that should report, cases that should not report (false positives), and cases that should not miss reports (false negatives).
Harness test template
rust
let harness = JvmTestHarness::new().expect("JAVA_HOME must be set for harness tests");
let sources = vec![SourceFile {
path: "com/example/Sample.java".to_string(),
contents: r#"
package com.example;
public class Sample {
public void run() {
// code under test
}
}
"#.to_string(),
}];
let output = harness
.compile_and_analyze(Language::Java, &sources, &[])
.expect("run harness analysis");
let messages: Vec<String> = output
.results
.iter()
.filter(|result| result.rule_id.as_deref() == Some("RULE_ID"))
.filter_map(|result| result.message.text.clone())
.collect();
assert!(messages.iter().any(|msg| msg.contains("expected")));
Guardrails
- Keep tests in the rule file to avoid a massive shared test module.
- Use ASCII-only edits unless the file already uses Unicode.
- Add doc comments to any new structs.
Didn't find tool you were looking for?