Skip to content

Releases: lehcode/multilint

v0.3.1

Choose a tag to compare

@lehcode lehcode released this 29 Oct 09:48

0.3.1 (2026-10-29)

Bug Fixes

  • ci: parse the release PR number in the shell (69983d3)

v0.3.0

Choose a tag to compare

@lehcode lehcode released this 29 Oct 08:49

0.3.0 (2026-10-29)

⚠ BREAKING CHANGES

  • image: server.py, mcp_server.py, docker-compose.yml, start.sh, stop.sh and the image entrypoint are removed. The image no longer serves HTTP (8591) or MCP and no longer contains lint.sh; use the Claude Code or OpenCode plugin, which mounts its own lint.sh into the container.
  • plugin: Docker is required again. Host-installed linters are no longer used.
  • opencode: the plugin no longer calls the HTTP service on port 8591. The root package (src/dual.ts, index.js, package.json) is gone.
  • plugin: Docker and the lehcode/multilint image are no longer used. Install the linters on the host. The image/unset-image config verbs and the image setting are removed.
  • lint: the settings CLI path is now claude-plugin/scripts/multilint.py (was lint_changed.py); the OpenCode plugin path in opencode.json is now ./.opencode/plugins/multilint.js.
  • plugin: MULTILINT_IMAGE, MULTILINT_SEARCH_CEILING and MULTILINT_STATE_DIR no longer have any effect. Use python3 claude-plugin/scripts/lint_changed.py --set image <value> and --set search_ceiling <value> instead; MULTILINT_STATE_DIR has no replacement (XDG_STATE_HOME is still honored). The retired-variable notice for MULTILINT_URL/MULTILINT_PATH_MAP is also removed from both plugins.
  • plugin: the hook no longer lints files other than the one just edited, so changes made outside a Write tool -- sed -i through Bash, or a generator -- are no longer picked up incidentally. MULTILINT_SEARCH_CEILING is new: a repository above $HOME is no longer found unless it is set.
  • compose: 8591 and 8592 are no longer published to all interfaces, so callers reaching the HTTP API from another host lose it. MULTILINT_WORKSPACE is now required to start the stack.
  • opencode: .opencode linting starts actually reporting, so failures that were previously hidden will surface.
  • plugin: claude-plugin/.mcp.json is removed, so the plugin no longer provides an MCP server. MULTILINT_URL and MULTILINT_PATH_MAP are no longer read; a one-line notice fires when either is set. docker on PATH replaces "a running multilint service" as the hook's requirement. agents/multilint.md drops the lint_files(path, cwd) MCP contract.

