Skip to content

Changelog

Changelog illustration

Release notes will be published with tagged releases.

[Unreleased]

Fixed

  • ZenPrinciple.source_url: seven per-principle documentation deep links in languages/javascript/rules.py were silently discarded by Pydantic because ZenPrinciple never declared the field, while LanguageZenPrinciples did. All seven now survive model construction, and every language gains the ability to cite per-principle guidance
  • server.py now passes Icon and ToolAnnotations their declared field names (mime_type, read_only_hint, …) instead of the camelCase wire aliases; model_dump(by_alias=True) output is unchanged
  • GreyCommitCommentDetector let a tokenize.TokenError escape and abort the analysis. generate_tokens is a lazy generator, so the guard now wraps the loop rather than the call and the scan degrades best-effort like _mask_comments
  • UnusedArgumentUtilizationDetector reported the 0-based ast.arg.col_offset as the 1-based Location.column, under-reporting every unused-argument column by one — the only AST-derived column in the codebase omitting the + 1

Changed

  • ruff findings from the 0.16 stabilised rules resolved: ISC004 (45 sites parenthesised), PLR0917 (13 # noqa: PLR0913 directives extended), CPY001 (see below)
  • [tool.ruff.lint.flake8-copyright] configured with min-file-size = 16384, requiring a copyright header on the 43 most substantial modules rather than all 446 files
  • ty upgraded 0.0.510.0.78

Added

  • Regression tests for two defensive except Exception recovery paths in adapters/rules_adapter.py and analyzers/base.py, both asserted via their log output rather than by coverage line numbers
  • Regression tests closing the ten unreached branches of the python-021 and python-022 detectors, taking the patch coverage of the code they added from 95.02% to 100%

[0.9.2] - 2026-09-03

Completes the 0.9.1 release. 0.9.1 reached PyPI and cut a GitHub Release, but never registered with the MCP registry, and the run reported that failure only in its last job — after the wheel had already published irreversibly.

Fixed

  • The Docker image was never tagged with the full version. metadata-action was configured with {{major}}.{{minor}} only, so a release pushed :0.9 and :latest but never :0.9.1, while server.json pins the OCI package to the full version. The registry answered 400 "OCI image ... does not exist". Latent in every prior release — ghcr held 0.1 … 0.9 and no patch tag at all — and it surfaced only on the first release where {{major}}.{{minor}} diverged from the real version. (#212)
  • server.json's version strings were untracked by the release config, so a bump updated pyproject.toml and __init__.py and left server.json behind while the release check still reported all-green. All three occurrences — the top-level field, packages[0], and the :X.Y.Z suffix of the OCI identifier — are now pin targets, so they move with every bump.

Fixed

  • The Docker publish never produced a full-version tag, so the MCP registry publish failed with 400 "OCI image ...:0.9.1 does not exist in the registry" while the Docker job itself reported success. docker/metadata-action was configured with {{major}}.{{minor}} and latest only, producing :0.9 and :latest, but server.json pins the OCI package to the full version. Added type=semver,pattern={{version}}. Latent in every prior release — ghcr holds 0.1 through 0.9 and no patch-level tag — and only surfaced on the first release where the two differ.

Fixed

  • fastmcp 4 server startup: task=-enabled tools now require an explicitly registered tasks extension, which fastmcp 3 wired implicitly. mcp.add_extension(TasksExtension()) is registered on the server, fixing the docker-image-check failure Task-enabled tools (...) require the tasks extension, but no extension with identifier 'io.modelcontextprotocol/tasks' is registered

Added

  • tests/server/test_server_lifespan_startup.py boots the real server lifespan. Nothing in the suite previously started the server, so two consecutive fastmcp 4 breakages (the TaskConfig import move and the tasks-extension registration) reached main with a green test job, leaving docker-image-check as the only detector

[0.9.1] - 2026-08-30

Fixed

  • MCP Registry publish 403: server.json name, the README mcp-name marker, and the Dockerfile io.modelcontextprotocol.server.name label used the wrong namespace casing (io.github.anselmoo); corrected to the registry-required io.github.Anselmoo to match the GitHub OIDC repository-owner claim exactly

[0.9.0] - 2026-08-30

Added

  • server.json manifest for the official MCP Registry, with PyPI and OCI/GHCR package entries
  • mcp-name README marker and io.modelcontextprotocol.server.name Dockerfile label for MCP Registry ownership verification

CI/CD

  • publish-mcp-registry job publishes server.json to the official MCP Registry via mcp-publisher/github-oidc on release tags
  • lint job now validates server.json with mcp-publisher validate on every PR
  • mcp-publisher download now uses curl -fsSL (fails fast on a bad download instead of piping an error body into tar), chmod +xs the extracted binary, and pins a specific release instead of latest

[0.8.1] - 2026-06-22

Changed

  • CI/CD: switch build-mcpb job to Anselmoo/mcp2mcpb composite action with --from-dist to build bundles from locally-built wheel (pinned to SHA b040bab — pre-release v0.5)

[0.8.0] - 2026-06-04

Added

  • feat: implement check_architectural_patterns MCP tool — replace NotImplementedError stub with 16 language-agnostic pattern detectors (singleton, factory, observer, repository, builder, command, mvc, middleware, prototype, decorator, facade, proxy, strategy, composite, chain-of-responsibility, iterator) covering GoF and architectural patterns across Python, Go, Rust, JavaScript, Java, and TypeScript via compiled regex without requiring a parse tree
  • ci: add rrt-checks job using repo-release-tools@v1.8.1 for branch name, commit subject, changelog, and release-health policy validation
  • ci: add build-mcpb job that produces a DXT v0.4 .mcpb bundle and attaches it to every GitHub Release alongside wheel, sdist, and SBOM
  • release: add scripts/build_mcpb.py and poe build_mcpb task to build the .mcpb bundle locally (dist/ is gitignored)
  • docs: document .mcpb one-click install for Claude Desktop in installation and MCP-integration pages
  • dev: add CLAUDE.md with project conventions for Claude Code sessions

Fixed

  • release: .mcpb manifest schema corrected to DXT spec v0.4 (manifest_version, repository as object, server.entry_point added)
  • release: replace pyproject.toml entry-point with a stdlib-only server/main.py shim — bundling pyproject.toml triggered uv_build.build_editable, which failed without the full source tree
  • release: use uv tool run instead of uvx in mcp_config so the command is valid regardless of how Claude Desktop resolves the binary path
  • fix: update CHANGELOG.md with recent edits and ensure formatting consistency

Changed

  • ci: bump pre-commit repo-release-tools hook from v0.1.1 to v1.8.1

[0.7.1] - 2026-04-01

Added

  • ci: upload test coverage XML and artifact for codecov/upload (#156)
  • enhance MCP integration with Codex and Copilot support, update documentation and CLI commands (#149)

[0.7.0] – 2026-03-20

Fixed

  • update documentation links and structure (#141)

[0.6.0] – 2026-03-18

Added

  • Add SQLAlchemy framework support and enhance documentation (#138)

Fixed

  • docs: repair Mermaid contrast, text overflow, and expand diagram coverage (#137)

[0.5.2] – 2026-03-09

Changed

  • enhance CLI with brand-aligned styles and improved documentation (#115)

[0.5.1] – 2026-03-07

Added

  • Batch mode — LLM-safe chunked analysis with cursor pagination (#110)
  • Fix overall_score scale (0–100 → 0–10) to match documented contract in models.py (#110)
  • Implement proper weighted health score in analyze_batch_summary: severity² penalty (70%), violation density (20%), maintainability index (10%) (#19, #110)
  • Add analyze_batch_auto MCP tool: auto-routes to full result or paginated batch based on token budget (#20, #110)

[0.5.0] – 2026-03-03

Added

  • enhance branch creation with normalization and description joining functions; add tests for dry-run behavior (#107)
  • Add support for Ansible, Terraform, and SVG analysis (#105)
  • complete zen rules for all 5 languages (#75#79) (#95)

Fixed

  • Update README to use PNG for dogma illustration and fix URL (#108)
  • Refactor docstrings and import statements for consistency (#93)

Documentation

  • extend abbreviations list with 17 new entries (#104)
  • Refactor documentation and add Dogma mapping generation script (#92)

[0.4.0] – 2026-02-26

Added

  • Add philosophy document and update links in README; adjust argument names in analyzers (#90)
  • enhance language analyzers with AST parsing capabilities (#71)

Fixed

  • Improve branch creation checks and add tests for uncommitted changes (#87)

Documentation

  • MCP-first reorientation of README.md and installation docs (#70)

[0.3.0] – 2026-02-22

Added

  • ci: enable verbose output for TestPyPI package publishing
  • gitlab_ci: Add GitLab CI support with multiple detectors and principles (#67)
  • enhance language validation and documentation generation (#65)

Fixed

  • css: resolve back-to-top flip, contrast failures, and add cherry-red palette (#46)
  • linting issues ruff (#45)

Documentation

  • add content quality checks and guide to documentation (#34)