···37373838- new files should be in kebab-case
3939- use tabs for indentation, spaces allowed for diagrams in comments
4040-- use single quotes and add trailing commas
4040+- use single quotes for strings; use template literals for localization strings (user-facing
4141+ strings, error messages)
4242+- add trailing commas
4143- prefer arrow functions, but use regular methods in classes unless arrow functions are necessary
4244 (e.g., when passing the method as a callback that needs `this` binding)
4345- use braces for control statements, even single-line bodies
4446- use bare blocks `{ }` to group related code and limit variable scope
4545-- use template literals for user-facing strings and error messages
4747+- avoid barrel exports (index files that re-export from other modules); import directly from source
4648- use `// #region <name>` and `// #endregion` to denote regions when a file needs to contain a lot
4749 of code
5050+- a parameter should be optional only when callers genuinely split between passing a value and
5151+ relying on the default; if every caller passes a value, make it required; if no caller would ever
5252+ change it, it should not be a parameter at all
5353+- avoid optional parameters that change behavioral modes or make the function do different things
5454+ based on presence/absence; prefer a separate function with a clearer name instead
48554956### documentation
50575151-- documentations include README, code comments, commit messages, changesets
5252-- any writing should be in lowercase, except for proper nouns, acronyms and 'I'
5858+- documentations include README, code comments, commit messages
5959+- any writing should be in lowercase, except for proper nouns, acronyms and 'I'; this does not apply
6060+ to public-facing interfaces like web UI
5361- only comment non-trivial code, focusing on _why_ rather than _what_
5462- write comments and JSDoc in lowercase (except proper nouns, acronyms, and 'I')
5563- add JSDoc comments to new publicly exported functions, methods, classes, fields, and enums
···5967 - use `@throws` for exceptions when applicable
6068 - keep descriptions concise but informative
61696262-### testing
6363-6464-- Vitest is the standard test runner, though some packages may still be using bun test
6565-- run tests via `pnpm run test`
6666-6767-### working style
7070+### agentic coding
68716972- `.research/` directory in the project root serves as a workspace for temporary experiments,
7073 analysis, and planning materials. create if not present (it's gitignored). this directory may
···80838184### Claude Code-specific
82858383-- Task tool (subagents for exploration, planning, etc.) may not always be accurate; verify subagent
8484- findings when needed
8686+- Explore subagent may not be accurate; verify findings as needed
8787+- never spawn subagents to read and return file contents; read files directly in the main context.
8888+ subagents should perform searches or answer specific questions, not act as file I/O proxies
85898690### external repository research
8791