From 2e90ed65f676ccaa7eac5025037c841bf5f201a1 Mon Sep 17 00:00:00 2001 From: erio Date: Tue, 21 Apr 2026 15:42:38 +0800 Subject: [PATCH] fix(monitor): migration 114 rewrite Claude Code template user_id to legacy format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 113 的 seed 用 legacy user_id,但 prod/beta 此前手工建过同名模板(新版 JSON-string user_id),113 的 ON CONFLICT DO NOTHING 无法覆盖。114 定向修复: - 模板表:jsonb_set user_id → legacy format,仅当当前值仍以 '{' 开头(避免 覆盖用户自定义)。 - 监控快照:同步更新所有 template_id 指向此模板、且快照 user_id 还是 JSON-string 的监控。template_id 过滤保证自定义监控不被动。 幂等:第二次 UPDATE 0 行(LIKE '{%' 不再匹配 legacy 格式)。 --- backend/cmd/server/VERSION | 2 +- .../114_fix_claude_code_template_userid.sql | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 backend/migrations/114_fix_claude_code_template_userid.sql diff --git a/backend/cmd/server/VERSION b/backend/cmd/server/VERSION index 0c2399b355..1a774bb177 100644 --- a/backend/cmd/server/VERSION +++ b/backend/cmd/server/VERSION @@ -1 +1 @@ -0.1.114.35 +0.1.114.36 diff --git a/backend/migrations/114_fix_claude_code_template_userid.sql b/backend/migrations/114_fix_claude_code_template_userid.sql new file mode 100644 index 0000000000..1591c5665f --- /dev/null +++ b/backend/migrations/114_fix_claude_code_template_userid.sql @@ -0,0 +1,36 @@ +-- Migration: 114_fix_claude_code_template_userid +-- 113 的 seed 使用 legacy 格式的 metadata.user_id,但已部署环境此前是手工建的 +-- 「Claude Code 伪装」模板(用新版 JSON-string 格式 user_id),113 的 ON CONFLICT +-- DO NOTHING 不会覆盖。本 migration 定向修复这一条历史记录及其下游监控快照。 +-- +-- 安全性:WHERE 条件同时匹配 (provider, name) + user_id 以 '{' 开头, +-- 所以: +-- - 用户自己改过 user_id(或者 seed 本来就是 legacy)→ LIKE 不中,保持原状 +-- - 用户改过 template name / provider → WHERE 不中,完全跳过 +-- 幂等:第二次跑时 user_id 已经是 legacy 格式,LIKE '{%' 不中,UPDATE 0 行。 + +UPDATE channel_monitor_request_templates +SET body_override = jsonb_set( + body_override, + '{metadata,user_id}', + '"user_0000000000000000000000000000000000000000000000000000000000000000_account_00000000-0000-0000-0000-000000000000_session_00000000-0000-0000-0000-000000000000"'::jsonb, + false + ), + updated_at = NOW() +WHERE provider = 'anthropic' + AND name = 'Claude Code 伪装' + AND body_override #>> '{metadata,user_id}' LIKE '{%'; + +-- 同步已应用此模板的监控快照(监控采用 snapshot 语义,只更新那些明显还是 seed 原样的)。 +UPDATE channel_monitors m +SET body_override = jsonb_set( + m.body_override, + '{metadata,user_id}', + '"user_0000000000000000000000000000000000000000000000000000000000000000_account_00000000-0000-0000-0000-000000000000_session_00000000-0000-0000-0000-000000000000"'::jsonb, + false + ) +FROM channel_monitor_request_templates t +WHERE m.template_id = t.id + AND t.provider = 'anthropic' + AND t.name = 'Claude Code 伪装' + AND m.body_override #>> '{metadata,user_id}' LIKE '{%';