---
phase: 09-publishing
plan: 01
type: execute
wave: 1
depends_on: []
files_modified:
  - CHANGELOG.md
  - Cargo.toml
  - README.md
autonomous: true
requirements:
  - PUB-01
  - PUB-02
  - PUB-03
must_haves:
  truths:
    - "CHANGELOG.md 包含 v1.1.0 条目，格式遵循 Keep a Changelog"
    - "Cargo.toml 中 version 为 1.1.0，homepage 链接正确，description/keywords/categories 字段完整"
    - "cargo publish --dry-run 通过（无警告）"
    - "README.md 包含安装说明、Quick Start（3 个场景）、功能列表、性能数据 8.67 GiB/s"
  artifacts:
    - path: "CHANGELOG.md"
      provides: "v1.1.0 发布变更记录（Added / Changed / Fixed 分类）"
      contains: "## [1.1.0]"
    - path: "Cargo.toml"
      provides: "正确填写的发布元数据"
      contains: "version = \"1.1.0\""
    - path: "README.md"
      provides: "满足 crates.io 发布标准的项目首页文档"
      contains: "Quick Start"
  key_links:
    - from: "README.md :: Quick Start 代码块"
      to: "src/lib.rs :: 3 个 # Examples 块（由 Phase 8 生成）"
      via: "相同的 Builder API、过滤方法、字段访问签名"
      pattern: "LogParserBuilder::new"
    - from: "Cargo.toml :: homepage"
      to: "https://github.com/guangl/dm-database-parser-sqllog"
      via: "修正后的 URL"
      pattern: "dm-database-parser-sqllog"
---

<objective>
将库准备为 crates.io 发布标准：CHANGELOG.md 记录 v1.1.0 变更，Cargo.toml 元数据完整验证，README.md 全面重写。

Purpose: 为 v1.1.0 首次语义化发布做准备。CHANGELOG 提供可追溯的版本历史，Cargo.toml 元数据确保 crates.io 信息准确，README 让新用户可独立完成集成。
Output: 更新的 CHANGELOG.md / Cargo.toml / README.md，通过 `cargo publish --dry-run` 验证。
</objective>

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

<context>
@.planning/STATE.md
@.planning/ROADMAP.md
@.planning/REQUIREMENTS.md
@.planning/phases/09-publishing/09-CONTEXT.md
@CLAUDE.md
@CHANGELOG.md
@Cargo.toml
@README.md
@.planning/phases/08-documentation/08-CONTEXT.md

<interfaces>
<!-- Phase 8 规划的 3 个 # Examples 场景（来自 08-CONTEXT.md D-03），
     README Quick Start 代码块必须使用相同 API 签名与之对齐。
     Phase 8 尚未执行，但 README 的场景选择 / API 调用模式需与此保持一致。 -->

1. 基础迭代：LogParserBuilder::new().threads(1).build("path")? + parser.iter() + sqllog.body()
2. 过滤慢查询：iter().filter_by_exec_time(100) + sqllog.exec_time() + sqllog.body()
3. 批量导出：iter() + sqllog.body() + sqllog.parse_meta()

<!-- Cargo.toml 当前关键字段（需修改项） -->
- version: "0.9.1" → "1.1.0" （D-04）
- homepage: "https://github.com/guangl/dm-parser-sqllog" → "https://github.com/guangl/dm-database-parser-sqllog" （D-08）
- description: 中文描述，需更新以反映 v1.1 新 API（Builder、过滤方法、exec_time()、FromSqllog）
- keywords: ["sqllog", "parser", "dm-database"] — 考虑添加 "dameng"

<!-- CHANGELOG 已有完整 0.1.0 ~ 0.9.1 历史，v1.1.0 条目在其顶部追加 -->
</interfaces>

**逻辑依赖说明：** Phase 9 逻辑上依赖 Phase 8（Documentation）。README 的 Quick Start 代码块必须与 Phase 8 在 `src/lib.rs` 中生成的 3 个 `# Examples` 代码块保持 API 签名一致（均使用 `LogParserBuilder`、`filter_by_exec_time`、`exec_time()` 等 v1.1 新 API）。Phase 9 执行时 Phase 8 应当已经完成，若 Phase 8 未执行，README Quick Start 代码块可能因 API 不存在而无法通过编译，请检查。

</context>

<tasks>

<task type="auto">
  <name>Task 1: 添加 v1.1.0 条目到 CHANGELOG.md</name>
  <files>CHANGELOG.md</files>
  <read_first>
    - CHANGELOG.md (理解现有 Keep a Changelog 格式和已有 0.1.0 ~ 0.9.1 历史)
    - .planning/phases/09-publishing/09-CONTEXT.md (D-01: Keep a Changelog 格式；D-02: 只记录 v1.1 变更；D-03: v1.1.0 条目包含 Added / Changed / Fixed 分类)
  </read_first>
  <action>
    在 CHANGELOG.md 顶部追加一个新的 `## [1.1.0] - YYYY-MM-DD` 条目（日期用占位符 `YYYY-MM-DD`，发布时由用户填写）。

    条目分类和内容（per D-03）：
    - **Added**: `LogParserBuilder` 链式构建 API（替代 `LogParser::from_path`）、`filter_by_exec_time` / `filter_by_sql_contains` 过滤方法、`Sqllog::exec_time()` / `Sqllog::row_count()` 直接字段访问、`FromSqllog` trait、独立运行示例（`examples/filter_slow_queries.rs`、`examples/batch_export.rs`）
    - **Changed**: `ParseError` 增强（添加 `line_number` 字段，错误信息包含行号和内容片段）、所有公开 API 补全 rustdoc 注释（3 个可运行 `# Examples` 块）、README.md 全面重写
    - **Fixed**: 修复 Cargo.toml `homepage` 字段错误链接（如有）、修复 CI 中的文档相关配置（如有）

    要点（per D-02）：不要添加独立的 `## [1.0.0]` 章节，保持现有 0.x 历史不动。v1.0 milestone 的工作体现在 v1.1.0 条目中一并记录。v1.1.0 条目的 Added 分类列出 Phase 6~8 所有新增功能。

    日期占位符：使用 `YYYY-MM-DD`，不填写具体日期。

    格式规则：
    - 标题使用 `##` 级别
    - 分类使用 `###` 级别
    - 每项用 `- ` 开头
    - 重要变更项用 `**粗体**` 强调
    - 保留现有 [Unreleased] 占位符（若有）不动，新条目插入在它之后、历史记录之前
  </action>
  <verify>
    <automated>grep -q "## \[1.1.0\]" CHANGELOG.md && grep -q "YYY-MM-DD" CHANGELOG.md && grep -q "### Added" CHANGELOG.md && grep -q "### Changed" CHANGELOG.md && grep -c "## \[" CHANGELOG.md</automated>
  </verify>
  <acceptance_criteria>
    - `grep -c "^## \[1.1.0\]" CHANGELOG.md` == 1
    - `grep -c "^### Added" CHANGELOG.md` >= 1
    - `grep -c "^### Changed" CHANGELOG.md` >= 1
    - `grep -c "LogParserBuilder" CHANGELOG.md` >= 1
    - `grep -c "filter_by_exec_time" CHANGELOG.md` >= 1
    - `grep -c "line_number" CHANGELOG.md` >= 1（ParseError 增强的行号字段）
  </acceptance_criteria>
  <done>
    CHANGELOG.md 包含完整的 v1.1.0 条目，格式合规，所有旧历史保持原样。
  </done>
</task>

<task type="auto">
  <name>Task 2: 更新 Cargo.toml 发布元数据</name>
  <files>Cargo.toml</files>
  <read_first>
    - Cargo.toml (当前版本 0.9.1，homepage 含错别字)
    - .planning/phases/09-publishing/09-CONTEXT.md (D-04: 0.9.1→1.1.0；D-05: v1.1.0 作为首次正式发布；D-08: 验证 metadata 字段 + 修正 homepage)
  </read_first>
  <action>
    修改 Cargo.toml 的以下字段：

    **1. version（D-04）**: `"0.9.1"` → `"1.1.0"`
      说明（per D-05）：这是第一个正式语义化版本发布。v1.0 milestone 的工作不单独发 1.0.0，而是在 1.1.0 中一起发布。

    **2. homepage（D-08 修正）**: 将 `"https://github.com/guangl/dm-parser-sqllog"` 改为 `"https://github.com/guangl/dm-database-parser-sqllog"`
      注意：URL 路径中的 `dm-parser-sqllog` 少了 `database-` 片段。repository 字段已经是正确的 `dm-database-parser-sqllog`，对照修复。

    **3. description**: 更新以反映 v1.1 新 API。在当前中文描述末尾或中间加入关键词，例如："支持 LogParserBuilder 链式配置、过滤方法、直接字段访问和 FromSqllog trait"，使其在 crates.io 搜索结果中包含这些功能关键词。

    **4. keywords**: 在现有 `["sqllog", "parser", "dm-database"]` 中添加 `"dameng"`，因为达梦（dameng）是常见搜索词。保留原有 3 个，最终为 `["sqllog", "parser", "dm-database", "dameng"]`。

    **不要修改**：
    - `name` 字段（保持 `dm-database-parser-sqllog`）
    - `edition`、`license`、`authors`、`repository`、`documentation`（repository 和 documentation 已正确）
    - `categories`（保持 `["parsing", "database", "text-processing"]`，无需变更）
    - `exclude` 列表
    - 依赖和 dev-dependencies
    - profile 配置
  </action>
  <verify>
    <automated>cargo publish --dry-run 2>&1</automated>
  </verify>
  <acceptance_criteria>
    - `grep -q 'version = "1.1.0"' Cargo.toml`
    - `grep -q "dm-database-parser-sqllog" Cargo.toml` 中 homepage 字段包含正确的 `dm-database-parser-sqllog`，不包含 `dm-parser-sqllog`（注意：grep 可能同时匹配 repository 等字段，检查 homepage 行）：`grep '^homepage =' Cargo.toml | grep -q 'dm-database-parser-sqllog'`
    - `grep '^homepage =' Cargo.toml | grep -v 'dm-database-parser-sqllog'` 输出为空（homepage 行不再包含错误路径）
    - `grep -q '"dameng"' Cargo.toml`（keywords 包含新加词）
    - `cargo publish --dry-run` 退出码 0
  </acceptance_criteria>
  <done>
    Cargo.toml 版本为 1.1.0，homepage 链接正确，description 反映 v1.1 新 API，keywords 包含 dameng，`cargo publish --dry-run` 通过。
  </done>
</task>

