--- phase: "14" plan: "08" subsystem: cloud-analysis-settings tags: [settings, cache, analysis, frontend, store, api] status: complete requires: - phases/14-selective-analysis-and-byte-cache/14-03 - phases/14-selective-analysis-and-byte-cache/14-07 provides: - frontend/src/api/cloud.js: getCacheSettings → GET /api/cloud/analysis/cache, updateCacheSettings → PATCH /api/cloud/analysis/cache/settings (corrected URLs) - frontend/src/stores/cloudConnections.js: loadCacheSettings action (hydrates tierCapBytes/cacheUsage/cacheLimit/detailedAnalysisProgress/failureBehavior from server); tierCapBytes, cacheUsage, cacheSettingsLoading, cacheSettingsError state - frontend/src/components/settings/SettingsCloudTab.vue: Analysis Settings section with cache limit number input, simplified/detailed progress toggle, pause-batch/ continue-item failure behavior toggle affects: - frontend/src/api/cloud.js (URL bug fix + enhanced docs) - frontend/src/stores/cloudConnections.js (loadCacheSettings action + new state) - frontend/src/components/settings/SettingsCloudTab.vue (Analysis Settings section) tech-stack: added: [] patterns: - server-hydrated-settings: loadCacheSettings fetches CacheStatusOut from /api/cloud/analysis/cache and merges tier_cap_bytes, entry_count, total_bytes, analysis_progress_detail, analysis_failure_behavior into Pinia memory on mount - error-no-clear: settings load/update errors set cacheSettingsError without clearing existing in-memory settings — UI shows error but retains last known values - optimistic-then-persist: progress-detail and failure-behavior controls apply local change optimistically (setDetailedAnalysisProgress/setFailureBehavior) then persist via updateCacheSettings; revert on API failure - tier-cap-validation: cache limit input validates against tierCapBytes (from server) with local error message before calling API; invalid values are rejected locally key-files: created: [] modified: - frontend/src/api/cloud.js - frontend/src/stores/cloudConnections.js - frontend/src/components/settings/SettingsCloudTab.vue decisions: - getCacheSettings and updateCacheSettings corrected to /api/cloud/analysis/cache and /api/cloud/analysis/cache/settings (Rule 1 auto-fix — previous URLs pointed to non-existent /api/users/me/settings endpoint per Plan 14-03 backend spec) - Settings UI uses segmented controls (two-button toggle) not