Plan R — Function-Cohesion Discipline
Mechanically enforce single-responsibility at the function level via the "no and" rule. Successor to the code-quality push (Plans D / G / H / I / J / K / M / N / P / Q) that closed the gross dimensions of function-shape hygiene but did not mechanically enforce function cohesion. ## Background The code-quality push paid down: no panicking calls in production, no silent skips, all 8 quality budgets LOCKED, function-LOC ceiling B2 paid down 56 → 15, `clippy::cognitive_complexity` already deny since Plan H. What we have NOT mechanically enforced is **function cohesion** — whether each fn does one thing. A 30-LOC function named `validate_and_persist_intake` sails under §Style + B2 budgets but still violates single-responsibility. The "no and" framing: **if you need the word "and" to describe a function in plain English (excluding operand usage like `add_one_and_two`), the function is doing too much.** ## Surface * Step 1 (#540): file plan + §Style doctrine + epic + step issues * Step 2 (#541): NEW `xtask lints fn-name-and` lint scaffold + baseline opt-out * Step 3 (#542): `fn-name-and` sweep — decompose/rename 5-15 baseline sites * Step 4 (#543): Flip `fn-name-and` to blocking via `[4k/14]` validate step * Step 5 (#544): `clippy::cognitive_complexity` per-site allow audit + lift (2-3 sub-MRs) * Step 6 (#545): NEW `xtask lints fn-shape-report` advisory audit (`&mut` mutation surface + tuple-return + param-count) * Step 7 (#546): plan completion audit + archive ## Sequencing Plan R → Plan L Step 2b+ (partner interfaces) → Plan G Step 6 (cross-handler DRY scan; #462 unblocks after L convergence). ## Plan body `docs/modules/ROOT/pages/plans/function-cohesion-discipline.adoc`
epic