Skip to content

fix(core): 非 dict 空间坐标写入即拒 + v1.7 迁移跳过新格式节点 - #1151

Closed
STARDUSTLC666 wants to merge 3 commits into
FuRongJun-1999:mainfrom
STARDUSTLC666:fix/279-v17-migration-once-20261030
Closed

STARDUSTLC666 wants to merge 3 commits into
FuRongJun-1999:mainfrom
STARDUSTLC666:fix/279-v17-migration-once-20261030

Conversation

@STARDUSTLC666

Copy link
Copy Markdown
Contributor

修复 #279(P1,core/启动·迁移)的剩余面:非 dict 坐标写入不校验 + v1.7 迁移每次构造都把新写入的合法 neural_* 轴搬走。

说明:既有 tests/test_issue279_startup_migration_shortcircuit_guard.py 已覆盖「无候选行零解析」的启动短路(SQL 候选筛)。本 PR 补的是另外两面:写入侧 fail-closed 与「新格式节点不被旧迁移二次搬移」。

改了什么 / 为什么

验证方式与读数

# 改前(3552ec3)
add_perception(spatial_coordinates=[...])       -> 写入成功、重启迁移容错跳过
store.add_node(spatial_coordinates=5)           -> 写入成功(to_row 不校验)
新库写 {x, neural_gain:0.3},重启             -> spatial={'x':1.0}(neural_* 被搬走)

# 改后
add_perception(list) / store.add_node(5)        -> TypeError
新库写 {x, neural_gain:0.3},重启             -> spatial={'x':1.0,'neural_gain':0.3}
旧库直接 SQL 坏坐标行,重启                    -> 不崩(迁移容错,对照)

python -X utf8 tests/test_issue279_v17_migration.py            # 通过 11 / 失败 0
python -X utf8 tests/test_issue279_v17_migration.py --mutate   # 3 条变异各自恰好命中
# 基线对照(origin/main core.py):通过 2 / 失败 9
python -m pytest tests/test_issue279_startup_migration_shortcircuit_guard.py \
  tests/test_issue691_v17_bad_row_guard.py tests/test_core_export_all.py \
  tests/test_core_legacy_schema_migration.py tests/test_issue264_spatiotemporal_full_scan_guard.py \
  tests/test_issue691_flywheel_reuse_backup_guard.py tests/test_issue691_negative_memory_fulltext_guard.py \
  tests/test_issue691_prune_protected_guard.py tests/test_issue691_z3_action_facade_guard.py \
  tests/test_spatiotemporal_zero_radius.py -q   # 36 passed
实测 未改基线 3552ec3 本分支
add_perception(list) / add_node(5) 写入成功 TypeError(fail-closed)
新库写 neural_gain 后重启 被搬走 保留
旧库坏坐标行重启 不崩(既有容错) 不崩(不变)
真实迁移后 _v17_migrated 无 有
test_issue691_v17_bad_row_guard 4 passed 4 passed
test_issue279_startup_migration_shortcircuit_guard 7 passed 7 passed

具名反面对照(--mutate)

  • M1 撤 add_perception 校验 ⇒ A01 红。
  • M2 撤 to_row 校验 ⇒ A02/A03 + E02 红。
  • M3 撤 v17_native 候选排除 + 循环跳过 ⇒ B02 红(新轴被搬走)。

三条变异各自恰好命中期望红集;变异后源码字节级还原。

边界与不做项

  • 既有行为变化:add_perception / store.add_node 的非 dict 坐标从「静默落库」改为「写入前拒绝」;带坐标的新节点多一个内部标签 v17_native。
  • 迁移语义:_v17_migrated 只在真实迁移后写;空库/仅新格式节点不写,保留「构造后补写旧格式仍迁移」的既有回归语义。
  • 未覆盖:修复前已落库的非 dict 坐标行(迁移会跳过并保留原文,需人工修);SUB 实例的本地层迁移标记语义(本件只在 PRIMARY 写标记)。
  • 未测:Linux/WSL 复跑(本机 Windows 读数);全量 CI。

Fixes #279

- STNode.to_row / add_perception:spatial_coordinates 必须是 dict 或 None;
  list/标量/字符串列表不再原样落库(旧形态会随 export_all 扩散,重启迁移虽
  已容错跳过,但坏数据面仍在)。
- add_perception 给带坐标的新节点打内部标签 v17_native;migrate_v17_coordinates
  的候选筛与全表循环都跳过该标签——新写入的合法 neural_* 轴不再被下次启动
  搬进 semantic_coordinates(FuRongJun-1999#279 的 D 面)。候选筛用 COALESCE(tags,'') 兜住
  旧行的 NULL tags。
- 真实迁移完成后写 _v17_migrated 标记;空库/仅新格式节点不写,保持与
  test_issue691_v17_bad_row_guard 的「构造后补写旧格式仍迁移」语义一致。
- 新增 tests/test_issue279_v17_migration.py:11 断言 + 3 定点变异;基线 2/11、
  修复后 11/11;FuRongJun-1999#279 既有 7 + FuRongJun-1999#691 4 + core 相关共 36 passed。
@FuRongJun-1999

Copy link
Copy Markdown
Owner

维护侧处置(值守第 143 轮):契约已被合并工作满足,关闭指向

本件修的缺陷(#279:每次构造对全表跑 migrate_v17_coordinates)——维护侧复核:当前 main 的 migrate_v17_coordinates 已是 SQL 下推候选筛(SELECT spatial_coordinates FROM nodes WHERE instr(spatial_coordinates, '"protocol_') > 0 OR ...,见 core.py),候选行为零时零 Python 侧解析——与本件 _V17_CANDIDATE_SQL 短路等价实现已先行落地(#691 坏行守卫批次将前置筛收进 SQL 时即覆盖该面)。

本端实测:你的守卫 tests/test_issue279_startup_migration_shortcircuit_guard.py(7 条:A 零解析/B 不误跳/C 构造期/D 幂等/E 嵌套边界/F 防误杀/G 坏行新边界)在当前 main(5674c12)上 7 passed 全绿——契约已满足。

净 diff 说明:直接合并会回退已合工作(对本件 base 的 diff 含 #1138/#1143/#1146 系删除)。若你的实现与现行实现有行为差异想讨论(如候选筛的子串口径),欢迎带 A/B 读数另开。

关闭指向 #691 修复批(test_issue691_v17_bad_row_guard.py 承载)。感谢独立修复——守卫的 A/B/D/E/F 分组与「削掉的判别力如实钉住」(G 组)质量很高。

@FuRongJun-1999

Copy link
Copy Markdown
Owner

契约已被 #691 修复批先行满足(你的守卫 7 条在 main 全绿)——关闭指向,避免回退已合工作。感谢贡献。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants