type: decisions_registry entry_prefix: BDR schema: id: BDR-XXX date: YYYY-MM-DD title: string (<= 80 chars) decision: string (what was chosen) why: string (motivation, context) alternatives: list of strings (what was rejected + why) status: [proposed | accepted | deprecated | superseded] supersedes: BDR-XXX (optional) rules:
| ID | Date | Title | Status |
|---|---|---|---|
| BDR-001 | 2026-04-22 | Uniform --help helper via session-start hook (option C) | accepted |
| BDR-002 | 2026-04-23 | Move tasks/ + introduce memory + audits under .claude/ | accepted |
| BDR-003 | 2026-04-23 | Gitignore wildcard + negations pattern for .claude/ | accepted |
| BDR-004 | 2026-04-27 | Adopt auto permission mode as default | accepted |
| BDR-005 | 2026-04-27 | motion as default animation library; advisor stays read-only |
accepted |
| BDR-006 | 2026-05-03 | Caveman as 4th always-on plugin (output compression) | accepted |
--help via a shared snippet injected by the session-start hook, rather than duplicating the helper in each SKILL.md./help <skill>) — rejected: breaks the "one command = one skill" experience.3968a29../tasks/ to .claude/tasks/, create .claude/memory/ (5 registries BDR/LRN/BLK/journal/EVAL) and .claude/audits/ for AUDIT_* files. Adapt skills/agents/CLAUDE.md. Integrate a CAPITALIZE step into completion skills (ship-feature, feat, bugfix, hotfix, commit-change) and add a /close skill for the session-end ritual..claude/ isolates Claude governance from real code. Aligned with the official Claude Code memory docs. Without integration in completion skills, the registries would stay empty (aspirational text)../tasks/ at root — rejected: clutters the repo, mixes code signal with governance signal..claude/agent-memory/ for everything — rejected: agent-memory/ has a distinct role (already used by other tools).Stop hook to ask the 3 questions every turn — rejected: too noisy..claude/.claude/* (wildcard match of immediate children) + negations !.claude/tasks/, !.claude/memory/, etc., rather than .claude/ (recursive ignore)..claude/, git does not descend into it (performance optimization) and negations on children are ignored — documented in gitignore(5). With .claude/*, git matches each child individually, making negations active..claude/ + !.claude/tasks/ (naive) — rejected: negations have no effect, everything stays ignored..claude/ from gitignore entirely — rejected: .claude/settings.local.json and .claude/agent-memory/ must stay ignored (per-machine)..gitattributes or an external tool — rejected: over-engineering, git handles this natively.499cd07, git check-ignore -v verified on 4 paths (2 tracked, 2 ignored).permissions.defaultMode to "auto" in user-scope settings.json and drop disableAutoMode: "disable". Auto mode runs a classifier on every action and blocks risky operations (curl|bash, prod deploys, force push, IAM grants, mass deletes, exfiltration to external endpoints) while auto-approving local edits, lockfile-declared dep installs, and read-only HTTP.default mode is significant on multi-step autonomous work. Auto mode keeps a safety net (classifier review) without the per-tool friction. The classifier also re-evaluates conversation-stated boundaries ("don't push", "wait for review") on every check, so verbal constraints carry weight.default — too many prompts, breaks flow on long tasks.acceptEdits — eliminates prompts but no classifier, blanket trust on Bash beyond filesystem helpers.bypassPermissions — skips all checks, no prompt-injection guard. Only for isolated containers.dontAsk — full denylist, breaks anything not pre-approved. Suited to CI, not interactive work.Bash(*), Bash(python*), package-manager run, Agent) are dropped and restored on exit.1421578.motion as default animation library; advisor stays read-onlymotion (or motion-v for Vue 3 / Nuxt) as the default animation library. Install is automatic in /init-project STEP 5e (post-scaffold) and opt-in in /onboard STEP 2.5 (existing projects). plugin-advisor only detects and reports the status — it never runs npm install itself. Detection logic lives in lib/animation-lib-check.sh (sourced by all three layers).motion in November 2024 (single package supporting React motion/react, Svelte, vanilla JS; motion-v is the parallel package for Vue). Baking the new name in now avoids legacy-import sprawl across new projects. The split init-vs-onboard behavior follows the trust gradient: at init, the user has just validated the entire scaffold so silent install is fine; at onboard, we are touching an existing package.json, which is invasive without explicit consent. Plugin-advisor was kept read-only to preserve its "Never modify files" contract (PHASE 4 already mutates plugin state with confirmation; piling npm installs on top would blur its responsibility).framer-motion (legacy name) — rejected: the package is in maintenance mode, every new project would inherit the old import path./onboard without asking — rejected: silently adds a runtime dep + ~50 KB gzip to a project the user did not ask to modify.plugin-advisor install missing libs — rejected: violates its read-only spec and breaks separation of concerns (advisor advises; orchestrators mutate).motion-v makes the Vue case clean.eligible|motion: React, Next.js, Remix, Astro+React, Svelte/SvelteKiteligible|motion-v: Vue 3, Nuxtno|-: backend, CLI, embedded, Flutter, static HTML, React Native (use react-native-reanimated), Astro without UI integration, no package.jsonlib/animation-lib-check.sh; integration in skills/init-project/SKILL.md STEP 5e, skills/onboard/SKILL.md STEP 2.5, agents/plugin-advisor.md PHASE 1/2/3, lib/design-gate.md.JuliusBrussee/caveman in the always-on tier alongside security-guidance, superpowers, and rtk. "Full" install = plugin (/caveman + cavecrew agents + plugin-scoped SessionStart/UserPromptSubmit hooks) + standalone hooks (statusline + stats badge in ~/.claude/hooks/) + caveman-shrink MCP scaffold (NOT auto-registered — proxy needs upstream wrapper). install-plugins.sh STEP 5.5 calls enable_plugin "caveman" "caveman" to write it into enabledPlugins. Hook paths in settings.json are normalized to ~/.claude/hooks/... post-install so this user's home dir doesn't leak across machines.claude plugin enable caveman@caveman per session, which negates the auto-compression value.--minimal install (plugin only) — rejected: loses the standalone stats badge that surfaces token-saving telemetry.--all install (adds per-repo caveman-rules.md etc. into $PWD) — rejected: would litter THIS config repo (the cwd at install time) with rule files meant for project repos. Let users opt in per-repo when they want it.caveman-shrink MCP — rejected: the proxy errors with "missing upstream command" without an upstream MCP to wrap, fails health checks. Print a snippet instead and let the user pick which upstream they want compressed (filesystem, github, …).hooks/install.sh writes absolute paths ($HOME/.claude/hooks/caveman-*.js) into settings.json. Since settings.json is symlinked into the repo, the absolute path would commit a username. STEP 5.5 runs a Python post-process to rewrite to portable ~/.claude/hooks/... form (bash expands ~ before passing to node).hooks/ (the repo dir, not ~/.claude/hooks/) because the latter is a symlink. They're added to .gitignore to prevent accidental commit of user-scope state.detect_caveman* + plugin_enabled, doctor.sh caveman block, commit 9b20b84.