Files
claude-code-conduit/claude-info/contributing.md
mikael-lovqvists-claude-agent dd7743501a Add runtime policy overrides and TUI policy management view
- 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>
2026-05-21 16:01:45 +00:00

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