---
phase: 10-restructure
plan: 03
type: execute
wave: 3
depends_on:
  - 10-02
files_modified:
  - src/lib.rs
  - examples/filter_slow_queries.rs
  - examples/batch_export.rs
  - examples/perf_full.rs
autonomous: true
requirements:
  - REFACTOR-06
  - REFACTOR-07

must_haves:
  truths:
    - "src/lib.rs 的模块声明包含 error / parser / filter / record 四个 pub(crate) mod（不含 async_api，D-12）"
    - "src/lib.rs 不再重导出 parse_record（D-14）"
    - "src/lib.rs 重导出 LogParser、LogParserBuilder、LogIterator、FileEncodingHint、Sqllog、ParseError（D-13）"
    - "用户侧 `use dm_database_parser_sqllog::LogParser` 等所有原有公开导入路径仍然有效"
    - "examples/ 中所有三个示例 cargo build --examples 通过"
    - "rustdoc 示例（lib.rs lines 1-80）仍然通过 cargo test --doc"
    - "cargo test 全量通过，cargo clippy -- -D warnings 零警告，cargo llvm-cov 覆盖率 ≥90%"
    - "cargo doc 生成的 HTML 中不含 parse_record / is_timestamp_start / make_invalid_format_error / filter_by_exec_time(adapter 版本) 等内部符号"
  artifacts:
    - path: "src/lib.rs"
      provides: "公开 API 重导出，rustdoc 顶层文档"
      contains: "pub use parser::"
    - path: "examples/filter_slow_queries.rs"
      provides: "慢查询过滤示例，调用 LogIterator::filter_by_exec_time（保持 pub）"
      contains: "filter_by_exec_time"
  key_links:
    - from: "src/lib.rs"
      to: "src/filter/mod.rs"
      via: "pub(crate) mod filter"
      pattern: "pub\\(crate\\) mod filter"
    - from: "src/lib.rs"
      to: "src/record.rs"
      via: "pub use record::Sqllog"
      pattern: "pub use record::Sqllog"
    - from: "src/lib.rs"
      to: "src/parser/mod.rs"
      via: "pub use parser::{ FileEncodingHint, LogIterator, LogParser, LogParserBuilder }"
      pattern: "pub use parser::"
    - from: "examples/filter_slow_queries.rs"
      to: "src/parser/iterator.rs LogIterator::filter_by_exec_time"
      via: "parser.iter().filter_by_exec_time(100)"
      pattern: "filter_by_exec_time"
---

<objective>
完成 Phase 10 的收尾工作：
1. 把 src/lib.rs 调整到 D-13 / D-14 / D-15 描述的最终状态（声明 filter 子模块，不声明 async_api）。
2. 审阅 examples/ 中三个示例，确认它们仍可通过 cargo build --examples 编译，必要时调整。
3. 跑通 D-17 的三个验收：cargo test、cargo clippy -- -D warnings、cargo llvm-cov --fail-under-lines 90。
4. 跑 cargo test --doc 验证 lib.rs 顶部三个 rustdoc 示例仍然通过。

Purpose: 实现 REFACTOR-06（lib.rs 重导出公开类型）与 REFACTOR-07（examples/ 与 rustdoc 同步更新）；最终封口 Phase 10。

Output: src/lib.rs 进入最终态；examples/ 与 rustdoc 示例验证通过；clippy 零警告；覆盖率 ≥90%。
</objective>

<execution_context>
@$HOME/.claude/get-shit-done/workflows/execute-plan.md
@$HOME/.claude/get-shit-done/templates/summary.md
</execution_context>

<context>
@.planning/phases/10-restructure/10-CONTEXT.md
@.planning/phases/10-restructure/10-RESEARCH.md
@.planning/phases/10-restructure/10-PATTERNS.md
@.planning/phases/10-restructure/10-02-SUMMARY.md
@src/lib.rs
@src/parser/mod.rs
@src/record.rs
@src/error.rs
@examples/filter_slow_queries.rs
@examples/batch_export.rs
@examples/perf_full.rs

