# api/pbl_team_bind_world.dspy — 契约端点:团队绑定世界(写 pbl_domain_ref ref_type=world team_id=...,幂等) # 实现:pbl_domain_ext/api.py:pbl_team_bind_world(init.py 经 load_pbl_domain_ext() 注册为 ServerEnv 全局 env.pbl_team_bind_world) # 入参:tenant_id* world_id* team_id* class_id operator_id # 规范:module-development-spec §2.5 —— dspy 无 import、显式 return、转发**全部**客户端参数(禁硬编码 dispatch 字段) # 薄扩展铁律:只读写关联表 pbl_domain_ref,基表 world/scene/entity 一律只读(Q-OPEN-3) debug('pbl_team_bind_world.dspy: START params_kw=%s' % (dict(params_kw) if params_kw else {})) try: _params = dict(params_kw) if params_kw else {} _resp = pbl_team_bind_world(_params) if not isinstance(_resp, dict): _resp = {'success': False, 'code': 'PBL_DE_INTERNAL', 'message': '契约函数返回非 dict', 'data': None} debug('pbl_team_bind_world.dspy: DONE success=%s code=%s' % (_resp.get('success'), _resp.get('code'))) return _resp except Exception as exc: debug('pbl_team_bind_world.dspy: FAIL %s' % format_exc()) return {'success': False, 'code': 'PBL_DE_INTERNAL', 'message': str(exc), 'detail': format_exc(), 'http_status': 500, 'data': None}