Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
Added¶
modern-pythonplugin: a skill that writes Python with the newest idioms the project's minimum Python version allows, from 3.11 to 3.15, and avoids APIs removed at that version.heal.mineandheal.this, cast with--plan-only true, print what each pull request needs next: merge, ci, answer, review or guide. They change nothing.[cabinet.labels] qa, defaultv:guide:done: a pull request wearing it needs no guide.
Changed¶
issuesskill: an issue body is a STAGE (Status, Target, Assets, Guards, Ellipsis) when it ships on its own, or a Slice (a STAGE cut down to its Target) for a part that does not, never a plan, so you or an agent can start one from it.- Breaking:
[cabinet.ci]lists jobs as[cabinet.ci.jobs.<prefix>]tables with an optionalcoveringkey, replacinggate_checks,cover_checksandpatch_check.refreshreads the jobs that are notcovering;coverreads every job, and the patch coverage off thecoveringones.
Removed¶
- The
spikeissue type. An investigation is typed by what it explores:feature,edit,choreorbug.labels.identifyno longer makes thespikelabel and leaves an existing one in place;identifytakes an issue wearing onlyspikeas untyped and types it again.
Fixed¶
reviewfinishes a cut-short round only from marks you wrote: a thread whose last reply someone else marked is read again, and an issue only assigned to you no longer counts as filed for a thread.
3.0.0 - 2026-10-09¶
Changed¶
- Breaking:
labels:prandlabels:identifyare renamedlabels.prandlabels.identify, and cabinet requires vekna 0.13, which reserves:for a tome's namespace. - Breaking:
review's result lists the branches it did not take underleft, replacingnot_polled. release-bumpwrites the new version everywhere the old one stood, mirrors and lockfile included, and bumps each versioned plugin that changed.release-bumpdocuments what the release added and updates every skill, agent and command in the repository.
Fixed¶
refresh,coverandreviewstop before their step budget runs out and leave the remaining branches for the next cast, keeping the report;reviewgives each branch one round per batch. The sweep budget fits a hundred branches at the default--bound.reviewfinishes a round an earlier cast's forge failure cut short instead of reading its threads again: an answered thread is settled, and one with an issue filed gets the reply naming it, not a second issue. A forge that will not list every open issue ends the cast.cover,refreshandreviewread every review thread and every comment on it, past the first page.
2.0.0 - 2026-10-03¶
Changed¶
- Every agent role has a shell with no command denied; run every cast in a sandbox.
- Breaking:
agent.may_not_runreplacesagent.may_runand names slow tasks the prompt asks an agent to leave alone; a.vekna.tomlstill settingmay_runis refused.
1.0.1 - 2026-10-03¶
Changed¶
identifytakes each page unasked.
Fixed¶
identifyreports a write the forge refuses under its issue and goes on; only a page on which the forge refused every write stops the cast.identifyleaves a sub-issue or blocker link that already exists alone instead of having the forge refuse the duplicate.
1.0.0 - 2026-10-02¶
Added¶
identifyritual: your open issues that lack a type or a size, a page of--batchat a time, each page asked about first. One agent session per cast says what each is — a type and a size, or an epic with the sub-issues to split it into, plus what is part of it and what blocks it — following the skill at theidentify_skillsetting; the ritual puts that on the forge. The report says when the forge would not list your whole backlog.labels:identifyritual: makes thefeature,edit,chore,spike,bug,S,M,Landepiclabelsidentifyuses.labels:prritual: makes the pull request rituals' labels alone.issuesplugin: a skill for how issues are written, typed, sized and linked, whichidentifyhands its agent.
Changed¶
labelsmakes every label cabinet uses, the issue labels as well as the pull request ones.
Removed¶
issue-makerplugin, folded intoissues.
0.5.0 - 2026-09-29¶
Added¶
smoke-testplugin: a skill that writes the fifteen-minute manual check for a change where users meet it (staging, a production preview or the installed CLI), plus the untouched features it could have broken.
Changed¶
- Requires vekna 0.10;
vekna rituals showdraws each ritual's graph from the exits every step declares. reviewends with the rows it reviewed rather than the payload it carried between branches, and a stopped review raisesRitualError.
0.4.0 - 2026-09-27¶
Added¶
mkdocs-siteplugin: a skill that sets up a MkDocs Material site, or brings an existingmkdocs.yml, its tasks and its Pages workflow up to one standard.- The manual carries this changelog at cabinet.fancysnake.dev/changelog.
Changed¶
- The pre-commit hook,
hk.pkl, targets hk 2.
0.3.1 - 2026-09-20¶
Added¶
- The manual at cabinet.fancysnake.dev,
served locally by
mise run site:dev.
0.3.0 - 2026-09-19¶
Changed¶
- Runs on Python 3.11 through 3.14; 3.14 alone was required before.
0.2.0 - 2026-09-18¶
Added¶
- The repository is a Claude Code plugin marketplace,
cabinet: add it withclaude plugin marketplace add fancysnake/cabinet. Plugins live underplugins/as skills only and carry no version; an install tracks the marketplace commit. issue-makerplugin: a skill that files or updates a GitHub issue, checking the task against the code and hunting duplicates first.release-bumpplugin: a skill that cuts a release, bumping the version by semver from the changes since the last tag and compacting the changelog.
0.1.0 - 2026-09-17¶
Added¶
- Four rituals, cast through
[rituals] modules = ["cabinet.rituals"]:refresh(Transmutation) merges the base into every open pull request, makes the gate green, pushes and posts a quality review;cover(Abjuration) measures diff coverage where CI is unhappy and writes the missing tests;review(Divination) triages the review threads with you at the terminal, answers them, and ships the branch;labels(Conjuration) creates or refreshes every label the others use.--batch Nonreviewreads, answers and settles the threads in rounds of N (default 7), and the gate runs once after the last round. - A
[cabinet]section in the consuming repository's.vekna.tomlfor everything that used to be a constant: the gate and coverage tasks, base branch, remote, labels, CI check names, review skill, agent model, effort, turn limit and the commands an agent may run. - GitHub through
ghand GitLab (hosted or self-hosted) throughglab, behind one forge protocol. - Agents run under Claude's
dontAskpermission mode with per-role allowlists (reader, writer, resolver). Every forge write, commit, push and task run is the ritual's, throughshell. --attended trueonrefreshandcover: the sweep asks before every repair attempt and its agents run inautopermission mode;reviewis always attended.- One facade per ritual under
cabinet.rituals, so a project loads only the rituals it can run. - Pushes go over https with the forge CLI as the credential helper; an ssh
remote is refused before the first fetch.
sign_commits = falsecommits withcommit.gpgsign=falsefor casts that run unattended. - GLIMPSE layering under
src/cabinet, enforced by import-linter, with atrialtest suite over every step and adapter. - Tooling: mise tasks from shared-configs, hk as the pre-commit hook, a CI workflow with Codecov upload, tingle for the debt budget.