<task type="auto">
  <name>Task 3: 全面重写 README.md</name>
  <files>README.md</files>
  <read_first>
    - README.md (现有内容，了解当前结构作为参照)
    - .planning/phases/09-publishing/09-CONTEXT.md (D-06: 6 节结构；D-07: 中文)
    - .planning/phases/08-documentation/08-CONTEXT.md (D-03: 3 个 Quick Start 场景；D-04: 通过 cargo test --doc 验证)
    - .planning/STATE.md (§Performance Metrics: v1.0 最终吞吐 8.67 GiB/s 单线程)
  </read_first>
  <action>
    全面重写 README.md。保留顶部徽章（badge）行，保留 LICENSE 底部链接，其他内容按照 D-06 的 6 节结构重新组织。语言使用中文（per D-07）。

    结构如下（per D-06）：

    **第 1 节：标题 + 一句话描述**
    - 标题：`# dm-database-parser-sqllog`
    - 徽章：保留现有 crates.io、docs.rs、MIT 许可、覆盖率 4 个徽章
    - 一句话描述：保留现有中文描述"一个高性能的达梦数据库 sqllog 日志解析库，提供零分配或低分配的记录切分与解析功能"

    **第 2 节：安装说明**
    - Cargo.toml 依赖片段，版本号使用 `"1.1.0"`
    - 格式参考现有 README 安装节，简洁即可

    **第 3 节：Quick Start（3 个场景，与 Phase 8 lib.rs 的 # Examples 对齐）**
    使用 `## 快速开始` 作为标题，3 个子节各对应 1 个场景。代码块用 `no_run` 标注（依赖真实日志文件）。

    场景 1：基础解析
    - 使用 `LogParserBuilder::new().threads(1).build("path")?` 构建解析器
    - 用 `parser.iter()` 迭代，match 处理 `Ok(sqllog)` / `Err(e)`
    - 调用 `sqllog.body()` 获取 SQL 正文
    - 简洁示例，展示最常用的完整流程

    场景 2：过滤慢查询
    - 使用 `parser.iter().filter_by_exec_time(100)` 过滤
    - 调用 `sqllog.exec_time()` 获取执行时间
    - 调用 `sqllog.body()` 获取 SQL
    - 展示"过滤 + 字段访问"新 API

    场景 3：批量导出
    - 使用 `parser.iter()` 收集多条记录
    - 调用 `sqllog.body()` + `sqllog.parse_meta()` 获取字段
    - 将结果输出为 CSV（写到 stdout）
    - 展示 `body()` + `parse_meta()` 组合使用

    所有代码块添加 `no_run` 标注（因为需要真实日志文件才能运行）。

    **第 4 节：功能列表**
    使用 `## 主要特点` 或 `## 功能列表` 作为标题，用项目符号列出：
    - 零拷贝 / 惰性解析（`Cow<'a, str>`，惰性字段）
    - 内存映射 I/O（mmap，支持大文件）
    - 极致性能（单线程 8.67 GiB/s）
    - GB18030 自动编码检测
    - LogParserBuilder 链式 API
    - 过滤方法（filter_by_exec_time、filter_by_sql_contains）
    - 直接字段访问（exec_time、row_count）
    - FromSqllog trait
    - Rayon 并行迭代器（par_iter）

    **第 5 节：性能数据**
    单行 "单线程吞吐 **8.67 GiB/s**（5 MB 合成语料库，含 20% 多行记录，Apple M 系列芯片）"
    可选：附加一行说明来源（.planning/STATE.md）。简洁即可，不需要展开 benchmark details（与 examples/ 目录和基准测试说明区分）。

    **第 6 节：API 概览**
    列出关键公共类型和方法：
    - `LogParserBuilder` — 链式构建
    - `Sqllog` — `body()`、`parse_meta()`、`parse_performance_metrics()`、`exec_time()`、`row_count()`
    - `LogIterator` — `filter_by_exec_time()`、`filter_by_sql_contains()`
    - `FromSqllog` trait — 自定义类型转换

    可选：追加现有 README 中的设计说明（设计与注意事项节）、覆盖率说明、测试说明，但保持精简——README 的目标是让新用户快速上手，详细文档在 docs.rs。

    **保留内容（不删除）**：
    - 顶部 badge 行（Crates.io / Documentation / License / Coverage）
    - 底部"相关链接"节（如果有）更新 homepage URL 为正确的 `https://github.com/guangl/dm-database-parser-sqllog`
    - LICENSE 引用
    - MIT License 说明

    **删除内容**（重构后不再需要）：
    - 旧的构建/测试/覆盖率详细说明（Phase 8 doc 中已有 rustdoc，README 只保留一行覆盖率说明）
    - 旧的 API 文档节（替换为新的 API 概览节）
    - 旧的测试结构说明
    - 旧的 `from_path` 用法示例
    - 旧的性能数据（~7.8 GB/s 更新为 8.67 GiB/s）
  </action>
  <verify>
    <automated>grep -q "8.67 GiB/s" README.md && grep -q "filter_by_exec_time" README.md && grep -q "LogParserBuilder" README.md && grep -q "exec_time()" README.md && grep -q "1.1.0" README.md</automated>
  </verify>
  <acceptance_criteria>
    - `grep -c "LogParserBuilder" README.md` >= 1
    - `grep -c "filter_by_exec_time" README.md` >= 1
    - `grep -c "8.67 GiB/s" README.md` == 1
    - `grep -c "1.1.0" README.md` >= 1（安装节使用 1.1.0）
    - `grep -c "Quick Start\|快速开始" README.md` >= 1
    - `grep -c "no_run" README.md` >= 3（3 个 Quick Start 代码块均标记 no_run）
    - `grep -c "FromSqllog" README.md` >= 1
    - `grep "https://github.com/guangl/dm" README.md | grep -v "dm-database-"` 输出为空（所有 GitHub 链接使用正确的 dm-database-parser-sqllog 路径）
    - README 中没有 `from_path` 用法（旧的 API）：`grep "from_path" README.md` 退出码 1（找不到）
    - 整体：README 通过 markdown 合法性检查（可被 GitHub 渲染，无断裂的代码块标记）
  </acceptance_criteria>
  <done>
    README.md 涵盖安装、Quick Start（3 场景）、功能列表、性能数据（8.67 GiB/s）、API 概览，所有链接正确，Quick Start API 签名与 Phase 8 lib.rs 示例一致。
  </done>
