从 #116 衍生(与 #116 解耦,无论帧寻址走 / 还是 · 都独立成立)。
现象
对以 ·(OBJ_SEP)结尾的目录建 ext_index:两后端都 rc=0 建立成功,但读取时永不回落——建索引静默成功、解析静默失效。按 p1「绝不容许代码以奇怪的方式成功运行」,这是必须杀掉的牛。
validate_dir / bad_dir_prefix 宣称 · 是合法目录分隔符(明确接受 · 结尾前缀),但 extindex 的建立与解析都不遵守。
根因(两后端各不相同,症状一致,均已逐行核对现状)
durable / fs — resolve_parent(kvspace-durable/src/fs/kvspace.rs:210-223):
is_dir_key 对 / 与 · 结尾都判 true,strip_dir_suf 剥掉尾分隔符,但 :219-221 无条件 result.push_str(DIR_INDEX_SUF) 把 / 补回——丢掉了「剥掉的是哪一种分隔符」。于是 ext_index("…/[3]·") 的 marker 写到 …/[3]/__extindex__,数据却落在 …/[3]·/。读路径去 [3]·/__extindex__ 扑空 → 无回落。(引入的 SepKind 只用于 split_index,未救此处。)
kvspace-c / shm — ext 回落走 psplit(kvspace-c/src/kvspace.c:562-563,kvspace.c:905 处调用),而 psplit 只 strrchr(k, '/'),不认 · 边界。…/[3]·[1,0] 被切成父目录 …/ + 成员名 [3]·[1,0],去查 …/ 的 extindex 扑空。同文件已有认 · 的 split(:995「取末段最后一个 ·」),但 ext 回落路径没用它。
次生问题:· 目录下写坐标成员会触发 __map__ 标记(fs/kvspace.rs MAP_MARKER),把目录误标成 strkeymapindex;parse_coord 拒绝负分量(如 [0,-1])后 grow_coord_dims 退化成「1 维、长度=成员数」,即该目录被错误标成 1 元素 ndarray。
修复方向(择一,当前静默成功是最坏选项)
- 修:
resolve_parent 记住剥掉的分隔符种类(补回 · 而非恒 /);kvspace-c ext 回落改用认 · 的 split(:995)而非 psplit。
- 报错:
ext_index 入口对 · 结尾路径直接返回错误,明确「extindex 只支持 / 目录」。
· 目录坐标成员被误标 strkeymapindex / dims 退化是同一处的次生问题,随之处理。
关联:#116
从 #116 衍生(与 #116 解耦,无论帧寻址走
/还是·都独立成立)。现象
对以
·(OBJ_SEP)结尾的目录建ext_index:两后端都rc=0建立成功,但读取时永不回落——建索引静默成功、解析静默失效。按 p1「绝不容许代码以奇怪的方式成功运行」,这是必须杀掉的牛。validate_dir/bad_dir_prefix宣称·是合法目录分隔符(明确接受·结尾前缀),但 extindex 的建立与解析都不遵守。根因(两后端各不相同,症状一致,均已逐行核对现状)
durable / fs —
resolve_parent(kvspace-durable/src/fs/kvspace.rs:210-223):is_dir_key对/与·结尾都判 true,strip_dir_suf剥掉尾分隔符,但 :219-221 无条件result.push_str(DIR_INDEX_SUF)把/补回——丢掉了「剥掉的是哪一种分隔符」。于是ext_index("…/[3]·")的 marker 写到…/[3]/__extindex__,数据却落在…/[3]·/。读路径去[3]·/__extindex__扑空 → 无回落。(引入的SepKind只用于split_index,未救此处。)kvspace-c / shm — ext 回落走
psplit(kvspace-c/src/kvspace.c:562-563,kvspace.c:905处调用),而psplit只strrchr(k, '/'),不认·边界。…/[3]·[1,0]被切成父目录…/+ 成员名[3]·[1,0],去查…/的 extindex 扑空。同文件已有认·的 split(:995「取末段最后一个 ·」),但 ext 回落路径没用它。次生问题:
·目录下写坐标成员会触发__map__标记(fs/kvspace.rsMAP_MARKER),把目录误标成strkeymapindex;parse_coord拒绝负分量(如[0,-1])后grow_coord_dims退化成「1 维、长度=成员数」,即该目录被错误标成 1 元素 ndarray。修复方向(择一,当前静默成功是最坏选项)
resolve_parent记住剥掉的分隔符种类(补回·而非恒/);kvspace-c ext 回落改用认·的 split(:995)而非psplit。ext_index入口对·结尾路径直接返回错误,明确「extindex 只支持/目录」。·目录坐标成员被误标strkeymapindex/ dims 退化是同一处的次生问题,随之处理。关联:#116