13 Commits
Author SHA1 Message Date
FinDataHub b777f4e241 docs: 收口 L2 / T5-2 / T8,版本 1.6.0 → 1.6.1
## 待办清单

- L2 标记完成,并记录「为什么不在脚本里写 try/except 双路径,而是给 paths.py 补函数」
- T5 标题更新为「842 → 800 行,第 1–2 步已完成」,补第 2 步完整记录
  (含 SyncSession 的取舍、证伪结果、以及第 3 步为何仍不做)
- 新增 T8:生产入口生成随机 API_KEY 导致受保护端点恒 401,
  含根因对照表、修复、部署位实测、防回退锁

## DEVLOG

追加本轮三段记录。其中两个坑值得单独留档:

1. `pgrep -f "FinDataHub.app/Contents/MacOS"` 会匹配到 Bash 工具自身命令行 →
   kill 自己(exit 143),链式命令中断。部署片段已全部改为 `pgrep -x FinDataHub`。
   这是本项目第二次踩同类问题(第一次是 pkill -f)。
2. Swift 编译报 `failed to produce diagnostic for expression` 时,错误位置会退化到
   文件**最后一行**,真正原因藏在中间的 #Preview 固件里。

## MEMORY.md

同步三处约束:API_KEY 必须走共享加载函数(第二处双入口分叉)、
paths.service_dir 用于服务资源定位、SyncSession 已是状态唯一来源 +
`replaceSession` 的用途与其编译陷阱。

## VERSION

1.6.0 → 1.6.1(patch):本轮为内部重构 + 缺陷修复,无新增用户可见功能。
2026-10-27 23:23:16 +08:00
FinDataHub 88a2ba0675 docs: T6 收尾 + 拆出运维基线 + 记忆瘦身 43%
## 待办清单:T6 标记为已根治

补记第二阶段(装配收敛)与第一阶段(两处都改)的区别,新增三张表:
应统一 / 不应统一 / 防回退锁,以及验收结果与遗留说明
(两入口仍是独立进程,彻底合并需先统一 SQLAlchemy 与 db_pool 两套 DB 层,独立工程)。

## 新增 Docs/FinDataHub-运维基线.md

这些是**引用时需带口径**的参考数据,不属于「改代码前必读」,从 MEMORY.md 拆出:
性能基线(交易/非交易时段对比与测量方式)、生产实际运行链路(launchd + 为何
pipeline_runner 未在生产跑)、MySQL 版本升级链与依赖坑、体积口径(26GB vs 41GB)、
排查技巧(日志路径、jieba 重启信号、BSD grep 漏匹配)。

## MEMORY.md 瘦身

26,422 → **14,980 字节(压 43%)**,400 → 225 行,重构为 11 节分层:
速查 / 过时纠正 / 版本 / 构建部署 / 后端 / 数据层 / 测试 / 跨平台 / 客户端 /
操作禁忌 / 运维指针。

同时清掉已失效内容:`db.replace()` 早已加熔断、部署位已更新到 v1.6.0、
「akshare 是 Windows 硬阻塞」已推翻、`collector.py` 已重构。
24 项关键约束逐条 grep 验证零保留丢失。

动因:原文件已超注入上限被截断(实测截断点约 14.2KB),而截断是从**尾部**发生,
会丢掉最新的第 17–20 条(生产入口、命名冲突、部署流程、build-app 通配)——
恰恰是最该被读到的部分。
2026-10-27 13:30:45 +08:00
FinDataHub c7f26ea3a0 docs: 更新 T5 进展,记录解析器抽取与 NSRange 缺陷
- 待办清单 T5 从「842 行待拆」更新为「842 → 729 行,分步推进中」,
  记录第一步已完成、剩余两步及其判据
- DEVLOG 追加本轮记录(含为何放弃 SyncSession 优先路线)
- 记忆新增第 16 条:解析规则只改 SyncOutputParser、NSRange 必须用
  NSString.length、tqdm 表名取尾词的既有行为勿"修正"
2026-10-27 00:05:18 +08:00
FinDataHub cb905cda01 docs: 新增架构说明与全面审查方案,补入工作记忆
## Docs/ARCHITECTURE.md(新增)

此前缺一份「四层是什么、边界在哪、数据怎么流」的单一入口——新人与跨端协作
只能翻 5000 行 DEVLOG。本文控制在 300 行内,只写当前稳定结构:

- 全景图与四层边界(采集/数据/服务/展示,含"不该做什么")
- 数据流(日更行情、快讯、读取三条链)
- 跨平台约束表(该用 paths/process_utils 的什么,禁止直接写什么)
- 已知边界:明确标注「七步 Pipeline / 四级门控不在生产路径」等
- 测试约定、代码组织约定

## Docs/FinDataHub-全面审查与改进方案-2026-10-25.md(新增)

审查结论 + 11 项修复 + 待办。核心判断:
架构无结构性问题,真正风险集中在「失败时静默」——三处最危险的缺陷同一个模式:
出错不报警、不中断、只悄悄留下错误状态。这类比崩溃难查,因为崩溃有日志。

含两处对初版判断的自我更正:
- datetime.utcnow 并非"已导致数据偏移"(实测主链路用 datetime.now,
  36 万行数据无偏移),真实缺陷是潜在的基准混存
- extend/fetchers/collector.py 已不存在(采集器已重构)

## DEVLOG.md

追加 6 轮记录,含每轮的证据、判据与被推翻的判断。

## .workbuddy/memory