<interfaces>
本计划开始时（继承 10-02 状态）：
- src/lib.rs 模块声明：`pub(crate) mod error;`、`pub(crate) mod parser;`、`pub(crate) mod record;`（**缺 filter**）
- src/lib.rs pub use：`pub use error::ParseError;`、`pub use parser::{ FileEncodingHint, LogIterator, LogParser, LogParserBuilder };`、`pub use record::Sqllog;`（parse_record 已在 10-02 移除）
- src/lib.rs lines 1-80 是 rustdoc，含三个示例

最终目标态（D-13 / D-14 / D-15）：
```
pub(crate) mod error;
pub(crate) mod parser;
pub(crate) mod filter;
pub(crate) mod record;
// async_api 不在 Phase 10 添加（D-12）

pub use error::ParseError;
pub use parser::{
    FileEncodingHint, LogIterator, LogParser, LogParserBuilder,
};
pub use record::Sqllog;
```

examples/ 当前状态：
- examples/filter_slow_queries.rs 第 14 行 `parser.iter().filter_by_exec_time(100)` —— 由于 10-02 保留 LogIterator::filter_by_exec_time 为 pub，本调用应仍然有效
- examples/batch_export.rs 仅使用 LogParserBuilder
- examples/perf_full.rs 仅使用 LogParserBuilder
</interfaces>
</context>

<tasks>

