Commit Graph

29 Commits

Author SHA1 Message Date
lhk229 1168c777ea 孤儿账本只在正向终态清除,legacy 迁移判据对齐 exact retry
一、孤儿过早清账。上一条把孤儿改成「读到任何结论就清账本」,但 pending /
conflict 不是结论。浏览器关掉不会中止服务端处理——api-server 的处理与持久化
预算合计可达 90 秒,重开项目时单次 GET 没看见 resource 只说明「还不知道」。
此刻清账,服务端稍后落库便再无对账凭据,用户永远等不到「结果已进素材库」的
提示。改为只在 applied / dialog-missing 两个正向终态清账;pending / conflict
与读失败一律保留给下次加载重读,残留由保留期与条数上限兜住。

二、legacy 迁移漏 failed。判据按状态白名单列举 generating /
pending-confirmation,漏掉 failed + perfectPixelOperation——那是旧严格保存
失败的合法持久化形状,retryPerfectPixelOperation 明确接受它,「重试同一完美
像素操作」按钮正是在这个形状下出现。漏迁后下一次保存剥成 marker,再加载即
failed + invalid,重试按钮消失,用户只剩删掉重做,而那正是新 identity。判据
改用 isUnresolvedCanvasGenerationDialogRecord 取反,与 hydrate 判定收口态同
一个函数,两处不会漂移。

通用要求:涉及「这条 operation 还需不需要账本」的判断一律问「它收口了没有」,
不要列举状态——状态白名单会随语义变化静默漏项,本条就是实例。

同步更正专题文档三处残留矛盾:窗口起算点仍写作「稳定请求快照写入时」;仍称
「不会让布局校验失败升级成硬阻断」(应限定为解除客户端侧拒发,端到端 409
依赖仍在);「删除后不再对账」(应限定为结果不再自动回填画布)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 09:30:13 +00:00
lhk229 11a2c5afe0 legacy 内联账本一次性迁入本机
账本移出布局后,hydrate 仍认布局里的 legacy 内联快照,但没有任何路径把它
写进本机账本;而序列化会在下一次保存时把内联快照剥成 perfectPixelOperationId
标记。先前提交声称「滚动部署期间的在途操作不会被一次性判死」只对了一半:
第一次 hydrate 活下来,第二次就变成 failed + invalid,永久失去 exact retry
的 identity。

在 applyProjectSnapshot 读账本、splitCanvasLayoutItems 之后补一次性迁移。
三个条件都必要:只补写本机缺失的(本机那份可能刚在 pre-POST flush 之后被
重新锚定过,比布局里的新);只补写未收口的(收口态本就不需要账本)。

未采纳「删除后立即 flush 压缩竞态窗口」:核查发现删除已经触发既有的 450ms
防抖自动保存,该改动只能在由服务端处理耗时(数秒)主导的竞态里省下 450 毫秒,
代价是让高频操作绕过防抖。

未采纳「重做时弹确认框」:完美像素免费,最坏是素材库多一份;在常用路径上加
确认属于制造摩擦,且账本只能按 sourceResourceId 匹配同源,纯本地图层匹配不到,
覆盖不全的提醒比没有提醒更容易让人误以为安全。

Undo 复活占位在当前会话内不再对账(刷新即自愈)记为已知限制,连同根因与四种
修法各自的硬伤一并写入专题文档与决策日志。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 09:06:28 +00:00
lhk229 2fa2f245c1 完美像素请求账本移出项目布局
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Failing after 20s
Project CI / Native shell tests (pull_request) Failing after 8m36s
账本记的是「本机发出过哪一次 POST」,属于对账凭据而非画布内容。它此前写在
用户的画布布局里,为此派生出一条严格布局保存通道:发 POST 前必须拿到布局
保存的 revision ack。任何布局校验失败因此都会升级成完美像素的硬阻断。

改为存在本机 localStorage,按 owner + project 双键隔离;布局里只留
perfectPixelOperationId 标记,用来把这类占位与队列型占位区分开。本机写入是
同步的、不过网络、不受服务端校验影响,因此它能提供严格保存想提供的那个保证
——请求可被追溯——却不引入阻断点。严格保存通道整体删除,只保留一个不改变
失败语义的 preferLatestGenerationDialogs。

由此新出现的「账本有、占位没写进布局」窗口,由恢复 effect 覆盖:它同时遍历
内存占位与孤儿账本条目,对后者照常 GET 对账,终态给出 asset-only 提示并清
账本。

