4.8 KiB
4.8 KiB
pbl_kdb_ext 工作日志 —— 2026-09-18(QC 退回重做轮)
范围 / 背景
- 仓库/模块:机构工作空间
modules/pbl_kdb_ext(PBL Agent OS,项目projects/pbls) - 任务:
[M7] pbl_kdb_ext KDB 只读桩扩展(pipeline_tasks.id =OgtZuajAdd0y65BZdv8jr, iterationpbls-初始迭代,task_kind = new_dev → 本轮为 QC 退回后的重做修复) - 本轮目标:逐条闭环 agent.qc 的 5 条退回意见,不扩大范围(G6 范围纪律:仍零写入, 不新增 kdb.write / research.write / sim.*)。
QC 退回意见 → 处理结果(逐条)
| # | 位置 | 问题 | 处理 |
|---|---|---|---|
| 1 | scripts/load_path.py PATHS |
仅注册 3 个 .dspy,缺 /pbl_kdb_ext 与 /pbl_kdb_ext/index.ui,入口页上线即 403 |
已修:PATHS 补两条 logined 记录(目录路径 + index.ui 文件路径),共 5 条,仍显式枚举无通配符 |
| 2 | wwwroot/index.ui 三处 binds.options.url |
{{entire_url('api/pbl_kdb_search.dspy')}} 为相对路径,可能丢模块前缀 → RBAC 403(module-development-spec 2.3c) |
已修:三处全部改为绝对路径 {{entire_url('/pbl_kdb_ext/api/xxx.dspy')}}(search / get / aggregate) |
| 3 | scripts/load_path.py 第 38 行 |
print(' PENDING %%-12s %s' %(role, path)) —— %% 转义后格式串只剩 1 个 %s 却传 2 个参数,出现 pending 必抛 TypeError,注册失败时脚本崩溃而非打印清单 |
已修:改为 print(' PENDING %-12s %s' % (role, path));同时给 subprocess.call 加 try/except OSError(CLI 不存在时归入 pending 而非崩溃),summary 行补上 MODULE 名 |
| 4 | README.md |
全文仅 15 字节 # pbl_kdb_ext,boilerplate-only(spec 明令禁止) |
已修:重写为 8 节完整文档——模块用途(Q-OPEN-5/6 口径 + G6 范围纪律)、2 张表字段说明(pbl_kdb_item / pbl_kdb_query_log)+ 跨模块只读依赖、3 个契约接口(路径/入参/返回/错误码)、目录结构、挂载方式(load_pbl_kdb_ext + 三处同步铁律 + RBAC 表 + 库名)、只读/匿名聚合 8 条验收约束、依赖、本地校验命令 |
| 5 | 交付摘要清单 vs 磁盘 | 清单声称写入 pbl_kdb_ext/errors.py,实测不存在,声称与事实矛盾 |
已修(走"移除"分支):错误类型/错误码由公共内核 pbl_common.api 的 PblError 统一提供,本模块只抛出不另定义,故 errors.py 不是本任务应产出,已从交付清单移除;README 第 3 节明确写出该决策,保证清单与盘上文件一一对应。api.py 的 import 闭包保持 from pbl_common.api import PblError, ... 不变,无悬空引用 |
关键技术决策
- errors.py 取舍:两个合法分支(补写并纳入 import 闭包 / 从清单移除)中选移除。
理由:
PblError与错误码体系属pbl_common公共内核职责,模块内再建 errors.py 会与 公共内核重复定义、增加两处维护点;本模块仅 2 个错误码(PBL_KDB_NOT_FOUND、PBL_AGG_DIM_INVALID),直接在 api.py 抛出即可。 - load_path.py 健壮性:QC #3 的根因是"失败路径未被测过"。除修格式串外,补
try/except OSError,使set_role_perm.py不在位时走 pending 打印分支(退出码 1), 而不是抛 FileNotFoundError 让 build.sh 第 8 步整体中断。 - index.ui 保持纯 JSON:入口页三张卡片(VBox + binds click →
actiontype: urlwidget→target: app.pbl_kdb_ext_content,mode: replace),内容区 VBox 的id放在 widget 顶层(不是 options 内),符合 bricks 规范;无<link>/<script>标签, 无 fetch/setInterval。 - 范围纪律未破:本轮只改 3 个文件(load_path.py / index.ui / README.md)+ 新增本日志, 未触碰 api.py 的读写语义,未新增任何写入接口。
验证
- 静态:
python3 -m py_compile pbl_kdb_ext/*.py scripts/load_path.py(.py 编译通过);json.load校验wwwroot/index.ui与models/*.json合法性;grep -rn "^import\|^from" wwwroot/ --include='*.dspy'为空(dspy 审计);grep -rn "entire_url(" wwwroot/index.ui | grep -v "/pbl_kdb_ext/"为空(绝对路径核对);grep -c "PENDING %-" scripts/load_path.py= 1 且grep -c "%%" scripts/load_path.py= 0。 - 环境受限未跑:无可用 pbls 测试实例与 MySQL(
pbl_kdb_item/pbl_assessment_record无数据),故未做 HTTP 200 端到端验证与聚合抑制(k_min=5)实测;RBAC 注册未实跑 (set_role_perm.py不在本工作空间),按设计走 PENDING 打印分支。此项留待 deploy_test。
当前状态
- 分支:
main;本轮修改文件:scripts/load_path.py、wwwroot/index.ui、README.md、docs/work-log-2026-09-18.md(新增)。 - 提交由 PM 审核通过后系统统一执行。