# Contributing checklist Use this when adding any non-trivial feature to CCC. Go through every section — skipping docs or config is a common mistake. --- ## Adding a new action (simple — no new service) - [ ] Add the action definition to `server/actions.mjs` - [ ] Update the actions table in `README.md` - [ ] If the action has special behavior, add a note under the table - [ ] Update `claude-info/architecture.md` if ctx shape changes ## Adding a new injectable service (e.g. a new API integration) ### Code - [ ] Create `server/.mjs` with a factory function `create_(cfg)` - [ ] Extend `server/config.mjs` to read and return the new config block (resolve paths relative to config dir) - [ ] Import and instantiate in `server/index.mjs`; handle missing config gracefully (warn, set to null) - [ ] Add the service to the `make_ctx()` return object in `index.mjs` - [ ] Add actions to `server/actions.mjs`; guard with `if (!ctx.) throw new Error(' not configured')` - [ ] If setup requires a one-time manual step (OAuth, keygen, etc.) add a bin script in `bin/` - [ ] Add new dependencies to `package.json` and add bin scripts to the `bin` map ### Config - [ ] Add the new config block to `config.example.json` ### Documentation - [ ] Update `README.md`: - Add new actions to the actions table - Add a setup section explaining prerequisites and one-time steps - Update the `ctx` comment in "Adding actions" if ctx changed - [ ] Update `claude-info/architecture.md`: - Add the new service to the ctx shape block - Note any new files in the file layout - Update the permission model section if a new permission gate was added - [ ] Update or add a plan file in `claude-info/` — mark status as **implemented** - [ ] Update `CLAUDE.md` — mark the plan entry as done ### Git - [ ] `git status` — read every line before staging - [ ] Stage files explicitly by name (never `git add -A` or `git add .`) - [ ] Bump version in `package.json` if this is a meaningful release - [ ] Commit with a clear message describing what was added - [ ] Check git identity is set correctly for this repo (`git config user.name`) ### After commit - [ ] Tell the user to run `npm install` if new dependencies were added - [ ] Tell the user about any one-time setup steps required before the feature works