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:


in home:


因为原本的布局持久化可能有一些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