- server/policy_overrides.mjs: persistent group/action override store - Group toggle: disabling a group forces all its actions to auto-deny without touching individual overrides; re-enabling restores them intact - Action overrides: cycle auto-accept/queue/auto-deny/clear per action - Effective policy resolution in index.mjs: group > action override > hardcoded default - auth.mjs: add check_can_manage_policies (requires canApprove.length > 0) - Three new endpoints: GET /policies, POST /policies/group/:group, POST /policies/action/:action - client/conduit.mjs: get_policies, set_group_policy, set_action_policy - ccc-queue.mjs: policy view (Tab to switch); group/action panel with space/e/←/→ - actions.mjs: group fields on desktop/email/calendar actions; list-actions includes group - config.example.json: add policy_overrides key - Bump version to 1.3.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
55 lines
2.3 KiB
Markdown
55 lines
2.3 KiB
Markdown
# 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/<service>.mjs` with a factory function `create_<service>(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.<service>) throw new Error('<service> 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
|