Skip to content
Agentmart
Submit a tool

bench-virtual-rule

Mirror a preset virtual rule (selectors under `nodeRules` in preset.html-standard.jsonc and similar) into bench/config.ts so the benchmark exercises it.

Skill by markuplint

IndexedMIT★ 629
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/markuplint-bench-virtual-rule

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Mirror a preset virtual rule (selectors under `nodeRules` in preset.html-standard.jsonc and similar) into bench/config.ts so the benchmark exercises it. Use when a new disallowed-element / similar selector lands in a preset and the matching nu fixtures remain stuck at nu-only despite the new rule existing in markuplint. Trigger keywords: virtual rule, nodeRules, disallowed-element, preset html-standard, bench config mirror, rule does not fire on bench, preset rule not exercised.

Use cases: frontend, testing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/bench-virtual-rule

What's inside

Skill name
bench-virtual-rule
Description
Mirror a preset virtual rule (selectors under `nodeRules` in preset.html-standard.jsonc and similar) into bench/config.ts so the benchmark exercises it. Use when a new disallowed-element / similar selector lands in a preset and the matching nu fixtures remain stuck at nu-only despite the new rule existing in markuplint. Trigger keywords: virtual rule, nodeRules, disallowed-element, preset html-standard, bench config mirror, rule does not fire on bench, preset rule not exercised.
License
MIT
Metadata
internal: true
Instructions
39 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Bench Virtual Rule Mirror Skill

`bench/config.ts` does **not** `extends: ['markuplint:html-standard']`.
It curates rules explicitly so the bench surface stays scoped to
nu-validator capability. Consequence: any new entry in a preset's
`nodeRules[]` is invisible to the benchmark until the same selectors
are mirrored into `bench/config.ts`. Symptom: fixtures the new
virtual rule should detect remain at `nu-only` and look like a
markuplint coverage gap when the rule already exists.

## Procedure

1. Add the selector(s) to the relevant preset
   (`preset.html-standard.jsonc` or similar).
2. Mirror the same selectors into `bench/config.ts` `nodeRules[]`
   with a comment naming the source preset rule (e.g.
   `// Mirrors html-standard/no-duplicate-charset`).
3. Run `yarn bench:update:ml`.
4. Verify the target fixtures flipped from `nu-only` →
   `match-error`. If they didn't, the selectors don't actually
   match those fixtures — check selector syntax (caveats below).
5. If the rule does not map onto any nu-validator capability, skip
   step 2 and add a `// not mirrored: <reason>` comment to the
   preset rule's JSDoc so the next maintainer knows it was a
   conscious decision.

## Selector caveats

- HTML attribute *names* are matched ASCII case-insensitively
  (`[charset]` matches `<meta CHARSET>`). Use lowercase to match
  HTML's normative form.
- The `i` flag (e.g. `[name="description" i]`) only applies to
  attribute *values* — it is unnecessary for the *name*, which is
  already case-folded for HTML.
- Sibling selectors (`~`) only match elements after the anchor.
  Coexistence-style constraints typically need both directions
  (`a ~ b` *and* `b ~ a`) so the rule fires regardless of source order.

From markuplint/markuplint, MIT.

More from markuplint/markuplint

Signals

Stars
629
Forks
70
Open issues
52
Last commit (this folder)
May 7, 2026 (5 months ago)
Last release
Oct 21, 2026 (8 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from markuplint

Cite this page

bench-virtual-rule skill. Agent Mart. https://agentmart.dev/skills/markuplint-bench-virtual-rule (last updated 2026-10-24)