Features

  • agent: restore the multilint subagent (1f28639)
  • ci: add Code Quality Benchmark hook for pre-commit and pre-push (#22) (ea0fe4c)
  • claude: add Claude Code plugin with change-scoped linting (c939ce8)
  • image: ship a toolchain-only image and remove service mode (58b9125)
  • include actual findings in Claude hook systemMessage (35f8136)
  • lint: let a linter's own config take precedence over multilint defaults (f73082b)
  • lint: per-check enable/disable and args replacement via .multilint.json (#21) (720e084)
  • lint: report findings, violated rules and fix hints (#24) (359750f)
  • lint: run mypy and bandit on Python files (1c5e14b)
  • opencode: ship a self-contained OpenCode plugin (e1dbdf1)
  • plugin: add a marketplace manifest for the Claude Code plugin (053ec92)
  • plugin: add multilint config script (b1d4594)
  • plugin: emit one-line TUI notices for failed and recovered files (55437ae)
  • plugin: lint in a throwaway container per invocation (3a42547)
  • plugin: lint in an ephemeral container with the plugin's own lint.sh (fdad967)
  • plugin: lint on the host instead of in a container (2673842)
  • plugin: move image and search-ceiling settings to a SQLite store (#20) (f1add8b)
  • plugin: route configuration requests to multilint subagent (4afe634)
  • re-report last verdict on unchanged-content re-writes (R2) (32c5c4e)
  • report why skipped checks did not run (d19431e)

Bug Fixes

  • compose: default the workspace mount to the caller's directory (#18) (faa6437)
  • docker: ship markdownlint's dependency tree so the check can run (963efce)
  • harden settings lookup and validate gitleaks.config (#23) (1d2eab3)
  • hook: harden the ephemeral container run (7c4171e)
  • hook: never go silent without python3 or after a failed lint (30b6217)
  • hook: report a file that could not be linted (cfcbf68)
  • image: install git so gitleaks can scan repository history (db87437)
  • lint: detect a prettier config only from a top-level package.json key (4c55641)
  • lint: lint a named file even inside a walk-excluded directory (8f95556)
  • lint: make gitleaks actually produce a verdict (386b83e)
  • lint: make silent checks fail and rename plugin entry points to multilint (#25) (d814fe1)
  • lint: print the missing-scratch-directory warning in text mode too (c54af07)
  • lint: report skipped checks and stop faking a pass (4e2137c)
  • lint: resolve .multilint.json relative to cwd and gate verdict on thresholds (#19) (6e87e47)
  • lint: scan server.py and mcp_server.py for hardcoded secrets (262308b)
  • lint: warn when markdownlint.rules has no scratch directory (6d6c9c3)
  • opencode: report a crashed lint run and tighten path checks (dc18011)
  • opencode: report lint failures instead of a false green (39cfd47)
  • plugin: accept both path and filePath from tool input (d1d39c7)
  • plugin: add root index.js so OpenCode V2 directory entries load (6625fa5)
  • plugin: defer annotations so the hook imports on Python 3.9 (042383d)
  • plugin: lint the edited file, not the whole dirty tree (1e11d2b)
  • plugin: move marketplace manifest to .claude-plugin/ (0b263d3)
  • release: bump versions at flattened package paths (68fb165)
  • test: make pytest read pytest.ini ([1341f46](1341f46d316695b12d680b1c...
Read more

v0.2.1

Choose a tag to compare

@lehcode lehcode released this 29 Sep 12:01
803d565

0.2.1 (2026-09-29)

Bug Fixes

  • ci: upgrade npm before staging the release (#8) (3f5b884)
  • docker: move USER nobody below the build steps (#9) (a295e1b)

v0.2.0

Choose a tag to compare

@lehcode lehcode released this 29 Sep 10:57
5d69fae

0.2.0 (2026-09-29)

Features

  • add @lehcode/multilint dual-mode npm plugin package (6e111af)
  • ci: automate version and tag bumping with release-please (a39d869)
  • opencode: migrate plugin to V2 format with execute.after hook (a6c70cc)

Bug Fixes

  • ci: pin gitleaks-action to v3 and pass GITHUB_TOKEN (c3c86c8)
  • mcp: fix OCI labels, multi-arch, and remove debug step (73e4c73)
  • npm: make package publishable and add staged npm release (a813991)
  • pre-commit: exclude test files and fix YAML syntax (145d31d)
  • pre-commit: exclude tests/test_files from markdownlint; fix README code block language (d37825b)
  • pre-commit: exclude tests/test_files from shellcheck (2391f0b)
  • server: validate lint working directory against allowlist (27eeaa3)

v0.1.6

Choose a tag to compare

@lehcode lehcode released this 29 Sep 09:58

First release published to GitHub. Tags v0.1.0 through v0.1.6 were cut previously but never published, so this establishes the release history at the version package.json and .release-please-manifest.json both declare.

Changes since v0.1.0

  • feat(ci): add gitleaks secret scanning workflow
  • fix: use github.ref_name expression syntax for Docker tags
  • fix: add debug step for Docker Hub token

See CHANGELOG.md for the full 0.1.0 history.

What comes next

Releases are now automated with release-please. Conventional Commits merged to master open a Release PR; merging it tags the release, bumps package.json and writes CHANGELOG.md.

Twelve commits already sit on master beyond this tag, including two feat: commits, so the next release computes to v0.2.0 under the configured bump-minor-pre-major rule.