Compare commits

..
Author SHA1 Message Date
FoXiMao db45838e22 docs(FEAT-MO-005): 对齐最终 GitNexus 基线 2026-08-25 02:39:34 +08:00
FoXiMao 21393ef451 docs(FEAT-MO-005): 完善市场结构功能追溯档案 2026-08-25 02:38:06 +08:00
FoXiMao 64a9f2e866 feat(FEAT-MO-005): 展示市场结构与成交额趋势 2026-08-25 02:33:21 +08:00
FoXiMao b95b9e5c92 feat(FEAT-MO-005): 接入市场结构前端数据层 2026-08-25 02:10:22 +08:00
FoXiMao ad40ffffc4 feat(FEAT-MO-005): 增加全市场成交额趋势接口 2026-08-25 02:04:00 +08:00
FoXiMao 7b76dd1353 feat(FEAT-MO-005): 增加行业题材资金流向接口 2026-08-25 01:56:51 +08:00
FoXiMao 8174f3f698 feat(FEAT-MO-005): 增加行业题材板块排行接口 2026-08-25 01:51:23 +08:00
FoXiMao b6a9f40ed8 chore(FEAT-MO-005): 同步OpenAPI生成契约 2026-08-25 01:44:50 +08:00
FoXiMao 548f9c4b8b feat(FEAT-MO-005): 建立市场结构数据映射边界 2026-08-25 01:42:59 +08:00
FoXiMao a019aaa343 test(FEAT-MO-005): 补充探针地址边界测试 2026-08-25 01:34:13 +08:00
FoXiMao 50b5266903 docs(FEAT-MO-005): 建立市场结构数据源探针 2026-08-25 01:27:41 +08:00
FoXiMao 4f5a56df3a docs(FEAT-MO-005): 编写市场结构实施计划 2026-08-25 01:06:48 +08:00
FoXiMao bdfab99b10 docs(FEAT-MO-005): 固化市场结构与成交额趋势设计 2026-08-25 01:00:30 +08:00
FoXiMao a1b4d8c591 docs(FEAT-MO-004): 修正收盘后分时时效结论 2026-08-25 00:51:58 +08:00
FoXiMao 86de51f184 docs(GOV-010): 更新GitNexus索引状态 2026-08-25 00:49:50 +08:00
FoXiMao cf520193b3 docs(FEAT-MO-004): 记录AKTools分时能力探针 2026-08-25 00:48:34 +08:00
FoXiMao bdb7923f75 docs(FEAT-MO-004): 固化最终GitNexus状态 2026-08-25 00:27:12 +08:00
FoXiMao 40a24549bc docs(FEAT-MO-004): 更新GitNexus最终基线 2026-08-25 00:25:45 +08:00
FoXiMao 50b6318d25 docs(FEAT-MO-004): 完成详情页治理追溯 2026-08-25 00:24:11 +08:00
FoXiMao 0131f863b6 feat(FEAT-MO-004): 实现指数板块详情分析页 2026-08-25 00:16:43 +08:00
FoXiMao f8f4da93dc docs(FEAT-MO-004): 更新GitNexus索引统计 2026-08-24 23:27:47 +08:00
FoXiMao a7d85bc4a3 docs(FEAT-MO-004): 固化指数板块详情页设计 2026-08-24 23:26:46 +08:00
FoXiMao 2cf31f5137 docs(FEAT-MO-001): 修正概览Review结论门禁 2026-08-24 23:13:21 +08:00
FoXiMao 96232ff225 docs(FEAT-MO-001): 记录概览时间修复追溯 2026-08-24 23:11:01 +08:00
FoXiMao b1310fb86d fix(FEAT-MO-001): 修正概览时间时区显示 2026-08-24 23:08:46 +08:00
FoXiMao 1e80e7d2de docs(FEAT-DS-001): 更新健康检查修复追溯 2026-08-24 22:45:05 +08:00
FoXiMao 9ff6646d56 fix(FEAT-DS-001): 修正MySQL健康检查会话时区 2026-08-24 22:42:21 +08:00
FoXiMao a10c785ff8 docs(FEAT-DS-001): 固化最终开发摘要 2026-08-24 21:53:56 +08:00
FoXiMao 358004fd12 docs(FEAT-DS-001): 更新最终GitNexus基线 2026-08-24 21:52:08 +08:00
FoXiMao 1398804a6f style(FEAT-DS-001): 统一超短行情代码格式 2026-08-24 21:49:48 +08:00
FoXiMao 61283c5c38 docs(FEAT-DS-001): 完成AKTools治理追溯 2026-08-24 21:44:23 +08:00
FoXiMao 6e8a05114e feat(FEAT-DS-001): 接入AKTools超短行情补充数据源 2026-08-24 21:40:22 +08:00
FoXiMao 81c48af8cc docs(FEAT-DS-001): 设计 AKTools 超短补充数据源 2026-08-24 20:43:14 +08:00
FoXiMao 0d0d1eea45 docs(FEAT-QA-001): 补充修复与索引记录 2026-08-24 17:56:20 +08:00
FoXiMao 368672f001 fix(FEAT-QA-001): 隔离市场概览 E2E 测试时钟 2026-08-24 17:53:09 +08:00
FoXiMao 7904571ddd docs(FEAT-MO-003): 补充提交推送记录 2026-08-24 17:52:26 +08:00
FoXiMao 6cbfd8d8a4 docs(FEAT-MO-003): 更新项目 README 2026-08-24 17:51:31 +08:00
FoXiMao ab0b53a56b docs(FEAT-MO-002): 补充提交推送记录 2026-08-24 17:50:49 +08:00
FoXiMao f00e114f88 chore(FEAT-MO-002): 调整 Web 开发端口为 8888 2026-08-24 17:49:19 +08:00
FoXiMao 1f6ed00e6f docs(FEAT-MO-001): 完成评审与治理收口 2026-08-18 21:24:05 +08:00
FoXiMao c2fdfa625b fix(FEAT-MO-001): 校验相邻行情日期 2026-08-18 21:10:58 +08:00
FoXiMao ae2a7e08ed fix(FEAT-MO-001): 校验TDX交易日期语义 2026-08-18 20:48:20 +08:00
FoXiMao 7e4dcd9232 fix(FEAT-MO-001): 修复交易日对齐与延迟状态 2026-08-18 20:12:26 +08:00
FoXiMao 49f6be9c43 fix(FEAT-MO-001): 修复TDX数据完整性与状态展示 2026-08-18 19:30:34 +08:00
FoXiMao ff8ada8316 feat(FEAT-MO-001): 接入TDX市场宽度板块与成交额趋势 2026-08-18 17:37:36 +08:00
FoXiMao 82619489a9 feat(FEAT-MO-001): 完成TDX市场概览首屏 2026-08-18 15:28:35 +08:00
FoXiMao 27bc3c198f feat(FEAT-MO-001): 同步市场概览前端契约 2026-08-18 13:43:48 +08:00
FoXiMao 15a25002ce feat(FEAT-MO-001): 增加市场概览分模块接口 2026-08-18 13:31:24 +08:00
FoXiMao c2fa929936 feat(FEAT-MO-001): 增加TDX直连配置与客户端 2026-08-18 13:16:07 +08:00
FoXiMao 6eb34b5afe docs(FEAT-MO-001): 记录TDX开发前门禁 2026-08-18 13:05:32 +08:00
FoXiMao d283ee3196 docs(FEAT-MO-001): 制定TDX概览实施计划 2026-08-18 12:59:17 +08:00
FoXiMao 9a965fab14 docs(FEAT-MO-001): 确认TDX直连概览设计 2026-08-18 12:48:28 +08:00
FoXiMao b49e7b8b08 docs(GOV-012): 完成发布后基线追溯记录 2026-08-18 03:10:29 +08:00
FoXiMao 11edeb0111 chore(GOV-012): 封存 v0.0.10 开发库 Schema 基线 2026-08-18 03:08:38 +08:00
FoXiMao 16bde94df6 chore(GOV-012): 发布 v0.0.10 元数据 2026-08-18 03:06:48 +08:00
240 changed files with 14600 additions and 116 deletions
+1 -1
View File
@@ -29,7 +29,7 @@
<!-- gitnexus:start -->
# GitNexus — Code Intelligence
This project is indexed by GitNexus as **a-share-analysis** (2429 symbols, 3280 relationships, 63 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
This project is indexed by GitNexus as **a-share-analysis** (4266 symbols, 6330 relationships, 147 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely.
> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first.
+7
View File
@@ -4,6 +4,13 @@
## Unreleased
## 0.0.10 - 2026-08-18
- 使用 Node.js 22.x 与 mysql2 直接读取 MySQL 5.7.x 元数据和 `SHOW CREATE`,移除 Schema 基线对本机 MySQL CLI 的依赖。
- 新增 format v3 exporter/driver 元数据,永久只读兼容 format v1/v2。
- 增加对象目录、视图依赖排序、并发漂移检测、错误脱敏、超时和定义大小保护。
- 恢复版本开发门禁并封存 `v0.0.9` development `captured_empty` Schema 基线。
## 0.0.9 - 2026-08-17
- Node.js 运行时约束明确为完整 22.x,不绑定 minor 或 patch。
+61 -8
View File
@@ -1,26 +1,59 @@
# A-Share Analysis
A read-only A-share market overview and analysis tool.
一个只读的 A 股市场概览与盘面分析工具,面向个人复盘和小范围使用,不提供交易下单、荐股、社区或公开组合功能。
## 当前阶段
项目正在建立工程基线,首个业务模块为市场综合概览。当前不包含用户体系、订阅与支付。
项目当前以市场综合概览为首个业务模块,用户体系、订阅与支付暂不进入首屏业务范围。
当前已接入 TDX 只读行情并完成以下首屏模块:
- 市场结论、驱动因素和风险摘要。
- 核心指数、三市场宽度、一级行业板块强弱和三市场成交额趋势。
- 综合、短线、中长线视角入口,以及规则、AI、混合、对照分析偏好入口。
- 指数和板块详情入口已预留,详情页另立功能实现;强势个股模块尚未开发。
- 超短情绪补充模块已接入本机 AKTools:展示涨停、最高连板、炸板、昨日涨停表现、涨停行业和规则结论;AKTools 不可用时独立降级。
主力净流入、完整盘中新闻、版本化概念题材成分和 AI 自动结论仍需独立数据源或后续功能立项,不用 TDX 或 AKShare 缺失字段冒充。
## Projects
- `web/`: Vue 3 market terminal frontend.
- `server/`: NestJS API、Scheduler 与 Worker 三个独立进程。
- `deploy/`: MySQL 5.7、Redis、RocketMQ 5.x 的配置契约,以及 systemd/Nginx 源码部署模板。
- `docs/`: Product and implementation specifications.
- web/: Vue 3、Vite、TypeScript、Naive UI、Dart Sass、Axios 前端。
- server/: NestJS API、Scheduler 与 Worker 三个独立源码进程。
- deploy/: MySQL 5.7.x、Redis、RocketMQ 5.x 的配置契约,以及 systemd/Nginx 源码部署模板。
- docs/: PRD、架构、治理、部署和功能档案。
- tools/: Schema、契约、边界和治理验证工具。
The first implementation slice is the market overview screen in `web/`.
首个实现切片是 web/ 下的市场综合概览首屏。
## 环境与部署
- [本地开发环境](docs/deployment/local-development.md):使用开发机已有 Redis,应用全部从源码运行。
- [Ubuntu 源码生产部署](docs/deployment/ubuntu-source-production.md):项目唯一生产部署方式,支持 Ubuntu 22.04/24.04 LTS x86_64。
无秘密环境模板位于 `deploy/env/`。生产配置不进入 Git 或发布目录;Node.js 22.x、pnpm 10.25.0、Nginx 和外部基础设施由服务器管理员提供。项目不安装、启动、停止或删除 Redis、MySQL 和 RocketMQ。
无秘密环境模板位于 deploy/env/。生产配置不进入 Git 或发布目录;Node.js 22.x、pnpm 10.x、Nginx 和外部基础设施由服务器管理员提供。项目不安装、启动、停止或删除 Redis、MySQL 和 RocketMQ。
前端开发服务器固定监听 127.0.0.1:8888,API 使用 127.0.0.1:3000。当前首屏不依赖 Scheduler、Worker 或 RocketMQ 消费链路;MySQL、Redis 和 RocketMQ 是否启用,以各进程的 local 配置和具体功能需求为准。
AKTools 是项目外部维护的 AKShare HTTP 服务,开发机默认监听 `127.0.0.1:8080`。API 仅在 `AKTOOLS_ENABLED=true` 时调用三个固定接口;项目不安装、启动、停止或暴露 AKTools,也不允许前端直接请求它。生产是否启用必须先完成上游授权、稳定性和访问控制评估。
数据库开发约束:Schema 基线只能读取开发库 a_share_analysis_dev,禁止触碰生产库;字符集为 utf8mb4,排序规则为 utf8mb4_general_ci,时区为东八区。
## TDX 连接方式
平台始终访问 Mac 本机回环地址 http://127.0.0.1:17710/。该地址由 SSH 隧道转发到家中 Windows 的 TDX 客户端 127.0.0.1:17709,不把 TDX 暴露到局域网或公网。
在家使用 tdx-windows-lan,在外通过 Tailscale 使用 tdx-windows-tailnet;两种隧道不能同时启动:
# 外部网络场景
tailscale up
tailscale ping <WINDOWS_TAILSCALE_HOST>
ssh -fN -M -S ~/.ssh/tdx-windows-tailnet-control tdx-windows-tailnet
nc -vz 127.0.0.1 17710
lsof -nP -iTCP:17710 -sTCP:LISTEN
完整的 Windows OpenSSH、双场景切换、停止和只读冒烟步骤见 docs/deployment/tailscale-tdx-development.md。
## 开发入口
@@ -28,6 +61,9 @@ The first implementation slice is the market overview screen in `web/`.
- [代码开发规范](docs/governance/code-development-standards.md)
- [开发流程规范](docs/governance/development-workflow.md)
- [系统架构](docs/architecture/system-architecture.md)
- [本地开发环境](docs/deployment/local-development.md)
- [TDX 隧道开发手册](docs/deployment/tailscale-tdx-development.md)
- [Ubuntu 源码生产部署](docs/deployment/ubuntu-source-production.md)
开始任何模块前,先阅读根目录 `AGENTS.md`,然后运行:
@@ -39,6 +75,23 @@ npm run governance:start -- FEAT-MO-001 market-overview
Schema 命令只允许处理固定开发库;导出器使用 Node.js `mysql2`,本机无需安装 MySQL Server 或 CLI。当前 MySQL 未启用时会为上一发布版本生成可验证的不适用清单,不会连接数据库或创建空 SQL;启用但无对象时生成 format v3 `captured_empty` 清单。完整规则见 [开发流程规范](docs/governance/development-workflow.md)。
### 本地启动
pnpm install --frozen-lockfile
pnpm check:runtime
redis-cli -h 127.0.0.1 -p 6379 ping
pnpm --filter @a-share-analysis/server dev:api
pnpm --filter @a-share-analysis/web dev
访问 Web:<http://127.0.0.1:8888/>;访问 API 健康检查:<http://127.0.0.1:3000/api/v1/health>。前端同源 /api 请求由 Vite 代理到 API,strictPort 已启用,8888 被占用时会明确失败,不会静默换端口。
Scheduler 和 Worker 只在对应任务链路开发时启动:
pnpm --filter @a-share-analysis/server dev:scheduler
pnpm --filter @a-share-analysis/server dev:worker
前端 API 请求统一经过 web/src/utils/request.ts 封装的 Axios;业务请求位于 web/src/api/<业务域>/index.ts。
## 项目仓库
- Gitea:<https://git.foximao.com/FoXiMao/a-share-analysis>
+1 -1
View File
@@ -1 +1 @@
0.0.9
0.0.10
@@ -0,0 +1,33 @@
{
"format_version": 3,
"status": "captured_empty",
"application_version": "v0.0.10",
"git_commit": "16bde94df68263672fa12e2823afe024c741f84e",
"source_environment": "development",
"database_name": "a_share_analysis_dev",
"charset": "utf8mb4",
"collation": "utf8mb4_general_ci",
"generated_at": "2026-08-17T19:07:54.864Z",
"generator": "schema-baseline/3.0.0",
"reason": "none",
"schema_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"objects": {
"tables": false,
"views": false,
"triggers": false,
"routines": false,
"events": false
},
"object_counts": {
"tables": 0,
"views": 0,
"triggers": 0,
"routines": 0,
"events": 0
},
"exporter_name": "mysql2-show-create",
"exporter_version": "1.0.0",
"database_driver": "mysql2",
"database_driver_version": "3.23.3",
"mysql_server_version": "5.7.42-0ubuntu0.18.04.1"
}
+6
View File
@@ -4,6 +4,12 @@ APP_ENV=development
API_HOST=127.0.0.1
API_PORT=3000
LOG_LEVEL=debug
TDX_BASE_URL=http://127.0.0.1:17710
TDX_TIMEOUT_MS=5000
# AKTools 仅在本机内网补充超短行情,关闭时短线模块返回不可用。
AKTOOLS_ENABLED=false
AKTOOLS_BASE_URL=http://127.0.0.1:8080
AKTOOLS_TIMEOUT_MS=10000
# 第一阶段实际启用的 Redis。
REDIS_HOST=127.0.0.1
+6
View File
@@ -3,6 +3,12 @@ APP_ENV=production
API_HOST=127.0.0.1
API_PORT=3000
LOG_LEVEL=info
TDX_BASE_URL=http://127.0.0.1:17710
TDX_TIMEOUT_MS=5000
# AKTools 仅允许受控内网回环部署,未配置时保持关闭。
AKTOOLS_ENABLED=false
AKTOOLS_BASE_URL=http://127.0.0.1:8080
AKTOOLS_TIMEOUT_MS=10000
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
+2
View File
@@ -40,6 +40,8 @@ tools/ 可重复执行的治理和开发工具
- Redis保存最新快照、缓存、锁和限流状态。
- Vue前端只读后端 API,不直接接触外部数据源和密钥。
市场概览的 AKTools 补充链路是按需读取的例外:Nest API 通过固定 Adapter 调用外部 AKTools HTTP 服务,前端不直连,且失败只影响超短模块。它不经过 Scheduler、Worker、RocketMQ、MySQL 或 Redis,也不改变后续正式采集链路的总体架构。
## 3. 前后端模块边界
后端以业务模块为一级目录,模块内部按实际职责建立 Controller、Service、DTO、Domain、Repository 和 Adapter。小模块不强制凑齐目录,禁止把全部 Controller/Service 堆入全局目录,也禁止无业务逻辑的透传层。领域规则只依赖项目端口,MySQL、Redis、RocketMQ、免费数据源和 AI Provider 由基础设施 Adapter 实现。
+11 -1
View File
@@ -29,7 +29,17 @@ pnpm --filter @a-share-analysis/server dev:worker
pnpm --filter @a-share-analysis/web dev
```
API 健康端点是 `http://127.0.0.1:3000/api/v1/health`,Web 是 `http://127.0.0.1:5173/`。Scheduler 与 Worker 在 GOV-009 中保持 `ROCKETMQ_ENABLED=false`;没有经过验证的 Node RocketMQ 客户端时,启用配置会直接失败,不使用内存队列伪降级。
API 健康端点是 `http://127.0.0.1:3000/api/v1/health`,Web 是 `http://127.0.0.1:8888/`。Scheduler 与 Worker 在 GOV-009 中保持 `ROCKETMQ_ENABLED=false`;没有经过验证的 Node RocketMQ 客户端时,启用配置会直接失败,不使用内存队列伪降级。
## AKTools 补充数据源
AKTools/AKShare 作为开发机外部服务单独运行,默认地址为 `http://127.0.0.1:8080`。启动 API 前确认服务可访问;需要启用短线情绪模块时,在 API local 配置中设置 `AKTOOLS_ENABLED=true`,否则模块明确显示不可用,不影响 TDX 模块。Nest 只允许三个已验证接口,前端不直连 AKTools。项目不会管理该 Python 服务的安装、进程和数据。
```bash
curl --fail 'http://127.0.0.1:8080/api/public/stock_zt_pool_em?date=20260824'
```
生产环境不能直接复用本机 AKTools 配置;启用前必须提供受控内网地址、认证/访问控制、上游授权和稳定性评估,并扩展服务端白名单校验。
## 日常验证与停止
@@ -43,6 +43,10 @@ curl --fail http://127.0.0.1/
当前工程尚无业务表迁移;后续新增迁移后必须在切换 `current` 前单独执行并记录结果。生产环境禁止 `synchronize: true`,开发流程也禁止用生产数据库做 Schema 基线或连接测试。
## AKTools 生产边界
AKTools 不随本项目发布,也不由 systemd 单元管理。生产 API 默认关闭 `AKTOOLS_ENABLED`;只有在 AKTools 以受控内网服务部署、完成访问控制、授权和稳定性评估后,才可在 API 的生产环境文件中启用。生产配置不得把 AKTools 地址暴露给浏览器,且必须同步修改服务端白名单和健康检查方案;未完成这些前置条件时保持短线模块 `unavailable`。
## 检查与回退
使用 `systemctl status`、`journalctl -u`、HTTP 健康端点和 Nginx 同源访问结果确认发布。任一验证失败时,把 `/opt/a-share-analysis/current` 原子切回上一完整发布目录,重启三个 systemd 服务并重复健康检查。
@@ -0,0 +1,39 @@
# AKTools 超短行情补充数据源设计
## 方案
AKTools 保持为独立的内网 HTTP 服务,Nest 在市场概览模块内增加 AKTools Adapter。Adapter 负责请求、超时、响应大小和错误边界;Mapper 负责把 AKTools 中文字段转换成稳定领域 DTO;Service 并行调用三个接口并生成规则结论。
```text
Vue → Nest Controller → ShortTerm Service → AKTools Client → 127.0.0.1:8080 → AKShare
└→ TDX 既有市场概览链路保持独立
```
## 接口
```text
GET /api/v1/market-overview/short-term/emotion
GET /api/v1/market-overview/short-term/conclusion
```
两个接口共享一次请求内的 `snapshotId`,但不要求跨请求持久化。`emotion` 返回结构化指标,`conclusion` 返回规则结论和证据引用。
## 安全策略与评估
- `AKTOOLS_BASE_URL` 只能是配置值,禁止来自请求参数;启动时仅允许回环地址或明确内网白名单。
- 客户端只使用 GET 和固定接口名,不把任意函数名暴露成代理能力。
- 超时、响应体大小和 JSON 结构均在 Adapter 层限制;异常只返回脱敏 warning。
- AKTools 不直接对外开放;若未来扩展到多机内网,必须增加访问控制和反向代理认证。
- 不保存 AKShare 原始载荷、不记录真实内网地址、不提交凭据。
## 性能目标与评估
三个上游请求使用 `Promise.allSettled` 并行执行,单请求超时 10 秒,短线接口 P95 目标小于 12 秒。由于 V1 不持久化、不缓存,性能风险主要是 AKShare 上游限流和网络延迟;通过超时、部分结果和独立降级控制影响面。
## 错误处理与回退
AKTools 完全不可用时短线响应为 `unavailable`,TDX 响应不受影响。单个接口失败时返回 `partial` 并保留其他有效模块。回退只关闭 AKTools 功能开关和相关路由,不删除 TDX 代码。
## 架构同步
需要同步 OpenAPI DTO、Web API 类型、开发/生产环境模板、API 健康检查说明、测试和功能档案;不修改消息、数据库、Redis、Scheduler、Worker。
@@ -0,0 +1,33 @@
# AKTools 超短行情补充数据源开发总结
- 功能编号:FEAT-DS-001
- 状态:in_review
- 发布状态:unreleased
## 原始开发需求
在内网环境使用已经运行的 AKTools,补充 TDX 不提供的超短行情数据。
## 需求与范围变化
V1 采用 AKTools 外部服务直连,不新增 Python 服务和 Docker;暂不接入全市场现货接口,因为该接口本地验证返回 HTTP 500。
## 实际完成需求
已完成 AKTools 配置校验、固定接口 Client、中文字段 Mapper、短线情绪与规则结论 DTO/Service/Controller、OpenAPI 生成契约、Vue Axios API、Composable 状态、短线情绪面板和开发/生产环境模板。页面通过独立状态展示正常、部分、延迟、不可用和空数据,不阻塞 TDX 模块。
## 修复缺陷
修复了短线情绪面板缺失导致的前端测试导入失败,并补齐页面未消费短线结论响应的问题;同时修复页面接线遗漏造成的 `shortTermConclusion` 未定义告警。补充修复 MySQL 健康检查因 `mysql2` 的 `timezone` 选项不会设置服务端会话时区而误判不可用的问题:健康检查现在在同一连接上显式执行 `SET SESSION time_zone = '+08:00'`,完成元数据校验后始终释放连接。未发现 TDX 回归。
## 未完成与延期项
炸板率严格口径、资金净流入、盘中新闻、历史快照和生产授权评估不属于 V1。
## 关键提交
关键提交:`6e8a051 feat(FEAT-DS-001): 接入AKTools超短行情补充数据源`、`61283c5 docs(FEAT-DS-001): 完成AKTools治理追溯`、`1398804 style(FEAT-DS-001): 统一超短行情代码格式`、`358004f docs(FEAT-DS-001): 更新最终GitNexus基线`、`9ff6646 fix(FEAT-DS-001): 修正MySQL健康检查会话时区`,均已推送 `origin/main`。
## 验证证据
Schema 基线与校验通过(`v0.0.10 captured_empty`);开发前 GitNexus 风险 LOW,页面改动前对 `useMarketOverview` 影响分析为 LOW;后端 15 个测试文件 80 个测试通过,前端 8 个测试文件 23 个测试通过,Web typecheck 通过,`pnpm verify` 全量门禁通过且 Playwright 4 个测试通过。健康接口真实验证返回 HTTP 200,MySQL 为 5.7.42 / `a_share_analysis_dev` / `+08:00`。安全边界包括回环地址白名单、固定接口、超时、响应体上限、JSON 校验和错误脱敏;三个上游请求并行,单请求超时 10 秒,MySQL 健康查询使用连接级 finally 释放,当前性能证据为本机定向测试,不代表生产容量。
@@ -0,0 +1,24 @@
# GitNexus 开发后基线
- 功能编号:FEAT-DS-001
- 状态:已刷新
- 索引提交:`9ff6646`
## GitNexus 状态
```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis
Indexed: 2026-08-24 22:43:05 GMT+8
Indexed commit: 9ff6646
Current commit: 9ff6646
Status: up-to-date
统计:3,445 nodes / 4,913 edges / 72 clusters / 104 flows
```
## 开发后影响
新增 AKTools Adapter、短线 Service/Controller、OpenAPI、Web API、Composable 和页面组件形成独立短线执行流;既有 TDX 概览执行流未被改写。`loadApiConfig` 上游影响为 LOW,直接消费者仅配置测试;`useMarketOverview` 页面影响为 LOW。数据库、Redis、RocketMQ、Scheduler 和 Worker 没有新增业务执行流。本轮 MySQL 健康检查修复的暂存区检测识别 `UseFactory → MysqlHealthClient` 与 `OnModuleDestroy → End` 两条连接生命周期流,工具风险 MEDIUM;逐项复核后确认仅是连接池获取/释放行为变化。
## 变更检测
提交 `9ff6646` 后已重新索引,状态为 up-to-date;`gitnexus_detect_changes({ scope: "all" })` 仅识别 GitNexus 生成的 `AGENTS.md` 统计行,风险 LOW,无业务执行流影响。健康检查代码及本功能档案已包含在 `9ff6646`,远程 `origin/main` 已同步。
@@ -0,0 +1,26 @@
# GitNexus 开发前基线
- 功能编号:FEAT-DS-001
- 记录时间:2026年8月24日 GMT+8 20:38:07
- 分支:main
- 基线提交:0d0d1eea4530
## 工作区
```text
?? "SRMS3.6.0\345\270\270\350\247\201\351\227\256\351\242\230\346\265\213\350\257\204\351\242\230.2csv"
```
## GitNexus 状态
```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis
Indexed: 8/24/2026, 8:38:06 PM
Indexed commit: 0d0d1ee
Current commit: 0d0d1ee
Status: ✅ up-to-date
```
## 后续人工分析
在修改代码前,将 GitNexus query、context、impact 的结论写入 `gitnexus/impact-plan.md`。高风险结果必须先获得用户确认。
@@ -0,0 +1,3 @@
# GitNexus 前后对比
开发前基线已记录在 `before.md`。开发后 GitNexus 重新索引确认新增 AKTools Adapter、短线 Service、Controller、Web API、配置、页面和文档均落在计划范围;现有 TDX 市场概览执行流未被改写。`useMarketOverview` 的直接消费者为页面和测试,影响风险 LOW;未发现数据库、Redis、RocketMQ、Scheduler 或 Worker 新执行流。本轮健康检查修复前后对比增加连接级会话设置和 finally 释放,暂存区工具风险 MEDIUM 仅来自连接生命周期执行流,未形成新的跨模块业务依赖。
@@ -0,0 +1,11 @@
# GitNexus 变更检测
- 功能编号:FEAT-DS-001
- 开发前:已完成 `MarketOverviewService` 和 `useMarketOverview` 影响分析,均为 LOW。
- 提交前:`gitnexus_detect_changes({ scope: "staged" })` 识别新增 AKTools、短线接口、前端状态、配置和文档;风险被工具标记为 CRITICAL,复核确认原因为新增 API 启动注册和配置加载执行流,不是跨到数据库、消息或生产模块。
- 首次提交后:`gitnexus_detect_changes({ scope: "all" })` 返回无变更,索引与提交 `6e8a051` 一致;格式化提交 `1398804` 前的 staged 检测仅触及同一短线执行流,已由全量测试复验。
- 当前:修复提交 `9ff6646` 已推送;重新索引后 GitNexus 与提交一致,当前全量检测仅识别自动更新的 `AGENTS.md` 统计行(LOW、无业务执行流)。
- 本轮健康检查修复暂存区检测:6 个文件、28 个符号、2 条执行流,工具风险为 MEDIUM;实际代码影响集中在 `createMysqlHealthClient`、`MysqlHealthClient` 及 `OnModuleDestroy → End` 连接生命周期,文档章节被工具按标题识别为符号。直接 upstream impact 均为 LOW,未发现业务模块、Web、消息、数据库 Schema 或数据源执行流影响。
复核结论:TDX 核心链路保持独立;没有新增数据库、Redis、RocketMQ、Scheduler 或 Worker 业务执行流。工具报告中的 MEDIUM 结果已记录并完成逐项 `context/impact` 复核,原因是连接关闭生命周期被纳入执行流,而非跨模块业务耦合。
@@ -0,0 +1,27 @@
# GitNexus 开发前影响计划
- 功能编号:FEAT-DS-001
- 总体风险:LOW
## 直接与间接影响
GitNexus query 以“市场概览 超短行情总结 指数 板块 宽度 资金趋势”为目标执行,未发现现有超短执行流;结果主要定位到市场概览文档、测试和 `MarketOverviewService`。
`MarketOverviewService` context:直接消费者为市场概览 Controller、Module、OpenAPI 导出和测试;现有方法为指数、摘要、宽度、板块和成交额趋势,不包含 AKTools 数据。
`MarketOverviewService` upstream impact:影响 5 个关联对象,直接关联 3 个,风险 LOW,受影响执行流 0,受影响模块 0。结论是新增 AKTools 适配器和独立短线接口,不改写现有 TDX 方法,避免扩大现有概览方法的调用面。
## 跨模块同步修改
| 范围 | 判断 | 处置 |
|---|---|---|
| HTTP/OpenAPI | 需要同步 | 新增短线情绪和短线结论 DTO、Controller 路由并重新生成契约。 |
| Web API | 需要同步 | 新增 `web/src/api/market-overview/index.ts` 的业务请求和短线页面状态。 |
| 消息契约 | 不修改 | V1 为按需读取,不发布行情事件。 |
| 数据库 | 不修改 | 不持久化 AKTools 响应,不读取生产库。 |
| Redis | 不修改 | 暂不缓存,避免在数据口径未稳定时引入一致性问题。 |
| API 进程 | 需要同步 | Nest API 增加固定内网 AKTools 客户端和超时降级。 |
| Scheduler/Worker | 不修改 | V1 无采集任务、重试队列或历史快照任务。 |
| 配置部署 | 需要同步 | 增加可选 `AKTOOLS_ENABLED`、`AKTOOLS_BASE_URL`、`AKTOOLS_TIMEOUT_MS` 模板和文档。 |
| 测试 | 需要同步 | 增加客户端、映射、Service、OpenAPI、Web 状态和 E2E 覆盖。 |
| 文档 | 需要同步 | 更新架构、开发环境、功能档案和 AKTools 内网运行说明。 |
@@ -0,0 +1,22 @@
# AKTools 超短行情补充数据源实施计划
## 任务清单
1. [x] 完成功能档案、配置契约和 GitNexus 影响记录。
2. [x] 为 AKTools 客户端、字段类型和映射器编写失败测试。
3. [x] 实现固定接口、超时、响应校验和中文字段映射。
4. [x] 实现短线情绪 Service、规则结论、DTO 和 Controller。
5. [x] 更新 OpenAPI 生成契约、前端 API、页面模块和异常状态。
6. [x] 补充开发/生产模板及内网 AKTools 运维说明。
7. [ ] 执行完整 `pnpm verify`、治理完成门禁和远程推送(收尾阶段)。
## 文件边界
- 新增 `server/apps/api/src/market-overview/aktools/` 客户端、类型和映射。
- 新增短线业务 DTO、Service 和 Controller;不改动既有 TDX Mapper。
- 修改 `web/src/api/market-overview/index.ts`,页面只消费公开 DTO。
- 修改环境模板、架构文档、开发文档和 OpenAPI 生成产物。
## 实施顺序
先测试字段校验和映射,再实现客户端;先实现后端契约,再实现前端状态;每个阶段执行对应定向测试,最后执行完整门禁。
@@ -0,0 +1,8 @@
featureId: FEAT-DS-001
slug: aktools-supplement
name: AKTools 超短行情补充数据源
status: in_review
release: unreleased
source: aktools
scope: internal_lan_only
createdAt: 2026-08-24
@@ -0,0 +1,69 @@
# AKTools 超短行情补充数据源 PRD
- 功能编号:FEAT-DS-001
- PRD 版本:0.1
- 状态:design_approved
- 日期:2026-08-24
## 背景与问题
TDX 已提供指数、市场宽度、板块和成交额,但不能覆盖涨停池、炸板池、昨日涨停表现等超短情绪指标。AKTools 已在本机内网环境运行,并验证了相关 HTTP 接口。
## 目标用户与场景
个人用户在盘中或收盘后查看超短情绪,不进行交易下单。V1 仅支持本机或受控内网访问,AKTools 只作为 Nest API 的内部补充数据源。
## 产品目标
- 在市场概览中提供结构化超短情绪数据。
- 显示涨停数量、最高连板、连板梯队、炸板数量和昨日涨停表现。
- 所有结论都能追溯到 AKShare 数据字段、交易日期和数据状态。
- AKTools 不可用时不影响 TDX 核心市场概览。
## 非目标
- 不实现交易建议、买卖信号、目标价或仓位建议。
- 不直接暴露 AKTools 的通用接口给前端或公网。
- 不在 V1 计算未经确认口径的炸板率、资金净流入或新闻情绪评分。
- 不启用 MySQL、Redis、RocketMQ 或历史快照存储。
## 功能需求
| 编号 | 优先级 | 需求 | 可观察结果 |
|---|---|---|---|
| FR-001 | P0 | 读取涨停池 | 展示涨停数量、最高连板和连板梯队。 |
| FR-002 | P0 | 读取炸板池 | 展示炸板数量和可用的炸板次数摘要。 |
| FR-003 | P0 | 读取昨日涨停池 | 展示今日平均涨跌幅及上涨、下跌、持平数量。 |
| FR-004 | P0 | 生成规则结论 | 结论必须携带依据、交易日期和状态。 |
| FR-005 | P0 | 独立降级 | AKTools 超时或异常时,短线模块显示 unavailable,TDX 模块继续可用。 |
| FR-006 | P1 | 内网边界 | AKTools 地址只来自服务端固定配置,默认回环地址。 |
## 数据与口径
V1 调用 `stock_zt_pool_em`、`stock_zt_pool_zbgc_em`、`stock_zt_pool_previous_em`。AKTools 返回的中文字段只在 Adapter 内解析,领域 DTO 使用稳定英文属性。
- 涨停数量:涨停池有效记录数。
- 最高连板:有效 `连板数` 的最大值。
- 连板梯队:按 `连板数` 分组计数。
- 炸板数量:炸板池有效记录数;不直接推导炸板率。
- 昨日涨停表现:昨日涨停池有效 `涨跌幅` 的算术平均,以及正、负、零数量。
- 封板资金:仅作为原始统计摘要展示,单位转换为亿元并标明来源,不解释为主力净流入。
## 状态与异常
响应统一使用 `fresh`、`delayed`、`partial`、`unavailable`。交易日不等于上海当前日期时标记 `delayed`;字段缺失或部分接口失败时标记 `partial`;连接失败、超时、HTTP 5xx 或响应格式错误时标记 `unavailable`。
## 安全与合规
AKTools 仅绑定 `127.0.0.1:8080`。Nest 不接受客户端传入上游 URL,不记录原始载荷,不向前端透传上游异常。AKShare 及其上游数据的授权和再分发边界在正式对外部署前另行评估。
## 性能目标
三个 AKTools 请求并行执行,单请求超时目标 10 秒,短线接口正常响应目标 P95 小于 12 秒。V1 不引入缓存,避免陈旧数据和缓存击穿复杂度。
## 验收标准
- 有效交易日数据可生成短线情绪 DTO 和规则结论。
- 任一 AKTools 接口失败不会导致 TDX 市场概览接口失败。
- OpenAPI、前端 API 和页面状态与后端 DTO 一致。
- API 地址固定为本机内网配置,仓库不包含真实凭据和机器地址。
@@ -0,0 +1,13 @@
# 测试结果
## 当前状态
已完成代码验证:后端 Vitest 15 个测试文件、80 个测试通过,包含 MySQL 健康检查连接设置/释放回归、AKTools Client/Mapper、短线 Service、HTTP E2E 和 OpenAPI;前端 Vitest 8 个测试文件、23 个测试通过,包含短线面板、Composable 和 API;Web typecheck 通过。`pnpm verify` 全量门禁通过,Playwright 4 个测试通过。AKTools 本机涨停池、炸板池和昨日涨停池冒烟均返回 HTTP 200;`stock_zh_a_spot_em` 返回 HTTP 500,未纳入 V1。
## 安全验证
配置测试验证仅允许 `127.0.0.1:8080`,Client 测试覆盖禁用、超时、HTTP/协议错误、响应大小上限和脱敏异常;未向 Web 暴露 AKTools 地址或原始字段。
## 性能验证
Service 测试验证三个请求使用 `Promise.allSettled` 并行、单个失败返回 `partial`、全部失败返回 `unavailable`;MySQL 健康检查验证会话时区设置、元数据查询和异常路径释放连接。单请求超时配置为 10 秒;当前仅有本机测试证据,不将其视为生产容量结论。
@@ -0,0 +1,13 @@
# 视觉验证
## 当前状态
已在 `http://127.0.0.1:8888/` 完成桌面默认视口和 `390×844` 窄屏检查。短线面板在 DOM 中可见,TDX 不可用时仍展示明确的 AKShare 空状态;窄屏 `document.documentElement.scrollWidth` 与 `window.innerWidth` 均为 390,无横向溢出。组件测试覆盖有效数据和 unavailable 警告,部分/延迟文案沿用既有面板样式并通过类型检查。
## 安全验证
视觉验证不得展示凭据、真实内网地址或 AKTools 原始错误载荷。
## 性能验证
首次可见状态先展示 TDX 和 AKShare 各自占位,不互相阻塞;短线 API 失败只改变短线模块状态。视觉检查未展示凭据、真实内网地址或原始异常载荷。
@@ -0,0 +1,5 @@
# 发布说明
## 未发布
FEAT-DS-001 当前为未发布功能。已接入 AKTools 内网补充数据源,提供超短情绪指标和规则结论;不改变 TDX 核心市场概览。生产默认关闭,待授权、访问控制和稳定性评估后再决定启用。
@@ -0,0 +1,24 @@
# AKTools 超短行情补充数据源需求
## 原始需求
使用 AKTools 提供的 AKShare HTTP 接口,补充 TDX 没有的超短行情数据;当前只考虑内网环境。
## 实际范围
- Nest 服务端调用本机 AKTools,不让 Vue 直连 AKTools。
- 首批接入涨停池、炸板池、昨日涨停池。
- 新增短线情绪和短线结论业务接口。
- 保留 TDX 核心市场概览链路不变。
## 数据口径
所有数量只统计通过字段校验的记录;缺失数值不折算为零。结论只能使用本功能列出的确定性规则,不能把 AKShare 原始字段解释为交易建议。
## 依赖边界
AKTools 作为项目外部服务运行,默认地址为 `http://127.0.0.1:8080`。V1 不新增 Python 代码、不新增 Docker、不启用数据库、缓存和消息队列。
## 范围变化
已确认不接入 `stock_zh_a_spot_em` 作为核心接口,因为当前本地验证返回 HTTP 500;该接口不影响本功能其余目标接口。
@@ -0,0 +1,37 @@
# 代码 Review
## 审查范围
设计阶段审查目标为 AKTools Client、Mapper、短线 Service、DTO、Controller、Web API、配置和测试。
## PRD 与设计符合性
实现后检查只接入三个已验证接口,保持 TDX 独立,且不把原始 AKTools 字段直接暴露给前端。
## 发现
已完成实现 Review:未发现阻断项。Client 只允许三个固定 AKTools 路径,Service 用 `Promise.allSettled` 做模块级降级,DTO 不透传中文原始字段;Web 只通过 Axios API 文件访问 Nest。发现页面接线遗漏 `shortTermConclusion` 未解构,已在测试失败后修复。后续健康检查复核发现 `mysql2` 的 `timezone` 选项不会改变服务端会话变量,已在同一连接上显式设置 `+08:00` 并用 `finally` 释放;成功顺序和查询失败释放均有回归测试。
## 测试缺口
上游 5xx、超时、部分接口失败、字段非法、响应大小、不可用状态、MySQL 会话时区/释放和窄屏布局已有定向覆盖;交易日期延迟口径和 AKShare 字段漂移仍需后续真实交易日联调。
## 安全与残余风险
固定地址白名单、日期参数校验、固定接口、超时、响应体上限、JSON 结构校验和错误脱敏均已检查;未发现凭据或原始载荷进入前端。残余风险为 AKShare 授权、上游限流/字段变更和生产多机访问控制,故生产默认关闭。
## 性能与资源影响
三个请求并行,10 秒超时,2 MiB 响应上限;MySQL 健康检查复用单个连接完成会话设置和元数据查询,并在成功或异常路径释放连接;不引入缓存和消息链路,测试证据仅证明行为和边界,不构成生产容量证明。
## GitNexus 与同步修改
实现后核对变更检测结果只覆盖计划中的短线链路和文档。
## 修复与复审
发现问题后记录修复提交和复审证据;本轮健康检查修复通过 80 项后端测试、全量门禁和真实 `/api/v1/health` HTTP 200 验证。
## 最终结论
最终结论:passed
@@ -0,0 +1,21 @@
# 开发规范符合性 Review
## 检查结果
设计阶段已检查功能档案、Schema/GitNexus 前置流程、TDX 与 AKTools 边界及源码部署约束;代码实现后进行逐项复核。
## 不符合项与处置
逐项检查通过:功能档案、中文注释、OpenAPI 生成契约、Axios API 边界、固定数据源 Adapter、模块级降级、环境模板和未提交凭据约束均符合规范。实现期间发现的页面接线遗漏已修复并由前端全量测试复验;MySQL 健康检查的服务端时区误判已通过显式会话设置、连接释放 finally 和回归测试修复。
## 安全、性能与架构检查
确认 AKTools 仅作为外部内网 Adapter,未新增 Docker、Python 服务、生产数据库连接、Redis/RocketMQ 消息链路或前端直连;超时、响应上限、并行请求和降级均有实现与测试证据。生产启用的授权、访问控制和容量评估仍是明确前置条件。
## GitNexus 与开发总结检查
开发前后 GitNexus 报告、影响计划、变更检测、开发总结、测试结果、视觉 QA、Review 和回退说明均已补齐;本轮修复的 GitNexus 影响分析为 LOW,仅影响健康客户端和 API 工厂直接调用;`governance:finish` 及最终提交前再次执行变更检测。
## 最终结论
最终结论:passed
@@ -0,0 +1,16 @@
# 回退说明
## 触发条件
出现 TDX 核心行情回归、AKTools 请求阻塞 API、上游原始字段泄漏、OpenAPI 契约不一致或短线模块遮挡核心概览时回退。
## 回退步骤
1. 关闭 `AKTOOLS_ENABLED` 或回退到上一个完整发布目录。
2. 重启 API 并确认 TDX 概览接口、Web 健康检查和构建产物正常。
3. 保留 AKTools 外部服务,不删除其运行环境和数据缓存。
4. 记录回退原因、提交 SHA、验证结果和后续修复计划。
## 数据与外部服务
本功能不写 MySQL、Redis 或 RocketMQ,不需要数据回退;AKTools 是独立外部服务,应用回退不负责停止或删除它。
@@ -0,0 +1,30 @@
# AKTools 超短行情补充数据源测试计划
## 功能验证
- 用固定响应夹具验证涨停数量、最高连板和梯队分布。
- 验证炸板池和昨日涨停池字段缺失、非法数字、空数组的处理。
- 验证三个请求并行且单个失败返回 partial。
- 验证全部失败返回 unavailable,TDX 既有接口仍能独立响应。
- 验证 OpenAPI DTO、Web API 类型和页面状态一致。
## 安全验证
- 验证客户端拒绝请求参数注入的上游 URL。
- 验证配置不允许生产地址和公网任意地址。
- 验证超时、过大响应、非 JSON 响应和上游错误均脱敏。
- 验证前端构建产物不包含 AKTools 凭据或内部地址。
## 性能验证
- 验证三个请求使用并行调度而非串行等待。
- 使用受控延迟夹具验证单请求超时和整体响应上限。
- 记录定向请求耗时,不把本地单次结果当作生产容量证明。
## 视觉验证
验证桌面和窄屏下短线情绪模块的加载、部分、不可用、空数据状态,确保警告和交易日期不遮挡指标。
## 残余风险
AKShare 上游限流、字段变更、数据授权和长期稳定性需要在后续联调与生产评估中持续验证。
@@ -1,5 +1,33 @@
# 设计
首屏顺序为:市场结论、驱动与风险、核心指数、市场宽度与量能、板块概览、情绪与资金摘要。分析偏好保存在浏览器本地,页面只显示轻量的当前状态入口。
首屏顺序为:市场结论、驱动与风险、核心指数、市场宽度与量能、板块概览、资金趋势。分析偏好保存在浏览器本地,页面显示轻量的当前状态入口。Vue 不直连 TDX,由 Nest API 按模块拆分接口并隔离失败。
## 数据可用性
- `summary` 和 `indices`:使用 TDX K 线真实响应,展示来源、快照时间和指数涨跌。
- `breadth`:使用 TDX 指数快照的 `UpHome`、`DownHome` 汇总上证、深证和北证市场宽度;未返回的 `unchanged` 明确为 `null`,不得用总数推算。
- `sectors`:使用 TDX 系统分类中的一级行业(`get_stock_list(market=16)`)和批量日行情,按涨跌幅排序后展示重点强弱板块。
- `funds`:模块名称和口径为“成交额趋势”,使用核心交易所指数日行情的 `Amount` 汇总当前与前一交易日成交额;这不是主力净流入。
- 交易日对齐:交易日期必须是有效 `YYYYMMDD` 公历日期;指数和一级行业只有在前一根日期有效且严格早于当前日期时才计算涨跌,随后只保留最新交易日截面。成交额还要求日期与金额数组等长且前一交易日早于当前交易日,再按最新有效日期对汇总,避免畸形日期、数组错位或旧市场覆盖新数据。市场宽度额外并行读取一个核心指数日线作为日期参考。
- 新鲜度:日行情交易日期与 `Asia/Shanghai` 当前日历日期不同即标记 `delayed`;宽度沿用参考指数日期。首版不引入交易日历依赖,休市日保守标延迟并展示实际日期。
- 主力净流入和盘中新闻不在本次 TDX 首屏主链路中,后续通过独立补充数据源适配器接入,并在响应中标记来源与数据质量。
- 页面不把缺失或权限不足的指标降级为模拟值;单个来源失败只影响对应模块。
## 运行边界
本功能只读调用 TDX。MySQL、Redis、RocketMQ 仍为已规划基础设施,但当前没有业务状态、缓存或异步任务需要它们,因此本切片不启用。
## 安全策略与评估
- TDX 地址在配置层固定为 `http://127.0.0.1:17710`,API 是唯一访问边界,Vue 不直连行情服务。
- 请求只允许固定方法和公开行情参数;客户端限制超时与 1 MiB 响应,异常脱敏,不记录原始载荷、凭据或网络地址。
- 本功能不提供交易写入、账户操作、用户输入拼接查询或 AI 密钥下发;MySQL/Redis/RocketMQ 未启用,不读取生产数据库。
- 已通过客户端、服务、HTTP/OpenAPI、边界和 E2E 测试;生产授权、长期断线恢复和公网安全仍需后续评估。
## 性能目标与评估
- 五个模块并行请求,单个 TDX 请求受配置超时保护,模块失败不阻断其他模块。
- 客户端限制响应大小,避免异常行情载荷占用过多内存;本切片不增加数据库、缓存或消息队列负载。
- 已完成构建、浏览器桌面/390px 移动端验证;未进行 7×24 采集、峰值并发和长期网络抖动压测。
ETF监控、两融数据、大盘云图和实时消息仍是独立一级菜单,不属于短线和中长线切换。
@@ -0,0 +1,57 @@
# FEAT-MO-001 开发总结
## 原始开发需求
实现市场概览首屏:结论优先展示市场状态、驱动与风险,并支持综合、短线、中长线视角和规则、AI、混合、对照分析选择;用户可从指数和板块入口进入后续详细分析。
## 需求与范围变化
- 数据源从早期“确定性模拟快照”调整为 TDX 只读直连,Nest API 访问本机 `127.0.0.1:17710`,Vue 不直接访问 TDX。
- API 按摘要、指数、市场宽度、板块和资金拆分,避免把整个首屏塞入单个接口。
- 当前 TDX 桥接已确认 `get_market_snapshot`、`get_stock_list` 和批量 `get_market_data` 可用;市场宽度、一级行业板块和成交额趋势改为真实 TDX 映射。主力净流入字段虽存在但当前实测为零值,盘中新闻无官方行情接口,因此两者延期到补充源功能。
- MySQL、Redis、RocketMQ 和 AI 仍不进入本切片运行链路;它们保留为后续基础设施边界。
## 实际完成需求
- 新增 TDX 配置校验、超时/响应大小限制、错误脱敏的 Node 客户端。
- 新增市场概览 DTO、服务、控制器、OpenAPI 契约和前端 Axios API 文件。
- 完成结论、驱动与风险、核心指数、市场宽度、板块、资金趋势模块,以及加载/错误/不可用状态。
- 完成分析视角和分析引擎切换,本地保存用户偏好。
- 真实 TDX 指数和摘要已通过本机隧道冒烟;未用指数或离线样本伪造缺失指标。
- 真实 TDX 市场宽度、一级行业和成交额趋势已通过本机桥接冒烟;资金模块明确使用成交额口径,不宣称主力净流入。
## 修复缺陷
- 修正 PRD 和实施计划中仍描述“模拟数据”的旧表述。
- 避免单个 TDX 模块失败导致整页失败,改为五个模块并行、独立状态。
- 对未注册桥接方法返回结构化原因,避免前端显示“实时”或空白数据。
- 修复 Vue TypeScript 单文件组件未被 ESLint 正确解析的问题,并为 E2E 测试进程补齐必需的本机 TDX 配置边界。
- 隔离应用外壳单测中的真实 Axios 请求,消除 JSDOM 网络错误噪声,保持页面测试只验证外壳职责。
- 根据代码 Review 修复畸形 TDX 字段被折算为零、缺市场成交额误报三市、交易日错位跨日求和、空行业目录误报 `fresh`、前端隐藏 `partial/delayed` 警告和零变化使用上涨色等缺陷,并补齐对应回归测试。
- 根据二次 Review 继续修复涨跌家数接受非整数、成交额受市场定义顺序影响、指数/板块跨交易日混排和后端从不生成 `delayed` 的边界;宽度增加核心指数日期参考,不新增基础设施或第三方依赖。
- 根据第三轮独立 Review 修复 8 位畸形日期被误认为有效公历日期、成交额接受倒序日期对与日期/金额数组错位,以及服务测试依赖运行当天的问题。
- 根据第四轮独立 Review 修复指数/板块未校验前一根 K 线日期的问题;非法、重复或倒序的前一日期不再生成涨跌信号。
- 修复首屏更新时间直接展示 UTC ISO 字符串的问题:保留 API 的标准 UTC `asOf` 契约,Web 统一按 `Asia/Shanghai` 展示完整日期时间和时分秒。
## 未完成与延期项
- 主力净流入的权限/数据质量验证、盘中新闻补充源、真实图表和口径仍延期。
- “查看依据”抽屉、指数/板块详情页、AI 请求和用户体系另立功能。
- 本地验证不代表生产 7×24 采集稳定性、商业授权或公网部署安全性。
## 关键提交
- `9a965fa`、`d283ee3`、`6eb34b5`、`c2fa929`、`15a2500`、`27bc3c1`、`8261948`、`ff8ada8`、`49f6be9`、`7e4dcd9`、`ae2a7e0`、`c2fdfa6`、`b1310fb fix(FEAT-MO-001): 修正概览时间时区显示`
## 验证证据
- GitNexus 已完成提交前重新索引;上一修复提交的最终 staged 检测映射 66 个符号、21 条概览执行流并标记 critical。风险来自本功能修改核心概览服务、TDX 映射和前端数据面板,已由定向单测、HTTP/OpenAPI、前端状态回归、构建、浏览器视觉验证和 E2E 覆盖;未发现额外业务模块调用方。第三轮修复前又用 MCP 对 `toTradeDate` 和 `mapTurnoverTrend` 执行符号级影响分析,直接调用方仅在市场概览映射与测试范围。
- API 冒烟:`/breadth`、`/sectors`、`/funds` 均返回 `source=tdx,status=fresh`;完整结果和耗时见 `tdx-smoke-report.md`。
- 家庭 LAN 隧道二次复验:五个市场概览接口均为 `fresh`,指数 3 项、板块 8 项、成交额覆盖 3 个市场且交易日期完整;只保存脱敏统计。
- 日期对齐与延迟状态修复后,后端 60/60、完整全仓门禁和家庭 LAN 五接口当日 `fresh` 复验通过;第三轮日期真实性与测试时钟修复后,后端增加至 63/63;第四轮相邻日期修复后,后端增加至 67/67。`c2fdfa6` 推送前后均执行完整 `pnpm verify`,契约、Lint、格式、类型、全部测试、构建和 E2E 均通过。
- 前端单测、typecheck、build、后端 TDX/映射/服务/HTTP/OpenAPI 测试通过。
- `pnpm verify:e2e`:4/4 通过(桌面和移动端各覆盖页面与健康契约)。
- 浏览器桌面与 390px 移动视口验证无横向溢出,视角与引擎切换可用。
- 五轮独立 Review 均已归档:前四轮发现的数据完整性、状态、日期真实性/顺序、测试时钟和前一根日期校验问题均已关闭;第五轮最终结论为 `Ready to merge: Yes`,无 Critical、Important 或 Minor 问题。
- 开发 Schema 按用户确认跳过,沿用 `v0.0.10 captured_empty` 追溯边界,不读取生产库。
- 本轮前端日期工具测试覆盖 UTC 到上海时区转换、无效值占位和两个概览组件接线;未修改后端、OpenAPI、数据库或消息契约。
@@ -0,0 +1,26 @@
# GitNexus 开发后基线
## GitNexus 状态
```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis/.worktrees/feat-mo-001-tdx-overview
Indexed: 8/18/2026, 9:13:11 PM
Indexed commit: c2fdfa6
Current commit: c2fdfa6
Status: ✅ up-to-date
```
## Git 已跟踪变更摘要
```text
AGENTS.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
```
## Git 工作区摘要
```text
M AGENTS.md
```
业务代码基线 `c2fdfa6` 已提交并推送;上述唯一工作区差异是 GitNexus 自动维护的入口说明,未纳入功能提交。
@@ -0,0 +1,16 @@
# GitNexus 前后对比
## 开发前
- 基线:`gitnexus/before.md`、`gitnexus/implementation-baseline.md`。
- 目标是把模拟首屏改为 TDX 只读概览,并拆分五个 HTTP 模块接口。
## 开发后
- CLI 已完成最终重新索引,保留 85 条执行流并识别本功能影响路径。
- 宽范围修复曾识别 21 条概览执行流并标记 critical;最终相邻日期修复收敛为 3 条候选映射执行流并标记 medium。核心路径均有单测、HTTP/OpenAPI、前端状态、构建、视觉和 E2E 验证。
- 未新增消息、数据库、Redis、Scheduler、Worker 或部署运行时依赖。
## 差异结论
直接影响集中于 TDX API、市场概览服务、前端 API/页面和测试夹具;生产数据边界、基础设施暂不启用边界和回退路径保持不变。
@@ -0,0 +1,25 @@
# GitNexus 开发后变更检测
## 检测命令
```text
npx gitnexus analyze
npx gitnexus detect-changes --repo "$PWD" --scope staged
```
## 结果
- 索引:已完成最终增量更新。
- 暂存文件:11 个文件、24 个符号;GitNexus 自动改写的 `AGENTS.md` 已明确排除。
- 影响执行流:3 条,CLI 风险:medium。
- 主要执行流:`Candidates → ToNumber`、`Candidates → ToTradeDate` 与 `Candidates → MapDirection`;本轮未修改服务状态策略或跨模块契约。
## 处置
本轮 medium 来自指数/板块相邻日期比较的局部映射变更,不是未知跨业务扩散。已用 TDX 映射/服务测试、类型检查和 `git diff --check` 验证;前一提交已覆盖 HTTP/OpenAPI、前端状态、构建、浏览器视觉和 4/4 E2E,未发现用户、消息、数据库、Redis、RocketMQ、Scheduler、Worker、认证或部署调用方。当前环境已使用 GitNexus MCP 与同版本 CLI 交叉确认,没有将工具限制误判为低风险。
## 第六轮显示修复
- GitNexus 对 `useMarketOverview` upstream impact 为 LOW,直接消费者为 `MarketOverviewPage.vue` 和状态测试;Vue 单文件组件文件级符号由查询结果确认,未发现后端或跨模块调用方。
- 本轮仅变更 Web 日期格式化工具及两个概览组件显示,不修改 API、OpenAPI、TDX、数据库、Redis、RocketMQ、Scheduler 或 Worker。
- 修复提交 `b1310fb` 后重新索引统计为 3,457 nodes / 4,935 edges / 73 clusters / 104 flows,状态 up-to-date;全量检测仅识别 GitNexus 自动更新的 `AGENTS.md` 统计行,风险 LOW、0 条受影响执行流。
@@ -2,8 +2,8 @@
- 功能编号:FEAT-MO-001
- 基线提交:`c0a6f5560584`
- 当前阶段:TDX 开发连接设计与首页方案确认
- 当前总体风险:LOW(仅本机 SSH 配置和操作文档);首页业务代码风险待设计确认后按符号补充
- 当前阶段:TDX 直连首页实施,已完成开发前门禁和最小只读协议验证
- 当前总体风险:LOW(新增边界尚未落地);TDX 客户端、API、OpenAPI 和 Web 首屏实现后按符号补充
## 直接与间接影响
@@ -11,14 +11,14 @@
- 正式行情来源确定为 TDX;家庭局域网和外部 Tailscale 只改变 Mac 到同一 Windows `sshd` 的网络路径。
- TDX Bridge 的稳定入口固定为 Mac 回环地址 `127.0.0.1:17710`,市场概览、规则分析、AI 分析和未来 HTTP 契约不得依赖家庭地址、Tailscale 地址或 TDX 原始字段。
- 当前仓库没有 TDX Provider 或市场概览运行时符号,本阶段只更新操作文档;GitNexus 未识别可执行调用链影响。
- 当前仓库尚无 TDX Provider 或市场概览运行时符号;本次将新增 API 业务模块、TDX 客户端、OpenAPI 契约和 Web 首屏。新增符号的直接调用链将在实现后重新索引并执行变更检测。
- 首页业务设计确认后,必须对 `App.vue`、`createAppRouter`、后端模块装配、HTTP DTO 和新增市场概览符号分别执行 upstream impact。HIGH 或 CRITICAL 结果先告知用户再修改。
## 跨模块同步修改
- HTTP/OpenAPI:当前连接文档不修改;首页正式接入时需要版本化市场概览 DTO 与 OpenAPI 契约。
- Web API 与 adapter:当前不修改;未来页面只能经 `web/src/api/<业务域>/index.ts`、Axios 封装和 ViewModel 消费数据。
- 消息契约、Redis、MySQL、Scheduler、Worker:当前不启用。正式采集链路仍按独立功能立项,不能由 API 请求临时抓取全市场数据。
- HTTP/OpenAPI:本次新增版本化市场概览 DTO 和五个只读路径,并重新生成 OpenAPI 契约。
- Web API 与 adapter:本次新增 `web/src/api/market-overview/index.ts`,页面只能经 Axios 封装和 ViewModel 消费数据。
- 消息契约、Redis、MySQL、Scheduler、Worker:本次首屏不启用业务链路,仅保留既有架构边界;正式采集、快照持久化、缓存和异步分发仍按独立功能立项。
- 配置部署:真实地址、用户名、密钥和控制套接字只保留在开发机,不进入仓库、环境模板或前端构建物。
- 测试:两种 SSH 路径均需验证到同一 Mac 回环端点;离线样本只作显式开发回退,不得标记为实时 TDX。
- 文档:同步更新 Tailscale/SSH 开发手册,明确家庭局域网与外部 Tailscale 的选择、启动、停止、切换和验证方法。
@@ -0,0 +1,32 @@
# FEAT-MO-001 实施前门禁基线
- 功能编号:FEAT-MO-001
- 分支:`codex/feat-mo-001-tdx-overview`
- 基线提交:`d283ee319692d4550149c591d4fe7f522c0bc6b8`
- 记录时间:2026-08-18 13:04 CST
## Schema
- `pnpm schema:baseline`:通过,`v0.0.10 captured_empty`。
- `pnpm schema:verify`:通过,`v0.0.10 captured_empty`。
- 本次没有数据库结构变更,不读取生产数据库。
## GitNexus
```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis/.worktrees/feat-mo-001-tdx-overview
Indexed commit: d283ee3
Current commit: d283ee3
Status: up-to-date
```
影响分析结果:
- `ApiModule` upstream:LOW,直接消费者为 API `main.ts` 和进程冒烟测试。
- `createAppRouter` upstream:LOW,无直接执行流消费者。
- `createRequestClient` upstream:LOW,直接使用方为 Web API 健康请求模块。
- `ApiModule.register` 复合名称未被 CLI 解析,已用 `ApiModule` 类上下文、`main.ts` 静态引用和 `register` 候选结果补齐证据;没有 HIGH/CRITICAL 结果。
## 工作区说明
主工作区已有用户修改的 `AGENTS.md`,本功能分支不将其纳入提交。功能代码只在本隔离工作区开发。
@@ -1,8 +1,11 @@
# 实施计划
1. 初始化 Vue 3、Vite、TypeScript和 Dart Sass。
2. 建立市场快照类型和确定性模拟数据。
3. 实现终端外壳、数据状态和结论区。
4. 实现指数、宽度、量能、板块、情绪与资金模块。
5. 实现分析偏好菜单和依据抽屉。
6. 完成测试、构建、浏览器验证和视觉对比。
1. ~~初始化 Vue 3、Vite、TypeScript 和 Dart Sass。~~ 已完成。
2. ~~建立 TDX 配置、Node fetch 客户端、DTO、映射和五个模块接口。~~ 已完成。
3. ~~实现终端外壳、分模块加载状态和结论区。~~ 已完成。
4. ~~实现指数、宽度、板块和资金模块;不可用指标使用结构化状态。~~ 已完成。
5. ~~实现分析偏好菜单和本地持久化。~~ 已完成;依据抽屉和详情页入口延期至独立功能。
6. ~~完成单元测试、类型检查、构建、接口冒烟、浏览器桌面/移动端视觉验证。~~ 已完成。
7. ~~补齐 TDX 市场宽度、一级行业板块和成交额趋势映射。~~ 已确认官方接口和本机桥接可用;主力净流入与盘中新闻保留为补充源需求。
8. 更新 DTO、OpenAPI 类型和前端组件,使真实数据状态、单位和 `unchanged=null` 口径可见。
9. 完成 TDX 真实响应夹具、错误隔离、类型、构建和浏览器视觉验证;Review 后再收口功能档案。
@@ -1,12 +1,12 @@
id: FEAT-MO-001
name: 市场综合概览
slug: market-overview
status: approved
status: in_review
owner: project
created_at: 2026-08-12
requirements: requirements.md
prd: prd.md
design: design.md
implementation_plan: implementation-plan.md
traceability_note: 开发尚未开始,GitNexus与QA证据将在开发门禁执行时创建
traceability_note: 已完成 TDX 直连开发、GitNexus 前后分析、接口冒烟、桌面/移动端视觉验证、独立代码 Review 和规范 Review;开发完成门禁已通过,待合并发布
release: unreleased
@@ -23,7 +23,7 @@
## 非目标
- 不做自选股、持仓、笔记、交易计划、社区、荐股、跟单和公开组合。
- 本切片不接正式行情源、RocketMQ、MySQL、Redis和付费 AI。
- 本切片直接接入已验证的 TDX 只读桥接层;不接入 RocketMQ、MySQL、Redis 和付费 AI。
- 本切片不实现用户、邀请、会员、订阅和支付。
- ETF监控、两融数据、大盘云图和实时消息仍是独立一级模块。
@@ -41,7 +41,7 @@
| 编号 | 优先级 | 需求 | 可观察结果 |
|---|---|---|---|
| FR-001 | P0 | 结论优先展示市场定性 | 首屏顶部出现一句结论、市场状态、量能状态和情绪状态 |
| FR-002 | P0 | 展示驱动与风险 | 结论下方并列显示至少三条驱动和三条风险证据 |
| FR-002 | P0 | 展示驱动与风险 | 结论下方并列显示已由 TDX 支持的驱动和风险证据;缺少口径时明确标记 |
| FR-003 | P0 | 展示数据新鲜度 | 页面显示交易状态、数据更新时间和正常/延迟/不完整状态 |
| FR-004 | P0 | 提供分析偏好 | 可选择综合/短线/中长线和规则/AI/混合/对照,并在本地保存默认值 |
| FR-005 | P1 | 展示市场证据模块 | 指数、宽度、量能、板块、情绪和资金摘要可阅读 |
@@ -50,10 +50,16 @@
## 数据与口径
首个切片使用确定性模拟快照。字段仍必须包含交易日期、快照时间、来源状态、完整性和单位,以便以后无结构变更地替换为后端 API。
首个切片由 Nest API 直接读取 TDX 只读桥接层。指数和摘要使用真实 TDX K 线映射;市场宽度使用三市场指数快照,板块使用一级行业目录与日行情,量能使用三市场指数成交额汇总。主力净流入和盘中新闻不在本切片 TDX 主链路中,必须保持明确的补充源边界,不得用指数或离线样本冒充。所有响应仍包含交易日期、快照时间、来源状态、完整性和单位。
A 股使用红涨绿跌。成交额统一展示为亿元,比例明确使用百分比。历史数据和低频资金数据必须显示实际数据日期,旧数据不得标记为实时。
TDX 交易日期必须通过真实公历日期校验。成交额当前/前一日金额必须与同索引日期对齐,且前一交易日严格早于当前交易日;不满足条件的市场不参与汇总,也不得抢占最新日期截面。
指数和板块涨跌幅必须同时具备有效且严格递增的相邻日期。前一根日期非法、重复或晚于当前日期时,指数只展示当前价而不生成涨跌信号,板块不进入强弱排序。
首个切片不引入交易日历依赖:指数、一级行业和成交额的最新交易日期与 `Asia/Shanghai` 当前日历日期不同即标记 `delayed`;市场宽度快照缺少日期字段,使用同批核心指数日线作为日期参考。周末和法定休市日会保守显示延迟并同时展示实际交易日期,后续接入权威交易日历后再细化“最新交易日”语义。
## 状态与异常
- 交易中:显示分钟级更新时间。
@@ -77,7 +83,7 @@ A 股使用红涨绿跌。成交额统一展示为亿元,比例明确使用百
- Given 页面加载有效快照,When 用户进入市场概览,Then 结论、驱动、风险和更新时间在首屏可见。
- Given 用户打开分析状态入口,When 切换周期或引擎,Then 页面状态立即更新且可选择设为默认。
- Given 数据快照被标记为延迟,When 页面渲染,Then 最近有效值保留并明确显示延迟,不能显示“实时”。
- Given 用户点击查看依据,When 抽屉打开,Then 能看到指标名称、数值、口径和更新时间。
- Given 用户看到查看依据入口,When 后续依据抽屉功能立项,Then 能看到指标名称、数值、口径和更新时间;本切片只保留入口。
## 风险与依赖
@@ -92,3 +98,5 @@ A 股使用红涨绿跌。成交额统一展示为亿元,比例明确使用百
## 变更记录
- 0.1:建立首版 PRD,补充结论优先、分析偏好和异常状态。
- 0.2:根据 TDX 实连验证修正数据源、可用性边界和未接入基础设施范围。
- 0.3:核对官方行情接口后确认市场宽度、一级行业板块和成交额趋势可由 TDX 直接提供;主力净流入与盘中新闻保留补充源边界。
@@ -0,0 +1,20 @@
# FEAT-MO-001 测试结果
## 自动化结果
- 前端 Vitest:9 个文件、28 个测试通过,新增 UTC 到上海时区格式化和概览组件显示回归;修复提交 `b1310fb` 已推送到 Gitea。
- 后端 Vitest:11 个文件、67 个测试通过;API 启动器 Node 测试 2/2 通过,Schema、治理、边界和部署门禁通过。
- `pnpm verify:e2e`:桌面/移动端页面和健康契约共 4 个测试通过。
- `pnpm typecheck`、`pnpm build`、`pnpm format:check`:通过。
- ESLint:0 error,保留 35 条 Vue 风格 warning,不阻断门禁。
## 手工结果
- `GET /api/v1/market-overview/indices` 和 `summary` 返回真实 TDX `fresh` 快照。
- TDX 隧道未监听时,五个模块均返回明确不可用状态,未伪造指标;切换到家庭 LAN 隧道后,`summary`、`indices`、`breadth`、`sectors`、`funds` 均返回 `source=tdx,status=fresh`。
- 家庭 LAN 真实冒烟中,指数返回 3 项、板块返回 8 项、成交额覆盖 3 个市场且交易日期完整;未保存真实价格或成交额数值。
- 修复日期对齐和延迟状态后再次通过家庭 LAN 真实冒烟,五个接口在当日数据下仍为 `fresh` 且无 warning。
- 第三轮 Review 修复后,非法月份/日期、倒序日期对和日期/金额数组错位均被映射层排除;服务测试统一冻结时钟,不依赖执行当天。
- 第四轮 Review 修复后,指数前一根非法、重复或倒序日期不再生成涨跌幅,板块对应记录不进入强弱排序。
- 桌面默认视口与 390px 移动视口无横向溢出;视角和引擎切换可用。
- 浏览器实测确认结论区显示 `2026-08-24 22:59:55`、指数卡片显示 `22:59:27`,不再显示 UTC 的 `14:59` 时间;桌面和移动视口均无横向溢出。
@@ -0,0 +1,20 @@
# FEAT-MO-001 视觉 QA
## 验证范围
- 桌面默认视口:顶部应用识别、结论区、驱动/风险、核心指数和不可用模块均可见。
- 移动视口:390×844,首屏按单列排列,标题、状态、指数和模块说明不遮挡。
## 结果
- 通过:2026-08-18 使用本地 API/Web 实际页面复验;桌面视口为 `1440×900`,移动视口为 `390×844`。
- 通过:桌面 `clientWidth=1440, scrollWidth=1440`,移动端 `clientWidth=390, scrollWidth=390`;移动端六个主要区块左右边界均位于 `14px~376px`,未发生页面级或区块级横向溢出。
- 通过:综合、短线、中长线切换和规则/AI/混合/对照选择有可见状态。
- 通过:实际切换到“综合”和“混合”后,按钮激活态和下拉选中项同步更新。
- 通过:家庭 LAN 隧道 `127.0.0.1:17710` 下完成真实 TDX 行情复验;摘要、3 个核心指数、市场宽度、8 个一级行业板块和 3 市成交额均显示 `source=tdx`、`status=fresh`,无模块警告。
- 通过:桌面与移动端浏览器控制台均无 `warning` 或 `error`;移动端仅有 Vite 开发服务器连接调试信息。
- 通过:真实行情移动端 `clientWidth=390, scrollWidth=390`,无页面级横向溢出、内部文字截断或控件重叠;长风险说明、指数数值、板块标签和成交额均完整展示。
## 残余项
依据抽屉、指数/板块详情页和真实图表尚未立项,不作为本次首屏视觉验收项。真实 TDX 接口值、交易日期和模块状态的逐项证据见 `tdx-smoke-report.md`;本次视觉复验使用同一家庭 LAN 隧道和真实接口响应,不使用离线样本伪装实时行情。
@@ -0,0 +1,17 @@
# FEAT-MO-001 发布说明
## 本次发布
- 新增 TDX 直连的市场概览首屏和五个模块 API。
- 支持综合、短线、中长线视角与规则、AI、混合、对照偏好选择。
- 市场宽度、一级行业强弱和成交额趋势接入真实 TDX 数据,并对空数据、部分数据、日期不一致和延迟状态显示明确边界。
- 指数和板块按最新交易日截面对齐,成交额按最新有效交易日期对汇总;后端根据上海当前日历日期实际生成 `delayed`,市场宽度使用同批核心指数日期参考。
- 拒绝非法公历日期、倒序交易日期以及日期/金额数组错位的 TDX 数据,避免异常市场抢占最新截面或产生时间倒置的成交额趋势。
- 指数和板块仅使用有效且严格递增的相邻 K 线日期计算涨跌,前一日期非法、重复或倒序时不生成市场强弱信号。
- 明确显示 TDX 来源、快照时间、交易日期、市场覆盖数和模块级错误。
## 明确不包含
- 不启用 MySQL、Redis、RocketMQ 或 AI 运行链路。
- 不包含用户体系、详情页、依据抽屉、交易操作和荐股能力。
- 不包含主力净流入、盘中新闻、真实图表和详情页;这些能力需另立补充数据源和功能需求。
@@ -2,4 +2,12 @@
首屏为“市场概览”模块中的综合概览,采用结论优先。市场概览内部通过轻量分析状态入口切换综合、短线和中长线视角,并支持规则、AI、混合与对照分析。
当前切片仅开发 Vue 3 可交互首屏和本地模拟数据,不接用户体系和正式数据链路。
当前切片开发 Vue 3 可交互首屏,Nest API 通过 TDX 只读桥接层提供真实指数、市场宽度、板块和成交额趋势;主力净流入与盘中新闻不作为本次 TDX 主链路指标,不使用离线样本。不接用户体系,也不启用 MySQL、Redis、RocketMQ 或 AI 运行链路。
## 本次实际范围
- 已完成综合、短线、中长线视角切换,以及规则、AI、混合、对照偏好选择;偏好只保存于浏览器本地。
- 已完成按摘要、指数、宽度、板块、资金拆分的五个 HTTP 接口和前端 API 封装。
- 已完成 TDX 请求超时、响应大小限制、错误脱敏和模块级失败隔离。
- 已确认并接入 TDX 市场宽度、一级行业板块和成交额趋势;资金模块明确不等同于主力净流入,`unchanged` 无可靠总数时返回 `null`。
- 详情页和“查看依据”抽屉只保留入口,另立需求实现,不在本次发布范围内。
@@ -0,0 +1,97 @@
# 代码 Review
## 首轮独立 Review
- 对比基线:`8261948`
- 审查提交:`ff8ada8`
- 结论:`Ready to merge: No`
首轮发现及处置:
1. 畸形 `UpHome/DownHome` 被折算为零并误标 `fresh`:改为有限、非负且成对校验,无效市场整体排除并按有效市场数返回 `fresh/partial/unavailable`。
2. 成交额缺市场或交易日错位仍误标三市实时数据:只汇总非负金额和一致交易日,公开 `marketCount`、`tradeDate`、`previousTradeDate`,缺市场返回 `partial`。
3. 空板块目录误标 `fresh`:一级行业为空时直接返回 `unavailable`,且只保留存在相邻两日收盘价和有效涨跌幅的板块。
4. 前端隐藏 `partial/delayed` 警告:宽度、板块和成交额面板均展示非 `fresh` 状态提示,并展示板块与成交额真实交易日期。
5. PRD、发布说明和 Review 文档残留旧口径:已同步更正为真实 TDX 宽度、一级行业与成交额趋势口径,主力净流入和新闻仍明确延期。
6. 异常分支测试不足:新增畸形宽度、部分市场、错位交易日、空行业目录、额外字段隔离、前端状态提示和零变化中性色回归测试。
次要问题也已同步处理:OpenAPI `required + nullable` 定义、板块 DTO 额外 `price` 字段泄露、成交额零变化上涨色和新增映射中文口径注释。
## 范围
覆盖 TDX 客户端、市场概览后端模块、OpenAPI/前端契约、Axios API 封装、Vue 首屏组件和对应测试。
## 检查结果
- 通过:API 按模块拆分,前端请求集中在 `web/src/api/market-overview/index.ts`,Vue 不直连 TDX。
- 通过:真实指数和摘要字段经过 DTO/映射;桥接层未提供的方法返回结构化 `unavailable`,没有模拟数据冒充。
- 通过:模块并行加载且独立处理异常;TDX 请求有固定回环地址、超时、响应大小限制和错误脱敏。
- 通过:未将密码、令牌、行情原始载荷或生产数据写入代码、文档和日志。
- 通过:E2E 测试夹具显式声明回环 TDX 配置但不要求 TDX 可达,避免测试环境绕过正式配置校验。
## 安全与残余风险
- TDX 只读边界固定为回环地址,客户端限制超时和响应大小并脱敏异常;未接入交易、AI 密钥、数据库写入或生产数据。
- 残余风险是 TDX 桥接方法覆盖不全、市场数据授权和生产 7×24 稳定性尚未验证,已在需求和回退说明中标明。
## GitNexus 与同步修改
开发前已保存 GitNexus 影响计划。早期提交曾映射 11 条执行流并标记 high;`49f6be9` 修复提交的 staged 检测映射 20 个文件、67 个符号、16 条执行流并标记 critical。critical 来自市场概览核心服务、TDX 映射和前端数据面板,不是未知跨业务扩散;未发现数据库、Redis、RocketMQ、Scheduler、Worker、认证或部署调用方。当前环境未暴露 GitNexus MCP 变更检测工具,已使用同版本 CLI 和 worktree 绝对路径保留证据。
## 性能与资源影响
- 五个模块并行请求,单请求超时并限制 1 MiB 响应;市场宽度并行增加一次单指数、单日线日期参考请求,不引入 MySQL、Redis、RocketMQ 在线负载。
- 未进行 7×24、断线重连和生产压测;主力净流入、盘中新闻、权威交易日历及详情页仍待独立功能。
- ESLint 对 Vue 单文件组件仅保留 35 条既有风格 warning,无 error;格式、类型和构建门禁均通过。
## 二次独立 Review
- 审查范围:`ff8ada8..49f6be9`
- 结论:`Ready to merge: No`
- Critical:无。
- Important:宽度仍接受小数/十六进制等非计数值;成交额以首个市场日期为锚;板块跨交易日混排仍标 `fresh`;后端没有真实 `delayed` 路径。
- Minor:GitNexus 风险/执行流和 TDX 已接入范围存在旧口径。
上述问题已按 TDD 增加失败用例后修复:宽度只接受十进制非负安全整数;指数/板块只保留最新交易日;成交额选择最新有效日期对;四个后端日行情路径均具备 `delayed` 判定,宽度使用同批指数日期参考。修复后等待再次独立 Review。
## 第三轮独立 Review
- 审查范围:`49f6be9..7e4dcd9`
- 结论:`Ready to merge: No`
- Critical:无。
- Important:8 位数字日期未验证真实公历语义,成交额未强制前一交易日早于当前日且未验证日期/金额数组对齐;服务测试固定使用 `20260818` 行情却没有统一冻结系统时间,会在自然日期变化后失败。
- Minor:开发总结未包含 `7e4dcd9`,GitNexus 仍保留上一轮 16 条执行流口径。
处置:按 TDD 先得到 3 个预期失败,再增加真实公历日期、日期顺序和数组对齐校验;服务测试套件统一冻结上海日期,并由单个延迟用例显式切换。修复后后端 Vitest `63/63`、启动器 `2/2` 和类型检查通过,等待再次独立 Review。
## 第四轮独立 Review
- 审查范围:`49f6be9..ae2a7e0`
- 结论:`Ready to merge: No`
- Critical:无。
- Important:指数和板块只校验当前 K 线日期,前一根日期非法、重复或倒序时仍计算涨跌;最终治理材料仍处于 `pending`,尚未执行 `governance:finish`。
- Minor:无新增。
处置:按 TDD 先得到 4 个预期失败,再要求前一日期有效且严格早于当前日期;无可比前收盘时指数保留当前价但不生成涨跌,板块不进入强弱排序。后端 Vitest 增加至 `67/67`。治理状态保持 `pending` 是有意的门禁顺序:需本修复再次独立 Review 通过后,才能合法写入 `passed` 并运行 `governance:finish`。
## 第五轮最终独立 Review
- 审查范围:`ae2a7e0..c2fdfa6`
- 结论:`Ready to merge: Yes`
- Critical:无。
- Important:无;上一轮指数/板块前一根 K 线日期校验问题已关闭。
- Minor:无。
- 验证:指数非法、重复、倒序前一日期参数化用例和板块过滤用例齐全;后端 Vitest `67/67`、启动器 `2/2`、服务端类型检查与 `git diff --check` 均通过。安全、性能及 PRD/设计/测试/QA 口径一致。
最终结论:passed
## 第六轮显示修复 Review
- 审查范围:市场概览前端日期显示工具、结论组件、指数组件及回归测试。
- 根因:API `asOf` 是带 `Z` 的标准 UTC 时间,前端原样展示并直接截取 UTC 时分秒。
- 处置:新增 `Asia/Shanghai` 格式化工具;不修改后端时间契约,非法值统一显示占位符。
- 安全与性能:仅使用原生 `Intl.DateTimeFormat`,无新依赖、无网络请求、无敏感数据处理;格式化开销只发生在两个展示节点。
- 验证:前端 Vitest 9 个文件/28 个测试、typecheck、全量 `pnpm verify` 和桌面/移动浏览器实测通过。
- 结论:passed
最终结论:passed
@@ -0,0 +1,30 @@
# 开发规范符合性 Review
## 安全、性能与架构检查
- 已建立并更新 PRD、需求、设计、实施计划、测试计划、开发总结和 Review 文档。
- 已记录安全策略、性能目标、GitNexus 影响、验证证据、范围变化和残余风险。
- 后端按业务模块组织并使用 DTO/映射;前端请求通过统一 Axios 封装,业务 API 独立存放。
- 代码注释集中在配置边界、异常恢复和偏好存储等非显然逻辑,没有逐行噪声注释。
- 未启用 MySQL、Redis、RocketMQ;本切片没有伪造基础设施已接入,也没有触碰生产数据库。
- Git 提交和推送将在 Review 通过后按中文 Conventional Commit 执行;不修改 Git 全局配置。
## GitNexus 与开发总结检查
- 开发前影响计划、开发后索引、变更检测和风险处置已归档。
- 开发总结记录原始需求、范围变化、实际完成、修复缺陷、延期项、提交和验证证据。
- QA、发布说明和回退说明与本功能档案保持同一功能编号。
## 首轮问题同步检查
- 数据完整性、状态语义、OpenAPI nullable、DTO 输出边界和前端降级提示均已补齐回归测试。
- PRD、发布说明、测试计划和开发总结已同步实际口径,避免实现与文档分叉。
- 浏览器复验覆盖桌面与 `390×844` 移动视口;当前 TDX 隧道未监听时只确认结构化降级,历史真实行情冒烟证据保持独立。
- 二次独立 Review 发现的严格整数、日期对齐和真实 `delayed` 语义已按 TDD 修复;后端新增 9 个断言并完成家庭 LAN 当日行情复验。
- 新鲜度暂按上海当前日历日期保守判断,周末和法定休市日可能显示 `delayed`;该残余边界已同步 PRD、设计和测试计划,不伪装成交易日历已接入。
- 第三轮 Review 的日期真实性、先后顺序、数组对齐和测试时钟问题已按 TDD 修复;需求、设计、测试计划、测试结果、发布说明和开发总结已同步。
- 第四轮 Review 的前一根日期校验问题已按 TDD 修复;治理结论继续保持 `pending`,等待本次代码修复再次独立确认。
- 第五轮最终独立 Review 无 Critical、Important 或 Minor 问题并给出 `Ready to merge: Yes`;中文提交、Gitea 推送、GitNexus、完整门禁和视觉证据均已复核。
- 第六轮显示修复保持后端 UTC 契约、前端 Axios 边界和业务模块职责不变;新增工具有真实重复场景和独立测试依据,无新增依赖,安全、性能、类型、构建和 E2E 证据齐全。
最终结论:passed
@@ -0,0 +1,17 @@
# FEAT-MO-001 回退说明
## 触发条件
- TDX 请求错误导致核心指数无法展示或页面加载阻断。
- 发现前端横向溢出、来源状态误标为实时,或不可用指标被伪造。
- 生产部署验证发现配置边界、权限或错误脱敏回归。
## 操作
1. 停止当前 API/Web systemd 服务,保留日志和失败快照摘要,不保存原始行情载荷。
2. 回退到上一个已推送的 Gitea 提交/标签,重新执行源码构建和 `pnpm verify:source`。
3. 恢复 TDX 桥接隧道后只做只读接口冒烟;确认通过前不得重新对外开放。
## 数据边界
本功能没有写入 MySQL、Redis 或 RocketMQ,也没有数据库迁移;回退不执行生产数据库操作。开发 Schema 继续遵循仅读取开发库的门禁。
@@ -0,0 +1,34 @@
# FEAT-MO-001 TDX 只读冒烟报告
- 验证时间:2026-08-18 17:21 CST
- 网络场景:本机回环桥接(TDX 服务可达)
- 本机业务入口:`127.0.0.1:17710`
- API 入口:`127.0.0.1:3000/api/v1/market-overview`
- 请求方式:HTTP GET(业务 API)及桥接层 HTTP POST JSON
- 请求类型:市场宽度、一级行业板块、成交额趋势只读请求
- 原始载荷:未保存
## 结果
- 三条业务接口均返回 HTTP `200`,响应状态均为 `fresh`,`source` 均为 `tdx`。
- `/breadth`:成功汇总上证、深证和北证指数快照中的 `UpHome`、`DownHome`;`unchanged` 返回 `null`,未进行总数推算。
- `/sectors`:成功读取一级行业目录并批量获取日行情,按涨跌幅排序返回前 8 项。
- `/funds`:成功汇总三个交易所指数日行情 `Amount`,按万元转换为亿元并计算较前一交易日变化;该指标展示为“成交额趋势”,不宣称主力净流入。
- 端到端耗时:市场宽度约 `0.11s`,一级行业约 `0.27s`,成交额趋势约 `0.12s`(单次本机冒烟,不代表生产 SLA)。
- 未调用交易、账户、自选、写入接口;未保存真实行情原始载荷。
## 家庭 LAN 二次复验
- 验证时间:2026-08-18 19:35 CST。
- 先按开发手册切换到家庭 LAN SSH 别名,确认本机 `127.0.0.1:17710` 的监听者为本次 SSH 隧道;平台配置仍只使用回环地址。
- 桥接层最小只读 HTTP POST 成功,没有调用交易、账户、自选或写入方法。
- Nest API 的 `/summary`、`/indices`、`/breadth`、`/sectors`、`/funds` 均返回 HTTP `200`、`source=tdx`、`status=fresh` 且无 warning。
- `/indices` 返回 3 项,`/sectors` 返回 8 项;`/breadth` 返回有限且非负的涨跌家数;`/funds` 返回 `marketCount=3`,当前和上一交易日期均存在且不同。
- 本次只记录结构、状态、数量和日期完整性,不记录真实价格、成交额数值、家庭网络地址、SSH 用户或原始响应。
- 完成严格整数、最新交易日截面和后端 `delayed` 修复后再次复验:五个接口在当日行情下仍为 `fresh` 且无 warning,证明新增新鲜度判断未误伤当前日期数据。
## 脱敏与限制
- 报告不保存真实价格、成交量、家庭网络地址、Tailscale 地址、SSH 用户、密钥或完整响应。
- 本报告只证明当前开发机到 TDX 的只读接口和本次映射可达,不证明 7×24 生产采集、商业再分发授权、主力净流入口径或盘中新闻接口已经可用。
- 主力净流入和盘中新闻继续保留为补充数据源需求;后续接入必须单独记录来源、权限、口径和数据质量。
@@ -3,6 +3,36 @@
- 结论、驱动和风险在首屏可见。
- 分析状态可以临时切换并保存默认值。
- 依据抽屉能够打开和关闭。
- 时间范围切换更新图表。
- 五个模块并行请求,一个模块失败不阻断其他模块。
- 真实 TDX 指数、市场宽度、一级行业板块和成交额趋势响应可映射;主力净流入与盘中新闻不以占位值伪造。
- 加载、部分数据、过期和错误状态具有明确文案。
- 桌面和窄窗口不出现阻断核心内容的溢出。
## 已执行证据
- 前端 Vitest、typecheck、build:通过。
- 后端 TDX 客户端、映射、服务、HTTP/OpenAPI 测试:通过。
- `curl` 冒烟:`/breadth`、`/sectors`、`/funds` 均返回 `source=tdx,status=fresh`;分别验证 `UpHome/DownHome` 汇总、一级行业排序和成交额单位转换。
- 异常映射:覆盖畸形涨跌家数字段(小数、指数、十六进制和超出安全整数)、当前及前一根非法公历日期、相邻日期重复/倒序、空一级行业目录、单根板块 K 线、指数/板块混合交易日、成交额缺市场/交易日倒序/日期金额数组错位/负数/首市场落后,以及三市完整性状态。
- 后端状态:覆盖指数、市场宽度、一级行业和成交额旧交易日期的真实 `delayed` 分支;休市日保守延迟属于已记录边界。
- 测试时钟:市场概览服务套件统一冻结到上海 `2026-08-18`,单个 `delayed` 用例显式切换目标日期并在用例后恢复,保证测试不会随自然日期变化。
- 前端状态:覆盖宽度、板块和成交额模块的 `partial`/`delayed` 警告、真实交易日期和成交额零变化中性色。
- 浏览器验证:桌面默认视口和 390px 移动视口无横向溢出;综合/短线切换和分析引擎选择可用。
## 安全、性能与残余风险
- 安全:TDX 地址固定为本机回环桥接端口;请求超时、响应 1 MiB 上限、错误脱敏;只读行情,不接受用户输入拼接请求。
- 性能:五个模块并行请求,单次 TDX 请求受超时保护;本切片不引入数据库、缓存或消息负载,未进行持续压测。
- 残余风险:主力净流入字段当前桥接实测为零值,需权限和口径专项验证;盘中新闻仍需补充源;详情页、依据抽屉和 AI 运行时需另立功能;市场数据授权和生产 7×24 稳定性未由本地冒烟证明。
## 安全验证
- 验证 TDX 只能使用回环地址和固定端口,错误响应不包含原始 URL、请求体或凭据。
- 验证前端只能通过统一 Axios API 文件访问后端,边界测试拒绝页面直连 Axios/fetch 和 Server 内部依赖。
- 验证 E2E 夹具使用无秘密的生产测试环境变量,不读取仓库内本地凭据或生产配置。
## 性能验证
- 验证五个模块并发加载、单模块失败隔离和请求超时行为。
- 验证响应体 1 MiB 上限和构建产物体积;浏览器桌面/移动端无横向溢出。
- 7×24 运行、峰值并发、TDX 断线重连和消息/缓存压力测试不适用于当前只读首屏,已列为后续采集与生产功能边界。
@@ -0,0 +1,21 @@
# 设计
## 方案
在 `web/vite.config.ts` 的 `server.port` 设置 8888;同步 `web/playwright.config.ts` 的 `baseURL` 与 `webServer.url`,并更新 `docs/deployment/local-development.md`。保持 `host: 127.0.0.1`、`strictPort: true` 和 `/api` 代理不变。
## 安全策略与评估
- 监听地址仍为回环地址,不增加局域网或公网暴露。
- 不停止 8080 的外部项目进程。
- 不读取或写入凭据,不改变 API、TDX 或外部基础设施配置。
## 性能目标与评估
- 端口调整不改变前端构建产物和运行时逻辑。
- Vite 启动验证目标为 30 秒内可访问;本次实际启动耗时小于 1 秒。
- E2E 启动入口与真实监听地址保持一致,避免重复启动或等待错误端口。
## 错误处理与回退
`strictPort: true` 保持不变;8888 被占用时启动明确失败,不自动抢占或切换端口。回退时将四处当前配置恢复为 5173,并同步恢复文档。
@@ -0,0 +1,45 @@
# Web 开发端口调整开发总结
- 功能编号:FEAT-MO-002
- 总结版本:0.1
- 日期:2026-08-19
## 原始开发需求
将前端端口改为 8080,检查占用并启动;经检查 8080 被其他项目占用后,用户确认改用 8888。
## 需求与范围变化
初始目标从 8080 调整为 8888,原因是 8080 已被另一个本地项目占用;该进程不属于本项目,本次没有停止或修改它。
## 实际完成需求
- `web/vite.config.ts` 开发端口改为 8888。
- `web/playwright.config.ts` 两处 Web 地址改为 8888。
- 本地开发手册 Web 地址改为 8888。
- 新增端口回归测试。
- Web 已在 `http://127.0.0.1:8888/` 启动并返回 200。
- Tailscale 外部隧道已启动,SSH 控制隧道监听 `127.0.0.1:17710`,TDX 只读行情请求成功。
- 为保证外部隧道切换后的 API 可重复启动,在被 Git 忽略的 `deploy/env/development/api.env.local` 补充了 `TDX_BASE_URL` 和 `TDX_TIMEOUT_MS`,未写入仓库。
## 修复缺陷
本次没有修复既有业务缺陷;变化属于本地开发配置和对应验证入口的一致性调整。新增回归断言防止端口意外恢复为 5173。
## 未完成与延期项
生产部署不在本次范围。完整 E2E 在收尾复验时发现市场概览夹具时钟未隔离,已由 `FEAT-QA-001` 修复;API 健康检查因开发 MySQL 不可用返回 503,但 Redis 正常,市场概览接口和 TDX 只读链路返回 200,MySQL 状态不属于本次端口变更。
## 关键提交
- `f00e114f88464f07bcbba3ca6691f04ca9699d38`:`chore(FEAT-MO-002): 调整 Web 开发端口为 8888`。
- 该实施提交已推送至项目 Gitea `origin/main`,远端分支 SHA 与本地一致。
## 验证证据
- Schema:`npm run schema:baseline` 和 `npm run schema:verify` 均通过,版本 `v0.0.10 (captured_empty)`。
- GitNexus:开发前索引状态最新;开发后检测为 LOW、受影响执行流 0。
- 测试:Web Vitest 8 个文件、21 个测试通过;修改前新增端口测试按预期失败。
- 启动:Vite 监听 8888,首页 HTTP 200;API 使用本地配置启动并监听 3000。
- TDX:Tailscale ping 经 DERP 成功,SSH 隧道监听 17710,`get_market_data` 返回 `ErrorId=0`。
- 安全:保持 127.0.0.1,不停止其他项目,不读取凭据。
@@ -0,0 +1,13 @@
# GitNexus 开发后基线
## GitNexus 状态
完成 Web 配置、测试和文档修改后刷新索引:3,122 nodes、4,343 edges、68 clusters、85 flows,状态 `up-to-date`。本功能影响评估为 LOW,受影响执行流为 0。
## Git 已跟踪变更摘要
Vite 开发端口、Playwright Web 地址和本地开发手册由 5173 统一调整为 8888;AGENTS.md 的既有修改保留,不属于本功能。
## Git 工作区摘要
工作区包含本功能档案和端口相关修改;无关未跟踪文件明确排除。提交与推送将在最终独立 Review 通过后执行。
@@ -0,0 +1,26 @@
# GitNexus 开发前基线
- 功能编号:FEAT-MO-002
- 记录时间:2026年8月19日 GMT+8 12:23:44
- 分支:main
- 基线提交:1f6ed00e6fbb
## 工作区
```text
M AGENTS.md
```
## GitNexus 状态
```text
Repository: <project-root>
Indexed: 8/18/2026, 9:31:53 PM
Indexed commit: 1f6ed00
Current commit: 1f6ed00
Status: ✅ up-to-date
```
## 后续人工分析
在修改代码前,将 GitNexus query、context、impact 的结论写入 `gitnexus/impact-plan.md`。高风险结果必须先获得用户确认。
@@ -0,0 +1,13 @@
# GitNexus 前后对比
## 开发前
Vite 监听 5173,Playwright 和本地手册使用 5173;GitNexus 索引为项目当前基线。
## 开发后
Vite、Playwright 和本地开发手册统一使用 8888;业务模块执行流、API 契约和数据基础设施不变。GitNexus 变更检测为 LOW,受影响执行流 0。
## 差异处置
8080 的外部 Python 进程未被停止;Tailscale 外部 TDX 隧道独立切换到 `tdx-windows-tailnet`,不改变平台固定的 127.0.0.1:17710 入口。
@@ -0,0 +1,9 @@
# GitNexus 变更检测
执行:`gitnexus_detect_changes({scope: "unstaged", repo: "a-share-analysis"})`。
结果:`changed_count=3`、`changed_files=5`、`affected_count=0`、`risk_level=low`、受影响执行流 0。GitNexus 识别到 AGENTS.md(既有工作区修改)和本地开发文档章节;Vite/Playwright 的端口常量变化未映射为业务符号,已通过配置测试、类型检查、构建和 HTTP 启动验证覆盖。
本功能预期变更仅为:Vite 端口、Vite 配置测试、Playwright 地址、本地开发文档和功能档案。AGENTS.md 是用户已有修改,本次不触碰其内容,也不将其视为功能变更。
同步判断:不涉及 API/OpenAPI、消息契约、数据库、Redis、Scheduler、Worker 或生产部署;Web 开发启动流程已同步。
@@ -0,0 +1,35 @@
# GitNexus 开发前影响计划
- 功能编号:FEAT-MO-002
- 目标:将 Vue/Vite 本地开发服务器端口从 5173 调整为 8888。
- 总体风险:LOW
## 直接与间接影响
- `gitnexus_query("Vite development server port web startup")` 定位到 `web/vite.config.ts` 和 `web/src/vite-config.test.ts`。
- `gitnexus_context({name: "vite.config.ts", file_path: "web/vite.config.ts"})` 显示该配置文件被 `web/src/vite-config.test.ts` 导入,配置内部调用 `readDevelopmentPublicEnv`。
- `gitnexus_impact({target: "vite.config.ts", direction: "upstream"})`:直接调用方 0、受影响执行流 0、受影响模块 0,风险 LOW。
- `gitnexus_impact({target: "playwright.config.ts", direction: "upstream"})`:直接调用方 0、受影响执行流 0、受影响模块 0,风险 LOW;该配置自身启动并访问 Web 开发服务器,需要同步更新端口。
- 对 `readDevelopmentPublicEnv` 的 upstream 影响为 1 个配置文件调用方,风险 LOW;端口字段是 Vite 配置常量,不改变 API、数据契约或业务逻辑。
- 8080 已被另一个本地项目占用;该进程不属于本项目,本次不停止、不修改,也不记录其本机目录或临时进程标识。
## 跨模块同步修改
| 维度 | 判断 | 同步修改 |
|---|---|---|
| HTTP/OpenAPI | 不涉及页面 API 契约 | 无 |
| Web API | 不涉及 Axios 请求路径 | 无 |
| 消息契约 | 不涉及 RocketMQ | 无 |
| 数据库 | 不涉及 MySQL Schema | 无 |
| Redis | 不涉及缓存 | 无 |
| API | Nest API 端口保持 3000 | 无 |
| Scheduler/Worker | 不涉及任务进程 | 无 |
| 部署 | 仅开发 Vite 端口;生产 Web 配置不变 | 更新本功能说明 |
| 测试 | Vite 配置回归测试增加 8888 断言;Playwright baseURL/webServer URL 同步 | 修改 `web/src/vite-config.test.ts`、`web/playwright.config.ts` |
| 文档 | 本地开发 Web 地址同步为 8888 | 修改 `docs/deployment/local-development.md` 和本功能档案 |
## 安全、性能与残余风险
- 安全:不改变监听地址(仍为 `127.0.0.1`),不暴露新公网入口,不接触凭据。
- 性能:仅改变本地开发服务器监听端口,不改变构建产物、代理或运行时性能。
- 残余风险:如果其他本地进程占用 8888,因 `strictPort: true` 启动会失败;启动前必须检测并报告。
@@ -0,0 +1,9 @@
# 实施计划
1. 检查 8080/8888 占用情况和工作区状态。
2. 执行 Schema 基线与校验,运行治理起始门禁。
3. 使用 GitNexus 评估 Vite、Playwright 配置和测试影响。
4. 先添加 8888 回归断言并确认旧配置下失败,再修改 Vite 配置。
5. 同步 Playwright 和本地开发文档。
6. 启动 Web,验证 8888 HTTP 200;切换 Tailscale 外部 TDX 隧道并验证只读行情。
7. 执行测试、构建、GitNexus 变更检测和 Review。
@@ -0,0 +1,12 @@
id: FEAT-MO-002
name: Web 开发端口调整为 8888
slug: web-port-8888
status: ready_for_release
owner: project
created_at: 2026-08-19
requirements: requirements.md
prd: prd.md
design: design.md
implementation_plan: implementation-plan.md
release: unreleased
traceability_note: 端口配置、安全断言、完整门禁、GitNexus 与独立 Review 已通过,等待正式版本发布
@@ -0,0 +1,47 @@
# Web 开发端口调整为 8888 PRD
- 功能编号:FEAT-MO-002
- PRD版本:0.1
- 状态:approved
- 日期:2026-08-19
## 背景与问题
本机 8080 已被其他项目占用,现有 A 股分析工具前端开发端口 5173 需要调整为用户指定的 8888。
## 产品目标
- Web 开发服务器监听 `127.0.0.1:8888`。
- Playwright、本地开发文档和端口回归测试使用同一地址。
- API 仍监听 `127.0.0.1:3000`,TDX 隧道仍使用 `127.0.0.1:17710`。
## 非目标
- 不改变生产 Web 端口、Nginx、API、TDX、Redis、MySQL 或 RocketMQ 配置。
- 不停止其他项目进程,不开放公网监听。
## 功能需求
| 编号 | 优先级 | 需求 | 可观察结果 |
|---|---|---|---|
| FR-001 | P0 | 调整 Vite 开发端口 | `vite.config.ts` 的 `server.port` 为 8888 |
| FR-002 | P0 | 同步 E2E 和本地文档 | Playwright 和开发手册访问 8888 |
| FR-003 | P0 | 保持本机安全边界 | host 仍为 127.0.0.1,strictPort 仍启用 |
## 安全需求与信任边界
本次只改变本机开发监听端口,不改变监听地址、代理目标、认证、数据源或凭据。8080 占用进程不属于本项目,不停止或操作该进程。
## 性能目标与容量假设
端口变化不应改变构建、代理和页面运行时性能;Vite 应在 30 秒内启动并返回首页。
## 验收标准
- `web/src/vite-config.test.ts` 断言端口为 8888。
- `http://127.0.0.1:8888/` 返回 HTTP 200。
- API 代理仍转发到 `http://127.0.0.1:3000`。
## 关联模块与同步修改
涉及 Web Vite 配置、Web 配置测试、Playwright 配置和本地开发文档;不涉及 HTTP/OpenAPI、数据库、Redis、消息、Scheduler、Worker 和生产部署。
@@ -0,0 +1,19 @@
# 测试结果
- RED:端口断言在旧配置下按预期失败,实际值为 5173,期望值为 8888。
- GREEN:Web Vitest 8 个测试文件、21 个测试全部通过。
- 安全回归:Vite 配置测试同时锁定 `host=127.0.0.1`、`port=8888` 和 `strictPort=true`。
- HTTP:`curl -I http://127.0.0.1:8888/` 返回 HTTP 200。
- API:`/api/v1/market-overview/summary` 返回 HTTP 200,`source=tdx`、`status=fresh`。
- TDX:外部 Tailscale SSH 隧道 `127.0.0.1:17710` 只读请求返回 `ErrorId=0`。
- 健康检查:API 返回 503,明确原因为开发 MySQL 不可用;Redis 为 healthy,RocketMQ 为 disabled。该结果不影响端口和 TDX 链路验收。
- 完整门禁:`pnpm verify` 通过,Web 21/21、Server 67/67、启动器 2/2、Playwright 4/4,类型检查与前后端构建通过。
- Lint:0 error;保留市场概览组件既有 35 条格式 warning,本功能没有新增 warning。
## 安全验证
监听地址保持回环;未停止或修改占用 8080 的外部进程;变更中未写入新凭据、本机绝对路径或临时进程标识。
## 性能验证
Vite 启动耗时约 194ms,首页可立即访问;完整构建和 E2E 通过,未增加运行时依赖和外部服务调用。
@@ -0,0 +1,11 @@
# 视觉验证
本次仅改变开发服务器端口,不改变页面布局、样式或组件。收尾的 Playwright 在桌面与移动端共执行 4 个用例并全部通过;页面视觉基线继续沿用 FEAT-MO-001 的既有截图,不制造重复截图产物。
## 安全验证
Web 仍只绑定 `127.0.0.1`,没有新增局域网或公网访问入口。
## 性能验证
Vite 监听 8888 后首页响应正常,端口变更不影响页面资源加载路径。
@@ -0,0 +1,3 @@
# 发布说明
本地开发 Web 端口从 5173 调整为 8888。API、TDX 隧道和生产配置不变。该功能尚未创建发布标签。
@@ -0,0 +1,14 @@
# 需求
用户要求将前端开发端口改为 `8888`,检查是否被占用并启动项目。
## 实际范围
- Vite 开发服务器从 5173 改为 8888。
- Playwright `baseURL` 和 Web Server 检查地址同步为 8888。
- 本地开发手册 Web 地址同步为 8888。
- API 继续使用 3000,TDX 外部隧道继续映射到 17710。
## 范围变化
8080 初次检查发现已被其他项目 Python `run.py` 进程占用,因此没有停止该进程,改用用户确认的 8888。
@@ -0,0 +1,46 @@
# 代码 Review
- 功能编号:FEAT-MO-002
- reviewer_type:self
- reviewer:Codex
- 日期:2026-08-19
## 审查范围
审查 `web/vite.config.ts`、`web/src/vite-config.test.ts`、`web/playwright.config.ts`、本地开发手册及对应功能档案。
## PRD 与设计符合性
符合:Vite、Playwright 和本地开发文档统一使用 8888,API 3000、TDX 隧道 17710 和回环监听保持不变。
## 发现
| 严重程度 | 位置 | 问题 | 影响 | 处理 |
|---|---|---|---|---|
| 无 | - | 未发现本次范围内问题 | - | - |
## 测试缺口
收尾时完整 E2E 首次运行发现市场概览测试夹具时钟未隔离;该跨日缺陷不属于端口行为,已由 `FEAT-QA-001` 使用固定测试时钟修复并纳入完整门禁。
## 安全与残余风险
保持 `127.0.0.1` 和 `strictPort`,不停止其他项目。残余风险是 8888 被其他进程占用时启动会明确失败。
## 性能与资源影响
仅改变监听端口;Vite 启动约 194ms,无新依赖和外部负载。
## GitNexus 与同步修改
GitNexus 对 Vite 和 Playwright 配置影响评估为 LOW;同步更新了配置测试、E2E 地址和本地开发文档。
## 修复与复审
端口测试已完成 RED/GREEN;独立 Review 要求补锁回环地址和 `strictPort`,对应断言已增加。档案中的本机绝对路径、临时 PID 和旧验证结论已清理;完整门禁通过,等待最终复审。
## 最终结论
最终独立复审确认回环监听、8888、`strictPort`、Playwright 和文档一致;无 Critical、Important 或 Minor 问题,`Ready to commit: Yes`。
最终结论:passed
@@ -0,0 +1,36 @@
# 开发规范符合性 Review
- 功能编号:FEAT-MO-002
- reviewer_type:self
- reviewer:Codex
- 日期:2026-08-19
## 检查结果
- [x] 必要中文注释准确且没有逐行废话注释。
- [x] 文件按稳定职责拆分,没有过度碎片化。
- [x] 端口、监听地址和时间语义明确。
- [x] 错误处理和 strictPort 行为保持不变。
- [x] 安全策略、性能目标、验证证据和残余风险完整。
- [x] 未引入依赖,未发生 API 或前端请求边界变化。
- [x] GitNexus 开发前影响分析和开发后检测已记录,风险 LOW、0 受影响执行流。
- [x] 开发总结记录了需求、范围变化、完成项、延期项和验证证据。
- [x] PRD、设计、测试、发布和回退口径一致。
## 不符合项与处置
独立 Review 发现安全配置断言不足、功能档案含本机绝对路径/临时 PID 且验证结论已过时。现已清理敏感环境细节并补充 `host`、`port`、`strictPort` 回归断言;完整门禁通过,等待最终复审。
## 安全、性能与架构检查
监听仍为 127.0.0.1;端口变化不改变资源性能;8080 外部进程未被操作。
## GitNexus 与开发总结检查
影响风险 LOW,配置、测试、E2E 和文档同步修改均已记录;开发总结列出 TDX 外部隧道与 MySQL 健康检查证据。
## 最终结论
最终独立复审确认完整门禁、GitNexus、安全清理和逐路径提交策略符合规范;无未关闭问题。
最终结论:passed
@@ -0,0 +1,19 @@
# 回退说明
## 触发条件
- 8888 与本机其他必要服务冲突。
- Playwright 或本地开发脚本无法访问前端。
- 发现端口改动影响非开发环境配置。
## 回退步骤
1. 将 `web/vite.config.ts` 的 `server.port` 恢复为 5173。
2. 将 `web/playwright.config.ts` 的 `baseURL` 和 `webServer.url` 恢复为 5173。
3. 将 `docs/deployment/local-development.md` 的 Web 地址恢复为 5173。
4. 同步修改端口回归测试和本功能档案,执行 Web 测试与启动验证。
5. 停止本功能启动的 Web 进程,不操作 8080 的其他项目。
## 数据与外部服务
本次不修改 MySQL、Redis、RocketMQ、TDX 客户端或 SSH 隧道配置,因此无需数据回退。
@@ -0,0 +1,22 @@
# 测试计划
## 功能验证
- Vite 配置单元测试:监听地址为 `127.0.0.1`、端口为 8888、`strictPort=true`,代理仍为本地 API。
- Web 启动验证:8888 返回首页 HTML。
- Playwright 配置检查:baseURL 和 webServer URL 均为 8888。
## 安全验证
- 检查监听地址仍为 `127.0.0.1`。
- 检查 8080 外部 Python 进程未被停止或修改。
- 检查无密钥、密码和公网地址进入变更文件。
## 性能验证
- 记录 Vite 启动耗时和首页 HTTP 响应。
- 端口配置不引入新依赖、不增加 API 或数据源负载。
## 验证边界
生产部署验证不属于本地开发端口范围;收尾时仍执行完整仓库门禁和 Playwright 桌面/移动端回归,确保端口同步没有破坏测试启动链路。
@@ -0,0 +1,17 @@
# 设计
## 设计方案
只修改根目录 README,事实来源固定为现有部署手册、系统架构、FEAT-MO-001 市场概览和 FEAT-MO-002 端口档案。README 作为入口索引,不复制完整的 Tailscale、生产部署或治理规则。
## 安全策略与评估
仅写入 TDX 本机回环入口、SSH 别名和占位符;不写真实 Windows 地址、Tailscale IP、SSH 用户、Token、密码或私钥。README 明确 TDX 不开放公网、Schema 禁止触碰生产库。
## 性能目标与评估
文档变化不影响编译、运行时和网络性能;只增加可发现性和启动指导。
## 兼容与回退
README 可以独立回退,不需要数据迁移或服务重启。后续端口、部署或数据源变更必须同步 README 和专项文档。
@@ -0,0 +1,40 @@
# README 文档同步开发总结
- 功能编号:FEAT-MO-003
- 总结版本:0.1
- 日期:2026-08-19
## 原始开发需求
用户指出 README 落后,要求更新为当前项目状态。
## 需求与范围变化
从旧的英文工程简介扩展为当前可运行状态说明,新增 8888 Web、TDX 双隧道、首屏模块、基础设施边界和启动验证;未改变代码和运行行为。
## 实际完成需求
- README 已同步当前市场概览首屏、技术栈和源码部署边界。
- README 已同步 Web 8888、API 3000 和 TDX 17710 回环入口。
- README 已补充 LAN/Tailscale 隧道、启动、停止和验证入口。
- README 已补充 Schema、GitNexus、Review 和 Gitea 约束链接。
## 修复缺陷
修复 README 将项目描述、端口、启动方式和基础设施启用边界写旧的问题;没有业务代码缺陷修复。
## 未完成与延期项
README 不替代完整 Tailscale、生产部署和治理文档;这些内容继续由专项文档维护。
## 关键提交
- `6cbfd8d8a4d0bfadef33c87a21d16ea900d9978e`:`docs(FEAT-MO-003): 更新项目 README`。
- 该实施提交已推送至项目 Gitea `origin/main`,远端分支 SHA 与本地一致。
## 验证证据
- Schema:npm run schema:baseline 和 npm run schema:verify 通过,v0.0.10 captured_empty。
- GitNexus:README upstream 风险 LOW,执行流 0;开发后检测已记录。
- 文档检查:旧的当前端口引用清理,README 链接和命令与现有文件一致。
- 安全:未写入凭据、真实 Tailscale 地址、Windows 用户或 Token。
@@ -0,0 +1,5 @@
# GitNexus 开发后基线
GitNexus 已刷新:3,122 nodes、4,343 edges、68 clusters、85 flows,状态 up-to-date。
README upstream 风险 LOW,受影响执行流 0;开发后变更检测 risk_level=low、affected_count=0。
@@ -0,0 +1,32 @@
# GitNexus 开发前基线
- 功能编号:FEAT-MO-003
- 记录时间:2026年8月19日 GMT+8 12:57:47
- 分支:main
- 基线提交:1f6ed00e6fbb
## 工作区
```text
M AGENTS.md
M README.md
M docs/deployment/local-development.md
M web/playwright.config.ts
M web/src/vite-config.test.ts
M web/vite.config.ts
?? docs/features/FEAT-MO-002-web-port-8888/
```
## GitNexus 状态
```text
Repository: <project-root>
Indexed: 8/19/2026, 12:57:47 PM
Indexed commit: 1f6ed00
Current commit: 1f6ed00
Status: ✅ up-to-date
```
## 后续人工分析
在修改代码前,将 GitNexus query、context、impact 的结论写入 `gitnexus/impact-plan.md`。高风险结果必须先获得用户确认。
@@ -0,0 +1,3 @@
# GitNexus 前后对比
开发前 README 使用旧的英文项目简介、5173 端口和不完整启动说明;开发后同步当前 8888、TDX 双隧道、首屏模块和治理入口。README 不参与业务执行流。
@@ -0,0 +1,5 @@
# GitNexus 变更检测
执行 `gitnexus_detect_changes({scope: "unstaged", repo: "a-share-analysis"})` 结果:changed_count=10、changed_files=6、affected_count=0、risk_level=low、受影响执行流 0。
GitNexus 识别到 README 的 6 个章节和既有 AGENTS.md/本地开发文档章节;本功能没有业务代码或运行时执行流变化。AGENTS.md 的既有用户修改保留,不属于本功能。
@@ -0,0 +1,27 @@
# GitNexus 开发前影响计划
- 功能编号:FEAT-MO-003
- 目标:同步根目录 README 与当前前端端口、TDX 双隧道、本地启动、技术栈和首屏能力。
- 总体风险:LOW
## 直接与间接影响
- GitNexus context:README.md 仅关联 docs/index、治理、部署和架构文档,没有业务执行流调用方。
- GitNexus impact:README.md upstream 直接调用方 0、受影响执行流 0、受影响模块 0,风险 LOW。
- README 的事实来源为现有本地开发、TDX 隧道、系统架构和 FEAT-MO-001/002 功能档案。
## 跨模块同步修改
| 维度 | 判断 | 同步修改 |
|---|---|---|
| HTTP/OpenAPI | 不涉及 | 无 |
| Web API | 不涉及 | 无 |
| 消息、数据库、Redis | 不涉及运行配置 | 无 |
| API、Scheduler、Worker | 不改变启动行为 | README 仅说明边界 |
| 部署 | 仅补充现有源码部署和本地文档入口 | README 链接同步 |
| 测试 | 文档变更不要求业务测试;执行格式检查和功能门禁 | 功能档案 |
| 安全 | 不写入凭据、真实地址或 Token;保留回环和 TDX 隧道边界 | README |
## 性能与残余风险
README 不参与运行时路径,不增加性能负载。残余风险是文档与后续配置变更可能再次漂移,后续端口或部署变更必须同步 README 和对应专项文档。
@@ -0,0 +1,6 @@
# 实施计划
1. 对比 README 与当前部署、架构和功能档案。
2. 执行 Schema 基线和 GitNexus 开发前影响分析。
3. 更新 README 的状态、技术栈、TDX 隧道、启动和治理内容。
4. 检查旧端口和敏感信息,执行格式检查和治理完成门禁。
@@ -0,0 +1,12 @@
id: FEAT-MO-003
name: README 文档同步
slug: readme-refresh
status: ready_for_release
owner: project
created_at: 2026-08-19
requirements: requirements.md
prd: prd.md
design: design.md
implementation_plan: implementation-plan.md
release: unreleased
traceability_note: README 事实边界、完整门禁、GitNexus 与独立 Review 已通过,等待正式版本发布
@@ -0,0 +1,45 @@
# README 文档同步 PRD
- 功能编号:FEAT-MO-003
- PRD版本:0.1
- 状态:approved
- 日期:2026-08-19
## 背景与问题
根目录 README 仍使用旧的英文项目描述、旧的 5173 前端端口和过时的基础设施说明,无法指导当前 TDX 双隧道开发。
## 产品目标
- README 准确说明当前市场概览首屏能力和未覆盖的数据源边界。
- README 准确说明 Vue/NestJS/TDX/MySQL/Redis/RocketMQ 技术栈和源码部署边界。
- README 准确说明 8888 Web、3000 API、17710 TDX 回环入口和 Tailscale 外部场景。
- README 提供可直接执行的本地启动、验证和治理入口。
## 非目标
- 不改变业务代码、接口、运行配置或生产部署。
- 不把真实 Tailscale 地址、Windows 用户、Token、密码或私钥写入文档。
## 功能需求
| 编号 | 优先级 | 需求 | 可观察结果 |
|---|---|---|---|
| FR-001 | P0 | 更新当前实现和技术栈 | README 与 FEAT-MO-001、架构文档一致 |
| FR-002 | P0 | 更新本地端口和启动命令 | README 使用 Web 8888、API 3000 |
| FR-003 | P0 | 更新 TDX 双隧道说明 | README 只使用 SSH 别名和 127.0.0.1:17710 |
| FR-004 | P1 | 更新验证入口 | Schema、治理、测试和部署文档可追溯 |
## 安全策略与评估
README 只记录占位符和回环地址,不记录凭据;明确 TDX 不暴露到公网,明确 Schema 只能访问开发库。
## 性能目标与评估
文档不进入运行时路径,不增加 API、TDX、Redis、MySQL 或 RocketMQ 负载。
## 验收标准
- README 不再把 5173 描述为当前 Web 端口。
- README 包含 8888、TDX 外部隧道和当前首屏模块。
- README 命令与现有 package scripts 和部署手册一致。
@@ -0,0 +1,15 @@
# 测试结果
- README 已包含当前端口 8888、API 3000、TDX 17710 和外部 Tailscale 入口。
- README 已包含当前市场概览模块和数据源边界。
- README 已包含本地启动、停止、Schema 和治理命令。
- 未发现敏感凭据或真实隧道地址。
- 完整门禁:`pnpm verify` 通过,包含格式、契约、类型、全部测试、前后端构建和 Playwright 4/4。
## 安全验证
保持 TDX 回环入口和开发库边界,没有写入真实地址或密钥。
## 性能验证
文档不进入运行时路径;格式检查、构建和 E2E 通过。
@@ -0,0 +1,11 @@
# 视觉验证
README 为 Markdown 文档,本次不执行页面视觉截图;已检查标题层级、代码块、链接和列表结构。
## 安全验证
文档只展示本机回环地址和占位符。
## 性能验证
文档内容不会影响前端运行时性能。
@@ -0,0 +1,3 @@
# 发布说明
README 已同步当前项目状态、8888 Web 端口、TDX 双隧道、本地启动和治理入口;无运行时行为变化。
@@ -0,0 +1,10 @@
# 需求
用户要求更新落后的 README。范围确定为同步当前已实施架构、市场概览、TDX 外部隧道、8888 前端端口、本地启动方式和开发治理入口。
## 实际范围
- 根 README 更新为中文为主的项目说明。
- 补充 Vue 3/NestJS/TDX/MySQL/Redis/RocketMQ/源码部署信息。
- 补充 TDX LAN/Tailscale 别名和 17710 回环入口。
- 补充 Web 8888、API 3000、Scheduler/Worker 可选启动和验证命令。
@@ -0,0 +1,46 @@
# 代码 Review
- 功能编号:FEAT-MO-003
- reviewer_type:self
- reviewer:Codex
- 日期:2026-08-19
## 审查范围
审查 README 的当前状态、启动命令、端口、TDX 隧道、基础设施边界和链接。
## PRD 与设计符合性
符合:README 与现有本地开发、TDX、架构和市场概览文档保持一致。
## 发现
| 严重程度 | 位置 | 问题 | 影响 | 处理 |
|---|---|---|---|---|
| 无 | - | 未发现本次范围内问题 | - | - |
## 测试缺口
未执行页面视觉验证;README 文档不改变页面。
## 安全与残余风险
未发现凭据;残余风险是未来配置变化需要同步文档。
## 性能与资源影响
无运行时影响。
## GitNexus 与同步修改
README upstream 风险 LOW、执行流 0;仅同步入口文档,没有跨模块代码变化。
## 修复与复审
独立 Review 发现 `gitnexus/impact-plan.md` 末尾残留未填写模板,已删除重复占位内容;最终复审又发现 README 将尚不存在的强势个股入口写成已预留,现已改为明确的未来范围。完整门禁通过,等待最终复审。
## 最终结论
最终独立复审确认 README 与现有实现一致,并明确强势个股尚未开发;无 Critical、Important 或 Minor 问题,`Ready to commit: Yes`。
最终结论:passed
@@ -0,0 +1,32 @@
# 开发规范符合性 Review
- 功能编号:FEAT-MO-003
- reviewer_type:self
- reviewer:Codex
- 日期:2026-08-19
## 检查结果
- [x] README 与已实施架构和开发文档一致。
- [x] 未写入凭据、生产数据或真实隧道地址。
- [x] 明确记录安全边界、性能影响和验证证据。
- [x] GitNexus 开发前后流程已记录。
- [x] 开发总结记录需求、范围、完成项、缺陷、延期项和验证证据。
## 不符合项与处置
GitNexus 开发前影响计划曾残留模板占位内容,已清理并保留实际 LOW 风险、0 执行流及逐项跨模块判断;完整门禁已通过,README 对强势个股未开发状态的表述已纠正。
## 安全、性能与架构检查
文档不改变运行时;安全边界和基础设施启用边界已说明。
## GitNexus 与开发总结检查
影响分析为 LOW,README 更新与功能档案一致。
## 最终结论
最终独立复审确认模板占位、安全边界和验证证据均已同步,无未关闭问题。
最终结论:passed
@@ -0,0 +1,10 @@
# 回退说明
## 触发条件
- README 与实际启动配置再次不一致。
- 发现文档包含敏感信息或错误的生产承诺。
## 回退步骤
恢复 README 到本次修改前版本;不需要修改代码、数据库、Redis、RocketMQ 或 TDX 隧道。
@@ -0,0 +1,16 @@
# 测试计划
## 功能验证
- 检查 README 包含 8888、3000、17710、Tailscale 别名和市场概览模块。
- 检查 README 不再使用 5173 作为当前端口。
- 检查命令和链接指向现有文件与 package scripts。
## 安全验证
- 扫描 README 和功能档案,确认不包含 Token、密码、真实外部地址或私钥。
- 确认 README 保留回环监听、TDX 不公网暴露和开发库 Schema 边界。
## 性能验证
文档不参与运行时;执行 git diff --check 和项目文档/治理门禁,不做业务压测。
@@ -0,0 +1,49 @@
# AKTools 分时能力探针报告
- 功能关联:FEAT-MO-004 指数与板块详情分析页
- 探针类型:Spike(只读能力验证,不包含业务代码改动)
- 探针时间:2026-08-25(Asia/Shanghai)
- 服务地址:`http://127.0.0.1:8080`(仅记录地址,不记录凭据和原始载荷)
- AKTools 版本:`1.18.88`
## 验证范围
验证 AKTools 暴露的 AKShare 分钟接口,覆盖个股、指数、行业板块和概念板块;同时检查新浪分钟接口是否可以作为指数/个股的备用来源。每次请求仅执行只读查询,不触发交易、账户、自选或写入操作。
## 实测结果
| 数据类别 | 接口 | 参数样例 | HTTP | 结果摘要 |
| --- | --- | --- | ---: | --- |
| 个股 | `stock_zh_a_hist_min_em` | `symbol=000001&period=1` | 500(重复探测出现过 200) | 依赖东方财富 push2his;本次重复请求不稳定,不纳入当前接入 |
| 个股 | `stock_zh_a_minute` | `symbol=sh600519&period=1` | 200 | 返回 1,970 条;字段为 `day/open/high/low/close/volume/amount` |
| 指数 | `stock_zh_a_minute` | `symbol=sh000001&period=1` | 200 | 返回 1,970 条;可覆盖上证指数 |
| 指数 | `stock_zh_a_minute` | `symbol=sz399001&period=1` | 200 | 返回 1,970 条;可覆盖深证成指 |
| 指数 | `stock_zh_a_minute` | `symbol=sz399006&period=1` | 200 | 返回 1,970 条;可覆盖创业板指 |
| 指数 | `index_zh_a_hist_min_em` | `symbol=399006&period=1/5` | 500 | 依赖东方财富指数映射和 push2his;当前环境不可用 |
| 行业板块 | `stock_board_industry_hist_min_em` | `symbol=小金属&period=1/5` | 500 | 当前环境不可用;接口内部还依赖板块名称映射 |
| 概念板块 | `stock_board_concept_hist_min_em` | `symbol=长寿药&period=1/5` | 500 | 当前环境不可用;接口内部还依赖概念名称映射 |
新浪分钟接口返回的最新时间为 `2026-08-24 15:00:00`。本次探针在收盘后执行,最后一条记录可能只是最近一个交易日的收盘数据;仅凭收盘后的单次探测,不能判定接口存在延迟,也不能据此标记为实时行情。
## 结论
1. AKShare 确实具备分时能力;当前内网 AKTools 已能通过 `stock_zh_a_minute` 返回个股和主要指数分钟序列。
2. `stock_zh_a_hist_min_em`、`index_zh_a_hist_min_em`、行业板块和概念板块分钟接口均依赖东方财富上游,本次环境中出现 HTTP 500 或重复不稳定,暂不具备上线条件。
3. 新浪接口的字段结构与现有详情页 TDX K 线模型不同;本次收盘后探测不足以确认盘中时效,不能直接替换 TDX,也不能在页面上未经状态判断标记为实时分时。
4. FEAT-MO-004 当前 `availableViews.intraday=false` 的行为保持不变。本报告不授权新增接口或修改数据源优先级。
## 推荐后续方案
如需继续接入分时,应另立功能并先完成以下边界设计:
- 个股/指数可考虑新浪分钟接口作为分时补充,但状态必须依据交易时段探测结果判断,并记录数据源和最后数据时间;收盘后的单次结果不能直接标记为 `delayed` 或 `fresh`。
- 板块分时暂不接入 AKShare,除非先解决东方财富上游 500、板块代码映射和重试限流问题。
- 不把 AKTools 原始接口暴露给浏览器;由 Nest 服务端固定白名单、超时、响应体上限、字段校验和错误脱敏。
- 继续保留 TDX 作为实时/盘中主数据源;任何补充源都不能覆盖 TDX 的新鲜数据。
- 上线前需要在交易时段连续观测至少一个完整交易日,比较最后时间、更新时间延迟、缺口率、请求成功率和重复数据率;收盘后的结果只用于确认收盘记录是否完整。
## 限制与残余风险
- 探针在本机内网环境执行,结果受当前网络代理、东方财富/新浪上游状态和交易日影响,不能代表生产可用性。
- 未保存原始返回载荷,避免把行情快照和上游异常细节写入仓库;仅保存接口、状态码、字段和时间摘要。
- 未验证授权、再分发和长期 7×24 稳定性;在这些事项完成前不得把接口标为生产数据源。
@@ -0,0 +1,15 @@
# FEAT-MO-004 设计说明
设计基线为 `docs/superpowers/specs/2026-08-24-index-sector-detail-design.md`。
后端新增详情 Controller/Service/Mapper,复用现有 TDX Client 的超时、响应体上限和错误脱敏边界;指数和板块使用独立代码白名单和数据口径。前端新增详情路由、独立 Axios API 文件、共享详情页和轻量 SVG K 线图,概览按钮仅负责导航。
详情数据失败采用模块级降级,页面仍保留标题、来源、更新时间和 warning。分时能力不通过探测时不返回假数据,UI 只展示明确的不可用边界。
## 安全策略与评估
Controller/Service 双层参数校验、代码白名单、固定周期、数量上限、响应字段白名单和错误脱敏。详情不接受任意 TDX 方法名或地址,分时未验证时不伪造数据。测试覆盖非法代码、越界数量、TDX 超时和原始字段不泄漏;残余风险是 TDX 本身依赖本机隧道,公网部署前必须另立采集架构评估。
## 性能目标与评估
单次最多 120 点、固定图表尺寸、页面卸载释放图表状态,不新增数据库和缓存热点。本地真实 TDX 详情请求观测约 47-56ms,浏览器首屏在开发机可交互;P95 小于 2 秒是本地开发目标,不代表生产容量证明。
@@ -0,0 +1,34 @@
# FEAT-MO-004 指数与板块详情分析页开发总结
- 功能编号:FEAT-MO-004
- 状态:in_review
- 发布状态:unreleased
## 原始开发需求
市场综合概览中的指数、板块点击后进入详细分析页,使用 TDX 真实数据展示行情和 K 线,支持后续复盘查看。
## 需求与范围变化
已确认首版同时覆盖指数和一级行业板块,但拆成共享外壳下的两个数据切片。TDX 能力探测发现三个分时候选方法均返回协议错误,因此首版只发布日 K 线,分时明确标记不可用。未扩大到成分股、资金流、新闻、AI、用户体系或交易操作。
## 实际完成需求
新增指数和板块详情 API、DTO、TDX 日 K 线映射、代码/参数白名单、统一数据状态和错误脱敏;新增 Vue 详情路由、Axios API、事实摘要、轻量 SVG K 线和响应式布局;概览指数与板块入口已接通真实导航;OpenAPI 和前端生成契约已同步。
## 修复缺陷
实现期间修复了板块目录记录字段与内部定义字段名不一致导致详情不可用的问题;修复了前端详情页在接口异步完成前测试读取旧加载状态的问题;修复了 Web 严格类型下可空涨跌幅的显示类型错误;补充了详情模块注册到 OpenAPI 导出入口,避免契约遗漏。
## 未完成与延期项
分时数据延期,等待 TDX 提供可验证协议;成分股排名、资金净流入、盘中新闻、AI 结论、数据库/Redis/RocketMQ 持久化和公网采集代理另立功能。当前详情页仍依赖开发机 TDX 隧道,不作为公网生产采集方案。
## 关键提交
`0131f86 feat(FEAT-MO-004): 实现指数板块详情分析页`,已推送项目 Gitea 分支 `codex/feat-mo-004-index-sector-detail`。
## 验证证据
TDX 脱敏能力报告记录日 K 线和一级行业目录通过、分时候选失败;GitNexus 开发前风险为 MEDIUM,开发后检测到预期 API 模块注册、OpenAPI、路由和概览导航影响;自动化、构建、视觉和移动端证据见 `test-plan.md`、`qa/test-results.md`、`qa/visual-qa.md`。
@@ -0,0 +1,24 @@
# GitNexus 开发后基线
## GitNexus 状态
```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis
Indexed: 8/25/2026, 12:26:06 AM
Indexed commit: 40a2454
Current commit: 40a2454
Status: ✅ up-to-date
```
## Git 已跟踪变更摘要
```text
实现提交 `0131f86` 与治理提交 `50b6318` 已完成,当前工作区仅保留用户未纳入本功能的 CSV 文件。
5 files changed, 11 insertions(+), 6 deletions(-)
```
## Git 工作区摘要
```text
?? 用户未纳入本功能的 `SRMS3.6.0常见问题测评题.2csv`
```
@@ -0,0 +1,28 @@
# GitNexus 开发前基线
- 功能编号:FEAT-MO-004
- 记录时间:2026年8月24日 GMT+8 23:37:42
- 分支:main
- 基线提交:f8f4da93dc8f
## 工作区
```text
?? "SRMS3.6.0\345\270\270\350\247\201\351\227\256\351\242\230\346\265\213\350\257\204\351\242\230.2csv"
?? docs/features/FEAT-MO-004-index-sector-detail/
?? docs/superpowers/plans/2026-08-24-index-sector-detail.md
```
## GitNexus 状态
```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis
Indexed: 8/24/2026, 11:37:41 PM
Indexed commit: f8f4da9
Current commit: f8f4da9
Status: ✅ up-to-date
```
## 后续人工分析
在修改代码前,将 GitNexus query、context、impact 的结论写入 `gitnexus/impact-plan.md`。高风险结果必须先获得用户确认。
@@ -0,0 +1,11 @@
# GitNexus 前后对比
| 指标 | 开发前 | 开发后 |
| --- | ---: | ---: |
| 索引提交 | `f8f4da9` | `0131f86`及收尾文档提交 |
| 节点 | 3506 | 3786 |
| 关系 | 4983 | 5466 |
| 执行流 | 104 | 115 |
| 变更风险 | 开发前 `MarketOverviewService` MEDIUM,其余 LOW | `detect_changes` MEDIUM,影响为预期模块注册/路由/契约 |
执行流数量变化来自详情 Controller/Service、Mapper、页面和测试被 GitNexus 纳入索引;收尾后的 3 个 mapper 流程是 lint 修复后的预期细化,没有发现跨基础设施的意外扩散。完整状态保存在 `before.md` 与 `after.md`。
@@ -0,0 +1,18 @@
# GitNexus 开发后变更检测
- 执行:`gitnexus_detect_changes(scope=all)`(实现提交前与文档收尾后各执行一次)
- 实现提交前结果:`risk_level=medium`,实现变更落在 API 模块注册、OpenAPI 导出、路由和概览导航,受影响执行流 2 个。
- 收尾后结果:`risk_level=medium`,5 个收尾变更文件、3 个 `mapDetailQuote` 相关执行流,均为预期的注释/文档和 lint 修复。
## 预期变更
- API:`MarketOverviewModule.register` 注册详情 Controller/Service;OpenAPI 导出接入详情 Controller/Service。
- Web:新增详情路由;概览页指数/板块入口改为真实导航。
- 文档:功能档案和 GitNexus 统计更新。
## 受影响执行流
- `RunApi → CreateTdxClient`:模块注册步骤变化,已有 API 启动和详情 E2E 已覆盖。
- `RunApi → CreateAktoolsClient`:模块注册步骤变化,已有短线和进程烟测已覆盖。
未发现数据库、Redis、RocketMQ、Scheduler、Worker 或部署文件的非预期变更;两次检测均未出现 HIGH/CRITICAL。
@@ -0,0 +1,37 @@
# GitNexus 开发前影响计划
- 功能编号:FEAT-MO-004
- 总体风险:MEDIUM(既有概览服务扩展会触及 Controller、模块、服务测试和 OpenAPI 导出;无 HIGH/CRITICAL)
## 直接与间接影响
### 查询与上下文
- GitNexus 仓库:`a-share-analysis`,开发前索引与 `f8f4da9` 一致且 up-to-date。
- 影响目标:`MarketOverviewController`、`MarketOverviewService`、`createTdxClient`、`createAppRouter`。
- `MarketOverviewController` upstream:3 个直接文件消费者(概览 E2E、OpenAPI 导出、模块注册),总影响 7 个文件,风险 LOW。
- `MarketOverviewService` upstream:5 个直接文件消费者(概览 E2E、服务测试、OpenAPI 导出、Controller、模块),总影响 9 个文件,风险 MEDIUM。
- `createTdxClient` upstream:TDX Client 单元测试 1 个直接消费者,风险 LOW;详情复用其稳定 `request<T>()` 边界,不修改协议实现。
- `createAppRouter` upstream:`App.test.ts` 1 个直接消费者,风险 LOW;新增路由需要补充路由测试和根路径回归。
- `MarketOverviewPage` 未被索引为符号,按文件级人工检查确认只消费概览 composable 和两个选择事件;新增导航不改变概览请求契约。
- 执行流:详情是新增只读 HTTP 流程;既有首页五个概览流程仅通过模块注册和共享 TDX Client 间接关联,需回归验证。
## 跨模块同步修改
| 范围 | 判断 | 同步动作 |
| --- | --- | --- |
| HTTP/OpenAPI | 需要 | 新增两个详情路由、DTO、生成 OpenAPI 并校验 |
| Web API | 需要 | 新增详情 Axios 文件与类型适配 |
| 消息契约 | 不需要 | 只读同步请求,不产生消息 |
| 数据库/Redis | 不需要 | 不持久化、不缓存,且不触碰生产库 |
| API 进程 | 需要 | 注册详情 Controller/Service,复用已校验 TDX Client |
| Scheduler/Worker | 不需要 | 无异步任务或定时采集 |
| 配置/部署 | 不需要 | 继续使用现有 TDX 配置和内网隧道,不新增环境变量 |
| 测试 | 需要 | Mapper、Service、HTTP、Web 路由/状态、视觉和全量门禁 |
| 文档 | 需要 | 功能档案、TDX 探测、开发总结、Review、QA、GitNexus 前后对比 |
### 设计决策
1. 不扩展首页接口大对象,详情接口独立,降低既有消费者的契约风险。
2. 不修改 `createTdxClient`,只复用其超时、响应体上限和错误脱敏;分时能力未验证时明确返回不可用。
3. 指数和板块共享页面外壳与 K 线点类型,但保留各自白名单和业务摘要映射。
@@ -0,0 +1,6 @@
# FEAT-MO-004 实施记录
详细实施计划见 [`docs/superpowers/plans/2026-08-24-index-sector-detail.md`](../../../superpowers/plans/2026-08-24-index-sector-detail.md)。
执行顺序:开发前 Schema/GitNexus 门禁 → TDX 能力探测 → Mapper → Service/Controller → Web 路由和详情页 → 契约、测试、视觉验证、Review 和治理收尾。
@@ -0,0 +1,8 @@
featureId: FEAT-MO-004
slug: index-sector-detail
name: 指数与板块详情分析页
status: in_review
release: unreleased
source: tdx
scope: internal_lan_only
createdAt: 2026-08-24
@@ -0,0 +1,29 @@
# FEAT-MO-004 指数与板块详情分析页 PRD
## 原始需求
市场综合概览中的指数、板块可点击进入详细分析页,支持使用 TDX 真实数据进行复盘查看。
## 用户与场景
- 个人用户在概览页发现指数或强势板块后,进入详情确认交易日期、价格变化和 K 线走势。
- 内网开发环境优先,TDX 通过当前 Mac 本机隧道访问;不把 TDX 暴露到公网。
## V1 范围
- 指数详情和一级行业板块详情。
- 共享详情页外壳、数据状态、更新时间、来源、警告和 K 线图。
- 分时视图由 TDX 能力探测结果决定,未通过时明确不可用。
- 事实型数据和规则计算结果,不提供买卖建议、目标价、仓位建议或交易操作。
## 非目标
成分股排名、主力净流入、盘中新闻、AI 结论、用户体系、订阅付费和数据库/Redis/RocketMQ 持久化均不在本版本。
## 验收标准
1. 点击概览中的指数或板块可进入对应详情 URL,非法代码不触发 TDX 请求。
2. API 返回 `instrument`、`quote`、`series`、`availableViews` 和统一元数据,K 线不超过 120 点。
3. TDX 不可达、交易日延迟、字段缺失和空序列分别显示明确状态,不伪造图表。
4. Web 显示上海时间,桌面和 390px 视口无横向溢出,图表容器尺寸稳定。
@@ -0,0 +1,14 @@
# FEAT-MO-004 QA 测试结果
## 1. 自动化门禁
`pnpm verify` 已通过运行时、契约、边界、部署、Schema、Web 34 测试、Server 94 测试、typecheck、构建和格式检查。Lint 仅保留仓库既有 Vue 规则 warning,无 error。
## 2. API 与真实 TDX
真实开发 API 已加载新详情路由;指数详情返回 TDX 真实收盘价、交易日期和 120 个 K 线点,板块详情先读一级行业目录再读取 K 线。历史交易日被标记为 `delayed`,不被当作当日实时。
## 3. 残余风险
TDX 分时协议仍不可用;当前测试未证明公网网络、生产容量或长时间隧道稳定性。详情功能保持内网开发范围。
@@ -0,0 +1,14 @@
# FEAT-MO-004 视觉 QA
## 1. 桌面视口
在 1440x900 浏览器中,详情页标题、来源、更新时间、交易日、状态、核心行情、K 线、分时边界和事实摘要均可见;SVG 图表有真实非空路径,详情内容宽度 1400px,文档宽度等于视口 1440px。
## 2. 移动视口
在 390x844 浏览器中,详情页折叠为单列核心行情,图表容器保持稳定,`innerWidth=390`、`scrollWidth=390`、`body.scrollWidth=390`,无横向溢出;标题和状态文字未互相遮挡。
## 3. 交互验收
概览页指数按钮导航到 `/market-overview/indices/000001.SH`,板块按钮导航到 `/market-overview/sectors/881001.SH`;返回概览按钮可用;TDX 不可用和分时不可用状态均展示明确文案,不显示伪造图表。
@@ -0,0 +1,16 @@
# FEAT-MO-004 发布说明
## 当前状态
未发布,功能分支已完成实现和 Review,等待合并决策。
## 用户可见变化
- 综合概览的核心指数和一级行业按钮可进入详情页。
- 详情页展示 TDX 来源、上海时间、交易日期、状态、最新收盘价、涨跌幅和 K 线。
- TDX 分时能力未验证时显示明确不可用边界。
## 部署边界
仅适用于当前内网开发隧道;不改变数据库结构,不启用 Redis/RocketMQ,不暴露 TDX 到公网。
@@ -0,0 +1,23 @@
# FEAT-MO-004 需求与约束
## 功能需求
- FR-001:提供指数详情 HTTP API。
- FR-002:提供一级行业板块详情 HTTP API。
- FR-003:详情 API 只接受登记代码、`period=1d` 和 `1..120` 的 `count`。
- FR-004:详情响应包含 K 线序列、报价、交易日期、状态、来源和警告。
- FR-005:概览指数和板块按钮导航到详情页,详情页可返回概览。
- FR-006:分时仅在 TDX 探测通过后启用,未启用时返回 `intraday=false`。
## 非功能需求
- NFR-001:TDX 原始异常和地址不得暴露给 Web。
- NFR-002:本机 TDX 可达时详情首屏 P95 目标小于 2 秒;不可达时 10 秒内返回不可用状态。
- NFR-003:详情请求失败不影响首页五个概览模块。
- NFR-004:API `asOf` 使用 UTC ISO,Web 使用 `Asia/Shanghai` 展示。
- NFR-005:前端请求只能经过 Axios 封装,后端 DTO 作为 OpenAPI 契约来源。
## 约束判断
消息、数据库、Redis、Scheduler、Worker 和部署配置无需同步修改;详情为只读实时查询,不产生异步任务或持久化数据。OpenAPI、Web API、前端路由、测试和文档需要同步更新。
@@ -0,0 +1,20 @@
# FEAT-MO-004 代码 Review
## 安全与残余风险
通过。Controller 和 Service 双层限制代码、周期和数量;TDX 方法名、地址、原始错误和业务字段不直接暴露给 Web;响应体点数固定不超过 120。残余风险为 TDX 隧道依赖和分时能力缺失,已在 API 状态和文档中显式呈现。
## 性能与资源影响
通过。详情按单代码读取,不引入数据库、Redis、RocketMQ 或异步任务;K 线数量和 SVG viewBox 固定,页面无定时刷新和大对象缓存。真实开发探测耗时约 47-56ms;生产容量仍未证明。
## GitNexus 与同步修改
通过。开发前 `MarketOverviewService` 影响为 MEDIUM,其余入口 LOW;开发后 `detect_changes` 仅报告 API 模块注册、OpenAPI 导出、前端路由和概览导航的预期变更,RunApi 两条启动流程已回归测试。HTTP/OpenAPI、Web API、测试和文档同步;消息、数据库、Redis、Scheduler、Worker、部署无需同步。
## 发现与处置
未发现阻断问题。已修复板块目录字段映射、前端异步状态测试和可空涨跌幅类型问题。
最终结论:passed
@@ -0,0 +1,16 @@
# FEAT-MO-004 开发规范符合性 Review
## 安全、性能与架构检查
通过。后端按市场概览业务模块内的 detail 职责组织 DTO、Mapper、Service、Controller;前端 API 独立文件并统一经过 Axios request;关键边界有中文注释;未过度抽取工具类;未新增不必要依赖;没有密钥、密码、生产数据或 Docker 变更。
## GitNexus 与开发总结检查
通过。功能开发前执行 Schema baseline/verify、governance:start、GitNexus impact 和 TDX 脱敏探测;开发后刷新 GitNexus、执行 detect_changes、保存前后报告;开发总结明确原始需求、范围变化、实际完成、修复缺陷、延期项、关键提交和验证证据。
## 版本控制与发布检查
通过。提交使用中文 Conventional Commit `feat(FEAT-MO-004): 实现指数板块详情分析页`,已推送项目级 Gitea 功能分支;未修改全局 Git 配置;回退无需数据库数据回滚。
最终结论:passed

Some files were not shown because too many files have changed in this diff Show More