فهرست منبع

fix(realtime-control): preserve full mode for automation accounts

刘立冬 2 روز پیش
والد
کامیت
df822b0c37
3فایلهای تغییر یافته به همراه6 افزوده شده و 4 حذف شده
  1. 2 1
      AGENTS.md
  2. 2 1
      examples/tencent_realtime_control/README.md
  3. 2 2
      examples/tencent_realtime_control/storage.py

+ 2 - 1
AGENTS.md

@@ -19,7 +19,8 @@
 - 生产使用同一个完整 `ad-put-agent` 镜像启动两个容器:`ad-control-service` 和 `ad-daily-service`。
 - 生产使用同一个完整 `ad-put-agent` 镜像启动两个容器:`ad-control-service` 和 `ad-daily-service`。
 - `ad-control-service` 负责唯一飞书 WebSocket、运营暂停/停止/恢复、ROI 表格逐行审批执行和每 10 分钟实时 CPM 调控。
 - `ad-control-service` 负责唯一飞书 WebSocket、运营暂停/停止/恢复、ROI 表格逐行审批执行和每 10 分钟实时 CPM 调控。
 - 实时调控账户范围是历史 `ad_creation_account_config` 与启用白名单的交集;飞书关闭创建配置只停止新建/补创意,不能让既有广告退出实时管理。
 - 实时调控账户范围是历史 `ad_creation_account_config` 与启用白名单的交集;飞书关闭创建配置只停止新建/补创意,不能让既有广告退出实时管理。
-- `realtime_control_account_scope` 可独立纳管非自动创建账户;显式配置覆盖自动化账户默认模式。`PAUSE_ONLY` 账户只执行 CPM 关停,不能执行 BOOST 或 RESTORE 调价。
+- 自动化账户始终使用完整实时调控模式;同一账户同时出现在额外纳管范围时,不能被 `PAUSE_ONLY` 降级。
+- `realtime_control_account_scope` 可独立纳管非自动创建账户;其中 `PAUSE_ONLY` 账户只执行 CPM 关停,不能执行 BOOST 或 RESTORE 调价。
 - `ad-daily-service` 每天 10:30 调用现有广告/创意创建流程,每 2 小时扫描腾讯创意正式审核结果,并可在每天 11:00 计算和发布日级 ROI 批次。
 - `ad-daily-service` 每天 10:30 调用现有广告/创意创建流程,每 2 小时扫描腾讯创意正式审核结果,并可在每天 11:00 计算和发布日级 ROI 批次。
 - 旧 `server.py`、`execute_once.py` 和 `run.py` 的模型调控链路不再作为生产入口,但暂不删除历史代码。
 - 旧 `server.py`、`execute_once.py` 和 `run.py` 的模型调控链路不再作为生产入口,但暂不删除历史代码。
 - 飞书生产控制命令优先使用确定性解析;模型只能分类为受限的动作和范围类型,最终账户集合必须由代码从原文和数据库确定,模型不能执行腾讯写操作。
 - 飞书生产控制命令优先使用确定性解析;模型只能分类为受限的动作和范围类型,最终账户集合必须由代码从原文和数据库确定,模型不能执行腾讯写操作。

+ 2 - 1
examples/tencent_realtime_control/README.md

@@ -75,7 +75,8 @@ ODPS 小时分区可能延迟。当天尚未出现 `06` 点及之后的分区时
 总消耗、曝光、点击和转化总览,不展示逐账户明细。部分账户查询失败时会明确标记为部分数据。
 总消耗、曝光、点击和转化总览,不展示逐账户明细。部分账户查询失败时会明确标记为部分数据。
 
 
 “全部”范围包括历史自动化账户与 `realtime_control_account_scope` 中显式纳管的
 “全部”范围包括历史自动化账户与 `realtime_control_account_scope` 中显式纳管的
-账户。预览会查询腾讯当日广告报表,逐账户展示影响广告数和今日消耗;报表失败
+账户。历史自动化账户始终使用 `FULL` 模式;同一账户同时出现在显式纳管范围时,
+不能被 `PAUSE_ONLY` 降级。预览会查询腾讯当日广告报表,逐账户展示影响广告数和今日消耗;报表失败
 时禁止确认。所有写操作必须在 10 分钟内回复带命令 ID 的确认消息。重叠的待确认
 时禁止确认。所有写操作必须在 10 分钟内回复带命令 ID 的确认消息。重叠的待确认
 命令会被拒绝,执行时只处理预览阶段冻结的广告 ID,并继续使用共享数据库锁和
 命令会被拒绝,执行时只处理预览阶段冻结的广告 ID,并继续使用共享数据库锁和
 腾讯写后回读。
 腾讯写后回读。

+ 2 - 2
examples/tencent_realtime_control/storage.py

@@ -286,7 +286,7 @@ def load_all_spend_accounts() -> list[dict[str, Any]]:
 
 
 
 
 def load_realtime_accounts() -> list[dict[str, Any]]:
 def load_realtime_accounts() -> list[dict[str, Any]]:
-    """Load automation accounts plus explicit real-time scope overrides."""
+    """Load full-control automation accounts plus explicit extra scope."""
     connection = connect()
     connection = connect()
     try:
     try:
         with connection.cursor() as cursor:
         with connection.cursor() as cursor:
@@ -312,7 +312,7 @@ def load_realtime_accounts() -> list[dict[str, Any]]:
                 """
                 """
             )
             )
             for row in cursor.fetchall():
             for row in cursor.fetchall():
-                accounts[int(row["account_id"])] = row
+                accounts.setdefault(int(row["account_id"]), row)
             return [accounts[key] for key in sorted(accounts)]
             return [accounts[key] for key in sorted(accounts)]
     finally:
     finally:
         connection.close()
         connection.close()