Cheldrop — standing rules for Claude Code
- Before modifying ANY existing functionality, read
docs/cheldrop-functional-spec.md, especially "What must not break". The roadmap is docs/cheldrop-build-plan.md — implement exactly one plan section per session, never more, never features not in the plan.
- Never rename the
window.pubit IPC bridge. Never change the resource naming derivation chel-{subdomain}-{domain-with-dashes}. Never change the Workers asset hash formula SHA-256(base64(content) + extension) truncated to 32 hex chars (Phase 3.5 replaced the Pages one). getDb() stays a dynamic ESM import. The MCP contract is pasted into users' claude_desktop_config.json, so 127.0.0.1:3847/mcp and the x-cheldrop-mcp-secret header name do not change; MCP tools call ipc.js's exported functions and never reimplement a flow.
- The MCP surface is a standing context cost in every conversation a user has, so it stays small on purpose: a new capability is a parameter on an existing verb, not a new tool, unless its guardrails genuinely differ. Teaching belongs in the SKILL (loaded on demand); tool descriptions carry only what is needed to call correctly. Results are compact JSON with false/null keys dropped, and anything returned per-site multiplies by the user's site count — put it behind
detail unless every caller needs it.
- Build only from
~/Developer/Cheldrop/app (never via the Dropbox symlink or any cloud-synced path — cloud xattrs break codesign). Build with npm run build:mac; after any main-process change, run npm run verify:mac and require all checks green.
- Decisions in force (2 Aug 2026): password protection is R2-only (client-side guard is being removed in plan Phase 3); live sync is available on the free tier's single site; the managed folder root is
~/Documents/Cheldrops/; cheldrop.yaml and cheldrop.css conventions are defined in the build plan's architecture section, and secrets never go in cheldrop.yaml.
- Commit after each verified feature with a descriptive message. If a change would violate the spec or the plan, stop and say so instead of coding around it.