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
198 changed files with 9685 additions and 106 deletions
+1 -1
View File
@@ -29,7 +29,7 @@
<!-- gitnexus:start -->
# GitNexus — Code Intelligence
This project is indexed by GitNexus as **a-share-analysis** (2432 symbols, 3283 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.
+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>
+4
View File
@@ -6,6 +6,10 @@ 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
+4
View File
@@ -5,6 +5,10 @@ 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 上游限流、字段变更、数据授权和长期稳定性需要在后续联调与生产评估中持续验证。
@@ -31,6 +31,7 @@
- 根据二次 Review 继续修复涨跌家数接受非整数、成交额受市场定义顺序影响、指数/板块跨交易日混排和后端从不生成 `delayed` 的边界;宽度增加核心指数日期参考,不新增基础设施或第三方依赖。
- 根据第三轮独立 Review 修复 8 位畸形日期被误认为有效公历日期、成交额接受倒序日期对与日期/金额数组错位,以及服务测试依赖运行当天的问题。
- 根据第四轮独立 Review 修复指数/板块未校验前一根 K 线日期的问题;非法、重复或倒序的前一日期不再生成涨跌信号。
- 修复首屏更新时间直接展示 UTC ISO 字符串的问题:保留 API 的标准 UTC `asOf` 契约,Web 统一按 `Asia/Shanghai` 展示完整日期时间和时分秒。
## 未完成与延期项
@@ -40,7 +41,7 @@
## 关键提交
- `9a965fa`、`d283ee3`、`6eb34b5`、`c2fa929`、`15a2500`、`27bc3c1`、`8261948`、`ff8ada8`、`49f6be9`、`7e4dcd9`、`ae2a7e0`、`c2fdfa6`
- `9a965fa`、`d283ee3`、`6eb34b5`、`c2fa929`、`15a2500`、`27bc3c1`、`8261948`、`ff8ada8`、`49f6be9`、`7e4dcd9`、`ae2a7e0`、`c2fdfa6`、`b1310fb fix(FEAT-MO-001): 修正概览时间时区显示`
## 验证证据
@@ -53,3 +54,4 @@
- 浏览器桌面与 390px 移动视口验证无横向溢出,视角与引擎切换可用。
- 五轮独立 Review 均已归档:前四轮发现的数据完整性、状态、日期真实性/顺序、测试时钟和前一根日期校验问题均已关闭;第五轮最终结论为 `Ready to merge: Yes`,无 Critical、Important 或 Minor 问题。
- 开发 Schema 按用户确认跳过,沿用 `v0.0.10 captured_empty` 追溯边界,不读取生产库。
- 本轮前端日期工具测试覆盖 UTC 到上海时区转换、无效值占位和两个概览组件接线;未修改后端、OpenAPI、数据库或消息契约。
@@ -17,3 +17,9 @@ npx gitnexus detect-changes --repo "$PWD" --scope staged
## 处置
本轮 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,7 +2,7 @@
## 自动化结果
- 前端 Vitest:8 个文件、20 个测试通过。
- 前端 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`:通过。
@@ -17,3 +17,4 @@
- 第三轮 Review 修复后,非法月份/日期、倒序日期对和日期/金额数组错位均被映射层排除;服务测试统一冻结时钟,不依赖执行当天。
- 第四轮 Review 修复后,指数前一根非法、重复或倒序日期不再生成涨跌幅,板块对应记录不进入强弱排序。
- 桌面默认视口与 390px 移动视口无横向溢出;视角和引擎切换可用。
- 浏览器实测确认结论区显示 `2026-08-24 22:59:55`、指数卡片显示 `22:59:27`,不再显示 UTC 的 `14:59` 时间;桌面和移动视口均无横向溢出。
@@ -84,3 +84,14 @@
- 验证:指数非法、重复、倒序前一日期参数化用例和板块过滤用例齐全;后端 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
@@ -25,5 +25,6 @@
- 第三轮 Review 的日期真实性、先后顺序、数组对齐和测试时钟问题已按 TDD 修复;需求、设计、测试计划、测试结果、发布说明和开发总结已同步。
- 第四轮 Review 的前一根日期校验问题已按 TDD 修复;治理结论继续保持 `pending`,等待本次代码修复再次独立确认。
- 第五轮最终独立 Review 无 Critical、Important 或 Minor 问题并给出 `Ready to merge: Yes`;中文提交、Gitea 推送、GitNexus、完整门禁和视觉证据均已复核。
- 第六轮显示修复保持后端 UTC 契约、前端 Axios 边界和业务模块职责不变;新增工具有真实重复场景和独立测试依据,无新增依赖,安全、性能、类型、构建和 E2E 证据齐全。
最终结论:passed
@@ -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
@@ -0,0 +1,6 @@
# FEAT-MO-004 回退说明
详情功能为无数据库结构变更的只读模块。若发布后出现问题,先回退前端详情路由和概览导航,再回退后端详情 Controller/Service 注册;首页已有五个概览接口不依赖详情模块。回退不执行生产数据库操作、不删除 TDX 配置、不修改用户数据。
回退验证包括:`GET /api/v1/market-overview/indices`、`sectors` 仍返回 200;Web 根路径可加载;OpenAPI 与生成契约重新生成并通过边界测试。
@@ -0,0 +1,29 @@
# FEAT-MO-004 TDX 能力探测报告
- 探测日期:2026-08-24(开发环境)
- 数据源:TDX 开发隧道(地址和请求体按安全规则不记录)
- 探测方式:只读 JSON-RPC 请求,输出仅保留状态码、耗时、字段名和脱敏代码。
## 已通过能力
| 能力 | 方法 | 结果 | 观测 |
| --- | --- | --- | --- |
| 指数日 K 线 | `get_market_data` | 通过 | HTTP 200,业务 `ErrorId=0`,返回 `Value` 及分页元数据;两条核心指数请求耗时约 56ms |
| 一级行业目录 | `get_stock_list` | 通过 | HTTP 200,业务 `ErrorId=0`,返回数组,首个脱敏记录代码为 `881001.SH` |
| 一级行业日 K 线 | `get_market_data` | 通过 | 对目录首个代码请求 5 条日线,HTTP 200,业务 `ErrorId=0`,返回对应 `Value`;耗时约 47ms |
## 未通过能力
| 能力 | 候选方法 | 结果 | 处理 |
| --- | --- | --- | --- |
| 分时 | `get_minute_data` | 未通过 | 服务返回协议错误,未暴露原始错误内容;V1 返回 `availableViews.intraday=false` |
| 分时 | `get_minute_data_ex` | 未通过 | 服务返回协议错误;不继续猜测参数或伪造分时序列 |
| 历史分时 | `get_history_minute_data` | 未通过 | 服务返回协议错误;延期到独立能力验证 |
## 安全和稳定性结论
- 所有探测均为固定只读方法,未调用交易、账户、自选或写入接口。
- 日 K 线字段沿用已验证的 `Date/Open/High/Low/Close/Amount/Volume`;详情服务仍会二次校验字段长度、日期和数量上限。
- 真实响应只用于能力判断,不作为提交到仓库的原始样本;报告不包含地址、请求体、凭据或原始异常。
- 本次观测不代表生产容量证明;详情页仍按单请求最多 120 点和现有 TDX 超时配置执行。
@@ -0,0 +1,25 @@
# FEAT-MO-004 测试计划与结果
## 测试范围
- Mapper:日期排序、非法行过滤、数量上限、缺失成交字段和涨跌幅计算。
- Service:指数/板块成功、目录校验、延迟、部分数据、不可用和超时脱敏。
- HTTP:两个详情路由、代码格式、周期和数量参数、OpenAPI 响应结构。
- Web:Axios API 路径、路由加载、上海时间、空/错误/延迟状态、K 线 SVG 和移动端布局。
## 安全验证
已验证非法代码不会触发 TDX;`count` 只接受 1-120;页面和 HTTP 响应不包含 `ErrorId`、TDX 地址或原始异常;分时协议未通过时 `intraday=false`。未执行交易、账户、自选或写入接口。
## 性能验证
详情服务固定最多 120 个 K 线点,真实开发 TDX 日 K 线请求观测约 47-56ms;SVG 图表固定 `viewBox=0 0 720 260`,390px 视口 `documentElement.scrollWidth=390`,无横向溢出。该证据仅代表本机开发环境,不代表生产容量。
## 自动化结果
- Web:12 个测试文件、34 个测试通过。
- Server:18 个测试文件、94 个测试通过。
- 根级治理、契约、边界、部署和 Schema 测试全部通过。
- Playwright:桌面/移动应用冒烟和 API 健康契约共 4 个测试通过。
- Web/Server typecheck、生产构建和 Prettier 检查通过;lint 无 error,保留既有 Vue 格式 warning。
@@ -0,0 +1,25 @@
# FEAT-MO-005 数据源能力探针
## 结论
收盘后于 2026-08-25(Asia/Shanghai)执行两次本机只读探测。TDX 三市场日线可用,`Date` 与 `Amount` 均等长;1/5/15 分钟请求业务成功但序列为空。AKTools 五个候选中,市场资金流曾可用一次、随后 HTTP 500,归类为 `partial`;其余候选为 HTTP 500 或超时,归类为 `unavailable`。
两次均在非交易时段,最后一条记录仅为收盘后最后记录,不能推断盘中新鲜度。交易时段观测尚未执行,不能将任一来源标为实时。
## 脱敏能力表
| 来源/接口 | 分类 | 两次收盘后摘要 | 字段与时间结论 |
| --- | --- | --- | --- |
| TDX `get_market_data`,三市场 `1d` | `usable` | 30 行;63-148ms | `Date`/`Amount` 对齐;首末日期为 20260714/20260824;非分时。 |
| TDX `get_market_data`,三市场 `1m`/`5m`/`15m` | `partial` | 0 行;63-193ms | 无时间序列,不能形成盘中成交额趋势。 |
| AKTools `stock_board_industry_spot_em` | `unavailable` | HTTP 500;约 5.2-5.5 秒 | 未取得字段或时间。 |
| AKTools `stock_board_concept_spot_em` | `unavailable` | 10 秒 timeout | 未取得字段或时间。 |
| AKTools `stock_sector_fund_flow_rank` | `unavailable` | HTTP 500;117-144ms | 未取得字段或时间。 |
| AKTools `stock_market_fund_flow` | `partial` | 第一次 120 行/172ms,第二次 HTTP 500/130ms | 可用时含日期和各档净流入净额/净占比;不可作为稳定排行源。 |
| AKTools `stock_zh_a_spot_em` | `unavailable` | HTTP 500;约 5.6-5.9 秒 | 未取得字段或时间。 |
未保存原始行、请求体、凭据、上游错误内容或非本机地址。HTTP 500 与 timeout 作为不同短错误类别记录。
## 后续准入
Tasks 2-4 只能按 `design.md` 中的映射实现明确的不可用/部分可用降级;不得接入行业、题材、板块排行或盘中成交额趋势。交易时段需要至少一次复测,以验证最后时间与实际时段的新鲜度。
@@ -0,0 +1,27 @@
# FEAT-MO-005 设计说明
## 方案
探针固定请求五个 AKTools 候选和 TDX `get_market_data` 的三只指数、四种周期。输出仅允许状态、耗时、行数、字段名、首末时间与短错误类别;原始行、请求体、凭据和非本机 URL 不记录。
后续结构模块以 TDX 日线的 `Date`、`Amount` 作为全市场日度成交额快照依据。分钟周期为空时,成交额趋势不得伪装为盘中分时;行业、题材与排行资金流接口未通过时,API 只返回不可用状态。
## 字段定义与来源映射
| 指标 | 字段口径 | 映射结论 |
| --- | --- | --- |
| 全市场日度成交额 | 三市场同交易日 `Amount` 相加,TDX 单位万元转亿元 | 已验证快照派生(TDX 主来源) |
| 全市场盘中成交额趋势 | `Date` 与 `Amount` 对齐的 1/5/15 分钟序列 | 延期为不可用,当前分钟序列为空 |
| 行业、题材、板块排行 | 上游可证明的名称、涨跌幅、成交额字段 | 延期为不可用,候选接口失败 |
| 行业、题材、板块资金流排行 | 上游明确的净流入字段和定义 | 延期为不可用,排行接口失败 |
| 全市场资金流历史 | AKTools `主力/超大/大/中/小单净流入-净额` 等明示字段 | AKTools 补充源,当前为 `partial`,不能用于排行 |
## 安全策略与评估
资产为本机桥接可返回的行情、配置中的 TDX 地址和任何凭据。信任边界位于 Node 探针与本机回环服务之间:参数被固定白名单限制,URL 仅接受 `127.0.0.1` 固定端口,10 秒超时和 2 MiB 响应上限限制上游异常。输出仅为脱敏摘要,错误不包含上游响应。认证、授权、SQL、XSS、CSRF 与 CORS 不适用于该无 HTTP 入站、无持久化、无浏览器页面的本地 CLI;其边界是后续 Nest API 必须重新验证。
残余风险是本机桥接和免费上游不稳定,且未验证盘中延迟、授权和再分发要求;任何生产接入前必须单独审查。
## 性能目标与评估
单次探针固定为 17 个请求,单请求上限 10 秒、响应上限 2 MiB,不保存载荷。收盘后两次观测中 TDX 单请求为 63-193ms,AKTools 出现 117ms 至 10,004ms 的失败/超时,故不把本地观测视为容量结论;本低频开发工具不做负载测试。
@@ -0,0 +1,52 @@
# FEAT-MO-005 开发总结
- 功能编号:FEAT-MO-005
- 日期:2026-08-25
- 发布状态:未发布,当前分支已推送 Gitea
## 原始开发需求
综合概览需要覆盖全部板块、题材和行业的涨跌幅排行、资金流入/流出排行,以及全天成交额趋势图;用户可点击进入详细分析,分时 K 线不作为本轮首页重点。
## 需求与范围变化
- 根据数据源探针结果,行业/题材/资金流保留固定 AKTools 适配,但当前不可用时必须保守降级。
- 独立 API 继续按模块拆分,没有把整个首屏合并成一个聚合接口。
- 板块分类未验证独立上游端点,因此保留切换入口但返回 `unavailable`。
- 没有引入数据库、Redis、RocketMQ、AI 或用户体系。
## 实际完成需求
| 需求 | 状态 | 结果 |
| --- | --- | --- |
| 行业/题材/板块强弱排行 | 已完成 | 新增 `SectorRankingPanel`,支持分类、涨跌/成交额排序和详情事件。 |
| 资金流向排行 | 已完成 | 新增 `CapitalFlowPanel`,只展示上游明示净额,缺失值显示未提供。 |
| 全天成交额趋势 | 已完成 | 新增 `TurnoverTrendPanel`,支持累计亿元和 SVG 趋势线。 |
| 前端分类真实刷新 | 已完成 | composable 分类切换会重新请求对应 API。 |
| 既有模块兼容 | 已完成 | 指数、宽度、板块概览、量能和短线情绪均保留。 |
## 修复缺陷
E2E 首次运行发现 `MarketStructureController` 未使用显式 Nest 服务注入,三个新路由因此返回 400。已增加 `@Inject(MarketStructureService)`,服务端回归测试和 E2E 均通过。
## 未完成与延期项
AKTools 交易时段实时性、行业/题材/资金流生产稳定性和独立板块数据源仍待验证;本轮不承诺实时生产数据。详情页 K 线和 AI 分析不在本功能范围。
## 关键提交
| 提交 | 内容 | 推送 |
| --- | --- | --- |
| `50b5266`..`b6a9f40` | 数据源探针、领域映射和契约 | 已推送 |
| `8174f3f`..`ad40fff` | 三路结构与成交额 API | 已推送 |
| `b95b9e5` | Web 数据层 | 已推送 |
| `64a9f2e` | 首屏面板、响应式样式、注入修复 | 已推送 |
## 验证证据
- Web:14 个 Vitest 文件、39 个测试;类型检查通过。
- Server:21 个 Vitest 文件、110 个测试及 Node 冒烟通过。
- 根级 lint、Prettier、typecheck、test、build 通过;lint 仅有既有 Vue 风格 warning,无 error。
- Playwright:桌面和 390px 移动视口共 4 项通过,无横向溢出和运行时错误。
- 1440px/390px 截图已检查;AKTools 不可用状态展示符合降级设计。
- GitNexus 提交前检测:中风险,10 文件/47 符号/1 条刷新流程,已完成回归覆盖。
@@ -0,0 +1,23 @@
# GitNexus 开发后基线
## GitNexus 状态
```text
Repository: /Users/citrons/Documents/Codex/2026-08-12/wo-x/a-share-analysis
Indexed: 8/25/2026, 2:38:36 AM
Indexed commit: 21393ef
Current commit: 21393ef
Status: ✅ up-to-date
```
## Git 已跟踪变更摘要
```text
(没有未提交差异)
```
## Git 工作区摘要
```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"
```
@@ -0,0 +1,26 @@
# GitNexus 开发前基线
- 功能编号:FEAT-MO-005
- 记录时间:2026年8月25日 GMT+8 01:15:39
- 分支:codex/feat-mo-005-market-structure-turnover
- 基线提交:4f5a56df3a71
## 工作区
```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/25/2026, 1:15:38 AM
Indexed commit: 4f5a56d
Current commit: 4f5a56d
Status: ✅ up-to-date
```
## 后续人工分析
在修改代码前,将 GitNexus query、context、impact 的结论写入 `gitnexus/impact-plan.md`。高风险结果必须先获得用户确认。
@@ -0,0 +1,12 @@
# GitNexus 前后对比
| 项目 | 开发前 | 开发后 | 判断 |
| --- | --- | --- | --- |
| 索引节点 | 4f5a56d 基线 | 4,210 nodes | 新增结构领域和前端组件已纳入索引 |
| 关系/流程 | 5,473 relationships / 115 flows | 6,274 edges / 147 flows | 新增组件调用与 API 流程,未改变既有核心数据源流程 |
| 提交影响 | 无本功能代码 | 10 文件、47 符号、1 条刷新流程 | 中风险,测试已覆盖 |
| 生产边界 | 无数据库/消息改动 | 仍无数据库、Redis、RocketMQ、部署改动 | 保持边界 |
## 残余风险
GitNexus 只描述静态关系,不能证明 AKTools 交易时段新鲜度;该项由数据源探针和后续生产观测负责。
@@ -0,0 +1,13 @@
# GitNexus 提交前变更检测
```text
命令:npx gitnexus detect-changes --scope staged --repo a-share-analysis
结果:10 files, 47 symbols
Affected processes: 1
Risk level: medium
流程:Refresh → LoadModule(新增 refreshSectorRankings/refreshCapitalFlow)
```
## 结论
变更集中在市场概览页面、composable、结构面板和一个控制器注入修复;没有数据库、消息、缓存、部署或生产配置变更。中风险来自刷新执行流扩展,已由 composable 单测、服务端测试和 Playwright 覆盖。
@@ -0,0 +1,36 @@
# GitNexus 开发前影响计划
- 功能编号:FEAT-MO-005
- 总体风险:中。新增结构边界本身独立,但共享响应 DTO 有 24 个上游影响项,必须保持旧接口字段和 `source=tdx` 行为兼容。
## 直接与间接影响
### `MarketOverviewMetaDto`(MEDIUM)
- 直接影响 12 项:现有 summary、indices、breadth、sectors、funds 响应 DTO,TDX mapper、详情 DTO/mapper、controller 和 service。
- 间接影响 12 项:概览和详情 e2e、OpenAPI 导出、模块注册及相关测试。
- 决策:新增数据源联合类型时只扩展 `source` 的允许值,不改变既有 TDX 响应结构;所有旧测试必须继续通过。
### `MarketOverviewService`(MEDIUM)
- 直接影响 7 项:概览 e2e、服务测试、OpenAPI 导出、模块/controller 和详情服务引用。
- 间接影响 6 项:API 入口和进程冒烟测试。
- 决策:新结构服务独立注入,不重写现有 `MarketOverviewService` 的业务流程;仅在模块注册层增加 provider/controller。
### `createAktoolsClient`(LOW)
- 直接影响 1 项:现有 AKTools client 测试。
- 决策:不扩展短线 client 的固定端点,新增 `AktoolsStructureClient`,避免行业/资金接口与短线情绪接口耦合。
GitNexus `query("市场概览 板块排行 资金流入流出 成交额趋势 TDX AKTools")` 定位到现有概览流程、TDX mapper 和 AKTools 模块;本任务后续只新增 structure 领域文件,不改变已验证的短线流程。
## 跨模块同步修改
| 范围 | 判断 | 说明 |
| --- | --- | --- |
| HTTP/OpenAPI | 需要 | Tasks 3–5 新增三个独立只读路由,Task 6 重新生成契约 |
| Web API/前端 | 需要 | Task 6 添加 Axios API 和 composable 状态,Task 7 添加面板 |
| 消息契约、数据库、Redis、Scheduler、Worker | 不需要 | 本切片只读请求,无持久化、缓存和异步任务 |
| API 模块注册 | 需要 | `market-overview.module.ts` 增加结构 controller/provider |
| 配置部署 | 不需要 | 复用已存在的本机 TDX/AKTools 配置,不新增凭据或地址 |
| 测试与文档 | 需要 | 新增 mapper/service/API/UI/E2E 测试和完整功能档案 |
@@ -0,0 +1,22 @@
# FEAT-MO-005 实施计划
## 目标
在综合概览保留现有指数、市场宽度、板块概览、量能和短线情绪的基础上,增加行业/题材/板块排行、资金流向和全天成交额趋势,并让每个模块独立处理 `fresh`、`delayed`、`partial`、`unavailable`。
## 已执行步骤
1. 完成 TDX/AKTools 能力探针和脱敏记录。
2. 建立市场结构领域类型、映射和 AKTools 固定端点客户端。
3. 增加三个独立 Nest API 路由并生成 OpenAPI 契约。
4. 接入 Web Axios API 分域和 composable 独立状态。
5. 实现三个 Vue 面板、分类切换、轻量 SVG 趋势图和响应式样式。
6. 完成服务端注入回归、组件测试、全量构建、E2E 和视觉检查。
## 约束与回退
不新增数据库、Redis、RocketMQ 或异步任务;不保存原始行情载荷;AKTools 未启用时页面展示不可用状态。若上游字段口径不明确,保持 `null`/`unavailable`,禁止从涨跌或成交额推导资金流。
## 安全策略与性能目标
复用既有服务端来源白名单、Axios 边界和脱敏错误。前端仅消费 Nest API,不接触 TDX/AKTools 地址或凭据。列表请求限制为 Top 100,排序和 SVG 点计算为线性复杂度,组件不引入新运行时依赖。剩余风险是免费上游在交易时段的稳定性和延迟尚未完成生产级验证。
@@ -0,0 +1,10 @@
featureId: FEAT-MO-005
slug: market-structure-turnover
name: 市场结构与成交额趋势
status: in_development
release: unreleased
scope: local_development_probe
createdAt: 2026-08-25
sources:
tdx: local_loopback_primary
aktools: local_loopback_supplement
@@ -0,0 +1,16 @@
# FEAT-MO-005 产品需求
## 目标
为市场概览补充行业、题材、板块强弱排行,明确口径的资金流向,以及全市场成交额趋势;每个模块独立显示来源、交易日期与可用状态。
## 用户价值与验收
- 用户可在一个页面比较行业、题材、板块的涨跌幅和成交额,缺失字段不以零填充。
- 资金流向只展示上游明确提供的净流入字段及其定义,禁止由涨跌或成交额推导。
- 成交额统一为亿元,盘中新鲜度和收盘后最后记录分别表达。
- 上游失败时保留已验证数据或显示 `partial`/`unavailable`,不提供离线样本。
## 范围边界
本功能只读取本机 TDX 与 AKTools 桥接服务;不连接生产环境、不写数据库、不调用交易、账户或自选接口。上游授权、稳定性和再分发权未验证前,不作为生产数据源承诺。
@@ -0,0 +1,18 @@
# FEAT-MO-005 测试结果
## 自动化结果
- `pnpm lint`:通过,0 error;仓库既有 Vue 风格 warning 未扩大为错误。
- `pnpm format:check`:通过。
- `pnpm typecheck`:Web/Server 均通过。
- `pnpm test`:治理、契约、边界、部署、Web、Server 全部通过;Web 39 tests,Server 110 tests。
- `pnpm build`:Web Vite 和 Server API/Scheduler/Worker 构建通过。
- `pnpm verify:e2e`:4/4 通过,桌面 1440px 和移动 390px 均无横向溢出。
## 安全与性能证据
未新增凭据、原始载荷、生产地址或持久化写入。排行限制 1-100,前端仅通过 Axios 封装访问 API;SVG 趋势点计算和本地排序均为 O(n),n 为已限制返回项/点数。
## 失败处置
首次 E2E 发现三个结构路由返回 400,定位为控制器缺少显式服务注入;修复后服务端 21 文件/110 测试与 E2E 4 项全部通过。AKTools 在测试配置中禁用,结构和趋势模块按约定显示 unavailable,未伪造样本数据。
@@ -0,0 +1,18 @@
# FEAT-MO-005 视觉 QA
## 视口
- 桌面:1440 × 900,完整页面截图检查通过。
- 移动:390 × 900,完整页面截图检查通过。
## 检查项
- 新增排行、资金流、成交额趋势和短线情绪模块按独立网格排列,无卡片嵌套。
- 移动端网格变为单列,排行行的辅助字段隐藏,文字不溢出。
- 不可用/延迟/部分数据状态使用既有警告样式,未出现空白或 `0.00` 伪造资金值。
- 页面 `scrollWidth === clientWidth`,桌面和移动均无横向滚动。
- 成交额趋势在真实 unavailable 状态显示原因;有点位时 SVG polyline 具备非空点集并保持固定高度。
## 残余风险
当前 AKTools 未启用,无法进行真实排行数据的视觉密度检查;后续上游可用时需复核长行业名称和 100 条列表边界。
@@ -0,0 +1,16 @@
# FEAT-MO-005 发布说明
## 本次内容
- 综合概览新增行业、题材、板块强弱排行。
- 新增行业/题材/板块资金流向面板,保留上游字段口径和缺失状态。
- 新增全市场全天成交额趋势面板,单位为亿元,支持轻量 SVG 趋势线。
- 分类切换触发独立 API 刷新,既有概览模块保持不变。
## 数据与限制
当前 AKTools 未启用或不可用时,相关模块显示 `unavailable`;未验证的板块端点不会伪造数据。该功能未引入数据库、Redis、RocketMQ、AI、用户体系或生产部署变更。
## 发布状态
代码已提交并推送分支 `codex/feat-mo-005-market-structure-turnover`,待合并和后续真实交易时段数据源验证后再发布。

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