Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41329943c4 | ||
|
|
d0e6800fe8 | ||
|
|
23d11b0d21 | ||
|
|
c3598820ef | ||
|
|
7e1bc48ee0 |
@@ -0,0 +1,23 @@
|
||||
# 小白复盘仓库执行约束
|
||||
|
||||
本文件对仓库内所有后续编码任务生效。任何智能体在修改文件前必须完整读取:
|
||||
|
||||
1. `docs/migration/原版保真迁移总纲.md`
|
||||
2. `docs/migration/保真迁移状态.json`
|
||||
3. `docs/migration/next失败冻结记录.md`
|
||||
4. 与本次功能有关的原版源码、页面和测试
|
||||
|
||||
## 不可违反
|
||||
|
||||
- 当前根目录原版是唯一功能、视觉、交互、动画和计算基线。
|
||||
- `next/`是失败冻结实现,禁止部署、继续开发或作为新迁移代码来源。
|
||||
- 后续迁移是原代码保真式整理,不是重写、重新设计或更换技术栈。
|
||||
- 不得根据规格说明书重新实现已经存在的功能;规格书只用于盘点,冲突必须交给用户裁决。
|
||||
- 不得改变用户可观察行为。源码可以移动、拆分和调整引用,但输出必须等价。
|
||||
- 不确定是否有用的代码默认保留。没有引用扫描、运行证据和新旧对比,不得删除。
|
||||
- 每次只处理一个完整纵向功能切片,并同步更新迁移账本和状态文件。
|
||||
- 每个切片必须具有原版基线、新版结果、API/数据库对比、页面与交互对比及Git回档点。
|
||||
- 不以新实现自身测试通过、目录更整齐或代码行数减少证明迁移成功。
|
||||
- 未经用户人工确认,不得宣称视觉等价、完成迁移、切换Docker/NAS或删除原版。
|
||||
|
||||
如果任务要求与以上约束冲突,停止迁移并向用户说明冲突,不自行选择新产品行为。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 迁移文档入口
|
||||
|
||||
后续恢复迁移工作时按以下顺序读取,禁止从历史阶段文档直接继续:
|
||||
|
||||
1. [`../../AGENTS.md`](../../AGENTS.md):仓库级不可违反约束。
|
||||
2. [`原版保真迁移总纲.md`](原版保真迁移总纲.md):当前唯一有效的迁移方法。
|
||||
3. [`保真迁移状态.json`](保真迁移状态.json):机器可读当前状态和下一步。
|
||||
4. [`保真迁移账本.md`](保真迁移账本.md):连续检查点、资产处置和决策记录。
|
||||
5. [`next失败冻结记录.md`](next失败冻结记录.md):失败实现的隔离边界。
|
||||
|
||||
`重建迁移章程.md`及`next/`内阶段文档均是失败过程历史记录,不再指导后续实施。
|
||||
@@ -0,0 +1,29 @@
|
||||
# `next/`失败冻结记录
|
||||
|
||||
> 决策日期:2026-07-30
|
||||
> 状态:用户验收失败,永久冻结,禁止部署
|
||||
|
||||
## 结论
|
||||
|
||||
`next/`采用重新实现方式建立,与本次迁移的真实目标不一致。用户确认其页面视觉、布局和基础功能
|
||||
未达到原系统等价要求,因此该目录不再作为产品候选、迁移成果或后续重构基础。
|
||||
|
||||
原发布候选`xiaobai-next-rc-20260730-1`自本记录生效起作废。不得使用`next/Dockerfile`、
|
||||
`next/compose.yaml`或`next/compose.preflight.yaml`部署任何正式或预检环境。
|
||||
|
||||
## 冻结边界
|
||||
|
||||
1. `next/`只保留作失败复盘、测试思路和迁移工具参考,不再修补产品功能或视觉。
|
||||
2. 后续迁移不得从`next/`反向覆盖原系统,也不得把其页面作为视觉基准。
|
||||
3. 原系统仍是唯一产品事实和视觉基线;后续工作必须采用原代码保真式结构迁移。
|
||||
4. 未经用户新的明确决定,不删除`next/`,不移动失败标签,不恢复其发布候选身份。
|
||||
5. `next/data/`中的本地迁移副本继续保持Git忽略,不作为生产数据。
|
||||
|
||||
## 失败原因
|
||||
|
||||
- 错误地把“建立独立目录并迁移”执行成了重新设计和重新实现。
|
||||
- 自动测试主要验证新实现内部契约,没有证明与原系统逐页面、逐状态、逐像素等价。
|
||||
- 以代码行数下降和规格案例覆盖代替了原系统完整行为保真。
|
||||
- 用户人工验收确认视觉、布局及基础功能不可作为正式产品使用。
|
||||
|
||||
本记录优先于`next/`内所有阶段完成、发布候选、预检和切换说明。
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"updated_at": "2026-07-30T22:51:21+08:00",
|
||||
"status": "preparation",
|
||||
"migration_mode": "behavior_preserving_source_migration",
|
||||
"source_of_truth": "current_original_webapp_runtime_and_source",
|
||||
"source_root": ".",
|
||||
"target_root": null,
|
||||
"failed_roots": [
|
||||
"next"
|
||||
],
|
||||
"current_slice": null,
|
||||
"last_checkpoint": "xiaobai-preservation-migration-charter-20260730",
|
||||
"next_action": "inventory_original_assets_and_propose_target_structure_before_copying_code",
|
||||
"authoritative_documents": [
|
||||
"AGENTS.md",
|
||||
"docs/migration/原版保真迁移总纲.md",
|
||||
"docs/migration/保真迁移账本.md",
|
||||
"docs/migration/next失败冻结记录.md"
|
||||
],
|
||||
"hard_invariants": [
|
||||
"do_not_use_next_as_migration_source",
|
||||
"do_not_rewrite_existing_product_behavior",
|
||||
"do_not_change_technology_stack_without_explicit_user_approval",
|
||||
"preserve_visual_interaction_animation_calculation_and_data_semantics",
|
||||
"require_old_new_differential_evidence_for_every_slice",
|
||||
"keep_original_runtime_available",
|
||||
"do_not_delete_uncertain_code"
|
||||
],
|
||||
"open_decisions": [
|
||||
"target_directory_name",
|
||||
"target_directory_structure",
|
||||
"migration_slice_order"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
# 小白复盘保真迁移账本
|
||||
|
||||
> 当前状态:准备期,尚未开始业务代码迁移
|
||||
|
||||
本账本是上下文恢复和人工审计的连续记录。任何迁移提交必须在同一提交中更新本文件及
|
||||
`保真迁移状态.json`。
|
||||
|
||||
## 固定事实
|
||||
|
||||
- 原版根目录是唯一产品和视觉基线。
|
||||
- `next/`已被用户否决并冻结,不进入后续迁移。
|
||||
- 新目标目录尚未命名或建立。
|
||||
- 后续采用原代码保真式迁移,不重新实现,不更换技术栈。
|
||||
|
||||
## 当前检查点
|
||||
|
||||
| 日期 | 提交或标签 | 事件 | 结论 |
|
||||
|---|---|---|---|
|
||||
| 2026-07-30 | `xiaobai-next-rejected-20260730` | 冻结失败的`next/`实现 | 禁止部署或继续开发 |
|
||||
| 2026-07-30 | `xiaobai-preservation-migration-charter-20260730` | 建立保真迁移总纲、状态和恢复协议 | 尚未开始新迁移 |
|
||||
|
||||
## 资产处置登记
|
||||
|
||||
开始清查后,每个资产必须登记,禁止只记录已迁移项而遗漏未处理项。
|
||||
|
||||
| 原位置/符号 | 类型 | 消费者 | 处置 | 新位置 | 等价证据 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 待清查 | - | - | 待定 | - | - | 未开始 |
|
||||
|
||||
处置只允许:`原样保留`、`移动`、`合并重复`、`待定`、`确认废弃`。
|
||||
|
||||
## 切片记录
|
||||
|
||||
每个切片记录以下内容:原版基线、复制范围、必要路径调整、差异测试、人工验收、未关闭问题和回档提交。
|
||||
当前没有进行中的切片。
|
||||
|
||||
## 决策记录
|
||||
|
||||
| 日期 | 决策 | 原因 |
|
||||
|---|---|---|
|
||||
| 2026-07-30 | 原版运行行为优先,规格书只用于盘点 | 防止再次依据文字重新开发 |
|
||||
| 2026-07-30 | 不使用`next/`作为后续迁移起点 | 用户确认其视觉、布局和基础功能不可用 |
|
||||
| 2026-07-30 | 目标结构确认前不创建业务目录 | 防止目录先行后再次补写功能 |
|
||||
|
||||
## 恢复工作检查
|
||||
|
||||
- [ ] 已阅读`AGENTS.md`与保真迁移总纲。
|
||||
- [ ] 已读取状态JSON和本账本最后一项。
|
||||
- [ ] 已确认Git工作区和基线提交。
|
||||
- [ ] 已确认没有修改`next/`或正式数据。
|
||||
- [ ] 已说明当前切片及新旧等价证据。
|
||||
- [ ] 已在编辑前确认没有未关闭差异。
|
||||
@@ -0,0 +1,128 @@
|
||||
# 小白复盘原版保真迁移总纲
|
||||
|
||||
> 状态:准备期
|
||||
> 建立日期:2026-07-30
|
||||
> 迁移性质:保行为、保视觉、保数据语义的源代码整理
|
||||
|
||||
## 1. 唯一目标
|
||||
|
||||
以当前可运行原版`webapp`为唯一母版,在尚未命名的新目录中建立更容易检索、理解和人工维护的
|
||||
代码结构。迁移后的系统必须继续使用原版已经验收的功能、视觉、布局、动画、计算逻辑和交互,
|
||||
不得依据说明文字重新开发一个相似产品。
|
||||
|
||||
本次工作相当于把原文件柜中的有效原件逐项分类搬入新文件柜,而不是重新制作原件。
|
||||
|
||||
## 2. 事实裁决顺序
|
||||
|
||||
发生不一致时按以下顺序处理:
|
||||
|
||||
1. 用户在当前或后续对话中的明确决定。
|
||||
2. 原版在相同代码、数据、账号、配置、日期、主题和视口下的真实运行行为。
|
||||
3. 原版源码、数据库结构、静态资产和现有测试共同证明的行为。
|
||||
4. 《小白复盘完整产品规格说明书》用于盘点和解释,不得自行覆盖原版行为。
|
||||
5. 无法确定时记录为待裁决,保持原状,不推测、不补全。
|
||||
|
||||
只有用户明确指出原版是Bug或要求改变时,才允许产生用户可观察差异,并必须单独记录。
|
||||
|
||||
## 3. 必须保持不变
|
||||
|
||||
- 全部页面、入口、功能和细节能力。
|
||||
- PC与移动端布局、尺寸、字体、颜色、间距、滚动和响应式行为。
|
||||
- 日间、夜间、加载、空、错误、禁用、悬停、选中和完成状态。
|
||||
- 动画素材、形态、时序、过场、循环、静音和减少动态效果行为。
|
||||
- API路径、请求、响应、错误语义和流式传输行为。
|
||||
- 数据来源职责、日期、单位、复权、缺失、覆盖率、新鲜度和降级规则。
|
||||
- 权限、会员、管理员标识、账户隔离和私有数据边界。
|
||||
- 情绪、竞价、股池、选股、问天及统计计算结果。
|
||||
- 数据库现有记录、唯一约束、历史兼容和后台任务语义。
|
||||
|
||||
## 4. 允许与禁止
|
||||
|
||||
允许:
|
||||
|
||||
- 移动文件并调整导入路径。
|
||||
- 将巨型文件按已经存在的职责拆分。
|
||||
- 抽出实际重复且行为相同的实现,让原调用方指向唯一实现。
|
||||
- 为原行为增加刻画测试、API快照、数据库对比和视觉回归。
|
||||
- 删除已证明无引用、无运行路径、无视觉影响、无数据兼容责任的代码。
|
||||
|
||||
禁止:
|
||||
|
||||
- 更换前端框架、后端框架、数据库或主要技术栈。
|
||||
- 重写已经存在的页面、样式、动画、公式或数据流程。
|
||||
- 以新的设计令牌、组件库或架构偏好改变最终视觉。
|
||||
- 先建立空架构,再依据规格书补写功能。
|
||||
- 以“更合理”为由修复未被用户确认的原版行为。
|
||||
- 复制`next/`中的产品实现进入新的迁移目录。
|
||||
- 为追求行数、文件数或测试数量而删除有效代码或制造空抽象。
|
||||
|
||||
## 5. 迁移单位
|
||||
|
||||
代码不能像独立照片一样任意逐文件搬运。每次迁移一个完整纵向切片:
|
||||
|
||||
```text
|
||||
用户入口 -> 页面结构 -> 样式与动画 -> 前端状态 -> API -> 业务计算 -> 数据库/外部数据
|
||||
```
|
||||
|
||||
切片内部可以先原样复制,再在保持输出不变的前提下拆分。不得只搬页面而稍后重写接口,也不得先
|
||||
重建全部后端再补前端。
|
||||
|
||||
## 6. 固定工作流
|
||||
|
||||
1. 冻结原版基线提交,使用数据副本,不写正式数据。
|
||||
2. 建立资产清单和依赖图,逐项标记保留、移动、合并、待定或确认废弃。
|
||||
3. 先规划目标目录职责;未确认前不建立业务代码。
|
||||
4. 为待迁移切片记录原版API、数据库副作用、页面状态、截图和交互流程。
|
||||
5. 从原版复制对应实现和资产,只调整迁移所必需的路径与依赖。
|
||||
6. 对新旧版本执行同输入差异测试,结果不等价则回退本切片。
|
||||
7. 等价后才允许拆分或去重;每次拆分再次执行同一组差异测试。
|
||||
8. 更新迁移账本、状态文件和Git回档点,再进入下一个切片。
|
||||
9. 所有切片完成后执行全量并行验收,用户确认前不切换部署。
|
||||
|
||||
## 7. 等价证据
|
||||
|
||||
每个切片至少同时具备:
|
||||
|
||||
| 证据 | 要求 |
|
||||
|---|---|
|
||||
| 源码映射 | 原文件、符号和资产到新位置的逐项记录 |
|
||||
| API差异 | 同请求的状态码、字段、值、顺序和错误一致 |
|
||||
| 数据库差异 | 同操作的新增、修改、删除和事务结果一致 |
|
||||
| 计算差异 | 固定输入得到逐字段相同结果 |
|
||||
| 页面差异 | 同数据、主题和视口的截图及结构比较 |
|
||||
| 交互差异 | 点击、键盘、滚动、弹窗、动画和刷新流程一致 |
|
||||
| 人工确认 | 用户确认视觉与使用感受没有偏差 |
|
||||
|
||||
新版本自身的单元测试只能作为辅助,不能代替新旧差异证据。
|
||||
|
||||
## 8. 删除规则
|
||||
|
||||
任何代码只有同时满足以下条件才可不迁移或删除:
|
||||
|
||||
1. 静态引用和动态注册扫描均无消费者。
|
||||
2. 运行覆盖和真实浏览器流程未经过该路径。
|
||||
3. 不承担数据库迁移、历史兼容、配置读取或资源加载责任。
|
||||
4. 删除后原版与迁移版的全量差异测试仍一致。
|
||||
5. 迁移账本记录理由、证据和恢复提交。
|
||||
|
||||
条件不足时标记`待定`并保留,不能凭代码外观判断。
|
||||
|
||||
## 9. 上下文恢复协议
|
||||
|
||||
每次新任务、上下文压缩或执行中断后,必须先完成:
|
||||
|
||||
1. 读取仓库根目录`AGENTS.md`。
|
||||
2. 读取本总纲、`保真迁移状态.json`及迁移账本。
|
||||
3. 确认`next/`仍处于失败冻结状态。
|
||||
4. 检查Git状态、当前基线提交和最后回档点。
|
||||
5. 查看正在迁移切片的原版证据与未关闭差异。
|
||||
6. 在继续编辑前向用户简述当前阶段、硬约束和下一步。
|
||||
|
||||
不得根据聊天摘要重新发明阶段、技术栈或验收口径。
|
||||
|
||||
## 10. 当前边界
|
||||
|
||||
- `next/`已失败冻结,不是迁移起点。
|
||||
- 当前尚未确定新目录名称、目标目录结构和迁移阶段。
|
||||
- 在完成原版资产清查和用户确认总体方案前,不开始复制业务代码。
|
||||
- 原版保持唯一可运行产品,不执行Docker切换或数据清理。
|
||||
@@ -1,9 +1,13 @@
|
||||
# 小白复盘重建迁移章程
|
||||
# 小白复盘重建迁移章程(本轮实施失败冻结)
|
||||
|
||||
> 状态:执行中
|
||||
> 建立日期:2026-07-30
|
||||
> 状态:失败冻结,禁止继续或部署
|
||||
> 建立日期:2026-07-30
|
||||
> 产品真相源:`docs/product/小白复盘-完整产品规格说明书.md`
|
||||
|
||||
> 2026-07-30用户人工验收确认`next/`的视觉、布局和基础功能未达到原系统等价要求。
|
||||
> 本章程后续阶段记录只作为失败过程留档,不再构成完成证明。权威处置记录见
|
||||
> [`next失败冻结记录.md`](next失败冻结记录.md)。
|
||||
|
||||
## 1. 唯一目标
|
||||
|
||||
在当前仓库的`next/`目录内,从零重建小白复盘。新系统必须完整实现产品规格说明书定义的功能、权限、数据口径、交互状态、视觉和终端行为,同时显著减少重复实现、补丁层和隐式依赖,使后续人工维护可操作。
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# 小白复盘完整产品规格说明书
|
||||
|
||||
> **2026-07-30保真迁移补充裁决:** 当前任务不再是依据本文“从零重建”,而是整理迁移原版源码。
|
||||
> 原版真实运行行为、源码、样式和资产是保真基线;本文只用于功能盘点和解释。本文与原版不一致时
|
||||
> 不得由实施者自行按本文重写,必须保持原状并交由用户裁决。完整约束见
|
||||
> [`../migration/原版保真迁移总纲.md`](../migration/原版保真迁移总纲.md)。
|
||||
|
||||
> 文档性质:产品事实与重建规格(Single Source of Product Truth)
|
||||
> 适用场景:在不读取旧代码、不依赖历史对话的前提下,从零重建“小白复盘”
|
||||
> 基准日期:2026-07-29
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
# 小白复盘重建版
|
||||
# 小白复盘重建版(失败冻结)
|
||||
|
||||
> **禁止部署或继续开发。** 本实现已于2026-07-30被用户判定为迁移失败,原发布候选已作废。
|
||||
> 冻结原因和后续边界见[`../docs/migration/next失败冻结记录.md`](../docs/migration/next失败冻结记录.md)。
|
||||
> 本目录以下内容只保留作历史取证,不再代表产品现状或交付状态。
|
||||
|
||||
本目录是依据产品规格说明书从零建立的新系统。旧系统只用于行为对照,新系统不得在运行时导入或读取旧系统源码。
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 新系统部署与回退
|
||||
# 新系统部署与回退(已作废,禁止执行)
|
||||
|
||||
> `next/`已于2026-07-30被用户判定为迁移失败。本文件仅保留历史取证,不授权构建、部署或切换。
|
||||
> 权威冻结决定见`../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
本说明只适用于 `next/` 重建版。旧容器在最终人工确认前继续运行,不得原地覆盖。
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
|
||||
- 新版地址:`http://127.0.0.1:8877`
|
||||
- 新版数据库:`next/data/local-preflight/xiaobai-normalized-v7.db`
|
||||
- 旧版`8765`未启动、未占用、未修改。
|
||||
- 旧版`8765`未启动、未占用;旧版源码仅修复静态首页被API权限注册表误拦截的既有回归,
|
||||
未增加产品功能。
|
||||
- 本轮未连接NAS,未执行Docker构建或容器切换。
|
||||
|
||||
## 迁移校验
|
||||
@@ -47,12 +48,20 @@
|
||||
## 自动质量门
|
||||
|
||||
- Ruff:通过
|
||||
- pytest:111项通过
|
||||
- pytest:113项通过
|
||||
- Vue类型检查:通过
|
||||
- Vitest:7项通过
|
||||
- Vite生产构建:通过
|
||||
- Playwright:26项通过;在隔离测试数据库中重跑,包含注册、权限、16工作区、日夜、390px、长页路由复位和4K结构断言。
|
||||
|
||||
## 旧版并行可运行性
|
||||
|
||||
- 使用独立空数据目录和临时端口`8890`启动旧版,未读取或写入真实旧库,也未占用正式端口`8765`。
|
||||
- `/api/health`返回`200 application/json`,静态首页`/`返回`200 text/html`。
|
||||
- 发现并修复旧版既有回归:API权限注册表曾错误处理静态路径,使首页返回404;现仅`/api/*`
|
||||
进入权限注册表,静态资源仍由原静态服务处理。
|
||||
- 旧版全量基线为231项测试和32项subtest全部通过;静态首页绕过API注册表有直接回归测试。
|
||||
|
||||
## 未关闭项
|
||||
|
||||
- 4K信息密度和审美仍需用户人工确认。
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 阶段 15 总验收
|
||||
# 阶段15总验收(结论已由用户人工验收否决)
|
||||
|
||||
> 本文件只保留当时的自动化证据,不再构成产品完成或可用性证明。权威冻结决定见
|
||||
> `../../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
## 产品覆盖
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 重建版完成度审计
|
||||
# 重建版完成度审计(历史记录,验收结论已撤回)
|
||||
|
||||
> 用户人工验收确认本实现未达到原系统视觉、布局和基础功能等价要求。本文中的自动测试和阶段结论
|
||||
> 不能再作为产品完成证明。权威冻结决定见`../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
更新日期:2026-07-30
|
||||
|
||||
@@ -14,6 +17,7 @@
|
||||
## 已确认完成的基础
|
||||
|
||||
- 新旧运行时完全分离,新版不导入旧版 `server.py`、`database.py`、`app.js` 或旧样式覆盖层。
|
||||
- 旧版已在独立数据目录和临时端口完成首页、健康检查及231项测试与32项subtest验收;迁移期仍可运行。
|
||||
- 账户、会话、管理员与会员双维度权限、私有数据隔离、系统凭据加密和模型密钥不回显已有服务端测试。
|
||||
- 行情供应商通过唯一 `DataGateway` 和来源策略进入业务层;公开展示源不能进入正式计算。
|
||||
- 情绪、竞价、观势、观气、观心、选股和复盘的核心确定性计算已有固定样本测试。
|
||||
@@ -71,7 +75,8 @@
|
||||
- 图表夜间加载首帧、主题同步切换、7板布局和观心夜间关键文字对比度均已有浏览器直接断言,不再只依赖截图。
|
||||
- 16个主工作区、策略跟踪、提醒、复盘助手、账户/会员及系统管理已逐项区分加载、真实空和失败;统一API客户端不会向页面泄露上游错误正文。
|
||||
- 后台任务不再把`AppError`内部元组直接展示到系统管理;历史记录读取时兼容清理,新增失败按用户可读说明入库。
|
||||
- 本轮验证为Ruff、111项pytest、Vue类型检查、7项Vitest、生产构建和26项Playwright全部通过。
|
||||
- 当前主分支本轮复核为Ruff、113项pytest、Vue类型检查、7项Vitest、生产构建和
|
||||
26项Playwright全部通过。
|
||||
|
||||
## 本轮范围外项目
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# NAS切换清单
|
||||
# NAS切换清单(已作废,禁止执行)
|
||||
|
||||
> `next/`已被用户否决,本清单不再具备切换效力。权威冻结决定见
|
||||
> `../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
此清单是最终人工确认前的准备资产,不授权当前任务停止或替换正式容器。
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 旧实现清理方案
|
||||
# 旧实现清理方案(已作废,禁止执行)
|
||||
|
||||
> `next/`已被用户否决。禁止依据本方案删除原系统任何代码、容器或数据。权威冻结决定见
|
||||
> `../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
本文只定义正式切换后的清理边界,不授权当前阶段删除旧代码、旧容器或旧数据。
|
||||
清理目标是让仓库最终只保留 `next/` 新系统及不可替代的产品和研究资产,不保留两套运行时。
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 人工维护手册
|
||||
# 人工维护手册(失败实现历史资料)
|
||||
|
||||
> `next/`已被冻结,禁止依据本手册继续维护或扩展该实现。后续保真迁移不得把这里的结构当作
|
||||
> 既定方案。权威冻结决定见`../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
## 从哪里开始
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 页面状态覆盖矩阵
|
||||
# 页面状态覆盖矩阵(历史记录,不能证明迁移等价)
|
||||
|
||||
> `next/`已被用户否决。本矩阵不得再作为页面可用性或视觉等价证明,权威冻结决定见
|
||||
> `../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
更新日期:2026-07-30
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 重建版发布候选清单
|
||||
# 重建版发布候选清单(已作废)
|
||||
|
||||
> **禁止部署。** 用户已于2026-07-30否决本实现,`xiaobai-next-rc-20260730-1`不再是有效发布候选。
|
||||
> 本文件仅保留历史记录,权威冻结决定见`../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
发布日期:2026-07-30
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 产品规格覆盖矩阵
|
||||
# 产品规格覆盖矩阵(历史记录,不能证明迁移等价)
|
||||
|
||||
> 本矩阵只证明被列出的新实现契约,不证明与原系统完整功能和视觉等价。`next/`已被用户否决,
|
||||
> 权威冻结决定见`../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
> 本文件记录第25节固定案例的当前直接证据。84个案例已由确定性测试或浏览器直接断言证明;`U04`
|
||||
> 的结构边界已自动验证,但4K信息密度仍需人工视觉验收,因此当前不得表述为“85/85完成”。
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# 减法与结构审计
|
||||
# 减法与结构审计(历史记录,不能作为成功指标)
|
||||
|
||||
> 用户验收确认代码量下降伴随了不可接受的产品偏差。本文件只保留作失败复盘,不得以行数减少
|
||||
> 证明迁移成功。权威冻结决定见`../../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
## 结论
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
# Portainer 网页端预检
|
||||
# Portainer 网页端预检(已作废,禁止执行)
|
||||
|
||||
> 用户已于2026-07-30否决`next/`实现。本流程及其中的Git标签、镜像标签和端口说明全部作废,
|
||||
> 不得在NAS或其他环境执行。权威冻结决定见`../../docs/migration/next失败冻结记录.md`。
|
||||
|
||||
本流程适用于不使用 SSH、通过 Portainer 管理 `192.168.200.11` Docker 的环境。
|
||||
它只在 `8876` 启动重建版,不停止、不修改现有 `8765` 容器,也不授权正式切换。
|
||||
|
||||
@@ -44,3 +44,19 @@ def test_portainer_preflight_is_pinned_to_the_release_candidate() -> None:
|
||||
assert "546c5af1a3010bbf0cf37e5d8b1a440fe6dfbfe80b471cddf430d4363a7b1a4a" in manifest
|
||||
for expected in ("用户 | 3", "自选 | 6", "选股归档 | 107", "策略跟踪 | 16"):
|
||||
assert expected in manifest
|
||||
|
||||
|
||||
def test_image_context_excludes_private_and_non_runtime_assets() -> None:
|
||||
ignored = {
|
||||
line.strip()
|
||||
for line in ROOT.joinpath(".dockerignore").read_text(encoding="utf-8").splitlines()
|
||||
if line.strip() and not line.lstrip().startswith("#")
|
||||
}
|
||||
assert {".git", ".venv", "data", ".env", "docs/evidence", "tests"} <= ignored
|
||||
|
||||
dockerfile = ROOT.joinpath("Dockerfile").read_text(encoding="utf-8")
|
||||
assert "COPY . " not in dockerfile
|
||||
assert "COPY backend/ ./backend/" in dockerfile
|
||||
assert "COPY config/ ./config/" in dockerfile
|
||||
assert "COPY tools/ ./tools/" in dockerfile
|
||||
assert "COPY --from=frontend-build /build/frontend/dist ./frontend/dist" in dockerfile
|
||||
|
||||
@@ -4779,10 +4779,11 @@ class RequestHandler(BaseHTTPRequestHandler):
|
||||
if parsed.path == "/api/auth/me":
|
||||
self.auth_me()
|
||||
return
|
||||
if parsed.path.startswith("/api/") and not self.require_auth():
|
||||
return
|
||||
if not self.require_access("GET", parsed.path):
|
||||
return
|
||||
if parsed.path.startswith("/api/"):
|
||||
if not self.require_auth():
|
||||
return
|
||||
if not self.require_access("GET", parsed.path):
|
||||
return
|
||||
if parsed.path == "/api/admin/settings":
|
||||
self.send_json(
|
||||
{"ok": True, **SERVICE.system_status(), "users": SERVICE.admin_users()}
|
||||
|
||||
@@ -281,6 +281,22 @@ class PublicKnowledgePermissionTests(unittest.TestCase):
|
||||
self.handler("/api/heaven/sector-phases/%E6%B2%B9%E6%B0%94", "send_json")
|
||||
)
|
||||
|
||||
def test_static_shell_bypasses_the_api_access_registry(self):
|
||||
handler = RequestHandler.__new__(RequestHandler)
|
||||
handler.path = "/"
|
||||
handler.require_auth = lambda: (_ for _ in ()).throw(
|
||||
AssertionError("static request required authentication")
|
||||
)
|
||||
handler.require_access = lambda *_: (_ for _ in ()).throw(
|
||||
AssertionError("static request entered the API registry")
|
||||
)
|
||||
served: list[str] = []
|
||||
handler.serve_static = served.append
|
||||
|
||||
RequestHandler.do_GET(handler)
|
||||
|
||||
self.assertEqual(served, ["/"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user