fix(skills): repair update-rules skill family per full audit#214
Merged
Conversation
Audit of the 12 update-rules skills + e2e workflow found 12 issues; this fixes all of them plus reviewer findings: Dispatcher (update-rules.md): - correct sigma repo layout: service dirs at root + staging/<service>/ (rules/production and rules/staging never existed); submodule path is third-party/android-sigma-rules - degraded-run policy for missing MALWAREBAZAAR_API_KEY (skip feed, record FAILURE, continue) instead of aborting the sweep - WebFetch cannot POST or set headers — note curl requirement for Auth-Key / GITHUB_TOKEN calls - Step 6.5 cross-dedup now covers Rule-Author-emitted ioc_data too - drop stale "[Phase 4 of #117]" commit-message tag Author (update-rules-author.md): - TROJAN is not a valid category — example fixed to MALWARE, enum from ioc-entry-schema.json documented (bankers/RATs -> MALWARE) - document the runtime device-posture severity cap (SeverityCapPolicy clamps to medium) — stop proposing high/critical for posture rules - generic lookup rules are 001-004 (004 APK hash was omitted) - allowed sources now include threat_research; familyName -> family Validator (update-rules-validate.md): - Gate 1 service check now reads rule-schema.json enum + taxonomy active status instead of a stale 5-service hardcode - Gate 5 self-review runs inline (subagents cannot spawn agents) - six-gate count corrected; required IOC fields per actual schema abuse.ch ingester: Bash + curl invocations (ThreatFox JSON POST, MalwareBazaar form POST) replace impossible WebFetch-POST instructions e2e workflow (now git-tracked): - live state required via args (today/next_id/rule_index/cursors/...) instead of stale baked-in constants (month-old cursors, retired androdr-084 next_id, hardcoded since-date) - fix always-true source_sirs filter (|| true) so validators get only their candidate's SIRs; Array.isArray guard - null validator results surface as failed candidates instead of silently vanishing; IOC-validation fallback object - de-hardcode author service list; schema-accurate IOC field checks Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A full audit of the
update-rulesskill family (12 skill files + theupdate-rules-e2eworkflow) found 12 issues — broken paths, an invalid IOC category taught by example, impossible tool instructions, a stale validator service list, an always-true filter bug, and month-old baked-in workflow state. This PR fixes all of them, plus additional findings from the two-reviewer cycle.Changes
update-rules.md(dispatcher)staging/<service>/— the referencedrules/production/andrules/staging/never existed; repo path isthird-party/android-sigma-rules/MALWAREBAZAAR_API_KEYno longer aborts a full sweep — abusech is skipped and recorded as a feed FAILURE, remaining feeds continue (matches e2e behavior)GITHUB_TOKENcalls need curlioc_data, not just ingester candidates[Phase 4 of #117]commit-message tagupdate-rules-author.mdTROJANexample replaced withMALWARE+ the actualioc-entry-schema.jsoncategory enum documented (no TROJAN category exists; the example was teaching a schema violation)SeverityCapPolicyclampsdevice_posturefindings tomediumat runtime, so declaringhigh/criticalon posture rules is dead text (root cause of the recurring "pipeline proposes high" annoyance)threat_researchadded to allowed sources (present inallowed-sources.json);familyName→familyper schemaupdate-rules-validate.mdrule-schema.jsonenum + taxonomystatus: activeinstead of a stale 5-service hardcode that would falsely fail validreceiver_audit/accessibility_audit/appops_auditrulesupdate-rules-ingest-abusech.mdupdate-rules-e2e.workflow.js(now git-tracked — was ignored, so the pipeline's orchestration was unversioned)args(today, next_id, rule_index, tracked_threat_names, cursors, discover_cursors, since) with a usage-error return — replaces baked-in constants that were a month stale and pointednext_idat the retired androdr-084|| truein the source-SIR filter: validators now receive only their candidate's SIRs (with fallback), restoring Gate 2 precisionArray.isArrayguardVerification
node --checkon the harness-wrapped body)rules/production,5-gate,familyName,TROJAN,WebFetch to POST, retired IDs/dates) across all 13 filesNo app code touched — changes are limited to
.claude/skill/workflow files.🤖 Generated with Claude Code