summaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-21 03:03:59 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-21 03:03:59 +0800
commitea3a5026ad76028562ee4aa6b70c79c94fb17d4b (patch)
tree2a164631740656aa5935881e33d344392db4f36a /qa
parentf55ed58d2c75b53774ef7256fddb973ae3e73323 (diff)
downloadfund-lab-ea3a5026ad76028562ee4aa6b70c79c94fb17d4b.tar.gz
fix(api): 加固行情采集子进程超时、取消与进程组清理并脱敏错误
- MarketDataService: setsid 独立会话启动采集器,硬超时覆盖子进程退出与管道 EOF 两个阶段;超时、取消与异常路径按进程组杀灭(含持有管道的后台子进程),不遗留孤儿进程 - App.ts/Search/RefreshNav 传入 ctx.RequestAborted,客户端断开即取消采集 - 对外错误仅返回统一短消息(503 MARKET_DATA_UNAVAILABLE 等),不泄露路径、stderr 或密钥;stderr 仅记录服务端日志 - 新增 9 项子进程回归(成功/stderr 洪泛/超时杀灭/取消杀灭/孤儿管道恢复/畸形载荷/非零退出/启动失败/缺脚本)与 HTTP 脱敏回归;全文套件 66 通过(Domain 19 / Web 17 / API 30) - 实机验证:挂起采集器 503 2.4s 无进程残留;真实 akshare 1.18.96 搜索 000001 返回 200,净值刷新持久化 6010 条观测 - README 与 qa/README 补充环境变量、回归命令、G1 过滤断言口径与真实建档标签辨析
Diffstat (limited to 'qa')
-rw-r--r--qa/README.md4
1 files changed, 2 insertions, 2 deletions
diff --git a/qa/README.md b/qa/README.md
index 96aea72..3c4adf0 100644
--- a/qa/README.md
+++ b/qa/README.md
@@ -42,7 +42,7 @@ bash qa/lifecycle-test.sh
- D 重新读取:恰好 1 次 GET,金额持久化复核。
- E token 失效:换 token 立即清空档案;拦截并延迟的旧 GET 响应落地后被忽略(stale 防护)。
- F 幂等重试:首 POST 被掐断显示错误横幅,重试复用同一 `Idempotency-Key` 成功。
-- G 全程无浏览器 console/page 错误。
+- G 全程无浏览器 console/page 错误。判定口径(见 `qa/driver/browser-test.js` 的 `pageerror`/`response`/`console` 监听):任何非预期 ≥400 的资源响应、任何 pageerror、以及未被显式过滤的 console error 都记为失败;仅预期内的行情探测 `401 (Unauthorized)`、favicon 噪音和非 API 的 "Failed to load resource" 被过滤。
## 真实行情模式
@@ -52,7 +52,7 @@ QA 默认走合成桩。需要真实 AKShare 时,不运行 `run.sh`,而是�
PYTHONPATH=/tmp/opencode/fund-lab-akshare-site /usr/bin/python3 -c "import akshare" # 1.18.96
```
-真实模式输出的 envelope 不含 `_synthetic`,来源为真实数据源;前端“数据来源”行相应显示“真实建档”。
+真实模式输出的 envelope 不含 `_synthetic`,来源为真实数据源。注意两处口径不同:基金档案行的"数据来源:真实建档"描述的是基金建档本身(对应 `isSynthetic=false`,无论行情模式),而行情面板固定显示"AKShare · exact match"并始终只承载行情数据的来源;不要把档案标签当作行情模式的指示器。
## 不变量