Skip to content

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-python plugin: 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.mine and heal.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, default v:guide:done: a pull request wearing it needs no guide.

Changed

  • issues skill: 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 optional covering key, replacing gate_checks, cover_checks and patch_check. refresh reads the jobs that are not covering; cover reads every job, and the patch coverage off the covering ones.

Removed

  • The spike issue type. An investigation is typed by what it explores: feature, edit, chore or bug. labels.identify no longer makes the spike label and leaves an existing one in place; identify takes an issue wearing only spike as untyped and types it again.

Fixed

  • review finishes 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:pr and labels:identify are renamed labels.pr and labels.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 under left, replacing not_polled.
  • release-bump writes the new version everywhere the old one stood, mirrors and lockfile included, and bumps each versioned plugin that changed.
  • release-bump documents what the release added and updates every skill, agent and command in the repository.

Fixed

  • refresh, cover and review stop before their step budget runs out and leave the remaining branches for the next cast, keeping the report; review gives each branch one round per batch. The sweep budget fits a hundred branches at the default --bound.
  • review finishes 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, refresh and review read 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_run replaces agent.may_run and names slow tasks the prompt asks an agent to leave alone; a .vekna.toml still setting may_run is refused.

1.0.1 - 2026-10-03

Changed

  • identify takes each page unasked.

Fixed

  • identify reports a write the forge refuses under its issue and goes on; only a page on which the forge refused every write stops the cast.
  • identify leaves 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

  • identify ritual: your open issues that lack a type or a size, a page of --batch at 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 the identify_skill setting; the ritual puts that on the forge. The report says when the forge would not list your whole backlog.
  • labels:identify ritual: makes the feature, edit, chore, spike, bug, S, M, L and epic labels identify uses.
  • labels:pr ritual: makes the pull request rituals' labels alone.
  • issues plugin: a skill for how issues are written, typed, sized and linked, which identify hands its agent.

Changed

  • labels makes every label cabinet uses, the issue labels as well as the pull request ones.

Removed

  • issue-maker plugin, folded into issues.

0.5.0 - 2026-09-29

Added

  • smoke-test plugin: 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 show draws each ritual's graph from the exits every step declares.
  • review ends with the rows it reviewed rather than the payload it carried between branches, and a stopped review raises RitualError.

0.4.0 - 2026-09-27

Added

  • mkdocs-site plugin: a skill that sets up a MkDocs Material site, or brings an existing mkdocs.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

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 with claude plugin marketplace add fancysnake/cabinet. Plugins live under plugins/ as skills only and carry no version; an install tracks the marketplace commit.
  • issue-maker plugin: a skill that files or updates a GitHub issue, checking the task against the code and hunting duplicates first.
  • release-bump plugin: 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 N on review reads, 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.toml for 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 gh and GitLab (hosted or self-hosted) through glab, behind one forge protocol.
  • Agents run under Claude's dontAsk permission mode with per-role allowlists (reader, writer, resolver). Every forge write, commit, push and task run is the ritual's, through shell.
  • --attended true on refresh and cover: the sweep asks before every repair attempt and its agents run in auto permission mode; review is 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 = false commits with commit.gpgsign=false for casts that run unattended.
  • GLIMPSE layering under src/cabinet, enforced by import-linter, with a trial test 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.