本机账本是明确设计,缺失只降级、不得构成阻断:换设备、清缓存、隐私模式、
配额写满都会读不到账本,此时带标记的占位一律收口成可删除的失败占位,用户
删掉重来即可。跨设备不再自动收口是已知且接受的代价。

布局内联账本作为 legacy 形状继续被读取,滚动部署期间的在途操作不会被一次性
判死;写入侧不再产生新的内联账本。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 05:55:06 +00:00
lhk229 526333f130 修复完美像素源图确认后的原操作重试
拆分源准备与严格布局保存预算,并让布局请求覆盖完整生命周期。

严格保存失败时保留原操作身份,阻止重新上传和创建第二条操作。

补充原样重试、迟到保存和删除保护的定向测试。

同步更新图片画布技术方案与项目决策记录。
2026-08-04 10:28:58 +00:00
lhk229 f99abce109 完成完美像素前端未知结果收口
改为 object-only 源图上传并贯穿取消信号
以项目 GET 正向证据判定画布成功与 asset-only
持久化并原样重放 operation 请求,阻止未收口身份被删除
统一 75 秒绝对窗口并兼容旧 240 秒 journal
补齐时钟偏差、删除保护与 byte-for-byte 回归测试
同步更新图片画布契约与共享决策记录
2026-08-04 03:59:59 +00:00
lhk229 7f13af6135 修复完美像素结果持久化与未知状态收口
Project CI / Frontend tests (pull_request) Failing after 22s
Project CI / Repository checks (pull_request) Failing after 48s
Project CI / Backend tests (pull_request) Successful in 3m49s
Project CI / Native shell tests (pull_request) Successful in 11m39s
为完美像素操作引入稳定标识、请求指纹和原子持久化 procedure,支持精确重放并拒绝冲突。

在首次对象存储写入后完整标记 resultPersistenceStarted,统一未知结果的 GET 对账语义。

前端持久化 perfectPixelOperation,提交前严格刷写布局,并支持 pending-confirmation、刷新恢复与原样重试。

隔离跨用户与跨项目回包,修正占位清理、动画状态和异常对账时间窗。

