Description
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 bymxcli init. Line 13 isMAX_ACTIVITIES = 15, a constant. The rule never callsget_option(). - The
lint-config.yamlthatmxcli initwrites shows this exact rule as its example:CONV009: … options: maxObjects: 20. mxcli does passoptionsto Starlark rules (get_option(key, default)exists, andmissing_documentation.starandconv018use 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.mdsets 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:
- Toolkit: ship a
conv009_max_microflow_objects.starthrough the existing replace-the-stock path (MXTK_LINT_RULES+STOCK-HASHES.txt, same as CONV010) that readsget_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. - Upstream mxcli (not filed here): the bundled rule should read the option its own generated config advertises.
- Until then,
lint-that-actually-runs.mdshould say thatoptions:reaches only rules that callget_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
Merge #312: lint batch 4 — SEC014 external-role writes, toolkit CONV0…
MendixMau commentedon Oct 14, 2026
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