按照四状态表,加入虚构的 export_preview 分支。 变更仅限于在 preview 与 legacy 导出界面之间作选择。 实现纯分支选择策略,并把适配器作为独立部分明确列出。 尚未就绪、求值出错或值类型无效时,使用 legacy。 先检查错误。绝不将字符串 "false" 强制转换成布尔值。 根据所选提供方的文档,确定就绪、错误及缓存的映射。 没有明确且检查过的策略,不得把过期数据当成已就绪结果。 打开流程时求值;同一流程内保持选择不变。 保留现有权限检查、导出数据规则及 legacy 流程。 不要修改线上开关配置、目标用户群、部署或遥测采集。 交付实现、五个分支用例、提供方相关的未明事项, 以及填好的决策卡供审阅。辅助函数测试、适配器测试 和真实界面检查分别报告。分批开放及移除开关, 由负责人明确决定,不在实施过程中直接执行。 四种应用状态: | 应用状态 | 条件 | 用户看到的流程 | | --- | --- | --- | | `ON` | 已就绪、无错误,值为布尔 `true` | 新的导出预览界面 | | `OFF` | 已就绪、无错误,值为布尔 `false` | 现有导出界面 | | `NOT_READY` | 无错误,但适配器尚未就绪 | 现有导出界面 | | `ERROR` | 求值出错或值的类型无效 | 现有导出界面 | 纯分支选择示例(非SDK接入): ```python def choose_export(ready, value, error=None): if error is not None: return {"path": "legacy", "state": "ERROR"} if not ready: return {"path": "legacy", "state": "NOT_READY"} if type(value) is not bool: return {"path": "legacy", "state": "ERROR"} return { "path": "preview" if value else "legacy", "state": "ON" if value else "OFF", } ``` 完整决策卡模板(空白不是批准): 开关:export_preview 控制的变更:仅新的预览界面 默认与回退:legacy 界面 求值时机:打开新的导出流程时;同一流程内保持选择不变 决策负责人:[具体人员或角色] 实施者:[具体人员或角色] 初始用户范围:[明确获准的用户群] 当前部署与服务提供方配置:[标识符] 首次开放前: - 在真实适配器中确认四种应用状态。 - 确认两条流程都执行导出权限检查。 - 确认代表性文件符合约定的导出规则。 - 确认 legacy 流程存在且可用。 扩大用户范围前: - 记录实际观察了哪个用户群、做了哪些检查,以及真实结果。 - 记录尚未解决的错误和决策负责人的决定。 - 明确下一批用户群;不要因无人反对就视为获准。 出现以下任一情况时,退回 legacy: - 预览选错或导出了错误记录;或 - 两条流程所需的权限行为不一致;或 - 阻断使用的预览故障没有已获接受的替代处理办法。 回退动作:有权作出决定的负责人,为新打开的流程关闭预览。 验证:通过真实适配器,确认新打开的流程选择 legacy。 已打开流程的处理:[如果需要中断,另行作出决定] 其他恢复工作:[如适用,填写文件、数据或部署方面的操作]