283 lines
7.8 KiB
JSON
283 lines
7.8 KiB
JSON
{
|
||
"task": "[M1b] pbl_blueprint 模板/子对象扩展与关联表",
|
||
"round": "qc-round-5",
|
||
"repo": "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_blueprint",
|
||
"qc_items_addressed": [
|
||
"QC#1",
|
||
"QC#3",
|
||
"QC#4",
|
||
"QC#5",
|
||
"QC#6",
|
||
"QC#7",
|
||
"QC#8"
|
||
],
|
||
"edits": [
|
||
{
|
||
"path": "pbl_blueprint/db.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [
|
||
"esc",
|
||
"sql_exec",
|
||
"sql_rows",
|
||
"sql_scalar",
|
||
"_sor"
|
||
],
|
||
"detail": "already in target form (idempotent no-op)",
|
||
"qc": [
|
||
"QC#4"
|
||
],
|
||
"note": "compat 块由整块 globals().update 改为逐符号解析"
|
||
},
|
||
{
|
||
"path": "pbl_blueprint/errors.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [
|
||
"PblError",
|
||
"ErrorCode",
|
||
"CODE_TO_HTTP",
|
||
"TenantMissingError",
|
||
"assert_not_write_protected"
|
||
],
|
||
"detail": "already in target form (idempotent no-op)",
|
||
"qc": [
|
||
"QC#5"
|
||
],
|
||
"note": "旧类名/错误码面别名补齐(PblError = PblBlueprintError 等)"
|
||
},
|
||
{
|
||
"path": "pbl_blueprint/init.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [
|
||
"_sor",
|
||
"esc",
|
||
"now_str",
|
||
"json_dump",
|
||
"flag"
|
||
],
|
||
"detail": "already in target form (idempotent no-op)",
|
||
"qc": [
|
||
"QC#5"
|
||
],
|
||
"note": "init.py:54 _sor / init.py:66 esc 导出面补齐"
|
||
},
|
||
{
|
||
"path": "pbl_blueprint/m1b/__init__.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [
|
||
"get_env",
|
||
"normalize_tenant",
|
||
"tenant_id",
|
||
"actor_id",
|
||
"crud",
|
||
"load_pbl_common"
|
||
],
|
||
"detail": "already in target form (idempotent no-op)",
|
||
"qc": [
|
||
"QC#3",
|
||
"QC#5"
|
||
],
|
||
"note": "QC#1a get_env 已存在则保持;其余导出面补齐"
|
||
},
|
||
{
|
||
"path": "pbl_blueprint/api_blueprint.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [
|
||
"tenant_id",
|
||
"actor_id",
|
||
"now_str",
|
||
"json_dump",
|
||
"crud"
|
||
],
|
||
"detail": "already in target form (idempotent no-op)",
|
||
"qc": [
|
||
"QC#5"
|
||
],
|
||
"note": "api_blueprint.py:504 处 import 闭包断裂修复"
|
||
},
|
||
{
|
||
"path": "pbl_blueprint/m1b_common.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [
|
||
"PblError"
|
||
],
|
||
"detail": "already in target form (idempotent no-op)",
|
||
"qc": [
|
||
"QC#5"
|
||
],
|
||
"note": "m1b_common.py:114 from .errors import PblError 断裂修复"
|
||
},
|
||
{
|
||
"path": "tests/test_contract.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [
|
||
"esc",
|
||
"_sor",
|
||
"PblError"
|
||
],
|
||
"detail": "already in target form (idempotent no-op)",
|
||
"qc": [
|
||
"QC#5"
|
||
],
|
||
"note": "tests/test_contract.py:439 契约测试导入面补齐"
|
||
},
|
||
{
|
||
"path": "tests/_pytest_shim.py",
|
||
"exists": true,
|
||
"changed": false,
|
||
"symbols": [],
|
||
"detail": "no compat symbols; syntax verified by py_compile stage",
|
||
"qc": [
|
||
"QC#5",
|
||
"QC#7"
|
||
],
|
||
"note": "三元表达式缺 else 的语法错误修复(py_compile 必须通过)"
|
||
}
|
||
],
|
||
"verification": {
|
||
"py_compile": {
|
||
"passed": 64,
|
||
"failed": 0,
|
||
"failures": [],
|
||
"files": [
|
||
"pbl_blueprint/__init__.py",
|
||
"pbl_blueprint/_pbl_common_shim.py",
|
||
"pbl_blueprint/_qc_r5_compat.py",
|
||
"pbl_blueprint/api.py",
|
||
"pbl_blueprint/api_blueprint.py",
|
||
"pbl_blueprint/audit.py",
|
||
"pbl_blueprint/blueprint_crud.py",
|
||
"pbl_blueprint/crud.py",
|
||
"pbl_blueprint/db.py",
|
||
"pbl_blueprint/errors.py",
|
||
"pbl_blueprint/init.py",
|
||
"pbl_blueprint/m1b_api.py",
|
||
"pbl_blueprint/m1b_common.py",
|
||
"pbl_blueprint/m1b_compat.py",
|
||
"pbl_blueprint/m1b_db.py",
|
||
"pbl_blueprint/m1b_init.py",
|
||
"pbl_blueprint/m1b_ref.py",
|
||
"pbl_blueprint/m1b_subobject.py",
|
||
"pbl_blueprint/m1b_template.py",
|
||
"pbl_blueprint/service.py",
|
||
"pbl_blueprint/subobject.py",
|
||
"pbl_blueprint/subobject_ext.py",
|
||
"pbl_blueprint/subobjects.py",
|
||
"pbl_blueprint/tables.py",
|
||
"pbl_blueprint/template_platform.py",
|
||
"pbl_blueprint/templates.py",
|
||
"pbl_blueprint/tenant.py",
|
||
"pbl_blueprint/models/pbl_template.py",
|
||
"pbl_blueprint/m1b/__init__.py",
|
||
"pbl_blueprint/m1b/api.py",
|
||
"pbl_blueprint/m1b/audit.py",
|
||
"pbl_blueprint/m1b/compat.py",
|
||
"pbl_blueprint/m1b/crud_factory.py",
|
||
"pbl_blueprint/m1b/dbutil.py",
|
||
"pbl_blueprint/m1b/env.py",
|
||
"pbl_blueprint/m1b/errors.py",
|
||
"pbl_blueprint/m1b/init.py",
|
||
"pbl_blueprint/m1b/ref.py",
|
||
"pbl_blueprint/m1b/subobject.py",
|
||
"pbl_blueprint/m1b/tables.py",
|
||
"pbl_blueprint/m1b/template.py",
|
||
"pbl_blueprint/m1b/tenant.py",
|
||
"pbl_blueprint/m1b/util.py",
|
||
"tools/m1b_fix_import_closure.py",
|
||
"tools/m1b_fix_import_closure_v2.py",
|
||
"tools/m1b_fix_qc_round4.py",
|
||
"tools/m1b_fix_qc_round5.py",
|
||
"tools/m1b_gen_ddl.py",
|
||
"tools/m1b_import_closure.py",
|
||
"tools/m1b_normalize_models.py",
|
||
"tools/m1b_register_sync.py",
|
||
"tools/m1b_run_tests.py",
|
||
"tools/m1b_selfcheck.py",
|
||
"tools/patch_m1b.py",
|
||
"tools/patch_m1b_init.py",
|
||
"tests/_m1b_loader.py",
|
||
"tests/_pytest_shim.py",
|
||
"tests/fakedb.py",
|
||
"tests/test_contract.py",
|
||
"tests/test_m1b_ext_ref.py",
|
||
"tests/test_m1b_import_closure.py",
|
||
"tests/test_m1b_realdb.py",
|
||
"tests/test_m1b_template.py",
|
||
"tests/test_real_path.py"
|
||
]
|
||
},
|
||
"import_closure": {
|
||
"checked_imports": 744,
|
||
"broken": 0,
|
||
"broken_detail": [],
|
||
"modules_scanned": 64
|
||
},
|
||
"smoke_import": {
|
||
"returncode": 0,
|
||
"imported": [
|
||
"pbl_blueprint",
|
||
"pbl_blueprint._qc_r5_compat",
|
||
"pbl_blueprint.errors",
|
||
"pbl_blueprint.db",
|
||
"pbl_blueprint.init",
|
||
"pbl_blueprint.m1b"
|
||
],
|
||
"failed": [],
|
||
"unresolved": [],
|
||
"unresolved_registry": [],
|
||
"esc_selftest": [
|
||
"NULL",
|
||
"1",
|
||
"'O''Brien'"
|
||
],
|
||
"stdout_tail": "@@JSON@@{\"imported\": [\"pbl_blueprint\", \"pbl_blueprint._qc_r5_compat\", \"pbl_blueprint.errors\", \"pbl_blueprint.db\", \"pbl_blueprint.init\", \"pbl_blueprint.m1b\"], \"failed\": [], \"unresolved\": [], \"unresolved_registry\": [], \"esc_selftest\": [\"NULL\", \"1\", \"'O''Brien'\"]}\n",
|
||
"stderr_tail": ""
|
||
}
|
||
},
|
||
"cross_module_debt": [
|
||
{
|
||
"consumer": "pbl_agent_runtime",
|
||
"provider": "pbl_common",
|
||
"symbols": [
|
||
"PblError",
|
||
"ErrorCode",
|
||
"normalize_tenant",
|
||
"TenantMissingError",
|
||
"CODE_TO_HTTP",
|
||
"assert_not_write_protected"
|
||
],
|
||
"reason": "pbl_common 半迁移重写删除既有符号面;按引擎裁决不计入本任务门禁",
|
||
"action": "冒泡 PM:由 pbl_common 责任任务补兼容符号层(设计文档 §5 向后兼容)"
|
||
},
|
||
{
|
||
"consumer": "pbl_appcodes / pbl_validation / pbl_compiler 等",
|
||
"provider": "pbl_common.api",
|
||
"symbols": [
|
||
"load_pbl_common",
|
||
"sql_exec",
|
||
"sql_rows",
|
||
"sql_scalar",
|
||
"now_str",
|
||
"json_dump",
|
||
"actor_id",
|
||
"tenant_id",
|
||
"crud",
|
||
"flag"
|
||
],
|
||
"reason": "pbl_common.api 契约符号未重新导出",
|
||
"action": "冒泡 PM:pbl_common 按设计文档 §3 契约表重新导出全套符号"
|
||
}
|
||
],
|
||
"gate": {
|
||
"py_compile_failed": 0,
|
||
"closure_broken": 0,
|
||
"pass": true
|
||
}
|
||
}
|