Skip to content

Upgrade skillsaw to v0.10.0 and enable promptfoo linting - #471

Merged
openshift-merge-bot[bot] merged 6 commits into
mainfrom
skillsaw
May 14, 2026
Merged

openshift-merge-bot[bot] merged 6 commits into
mainfrom
skillsaw

Conversation

@stbenjam

@stbenjam stbenjam commented May 14, 2026

Copy link
Copy Markdown
Member

This upgrades skillsaw to v0.10.0 and:

  • adds promptfoo budget custom linter to enforce budget and metadata fields
  • fixes some broken links detected by the linter
  • enables additional rules that already pass

There are still many rules disabled, but will fix them in follow-ups to keep this small.

Summary by CodeRabbit

  • New Features

    • Added validation enforcing prompt-eval metadata, cost/latency budget checks, and per-entity budget aggregation.
  • Chores

    • Upgraded linting tooling to v0.10.0 and adjusted lint invocation to match the new tool.
    • Added custom validation rules for eval/test policies.
  • Documentation

    • Clarified contribution guidance and corrected several documentation links and context strings.
  • Tests

    • Added directives and metadata tweaks to opt tests out of specific lint/budget/assertion checks.

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label May 14, 2026
@openshift-ci
openshift-ci Bot requested review from Prashanth684 and mrunalp May 14, 2026 14:28
@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label May 14, 2026
@coderabbitai

coderabbitai Bot commented May 14, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are limited based on label configuration.

🚫 Review skipped — only excluded labels are configured. (1)
  • do-not-merge/work-in-progress

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Enterprise

Run ID: f3cc779e-db06-446d-9054-450de97792d1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Bumps Skillsaw to v0.10.0, adds a new Skillsaw rule (promptfoo-budget) enforcing promptfoo test metadata against a repo budget file, rewrites .skillsaw.yaml ruleset and custom-rules, updates Makefile and GitHub Action pins, and applies small docs and eval config tweaks.

Changes

Promptfoo budget validation + Skillsaw integration

Layer / File(s) Summary
Budget rule implementation
.skillsaw/promptfoo_budget_rule.py
Adds PromptfooBudgetRule (rule_id: promptfoo-budget) with config_schema (budget-file: str default evals/budget.yaml) and check() that loads the budget/policy, parses orderings, token-usage, tiers, iterates Promptfoo tests, enforces required metadata (token-usage, judge-size, tier), validates token-usage and cost/latency thresholds (with over-classification warnings), validates judge-size vs presence of llm-rubric assertions, validates tier placement (warns on over-classification), and aggregates per-entity costs vs configured budgets (warns on mismatches).
Skillsaw config and custom rules registration
.skillsaw.yaml, .skillsaw/plugindocs_rule.py
Sets version: "0.10.0" and strict: true; reworks rules (enables instruction-file/import checks, certain content/security checks, promptfoo-valid, coderabbit-yaml-valid, mcp-prohibited with gopls allowlist; disables many prior checks); registers custom-rules including .skillsaw/promptfoo_budget_rule.py; clears exclude and sets content-paths: [].

Tooling pins and invocation

Layer / File(s) Summary
Local lint image and invocation
Makefile
Bumps SKILLSAW_IMAGE to ghcr.io/stbenjam/skillsaw:0.10.0; updates lint target container run to remove the extra -v --strict CLI args while keeping workspace mount and SELinux options.
GitHub Actions pins
.github/workflows/lint-plugins.yml, .github/workflows/lint-review.yml
Updates pinned stbenjam/skillsaw action SHAs to newer commits (v0.10.0); removes with.verbose and uses with.strict: true for linting step where applicable.

Opt-outs, docs, and minor content fixes

