Skip to content

roadmap: high-impact CLI/MCP tooling-honesty gaps — failure exit codes (incl. upgrade check) + MCP tool input schemas #2963

@bpamiri

Description

@bpamiri

Problem

The wave-2 framework review's feature-set assessment (§5.2) flags two High-impact tooling-honesty/discoverability gaps. Both undermine the AI/CI story Wheels otherwise leads on. Verified against origin/develop @ 8971094.

1. CLI failure exit codes (High / Medium effort)

test/migrate/validate (and the upgrade-check scanner) print red but return exit 0 — false-green CI. The throw-for-nonzero pattern already exists in-repo. A broad fix (#2890, "CLI exit non-zero on user-error paths") landed for the CLI generally, but coverage is incomplete:

  • U1 [High] wheels upgrade check still exits 0 even when breaking changes are found — cli/lucli/Module.cfc:4315-4355 ends the loop with return "";, no throw (contrast the module's throw(message=...) convention at :2003). The comment at :4131-4134 implies breaking findings fail CI; they don't. The primary upgrade-safety tool cannot gate CI, and there's no --format=json.

Audit test, migrate, validate, and upgrade check for nonzero exit on failure and confirm #2890 actually reaches each; add --strict/--ci and JSON output where missing.
Prior art: pytest/RSpec; artisan Command::FAILURE; db:migrate abort.

2. MCP tool input schemas (High / Medium effort)

All ~20 auto-discovered MCP tools advertise empty properties with additionalProperties:false, so parameters are undiscoverable to MCP clients; two $-prefixed helpers also leak as tools. Tools are auto-discovered from cli/lucli/Module.cfc public functions but no per-tool input schema is emitted (no inputSchema/properties population found in Module.cfc).
Derive typed input schemas from each tool function's signature (matching the now-landed ArgSpec migration), and exclude $-prefixed helpers from the tool surface.
Prior art: FastMCP typed-signature schemas; GitHub MCP per-tool schemas.

Impact

Suggested approach

  • Exit codes: audit each command for nonzero-on-failure; verify fix(cli): exit non-zero on user-error paths instead of silent success #2890's coverage reaches test/migrate/validate/upgrade check; have upgrade check throw (nonzero) when breaking changes exist, add --strict/--ci, and add --format=json.
  • MCP schemas: generate per-tool inputSchema.properties from each function's ArgSpec/signature; filter $-prefixed functions out of mcpHiddenTools/discovery.

Acceptance criteria

  • wheels test/migrate/validate/upgrade check return nonzero when they fail or find blocking issues; covered by specs.
  • wheels upgrade check supports --format=json and a strict/CI gate.
  • Each MCP tool advertises a populated inputSchema derived from its signature; no $-helpers appear as tools.

Source

Internal multi-agent framework review 2026-06-09, wave 2 (issues phase). Feature-set assessment §5.2 (CLI failure exit codes; MCP tool input schemas) and §5.3 upgrade-path finding U1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    LuCLI-upstreamTracked here but belongs upstream in bpamiri/LuCLI (issues disabled there)

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions