Using !important in CSS is prohibited.
When adding new interactive controls, remember to add corresponding i18n entries. The project has two separate i18n files: src/i18n.js (frontend/React components) and server/i18n.js (server-side/CLI). Add keys to the correct file based on where the translation is used.
After completing any code changes, automatically run npm run build to rebuild the project.
The test suite has two tiers: npm run test is the fast in-process unit tier for the development loop; npm run test:cli additionally runs the CCV_TEST_CLI-gated CLI/server integration suites (this is what CI runs). When committing code to GitHub, always run npm run test:cli first to ensure all tests pass; for new server-side scripts (any *.js under server/**), add corresponding unit tests in the test/ directory; update history.md accordingly, and update README.md with translation into all i18n supported language versions if needed.
Before publishing to npm, check if any new top-level files (e.g. cli.js bin entry, findcc.js fork-adapter, root shims server.js / interceptor.js) are missing from package.json files array; server-side code lives under server/ which is already covered by the single "server/" entry.
When adding node_modules dependencies, be sure to distinguish between devDependencies and dependencies.
When submitting code to GitHub or npm, always consult the user. Unless the user explicitly prompts you to submit, you should always ask the user before submitting. Don't auto-commit/push/publish — always ask first
Do not increment the version number arbitrarily; you should only update it when running npm publish.
Use English for all code comments, commit messages, and inline documentation — avoid mixing languages in the same codebase.
Swallowed catch blocks with diagnostic value (SSE/WS event parsing, entry ingest, state updates, fetch handling — anything where a throw means lost data or broken UI) must call reportSwallowed(tag, err) from src/utils/errorReport.js instead of silently swallowing; purely-benign best-effort guards (localStorage, tabBridge IPC, revokeObjectURL, listener cleanup) stay bare catch {}.