diff --git a/next/docs/final/completion-audit.md b/next/docs/final/completion-audit.md index 557f7a3..dde9fda 100644 --- a/next/docs/final/completion-audit.md +++ b/next/docs/final/completion-audit.md @@ -62,6 +62,8 @@ - 当前本机没有可用 Docker 引擎,镜像尚未在真实 Docker 环境构建和启动。 - NAS 生产容器尚未切换;持久化重启、健康检查和回退必须在 Docker/NAS 上验证。 - 旧运行时在正式切换前继续保留。切换 NAS 和清理旧实现必须取得用户最终明确确认。 +- 旧实现的逐路径清理、数据归档和清理后验收已固化在 `legacy-cleanup-plan.md`; + 一次性旧库迁移器也将在回退保留期结束后删除,不进入长期维护面。 ## 完成规则 diff --git a/next/docs/final/cutover-checklist.md b/next/docs/final/cutover-checklist.md index 40fad3f..ad4c3ea 100644 --- a/next/docs/final/cutover-checklist.md +++ b/next/docs/final/cutover-checklist.md @@ -22,6 +22,9 @@ 6. 切换反向代理或宿主端口;观察健康、5xx、数据库写入和后台任务至少一个完整刷新周期。 7. 只有观察期通过后才归档旧容器;旧数据库和旧镜像按回退周期保留。 +旧实现的精确保留、删除和验收边界见 [旧实现清理方案](legacy-cleanup-plan.md)。正式切换确认 +不自动授权删除旧实现,清理仍需单独确认。 + ## 回退条件与动作 出现登录失败、私有数据错绑、数据库完整性失败、关键行情不可读、后台任务持续失败或无法恢复的5xx时立即回退。 diff --git a/next/docs/final/legacy-cleanup-plan.md b/next/docs/final/legacy-cleanup-plan.md new file mode 100644 index 0000000..735442c --- /dev/null +++ b/next/docs/final/legacy-cleanup-plan.md @@ -0,0 +1,86 @@ +# 旧实现清理方案 + +本文只定义正式切换后的清理边界,不授权当前阶段删除旧代码、旧容器或旧数据。 +清理目标是让仓库最终只保留 `next/` 新系统及不可替代的产品和研究资产,不保留两套运行时。 + +## 执行前置条件 + +以下条件必须全部成立: + +1. NAS 已使用固定镜像标签在临时端口完成构建、迁移、重启和恢复演练。 +2. 新系统已完成真实账号、权限、行情、竞价、盘后选股、LLM、问天和私有复盘抽验。 +3. 正式流量切换后至少完整经历一个交易日,包括盘前、竞价、盘中、收盘刷新和盘后任务。 +4. 观察期内没有触发登录、私有数据错绑、行情不可读、持续 5xx 或后台任务连续失败等回退条件。 +5. 旧镜像、旧容器配置、旧数据库、固定加密密钥和私有 Skill 已形成一致性归档,并完成独立恢复。 +6. 用户明确批准旧实现清理。NAS 切换确认不自动等于删除确认。 + +## 永久保留 + +| 资产 | 位置 | 原因 | +|---|---|---| +| 新系统 | `next/` | 唯一正式运行时 | +| 完整产品规格 | `docs/product/` | 从零重建的产品真相源 | +| 迁移章程 | `docs/migration/` | 架构约束和历史决策依据 | +| 蒸馏研究素材 | `游资skills/` | Skill 的研究来源,不进入正式运行时 | +| Git 历史和最终旧版标签 | `.git/` | 精确回档和审计依据 | +| 仓库忽略规则 | `.gitignore` | 保护数据库、密钥、日志和生成物不被提交 | + +公开运行 Skill 的唯一副本位于 `next/config/mentor-skills/`。`游资skills/`只作为研究档案, +不得在新系统运行时读取。管理员私有 Skill 只保存在 NAS 持久化数据目录和加密备份中。 + +## 切换后删除的旧运行时 + +以下路径在删除确认后进入同一个独立提交,不分批留下半套旧系统: + +- 旧后端与依赖:`backend/`、`vendor/`、根目录全部旧业务 `*.py`。 +- 旧前端:`static/`、根目录 `package.json`、`package-lock.json`、`playwright.config.js`。 +- 旧配置与测试:`config/`、`tests/`、`tools/`。 +- 旧部署入口:根目录 `Dockerfile`、`compose.yaml`、`.dockerignore`、`.env.example`、`requirements.txt`。 +- 已被新文档取代的旧说明:根目录 `README.md`、`ARCHITECTURE.md`、`DOCKER_DEPLOY.md`、 + `REDESIGN_PLAN.md`、`STAGE19_ACCEPTANCE.md`、`THIRD_PARTY_NOTICES.md` 和 `docs/governance/`。 +- 已在 `next/config/heaven/` 中存在权威副本的 `data/iching_zh.json`。 + +根目录旧业务 Python 文件包括: + +```text +advanced_strategies.py alert_service.py api_access.py +app_config.py assistant_agent.py chart_data_provider.py +database.py demo_data.py heaven_agent.py +heaven_engine.py ifind_client.py llm_strategy.py +llm_stream.py market_insights.py mentor_agent.py +realtime_aggregator.py screener.py security.py +sentiment_engine.py server.py strategy_tracking.py +sync_data.py trade_journal.py tushare_client.py +``` + +## 数据与密钥处理 + +旧 `data/review.db`、旧 `.env`、数据库 WAL/SHM 文件和旧容器数据卷从来不进入 `git rm`。 +它们按以下顺序处理: + +1. 停止旧系统写入并通过 SQLite 在线备份取得一致数据库。 +2. 将数据库、旧环境文件、旧镜像标签和容器配置写入加密归档并校验 SHA-256。 +3. 在独立目录恢复归档,验证旧镜像能够启动并读取账号和私有记录。 +4. 在约定回退保留期内只停止旧容器,不删除旧容器、镜像或数据卷。 +5. 回退保留期结束且用户再次确认后,才从 NAS 工作目录移除旧明文副本;加密归档继续保留。 + +## 一次性迁移代码 + +`next/tools/legacy_migration.py` 和 `next/tests/test_legacy_migration.py` 只服务旧库切换, +不是长期运行时能力。旧系统回退保留期结束、最终迁移报告归档且旧明文数据库移除后, +二者应在单独提交中删除;`next/docs/evidence/stage-14/real-migration-report.json`继续保留。 +备份、恢复和正式数据库 migration 工具仍属于新系统维护能力,不删除。 + +## 清理提交验收 + +清理必须在新分支或新提交中一次完成,并满足: + +1. 给清理前提交打不可变标签,记录旧版和新版镜像标签及数据库校验和。 +2. `next/` 不得导入或读取任何已删除路径;允许的外部引用只限产品规格和迁移章程文档。 +3. 从全新 Git 检出执行 Ruff、pytest、Vue 类型检查、Vitest、生产构建和 Playwright 全量回归。 +4. 从全新 Git 检出在 NAS 构建镜像,证明构建上下文不依赖工作区残留文件。 +5. 新容器使用恢复后的数据卷启动,重启后账号、私有记录和后台任务状态不丢失。 +6. `git status`为空,仓库中不存在第二个 `server.py`、第二套前端 Shell、第二套 CSS 令牌、 + 第二个数据网关或第二个 LLM 网关。 + +任一验收失败时,回退整个清理提交,不在残缺状态下逐文件补救。