| # CLAUDE.md β Project Conventions |
|
|
| ## File Operations |
|
|
| - When asked to edit a file, use Glob/Grep to locate it rather than asking the user for the path. |
| - Prefer targeted reads (offset + limit) over reading entire large files. |
| - Before creating a new file, check whether a suitable one already exists. |
| - Do not re-read a file after editing it to verify β edits would have errored if they failed. |
|
|
| ## Editing Conventions |
|
|
| - When editing R/Quarto files, check for stale object/column name references after renames (e.g., `title` -> new name) across the entire file, not just the edit site. |
| - Make the minimal change needed β do not refactor or clean up surrounding code unless asked. |
| - Do not add comments, docstrings, or type annotations to code you did not change. |
| - Avoid backwards-compatibility shims for removed code; delete unused code outright. |
|
|
| ## R Conventions |
|
|
| - This project uses data.table, not data.frame/dplyr. Always use data.table syntax (e.g., `DT[, .(col)]`, `:=`) and verify column access patterns work on data.table objects before finalizing edits. |
| - Use `set*` functions (`setnames`, `setorder`, `setkey`) for in-place mutations to avoid copies. |
| - Prefer `fread`/`fwrite` over `read.csv`/`write.csv`. |
| - Do not load tidyverse or dplyr unless explicitly requested. |
|
|
| ## Performance / Memory |
|
|
| - Large datasets hit R memory limits β prefer chunking, avoid unnecessary copies, and add defensive guards for list vs data.table structures before `rbindlist`. |
| - Never use `rbind` in a loop; accumulate results in a list and call `rbindlist` once. |
| - Avoid `apply`-family functions on large data.tables; use vectorized data.table operations instead. |
| - Check `object.size()` / `lobstr::obj_size()` when debugging memory issues rather than guessing. |
|
|
| ## Token Efficiency |
|
|
| - Do not summarize what you just did at the end of a response β the diff is visible. |
| - Do not repeat back the user's request before answering. |
| - Skip pleasantries and filler phrases ("Great question!", "Certainly!", etc.). |
| - When reading code to answer a question, read only the relevant section, not the whole file. |
| - Use `files_with_matches` output mode for Grep unless line content is needed. |
|
|