Commit Graph

15 Commits

Author SHA1 Message Date
yangqianqian
033ef89536 fix: harden online validation flows 2026-07-01 10:56:08 +08:00
yangqianqian
da137f099f fix: add password visibility controls to change password 2026-07-01 10:43:07 +08:00
yangqianqian
232fd35c90 fix: keep auth form errors visible 2026-07-01 10:26:42 +08:00
yangqianqian
df1856d793 上线版: 产品表单统一+form嵌套修复+用户管理+部署+三套叙事
- 产品编辑入口统一走 ProductFormFull(卖点/风格/人群/品牌词全字段);
  修复开任务页 <form> 套 <form> 致"编辑产品"报错、改不了、跳回首个产品
- dashboard 入口卡片对齐实际路由: 系统管理(/config) 与 工作配置(/settings) 分开;
  settings ?tab=products 直达改用挂载后读 URL, 消除 hydration mismatch
- 新增用户管理(users API/admin service/改密页) + alembic 022/023/024
- 上线部署: Dockerfile / docker-compose.prod+https / nginx https / .env.example
- A8 三套正交叙事(痛点/场景/成分背书) + beige 调色去AI化 + 飞轮 text_import 高权重信号

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:08:13 +08:00
yangqianqian
cb041e8d3a 前端文案挑选页按 A/B/C 三套分组展示
- 后端 _fmt_text 返回 strategy 字段,SSE 与 hydrate 两条路径贯通
- 新建 TextStrategyGroup 组件 + groupByStrategy(A/B/C/未分套排序,旧 NULL 数据归未分套)
- text 页平铺改分组渲染,选中态/改稿回调透传不变
- 复用 ImageStrategyGroup 的 STRATEGY_LABEL,单向依赖无环

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 10:29:35 +08:00
yangqianqian
2ca6ac2e48 C1: 新增轻量任务看板/board(按状态分列只读视图)
- board/components.tsx: BOARD_COLUMNS(4列:生成中/待审核/已通过/已打回)+TaskCard(只读点击进详情)+BoardColumn+BoardSkeleton
- board/page.tsx: 复用 GET /api/v1/tasks?status=...(跟随角色不写前端权限),failed/archived不进看板
- Sidebar: 加「任务看板」📋入口;顺修两项同href的重复key warning(改key=label)
- 卡片跳转:进行中/待审核→confirm,已通过/打回→images(路由均已存在)

独立agent交叉复核6项全过(状态全覆盖/多status参数与history一致/无前端权限/无死链/字段判空/边界安全),无must-fix

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 10:10:33 +08:00
yangqianqian
4bed7425a8 A8多套打包+M4归档+R5多图:存量功能备份
A8 多套交付包(packaging_task.py):
- 修复交付包只打第1条混乱note的bug,按ImageCandidate.strategy分A/B/C组
- 每组生独立note_0N夹(6图+文案.txt),同seq留最新去重,老数据兼容
- task74端到端验:3套各6图,独立agent7项交叉验证全过

M4 归档(tasks.py/exports.py/前端):
- list_tasks加date_from/date_to/product_id筛选+product_name批量填(防N+1)
- 新增exports.py:产品JSON导出+标杆CSV导出(UTF-8 BOM)
- 前端HistoryFilters日期/产品筛选+产品列+打回原因红banner
- response.py加raise_param_error;独立agent验A1/A2/A9通过

R5 产品多图(product_images.py/020迁移/前端):
- product_images表+5端点(上传/列/改场景/设主图/删图)
- 生图按ROLE_SCENE_PREFERENCE选对应场景图,回落primary
- 前端ProductImageManager多图画廊

R6 账号config拆页(settings/):
- 配置页按角色拆/settings(运营+组长+admin)+/config(仅admin)
- Key只显末4位不显余额(守红线)

核销表对齐真实代码状态:D1改稿框/M7裂变/E12评图分纠偏为已完成(曾漏回写)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 17:32:49 +08:00
yangqianqian
285791c12f 裂变补图:中转站波动导致单张失败时只重生失败分镜
实测发现 codeproxy 偶发不稳,单套中某张图重试3次仍失败会记 error。
本次加按需补图:只重生标 error 的分镜,成功的图与 token 不浪费。

- 019迁移+模型:fission_tasks 加 source_task_id(新架构不扇出GenerationTask,
  补图需复刻首轮上下文:产品/operator key/张数,故落库回查)
- fission_image_retry:只补失败 role(引擎 target_role 单张重生,R2零改动),
  merge 回 images_json,全恢复则 status=image_done
- tasks.py:retry_fission_images Celery task,key归属源任务operator(基石B),
  幂等锁防重复补图
- api:POST /fission/{id}/notes/{seq}/retry-images,无失败分镜守卫 queued=false
- 前端:FissionNoteCard 失败提示改"重试补图"按钮+loading,父页轮询刷新

实测task5 seq1(hook图首轮codeproxy重试3次失败)补图跑通:只补hook(1024×1536
去AI化)、applied_proof原图不动、recovered=1 still_failed=0、status=image_done;
apiports503回落codeproxy gpt-5.5强档兜底;seq0无失败图守卫queued=false

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 11:30:41 +08:00
yangqianqian
25f86b2f4a 存量前端:生图分组/灯箱/重生控件/导入文案/驳回横幅+SSE+总核销表
- ImageStrategyGroup/ImageLightbox/RegenControls/ImportTextModal/
  RejectReasonBanner 新建组件
- tasks images/text/new + history + 配置/布局/SSE hooks 存量改动
- 总核销表进度更新

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 11:17:53 +08:00
yangqianqian
d85dcd401b 第11环裂变重写:对齐上线版 split.js 一次LLM出N套完整笔记包
架构从"扇出N个GenerationTask各跑完整管道"改为"一次LLM调用直接出N套
完整笔记包(N=1~5)",落 FissionNote 表 + 独立展示页。

后端:
- 018迁移:fission_notes 表(文案JSON+score+passed+imagePlan+images+status)
- fission_prompt:FISSION_SYSTEM+三档参考度(low/mid/high)+normalize_tags+品类兜底
- fission_pipeline:一次LLM出N套→各评分(@80合格线)→排序→落库,不达标标
  needs_optimization 非丢弃;apiports 503 回落 codeproxy gpt-5.5 强档兜底
- fission_images:每套串行调现有生图接口(零改动image_gen/storyboard)
- tasks.py:run_fission_pipeline Celery task,删旧扇出注入
- api/v1/fission:进度聚合FissionNote + GET /fission/{id}/notes(剥内部字段)

前端:FissionProgress对齐状态机 + N套独立展示页 + FissionNoteCard

测试:test_fission_engine(19)+test_fission_pipeline(5) 全过;104 全量回归绿

实测task5(fanout=2,mid)端到端跑通:一次出2套→seq0=85过/seq1=79标优化→
生图codeproxy/edits→1024×1536去AI化→task completed→notes端点返完整数据

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 11:17:37 +08:00
yangqianqian
1b488752e6 B6/B7: failed终态前端可见 + SSE事件链核实
B6 错误态:
- 后端已加 TaskStatus.FAILED + 异常区分重试中/耗尽(014迁移ALTER status ENUM)
- 前端 TaskStatus 类型加 failed
- RecentTasksBar/history STATUS_LABEL 补 failed 标签
- history 页 HISTORY_STATUSES 纳入 failed(否则失败任务前端找不到)
- FatalErrorBanner + useSse error 不再静默丢弃

B7: 核实 SSE(ticket换JWT) + 事件消费链无缺口,标绿

tsc EXIT=0
2026-06-16 12:45:13 +08:00
yangqianqian
ea423e8a32 fix(C2): 审核台显示文案质量分(总分+7维明细)
审核要能判断,原审核队列接口不返回分数=组长盲审。
- review.py _fmt_queue_item: 解析selected_text.score_json,复用现成
  _score_array_to_obj(tasks.py)算总分+透传维度,绝不读eval_score(留NULL)
- dto.tasks.ts: ReviewQueueItem.selected_text 加 score?:TextScore|null
- ReviewCard.tsx: 复用现成ScoreDimBars组件,passLine=80(合格线红线,
  不用组件默认85)

端到端验:task40审核队列返回total=83+5维明细,新旧维度兼容。tsc EXIT0。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 12:28:56 +08:00
yangqianqian
e3fb6f2655 feat(D1): 改稿进飞轮 - 最强真实信号 text_edit +5
倩倩姐2026-06-16拍板:改稿=用户真改了字=最在乎这条方向=最强真实信号。
先激进入飞轮跑一周,北哥用后按真实数据校准是否加"过审才入"闸门。

改动:
- enums.py: SignalType.TEXT_EDIT + SIGNAL_WEIGHTS权重5(≥选择类)
- task.py: TextCandidate.edited 布尔字段
- 013迁移: text_candidates加edited列 + preference_events.signal_type
  ENUM补text_edit(端到端实测抓出:不补会Data truncated)
- task_actions.py: POST /{task_id}/text-candidates/{cid}/edit 端点
  回写content+edited=True+record_signal写text_edit,走task_actions不碰review.py

端到端实测:edited False→True,飞轮信号真落库type=text_edit weight=5。
顺手: tsconfig.tsbuildinfo 移出版本控制(构建产物)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 12:20:54 +08:00
yangqianqian
77f52e7eb0 fix(A1): 清除Sidebar 4个死链路由,补回审核台导航
死链(全不存在的路由): /tasks /images /tasks/build /tasks/list
真实存在却漏进导航的 /review(组长审核台)补回,限supervisor+admin。
选文案/选图片是任务流程内步骤(经/tasks/[id]/text|images,需task id),
不做顶层导航。tsc全量通过。

同步: 总核销表新增P3前端打通+飞轮(九文档审核5桶结论)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 11:34:21 +08:00
yangqianqian
6a2632da70 baseline: Clover 独立仓库首次基线提交
将 Clover 从上层产品包旧仓库中独立出来,建立专属版本控制。
当前状态=纵切片端到端已打通(登录→选品→出文出图→审核→下载包),
M1文案质量去套路化已验收。此提交作为后续按核销清单逐条修复的基线。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 11:30:22 +08:00