Repository navigation
Releases: lehcode/multilint
Releases · lehcode/multilint
Release list
v0.3.1
v0.3.0
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-imageconfig verbs and theimagesetting 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.
dockeron 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...
v0.2.1
v0.2.0
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
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_nameexpression 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.