rtk-ai/rtk

Hook doesn't auto-route `mvn` / `mvnw` despite handler existing

已关闭

#1,537 创建于 2026年4月26日

 (6 条评论) (4 个反应) (0 位负责人)Rust (2,914 个派生)batch import
area:clibugeffort-smallfilter-qualitygood first issuehelp wantedplatform:linuxpriority:medium

仓库指标

星标
 (48,085 个星标)
PR 合并指标
 (平均合并 11天 1小时) (30 天内合并 45 个 PR)

描述

Summary

In RTK 0.37.2, the mvn handler exists and works (rtk discover confirms it as existing for mvn compile), but rtk hook check returns "No rewrite for: ..." for every mvn/mvnw/./mvnw invocation. Net result: typing mvn test in Claude Code's Bash tool runs unfiltered, even though the maven TOML filter shipped via #338 / #147 / PRs #349/#351/#386.

Reproduction

Environment: rtk 0.37.2 (Linux WSL2), Claude Code session with hook installed via rtk init -g.

$ rtk --version
rtk 0.37.2

$ rtk hook check "mvn test"
No rewrite for: mvn test

$ rtk hook check "mvnw test"
No rewrite for: mvnw test

$ rtk hook check "./mvnw test"
No rewrite for: ./mvnw test

# But the handler itself works:
$ rtk mvn --help
usage: mvn [options] [<goal(s)>] [<phase(s)>]
  ...
$ rtk discover | grep -i mvn
  mvn compile     21    rtk mvn      existing      ~2.6K tokens

Impact

In a Spring Boot / Maven project running 30 days of rtk discover analysis:

mvnw                       109    ./mvnw -q -pl . -Dtest=DocumentGenerat..
mvn                         59    mvn -B -q -ntp test -Dtest='TrialToPai..
mvn test                    50    mvn test -Dtest=DocumentBrandingAssemb..
mvnw test                   27    ./mvnw test -Dtest=CacheStampedeFanOut..
mvnw checkstyle:check       25    MAVEN_OPTS="-Xmx1g" ./mvnw checkstyle:..

≈ 270 invocations × significant verbose output per mvn test (Surefire stack traces, [INFO] noise) = large token bleed despite the TOML filter being a fix-away from working.

Proposed approach (not prescribing)

Add mvn and mvnw (and the common ./mvnw invocation) to the hook routing whitelist (per the hook_lookup() design described in #361 / PR #156). Conservative subcommand inclusion:

  • mvn test, mvn compile, mvn package, mvn clean, mvn install, mvn verify, mvn checkstyle:check
  • Same for mvnw and ./mvnw invocations
  • Skip non-maven mvn- prefixed binaries if any exist (none common)

For mvn test Surefire output specifically, PR #288 (mentioned in #338 follow-up) covers the state-machine parser — independent of this routing fix.

Related

  • #338 (Maven feature request — closed completed by TOML filter)
  • #147 (Java/Kotlin/Spring Boot/Maven — closed completed by v0.30.0)
  • #361 / PR #156 (hook engine v2 with hook_lookup() whitelist — this issue may be subsumed if #156 lands and includes mvn)
  • #1526 (similar hook routing gap for git ls-files/git rm/git tag — same shape of issue, different command family)

Environment

  • rtk: 0.37.2 (binary from ~/.local/bin/rtk, build-id c7c6664f)
  • Hook: ~/.claude/settings.json PreToolUse Bash matcher → rtk hook claude
  • Claude Code with autorun-style usage; Maven project (Spring Boot 3.x, kitehub-subscription / kitehub-branding modules)

贡献者指南