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