Plan Q — Function Decomposition + Shared Abstractions Extraction
**Plan Q — Function Decomposition + Shared Abstractions Extraction**
Plan body: https://gitlab.com/gadhs/application/ccwis/craig/-/blob/main/docs/modules/ROOT/pages/plans/decomposition-and-shared-extraction.adoc
Plan N Phase B paid down 5 of 7 OVER quality budgets. B1 (8 → 11) + B2 (49 → 56) remain. Audit revealed most B2 violators aren't §Style carve-outs — they're fat-arm dispatchers, duplicated bootstrap, copy-paste-and-customize patterns. Plan Q extracts the shared abstractions the lint is pointing at (`craig-bootstrap` crate + `SqlRow` trait + identity `Manifest` + CLI thin-dispatcher pattern); B1+B2 lint clears are a happy consequence.
User principle: "Just because a function is important doesn't mean that bad coding practices get a pass. We still want to decompose unless decomposition makes the codebase worse."
**11 steps:**
1. Plan filing + §Style doctrine update
2. craig-bootstrap foundation (NEW crate)
3. Migrate 9 service mains
4. SqlRow trait + seed builder refactor
5. Identity render Manifest + per-backend serializer
6. CLI fat-arm decomposition (2-3 sub-MRs)
7. xtask command run decomposition
8. B1 service-api module decomposition
9. Residual large-fn decomposition
10. Verify B1+B2 LOCKED + Plan N handoff
11. Plan completion audit + archive
**Cross-link**: Plan Q Step 10 unblocks Plan N Step 9 (enforcement flip).
epic