Skip to content

Commit 224c076

Browse files
committed
migration(project): finalize closeout and domain-aware pipeline
Why: - close the Rust migration project with a clear completion narrative - capture business-facing comparison and vibecoding lessons learned - improve real-world aggregation with structured run logs, cross-source dedup, and source/domain coverage guards What: - add structured run-log output plus domain summaries and deduped item tracking - add selection policies for high-rank fallback, per-source minimums, and per-domain minimums - add global title dedup and heuristic domain classification - add multi-domain example config and update project docs, migration docs, and completion docs Verify: - cargo fmt --all --check - just verify - git diff --check
1 parent c23a81c commit 224c076

29 files changed

Lines changed: 1834 additions & 47 deletions

AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
## 工作范围
1515

16-
当前阶段已完成核心迁移闭环,默认工作聚焦迁移收尾校准、验证门禁和后续增量演进准备
16+
当前阶段口径统一为:`v1.x` 迁移收口完成,项目已进入 `v2.x` 增量演进 / 生态扩展阶段。默认工作聚焦验证门禁维护、状态校准和后续增量任务准备
1717

18-
当前收尾阶段默认不做下面这些事情
18+
当前进入增量演进阶段后,默认不做下面这些事情
1919

2020
- 不再以“迁移尚未完成”为理由继续扩大收尾范围
2121
- 不把真实远程对象存储 provider、真实远程 LLM provider、完整 MCP 协议兼容层和更大生态接入混入当前收尾任务

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
| 项目 | 信息 |
1717
| --- | --- |
1818
| 原始项目 | [TrendRadar](https://github.com/sansan0/TrendRadar) |
19+
| 迁移基线版本 | Python 原版 `v6.6.1``trendradar` 包版本) |
1920
| 原始许可证 | GPL-3.0(见 [LICENSE](./LICENSE)|
2021
| 翻译语言 | Python → Rust |
2122
| 翻译许可证 | GPL-3.0(与原始项目一致) |
@@ -27,7 +28,7 @@
2728

2829
TrendRadar Rust 不是把旧系统逐文件翻译成 Rust,而是围绕“配置 -> 抓取 -> 归一化 -> 分析 -> 存储 -> 输出”这条主链路,重新建立一个更小、更稳、更容易验证的趋势监控内核。
2930

30-
当前仓库已经完成 Rust 内核主链路迁移,处于 v1.2 工程收口和迁移收尾校准阶段。它已经具备 Rust workspace、验证入口、Git 协作约束、系统测试基线和迁移文档,但仍不追求把旧 Python 系统的全部生态能力一次性搬到 Rust。
31+
当前仓库已经完成 Rust 内核主链路迁移,`v1.x` 迁移收口已经完成,项目已进入 `v2.x` 增量演进 / 生态扩展阶段。它已经具备 Rust workspace、验证入口、Git 协作约束、系统测试基线和迁移文档,但仍不追求把旧 Python 系统的全部生态能力一次性搬到 Rust。
3132

3233
## 为什么需要这个仓库
3334

@@ -43,7 +44,7 @@ TrendRadar Rust 不是把旧系统逐文件翻译成 Rust,而是围绕“配
4344

4445
## 当前核心能力
4546

46-
- **Workspace 基线**8 个 crate 已按职责拆分,围绕领域、配置、调度、分析、存储、抓取、报告和应用编排建立工作区骨架
47+
- **Workspace 基线**11 个 crate 已按职责拆分,围绕领域、配置、调度、分析、存储、抓取、报告、通知、AI、MCP 和应用编排建立工作区
4748
- **固定工具链**:仓库固定 Rust `1.94.1`,并显式纳入 `rustfmt``clippy``rust-analyzer``rust-docs` 等组件。
4849
- **验证闭环**`just env-check``just verify-basic``just verify``just doc` 提供环境检查、基础验证、完整验证和文档生成入口。
4950
- **协作约束**`.githooks/``.gitmessage`、分支规范和提交规范已经落地,适合并行迁移阶段使用。
@@ -65,13 +66,23 @@ flowchart LR
6566

6667
## 当前状态
6768

68-
- 当前阶段:v1.2 工程收口,已完成 Wave 8 级别的核心功能补齐
69-
- 当前收尾判断:当前 Rust 内核重构迁移已经可以进入收尾阶段,详见 [项目收尾说明](./docs/project-closeout.md)
69+
- 当前阶段:`v1.x` 迁移收口完成,项目已进入 `v2.x` 增量演进 / 生态扩展阶段
70+
- 当前收口说明:本轮迁移收口判断与边界说明见 [项目收尾说明](./docs/project-closeout.md)
7071
- 当前增量轮次:第 1 轮 `v2.0.0-beta` 已完成;第 2 轮 `v2.1.0` 已启动并落下 `C1` 真实远程对象存储的最小闭环
71-
- 已验证内容:`just env-check``just verify-basic``just doc``config -> app::bootstrap` 启动链路、`config -> fetch -> analyze -> storage -> report` 的 fixture / HTTP 系统链路、多个 crate 级边界样例,以及根级 `tests/system/` 下 68 条成功路径 / 空输入 / 错误路径 / 阶段组合样例;当前全工作区共 235 tests 通过
72+
- 已验证内容:`just env-check``just verify-basic``just doc``config -> app::bootstrap` 启动链路、`config -> fetch -> analyze -> storage -> report` 的 fixture / HTTP 系统链路、多个 crate 级边界样例,以及根级 `tests/system/` 下 68 条成功路径 / 空输入 / 错误路径 / 阶段组合样例;当前全工作区共 238 tests 通过
7273
- 已建立内容:CI 基础验证、系统测试模板、Git hooks、提交模板、并行迁移规则
7374
- 当前不包含:更完整的 LLM provider 矩阵、完整 MCP 协议兼容层、Homebrew 等更完整的分发入口,以及更大范围的生态接入
7475

76+
## 迁移后当前功能一览
77+
78+
- **数据输入**:支持多平台热榜抓取与 RSS 订阅抓取,可统一归一化为内部模型后进入同一条 pipeline。
79+
- **核心处理**:支持关键词过滤、排序与来源聚合,支持工作日 / 周末差异、时间窗口和冷却周期等调度规则。
80+
- **存储与输出**:支持 SQLite 本地存储和最小远程对象存储闭环,CLI 可输出 `json``html``both``table``markdown`
81+
- **通知与集成**:当前支持 Webhook、飞书、钉钉、企业微信、Slack、Discord、ntfy 和 Console 回退输出;提供最小 AI 分析旁路和查询型 MCP 工具服务入口。
82+
- **交付方式**:支持 release 安装脚本、`cargo install`、Docker one-shot 和 `systemd timer` 调度,适合本地、CI 和周期性任务运行。
83+
84+
如果你更关心“原版 Python 做到了什么、Rust 现在保留了什么、两者差异在哪里”,直接看 [迁移前后项目对比](./docs/migration-comparison.md)
85+
7586
## 安装
7687

7788
### 方式 1:用 release 安装脚本
@@ -123,6 +134,8 @@ docker compose -f deploy/docker-compose.yml run --rm trendradar --dry-run
123134

124135
完整说明见 [部署指南](./docs/deployment.md)
125136

137+
如果你想抓多个领域,并确保每个领域都至少保留一些新闻,可以从 [deploy/examples/config.multi-domain.json](./deploy/examples/config.multi-domain.json) 开始。这个示例默认启用了 `selection.high_rank_fallback_max_rank``selection.min_items_per_source``selection.min_items_per_domain`
138+
126139
## 快速开始
127140

128141
### 环境要求
@@ -162,6 +175,7 @@ just doc
162175
| `just verify-basic` | 执行 `fmt-check + check + test-basic` |
163176
| `just verify` | 执行 `fmt-check + lint + test` |
164177
| `just doc` / `just doc-open` | 生成或打开本地 API 文档 |
178+
| `trendradar --run-log run.json` | 输出本轮完整结构化运行日志(含去重与领域摘要) |
165179

166180
`just doc` 底层执行的是 `cargo doc --workspace --no-deps`,产物位于 `target/doc`
167181

@@ -230,6 +244,11 @@ cargo bench --package trendradar-app --bench pipeline_bench
230244
- [架构说明](./docs/architecture.md)
231245
- [性能基线](./docs/benchmark-baseline.md)
232246
- [Python 对比基线](./docs/benchmark-python-baseline.md)
247+
- [迁移前后项目对比](./docs/migration-comparison.md)
248+
- [业务视角对比](./docs/business-comparison.md)
249+
- [配置迁移指南](./docs/migration-guide.md)
250+
- [Vibecoding 复盘](./docs/vibecoding-retrospective.md)
251+
- [项目完结说明](./docs/project-completion.md)
233252
- [对外能力总览](./docs/public-capability-overview.md)
234253
- [运行稳定性说明](./docs/runtime-stability.md)
235254
- [项目收尾说明](./docs/project-closeout.md)

crates/analyze/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ keywords.workspace = true
1212
categories.workspace = true
1313

1414
[dependencies]
15+
serde.workspace = true
1516
serde_json.workspace = true
1617
trendradar-domain = { path = "../domain" }
1718

0 commit comments

Comments
 (0)