按 P2-23 既定策略入库。MEMORY.md 新增 14 条硬约束,含两处记忆纠正:
collector.py 路径作废、PythonProcessManager 拆分的决策依据与执行顺序。
2026-10-26 20:56:10 +08:00
FinDataHub d7d2a1e8ad chore(repo): 补齐长期未入库的核心源码、文档与本次复查修复
背景
- HEAD 长期停在 08-03 的安全审计提交,此后六周的工作全部只在工作区。
- 更严重的是部分源码从未进入过版本控制(非"改了没提交"):
    · Services/findatahub-core/  索引 0 条 —— 18 个核心模块(pipeline/gate/cleaner/
      db/cross_validator/health/retry…)全新 clone 拿不到
    · Services/findatahub-client/ 索引 0 条
    · App/Sources 磁盘 74 个 .swift、索引 54 —— 20 个未入库(AutoRecoveryManager、
      全套 Settings*Section、PowerSaver、MySQLOnDemandManager、DependencyScanner…)
  一次 `git clean -fd`、误删目录或磁盘故障即可不可恢复地丢失这些文件。

本提交内容
1. 补齐上述未跟踪源码、测试、文档与报告(Services/App/Docs/Tests/根报告)。
2. 纳入 .workbuddy/memory(项目知识)与 .github CI 配置。
3. 本次代码与架构复查的修复(详见下一段说明):
   - Scripts/bin/common.py         PidManager.status 改 split(":", 1),修复时间戳被截断到整点
   - Scripts/bin/db_pool.py        取连接加超时、归还前 rollback、失败归还池位、双检锁初始化
   - Scripts/bin/newsflash_backend.py  _query_all 改 try/finally 无条件归还连接
   - Scripts/bin/newsflash_collect.py 新增 _install_crash_handlers(faulthandler + excepthook)
   - tushare_fetcher/core/fetcher.py  _fetch_static 增量走 upsert,仅全量快照才 replace
   - tushare_fetcher/scripts/tushare_sync.sh 银层迁移补 stock_weekly/stock_monthly;
                                     月度增加分红按报告期全量刷新
   - kuaixun-service/extend/content_enricher.py 禁用自动重定向 + 逐跳 SSRF 校验
   - App/.../AutoRecoveryManager.swift 反复故障改告警不熔断(避免拉长数据空窗)
   - 新增 Scripts/bin/repair_dividend_history.py(分红历史修复,按报告期分页幂等 upsert)
   - 新增 Docs/repro/*(两个可运行的缺陷复现脚本)
   - 补齐 6 个文件共 20 条回归用例(均做过证伪:旧实现下必然失败)

安全
- 已确认未纳入任何凭据:Services/tushare_fetcher/.env 被其 .gitignore 覆盖;
  ~/.config/findatahub/env(0600)在仓库外。

验证
- Python 测试 1074 passed(Scripts/bin 207 / core 105 / tushare 174 / kuaixun 405 / akshare 183)
- Swift 经 `swift build --disable-sandbox` 编译通过,产物 v1.5.2 已部署
2026-09-18 22:37:55 +08:00
FinDataHub 81abeefe7c test: 补 archive_data.py 测试(10 个)
覆盖归档表创建/dry 试运行/迁移删除/main 流程(commit 与
OPTIMIZE 时机、表存在过滤、参数化表名遍历)。Scripts/bin 73 passed。
2026-08-03 12:50:05 +08:00
FinDataHub c5d7969ce9 test: 补 newsflash.py 测试(19 个)并修复 2 处真实 bug
新增 test_newsflash.py 覆盖 _tabulate/run_sql 双路径/main SQL
拼接。测试暴露并修复:fallback 分支缺 import os 崩溃、PidManager
stop 自杀(kill 掉 pytest 自身)。Scripts/bin 63 passed。
2026-08-03 12:48:32 +08:00
FinDataHub 59eae49d6c test: 修复 kuaixun-service 测试环境至 242 passed 全绿
补装 jieba/pytest/pytest-asyncio 到本地 venv(修复 bin/pip
shebang 指向 finance-terminal 的复制问题);mock search_context
隔离网络依赖。原 140 passed + 57 failed 环境失败全部消除。
2026-08-03 12:39:51 +08:00
FinDataHub 940b0f5319 test: 补齐 fetcher/api 编排层测试(tushare 64 + akshare 43)
注入 fake tushare/akshare 模块隔离外部 API,覆盖限流重试、
文件缓存、三模式分发、多源降级与主控器路由。修复 fake pro
位置参数调用。全量 tushare 177 / akshare 122。
2026-08-03 09:14:59 +08:00
FinDataHub 395581c588 test: 补齐 db.py/report.py 数据层测试(tushare 40 + akshare 34)
使用 FakeDB 模式验证真实 SQL 生成(upsert/replace/元数据)与
commit/rollback 语义,覆盖 safe_identifier 白名单、get_engine
URL 编码、_detect_date_col 等逻辑。全量 tushare 113 / akshare 79。
2026-08-03 08:45:24 +08:00
FinDataHub 995021f4d6 test: 补齐 tushare_fetcher core 模块单元测试(73 个)
对标 akshare_fetcher 测试套件,为 config/validator/cache/snapshot
四个 core 模块新增单元测试。修复 test_snapshot 同秒覆盖问题,
改为手写固定 mtime 快照文件。全量 73 passed。
2026-08-03 08:12:06 +08:00
FinDataHub 27b71c380e docs: 更新 DEVLOG 与安全审计报告
记录 P0/P1/P2 质量修复、测试补充与安全审计结论。
2026-08-03 08:08:09 +08:00
FinDataHub a66f7b99ef chore: 初始化项目并导入完整的财经快讯系统代码
本次提交导入了完整的FinDataHub财经快讯项目代码,包括:
1. 版本文件与应用图标资源
2. 后端Python服务(FastAPI+多数据源采集+推送通知)
3. 前端Vue3控制面板
4. macOS原生Swift客户端框架
5. 工具脚本与配置文件
2026-07-18 16:53:36 +08:00