# 开发记忆与交接状态 更新日期:2026-10-09。 ## CI 构建优化与实际部署(2026-10-09,完成) - PR #1 已正常合并至 master,提交 abcb1c99;触发 Actions run 38。未直接推送 master。 - Runner 下载 Docker 外部 frontend 约 14 MB 耗时数分钟,属于 Docker Hub 网络瓶颈。移除不必要的 docker/dockerfile:1 frontend 引用,改为 Runner 传源码、192.168.100.132 在独立 builds/ 目录执行完整容器检查与构建,复用已有依赖缓存;构建锁与发布锁分离,镜像本地打包,不跨主机传输大型镜像。 - 新增 PUBLIC_ORIGIN 配置,明确允许指定 HTTPS 公共域名,校验 Host 和 Origin,不盲信转发协议头;HTTPS 公共域名启用 Secure Cookie。配置与 handler 验证、完整容器内 Go race(独立 PostgreSQL)已通过。服务器公共域名配置已保存,原凭据与主密钥保留。 - Nginx 实际不在部署主机,用户明确自行配置;已提供完整代理配置,目标为 192.168.100.132:8080。现已通过 https://veyra.sundynix.cn 验证实际代理生效:页面、healthz、readyz 均 200,管理员登录/me/退出均 200,Cookie Secure=true。 - 优化提交 ac936d2 经 PR #2 正常合并,master 发布提交为 825d049e325b782d742760a466de1d00a9791ca5。Actions run 39(界面 #5)verify/deploy 均成功,首次建立正式 CI 缓存总耗时 10m7s;旧 run 38 已取消,不会覆盖新版本。后续复用 Docker npm/Go 模块层与 veyra-go-test-cache,尚未实测后续部署耗时,不承诺固定分钟数。 - 192.168.100.132 上 veyra-app-1 已启动并 healthy,.current-image 指向上述完整 SHA,部署目录与日志目录正确;未影响其他既有服务。当前服务仍为 APP_ENV=local 的开发验证部署,产品正式认证与远程推送等待办不变。 - 本机仍在 dev;此次通过 PR 合并,没有直接提交或推送 master。交接事实更新只提交 dev,不额外触发 master 部署。 ## 最新 CI/CD 配置(2026-10-09) - 用户要求参考 sundynix-pets 接入自动部署,并指定先创建 dev、禁止直接提交 master、CI/CD 只由 master push(包括 PR 合并)触发。已创建 dev 并保留当天全部修改;AGENTS.md 已记录分支规则。 - Gitea 仓库 Actions 已启用;全局 sundynix-global-128 Runner 在线,标签 ubuntu-latest。已在仓库网页保存 DEPLOY_PASSWORD 与 DEPLOY_KNOWN_HOSTS Secret,不在代码或文档记录凭据。 - 已在 Gitea 创建 master 分支保护:禁用推送、禁用强制推送、管理员须遵守,无绕过白名单;保留通过 PR 合并。按用户仅 master 触发要求,不配置依赖 dev/PR 流水线的合并前状态检查。 - 部署目标为 192.168.100.132:/home/workspace/sundynix-veyra,默认端口 8080;SSH 已验证。服务器 Docker 28.2.2、Compose 2.36.2、flock 可用,检查时 8080 未监听。 - 服务器 configs/.env 已经通过 SSH 初始化为 600 权限,使用已有开发配置与加密主密钥,不覆盖已存在的服务器配置,不包含 SSH 部署字段。保持开发环境认证,不声称正式生产认证已实现。 - 新增 .gitea/workflows/ci-cd.yml、根 Dockerfile/.dockerignore 和 deploy/ 脚本与说明。Gitea token 归档检出、Docker 内验证 App/管理端/Go/独立 PostgreSQL,成功后构建完整 SHA 镜像并 SSH 传输校验包。运行镜像包含管理端 embed、Python、CA、时区,UID 10001,日志 bind 至部署目录 logs/。 - 发布脚本加锁,保留服务器配置,先建库/迁移,再等待 /readyz;健康失败回滚上一镜像与 Compose,迁移失败不替换原运行服务。数据库迁移不自动回退。脚本测试覆盖成功、迁移失败、健康失败、损坏包、缺配置与首次配置保留,共 6 项。 - 本地脚本 6 项、Go race(真实 PostgreSQL 临时 schema)、go vet、gofmt、Go 构建、管理端类型/构建/embed、App 12 项测试/类型检查/双平台导出通过;工作流 YAML、内嵌 shell 与服务器 Compose config --quiet 已校验。服务器完整 Docker 检查与最终运行镜像构建也已通过,包含容器内发布测试和独立 PostgreSQL 17 的全部 Go race 测试。服务器 proxy.golang.org 超时、goproxy.cn 返回 200,构建阶段已切换 goproxy.cn 并验证成功,不关闭 checksum。 - 运行镜像已在隔离网络、只读文件系统、临时日志目录中启动验证:内嵌管理端 200,缺少数据库/Redis 时 readyz 正确返回 503,Python 3.11.2 可执行。验证容器已清理,没有连接开发数据库或启动实际部署实例。 - 本机 Docker daemon 未运行,使用指定部署主机的独立 /tmp/veyra-verify-* 构建目录验证。CI 文件已通过 PR 进入 master 并成功触发部署,实际结果见本文件最新记录。自动筛选与股票工作台已在 dev 提交 57882ff;后续 CI 配置提交不直接操作 master。 ## 最新开发状态(2026-10-09,管理端重排与真实候选联调) - 用户要求配置并实际生成自动候选,以及重新规划管理端 UI,使其围绕股票而非服务状态。已完成可见的管理端重排与真实源验证;不再要求用户逐条录入候选。 - 总览改为 A 股研究总览:实际已同步证券数量、近期待审核/有效发布候选数量、已启用策略数、股票名称/代码/价格/行情时间、真实未复权日线与待审核信号卡片。候选与策略统计明确为最近 100 条范围,不冒充全量;没有指数、涨跌幅、成交额和行业数据,不虚构相应指标。 - 新增“股票行情”一级入口,支持代码/名称搜索、股票报价与真实日线图。导航将股票研究与运行配置分组,原 PostgreSQL/Redis/服务状态移至数据健康,模拟回放收进辅助开发区。管理端保持暖白、炭黑、焦糖橙。 - 候选审核以自动筛选为主入口,手工补录为辅助。股票卡片突出名称、交易所/代码、参考区间、风险/目标价格;详情包含真实日线、来源、版本、依据、风险与审核记录。总览信号卡可直达对应候选详情。 - 新增同源管理员 POST /api/admin/v1/strategy-screenings/run(202 异步)与 GET /api/admin/v1/strategy-screening-status。当前进程状态显示排队/运行/完成/失败、最近一批检查/生成/跳过/失败数量与时间;运行或排队中的重复请求复用现有任务,不创建新 Worker。进程状态不声称跨重启持久化,实际筛选记录与候选仍持久化。 - 选定范围配置上限扩为 100 只,每批最多 20 只,定时轮转。后台已按用户本轮要求创建并启用均线交叉研究基线修订 3:5/20 日 SMA,上涨交叉;固定取行情列表按代码排序的前 100 个有效报价中剔除名称含 ST 的 96 只。参考区间 ±100 基点、风险观察 −500 基点、目标观察 +1000 基点、有效 24 小时。此为开发研究预览参数,已保存在不可覆盖的后台策略版本,可修订;不是经过验证的投资建议或全市场自动选股。 - 真实新浪公开日线的 96 只已分五批全部完成,无跳过、无失败,生成两条 PENDING_REVIEW:中洲控股 000042、胜利股份 000407,信号日 2026-10-09。证券、依据、参考价格、来源及版本均自动生成;没有植入演示候选,没有自动审核发布。首批旧修订 2 的 20 只没有信号,记录如实保留。 - 十三版 veyra_strategy_screening 保存不可覆盖的策略版本、来源/配置版本、日线输入快照和 SHA-256;按版本/证券/日期/来源唯一去重。自动创建、提交审核、筛选记录与审计同事务,并发重复不会留额外候选。 - 只使用完整日线与实际观察时间,未复权;当日上海时间 16:00 前不筛选。报价观察须最近 24 小时,报价与日线接收时间在 10 分钟内,来源/版本与最后日线日期匹配;不把重新接收陈旧收盘价当新观察。 - 自动候选及后续人工修订保留策略版本绑定。策略暂停/切换时不能发布旧自动候选或建立新计划,App 有效列表排除它,未完成计划失效并释放预算;手工候选独立,已记录成交与持仓保留。 - 十四版公开行情报价与模拟回放分开保存;同步只为有效计划产生近期报价事件,最近一分钟实际观察可触发一次站内通知,重复时间/关闭来源/错误版本跳过。提醒不写账。五分钟同步不保证捕获瞬时变化,远程推送尚未接通。 - 开发库已应用 14 版迁移。PostgreSQL 临时 schema race 测试覆盖并发去重、输入不可覆盖、审核前 App 隔离、公开提醒不改变账本、失效来源跳过、暂停后预算释放;新增手动触发权限、重复排队、Worker 完成与取消验证。Go vet 与管理端类型检查/构建/embed通过;App 前轮 12 项测试/类型检查/双平台 Hermes 导出通过,本轮未改 App 代码。 - Chrome 已验证新版总览的 5213 条行情快照/2 条待审核信号、股票价格及 40 条实际日线;候选页已打开中洲控股,确认自动生成的依据、来源/策略版本、价格区间和审核发布/退回入口可见。页面保留在待审核详情,未执行审核发布。 - 本次预览后端 0.0.0.0:8083,管理端 http://127.0.0.1:8083;Metro 8081,电脑内网 IP 192.168.100.2,App API 指向 8083。Expo 地址 exp://192.168.100.2:8081。App 真机 UI 未验证,APK/IPA 未生成;两条候选还待人工审核,App 有效候选仍为空。 - 本段功能开发时尚未提交;后续分支与提交状态以最新 CI/CD 记录为准。昨晚交接修改保留;凭据只在私有配置,主密钥不重置。 ### 接下来 1. 人工核验两条真实自动候选并决定是否发布,真机验证 App 候选 → 计划 → 提醒 → 成交及冲正。当前公开源与研究参数不替代正式市场规则。 2. 补全交易日历、复权、证券及板块交易限制;推进全市场筛选的容量、授权与增量调度,不把当前 96 只范围称为全市场。 3. AI 分析、用户偏好/关注、正式认证、远程推送及生产行情授权仍待开发。 ## 2026-10-08 交接(历史,以下未实现项以最新记录为准) - 用户已要求今天停止开发,明天再继续;未创建自动任务,不在用户未继续指示时推进开发。 - 今日代码已提交并推送至 origin/master,提交 92329dd(完整 SHA:92329ddce2860a77fc492e70c752b76799e94713);已核对远端一致。此次交接文档更新在该提交之后保存,本地尚未另行提交。 - 已完成:单 Go module / 单 main 入口、独立前端依赖、管理端 embed、供应商加密配置、App 模拟交易闭环、候选审核、计划预算、不可覆盖成交及冲正、FIFO 持仓与复盘、站内提醒、zap 文件日志、研究策略版本、Python 异步回测、可配置 A 股公开行情自动同步。 - 自动行情已实际成功同步 5213 条沪深有效报价;新浪为当前开发源,东方财富保留适配器但联调出现连接关闭。日线自动获取与回测已完成实际验证。十二版迁移已应用开发数据库。 - 自动行情尚未驱动策略筛选、候选生成或计划条件提醒;现有候选仍由后台录入/审核,条件提醒仍由模拟价格回放驱动。研究版本选用和暂停也尚未联动候选/计划,不能描述为完整自动选股产品。 - 已完成真实 PostgreSQL 临时 schema 的 race 测试、go vet、管理端类型检查/构建/embed、App 12 项测试及双平台 Hermes 导出;App 真机/模拟器界面未验证,未生成 APK/IPA。 - 最近保留的预览:后端 8083,Metro 8081;App 本地 API 地址指向电脑内网 IP 的 8083。下次先检查进程和网卡地址,不假设这些进程隔夜仍存活;需要启动时使用同一 Go 可执行文件,不新增 main 或 Makefile。常规后端配置端口为 8080。 - 配置与凭据保持本地 configs/.env;禁止写入代码、文档或提交。供应商加密主密钥不得重置。LLM 已保存连接地址和加密密钥,模型名称为空且关闭;AI 调用尚未接通。 ### 下次继续顺序 1. 将已有自动行情/日线与后台策略版本接起来,生成带来源、参数版本和数据时间的候选草稿,进入审核队列;减少手工新建,不自动发布未经审核的候选。 2. 联动有效行情、策略暂停、候选版本与计划时效,接通自动条件提醒;保持提醒不产生成交或现金变动,陈旧行情不重新触发。 3. 验证 App 真机完整流程与公开数据展示,按实际验证修复问题;再推进后台配置的 AI 分析、偏好/关注和正式推送。 以上顺序为交接建议,用户明天的新要求优先。正式行情授权、完整交易规则与正式认证仍待完成。 ## 产品与依据 - 产品名称「见势 · Veyra」,面向从空仓开始的 A 股投资者。 - 根目录 `hengce_fullstack_technical_design_v1.md` 为实施设计,`hengce_app_admin_prototype.html` 为双端交互与视觉参考,均保留。 - 目标闭环:偏好 → 观察候选 → 证据 → 买入计划 → 条件提醒 → 用户记录成交 → 持仓监控 → 退出 → 复盘。 - Go 负责业务、账本与风控;Python 负责量化研究与回测;App 使用 React Native + Expo。 - 首期用户自行交易,提醒不代表成交,不自动下单。 ## 用户确认的硬性规则 - 后端严格遵循 Go 工程规范,采用根目录唯一入口/internal 分层、依赖注入、显式 SQL、context、错误处理及 gofmt/go vet。 - 所有数据库表以 `veyra_` 开头,字段 snake_case。 - 主键为字符串 UUID:数据库 varchar(36),Go string;外键同类型。 - 映射去前缀后 PascalCase,例如 `veyra_user` 对应 `User`。 - 管理端使用 Vite + React + Tailwind CSS + shadcn/ui,并通过 Go embed 嵌入后端。同一二进制提供页面和 API。 - PostgreSQL:192.168.100.127:5432,数据库 veyra;Redis:192.168.100.127:6379,无用户名、有密码。 - 凭据保存在本地 `configs/.env`,禁止写进 Git 或项目记忆。 ## 已实现 - Go API:健康检查、结构化日志、请求 ID、超时、优雅停机。 - 独立建库与迁移命令,迁移使用事务、并发锁、checksum 和字符串 UUID 迁移记录。 - 十二版迁移已应用开发数据库,覆盖身份、配置、候选、计划、账本、通知、策略、回测与自动行情。 - local/test 开发身份初始化;密码 bcrypt 哈希、随机会话凭据、数据库只保存会话哈希。 - 管理端 Cookie 和 App Bearer 会话隔离,退出撤销、过期与状态校验、管理员权限校验。 - Redis 登录限流;管理端 Cookie 为 HttpOnly、SameSite=Strict,写操作校验同源 Origin。 - 账户创建、归属查询、账户列表;模拟资金初始化原子入账,整数分计算、金额字符串 API;真实记录账户现金未知。 - 管理端登录页、服务总览、用户列表、模型配置、行情源配置、审计日志和十个工作区入口;未实现业务页面显示建设中。 - 主模型、备用模型、审核模型与行情源由管理员配置,供应商/地址/模型/密钥初始留空并关闭,不在环境模板预选厂家。配置保存和启用均不代表真实连通性或模型能力已验证。 - 供应商密钥采用 AES-256-GCM 加密,主密钥只在本地环境保存;查询、历史 JSON 与审计不返回密钥。保留/替换/清除密钥与版本保护已实现;更换地址不能静默复用密钥。配置、历史与审计同事务保存。 - Expo App 位于 apps/mobile:SDK 55、React Native 0.83.10、React 19.2.4、Expo Router 五导航;白底、石墨黑与柔紫。开发 USER 登录、SecureStore 会话恢复/到期清理/服务端退出撤销、真实账户列表/创建/切换/现金展示已接通。 - TanStack Query 查询、Zustand 当前账户选择;账户切换中断旧查询并清理详情缓存,退出清理身份缓存,迟到响应不能影响新会话。金额保持十进制字符串。 - App 首页、机会、计划、持仓、我的与提醒入口;未接入业务准确标注尚未开放,不展示原型股票或预设盈亏。 - OpenAPI、依赖锁文件和带 PostgreSQL 集成测试服务的 CI;CI 增加 App 类型检查、客户端测试与双平台 bundle 导出。 - npm --prefix web/admin run build 构建管理端并复制至 embed;go build -o bin/veyra . 生成唯一可执行文件。 ## 当前工程目录 - 用户指出旧后端目录过深,当前已改为仓库根目录的单 Go module。 - module 为 git.sundynix.cn/Blizzard/Veyra,与仓库地址一致;删除单模块 go.work。 - 用户进一步要求一个 main 函数:三个 cmd 入口已合并到根目录 main.go,初始化操作通过 -command 参数切换,默认启动 HTTP 服务。 - internal/model 放模型,internal/service 放业务,internal/repository 放 SQL 与事务,internal/handler 放 HTTP 路由和协议适配。 - internal/config、database、adminui、apperror、ratelimit 放当前实际需要的设施;避免多余嵌套和空目录。 - 管理端由 apps/admin 迁至 web/admin;embed 构建产物由 internal/adminui/dist 提供。App 保留独立 apps/mobile 目录,与后端单 module 无冲突。 - 管理端和 App 各自维护 npm 配置、锁文件与 node_modules;根目录不再使用 npm workspace 或声明 Expo Router。Metro 与 Babel 使用 App 本地依赖。App 固定 React 19.2.4,满足 React Native ^19.2.0 peer,显式排除 SDK 建议补丁版本比较;其余配套检查保留,实际设备验证仍待完成。 - Makefile 已移除,CI、npm scripts 与文档均直接使用 Go/npm 命令;原 HTTP 接口保持一致,CLI 统一到根目录。 - 原始设计报告中的 monorepo 目录仅为旧规划,当前实现以本文件、AGENTS.md 和 README 的结构为准。 - 迁移文件仅移动路径,已逐字节核对两版 SQL 与原提交一致,不影响已执行迁移的 checksum。 - 新结构已通过前端构建与 embed、Go 编译、race 检查和 go vet;本轮已补充真实数据库集成验证。 ## 验证与环境事实 - 当前执行环境已允许访问内网与监听本机端口。PostgreSQL 和 Redis 均已验证可连接;以前的 Operation not permitted 属于旧沙箱限制,不能继续当作当前阻塞。 - 已在 veyra 应用全部十二版迁移,初始化本地环境指定的开发管理员。用户随后提供 LLM 连接信息,已通过后台 API 把 base_url 与加密密钥保存到主模型配置;模型名称仍为空、未启用,备用/审核/行情源未填入用户配置。此前配置表为空是接入前状态,现已变化。 - `go test -race ./...` 已带真实数据库连接执行,在随机临时 schema 中验证迁移幂等/checksum/UUID、身份事务与会话撤销、账户归属与金额、供应商加密保存/密钥保留清除/并发版本冲突/历史审计原子性、配置 API 认证和 Origin 保护。 - `go vet ./...`、前端 TypeScript 检查与生产构建、Go 入口构建通过,管理端产物已复制至 embed 目录。 - 实际 HTTP 服务验证:页面 200、readyz 200、管理员登录/配置读取/审计读取/退出均 200。测试未填入供应商或调用外部 AI/行情接口。 - Chrome 已完成候选录入表单、通知任务与行情搜索的页面验证;App 真机与模拟器界面仍未验证。 ## 启动与后续 - 已初始化数据库使用 `go run . -command db-migrate` 应用后续迁移,无需重复建库。 - 管理端初始化:`configs/.env` 的 ADMIN_LOGIN / ADMIN_PASSWORD,执行 `go run . -command user-create -role ADMIN`;App 测试身份使用 DEV_USER_LOGIN / DEV_USER_PASSWORD 和 `go run . -command user-create -role USER`。 - 本地 `configs/.env` 保存开发身份配置和供应商凭据加密主密钥,管理员配置已按用户指示更新;模板不含秘密值,已有身份不会由初始化命令覆盖。加密主密钥须持久保存并随数据库备份,不能直接更换后继续读取旧密文。 - 先 npm --prefix web/admin run build 构建前端,再 go run . 启动后端;默认 http://127.0.0.1:8080,自动读取当前目录的 configs/.env。 - 当前开发密码登录仅限 local/test;正式短信登录、刷新流程、MFA 和细分 RBAC 待实现。 - 候选、计划、模拟成交、冲正、持仓和累计账本复盘已接通;后续待自动候选筛选及真实规则与授权集成。 - 自动公开行情、日线查询、Python 历史回测与 Worker 已实现;AI 调用、正式授权行情及完整产品仍未完成。 - App 初始化与启动:go run . -command user-create -role USER → 设置 apps/mobile/.env 的 EXPO_PUBLIC_API_URL → npm --prefix apps/mobile run start;npm --prefix apps/mobile run typecheck && npm --prefix apps/mobile run test 检查类型与客户端测试,npm --prefix apps/mobile run build 导出双平台 Hermes bundle。公开环境配置只放 API 地址,不放秘密。 ## Git 状态 - 本轮开始时已有用户提交 bffdb38(feat: 基础框架搭建完毕),旧文档中“无提交/无 Git 写权限”是历史状态,现已失效。 - 本次提交包含供应商后台配置与后续业务实现;推送以 Git 远端记录和提交完成报告为准。 ## 本轮开发状态与待办 - 用户明确要求供应商选择留空,后续在后台配置,已完成上述配置管理与审计功能;没有预选模型厂商或行情供应商。 - 候选审核草稿已整合到当前 model/service/repository/handler 目录,使用第五版迁移并复用原有审计表。 - 下一步:候选修订/审核发布 → 计划预算与确认 → 成交账本/冲正/持仓 → 条件提醒与复盘,同时落实 Expo App。 - 供应商适配器、服务端连接测试、真实行情与 AI 调用仍待实现;配置页面没有虚构在线测试结果。正式认证、策略回测、Worker/任务、细分 RBAC 仍待完成。 ## App 本轮验证与待办 - App USER 测试身份已用本地环境配置创建,未写入客户端或文档凭据;真实账户未注入测试资金。 - npm ci 成功,React 补丁版本已与管理端统一,Expo Doctor 20/20 检查通过;React 建议版本比较按前述规则显式排除,其余配套检查保留。客户端 11 项测试通过,覆盖请求鉴权/取消/网络错误、会话变更隔离、安全存储写入顺序与精确金额边界。 - Android/iOS Metro 和 Hermes bundle 导出已成功;App 请求客户端对实际 Go API 的登录、身份、账户查询、退出和退出后 401 验证通过。 - 本机 xcrun 无 simctl,且无 adb;尚未进行模拟器/真机交互与安全存储实机验证,没有生成 APK 或 IPA。不能将 bundle 导出记作原生包或设备运行验证。 - 仍需接入偏好、候选证据、计划预算、成交/冲正、持仓监控、提醒与复盘页面及 API,正式手机号身份、设备推送与原生发布也未完成。 - 本轮改动纳入此次用户授权的提交;原始两个设计文件未修改。 ## LLM 连接配置 - 用户明确要求只保存连接配置,禁止将供应商地址、模型名或密钥写死到代码中;已保存 base_url 与 api_key,密钥经 AES-256-GCM 加密。 - 用户最后确认本轮只使用 base_url 和 api_key;未填写模型名称、未改动备用或审核配置、未执行模型调用或连接测试。 - 配置保存后通过后台 GET 回读核对版本与 has_api_key,响应不含明文密钥或密文;临时引导环境变量已从本地环境文件清除。文档不记录密钥或真实连接地址。 - 第四版迁移仅新增可配置元数据,无供应商地址或模型种子值。后台支持协议、模型目录及响应存储/认证开关,目录地址须与接口同源;这些设置仍属配置管理,调用适配器未实现。 - 原消息中的 Codex 网络、WSL、goals 等运行参数不写入产品 LLM 连接配置。本轮不修改 Codex 自身配置。 ## 单入口与管理员设置 - 用户要求一个 main 函数、不使用 Makefile,已删除 cmd/api、cmd/db、cmd/user 与 Makefile,保留根目录 main.go;仓库仍是根目录单 Go module,不引入 go.work。 - 运行 go run . 启动服务;维护操作使用 -command db-create/db-migrate/user-create/admin-set。前端构建使用 npm --prefix web/admin run build,再 go build -o bin/veyra .;IDE 可直接运行 main.go。 - 按用户指示修改现有开发管理员的登录名与密码;凭据只保存在本地环境与数据库 bcrypt 哈希中,文档不记录密码。管理员 ID 保持不变,旧会话撤销。 - admin-set 仅允许 local/test 与已有 ACTIVE ADMIN,不允许把普通用户提升成管理员;冲突事务回滚。登录创建会话时重新检查已验证的密码哈希并锁定身份,避免凭据修改后的旧验证结果创建新会话。 - 开发管理员密码范围为 8–72 字节,App 用户仍要求 12–72 字节;正式认证边界保持不变。 - 本轮验证:根目录 go run . 成功启动;管理端页面/readyz/新管理员登录/me/供应商配置回读/退出均通过实际 HTTP 校验。单入口 db-migrate 已验证幂等执行。 - 带真实 PostgreSQL 临时 schema 的 go test -race ./...、go vet 与唯一二进制编译通过;新增管理员修改测试覆盖身份 ID 保留、原会话失效、登录名冲突回滚、禁止修改普通用户与禁止生产环境使用,以及旧密码验证结果不能创建会话。 ## 工程目录清理 - 后端环境文件与模板移至 configs/.env、configs/.env.example,配置值及加密主密钥保持原样;唯一入口默认读取新路径,仍支持 -env-file 与进程环境变量。 - 删除根目录 package.json、package-lock.json 和 node_modules。web/admin 与 apps/mobile 分别维护独立配置、锁文件和依赖;兼容版本约束下放到各自 package.json。 - CI、README、App 说明、AGENTS.md 与未构建管理端的提示已同步更新;构建直接使用 npm --prefix <前端目录> run build。单 Go module、单 main 函数和无 Makefile 保持不变。 - 两个前端均已在移除根目录依赖后通过 npm ci;管理端类型检查/生产构建/embed、App 类型检查/11 项测试/iOS 和 Android Hermes bundle 导出通过。Go vet、唯一二进制编译、真实 PostgreSQL 临时 schema 下的 race 测试通过。 - 根目录 go run . 已验证自动加载 configs/.env,嵌入页面、PostgreSQL/Redis 就绪、管理员登录、供应商配置回读与退出均通过;测试服务已停止。原始设计文件未修改,本轮改动纳入此次用户授权的提交。 - App 安装时 npm audit 报告 35 项依赖问题(14 moderate、21 high);未在目录清理中强制升级 Expo 依赖,后续需单独处理并复验原生兼容性。 ## 模拟交易闭环(本轮进行中) - 已实现第五至第八版迁移,第五至第八版已应用开发数据库;当前总计十二版;原始迁移保留 checksum,不修改已经执行的版本。 - 候选审核:手工模拟候选录入、独立修订、提交审核、发布、退回、撤回、时效与版本保护。发布内容保留历史,App 仅能访问曾发布修订;有效列表仅显示当前未过期发布。App 可查看撤回原因,内部审核身份与完整意见列表不返回 App。 - 计划:模拟账户买入预算预览、确认重检候选版本与时效、现金争用保护、同一预览幂等确认、取消、失效与预算释放。预览五分钟内有效。当前模拟数量规则为 100 股倍数,不代表完整真实交易所规则。 - 成交账本:模拟买入/卖出录入、实际费用、发生时间顺序与幂等保护、部分成交与计划保留额度、FIFO 批次及成本分摊、含费用已实现盈亏、最新未冲正成交的冲正。数据库触发器禁止覆盖或删除已入账成交、现金流水、分摊与冲正事实;冲正保留原记录,不自动重开原计划。 - 可卖时间由模拟成交明确输入,不根据自然日冒充交易日历或真实 T+1。真实记录账户的成交账本仍未接通,市场价格、浮盈亏与市值保持未知。 - 通知:同一后端进程中的轮询 Worker,Outbox 事务处理、手工模拟价格回放、当前快照/时效/候选/计划重检、每计划一次条件提醒、撤回或过期失效通知、本人站内列表与已读。远程推送未实现;提醒不产生交易或现金变动。 - 管理端候选审核、通知任务、数据健康中的模拟价格回放已替代占位;App 候选/证据/预算/计划/成交/持仓/冲正/站内通知及累计账本复盘已接通。 - 真实 PostgreSQL 临时 schema 下的 race 测试通过:候选并发审核、历史保护、发布与事件失败回滚、计划现金争用与取消、部分成交、偏离说明、冲正不重开计划、FIFO 舍入、重复请求、冲正失败回滚、不可覆盖成交、模拟可卖时间、过期快照、不重复提醒、提醒不改账本与复盘金额。 - 管理端类型检查/生产构建/embed、App 类型检查/12 项客户端测试/iOS 与 Android Hermes 导出、go vet/唯一二进制编译已通过;后续代码变更按需复验。 - 本机 8080 由用户 IDE 的旧进程占用,没有关闭用户进程。当时自有验证服务运行 8081,后续已改为 8083;新增管理端与 App HTTP 读接口及登录/退出已通过,不向开发账户插入候选、资金或成交。 - 本轮 Chrome 已可用,实际验证新版候选队列、空白录入表单、通知任务与模拟价格入口,未保存任何业务数据。先前无浏览器是历史环境事实;尚未验证 App 真机/模拟器。 - 待继续:策略版本管理、Python 历史回测、自动行情与供应商调用、偏好与关注、生产服务授权及正式认证/远程推送。本轮改动纳入此次用户授权的提交。 ## 本轮完成:日志、研究与 A 股自动接入 - 按用户要求引入 zap;控制台使用易读编码,文件为 JSON,默认写入当前工作目录 logs/veyra.log。50 MB 轮转、保留 10 个备份及 14 天、压缩历史;LOG_DIR/LOG_LEVEL/LOG_MAX_SIZE_MB/LOG_MAX_BACKUPS/LOG_MAX_AGE_DAYS 可在配置文件修改。文件初建权限 0600,日志忽略 Git,不记录口令、请求正文、Cookie 或原始查询串。 - 策略中心支持新建研究策略、不可覆盖版本、选用研究版本、暂停和审计。研究版本管理尚未控制手工候选或既有计划,不冒充已部署自动交易策略。开发数据库已保存一个暂停的均线研究基线,可在后台修订;该基线没有性能背书。 - Python 回测使用固定策略版本、参数、输入 SHA-256 和原始数据快照。异步任务带独立 lease、过期恢复、完成保护和失败状态;使用此前完成日线生成信号、次日开盘模拟成交,整数价格/费用/滑点,保存权益序列和成本后成交结果。未实现复权企业行为、停牌、涨跌停、交易日历成交限制或样本外研究。 - 用户明确要求自动 A 股接入,已增加可配置公开行情适配器。东方财富接口首次读取得到数据,后续连接关闭;未把失败当成同步成功。现开发配置采用新浪公开接口,全部地址保存后台配置,免账号;东方财富适配器仍可选。没有静默运行时切源或覆盖失败事实。 - 自动同步沪深证券列表和有效报价,启动执行、每五分钟更新;配置变更十秒内检测,保存源配置版本、供应商行情时间、接收时间与同步记录。首次成功写入 5213 条沪深有效报价,不含北交所,不代表全部证券主数据或正式授权行情。API 查询默认最多 100 条,支持名称/代码搜索。 - 后台数据健康显示股票与同步结果;系统设置可修改适配器及列表/报价/历史地址、启停。App 机会页有 A 股行情入口,支持搜索与明确的历史快照时间;不把接收时间伪装成行情产生时间。 - 回测默认按股票、交易所与日期自动获取日线,CSV 作为复验入口保留。实际从新浪接口读取一个标的的 2025 年一季度 57 根不复权日线,回测任务完成并得到 3 条模拟成交;没有产生真实交易、资金或账户持仓。 - 真实 PostgreSQL 临时 schema 的 race 测试、行情精度/供应商时间/非法 OHLC/不可舍入价格测试、Python 无未来数据与费用计算测试通过;go vet、唯一二进制、管理端类型检查/构建/embed、App 类型检查与双平台 Hermes 导出通过。App 客户端 12 项测试通过。 - 开发预览后端保留在 0.0.0.0:8083;管理端 http://127.0.0.1:8083。App 本地公开配置为 http://192.168.100.2:8083,Metro 为 exp://192.168.100.2:8081,使用同一内网 Expo Go 查看。固定了 Metro 的网卡选择,避免发布 VPN 虚拟地址。本地常规 HTTP_ADDR 已设 0.0.0.0:8080,需要用户 IDE 重启才读取新代码;未关闭用户 IDE 进程。 - 公开源仅为开发研究接入,缺少官方服务保障和商业展示授权确认。行情自动同步还没有驱动自动候选筛选、AI 解释或计划条件触发;现有提醒仍由明确标记的模拟价格回放驱动。 - 用户要求“做完这个功能就先停止”,本轮在 A 股自动接入验证后停止开发,预览服务保留。后续待自动筛选/审核、AI 分析、偏好与关注、生产授权、正式认证和远程推送;不自动继续扩展。本轮改动纳入此次用户授权的提交,原始两份设计文件未修改。 ## 本轮代码提交记录 - 用户已明确要求提交并 push,本次提交包含工程目录整理、后台配置、App 模拟业务闭环、zap 日志、策略与回测及 A 股自动接入。验证状态和未完成能力以上文最新记录为准。 - 本地环境、密钥、日志、依赖目录和构建产物不纳入提交;原始设计文件保持不变。已推送至 origin/master,提交为 92329dd,远端 SHA 已核对一致。