api/scripts.py:_build_list_scripts_workspace_descendant_prefix 改回 parent-relative;list_scripts LIKE 改 workspace/%/{parent}/% AND NOT .../%/%;count_scripts 改 workspace/%/%
This task is a duplicate of #57 (same gitea #34). #57 stays in to-do as the canonical tracker; this copy is archived.
**tao.chen** commented:
> ## Archived as duplicate
This task is a duplicate of **#57** (same gitea #34). #57 stays in to-do as the canonical tracker; this copy is archived.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
症状
GET /api/v1/scripts返回空数组GET /api/v1/scripts/count正常(数据库 16 个 active,非 0)根因(已用真实 DB 验证)
提交
d68055a(2026-08-21, align list_scripts visibility with list_resources)把list_scripts改成 workspace-wide,但漏了 owner 段通配。storage_objects.relative_path = workspace/{user_id}/{parent}/{basename}(写入侧 create_script_record 确认;DB 实测 16 条全部符合)
_build_list_scripts_workspace_descendant_prefix("")返回workspace/LIKE 'workspace/%'AND NOTLIKE 'workspace/%/%'(取直接子节点)workspace/{user_id}/xxx(workspace 下第 2 层),全部命中workspace/%/%被 NOT 排除 → 16 active 返回 0对照组
list_resources(69a9a48,正确实现)用的是LIKE '{ws_id}/%/{parent}/%'— 中间的%通配 owner_user_id 段。scripts 端抄的时候把这段通配丢了。
测试为何没拦住
like 'workspace/foo/bar/%'(检查"前缀被发出",不检查真实数据能否命中)
workspace/{user_id}/basename(2 层孙节点)验证根目录 list 能返回
修复(镜像 list_resources)
LIKE 'workspace/%/{parent}/%'AND NOTLIKE 'workspace/%/{parent}/%/%'workspace/%/%验收
Task: pcu5nn8xbxtno5w7cb5zzaj6
MODEL-DEVELOP-PLATFORM-58
tao.chen commented:
改动(3 文件,镜像 list_resources
69a9a48的%owner 通配):api/scripts.py:_build_list_scripts_workspace_descendant_prefix改回 parent-relative;list_scriptsLIKE 改workspace/%/{parent}/%AND NOT.../%/%;count_scripts改workspace/%/%test_list_scripts_parent_path.py/test_count_scripts.py:helper 单测 + SQL 契约断言更新,新增行为回归测试(真实物理布局workspace/{uid}/root.py根目录能列出、排除sub/deep.py)验证:
为什么测试之前没拦住:SQL 契约测试只断言编译后字符串包含
workspace/foo/bar/%(检查前缀被发出,不检查真实数据命中);无测试用真实 2 层孙节点布局验证根目录。已补。tao.chen commented:
This task is a duplicate of #57 (same gitea #34). #57 stays in to-do as the canonical tracker; this copy is archived.