<task type="auto">
  <name>Task 1: 在 src/lib.rs 中添加 `pub(crate) mod filter;` 声明，对齐 D-15 最终模块结构；验证 cargo build / cargo test --doc / examples 通过</name>
  <files>src/lib.rs, examples/filter_slow_queries.rs, examples/batch_export.rs, examples/perf_full.rs</files>
  <read_first>
    - src/lib.rs（确认当前 mod 声明顺序，与目标态对照）
    - src/filter/mod.rs（确认是否存在 `pub(crate) mod adapter;`）
    - src/filter/adapter.rs（确认 filter_by_* 函数为 pub(crate)，无 dead_code 风险）
    - src/parser/iterator.rs（确认 LogIterator 已通过 adapter:: 委托调用 filter::adapter::filter_by_*，从而 filter 子模块被实际使用，避免 dead_code 警告）
    - examples/filter_slow_queries.rs（确认仍调用 filter_by_exec_time）
    - examples/batch_export.rs 与 examples/perf_full.rs（确认仅使用公开 API）
    - .planning/phases/10-restructure/10-PATTERNS.md（src/lib.rs 节最终态）
  </read_first>
  <action>
    1. 修改 src/lib.rs lines 82-90 区域（rustdoc lines 1-80 不动）：
       - 当前形态（10-02 结束态）：
         ```
         pub(crate) mod error;
         pub(crate) mod parser;
         pub(crate) mod record;

         pub use error::ParseError;
         pub use parser::{ FileEncodingHint, LogIterator, LogParser, LogParserBuilder };
         pub use record::Sqllog;
         ```
       - 目标形态：在 `pub(crate) mod parser;` 与 `pub(crate) mod record;` 之间插入 `pub(crate) mod filter;`。其余不变。注意：**不要**添加 `pub(crate) mod async_api;`（D-12）。
       - 由于 src/parser/iterator.rs 已通过 `use crate::filter::adapter;` 引用 filter 模块（10-02 任务 1），加入 mod 声明后 filter::adapter::filter_by_* 被实际链路使用，不会触发 dead_code 警告。

    2. 检查 examples/：
       - examples/filter_slow_queries.rs：line 14 调用 `parser.iter().filter_by_exec_time(100)`，由于 10-02 保留 LogIterator::filter_by_exec_time 为 pub，此调用仍有效。**确认此文件无需修改**。如果出于 v2.0 文档更新意图想加注释指向未来 FilterBuilder，可在文件顶部加一行注释 `//! Phase 11 将引入 FilterBuilder 提供更丰富的过滤接口。`（可选，不影响验收）。
       - examples/batch_export.rs：仅使用 LogParserBuilder + iter() + filter_map。无需修改。
       - examples/perf_full.rs：仅使用 LogParserBuilder。无需修改。

    3. 验证 rustdoc 示例（lib.rs lines 1-80 中的三个示例）：
       - 示例 1 使用 `LogParserBuilder::new` + `parser.iter()` —— 公开 API 未变，OK。
       - 示例 2 使用 `parser.iter().filter_by_exec_time(100)` —— LogIterator::filter_by_exec_time 仍 pub，OK。
       - 示例 3 使用 `parser.iter().filter_map(|r| r.ok())` —— Iterator trait 方法，OK。
       - 三个示例均无需修改 rustdoc 文本。

    4. 跑全套验证命令（每条命令退出码必须为 0）：
       ```
       cargo build
       cargo build --tests
       cargo build --examples
       cargo test
       cargo test --doc
       cargo clippy --all-targets -- -D warnings
       ```
       如果 clippy 报警告，立刻修复：常见的 unused import（迁移后某些 use 不再需要）、需要补充 #[allow(dead_code)] 的内部辅助函数等。不要降低 -D warnings 等级。

    5. 跑覆盖率验证：
       ```
       cargo llvm-cov --workspace --all-features --fail-under-lines 90
       ```
       如果覆盖率低于 90%，定位是哪些行未被覆盖：
       - 若是迁入的内部测试未被正确追踪：检查 #[cfg(test)] mod tests 是否在 mod.rs 中且测试函数有 #[test]
       - 若是新增的 filter/adapter.rs 未被覆盖：内部 LogIterator::filter_by_* 的测试链路（tests/parser_filters.rs）已经覆盖 adapter，但如果覆盖率工具未能识别，可以在 src/filter/adapter.rs 末尾添加最少量 `#[cfg(test)] mod tests` 单元测试（每个函数一个最小验证用例）。
       不允许通过修改 `--fail-under-lines` 的数字来通过；必须真实补充测试。

    禁止：本任务不修改 src/parser/、src/record.rs、src/error.rs、src/filter/、src/async_api/、tests/。仅修改 src/lib.rs（必改）、examples/（按需，可能完全不改）。
  </action>
  <verify>
    <automated>cd /Users/guang/Projects/dm-database-parser-sqllog && cargo build 2>&1 | tail -3 && cargo build --examples 2>&1 | tail -3 && cargo test 2>&1 | tail -3 && cargo test --doc 2>&1 | tail -3 && cargo clippy --all-targets -- -D warnings 2>&1 | tail -3 && cargo llvm-cov --workspace --all-features --fail-under-lines 90 2>&1 | tail -5</automated>
  </verify>
  <acceptance_criteria>
    - `grep -c 'pub(crate) mod filter' src/lib.rs` 返回 1
    - `grep -c 'pub(crate) mod error' src/lib.rs` 返回 1
    - `grep -c 'pub(crate) mod parser' src/lib.rs` 返回 1
    - `grep -c 'pub(crate) mod record' src/lib.rs` 返回 1
    - `grep -c 'pub(crate) mod async_api\|pub(crate) mod sqllog' src/lib.rs` 返回 0（async_api 不声明，sqllog 已消失）
    - `grep -c 'parse_record' src/lib.rs` 返回 0
    - `grep -c 'pub use error::ParseError' src/lib.rs` 返回 1
    - `grep -c 'pub use record::Sqllog' src/lib.rs` 返回 1
    - `grep -E 'pub use parser::\\{' src/lib.rs` 匹配且行内含 FileEncodingHint、LogIterator、LogParser、LogParserBuilder 四项（缺一不可）
    - src/lib.rs lines 1-80 rustdoc 与 10-01 起点相比未变：`git diff src/lib.rs` 在 lines 1-80 区域无改动
    - `cargo build` 退出码 0
    - `cargo build --examples` 退出码 0
    - `cargo build --tests` 退出码 0
    - `cargo test` 退出码 0（全量测试通过）
    - `cargo test --doc` 退出码 0（lib.rs rustdoc 中三个示例通过）
    - `cargo clippy --all-targets -- -D warnings` 退出码 0（零警告）
    - `cargo llvm-cov --workspace --all-features --fail-under-lines 90` 退出码 0（覆盖率 ≥90%）
    - cargo doc 生成的 HTML 中：parse_record 不在公开 API 列表（`cargo doc --no-deps && grep -r 'parse_record' target/doc/dm_database_parser_sqllog/ 2>/dev/null | grep -v 'parse_record_with_hint\\|.docsearch' | head` 应无 pub 形式匹配；is_timestamp_start 同理）
    - 用户路径仍有效（在 src/parser/mod.rs 的 #[cfg(test)] mod tests 中至少有一处通过 `dm_database_parser_sqllog::LogParserBuilder` 公开路径访问的测试 —— 这是从 10-02 迁入的；若没有，自动验证不严格，但通过 cargo test --doc 通过即可佐证）
  </acceptance_criteria>
  <done>
    src/lib.rs 进入 D-13/D-14/D-15 描述的最终态；examples/ 全部编译通过；cargo test 全量通过；cargo test --doc 通过；clippy 零警告；覆盖率 ≥90%。Phase 10 完成。
  </done>
