{ "tblname": "pbl_compiler_version", "alias": "pbl_compiler_version_list", "title": "编译器版本(29.6 确定性)", "_comment": "M3b 整改(QC #3):删除根级冗余 browserfields(规范只允许 params.browserfields),根键统一为 tblname/alias/title/params;alias 由 pbl_compiler(与模块同名、生成目录会与模块 wwwroot 冲突)改为 pbl_compiler_version_list;params.editable 补齐 new/update/delete_data_url 对象,三写 URL 指向显式拒绝直写的端点(唯一写入口是契约 pbl_compiler_version_register)。", "params": { "browserfields": { "id": {"label": "ID", "type": "number", "list": true}, "tenant_id": {"label": "租户ID", "type": "text", "list": true}, "code": {"label": "版本编码", "type": "text", "list": true}, "semver": {"label": "语义化版本", "type": "text", "list": true}, "rules_hash": {"label": "规则集SHA256前缀", "type": "text", "list": true}, "entrypoint": {"label": "入口函数", "type": "text", "list": true}, "enabled": {"label": "启用", "type": "checkbox", "list": true}, "notes": {"label": "说明", "type": "text", "list": true} }, "editable": { "get_data_url": { "url": "{{entire_url('/pbl_compiler/api/pbl_compiler_version_list.dspy')}}" }, "new_data_url": { "url": "{{entire_url('/pbl_compiler/api/pbl_compiler_version_create.dspy')}}" }, "update_data_url": { "url": "{{entire_url('/pbl_compiler/api/pbl_compiler_version_update.dspy')}}" }, "delete_data_url": { "url": "{{entire_url('/pbl_compiler/api/pbl_compiler_version_delete.dspy')}}" } }, "new_data_url": "{{entire_url('/pbl_compiler/api/pbl_compiler_version_create.dspy')}}", "update_data_url": "{{entire_url('/pbl_compiler/api/pbl_compiler_version_update.dspy')}}", "delete_data_url": "{{entire_url('/pbl_compiler/api/pbl_compiler_version_delete.dspy')}}", "editexclouded": ["id", "tenant_id", "rules_hash", "created_at", "updated_at"], "_crud_note": "编译器版本行一经登记即不可变(版本 diff 与确定性验证以其 rules_hash 为基线):新增/变更一律走契约 pbl_compiler_version_register(计算 rules_hash + semver 唯一性校验),停用走 enabled=0,禁止物理删除(pbl_game_definition.compiler_version_id 引用它)。三个写端点仅用于满足 editable 格式硬要求并封死 xls2ui 默认写包装,均返回 widgettype=Error。", "order_by": "id DESC", "page_size": 20 } }