Layer / File(s) Summary
Eval config opt-outs
evals/promptfooconfig.yaml
Adds three # skillsaw-disable directives (promptfoo-budget, promptfoo-assertions, promptfoo-metadata) before the smoke/provider-loads test to opt that test out of the new checks.
Docs and small markdown fixes
AGENTS.md, plugins/ci/skills/stage-payload-reverts/SKILL.md, plugins/sosreport/skills/ovs-db-analysis/SKILL.md
Minor edits: extend example reference and marketplace path in AGENTS.md; remove surrounding quotes from a revert-PR --context string; fix a relative path in OVN analysis docs.
Test metadata tweak
plugins/jira/evals/ready-to-solve.yaml
Change ready-to-solve/short-context test metadata from *meta-heavy anchor to an empty metadata: block.

Sequence Diagram

sequenceDiagram
  autonumber
  participant Dev as "Developer"
  participant GH as "GitHub Actions"
  participant Make as "Local Make"
  participant Skillsaw as "Skillsaw Runner"
  participant Rule as "promptfoo-budget Rule"
  participant Budget as "evals/budget.yaml"
  participant Tests as "Promptfoo Tests"
  participant Report as "Annotations/Console"

  Dev->>GH: Push commit (workflow trigger)
  Dev->>Make: Run `make lint` locally
  Make->>Skillsaw: Launch container (ghcr.io/stbenjam/skillsaw:0.10.0) with `.skillsaw.yaml`
  GH->>Skillsaw: Invoke action (pinned v0.10.0)
  Skillsaw->>Rule: Load `.skillsaw/promptfoo_budget_rule.py`
  Rule->>Budget: Read policy/budget file
  Rule->>Tests: Scan promptfoo tests and read metadata
  Rule->>Rule: Validate metadata, thresholds, tiers, aggregate costs
  Rule->>Report: Emit errors/warnings per test and per-entity budget
  Skillsaw->>GH: Return annotations/report
  Skillsaw->>Dev: Local `make lint` prints results
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

ok-to-test

Suggested reviewers

  • mrunalp
  • Prashanth684
