How we make Claude Code follow our codebase conventions; using Effect for explicit types, ast-grep rules as just-in-time guardrails, and Drift to keep docs in sync with code