본문으로 건너뛰기
cccskills
무료GitHub에 공개

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 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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

markuplint/markuplint스타 630(GitHub 630 + cccskills 0)
연동 도구Docker

실행 점수 미검증

설치 방법 보기

포함된 파일(1)

  • SKILL.md6.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

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:

InvariantCheck
No unprocessed coverage gapssnapshots/diff/nu-only.json has "entries": []
No untracked exclusionsevery excluded-ids.json reason cites a spec URL and, for deferred-*, an OPEN tracking Issue
No stale issue mappingsyarn bench:xref --audit reports all mapped issues OPEN
nu ran cleansnapshots/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:

    CauseHow to recognizeAction
    New upstream fixture or new nu checkPath is new to the corpus, or the message id is new on an old fixtureRun bench-triage on it (spec read → rule fix, Issue, or exclusion). This is the normal intake path for new coverage.
    Stale per-id exclusionFixture 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 regressionFixture was match-error; ml side no longer reportsTreat 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.

Periodic health check (cheap, no Docker)

yarn bench:xref --audit runs on relevant PRs and a weekly cron (.github/workflows/bench-xref-audit.yml), so CLOSED-issue mappings surface on their own. What has no automation is upstream drift: the engine and corpus only move locally when a maintainer runs the update, so schedule a full nu update follow-up (steps above) periodically — before each release at the latest (see the pre-release checklist in bench-xref).

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Enable an existing or newly-added markuplint rule on the nu-validator bench by editing tests/external/bench/config.ts. Covers the flat-rule case (rules: { '<name>': true }) and the severity override case (rules: { '<name>': { severity: 'error' } }) that bench-virtual-rule does not. Use when a rule exists in the registry but the relevant nu fixtures stay nu-only because the rule is not enabled in the bench config, or when a rule's default severity is warning but the spec text it mirrors is a MUST / MUST NOT. Trigger keywords: enable bench rule, bench config flat rule, severity override bench, rule not flagging on bench, warning vs error in bench, escalate severity bench, no-contradictory-aria-prop bench, bench coverage missing rule.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

markuplint/markuplint6302026년 10월 26일 업데이트

Set up the nu-validator benchmark environment — initialise the validator submodule, ensure Docker is running, populate the gitignored raw snapshots via yarn bench:update. Also covers Docker / nu-runner troubleshooting. Use when bench commands fail with "no snapshots found", "Docker daemon not reachable", port 28888 conflicts, or healthcheck timeouts; or when refreshing the bench after a long break. Trigger keywords: bench setup, bench Docker, validator submodule, no snapshots found, Docker daemon not reachable, healthcheck times out, port 28888, yarn bench:update first time, bench install, fresh clone bench.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

markuplint/markuplint6302026년 10월 26일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

markuplint/markuplint6302026년 10월 26일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

markuplint/markuplint6302026년 10월 26일 업데이트

Sync benchmark cross-reference blocks onto GitHub Issue bodies via `yarn bench:xref`, manage `tests/external/bench/issue-xref.config.ts` mappings, and run the pre-release checklist. Use when adding / removing / updating a primary or secondary mapping, when an issue closes upstream, when the xref CLI's output disagrees with what's on the issue body, or before cutting a release that touches a rule the benchmark covers. Trigger keywords: bench-xref, issue-xref, xref CLI, GitHub issue body, primary mapping, secondary mapping, umbrella block, pre-release checklist, bench-xref-audit workflow, marker version.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

markuplint/markuplint6302026년 10월 26일 업데이트

Investigate a problem to its root cause and file it as a GitHub Issue with the right labels and an As is / To be / Why / How body backed by primary sources. Use when asked to file, create, or open an issue, or when the `impl` skill hands over a carry-over. Trigger keywords: create issue, file an issue, open an issue, report a bug as an issue.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

markuplint/markuplint6302026년 10월 26일 업데이트

markuplint의 스킬 모두 보기

이 스킬의 문제 신고