agentsclimarketplace

Autogen promql tests

Skill conallob/o11y-analysis-tools/skills/autogen-promql-tests

Identify Prometheus alert/recording rules that have no promtool unit-test coverage, and scaffold true-positive/false-positive/hysteresis test-case skeletons for them. Use when bootstrapping unit tests for new or existing PromQL rules, or auditing test coverage of a rules file. Fully hermetic: reads only local rule/test YAML, no running Prometheus required.From its SKILL.md

Install
npx -y skills add conallob/o11y-analysis-tools --skill autogen-promql-tests

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 3 commands, including `go build -o bin/autogen-promql-tests ./cmd/autogen-promql-tests` and 2 more.

What its file declares

Copied from the file, not written here

The file declares its own license as BSD-3-Clause. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.3 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

autogen-promql-tests

Coverage auditor and test-skeleton generator for Prometheus rule files. It does not know your actual metric shapes — it emits a promtool-compatible test file full of TODO placeholders that a human (or an agent that has read the real metrics) must fill in with realistic input series and expected values. Hermetic — no network access.

When to use this skill

  • A rules file has alerts or recording rules with no corresponding promtool test rules coverage, and you want a starting skeleton rather than writing input_series/exp_alerts blocks from scratch.
  • You want a quick coverage report: how many of N rules currently have tests, and which ones don't.
  • This is a bootstrap tool, best run interactively the first time a rule is added — not a CI gate, since its generated output is intentionally incomplete (TODO markers) and would fail promtool test rules until a human fills them in.

Setup

go build -o bin/autogen-promql-tests ./cmd/autogen-promql-tests
# or: go install github.com/conallob/o11y-analysis-tools/cmd/autogen-promql-tests@latest

Usage

autogen-promql-tests [options]
FlagDefaultEffect
--rules(required)Path to the Prometheus rules YAML file to audit.
--tests""Path to an existing test file to check coverage against. If omitted, the tool auto-discovers <rules-basename>_test.yml next to the rules file.
--fixfalseGenerate a test file covering the untested alerts/rules.
--verbosefalsePrint discovery/loading detail.

Typical invocations

# Coverage report only (exit 1 if anything is untested)
autogen-promql-tests --rules=./alerts.yml

# Generate a test skeleton for whatever's untested
autogen-promql-tests --rules=./alerts.yml --fix

# Check against an explicit, non-default-named test file
autogen-promql-tests --rules=./rules.yml --tests=./custom_tests.yml

Without --tests, it looks for <rules>_test.yml (rules file's basename with .yml/.yaml stripped, _test.yml appended) in the same directory. With --fix, the same path is the default write target unless --tests is also given, in which case that path is used both to read and write.

What the generated file contains

For every rule not already covered (alert: or record: name absent from the tested set), it appends four test cases to the output YAML:

  1. True positiveinput_series tuned (via a TODO) to make the alert fire; asserts exp_alerts with the rule's actual labels: and a TODO placeholder for each annotations: template value.
  2. False positive — same shape, but TODO'd to not trigger the condition; asserts exp_alerts: [].
  3. Hysteresis check — only emitted if the rule has a for: duration: evaluates at roughly half the for: duration and asserts the alert has not fired yet, to test the hold-down timer itself.
  4. Edge cases — an empty placeholder section reminding the human to add boundary values, missing-metric behavior, label-combination cases, and recovery behavior.

The input_series blocks always start from a single placeholder example_metric{job="test", instance="localhost:9090"} series with a TODO — the tool does not parse the expression's actual metric names into realistic series, it only echoes the first line of the expression as a comment reminder. An agent should replace these placeholders using the real metric names and label sets from the rule's expr:.

Reading the output

═══════════════════════════════════════════════════════════
Test Coverage Analysis
═══════════════════════════════════════════════════════════

Total rules/alerts: 8
Tested: 5
Untested: 3

Untested alerts/rules:
  • HighErrorRate
  • job:http_requests:rate5m
  • LowDiskSpace

Run with --fix to generate tests for untested alerts

Exit code 1 when untested rules exist and --fix wasn't passed, 0 otherwise (including after a successful --fix run).

Agent workflow

  1. Run without --fix first to see the coverage gap and decide scope.
  2. Run with --fix to generate the skeleton file.
  3. Do not stop there. Open the generated _test.yml and replace every TODO with real series data derived from the rule's actual expr: — correct metric names, label sets that match what the alert's labels: expects, and values that genuinely cross (or stay under) the alerting threshold. The file will not pass promtool test rules until this is done.
  4. Verify with promtool test rules <generated-file> once filled in.
  5. Re-run autogen-promql-tests --rules=... --tests=<generated-file> to confirm the rule now shows as tested.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most test skills give in ~1.2k tokens

Counted across 1,201 of the 2,096 authors here whose files we hold, read 2026-09-06

  • Write a failing test before writing codein 43 of 1201, across 36 files
  • Run the full test suitein 36 of 1201, across 35 files
  • Test only one variable per experimentin 34 of 1201, across 17 files
  • Read product marketing context before asking questionsin 34 of 1201, across 14 files
  • Mock external dependenciesin 34 of 1201, across 30 files
  • Define primary, secondary, and guardrail metricsin 33 of 1201, across 16 files
  • Pre-determine sample size before startingin 31 of 1201, across 14 files
  • Test behavior rather than implementationin 31 of 1201, across 29 files
  • Formulate a hypothesis before designing a testin 30 of 1201, across 13 files
  • Document every test hypothesis, variant, and resultin 29 of 1201, across 11 files
  • Use descriptive test function namesin 25 of 1201, across 21 files
  • Commit to the methodology without stopping earlyin 24 of 1201, across 8 files

Said here and by no other author read

  • run tool without fix flag to identify coverage gaps
  • run tool with fix flag to generate test skeletons
  • replace all TODO placeholders with real metric data
  • verify generated test files using promtool

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.