</task>

</tasks>

<verification>
端到端 Phase 10 验收（D-17）：

1. **目录结构验证**：`ls src/` 输出 `error.rs lib.rs record.rs filter/ async_api/ parser/`；`ls src/parser/` 输出 `mod.rs builder.rs iterator.rs encoding.rs`；`ls src/filter/` 输出 `mod.rs adapter.rs`；`ls src/async_api/` 输出 `mod.rs`
2. **公开 API 路径验证**（REFACTOR-06）：
   - `cargo test --doc` 通过（lib.rs rustdoc 三个示例均使用 `use dm_database_parser_sqllog::LogParserBuilder` 公开路径，通过证明路径有效）
   - tests/integration_test.rs、tests/parser_filters.rs、tests/parser_iterator.rs 通过 cargo test（这些都用公开 API）
3. **内部符号不暴露验证**（REFACTOR-05）：
   - `cargo doc --no-deps` 生成后，target/doc/dm_database_parser_sqllog/ 中无 parse_record、is_timestamp_start、make_invalid_format_error、find_indicators_split、parse_meta_from_bytes、parse_indicators_from_bytes 的公开 doc 页
4. **examples 验证**（REFACTOR-07）：
   - `cargo build --examples` 退出码 0
   - examples/filter_slow_queries.rs 可执行（仅编译验证，不实际运行因为需要日志文件）
5. **D-17 三项硬验收**：
   - `cargo test` 退出码 0
   - `cargo clippy --all-targets -- -D warnings` 退出码 0
   - `cargo llvm-cov --workspace --all-features --fail-under-lines 90` 退出码 0
</verification>

<success_criteria>
- REFACTOR-06：lib.rs 完成最终态，所有原有公开导入路径有效
- REFACTOR-07：examples/ 与 rustdoc 示例均通过 cargo test --doc / cargo build --examples
- D-17 完整验收（test + clippy + coverage 三项）全部通过
- async_api 模块未声明（D-12）：`grep -c 'async_api' src/lib.rs` 返回 0
</success_criteria>

<output>
完成后创建 .planning/phases/10-restructure/10-03-SUMMARY.md，记录：
- src/lib.rs 最终状态（mod 声明、pub use 列表）
- examples/ 调整情况（哪些改了、哪些未改）
- cargo test 通过的测试总数（迁移前后对比）
- cargo llvm-cov 覆盖率实际数值
- cargo clippy 输出（应零警告）
- Phase 10 整体收尾：列出 REFACTOR-01 ~ 07 七个需求各自实现位置
- 下一阶段（Phase 11 FilterBuilder）的衔接点：filter/adapter.rs 泛型函数已就位、LogIterator::filter_by_* 方法可选保留或 deprecate
</output>
</content>
</invoke>