bench-maintain
Maintenance of the nu-validator coverage benchmark: defend the invariants (nu-only = 0, xref audit green), follow up a nu-validator upstream update (submodule…
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-maintain
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, devops, 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-maintain
What's inside
- Skill name
bench-maintain- Description
- Maintenance of the nu-validator coverage benchmark: defend the invariants (nu-only = 0, xref audit green), follow up a nu-validator upstream update (submodule bump / Docker image drift), and regression-check after markuplint rule or spec changes. Use when updating the validator submodule, when a bench refresh surfaces new nu-only entries, when excluded-ids entries go stale, or for the periodic health check. Trigger keywords: bench maintain, bench maintenance, nu update, submodule bump, validator update, bench refresh, nu-only regression, stale excluded-ids, image digest.
- License
- MIT
- Metadata
- internal: true
- Instructions
- 130 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# nu-validator Bench Maintenance Skill The job is not to reduce a backlog but to **defend invariants** across upstream updates and markuplint changes. Per-fixture verdict work is still `bench-triage`; environment recovery is still `bench-setup`; issue-body sync is still `bench-xref`. This skill is the loop around them. ## Invariants to defend After every full refresh, all of these must hold before committing: | Invariant | Check | | --- | --- | | No unprocessed coverage gaps | `snapshots/diff/nu-only.json` has `"entries": []` | | No untracked exclusions | every `excluded-ids.json` reason cites a spec URL and, for `deferred-*`, an OPEN tracking Issue | | No stale issue mappings | `yarn bench:xref --audit` reports all mapped issues OPEN | | nu ran clean | `snapshots/diff/nu-failures.json` is empty | A new `nu-only` entry after a refresh is never noise to sit on — it is one of exactly three things (see decision tree below), and each has an owner action. ## Two upstream update axes nu-validator updates reach the bench on two independent axes; know which one moved before interpreting a diff (`tests/external/snapshots/meta.json` records both — compare against the committed previous version): - **Fixture corpus** — the `tests/external/validator` submodule (`submoduleSha` in meta.json). Moves only when you run `git submodule update --remote tests/external/validator`. - **nu engine** — the Docker image. `bench/docker.ts` pulls `ghcr.io/validator/validator:latest` and resolves it to an immutable digest (`nuValidatorImage` in meta.json) at each `yarn bench:update` / `--target nu` run. The engine therefore drifts implicitly whenever upstream publishes, even with an unchanged submodule. Because the engine follows `:latest`, a "routine" full refresh can change verdicts by itself. That is expected — the digest in meta.json is the audit trail. ## nu update follow-up procedure 1. Bump the fixture corpus (skip to step 2 for an engine-only refresh): ``` git submodule update --remote tests/external/validator ``` 2. Full refresh (Docker required; pulls the current engine): ``` yarn bench:update ``` 3. Diff `tests/external/snapshots/meta.json` against the committed version: which axis moved (`submoduleSha`, `nuValidatorImage`), and do the totals (`totalFilesNu`, `totalNuMessages`) shift plausibly with it? 4. Classify every new `nu-only.json` entry — three causes, three actions: | Cause | How to recognize | Action | | --- | --- | --- | | New upstream fixture or new nu check | Path is new to the corpus, or the message id is new on an old fixture | Run `bench-triage` on it (spec read → rule fix, Issue, or exclusion). This is the normal intake path for new coverage. | | Stale per-`id` exclusion | Fixture was `nu-over`; its `excluded-ids.json` entry no longer matches because nu changed the message wording (the `nv-<hex12>` hash is derived from the message) | Re-read the entry's spec citation; if the conclusion still holds, re-pin the new id (keep the reason, update `addedAt`). If nu's new wording changes the substance, re-triage from scratch. | | markuplint regression | Fixture was `match-error`; ml side no longer reports | Treat as a bug in the responsible rule — find the causing commit, fix or revert. Do not exclude. | 5. Pattern-based exclusions fail in the opposite direction — silently. A wording change makes a `patterns[]` entry stop matching without any `nu-only` reappearance (the fixture just flips verdict). Check the `nu-over` headcount against the expected counts recorded in pattern `reason` fields, and re-check any `deferred-*` counts in the `bench-triage` "Deferred specs" table. 6. Verify all invariants (table above), then sync issue bodies: ``` yarn bench:xref --audit yarn bench:xref --all --dry-run --write ``` `--write` edits GitHub Issue bodies. Show the user the previewed new bodies and get their go-ahead, then apply (`--audit` rejects `--dry-run` / `--write`, so it stays a separate command): ``` yarn bench:xref --all --write ``` 7. Commit `snapshots/diff/*`, `snapshots/meta.json`, `snapshots/excluded-ids.json`, the submodule pointer, and any `issue-xref.config.ts` edits as a `test:` commit describing what moved (submodule range and/or image digest). Raw snapshot trees stay gitignored. Before acting on any single surprising fixture, pin it with `--concurrency 1` (see the concurrency caveat in `bench-triage`) — parallel-run flicker is not a signal. ## markuplint-side regression check After a rule / spec / parser change that could affect bench-covered behavior (no Docker needed): ``` yarn bench:update:ml yarn bench:compare ``` - `nu-only.json` must stay empty. A new entry here is always a regression caused by the change under test — there is no upstream axis involved. - Diff the `ml-only` path set against the committed snapshot. Growth is acceptable only when each added path is explained by the change (spot-check per the "ml-only readings" note in `bench-triage`); shrinkage means detection was lost somewhere — explain every disappeared path before committing.
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 (13 days ago)
- Last release
- Oct 21, 2026 (8 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-maintain skill. Agent Mart. https://agentmart.dev/skills/markuplint-bench-maintain (last updated 2026-10-24)