rogee
e4c0186f96
fix(events): isolate subscription overflow instead of killing the shared channel
...
douyin-release-gate / verify (push) Failing after 21m22s
One slow account's full subscription buffer no longer tears down the
WebSocket shared by all accounts on the gateway. The overflowing
subscription is retired with an explicit error and replays unacked
deliveries on resubscribe; the buffer grows from 2 to 64 messages.
2026-10-08 21:57:12 +08:00
rogee
360bf96bab
feat: push Douyin events through shared WebSocket and SSE
douyin-release-gate / verify (push) Failing after 18m0s
2026-10-07 23:45:32 +08:00
rogee
26fa98d907
feat(events): refine aggregation ordering and presentation
2026-10-07 20:12:19 +08:00
rogee
f345e368df
feat: configure OpenAI-compatible AI services and discover models
douyin-release-gate / verify (push) Failing after 19m29s
2026-10-07 17:17:33 +08:00
rogee
b4705f3256
fix: assign independent profiles to anonymous creator browsers
2026-10-07 13:31:57 +08:00
rogee
d94f83cde9
fix(messages): stabilize conversation ordering by real message time
douyin-release-gate / verify (push) Failing after 18m44s
2026-10-07 13:13:06 +08:00
rogee
142c176423
fix(messages): use chat profiles and diagnose stale gateway responses
2026-10-07 12:07:22 +08:00
rogee
5428ab9e0b
fix(messages): sync and display real peer nicknames
2026-10-07 11:36:28 +08:00
rogee
e50bed9ad8
feat: add account events and private message management
...
douyin-release-gate / verify (push) Failing after 18m54s
Add Douyin notification polling, event details, and manual multi-account private messaging.
Refine environment memory settings, account operations, login collection recovery, and message UI; update tests and documentation.
2026-10-07 10:23:05 +08:00
rogee
0b4a7e12a1
fix: register public work schema update without migration collision
2026-10-06 16:56:29 +08:00
rogee
9573e0cbcf
fix: align applied listener schema while preserving data
2026-10-06 15:49:34 +08:00
rogee
b984202ebb
feat: add source-separated comment aggregation page
2026-10-06 14:55:02 +08:00
rogee
fa7b78797d
feat: unify owned and competitor work analysis
2026-10-06 14:40:32 +08:00
rogee
950b23da32
feat: unify account environments and work collection
2026-10-06 13:00:29 +08:00
rogee
4180ec104c
fix: cache owned work covers as UID-scoped static image files
2026-10-06 11:56:01 +08:00
rogee
94df412579
fix(accounts): restore gateway selection and use creation modal
2026-10-06 10:28:58 +08:00
rogee
f1a62e25de
feat(account): create browser environments before verified login
douyin-release-gate / verify (push) Failing after 4m22s
2026-10-06 05:55:53 +08:00
rogee
d0b95ba236
fix(account): isolate destructive PostgreSQL tests
2026-10-06 00:08:19 +08:00
rogee
2c4fe307f7
feat(api): 账号环境指纹更新端点——PUT /creator/accounts/:id/fingerprint 单独保存并按需重启
...
- Store.UpdateAccountFingerprint:更新账号绑定环境指纹,seed 保持账号派生值,携带代理直接拒绝(门禁对齐 CreateBoundEnv)
- 运行中的环境先停后启以应用新指纹,未运行仅落库下次启动生效;账号资源锁防并发冲突
- accountEnvironmentView 内联 fingerprint 回显,编辑页预填数据源
- 覆盖:store 层 seed 保留/校验拒绝/JSON 往返、路由畸形入参、PG 端到端(保存/回显/持久化/400/404)
2026-09-30 17:12:56 +08:00
rogee
3e809c4fc7
feat(creator): 监控账号画像采集入库——粉丝/关注/获赞/作品数与作者介绍
...
抖音 profile/other 响应本就携带画像数据但被丢弃,同步链路也无回填。
- migration 1046: creator_competitor 增加 signature、total_favorited 列及非负约束
- douyin 解析层: TargetProfile 增加签名与计数,total_favorited 兼容字符串大数
- store: UpdateCompetitorProfile 改为画像回填(nil 计数保留原值)
- 同步链路: 作品采集成功后拉取 profile 回填,失败仅记日志不阻断
2026-09-30 16:37:56 +08:00
rogee
f1cabd2c30
feat(accounts): 自有账号列表展示运行环境——monitor-views 内联网关/环境/出口视图,状态列升级可调度判定
2026-09-30 15:15:34 +08:00
rogee
17abec449f
style(gateway): gofmt 探活测试文件
douyin-release-gate / verify (push) Failing after 3m42s
2026-09-30 14:33:37 +08:00
rogee
e12e03b3b4
feat(gateway): 创建/编辑网关后立即异步探活健康状态
...
- POST/PUT /api/gateways 成功后后台立即探活一次 /healthz 并覆盖落库,不阻塞请求
- probeAndRecordGateway 抽出单网关探活+落库复用;探活超时改为 var 供测试注入
- 网关页保存成功后延迟 2.5s 刷新一次,尽快展示最新健康状态
- 测试:立即探活、慢网关不阻塞、不可达落 unhealthy
2026-09-30 14:33:31 +08:00
rogee
eab193007c
refactor(accounts): 移除「授权状态」概念——账号收敛为启用/暂停单一状态机
...
douyin-release-gate / verify (push) Failing after 3m43s
产品已收敛为自有账号管理,撤销授权在 UI 无入口、状态恒为 authorized,属废弃语义:
- migration 1045:social_account DROP authorization_status/revoked_at/authorization_kind
- 删除 revoke API 路由与 RevokeAccount/disableAccount 状态机分支(PauseAccount 独立)
- accountRunnable/就绪判定/采集过滤/登录校验删除 authorization_status 检查
- EnvironmentContext/AccountProfile 契约删字段;前端删「已授权/已撤销」展示与 readiness 分支
- 测试同步:revoke 流程/409 用例删除,seed 语句去列;dev 库测试遗留 revoked 账号待 UI 删除
2026-09-30 14:18:34 +08:00
rogee
923fd64879
feat(creator): 账号画像补互关指标并让监控列表携带最新快照与评论聚合
...
- migration 1044:creator_account_metric 加 friend_count(self profile 接口 user.friend_count,即互关数)
- douyin connector 解析 friend_count(负值校验同其他计数),快照落库透传
- monitor-views 视图新增:每账号最新非空画像计数(粉丝/关注/获赞/作品/互关,按采集时间回填缺失维度)
- 评论口径:自有作品最近指标 comments_count 求和(comment_total),无账号级评论采集源
- 详情页指标时序 AccountMetricPoint 带回 friend_count
2026-09-30 12:50:10 +08:00
rogee
998871e3c4
fix(creator): 强制同步抢锁失败分类提示——租约被占/竞品停用分别返回可读 409
...
douyin-release-gate / verify (push) Failing after 4m57s
- ClaimCompetitorSync 失败后经 SyncClaimFailure 复查竞品状态,
区分 ErrSyncInProgress(该竞品正在同步中)与 ErrSyncDisabled(已停用)
- creatorError 新增两分类映射 409;通用冲突文案保持不变
- 前端竞品强制同步去掉固定'强制同步失败'后缀,直接展示分类提示
- 回归:TestCompetitorSyncClaimFailureClassification(PG 集成)
2026-09-29 15:11:23 +08:00
rogee
a9ac84f459
feat(accounts): 创建账号表单支持指纹浏览器环境配置
...
douyin-release-gate / verify (push) Failing after 4m3s
- 前端创建页折叠区块:平台/品牌/版本/语言/时区/硬件并发/关闭伪装维度,留空使用默认
- 后端 accountRequest 增加 fingerprint,校验前置 400(避免账号已建、绑定失败的中间态)
- seed 服务端从账号派生、proxy 由网络出口管理,两者不接受表单值
- 补建端点支持携带指纹重试;start 自愈补建保持零值指纹
- PG 集成测试:指纹落库/非法值拒绝不建号/补建指纹重试
2026-09-29 14:49:59 +08:00
rogee
a94bdf7921
feat(gateway): 网关健康状态——后台定时探活只保留最近一次结果并在列表展示
...
- 迁移 1043:gateway 表加 health_status/last_check_reason/last_checked_at
- Store.RecordGatewayCheck 覆盖写最近一次探活结果,Create/Update/List/Get 全量返回健康字段
- api.RecordGatewayHealthChecks 并发探 /healthz:连接失败或 5xx 判离线,其余判在线(401 等异常写入原因供排查)
- workers 每 30 秒一轮,app 启动接线
- 网关管理列表新增健康状态列:在线/离线/未检查 Tag,原因与检查时间收进 Tooltip
2026-09-29 14:47:49 +08:00
rogee
2e96ed49b8
test(api): 审计过滤端点 PG 集成测试(auditFilter 参数校验与分页)
2026-09-28 23:04:55 +08:00
rogee
799087fcb1
test(api): 账号删除链路 PG 集成测试 + 测试直写 SQL 适配 044 列名(social_account/browser_env/audit_event)
2026-09-28 22:30:31 +08:00
rogee
fba7ee6236
refactor(creator): store SQL 适配 044 数字主键——WHERE 走文本 UNIQUE 列、metric 插入经 work_id 子查询
2026-09-28 22:30:23 +08:00
rogee
65d0801290
feat(schema): 044 数字主键——全表 bigint IDENTITY、文本标识降级 UNIQUE、FK 重指
...
- 迁移 044:9 张表换 bigint IDENTITY 主键,account_id/exit_id/competitor_id/work_id/comment_id/job_id/rule_id 降级 UNIQUE;
引用表 FK 重指 bigint;checkpoint 删派生文本 id;creator_settings 布尔 PK 换 bigint identity + 单行表达式唯一索引;
social_account.profile_id 死列删除
- seed 派生改 SQL:CreateBoundEnv 用 jsonb_set(account.id+1000),deriveSeed 删除;Fingerprint.Validate 允许 Seed=0(派生态)
- 三域 store SQL 列名适配;appendAudit/审计过滤经 JOIN 读回文本标识;UPDATE..RETURNING..FROM 拆两段式
- 对外 API 契约不变:模型/JSON/URL 全部保持文本 ID
- account 域补 PG 生命周期集成测试(列表/凭据解析/暂停吊销恢复/审计过滤/删除链路),覆盖率 22.4%→73.9%
2026-09-28 22:30:14 +08:00
rogee
7dea052e55
feat(web): 账号即环境 UI 收敛——删 /browsers 页面,环境并入账号详情
...
- 删除 /browsers 列表/创建/详情页与菜单项,运行环境不再是独立资源
- 账号详情:GET /api/phase-a/accounts/:id 内联 environment 字段
(网关/出口/绑定版本/运行实例/不可调度原因),固定资源卡直接展示
- 状态卡两态开关:暂停→「启动账号」(start=resume+启动环境),
运行中→「暂停账号」(联动停环境);出口重绑卡片内完成
(POST /network-exits/:id/rebind 返回内联 environment,出口切换不再跳环境页)
- 删除 creator/settings 残留的转写服务字段(后端 settings 无此列)
- helpers.ts accountReadiness 改用 runtime_id/runtime_cleanup_pending
- network-exits 列表绑定账号列改由账号列表内联数据驱动
- 全量验证:go test ./...(PG)全绿、tsc --noEmit 通过、max build 通过、
node --test 12/12 通过
2026-09-28 20:30:23 +08:00
rogee
bcc33fe497
feat(accounts): 账号即环境——创建即绑定、幂等补建、start 组合接口
...
- POST /api/phase-a/accounts 创建成功即绑定环境:alias=账号文本 ID、
唯一网关自动取(缺失 404/多网关 409)、出口直连、seed 由账号 ID 派生
(deriveSeed,数字主键落地后改 bigint id+1000);绑定失败 503 透传 account_id
- POST /api/phase-a/accounts/:id/environment 幂等补建:已绑定原样返回
- POST /api/phase-a/accounts/:id/start = resume + 启动环境(环境缺失自愈补建,
审计对齐全);吊销账号 start → 409 readiness blocked;停止沿用 pause
- 测试:deriveSeed 纯单测(确定性/值域/固定向量)+ PG 集成覆盖
绑定失败恢复、补建幂等、seed 断言、start 激活与冲突分支;
RegisterAccountRoutes 参数升级为 HubStore,路由矩阵登记新端点
2026-09-28 20:10:50 +08:00
rogee
0879d9fd25
refactor(schema): 迁移 043 schema 收敛——42→19 张表,统一迁移 runner
...
- 迁移 043 一次到位:runtime_instance/environment_binding 并入 browser_env(账号即环境)、
credential_reference 并入 social_account、work_source/metric_plan 并入 creator_work、
sync 租约并入 creator_collection_checkpoint(kind='sync')、audit_event 瘦列、
creator_settings 去转写列、TRUNCATE 账号域(竞品采集数据无损保留)
- 统一迁移 runner:environment.Open 串起 001 账号基座 + hub 链 + 038 creator 版本回填
(v+1000) + creator 1017-1042 + 043;account/creator Open 不再迁移
- 三域 store SQL 全量适配:CreateBoundEnv 就绪门禁、SetRuntimeCleanupPending fence
语义(未知代 MissingRuntimeID 允许登记并释放活跃实例)、metric_plan 列并入 work、
checkpoint sync 租约、deletion 链路重写
- api 适配:envView 去 runtime_instance_id、audit filter 去任务列、browser_env 单表查询
- 测试:迁移 043 形态探针、迁移不可变映射新路径、legacy 迁移重放子测试重写、
fence/出口生命周期/单来源 upsert 语义覆盖;CREATORHUB_POSTGRES_TEST_URL 全绿,
environment 70%/creator 67.5% 覆盖率,tsc 通过
2026-09-28 19:48:55 +08:00
rogee
4b8cd264cc
test(account): 清理测试中任务表引用
2026-09-28 17:17:12 +08:00
rogee
ab7b91387c
refactor(creator): 删除删除链路对运营表的引用
2026-09-28 17:16:05 +08:00
rogee
c567080248
refactor(api): 删除运营链路与 runtime_use_lease
...
删除任务链(drafts/confirmations/tasks/attempts)、creator 运营链(策略/事件/操作/会话/消息/监听器/素材/关系)、runtime_use_lease 机制及其 API/UI;taskstate 包与对应测试一并移除。
2026-09-28 17:14:00 +08:00
rogee
143f3b263e
fix(creator): 竞品分析页走查修复——封面本地缓存、作者名、指标全宽行、数量入卡片标题
...
- 后端:works 采集解析 author.nickname 与 video.cover.url_list(migration 042 新增
creator_work_cover 本地缓存表);竞品同步成功后回填缺失封面(单次上限 40,余量自愈)
- 网关:新增 /douyin/image 浏览器内 fetch 图片端点(douyinpic CDN 白名单、4MB 限额)
- API:GET /api/creator/works/:id/cover 输出本地缓存封面(private 缓存头)
- 前端:封面改读本地缓存(认证 fetch + blob);点赞/评论/分享全宽行贴封面下方;
作者名独立展示;'下次采集'移除;作品总数移入卡片标题右侧 extra
- '已核验' 状态标签补充 Tooltip 释义(发布时间已从平台数据成功解析核验)
测试:douyin 解析 3 例、cover 存储 PG 集成 1 例、网关 image 3 例全绿
2026-09-28 10:39:56 +08:00
rogee
5e391b70e9
fix(environment): 迁移不可变规则落地——034 违规补齐改为新迁移 037,修复 browser_env.image_version 残留导致的创建环境 500
...
douyin-release-gate / verify (push) Failing after 3m10s
- 迁移 037(幂等):补删 browser_env.image_version、audit_event 镜像列、browser_image 表
- 恢复 034 为引入时原版(撤销 6cd4cdc 的原地修改)
- 新增 migrations immutable 单测:迁移文件引入后不得改内容,要改就新增版本号
- web: 指纹种子字段中文化 + 指纹参数 400 错误映射为具体中文提示
2026-09-28 10:32:37 +08:00
rogee
03f6145a61
fix(creator): 修复导入页列表 SQL —— join 缺别名导致 /accounts/import 一进来就 500
...
- ListCompetitorShareJobsWithAuthor 的 LEFT JOIN creator_competitor 缺 AS competitor
别名,ON 条件引用 competitor.id 直接报 missing FROM-clause entry(42P01)
- competitorShareJobFilter 过滤条件误用原表名 creator_competitor_share_job,
与查询别名 share_job 不符,带 platform/status 参数时会再报缺列
- 新增集成测试 TestListCompetitorShareJobsWithAuthorSQL 覆盖 join 作者回填
与 platform/status 过滤(此前该 SQL 无任何测试,bug 逃逸)
2026-09-28 09:19:02 +08:00
rogee
8c1fce3819
test(creator): 账号监控视图与采集状态集成断言(聚合/下次窗口/failed 错误可见)
2026-09-27 22:20:45 +08:00
rogee
3f1e2d39f4
feat(creator): 自有账号监控后端——播放量入库、账号粉丝时序快照、监控 API
...
- migration 040/041:creator_work 与 creator_work_metric 加 play_count;新建 creator_account_metric 时序快照表
- douyin:详情接口解析 play_count;self profile 扩展解析粉丝/关注/获赞/作品数(flexibleInt 兼容字符串)
- creator store:PlayCount 全链路(UpsertWork COALESCE/RecordMetric/ListMetrics);RecordAccountMetric/ListAccountMetrics/ListAccountMonitorViews/GetAccountCollectionStatus
- controlplane:syncCreatorOwned 成功路径末尾记账号画像快照(失败 errors.Join 不吞错);新增 monitor-views/collection-status/metrics/sync 四个路由;creatorError 补 account.ErrNotFound→404
- 测试:integration/douyin/api 断言播放量落库与 COALESCE 语义、快照覆盖语义、路由 happy path 与 409/503/404 语义
2026-09-27 22:05:01 +08:00
rogee
01d1d44a15
feat(creator): 竞品作品指标采集改用匿名浏览器并新增收藏数与爆品增速
...
douyin-release-gate / verify (push) Failing after 3m23s
- 指标采集不再依赖已登录自有账号:竞品作品到期后经匿名浏览器拉取
抖音作品详情接口(detail 返回完整点赞/收藏/转发/评论快照)
- 补采收藏数:creator_work 与 creator_work_metric 新增 collect_count
(迁移 039),works 列表与 detail 解析均映射该字段
- 新增点赞增速:LoadWorksGrowth 按时间窗计算基线增量(full/partial
覆盖标注),works API 支持 growth_hours/min_likes_growth 筛选排序
- 前端监控详情页:作品卡片展示 24h 点赞增量、支持按增量筛选爆品;
作品 Drawer 新增增长曲线折线图(@ant-design/charts)与收藏列
2026-09-27 19:44:49 +08:00
rogee
221ed65e32
feat(creator): 竞品作品同步改用匿名浏览器并限制并发
...
- 竞品同步不再依赖自有采集账号:每次同步按名额(并发上限 2)创建匿名浏览器,
导航至抖音首页等待访客 cookie 稳定后经网关受限 fetch 拉取作品
- 调度器对到期竞品并发同步,名额耗尽时排队等待
- 平台风控语义(实测,与公开爬虫项目一致):作品列表匿名仅能取第一页
(16-20 条),后续页一律空 envelope;空 envelope 视为正常分页终止
- 评论解析适配真实响应:reply_id="0" 为顶层评论、作者取 user 对象、
纯图片评论(text 空但带 image_list)记为「[图片]」
- fetch 签名与白名单:注入 byted_acrawler.frontierSign 的 a_bogus,
网关放宽响应上限至 8MB 并允许签名参数
2026-09-27 15:43:03 +08:00
rogee
dbb675c658
feat(web): 强制同步按钮(列表+详情);test: 强制同步语义断言(force 立即执行并刷新 next_sync_at)
douyin-release-gate / verify (push) Failing after 3m1s
2026-09-27 13:34:57 +08:00
rogee
7cb2a0a2b4
fix(creator): 竞品同步 blocked 状态也排下次重试,避免定时获取永久失效
2026-09-27 13:22:54 +08:00
rogee
6cd4cdc57f
refactor(platform): 平台收敛为抖音——移除小红书全链路,监控账号新增画像字段与卡片列表
...
- 移除小红书:internal/platform/xiaohongshu、controlplane XHS 分支与路由、
browser_gateway XHS 平台模块与处理器、前端平台选项;migration 038 清理
XHS 数据并将 creator_* 平台 CHECK 收紧为 douyin
- creator_competitor 新增 follower_count/following_count/aweme_count(仅
接口定义返回,暂不采集回填);列表接口返回 work_count 与
latest_published_at(creator_work_source 聚合 MAX(published_at))
- 导入页账号名称列展示作者头像(share job 列表带出 avatar_url)
- 监控账号页改 antd Listy 卡片列表(头像+粉丝/关注/作品/最近发布/同步状态);
AccountManagementList 收敛为 owned 专用
- 环境模块清理 browser_version 遗留:migration 034 补齐删列,修复 store.go
中 hub 别名悬空引用,测试 fixture 对齐新 schema
2026-09-24 19:30:28 +08:00
rogee
c8c460da82
feat: 账号导入列表移除块级标题、刷新改图标,新增账号名称列(成功任务回填作者名)
2026-09-23 17:20:20 +08:00
rogee
4f736cba21
feat: split account management
2026-09-21 16:44:09 +08:00