# 任务：重构 Report Worker 为通用执行器 (Generic Execution)

**状态**: 规划中 -> 实施准备中
**优先级**: 高
**相关组件**: `report-generator-service`, `common-contracts`

## 1. 问题背景

当前的 `report-generator-service/src/worker.rs` 存在严重的设计缺陷：**业务逻辑泄露**。

Worker 代码中硬编码了对 `financials.json` 的特殊处理逻辑（反序列化 `TimeSeriesFinancialDto` 并转换为 Markdown Table）。这导致 Worker 不再是一个通用的分析执行器，而是与特定的财务分析业务强耦合。这违背了系统设计的初衷，即 Worker 应该只负责通用的 `IO -> Context Assembly -> LLM` 流程。

## 2. 目标

将 Worker 彻底重构为 **Generic Analysis Worker**。它不应该知道什么是 "Financials"，什么是 "Profile"。它只知道：
1.  我有输入文件（JSON, Text, etc.）。
2.  我需要把它们转换成 Prompt Context（优先对人类可读，如 YAML）。
3.  我调用 LLM。
4.  我写入结果。

## 3. 核心变更点

### 3.1 移除硬编码的 DTO 解析
*   **彻底删除** `worker.rs` 中所有关于 `TimeSeriesFinancialDto` 的引用。Worker 不应该知道任何业务特定的数据结构。
*   删除 `formatter.rs` 中专门针对 Financials 的表格生成逻辑。

### 3.2 通用格式化策略 (Generic Formatter) -> YAML First
我们需要一种通用的方式来将结构化数据展示给 LLM，同时兼顾人类调试时的可读性。

**方案: YAML Pretty Print (首选)**
*   **理由**：YAML 相比 JSON 更干净，没有大量的括号和引号，人类阅读体验更好。LLM 对 YAML 的理解能力也很好。既然我们目前处于开发调试阶段，**人类可读性 (Human Readability)** 优于极致的 Token 效率。
*   **策略**：
    *   尝试将输入文件内容解析为 JSON Value。
    *   如果成功，将其转换为 **YAML** 字符串。
    *   如果解析失败（非结构化文本），则保持原样 (Raw Text)。
*   **Context 结构**：避免使用 XML Tags，采用更直观的分隔符。
    ```yaml
    ---
    # Data Source: financials.json (Original Size: 1.2MB)
    data:
      - date: 2023-12-31
        revenue: 10000
    ...
    ```

### 3.3 增强的 Execution Trace 与截断策略
*   **Sidecar Log**: 必须记录详细的执行过程。
*   **截断策略 (Truncation)**:
    *   保留字符级截断作为最后的安全防线 (Safety Net)。
    *   **Critical Logging**: 一旦发生截断，必须在 Log 中留下醒目的警告。
    *   **详细信息**: 必须记录“截断前大小” vs “截断后大小”（例如：`Original: 1MB, Truncated to: 64KB`），让开发者清楚意识到数据丢失的程度。

## 4. 实施步骤

1.  **Cleanup**: 移除 `worker.rs` 和 `formatter.rs` 中所有特定业务 DTO 的代码。
2.  **Generic Implementation**: 
    *   引入 `serde_yaml` 依赖。
    *   实现通用的 `context_builder`：
        *   Input -> `serde_json::Value` -> `serde_yaml::to_string`.
        *   Fallback: Raw Text.
    *   组装 Context String。
3.  **Safety & Logging**:
    *   实现截断逻辑，计算 `original_size` 和 `truncated_size`。
    *   在 `execution_trace.md` 中记录详细的文件处理情况。
4.  **Verify**: 运行测试，查看生成的 Context 是否清晰易读。

## 5. 预期效果

*   **解耦**: 彻底切断 Worker 与 Financial Domain 的耦合。
*   **直观**: Context 变得像配置文件一样易读，方便人工 Review LLM 的输入。
*   **透明**: 明确知道哪些数据喂给了 LLM，哪些被截断了。