🚥 Pre-merge checks | ✅ 9 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (9 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
No Real People Names In Style References ✅ Passed Comprehensive search of all PR files found zero instances of real people names used as style references. The PR actually codifies this exact requirement in AGENTS.md contribution rules.
No Assumed Git Remote Names ✅ Passed No hardcoded git remote names (origin/upstream) or commands assuming remote names found in any modified files. PR contains only config, docs, and a custom linting rule with no git operations.
Git Push Safety Rules ✅ Passed PR contains only linting configuration and tooling upgrades. No git push commands, force push operations, or automated push workflows found in any modified files.
No Untrusted Mcp Servers ✅ Passed The PR introduces no untrusted MCP server installations. All dependencies are from trusted sources (@anthropic-ai, promptfoo). The skillsaw mcp-prohibited rule is enabled with gopls-only allowlist.
Ai-Helpers Overlap Detection ✅ Passed PR modifies only 4 lines of non-functional documentation in existing ai-helpers files. No new functionality added. Early termination applies per check instructions.
Title check ✅ Passed The title directly and clearly summarizes the main changes: upgrading skillsaw from v0.8.0 to v0.10.0 and enabling promptfoo linting, which is the primary intent of the PR.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch skillsaw

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.skillsaw.yaml:
- Line 35: Fix the typo in the YAML boolean for the "enabled" key: replace the
invalid value "falsie" with the valid boolean "false" for the enabled field so
the YAML parses and the rule behaves correctly.

In `@AGENTS.md`:
- Line 37: The markdown currently renders the link as inline code: change the
text "**Register all plugins** in
`[.claude-plugin/marketplace.json](.claude-plugin/marketplace.json)`." so that
the link is not wrapped in backticks (e.g., "**Register all plugins** in
[.claude-plugin/marketplace.json](.claude-plugin/marketplace.json)"), ensuring
the .claude-plugin/marketplace.json path becomes a clickable link; update the
same pattern wherever that inline-code link appears.
- Line 34: The link in the line containing "**Follow existing patterns.** Read
`[plugins/hello-world/commands/echo.md](plugins/hello-world/commands/echo.md)`"
is wrapped in backticks which renders it as code; remove the backticks so the
markdown becomes "**Follow existing patterns.** Read
[plugins/hello-world/commands/echo.md](plugins/hello-world/commands/echo.md)" to
make the link clickable while preserving the surrounding text.

In `@plugins/ci/skills/stage-payload-reverts/SKILL.md`:
- Line 109: The example context string shown as Context (use `--context`): `This
PR is causing blocking job failures ({job names}) in the {stream} {architecture}
payload [{payload_tag}]({release_controller_url}).` should be wrapped in quotes
to prevent shell argument splitting; update the SKILL.md example for the
`--context` flag so the entire multi-word message is quoted (matching the
pattern used in the `payload-experimental-reverts` example), ensuring the quoted
string includes the placeholders `{job names}`, `{stream}`, `{architecture}`,
`{payload_tag}`, and `{release_controller_url}` exactly as shown.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: f82dbcdd-d746-4281-b076-ed279a445b16

📥 Commits

Reviewing files that changed from the base of the PR and between 261467e and 8292c8b.

📒 Files selected for processing (8)
  • .github/workflows/lint-plugins.yml
  • .skillsaw.yaml
  • .skillsaw/plugindocs_rule.py
  • .skillsaw/promptfoo_budget_rule.py
  • AGENTS.md
  • Makefile
  • plugins/ci/skills/stage-payload-reverts/SKILL.md
  • plugins/sosreport/skills/ovs-db-analysis/SKILL.md
💤 Files with no reviewable changes (1)
  • .github/workflows/lint-plugins.yml

Comment thread .skillsaw.yaml Outdated
Comment thread AGENTS.md
Comment thread AGENTS.md Outdated
Comment thread plugins/ci/skills/stage-payload-reverts/SKILL.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/jira/evals/ready-to-solve.yaml`:
- Line 65: Replace the YAML null-valued metadata key with an explicit empty map:
locate the metadata entry in the ready-to-solve test case (the metadata: line in
plugins/jira/evals/ready-to-solve.yaml) and change it from a null-style key to
an explicit empty map (metadata: {}) so it matches other test cases and avoids
schema/validation issues.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a1257040-5957-4e22-b3a3-b9c8fd69a74f

📥 Commits

Reviewing files that changed from the base of the PR and between b2d99ac and 359d290.

📒 Files selected for processing (1)
  • plugins/jira/evals/ready-to-solve.yaml

Comment thread plugins/jira/evals/ready-to-solve.yaml Outdated
@stbenjam stbenjam changed the title [wip] Upgrade skillsaw to v0.10.0 and enable promptfoo linting Upgrade skillsaw to v0.10.0 and enable promptfoo linting May 14, 2026
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label May 14, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.skillsaw.yaml:
- Around line 95-97: The Skillsaw config loads the custom rule file
.skillsaw/promptfoo_budget_rule.py under custom-rules but never enables it in
the rules section, so the promptfoo budget checks aren't active; add a rules
entry named promptfoo-budget with enabled: true and severity: error under the
existing rules: block in .skillsaw.yaml to match the custom rule (ensure the key
is exactly promptfoo-budget to match the plugin file's documented name).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 3674f1d4-9280-4f5d-b721-f4feb45f6d65

📥 Commits

Reviewing files that changed from the base of the PR and between 359d290 and 6940edb.

📒 Files selected for processing (1)
  • .skillsaw.yaml

Comment thread .skillsaw.yaml
Comment on lines +30 to +32
# skillsaw-disable promptfoo-budget
# skillsaw-disable promptfoo-assertions
# skillsaw-disable promptfoo-metadata

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Disabled since the smoke test doesn't need it

@enxebre

enxebre commented May 14, 2026

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label May 14, 2026
@openshift-ci

openshift-ci Bot commented May 14, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: enxebre, stbenjam

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. lgtm Indicates that a PR is ready to be merged.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants