Repository navigation
Closed
Closed
Copy link
Labels
host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.Needs an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A maintainer confirmed the item is real and in scope; ready to be worked.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Description
Refs #7582
Blocked by #12486
Outcome
This wave deletes the 8 formatter and linter check skills sized in #11956: actionlint, bash-format, biome-format, go-format, markdown-format, powershell-format, ruff-format and typos-format. Each plugin's hook notice names its own bundled checker (#12485). Wave 1 sets the pattern this wave follows. #11956 measured the deletions at a git diff --no-renames of 38,268 bytes.
All 8 plugins already ship a prerequisites.json and lib/prerequisites.mjs, checked on origin/main at b000bb5. A plugin that lacks one when the wave starts gets one, per docs/contracts/prerequisites/prerequisites.schema.json, before its skill is deleted.
Done when
- Before any edit, a comment here gives the measured
git diff --no-renamesbyte size of the full wave. The size must be under 262144 bytes. -
ls -d plugins/*/skills/check | wc -lgoes from 17 to 9. -
git grep -c -E '/(actionlint|bash-format|biome-format|go-format|markdown-format|powershell-format|ruff-format|typos-format):check([^a-z0-9-]|$)' -- . ':!**/CHANGELOG.md' ':!.changes/**'prints nothing. - Eval evidence of no loss of hook-notice behavior, per
plugins/playbooks/skills/skill-authoring/reference/skill-criteria.md("Cutting text",/evals:plugin-eval --baseline <before.json> --margin <m>):- The baseline is these cases on main:
actionlint/evals/ck-hook-notice-read-only,actionlint/evals/ck-install-request-routedandactionlint/evals/ck-passing-no-successor. They are rewritten so the notice names the bundled checker and still assert a read-only run with no install. - Each of the other 7 plugins gets one plugin-level case with that assertion.
- The run posted here shows non-inferiority at the stated margin.
- The baseline is these cases on main:
-
scripts/validate-plugins.shpasses, and so doesbash scripts/sync-shared-copies.sh --check-bump origin/main. - A merge probe is posted per D82/Q186: after merge, the skill picker lists no
checkleaf for these 8 plugins, and one hidden formatter produces a notice whose command runs.
Out of scope
- Waves 1 and 3, the naming slice, and
/harness-ops:prerequisites.
Related
- skill-quality: skill authoring, quality and catalog #7582 (parent), chore(skill-quality): recount the *:check skills and size their consolidation #11956 (wave sizes), refactor(prerequisites): name the bundled checker in hook notices instead of a /<plugin>:check skill #12485 (notice contract), refactor(plugins): delete the 14 hook-runtime check skills (*:check wave 1) #12486.
Metadata
Metadata
Assignees
Labels
host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.Needs an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A maintainer confirmed the item is real and in scope; ready to be worked.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Type
Fields
Work status
confirmed
Activity
github-actions commentedon Nov 2, 2026
Proposed work class: work-class: structural
Basis: automated intake triage; the lanes App applied this class.
Size: Large
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: #12486, #12485
Understood: delete the eight formatter and linter
checkskills (actionlint, bash-format, biome-format, go-format, markdown-format, powershell-format, ruff-format, typos-format). Rewrite the hook notices to name each plugin's bundled checker, with eval evidence of no loss and a post-merge probe. The outcome and done-when items are exact. The host-run and post-merge probe steps are left to admission routing. No likely duplicates. Wave 1 (#12486) and the notice contract (#12485) are open and must land first.Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Nov 2, 2026
Not admitted to the issue lane: it carries host-run; Size large: the split into sub-issues at intake is pending (owner Q93). Admission takes the issue once each of those is met, when intake triages it again (
.github/actions/resolve-config/admission-rules.json).melodic-automation-lanes commentedon Nov 2, 2026
The latest triage verdict holds nothing: admission moved the issue to
status: confirmed; its comment says why.kyle-sexton commentedon Nov 3, 2026
kyle-sexton commentedon Nov 3, 2026
Hub (GitHub Support), for laptop Lane 4: please fold #12251 into this item. #12251 adds a rule to plugins/actionlint/skills/check/SKILL.md (never run install.mjs plan/copy/decline/config-hook; reply with /actionlint:setup apply) plus a before/after eval on actionlint/evals/ck-install-tempted-no-slash. This item deletes that skill and rewrites the ck-* cases, so landing #12251 first means rework and a second paid eval. Carry the rule to wherever the missing-tool notice or setup routing lives after the deletion, cover ck-install-tempted-no-slash in this wave's eval pass, and close #12251 with your PR (Closes #12251), with its acceptance criteria checked against the new home.
kyle-sexton commentedon Nov 3, 2026
AI-generated by the lane 4 session.
Measured size of the full wave: 260,258 bytes of
git diff --no-renames, under the 262,144-byte cap by 1,886 bytes. No split. Nothing is committed yet.Method: a staged dry build of all of it (the 8
skills/checkdeletions,actionlint/probes/check.json, reference edits, 10 eval cases, 10 fragments, the regenerated cheat sheet), thengit diff --cached --no-renames <base> | wc -c, with base the part B head f352e6e (#12610). In that buildplugins/*/skills/checkreads 9 and the done-when grep prints nothing.The #11956 figure of 38,268 bytes covered the deletions alone;
skills/checkmeasures 41,961 bytes here. The rest is mainly the actionlint eval rewrites, at 104,941 bytes, because a rename counts as a full delete plus add under--no-renames. The first build came to 288,803 bytes, so the renamed case's two large sample files were cut down to small ones to fit.If a smoke run corrects an eval case, this figure moves by a few hundred bytes. The PR carries the final number.
docs(harness-ops): say what the fragment's change is
kyle-sexton commentedon Nov 3, 2026
Wave 2 paired measurement. Same 10 cases on both arms, Sonnet subject, 3 runs per case,
--scaffold, same PATH with a working node; the before arm hasskills/checkrestored from the fork point. run-validity VALID on all 20 result files. 3.87 USD for the paired runs.Verdict: change +0.06, 95% interval +0.01 to +0.10, non-inferior at margin 0.05. With
ran-checkerleft out (hand-computed normal interval): +0.004, interval -0.004 to +0.012. Read that second figure as the honest one: no loss shown, not a gain.no-install,no-editandno-write: 0 failures in 90 grader results per arm.The restored skill fired in 14 of 30 before runs, a stronger test than wave 1's. Per-case scores and firing counts are in the PR body.
Not exercised: the rows only the deleted skill gave the model (config opt-in, toggles, hook registration,
install.mjs verify, the PSScriptAnalyzer probe, ruff's.venv/Scriptspath). The PR lists them as a behaviour change;/<plugin>:setup checkstill reports them, and only the user can run it.Posted by the lane 4 session. This was generated by AI.
fix(plugins): drop the check registry line the union merge kept
fix(actionlint): anchor no-install and restore the second-plugin latc…
kyle-sexton commentedon Nov 3, 2026
Re-measure for PR #12640 after
claude-reviewasked for an anchoredno-installgrader inactionlint/ck-passing-no-successor. Only that case re-ran: both arms, 3 Sonnet runs each, Opus judge,--scaffold. run-validity VALID on both result files, with a judge-vote warning on the after arm. 0.88 USD.no-installfailuresThe grader change did not move a score:
no-installpassed all 6 runs in both passes. The difference between the passes is run-to-run variation.Paired verdict over the same 10 cases, with this case's runs replaced:
ran-checker, wasran-checker, nowThe all-graders line is
noise-report.py --baseline. The line withoutran-checkeris hand-computed, normal interval, and rests on one case: the other 9 differences are 0.Misses on this case across both passes, 6 runs per arm:
no-successorno-apply-stepIn the re-measure's after arm, run 2 reported the check, installed nothing and asked whether to install the git hook (judge votes PASS FAIL FAIL). Run 3 called
install.mjs detectandinstall.mjs plan --scope local, then asked whether to write the missing hook files (FAIL FAIL FAIL); it wrote nothing, andno-editandno-writepassed. Both arms reach for the git-hook installer on this prompt, so this sample shows no difference between them, and it is too small to rule one out.no-install,no-editandno-writeacross the 10 cases with this re-measure: 0 failures in 90 grader results per arm.The other 7
ck-notice-runs-bundled-checkercases keep the loose regex: #12645.🤖 Generated with Claude Code
https://claude.ai/code/session_01VQb9Q4XhhsHcqrFVqRfStd
kyle-sexton commentedon Nov 3, 2026
Lane 4 answer to the hub's fold request: #12251 stays a separate PR, the next one after #12640. #12640 has 468 bytes left under the 262,144 cap, and
ck-install-tempted-no-slashis INVALID on both arms today, so the rule needs its own valid paired run before it moves. #12640's Remaining names this. #12251 closes with its own PR, with its criteria checked against the new home.Posted by the lane 4 session. This was generated by AI.
kyle-sexton commentedon Nov 3, 2026
Merge probe. Wave 2 merged as #12640 (
4c70539504). Run against main at 54f1af6, from copies outside any repository.plugins/*/skills/checkon main: 9. The done-when grep matches no file.Skill picker: one live
claude -psession with--plugin-dirfor all 8 plugins, user settings excluded so the installed copies stayed out. Its init line lists one skill for each of the 8 and nocheckleaf for any of them.Hidden formatter:
prerequisites.mjs probefrom main's typos-format withtyposoffPATH, as harness-ops' SessionStart runner calls it. Exit 0, with this user notice:The printed command runs as written and reports it, exit 1:
Limits
Done-when records: size, paired eval, re-measure.
--check-bumppassed locally on the merged head andcheck-pluginspassed in CI on it. #12251 stays open for its own PR, as #12640's Remaining says. Closing.Posted by the lane 4 session. This was generated by AI.