同步生成 SpacetimeDB 绑定,补充前后端回归测试,并更新技术文档与共享决策记录。
2026-08-04 02:29:53 +00:00
kdletters 53f06055a4 修复画布权威快照合并回归
Project CI / Repository checks (push) Successful in 1m19s
Project CI / Frontend tests (push) Failing after 2m10s
Project CI / Native shell tests (push) Failing after 3m27s
Project CI / Backend tests (push) Successful in 3m53s
统一生成完成态与本地布局的生命周期合并
保留同项目权威刷新中的有效画布选择
同步生成集成夹具与真实后端完成契约
补齐画布持久化回归测试和项目记忆
2026-08-03 15:20:44 +08:00
kdletters 6fe646ba2b 修复开放Issue 115、118、127和128
Project CI / Frontend tests (push) Failing after 21s
Project CI / Repository checks (push) Successful in 58s
Project CI / Native shell tests (push) Failing after 3m7s
Project CI / Backend tests (push) Successful in 3m33s
补齐Anthropic strict能力门控、传输schema、缓存usage和真实端点验收
隔离可选MCP服务目录失败并安全重定位局部schema引用
修复PowerShell 7环境下Windows私有ACL检查
统一角色与图标素材落库的用户prompt语义
合并权威画布快照与本地待保存或在途布局并补齐回归
同步更新技术文档、项目记忆和验证门禁
2026-08-03 14:03:20 +08:00
k88936 6ee33dc561 fix: 首页「最近项目」缩略图与退出前视角不一致,出现偏移或裁切 (#111)
Project CI / Repository checks (push) Successful in 1m4s
Project CI / Frontend tests (push) Successful in 2m9s
Project CI / Native shell tests (push) Successful in 2m38s
Project CI / Backend tests (push) Successful in 3m23s
- 封面使用真实画布尺寸及最终 viewport.x/y/scale。
- 320×240 封面改为居中 cover 裁切,不再从左上角取景。
- 正确绘制画布背景色。

in canva:
![shotmd-1784874081.jpg](/attachments/4ac128cc-64c8-4a78-9e75-c35902049d3e)
![shotmd-1784876202.jpg](/attachments/6197259b-887e-4fd6-95b5-b722ec670a02)

in home:
![shotmd-1784874090.jpg](/attachments/241c7cd3-1eee-4f7b-96f2-4ca0268d2bee)
![shotmd-1784876211.jpg](/attachments/aa4200b6-bef0-4122-a797-ebc082b27a17)

因为原本的布局持久化可能有一些bug,改动不相关,所以我回退到最开始的一版:
- 不额外监听画布尺寸变化,给最小尺寸兜底,(大了比小了好)
- 封面不要求强一致性,生成/上传时机仍然按照原来随布局持久化

优化了封面生成:
- 改用webp格式
- 尽量利用图片缓存

最终生成封面从700ms加速到150ms以内, 加上必须的上传和确认150ms 和 布局持久化的时间相差不多,不是特别离谱的手速都能保证两者一致

---------

Co-authored-by: kdletters <kdletters@qq.com>
Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/111
Co-authored-by: 王德宇 <kvtodev@outlook.com>
Co-committed-by: 王德宇 <kvtodev@outlook.com>
2026-07-29 16:09:30 +08:00
kdletters edc99e55e4 修复跨设备画布旧快照覆盖
Project CI / Frontend tests (push) Failing after 43s
Project CI / Repository checks (push) Successful in 47s
Project CI / Native shell tests (push) Successful in 2m47s
Project CI / Backend tests (push) Successful in 3m13s
按用户隔离画布缓存并等待权威 revision 后开放保存
固化保存重试版本并安全处理认证重载与冲突恢复
合并迟到资源图层且隔离跨账号异步请求
强制 Web 与 External 画布写入使用 expectedRevision CAS
补充竞态回归测试并同步 OpenAPI、Skill 与技术文档
2026-07-29 13:51:49 +08:00
kdletters b49bf9c984 结构化图片画布持久化并补充历史资源修复
将旧布局上限统一提升至2MiB并接入revision CAS保存
新增画布图层、生成对话框和迁移状态结构化存储
新增migration operator保护的回填、激活和回滚脚本
新增历史图片映射及音频资源恢复的定向dry-run/apply流程
补齐前端保存队列、OpenAPI、Bindings、发布归档与回归测试
2026-07-20 20:45:15 +08:00
kdletters 387a1c26e3 完成全量检查整改
清理已跟踪原始日志与个人本地配置
修复前后端有效门禁、测试和构建问题
补齐生产 Jenkins、SpacetimeDB 本地命令与文档约束
收紧图片编辑器状态、附件与媒体引用测试
排除已下线旧创作入口测试并清理 warning
2026-07-17 16:56:46 +08:00
kdletters 67fee3718d 修复画布背景色与任务计时显示
恢复生成任务列表的进行中计时显示并兼容微秒时间戳

替换画布背景色原生取色器为可拖拽色盘和色带

持久化画布背景色并在项目恢复时应用

补充背景色交互持久化和任务计时显示测试
2026-07-09 16:05:25 +08:00
kdletters 1fb5a0773e 修复画板提示与失效项目跳转
画板参考图选择提示改为持续显示并支持手动关闭。

显式项目访问失效时同步切回项目页状态。

补充提示关闭和项目失效回退测试。
2026-07-05 18:01:02 +08:00
kdletters bf09b84cb3 优化画布视口拖动性能
小地图拖动通过 requestAnimationFrame 合帧并在结束时刷新最后一帧

平移和小地图拖动期间跳过项目自动保存与 session 缓存写入

补充视口交互性能回归测试和项目文档记录
2026-06-25 23:50:24 +08:00
kdletters 0876361557 修正画布无效项目跳转
显式项目读取失败时返回项目页

403 和 404 项目访问错误不再停留在画布

补充无效项目 ID 回项目页测试
2026-06-25 23:44:36 +08:00
kdletters 28e11c4718 修复项目封面本地兜底
新增项目封面 IndexedDB 本地缓存。

封面 Blob 生成后先写入本地缓存,上传失败仍可展示。

项目列表优先服务端封面,其次本地缓存,再回退画布图层。

补充封面兜底测试和项目记忆文档。
2026-06-25 21:59:05 +08:00
kdletters b6c5fdeb30 修复生成完成提示与项目封面快照
生成完成提示展示后后台确认,避免刷新重复弹出

项目封面改为保存并读取静态快照资源

补充封面快照上传、选择和展示测试

同步外部生成与图片画布契约文档
2026-06-24 19:30:16 +08:00
kdletters 73a17193d4 升级外部生成为正式任务列表
将 external_generation_job 扩展为含价格、确认时间、退款流水和事件审计的正式生成任务事实源

新增外部生成任务列表与确认 BFF,并让平台入口按后端任务补弹完成或失败提示

保护画布生成队列超时、快照回写和自动保存覆盖场景

将 worker 计费退款流水写入 externalGenerationJobId,并补充冷备份后 worker/controller 恢复守护
2026-06-24 15:17:12 +08:00
kdletters f5ede50ba9 瘦身画板媒体保存链路
改造画板项目保存响应为轻量 ack

统一生成上传媒体以 objectKey 持久化

补齐素材库缩略图换签与本地轻量缓存

刷新生成后泥点余额并补充回归测试
2026-06-23 17:21:55 +08:00
kdletters 47bdc73b93 串行化画板布局自动保存
让画板布局保存共用单飞队列避免慢 PATCH 并发

覆盖慢保存期间只发送最新待保存快照

补充发布入口 429 排查与自动保存文档
2026-06-23 15:16:50 +08:00
JenkenB 163b2fa077 Add editor generation model pricing admin UI & API
Introduce centralized model pricing for editor generations: add EditorGenerationPricing types and admin API client methods (GET/POST), backend default config and runtime override support, and server route/handler changes to expose admin editor-generation-pricing. Add an AdminEditorGenerationPricingPage component, styles, route entry, icon, and tests, plus a test for admin routes. Update docs and decision log to describe the pricing contract and management workflow. This enables managing per-model pricing (perGeneration / perSecond, flat or tiered) from the admin panel and exposes runtime pricing to the main site.
2026-06-22 16:57:29 +08:00
kdletters fc49ba2a61 后端写入画布生成完成态
后端在图片生成完成后直接写入画布布局和生成器状态

前端提交canvasCompletion并只应用后端项目快照刷新显示

移除项目加载时根据资源行推断生成完成态的路径

更新OpenAPI、图片画布文档和共享排障记忆
2026-06-21 22:30:03 +08:00
kdletters 10dcc2b403 修复图片画布素材与宣发尺寸问题
修复画布上传素材持久化回填和项目重进资源元数据恢复

修复图片、音频、视频图层的私有资源换签与视频裸路径回退

修复宣发素材切换模型后卡片尺寸变成1024x1024的问题

修复音视频预览、媒体导出格式、音频默认提示词和前端去背边界

修复角色动作生成在编辑器路径缺少ffprobe时的已知时长兜底

补充图片画布、资源换签、宣发尺寸、媒体导出和chromaKey回归测试

更新图片画布编辑器技术文档
2026-06-19 23:16:59 +08:00
kdletters e644d7c99f 后端保存画布生成素材
生成接口接收项目与素材上下文并返回 resource/asset 快照

画布前端使用后端回包落层并避免重复创建资源和素材

补充生成元数据保存边界的测试与文档
2026-06-19 16:30:56 +08:00
kdletters 76445da9b4 迁移画布素材生成元数据
扩展 editor_project_resource 和 editor_asset 保存素材类别与生成输入快照

调整前端资源与素材读写链路并停止把素材元数据写入新 layout

在服务端保存 layout 时回填并清洗旧图层元数据

更新图片画布契约文档、共享决策和相关测试期望
2026-06-19 15:11:32 +08:00
kdletters 946308b75e 保存图片画布生成器快照
将生成器对话框作为画布布局项序列化和恢复

生成成功后保留生成器快照并锚定到成品图层

图片类生成结果同步写入账号素材库

补充生成器持久化测试和浏览器回归相关文档
2026-06-17 23:57:25 +08:00
kdletters f34556d33d 拆分图片画布图片信息弹窗
新增图片信息弹窗组件,承接 metadata 详情渲染和 UnifiedModal 接入

修复未登录进入编辑器时项目和素材接口抢跑 401

修复重置画布视图点击事件误传导致适合视图报错

补充图片信息弹窗、鉴权门禁和重置按钮回归测试

更新前端拆分文档和 TRACKING 浏览器回归记录
2026-06-17 10:56:51 +08:00
kdletters 9f45641ccd 拆分图片画布历史与持久化协调器
新增画布历史 hook 承接撤销重做快照逻辑
新增项目持久化 hook 承接加载资源创建与自动保存时序
补充 hook 单测并更新图片画布拆分跟踪文档
2026-06-17 05:00:53 +08:00