## Why

当前项目已具备完整的核心功能（文案生成、图片绘制、发布队列、评论管家、数据分析），但在安全性、健壮性、可维护性上存在若干生产级隐患：配置文件明文保存 API Key、全局可变状态缺乏线程锁、临时文件无清理机制、单文件超 4400 行难以维护。这些问题会在长期运营中导致数据泄露、并发竞态或内存增长，亟需在持续迭代前统一修复。

## What Changes

- **安全加固**：`config.json` 中的 API Key 等敏感字段改用操作系统 keyring / 环境变量存储，文件中只保留非敏感配置
- **线程安全**：全局笔记缓存 (`_cached_proactive_entries` / `_cached_my_note_entries`) 及 `ConfigManager` 写操作加 `threading.Lock`
- **临时文件清理**：发布完成或失败后自动清理 `_temp_publish/` 目录下的临时图片
- **原子写文件**：`analytics_service.py` 和 `config_manager.py` 的 JSON 持久化改为「写临时文件 → rename」方式，防止写中断导致数据损坏
- **发布前输入校验**：标题长度（≤20字）、正文长度、图片数量（1-18张）在提交发布前统一校验并给出明确提示
- **代码拆分**：将 `main.py` 的 Gradio UI 构建与业务逻辑分离，拆分为 `ui/` 目录下的多个 tab 模块，主文件只负责组装

## Capabilities

### New Capabilities

- `secure-config`：安全配置管理——敏感字段加密/外置存储，支持环境变量覆盖
- `thread-safe-cache`：线程安全的笔记列表缓存管理器，替换全局裸列表
- `temp-file-lifecycle`：临时发布文件的自动生命周期管理（创建→使用→清理）
- `atomic-persistence`：JSON 持久化原子写操作，防止文件损坏
- `publish-input-validation`：发布前内容合规校验（长度/图片数/必填项）
- `ui-module-split`：将 `main.py` UI 构建逻辑拆分为独立 tab 模块

### Modified Capabilities

（无现有 spec，首次建立规范）

## Impact

- **`config_manager.py`**：`save()` 方法改为原子写；新增 `get_secure()` / `set_secure()` 接口
- **`analytics_service.py`**：`_save_analytics()` / `_save_weights()` 改为原子写
- **`publish_queue.py`**：无需修改（已使用 SQLite WAL，自身较健壮）
- **`main.py`**：
  - 全局缓存变量引入 `threading.Lock`
  - `publish_to_xhs()` 增加校验逻辑与 temp 清理
  - UI 构建代码逐步迁移至 `ui/tab_*.py`
- **`requirements.txt`**：可能新增 `keyring` 依赖
- **无破坏性 API 变更**：所有 Gradio 回调签名保持不变