</task>

</tasks>

<threat_model>
## Trust Boundaries

| Boundary | Description |
|----------|-------------|
| CHANGELOG.md | 纯文本文件，无安全边界 |
| Cargo.toml | 构建元数据，错误版本号或链接影响用户但无安全风险 |
| README.md | 纯文本文件，无安全边界 |

## STRIDE Threat Register

| Threat ID | Category | Component | Disposition | Mitigation Plan |
|-----------|----------|-----------|-------------|-----------------|
| T-09-01 | Tampering | Cargo.toml homepage URL | mitigate | `cargo publish --dry-run` 验证；Task 2 acceptance_criteria 显式 grep 确认 homepage 路径包含 `dm-database-parser-sqllog` |
| T-09-02 | Information Disclosure | Cargo.toml metadata | accept | description/keywords 均为公开信息，无敏感内容 |
| T-09-03 | Spoofing | 版本号 1.1.0 | mitigate | version 修改由 Task 2 显式 grep 验证；`cargo publish --dry-run` 通过即确认元数据正确性 |
| T-09-SC | Tampering | npm/pip/cargo | mitigate | 无包安装任务，`cargo publish --dry-run` 不修改 lock 文件，slopcheck 不适用 |
</threat_model>

<verification>
1. `grep -q "^## \[1.1.0\]" CHANGELOG.md` — CHANGELOG 条目存在
2. `grep -q 'version = "1.1.0"' Cargo.toml` — 版本号正确
3. `grep '^homepage =' Cargo.toml | grep -q 'dm-database-parser-sqllog'` — 主页链接正确
4. `grep -q "LogParserBuilder" README.md` — README 使用 Builder API
5. `grep -q "8.67 GiB/s" README.md` — 性能数据最新
6. `cargo publish --dry-run 2>&1` — 最终发布验证（退出码 0）
</verification>

<success_criteria>
- CHANGELOG.md 顶部包含完整的 v1.1.0 条目（Added / Changed / Fixed），格式合规
- Cargo.toml: version=1.1.0, homepage 链接正确, description 含 v1.1 新 API 描述, keywords 含 dameng
- README.md: 6 节结构完整（标题描述 / 安装 / Quick Start 3 场景 / 功能列表 / 性能数据 / API 概览）
- 所有 GitHub 链接使用正确的 `dm-database-parser-sqllog` 路径
- cargo publish --dry-run 退出码 0
</success_criteria>

<output>
执行完成后，创建 `.planning/phases/09-publishing/09-01-SUMMARY.md`，记录：
- 已更新的文件（CHANGELOG.md、Cargo.toml、README.md）
- cargo publish --dry-run 验证结果
- 注意：实际 `cargo publish` 由用户手动执行，不在本计划范围内
</output>
