debug('pbl_artifact_options.dspy: START params_kw=' + str(dict(params_kw))) # 下拉数据源(json/pbl_evidence.json -> browserfields.alters.artifact_id.dataurl) # 契约:必须返回**裸 JSON 数组** [{value,text},...],异常/空数据返回 [], # 不许包 status/data(crud-definition-spec Pitfall:包了会让下拉静默不渲染)。 # 后端函数 pbl_artifact_options 由 load_pbl_evidence() 注册到 ServerEnv(init.py ③)。 # dspy 禁项:无 import、无 f-string(日志一律字符串拼接)。 try: _rows = await pbl_artifact_options(**dict(params_kw)) if not isinstance(_rows, list): _rows = [] debug('pbl_artifact_options.dspy: OK rows=' + str(len(_rows))) return json.dumps(_rows, ensure_ascii=False) except Exception as e: debug('pbl_artifact_options.dspy: FAIL ' + str(e)) debug('pbl_artifact_options.dspy: TRACE ' + str(format_exc())) return json.dumps([], ensure_ascii=False)