Skip to content

CONV009 threshold is hard-coded at 15; the lint-config options example does nothing #267

Closed

Description

@MendixMau

What broke:
CONV009 (MaxMicroflowObjects) cannot be tuned, though the project's .claude/lint-config.yaml says it can.

  • The rule is mxcli's bundled conv009_max_microflow_objects.star, seeded by mxcli init. Line 13 is MAX_ACTIVITIES = 15, a constant. The rule never calls get_option().
  • The lint-config.yaml that mxcli init writes shows this exact rule as its example: CONV009: … options: maxObjects: 20. mxcli does pass options to Starlark rules (get_option(key, default) exists, and missing_documentation.star and conv018 use it). CONV009 ignores them, so following the example changes nothing. No error, no notice.
  • The threshold conflicts with the toolkit's own guidance. skills/microflow-preflight.md sets the split trigger at 20 activities, counting loop bodies. CONV009 fires at 15 and counts top-level activities only. It also overlaps QUAL003 (25).

Command / script run:
mxcli lint with the stock rule and the config example uncommented (rules: CONV009: options: maxObjects: 20). Findings stay at the 15-activity threshold.

Field evidence:
Three toolkit-built apps, mxcli v0.25.0. All three ship rules: {}, so nothing was tuned anyway. CONV009 findings were 36 / 30 / 5. At 20 they would be 16 / 11 / 2, which is the list of microflows a reviewer actually wanted split. One app ran a script whose only purpose was to split flows below 15 to satisfy the linter. The CONV009 rises were re-baselined in bulk (one commit: "CONV009 +10").

Proposal:

  1. Toolkit: ship a conv009_max_microflow_objects.star through the existing replace-the-stock path (MXTK_LINT_RULES + STOCK-HASHES.txt, same as CONV010) that reads get_option("maxObjects", 20). The default of 20 matches microflow-preflight.md. Stock hashes for v0.17/0.24/0.25 are needed so a re-seed is recognised.
  2. Upstream mxcli (not filed here): the bundled rule should read the option its own generated config advertises.
  3. Until then, lint-that-actually-runs.md should say that options: reaches only rules that call get_option, and that CONV009 is not one of them.

Not in PR #266, because changing a default threshold for every project is a maintainer call.

Activity

  1. added a commit that references this issue on Oct 13, 2026
  2. MendixMau commented on Oct 14, 2026

    @MendixMau
    OwnerAuthor

    Fixed by #312, which landed on master in the integration squash #329 (commit 31e90ae) after independent review. Closing; reopen if it still reproduces on master.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions