bench-triage
Triage one nu-only fixture from tests/external/snapshots/diff/nu-only.json by reading the spec, then drive its verdict to match-error, match-clean, or nu-over…
Skill by markuplint
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-triage
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.
About
Use cases: testing, ml, security
Reviews
Write a reviewNo 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-triage
What's inside
- Skill name
bench-triage- Description
- Triage one nu-only fixture from tests/external/snapshots/diff/nu-only.json by reading the spec, then drive its verdict to match-error, match-clean, or nu-over by either fixing markuplint or recording an excluded-ids.json entry. The core per-fixture operation of the nu-validator coverage benchmark. Use when a bench refresh surfaces new nu-only entries, when checking a coverage-claim ("markuplint misses X" / "over-detects Y") against the bench, or when classifying a specific fixture. Trigger keywords: nu-only, ml-only, coverage gap, bench triage, verdict, match-error, match-clean, nu-over, excluded-ids, declare nu over-detection, claim audit, audit fixture, mark-up valid per spec, spec-cited exclusion.
- License
- MIT
- Metadata
- internal: true
- Instructions
- 262 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- audit-log.md
SKILL.md (first lines)
# nu-validator Bench Triage Skill Take one nu-only fixture and drive its verdict to a confirmed state. Every entry this skill sees is fresh intake — surfaced by a bench refresh after an upstream nu update or a markuplint change. Deciding *why* the entry appeared (new upstream coverage vs. stale exclusion vs. markuplint regression) is `bench-maintain`'s decision tree; this skill is the spec-read that settles the verdict once the entry is confirmed as new coverage to classify. Prerequisite: the bench must be runnable on this machine. If commands in this skill fail with "no snapshots found" / Docker errors, run the `bench-setup` skill first. ## Verdict definitions | Verdict | Meaning | | --- | --- | | `match-error` | Both tools detected a violation. | | `match-clean` | Neither detected a violation (and no nu errors were excluded). | | `ml-only` | Only markuplint detected. | | `nu-only` | Only nu-validator detected, and `excluded-ids.json` does not cover the messages. | | `nu-over` | Only nu-validator detected, but every message is covered by `excluded-ids.json`. | `nu-only` is what this skill drives. `ml-only` is informational and not this skill's target — but if you need to understand it, see "Note: ml-only readings" at the end. A verdict tally (`ml-only=32` for a category, the count line in a `bench:xref` block) is a pointer, not evidence. It says how many fixtures differ, not which rule or attribute differs or whether markuplint or nu is the one following the spec. Before a tally is quoted in an Issue or PR body, pick one or two representative fixtures, regenerate their snapshots (`yarn bench:update --target markuplint`, or run them through `mlTest()`), read `snapshots/markuplint/<path>.json` `violations[]`, and confirm the flagged rule and attribute are the ones the claim is about. An `ml-only` count read as "markuplint over-detects" without that step has produced Issues whose actual violations came from unrelated rules. ## Step 1: Pick a fixture Slice `tests/external/snapshots/diff/nu-only.json` (`entries[]` with `category` and `path`) by path or category. When auditing a coverage claim instead, slice `coverage.json` by the claim's pattern and read each entry's `verdict`. ## Step 2: Read nu-validator messages for the fixture Read `tests/external/snapshots/nu-validator/<path>.json` (`nuValidator.messages[]`). The raw tree is gitignored — regenerate with `yarn bench:update --target nu` if missing. Each message has a stable `id` (`nv-<hex12>`, optionally `-N` on collisions); that's the key for `excluded-ids.json`. ## Step 3: Read markuplint output for the fixture Read `tests/external/snapshots/markuplint/<path>.json` (`markuplint.violations[]`). For a `nu-only` fixture, expect zero violations here. If markuplint already detected something, the verdict computation may be stale — re-run `yarn bench:compare`. ## Step 4: Read the spec Open the raw HTML at `tests/external/validator/tests/<path>` and identify the relevant spec paragraph. Authoritative sources: - HTML LS — <https://html.spec.whatwg.org/multipage/> - DOM LS — <https://dom.spec.whatwg.org/> - URL LS — <https://url.spec.whatwg.org/> - WAI-ARIA 1.3 — <https://www.w3.org/TR/wai-aria-1.3/> - ARIA in HTML — <https://w3c.github.io/html-aria/> - Microdata (HTML LS §5.7) — <https://html.spec.whatwg.org/multipage/microdata.html> MDN is not authoritative — quote WHATWG / W3C when they disagree. Living standards change; recent normative revisions often explain why nu (slow) and markuplint (tracks `@markuplint/html-spec`) drift. Quote the exact sentence verbatim into the issue / PR / `excluded-ids.json#reason` — never a paraphrase. ## Step 5: Decide and act For a `nu-only` fixture, the spec verdict gives a binary action. Where a fix lands depends on the branch: the paths named throughout this skill (`packages/@markuplint/types`, `packages/@markuplint/html-parser`, …) are the `dev` line. On the v6 line the same behaviour may be implemented in the Rust workspace instead — locate the code before editing, and follow `crates/markuplint-rules/CLAUDE.md` for anything under `crates/`. | Spec on the markup | Conclusion | Action | | --- | --- | --- | | **Forbidden (HTML LS / ARIA / URL LS)** | nu correct, markuplint has a coverage gap. | Add or extend a markuplint rule. Open an Issue if the work is non-trivial. After fix, `yarn bench:update:ml` — fixture should flip to `match-error`. | | **Forbidden, but spec is outside markuplint's reference scope** (e.g. WICG draft, vendor extension) | nu is enforcing a spec that markuplint deliberately does not track. Open an Issue for future coverage AND record the messages in `excluded-ids.json` so the bench can focus on actionable HTML LS gaps. | Issue + `excluded-ids.json` pattern. Reason field must explicitly note `deferred-WICG / deferred-<spec>` so future readers can distinguish from regular nu-over. The tracking Issue # goes in the reason. | | **Permitted by HTML LS** | nu over-detecting. | Record in `excluded-ids.json` (per-ID or pattern; see below). After edit, `yarn bench:compare` — fixture should flip to `nu-over`. | | **Ambiguous / under discussion** | Spec issue or PR ongoing. | Put the spec-tracker URL in the `reason` of the markuplint tracking Issue's `secondary` mapping in `tests/external/bench/issue-xref.config.ts` (file or find that Issue first — a mapping is keyed by its number). `summary.md` is regenerated on every `bench:report`, so a note there is lost. Do not silently close. | markuplint's reference scope is HTML Living Standard + WAI-ARIA + URL Living Standard. Anything nu enforces from a WICG draft, a vendor extension, or any other spec outside that set is treated as deferred coverage — eligible for `excluded-ids.json` only if an Issue tracks the future implementation. When the spec disagrees with **both** tools (recent normative revision neither has adopted), open one Issue per tool but pursue only the markuplint side from this repo — nu upstream reports are not part of this project's workflow. ### How to record nu over-detection Follow the existing entry shapes in `excluded-ids.json` (per-`id` `entries[]` keyed by the nu message id; message-substring `patterns[]` keyed by `messageContains`). Every entry needs a `reason` containing the verbatim spec quote, plus `addedAt` / `addedBy`. Message-substring conclusions are kept in the [audit log](audit-log.md); check it before excluding by message. The verdict flips to `nu-over` only when *every* active nu message
From markuplint/markuplint, MIT.
More from markuplint/markuplint
- 0.817score
impl
markuplint
Implementation orchestrator — takes an agreed plan through implementation, carry-over approval, code review, security review, QA, docs consistency, lint/test…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
issue
markuplint
Analyze or create a GitHub Issue and build a TDD resolution plan.
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
qa-engineer
markuplint
Review a diff of this repository as a QA engineer: test quality (coverage, test-faking code, swallowed exceptions, conditional logic in tests, hardcoded…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
pr-review
markuplint
Review an external pull request for the owner: check it against the intake conditions of CONTRIBUTING.md (eligible issue, required body sections, no burst of…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
verify-docs
markuplint
Verify documentation claims (README, JSDoc) in spec-heavy packages — @markuplint/types (attribute value types; WHATWG/W3C/RFC/CSS/SVG grammars) and…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
release
markuplint
Release markuplint — branch promotion, version bump (lerna fixed mode), tag push, publish workflow monitoring, npm-state verification, GitHub Release notes…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
git
markuplint
Git operation rules for this repository — branch guard, commit granularity, package commit order, Conventional Commits message format, and pre-commit checks.
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
product-manager
markuplint
Review a diff of this repository from a Product Manager (PdM) perspective: documentation consistency (JSDoc placement, comment policy, README accuracy)…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
framework-parsers
markuplint
Create and maintain framework parser and spec packages for markuplint — package types, naming, and the architectural constraints that break the build or…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
pr
markuplint
Create and push a pull request — pre-flight checks, base tracking, PR body drafting, conflict detection, and CI watch loop.
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
list-rule-test
markuplint
List rule test IDs with filtering and stats.
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
doc
markuplint
Documentation policy — JSDoc-first; no code-derivable markdown.
SkillAFreshness: A★ 629Claude Code +9
Signals
- Stars
- 629
- Forks
- 70
- Open issues
- 52
- Last commit (this folder)
- Oct 16, 2026 (12 days ago)
- Last release
- Oct 21, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/markuplint/markuplint
- Website
- markuplint.dev
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from markuplint
- 0.817score
impl
markuplint
Implementation orchestrator — takes an agreed plan through implementation, carry-over approval, code review, security review, QA, docs consistency, lint/test…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
release
markuplint
Release markuplint — branch promotion, version bump (lerna fixed mode), tag push, publish workflow monitoring, npm-state verification, GitHub Release notes…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
qa-engineer
markuplint
Review a diff of this repository as a QA engineer: test quality (coverage, test-faking code, swallowed exceptions, conditional logic in tests, hardcoded…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
product-manager
markuplint
Review a diff of this repository from a Product Manager (PdM) perspective: documentation consistency (JSDoc placement, comment policy, README accuracy)…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
verify-docs
markuplint
Verify documentation claims (README, JSDoc) in spec-heavy packages — @markuplint/types (attribute value types; WHATWG/W3C/RFC/CSS/SVG grammars) and…
SkillAFreshness: A★ 629Claude Code +9 - 0.811score
pr-review
markuplint
Review an external pull request for the owner: check it against the intake conditions of CONTRIBUTING.md (eligible issue, required body sections, no burst of…
SkillAFreshness: A★ 629Claude Code +9
Cite this page
bench-triage skill. Agent Mart. https://agentmart.dev/skills/markuplint-bench-triage (last updated 2026-10-24)