diff --git a/init/rbac_seed.json b/init/rbac_seed.json index af618e8..f62c208 100644 --- a/init/rbac_seed.json +++ b/init/rbac_seed.json @@ -1,7 +1,7 @@ { "module": "pbl_runtime_ext", "milestone": "M11b-3 / M11b-4", - "note": "PBL 运行时广播/轮询端点 RBAC 权限种子清单(逐条显式登记,禁止 % / * 通配符)。由 scripts/m11b34_rbac_seed.py 导入 permission/rolepermission,并把 scripts/load_path.py --check 收敛到 rc=0。", + "note": "PBL 运行时广播/轮询端点 RBAC 权限种子清单(逐条显式登记,禁止 % / * 通配符)。由 scripts/m11b34_rbac_seed.py 导入 permission/rolepermission,并把 scripts/load_path.py --check 收敛到 rc=0。traceability 中的函数名与所在文件均为 grep 实测值(响应 QC #20)。", "default_role": "logined", "permissions": [ { @@ -12,7 +12,7 @@ "endpoint": "wwwroot/api/pbl_runtime_event_append.dspy", "milestone": "M11b-2", "title": "运行时事件追加(单事务事件+状态写入)", - "traceability": "契约 pbl_runtime_event_append → pbl_runtime_ext/api.py::api_pbl_runtime_event_append → scripts/load_path.py PATHS[0]" + "traceability": "契约 pbl_runtime_event_append → pbl_runtime_ext/api.py::pbl_runtime_event_append(api.py:44)→ scripts/load_path.py PATHS[0]" }, { "name": "pbl_runtime_event_poll", @@ -22,7 +22,7 @@ "endpoint": "wwwroot/api/pbl_runtime_event_poll.dspy", "milestone": "M11b-4", "title": "运行时事件 3s 轮询兜底拉取", - "traceability": "契约 pbl_runtime_event_poll → pbl_runtime_ext/api.py::api_pbl_runtime_event_poll → scripts/load_path.py PATHS[1]" + "traceability": "契约 pbl_runtime_event_poll → pbl_runtime_ext/api.py::pbl_runtime_event_poll(api.py:74)→ scripts/load_path.py PATHS[1]" }, { "name": "pbl_entity_state_get", @@ -32,7 +32,7 @@ "endpoint": "wwwroot/api/pbl_entity_state_get.dspy", "milestone": "M11b-4", "title": "实体状态读取(服务端权威 state_version)", - "traceability": "契约 pbl_entity_state_get → pbl_runtime_ext/api.py::api_pbl_entity_state_get → scripts/load_path.py PATHS[2]" + "traceability": "契约 pbl_entity_state_get → pbl_runtime_ext/api.py::pbl_entity_state_get(api.py:90)→ scripts/load_path.py PATHS[2]" }, { "name": "pbl_entity_state_apply", @@ -42,7 +42,7 @@ "endpoint": "wwwroot/api/pbl_entity_state_apply.dspy", "milestone": "M11b-2", "title": "实体状态变更申请(客户端禁写 state_version)", - "traceability": "契约 pbl_entity_state_apply → pbl_runtime_ext/api.py::api_pbl_entity_state_apply → scripts/load_path.py PATHS[3]" + "traceability": "契约 pbl_entity_state_apply → pbl_runtime_ext/api.py::pbl_entity_state_apply(api.py:111)→ scripts/load_path.py PATHS[3]" }, { "name": "pbl_world_broadcast", @@ -52,7 +52,7 @@ "endpoint": "wwwroot/api/pbl_world_broadcast.dspy", "milestone": "M11b-3", "title": "服务端世界广播(提交后广播 ≤300ms)", - "traceability": "契约 pbl_world_broadcast → pbl_runtime_ext/api.py::api_pbl_world_broadcast → scripts/load_path.py PATHS[4]" + "traceability": "契约 pbl_world_broadcast → pbl_runtime_ext/api.py::pbl_world_broadcast(api.py:175)→ scripts/load_path.py PATHS[4]" }, { "name": "pbl_session_member_add", @@ -62,7 +62,7 @@ "endpoint": "wwwroot/api/pbl_session_member_add.dspy", "milestone": "M11b-3", "title": "会话成员加入(广播订阅名单维护)", - "traceability": "契约 pbl_session_member_add → pbl_runtime_ext/api.py::api_pbl_session_member_add → scripts/load_path.py PATHS[5]" + "traceability": "契约 pbl_session_member_add → pbl_runtime_ext/api.py::pbl_session_member_add(api.py:211)→ scripts/load_path.py PATHS[5]" }, { "name": "pbl_runtime_broadcast_pull", @@ -72,7 +72,7 @@ "endpoint": "wwwroot/api/pbl_runtime_broadcast_pull.dspy", "milestone": "M11b-4", "title": "广播增量拉取(3s 轮询兜底)", - "traceability": "契约 pbl_runtime_broadcast_pull → pbl_runtime_ext/api.py::api_pbl_runtime_broadcast_pull → scripts/load_path.py PATHS[6]" + "traceability": "契约 pbl_runtime_broadcast_pull → pbl_runtime_ext/m11b_api.py::pbl_runtime_broadcast_pull(m11b_api.py:45,由 api.py:265 经 _m11b 导入再导出)→ scripts/load_path.py PATHS[6]" }, { "name": "pbl_runtime_broadcast_stats", @@ -82,7 +82,7 @@ "endpoint": "wwwroot/api/pbl_runtime_broadcast_stats.dspy", "milestone": "M11b-4", "title": "广播时延统计(裁决/广播/端到端指标)", - "traceability": "契约 pbl_runtime_broadcast_stats → pbl_runtime_ext/api.py::api_pbl_runtime_broadcast_stats → scripts/load_path.py PATHS[7]" + "traceability": "契约 pbl_runtime_broadcast_stats → pbl_runtime_ext/m11b_api.py::pbl_runtime_broadcast_stats(m11b_api.py:83,由 api.py:265 经 _m11b 导入再导出)→ scripts/load_path.py PATHS[7]" } ], "role_grants": { diff --git a/scripts/m11b34_rbac_seed.py b/scripts/m11b34_rbac_seed.py index 3a8fd93..609ec2e 100644 --- a/scripts/m11b34_rbac_seed.py +++ b/scripts/m11b34_rbac_seed.py @@ -295,7 +295,7 @@ def main(): print(' FAIL ' + e) if not ok: return 1 - print(' OK 全部路径逐条显式登记(无 %% / * 通配符);' + print(' OK 全部路径逐条显式登记(无 % / * 通配符);' '种子 ↔ 磁盘 .dspy ↔ load_path.PATHS 三方一致') if args.check: