flow-settle 是 CocoPlus 体系中的一个技能,目标是对已保留的 CocoFlow 提案进行结算(settle)。这些提案可能涉及 Snowflake DDL、SQL 文件写入或流水线配置变更,它们被有意保留在实时项目之外,直到操作者决定接受或丢弃。
使用前提
在执行任何操作前,需要确认当前目录下存在 .cocoplus/ 目录。如果不存在,应输出提示:“CocoPlus not initialized in this directory. Run $pod init to begin.”,然后停止。
提案位置
提案存放在 .cocoplus/proposals/<stage-id>/<timestamp>/ 路径下。
命令
$flow settle --accept <stage-id>:列出该阶段待处理的提案,显示最新提案摘要,要求显式确认,然后通过底层功能正常的审批门禁将提案应用到实时项目或环境,最后向 .cocoplus/proposals/proposal-log.jsonl 追加一条 ACCEPTED 记录。
$flow settle --discard <stage-id>:将最新的待处理提案标记为已丢弃,保留提案目录以便追溯审查,然后向 .cocoplus/proposals/proposal-log.jsonl 追加一条 DISCARDED 记录。
$flow settle --list:按阶段分组显示所有待处理提案。
不变量
在 --accept 之前,不得触碰 Snowflake、已提交的 SQL 或流水线配置。
丢弃不会删除提案,只改变结算状态。
结算必须保留原始阶段 ID、时间戳、操作者决定和摘要。
退出标准
已接受的提案具有结算日志记录。
已丢弃的提案仍可检查。
任何启用提案的阶段都不会直接写入实时环境。
反合理化
技能契约必须描述可观察的行为和验证方式,而不仅仅是命令名称。
即使是小命令也会改变状态或引导执行,因此应保留相同的门禁。