Repository navigation
Releases
v3.1.0
Minor Changes
-
#350
b4e5712Thanks @MrBinnacle! - Rename the domain glossaryCONTEXT.mdtoGLOSSARY.md— the name Pocock v1.3.1 reads. Update live instruction surfaces (CLAUDE.md, AGENTS.md, PRODUCT.md, docs/agents/domain.md) and the voice-provenance shipped-surface list. Dated records and quarantined example text keep the old name as written. -
#369
f2d5534Thanks @MrBinnacle! -im-upreceiver checks may declarecache_inputs. The validator keys each such check on a sha256 over the command string, the Python version,git --versionand the sha256 of each input file's bytes on disk (working files, not git blobs; a directory input covers every file under it, untracked and ignored ones included); a key matching its last passing run is not re-run and is reportedcachedwith that key and the time of the run that produced it. Only passing runs are cached. Every receipt check gainsstatus(passed,cached,failed) andduration_ms. Once a week every check runs uncached and is compared with its cached verdict; a disagreement fails the open and clears that entry. The cache file lives outside the tree. A config with nocache_inputskeeps the prior verdicts and fields, plus the two new ones. Card documentation states whatcachedpromises. Shared validator and suite stay byte-identical across theim-up/im-downpair. Implements the session-boundary design step from the parent research ticket (#450, step 2 / design D3).
Patch Changes
-
#454
efba6d1Thanks @MrBinnacle! - Define the install route by what a consumer resolves (ADR 0005), so a version bump prices only a change an installed user can observe. Nothing changes for an installed user. -
#440
9b5ccaaThanks @MrBinnacle! -im-upandim-down: a receiver check whosecache_inputsis not a list of path strings is now refused with a named error. Before, a bare string was read one character per path and silently cached against the whole tree (#401). -
#450
f57f020Thanks @MrBinnacle! - docs(product): add a claims ledger and a consistency sweep for #443. The ledger records, for each
claim the repository makes, the allowed and forbidden wording, the evidence and a status. The
sweep quotes each public surface and marks replacement wording as a candidate for the owner. No
public surface, card, install command or version changes. -
#457
eecd5a5Thanks @MrBinnacle! - docs(product): amend the #443 claims ledger. C6 now cites the #452 measurement of the Windows path limit: 108 characters of config root for the HTTPS form, measured with Claude Code 2.1.302 on 2026-10-17. The S2 Pi candidate uses the C2 third-person wording. The sweep adds the twonpx skills addsentences that C7 forbids as a current install claim. No public surface, card, install command or version changes. -
#460
98e5c7cThanks @MrBinnacle! - docs(product): scope the claims ledger's Windows long-path figures to the measured tree and host. C6 now records that Windows long-path support is an opt-in setting, ties the 108 and 157 figures to the 3.1.0 candidate tree, and forbids reading the install receipt as evidence that the skills work in a session. No public surface, card, install command or version changes. -
#459
b18605dThanks @MrBinnacle! - docs(product): record a controlled Windows install receipt for a long Claude configuration directory, and cite it in the claims ledger. Withcore.longpathsset, the HTTPS marketplace form installed all three plugins at config roots of 109, 140 and 157 characters, and failed at 158; without it, 109 failed. C7 now names v2.0.0 as the last recordednpx skills addrun. No public surface, card, install command or version changes. -
#410
91ed57dThanks @MrBinnacle! -clirunner-env's description now routes on the filtered-dict,env={}andmonkeypatch.delenvbranches a CLI test actually hits, its ClickCliRunner.invokeenv claims carry a 2026-10-06 check date against Click 8.5.x, and a private provenance name is gone from the card body. -
#436
21e7b70Thanks @MrBinnacle! -closure-mode: the undefined "Bannister" label is replaced by a plain primary-reference check, the Obsidian example and an unverifiable adoption claim are removed, and the oh-my-claudecode agent ids are dated against 5.7.4 (#381). -
#397
199ac7bThanks @MrBinnacle! - No installed card changes. A comment in the scheduled conformance workflow now states theprotect-mainruleset and its six required checks, measured 2026-10-05, in place of the stale claim thatmainhad no branch protection. -
#406
2341482Thanks @MrBinnacle! -dead-predicatenow loads when a hook didn't fire or a reminder never arrived, and it diagnoses three more ways a live router rule matches nothing: a rule shadowed by an earlier one in a first-match router, a rule naming a skill that was renamed or uninstalled, and a rule whose pattern never reaches the case that would refute its claim. Its probe scripts moved to a newprobes.md, take the rule file fromRULESinstead of a hard-coded name, and decode the JSON before scanning for\b. -
#438
7cac6f2Thanks @MrBinnacle! -decision-rights: the description now routes on "do not re-litigate", "final", "non-negotiable" and briefs. The card states how a handoff passes on a standing decision from an earlier session, and states the Revisit-if rule once instead of three times (#385). -
#400
8924eefThanks @MrBinnacle! - Each card'sDispatches recordedrow now counts the card under every name it has been invoked by (its name before the v2.0.0 rename and its plugin-prefixed form) and no longer counts the usage log's repeated lifetime baseline twice, sodecision-rightsreads 173 where it read 2 andim-upreads 260 where it read 361. The two hook-fired cards keep their note that the counter cannot see hook firings once their count is above zero. -
#453
bc28253Thanks @MrBinnacle! -disposition-schema: the description now routes on consolidating seat outputs and on ID collision. The Verification section is a checklist with the finding-count check, the Example is a filled seat prompt and return, and the adversarial-verify template records a measured first-verdict disagreement rate (22 of 34 CI-green pull requests) with its four caveats (#388). -
#373
c516440Thanks @MrBinnacle! - Themrbinnacle-engineeringplugin description now names the three kinds of card the plugin holds: mistakes that report success, guards and gates that stop your work, and the rituals at phase and session boundaries. The old description named only traps and checks, which did not fit three of its cards. If you already have the plugin installed, you have nothing to do (#363).
v3.0.1
Patch Changes
-
#322
5db554aThanks @MrBinnacle! - Add plugin eval cases fordecision-rightsandsubagent-handbackunderskills/orchestration/evals/: three moved from the research repo unchanged except for their plugin path, and one new should-not-fire case fordecision-rights. The card validator no longer reads thatevals/directory as a card. The cases have not been run. -
#319
4e80582Thanks @MrBinnacle! - Remove the stale_quarantine/subagent-research-reliability/directory. Its provenance describes
the dead-letter patch shipped in756403a; the livesubagent-handbackcard still contains the
three references the provenance names, so no unique copy was lost. Conformance O8 now rejects a
quarantine directory whose name matches a published card, preventing promotion residue from
returning. The standing obligations move toconformance v4because O8 is a new obligation. -
#325
4f268c3Thanks @MrBinnacle! - Correct every model-invocable card's stated standing cost from the pinnedskill-harnessaudit.
Add a CI check and poison control that reject stale or mismatched cost records. -
#331
1557bacThanks @MrBinnacle! - The README, the marketplace description and the Pages site now make only claims the cards' own records support. The README no longer says every skill passed the admission policy (the 2026-08-15 triage found most do not yet meet all four questions) or that every skill came from an incident (im-downandim-upwere designed), and it states the completedpull-rebasescreen result instead of "under way". The marketplace description names what every card carries: an evidence record, test cases and a retirement condition. Themrbinnacle-metadescription drops "whether a skill should exist", a subject whose card retired in August. On the site, four links that pointed at README headings moved by #324 now point at CATALOG.md, where the three "What this isn't" sections are restored, and the install block adds the/plugin installstep and names all three plugins. A new check,scripts/validate_site_links.py, fails CI when a site link or its anchor does not resolve. -
e5116d6Thanks @MrBinnacle! -pull-rebase's paired verdict now readsCANT_TELL_YET (stale receipt: card_hash_mismatch). The receipt was issued against the card'sSKILL.mdbefore the v2.0.0 rename changed its bytes, so under the rotation pass's currency gate it no longer disposes anything; the link stays as history. The verdict word is unchanged. The conformance check O5, run with the harness root, failed on this row until now. -
#324
5460176Thanks @MrBinnacle! - The README now leads with what each skill is for and what ships with it; the checked evidence tables, admission detail, install detail and repository layout moved to CATALOG.md unchanged, and the checks moved with them. -
96e5eaaThanks @MrBinnacle! - Record four observations on theuniform-eolcandidate's open re-test (the S432 disposition, step 2) and two new occurrences in its evidence record, which now counts six. Every git-visible conversion with a recorded instrument since the repaired line-ending guard was built was caught, including one this collection's ownrefresh_dispatch_counts.pycaused on 2026-09-30. That leans toward the record's first branch, under which the card stays in_quarantine/until two git-invisible occurrences are counted; one is counted today. The candidate is not admitted.
v3.0.0
Each plugin is now its own root. skills/<bucket>/.claude-plugin/plugin.json states the plugin's name, version and exact card list, and each marketplace entry points its source at that bucket. Before this release, claude plugin eval loaded each plugin with no name, no version and no skills, so an eval of this collection could measure nothing and still report a score. The install path changes from the whole repository to one bucket, which is a major change under ADR 0002. ADR 0004 records the decision. The standing obligations move to conformance v3. Seven changesets were consumed, and the full list is the v3.0.0 section of CHANGELOG.md.
v2.0.0
The major that #286's card renames already delivered. Eleven published cards were renamed on 2026-09-08 and ADR 0003 rules a card's name part of the declared surface; both install routes track main, so every installer received the rename under 1.6.0. This release makes the version number describe what installers already have. Twelve changesets consumed; the full list is the v2.0.0 section of CHANGELOG.md.
v1.6.0 — the landing page ships, and the front page states what an install writes (14 skills)
14 cards, unchanged from v1.5.0. This release adds no card and retires none.
The landing page ships
site/ carries the page source: one HTML file, one stylesheet, every value drawn from assets/tokens.json, seven Phosphor icons vendored inline under MIT. A GitHub Actions Pages workflow publishes that directory plus the favicon and the social preview, and nothing else. The page is live at https://mrbinnacle.github.io/skills/.
site/style.css joins the declared-hex check in the same release. Before this, a colour reaching a reader through the page was unchecked while the same colour in an asset was refused. A stranger meets the palette on the page first, so the page was the surface with no gate on it.
The front page states what an install writes
Three claims on README.md were false. Each was found by running every documented command in a scrubbed clean environment, and each is corrected against that measurement.
The install is not inert Markdown. A clean-environment run installs 88 files under .claude/skills/. 23 are not Markdown and 7 are Python: the scripts im-down and im-up instruct a reader to run. The page said both install routes copy Markdown files and that there is nothing to import and no framework to run. Nothing executes at install time, and that part was true; the description of the payload was not.
The installer writes three things, not one. .claude/skills/, a second complete copy of every card in .agents/skills/, and a skills-lock.json. Two of the three were undocumented.
A card directory holds four required files, not three. Every card carries evals/evals.json alongside SKILL.md, gotchas.md and EVIDENCE.md. Across the collection, 46 tracked files sit outside the three the page listed.
This is the first release of this collection whose front page has been checked against a cold install rather than against CI.
Gates that now check the surface they were missing
- One word list binds every line of prose the repository publishes, over every tracked
.mdexcept frozen candidates and the changelog. Twenty-five lines were rewritten to name the thing the sentence pointed at. validate_brand_kit.pyselects the tracked set from the index instead of walking the working tree, so the scanned set no longer depends on what a clone happens to hold.- A residue term in a file or directory name is refused in its underscore, hyphen and dot forms; the vale-prose hook lints the same three paths CI lints; a new
_quarantine/candidate is refused unless it declares its landing. tokens.jsonno longer documents two permissions that no checker implements. A contributor who read a note and wrote the sentence it described was refused by a build the documentation said would accept it.
The banner line
Retired and replaced at eleven places across six files. It now reads "14 skill cards. Each states the condition that would retire it."
Session boundary cards
im-down refuses to write a packet after measuring a receiver check red, and states the computed safe-to-clear verdict. A REJECTED receipt now says whether every packet assertion held and names the failing receiver checks, so a rejection caused by a defective gate is distinguishable from one caused by a bad packet.
Dependencies
Vulnerable transitive js-yaml packages refreshed, and a scheduled high-severity dependency audit added. Thanks to @mikemikimike.
What a version promises
The install path and the card format, not the card set. Admitting or retiring a card is a minor change. Moving the install path or changing a card's format would be major. ADR 0002 records why that surface is narrow.
Full entries: CHANGELOG.md.
v1.5.0 — three authoring rules gated, and evidence corrected (14 skills)
Delivered 2026-09-06 at eaabf9f. 14 published cards, unchanged. Twenty-two changesets, one of them minor.
This release record was created on 2026-09-07. The delivery happened when the version-bump pull request merged to main, which is what ADR 0002 makes the release event; the tag and this page record it. No Release object accompanied the tag at the time, so this repository's Releases page showed v1.1 as the latest release while four deliveries shipped past it. That gap is what this page closes.
What it delivered
Three authoring rules that were machine-checkable but ungated are now gated. scripts/validate_card_files.py grows checks for SKILL.md size bounds (400–7,168 bytes), local link resolution with case matching, and reader-facing auxiliary reachability from SKILL.md through local links.
Three details in that check are worth stating, because each closes a way the check could have been fooled. Exemption patterns for test and build files are tree-wide, and a stale pattern is reported only when the tree already uses exemptions. Link extraction follows markdown only, so Python subscript syntax cannot be mistaken for a markdown link. Case matching walks directory entries, so a case-insensitive filesystem cannot hide a mismatch.
The live tree was brought green in the same change rather than after it: missing EVIDENCE.md and gotchas.md links were added on twelve cards.
Corrections to the collection's own evidence. Several patch entries revise what earlier measurements can support. A July screen ran on a prompt that named the skill's own rule, so its bare arm was coached and its 1.00 pass rate measured a warned model rather than an unaided one. A paired run from 2026-09-01 was re-ingested under a corrected detector — same two logs, same pin, a different reading of them. A currency gate added on 2026-08-30 was found wrong and repaired.
One card that named a gate sequence on two surfaces and implemented it on neither now ships audit_frontend.py with six parser-backed gates.
What the version number promises
The declared surface is the install path and the card format. The card set is not part of it: adding or retiring a card is a minor change, changing the install path or a card's on-disk shape is a major change, and a correction inside a card is a patch. Both documented install routes track main, so a consumer receives changed cards when a version bump merges, not when a tag is pushed.
Full changelog
Read the complete section at CHANGELOG.md.
v1.4.0 — the collection retires its own gate card (14 skills)
Delivered 2026-08-31 at 9cf70c5. 14 published cards, down from 15. Nineteen changesets, one of them minor.
This release record was created on 2026-09-07. The delivery happened when the version-bump pull request merged to main, which is what ADR 0002 makes the release event; the tag and this page record it. No Release object accompanied the tag at the time, so this repository's Releases page showed v1.1 as the latest release while four deliveries shipped past it. That gap is what this page closes.
What it delivered
The collection retired its own gate card, because the gate card could not pass its own gate. skill-necessity-gate is removed.
ADMISSION.md criterion 1 requires an unaided failure that was observed, not predicted. The card's own EVIDENCE.md answered Occasions counted | 0 — no triggering occurrence, and no occurrence appeared across the card's whole life. That defect is not repairable by rewriting: an occurrence can only be found. The S295 admission triage recorded the card RECURRENCE-THIN on 2026-08-15 and deferred the call; this release makes it.
A third retirement route was added to AGENTS.md before it was used. Withdrawn on the policy covers a published card removed because it cannot satisfy the admission policy it is measured against, with the card's own evidence record as the proof and no screen required — because the failing criterion counts occurrences rather than measuring lift. The route is written narrowly: it fires on a criterion the card's own record demonstrably fails, and the changeset must quote the failing row.
Two rules outlived the card and moved into AGENTS.md in the same commit that removed the directory, so nothing that cited the card now cites a deleted file. The topology rule — decide model-invocable against procedure by asking who does the strategic thinking — is one of them.
What the version number promises
The declared surface is the install path and the card format. The card set is not part of it: adding or retiring a card is a minor change, changing the install path or a card's on-disk shape is a major change, and a correction inside a card is a patch. This release is the case that rule was written for. A scheme under which retirement forced a major bump would either inflate the major number until it carried no information, or create a standing incentive not to retire — and this collection retires cards on recorded evidence and says so on its front page.
Both documented install routes track main, so a consumer receives changed cards when a version bump merges, not when a tag is pushed.
Full changelog
Read the complete section at CHANGELOG.md.
v1.2.0 — the session-boundary pair (9 skills)
Delivered 2026-08-10 at 07fe466. 9 published cards, up from 7.
This release record was created on 2026-09-07. The delivery itself happened when the version-bump pull request merged to main, which is what ADR 0002 makes the release event; the tag and this page record it. The tag was pushed on 2026-09-06 and no Release object accompanied it, so this repository's Releases page showed v1.1 as the latest release while four deliveries shipped past it. That gap is what this page closes.
What it delivered
The session-boundary pair. Two cards were added under skills/engineering/, then renamed to im-down and im-up, four verification holes found while adopting them were closed, and their validator suites were wired into CI so the pair is checked on every run rather than on the day it was written.
What the version number promises
The declared surface is the install path and the card format. The card set is not part of it: adding or retiring a card is a minor change, changing the install path or a card's on-disk shape is a major change, and a correction inside a card is a patch. Both documented install routes track main, so a consumer receives changed cards when a version bump merges, not when a tag is pushed.
The session-boundary pair, and the first CI job that runs this collection's own code.
im-down and im-up carry one session's state into the next as an audited packet rather
than as conversational memory. They arrived, were hardened against four verification holes
found while adopting them in a real repository, and were renamed. Nine skills now.
Minor Changes
-
#9
20bae6c— Add the session-boundary pair underskills/engineering/:im-down(producer — one
atomic packet with a hidden JSON manifest, deterministic snapshot script, and validator) and
im-up(receiver — treats the packet as untrusted data, verifies branch
and HEAD, probes typed claims, runs only repository-configured checks, and emits an explicit
acceptance receipt). Both are human-invoked (disable-model-invocation: true), configured via
.claude/session-boundary.json, and ship with four fixture classes (clean accepted; stale
HEAD, missing required field, and failed probe all rejected). No Stop hook ships in this
release. -
#11
fc5009c— Rename the session-boundary pair toim-down(producer, session close) andim-up(receiver,
session start). The old names described the machinery; these describe what the operator is
actually doing — signing off, and coming back. They also resolve a real collision: the previous
receiver name was identical to a widely-installed local skill of the same name, so the two
could not coexist in one library.No behavior changes. Directory names, frontmatter
name:fields, bucket README, top-level
README, and the pair's own cross-references all move together, and the validator drift
assertion tracks the new directory names.
Patch Changes
-
#10
fa81634— Close four verification holes found while adopting the session-boundary pair in a real
repository. Each was reproduced against the shipped code before it was changed.- A
commandprobe was never executed, yet its claim keptverifiedand the packet was
ACCEPTED on an advisory note. Refusing to run packet-supplied commands was the right call;
leaving the status untouched let any unverifiable claim be laundered by choosing that probe
kind. A command probe now runs only when the repository config authorises the exact command
(receiver_checksor the newtrusted_probe_commands), and an unlisted probe rejects the
packet. - Receive mode without
--configskipped every configured check and still returned ACCEPTED.
It now rejects: a verification an omitted argument switches off is not a verification. - The example
receiver_checksentry wasgit status --porcelain, which exits zero on a
clean tree, a dirty tree, and a deleted tracked file alike, so the only shipped example
could not fail. The example is nowgit diff --quiet && git diff --cached --quiet, and the
validator reports a known always-zero check as a note. - A narrative sentence quoting a ticket title containing the word TODO rejected an otherwise
valid packet.__REQUIRED__remains a hard rejection;TODOandTBDnow reject only as a
whole-line placeholder or a manifest value that is nothing but the token.
Also documents the produce-after-final-commit ordering (committing the packet moves HEAD and
makes the packet reject itself) and adds a drift assertion so the validator copy shipped in
both skill directories cannot diverge silently. The fixture suite grows from four cases to
nine. - A
-
#12
9b5d3bb— Run the session-boundary validator suites in CI. Two skills in this collection ship
executable code and the collection had no job that executed it — only the link check and
the de-personalization gate.The job invokes each suite through its real entrypoint rather than through
pytest, and
that is the point of it. The cases run fromif __name__ == "__main__"and the functions
carry notest_prefix, sopytestcollects nothing from either file and reports
"no tests ran" — a green line that means the opposite of what it looks like. The job
asserts each suite'sPASS:line so a suite that does not execute cannot report success,
and a poison control asserts the shipped validator still rejects a stale packet, because a
gate that cannot fail guards nothing. Both skills record thepytestfalse-green in their
gotchas. Runs on Linux and Windows, the platform the pair is actually used on.
v1.3.0 — first promotions out of quarantine, and a native install route (15 skills)
Delivered 2026-08-25 at 02154ef. 15 published cards, up from 9. Sixty-seven changesets, ten of them minor — the largest release this collection has made.
This release record was created on 2026-09-07. The delivery happened when the version-bump pull request merged to main, which is what ADR 0002 makes the release event; the tag and this page record it. No Release object accompanied the tag at the time, so this repository's Releases page showed v1.1 as the latest release while four deliveries shipped past it. That gap is what this page closes.
What it delivered
The first promotions the collection has made. Twenty-two candidates had accumulated in quarantine without a route out. Six cards were promoted: click-clirunner-env-none-deletes, halt-as-deliverable, mock-masked-stub-trap, pretooluse-bash-guard-prose-false-positive, success-test-accepts-any-output, and router-skill-predicate-gap.
A native install route. Until this release there was no .claude-plugin/marketplace.json. The only documented way in was a third-party installer named once in the changelog's own preamble.
ADR 0002, and the machinery it obliged. The decision that a release is a delivery event landed here, together with the generated version field on each plugin entry it requires and a release gate that distinguishes a release ref from an ordinary one by whether package.json changed against its merge-base.
The admission policy separated from the card that stated it. Outside contributors had been told to "pass the gate" and sent to a skill card that was both the rule and the statement of the rule, with no edition anyone could cite later.
A published description length limit that was actually enforced. AGENTS.md step 2a had required 200 characters or fewer since the collection began, and that step was the only thing enforcing it.
What the version number promises
The declared surface is the install path and the card format. The card set is not part of it: adding or retiring a card is a minor change, changing the install path or a card's on-disk shape is a major change, and a correction inside a card is a patch. Both documented install routes track main, so a consumer receives changed cards when a version bump merges, not when a tag is pushed.
Full changelog
The complete section for this version runs to 1,171 lines and exceeds the size a release page can hold. Read it at CHANGELOG.md.
v1.1 — first retirement + repo hardening (7 skills)
The collection's first retirement of a shipped skill — and the point of the whole design.
Retired
claude-code-stop-hook-envelope— Claude Code now delivers the assistant's final turn inline vialast_assistant_messageonStop/SubagentStop, and the docs recommend it over reading the transcript. That is the exact platform change the skill's evidence record pre-registered as its retirement trigger, so it retired against its own stated criterion — no screen required. Removed from the collection; recorded in RETIRED.md with the evidence intact at thev1.0tag.
A list that shrinks when the models improve is the one telling you the truth about which skills still earn their keep. 7 skills remain.
Corrected
git-pull-rebase-trap— the--ff-onlyclaim was wrong. Underpull.rebase=true,--ff-onlyrefuses a diverged pull outright (a loud abort) rather than silently rebasing;--no-ffand no-flag pulls still rebase silently. Verified empirically (git 2.55.0).
Repository hardening
- Added
.gitignore,.editorconfig,CODE_OF_CONDUCT.md, a pull-request template, and a link-check CI workflow (lychee — every PR + weekly). - Aux-file credibility pass over the 7 shipped skills; removed the empty
in-progress/placeholder.
Full detail: CHANGELOG.md. Merged in #4.