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
|
4515bbcff6
|
对账窗口改在 pre-POST flush 之后锚定
查服务端确认了一件推翻先前定性的事实:validate_editor_pixel_art_snap_
placeholder_exists 在处理前检查占位是否已经持久化,既没有同 ID 的已持久化
dialog、也没有同 operation 的稳定 resource 时直接返回 409。所以 POST 前那次
await flush 不是可省的画布同步,而是服务端硬前置,不能取消。
据此更正上一条决策里的错误声明:不是「布局保存失败只降级成 asset-only」,
而是「占位从未持久化时服务端返回 409;best-effort flush 不再提供成功 ACK,
客户端因此无法证明该前置已满足,只能提高满足它的概率」。被解除的是客户端侧
「拿不到 revision ack 就拒发」的阻断,不是端到端依赖。
缺陷:首次提交与人工 exact retry 都在这次 flush 之前就算好 submittedAt /
reconcileUntil。该 flush 没有整体上限,慢保存足以在 POST 发出前烧光整个
75 秒窗口,请求带着已过期的 deadline 发出,对账退化成读一次就收尾。
修复:flush 返回、authority 复核通过之后才用
createPerfectPixelReconciliationOperation 重新锚定,按同一 operationId
覆盖账本与 dialog,登记新的 recovery key,随后立即 POST。只覆盖时间字段,
request 与 dialog / operation / task identity 逐字节不变,不产生第二条账本。
保留 flush 前的预写而不是整体后移:flush 期间另一标签页可能加载同一项目,
服务端已有带 marker 的占位而 localStorage 跨标签共享,本机若没有账本那条占位
会被 hydrate 成 failed + invalid。provisional 账本正好堵住这个窗口。
同步修正专题文档中已被近几个提交推翻的条款:strict layout save 预算与
revision ACK 前 POST 为零、未收口 operation 不可删除、durable operation
不得被普通删除路径清理。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-05 08:43:59 +00:00 |
|
lhk229
|
515682d571
|
修复账本寿命短于标记寿命导致的成功误判与孤儿失效
阶段 3 引入的判据「布局里有 perfectPixelOperationId、本机没有账本 ⇒ 无效」
按构造就是错的:标记写进布局后寿命无限(服务端完成 completion 只做字段级
改写,从不摘标记),账本寿命却很短(收口即清、75 秒对账窗口、7 天保留期、
换设备即无)。账本消失是正常终态,不是异常。
同一个不对称造成两个缺陷:
一、每一次成功都被判成失败。settle 时先清账本、紧接着用真实 hydrate 重新
套用权威快照,成功结果被判成 failed + perfectPixelOperationInvalid;该状态
还会被下一次自动保存写回服务端,覆盖正确的 idle,且标记一旦落库就能单独
强制 failed,自我固化。历史上早已完成的占位在标记化改写后同样中招。
二、孤儿账本对账在唯一目标场景下失效。它的场景是「关掉浏览器、稍后重开」,
重开必然晚于 75 秒,而分支按 reconcileUntil 短路,等于永不生效,条目还会在
本机躺满保留期反复被跳过。
修复:凡是「缺账本 ⇒ 无效」的判据一律先排除收口态(复用既有的
isUnresolvedCanvasGenerationDialogRecord 取反)。收口态无条件忽略已落库的
无效标记与残留错误文案、强制归位 idle,让被写脏的行自愈;写边界同步收窄,
收口后不再输出标记,让标记寿命与账本对齐。
孤儿不按 reconcileUntil 短路,改走新增的 readPerfectPixelOrphanVerdict——
一次确定性的读,不轮询。dialog-missing 提示结果只进素材库;applied 静默
刷新(本次读到的就是权威状态,结果本就在眼前);未落库完全静默。三者都清
账本,读失败不清。
测试缺口的根因:工作流里所有 applied 用例的 applyProjectSnapshot 都是空桩,
跨 hook 协作从未被跑过;共享 fixture 也没还原服务端真实保留的标记。补了一条
把 verdict.project 真正喂进 splitCanvasLayoutItems 的集成用例,回退修复后它
报 expected 'failed' to be 'idle'。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-05 07:45:23 +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
|
5925b396d0
|
恢复完美像素占位的用户删除权
低层删除不再对未收口 operation 抗命,随源图层与多选删除同等对待
删除确认判据收敛为 requiresGenerationDeleteConfirmation,免费的完美像素不再弹泥点确认
标记 operation 失效时一并丢弃快照,消除重试消失但占位仍在的矛盾态
翻转钉死删除保护的用例,改为覆盖删除后结果仍落库并走 asset-only 提示
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-05 04:50:37 +00:00 |
|
lhk229
|
9ab232927c
|
合并最新 master 到完美像素分支
Project CI / Repository checks (pull_request) Failing after 53s
Project CI / Frontend tests (pull_request) Successful in 3m5s
Project CI / Backend tests (pull_request) Successful in 3m36s
Project CI / Native shell tests (pull_request) Failing after 8m19s
纳入 master 的素材类型双层模型与 Agent Runtime 更新。
保留完美像素 operation、unknown 对账、占位保护与上传预检契约。
解决画布模型、工作流、测试及文档冲突并通过定向门禁。
|
2026-08-04 12:58:41 +00:00 |
|
lhk229
|
ccf8307a39
|
修复完美像素未收口占位交互
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Frontend tests (pull_request) Failing after 18s
Project CI / Native shell tests (pull_request) Successful in 10m29s
发现已有未收口操作时激活原占位并阻止创建新身份。
拒绝右键删除受保护占位时保留当前图层选择。
补齐生成工作流接线和定向回归测试。
|
2026-08-04 12:48:39 +00:00 |
|
lhk229
|
526333f130
|
修复完美像素源图确认后的原操作重试
拆分源准备与严格布局保存预算,并让布局请求覆盖完整生命周期。
严格保存失败时保留原操作身份,阻止重新上传和创建第二条操作。
补充原样重试、迟到保存和删除保护的定向测试。
同步更新图片画布技术方案与项目决策记录。
|
2026-08-04 10:28:58 +00:00 |
|
kdletters
|
7f18f7ce04
|
修复画布副本持久化与素材类型覆盖
Project CI / Frontend tests (push) Failing after 21s
Project CI / Repository checks (push) Failing after 43s
Project CI / Backend tests (push) Successful in 3m44s
Project CI / Native shell tests (push) Successful in 10m42s
复制布局复用项目资源并区分资源登记状态
新增图层素材类型覆盖并保持资源默认类型
补齐结构化存储迁移、绑定与权威类型校验
同步前后端回归测试和画布持久化文档
|
2026-08-04 18:06:15 +08:00 |
|
lhk229
|
2c07b91c25
|
修复完美像素对账请求的绝对截止
为 requestJson 增加覆盖鉴权、重试和响应体读取的可选绝对 deadline。
让完美像素项目对账按 75 秒窗口和单次 10 秒上界读取权威快照。
补充鉴权等待、响应体读取、客户端透传和对账边界的定向测试与文档。
|
2026-08-04 10:01:44 +00:00 |
|
lhk229
|
06d8fbb9c2
|
修复重复生成占位的对账判定
Project CI / Frontend tests (pull_request) Failing after 20s
Project CI / Repository checks (pull_request) Successful in 1m8s
Project CI / Backend tests (pull_request) Successful in 3m53s
Project CI / Native shell tests (pull_request) Successful in 10m53s
收集项目快照中全部同 ID 的生成占位原始记录。
通用队列链在任一重复占位未收口时执行第二次项目读取。
完美像素遇到重复操作占位时失败关闭为冲突。
补充两条缺陷定向测试并同步技术方案与决策记录。
|
2026-08-04 05:46:51 +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 |
|
lhk229
|
89914b2255
|
对账整段设界,并把提交前置预算变成真正的取消
Project CI / Repository checks (pull_request) Successful in 1m5s
Project CI / Frontend tests (pull_request) Successful in 3m9s
Project CI / Backend tests (pull_request) Successful in 4m4s
Project CI / Native shell tests (pull_request) Successful in 11m20s
对账用 Promise.all 同时等项目快照与 refreshAssetLibrary,而 loadEditorAssetLibrary
没有 timeoutMs。catch 也接不住永不 settle:await 不返回则 finally 永远不执行,
占位归属登记与源图层锁都释放不掉,而到期清理又豁免已登记的占位,页面永久停在
generating。这个洞是上一条留下的——给 loadEditorProject 加界时只覆盖了同一个
Promise.all 里两个 await 中的一个。
改为给整段对账设 75 秒上界,往里加新的 await 自动受约束。超时解析为 null 而不
拒绝:这段在 catch 内,抛出会穿出 async 函数变成未处理 rejection;null 则落进
既有的「快照读取失败」分支。
前置预算原先只是 Promise.race,超时后上传继续跑到 confirm 并注册对象。把同一个
AbortSignal 贯穿凭证、直传与 confirm 三步,由预算到期时 abort——只停其中一步会
留下半成品。未做重试等待与 flush 的贯穿:收益是少产生不可见的存储孤儿,而 flush
已有 60 秒上界。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 12:06:31 +00:00 |
|
lhk229
|
c9db36b177
|
补齐完美像素第三处静默分支并区分两条结果文案
链路复查发现两处。
遗留:成功路径拿到 result.project 后,本地占位已被删除时直接 return。不套用是
对的(删除意图胜出),但什么都不说。同一形状此前已修两处,这是第三处;既有用例
只断言「不套用」,没断言「要说话」,所以没挡住。
新引入:上次让「对账已收口 + 本地已删」沿用了「只在素材库」的文案。两种情况事实
不同——快照里没有 dialog 时服务端画布确实没有结果;dialog 已收口时服务端画布上
有结果,只是本地未同步,重新加载即可见。混用会让用户以为画布上没有而重做。
两条文案抽成常量按事实分派。
第一次回归验证只有 1 条变红,暴露出「对账已收口 + 本地已删」这条分支根本没有
用例;补上后再破坏,2 条同时变红。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 10:00:40 +00:00 |
|
lhk229
|
925238e221
|
完美像素对账改看 dialog 收口状态,网关合成响应归入未知结果
对账原先用「同 ID dialog 是否还在权威快照里」判成败,而服务端成功回填时保留
该 dialog 并就地改写(置 status: idle、写 generatedLayerId),该行为另有服务端
测试钉住。判据因此反向:响应丢失但服务端已完成时,用户被告知「画布未收到结果」,
重做一遍就造出第二份,本地也看不到那个新图层。
逃过测试的原因是夹具写了 layers: [],服务端永远不会产生这个形状——测试不是漏了,
是主动为错误判据背书。修复顺序定为先改夹具、看它变红、再改判据。
判据改看 status / generatedLayerId,复用 projectHasUnresolvedGenerationDialog
的既有语义(提取为两个共享函数),不自创新判据。三态分别处置:dialog 不存在时
不再套用那份不含结果的快照。
第二处:Pingora 自造的 502/504 只有 code/message、没有 details,既不是 transport
异常也拿不到 resultPersistenceStarted,被当成确定失败跳过对账,而此时 api-server
可能已完成 OSS PUT。新增 isGatewayUnknownOutcomeError 放在 apiClient 层,只收上游
与代理三类;限流和体积拒绝仍算确定失败,否则退回反向谎报。
同时破坏两处修复后四条用例精确变红。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 09:44:38 +00:00 |
|
lhk229
|
cb5fdb5c94
|
完美像素补齐两处静默路径与缓存剥离的失败上报
A3-1906。对账分支发现权威快照里占位已被 completion 消费、本地占位也被用户
删除时直接静默 return。不应用快照是对的(删除意图胜出),但结论与相邻分支
一致——结果已落库,用户删掉的是占位不是素材,必须告诉他素材库多了一份。
同一形状的孪生分支在成功路径:!result.project 时提示被写在
if (hasCanvasGenerationDialogById(...)) 里面,占位不在就整段静默。改为无条件
提示、条件移除。
A4。会话缓存剥掉的占位数单独计,不并入提示计数——完美像素成功后缓存可能停留
在完成之前的版本,并入会报「上次处理未完成」的假告警。只在权威加载失败、没有
第二个来源纠正画面时才提示。已核实 isProjectReady 不挡画布渲染,该场景下用户
确实看得到一张静默少了占位的画布。
新增用例在去掉 1906 提示后失败。A4 无专用测试,理由记在 decision-log。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 05:47:01 +00:00 |
|
lhk229
|
c276810bff
|
完美像素审查第一批:补齐持久化标记、失败反馈与测试竞态
A1 持久化标记漏洞。snap_editor_image_to_pixel_art 对
persist_editor_generated_image_owned 用裸 ?,而该 helper 内部是
PUT → HEAD → confirm_asset_object。后两步失败时 OSS 对象已存在,错误却不带
resultPersistenceStarted,客户端 outcomeMayBePersisted 为假、对账不执行,
重试会用新 task_id 造出无从发现的孤儿对象。标记加在 helper 内部而非调用点,
边界取第一次 PUT:prepare_put_object 与 OSS 未配置都在 PUT 之前,标了是反向
谎报;PUT 自身要标,响应丢失时字节可能已落盘。
A3 失败反馈第三态。catch 尾部缺「有 dialogId 但占位已被删」分支,而删除生成中
占位是产品支持的流程。用户删完后请求才失败时 errorMessage 被整段丢弃,界面零
反馈,连对账得出的「请确认素材库」也一并丢失。
E1 测试并行竞态。对进程级队列深度做绝对断言,与相邻持有 guard 的用例并行时
随机变红,改为相对断言;同时更正该用例注释——它覆盖的是预算预检先于入队,
不是 guard 归还。
两条修复均先回退生产代码确认测试变红再恢复。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 05:33:09 +00:00 |
|
lhk229
|
a2b19773d3
|
完美像素刷新后的孤儿占位由归属标记收口
Project CI / Backend tests (pull_request) Failing after 12s
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / Frontend tests (pull_request) Failing after 19s
Project CI / Native shell tests (pull_request) Failing after 4m53s
完美像素在 POST 前把 generating 占位落库后走同步 HTTP。刷新页面会丢弃服务端
handler,画布回填不再发生;新页面 hydrate 原样还原 generating,加载期没有任何
对账,占位永久转圈且 Esc 与关闭按钮都消不掉。
写入侧无解:validate_editor_pixel_art_snap_placeholder_exists 要求占位必须已
落库,否则 409,POST 前那句 flush 正是为此存在。改为读取侧收口。
给 dialog 增加 requiresLiveSession,加载时剥离置位且仍为 generating 的占位。
判据是结构性不变量而非时间阈值:这类占位只能由创建它的会话收口,活着的那份始终
在内存里不经过 hydrate,所以从服务端读回来的必然属于已死会话。队列型链路一律不
置位——去除背景恒返回 queueState、图片生成默认入队,它们的 job 在服务端继续跑,
误清会诱发重复提交。
剥离只用于项目首次加载的两个调用点,不下沉进 hydrate:会话内
applyQueuedEditorGenerationProject 也会重新 GET 并套用,那时占位对应的操作正在
进行。提示只指路不断言,因为服务端持久化非事务,前几步可能已成功。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 04:06:19 +00:00 |
|
lhk229
|
b91f57095d
|
对账文案不再断言素材库已刷新
Project CI / Frontend tests (pull_request) Failing after 24s
Project CI / Repository checks (pull_request) Failing after 50s
Project CI / Backend tests (pull_request) Successful in 3m22s
Project CI / Native shell tests (pull_request) Failing after 7m45s
43a4e7ef7 的对账尾句写「素材库已刷新,如已生成派生图请勿重复执行」,但
refreshAssetLibrary 在 canAccessProtectedData 为 false 时直接 return,读取失败也
只在鉴权错误时弹登录框、其余一律吞掉,返回 Promise<void> 不带成败信号;它本身还是
可选 prop。三种情况下这句都是假话,而它旁边那句 Promise.resolve(...).catch() 也抓
不到任何东西——不是防御到位,是根本没有可抓的。
后果是用户读到「已刷新」却对着旧列表,判定「没有派生图,可以安全重试」,重新走回
这条修复本来要避免的重复创建,只是需要多一次失败才能到达。
改文案不改结构:刷新照旧调用(成功时用户白赚一份新列表),尾句从事实断言换成指令
「请确认素材库是否已生成派生图,再决定是否重试」,刷新失效时也成立。让
refreshAssetLibrary 返回成功标志是另一个选项,但那个 hook 多处共用,为一句文案改它
的契约不划算。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-01 13:09:27 +00:00 |
|
lhk229
|
43a4e7ef78
|
完美像素持久化阶段由服务端显式告知客户端
Project CI / Frontend tests (pull_request) Failing after 22s
Project CI / Repository checks (pull_request) Failing after 55s
Project CI / Backend tests (pull_request) Successful in 3m18s
Project CI / Native shell tests (pull_request) Failing after 7m37s
上一版用 error instanceof ApiClientError 判定「结果已知」,即「服务端响应过就等于
没落库」。这个等式不成立:持久化非事务,complete_editor_canvas_generation 走 CAS
写入,冲突时经 map_editor_project_error 变成 409,403/404/400 同理。带响应的 4xx
同样可能发生在 OSS 对象、asset object、project resource 和账号素材全部落库之后。
完美像素要跑满 30 秒,用户在这期间改画布推进 revision 并不罕见。
否决了两个替代方案:所有 POST 后失败都当未知(每次常见校验失败多两次读取,且给
不可能产生素材的场景附上「请核对素材库」的不适用提示);按状态码分类(409 确实只
来自写操作,但 403/404 和 5xx 在持久化前后都会出现,等于把猜测写进代码)。
改为服务端显式告知。AppError 新增 with_detail_field,在已有 details 上补字段而不是
整体替换,保留下游写入的 provider/message。snap_editor_image_to_pixel_art 在第一次
OSS PUT 之后的四条失败路径置 resultPersistenceStarted。客户端只对完全无响应和带该
标记的失败做对账。
配套:对账成功分支补上 hasCanvasGenerationDialogById 检查——权威快照里占位消失也
可能是用户删的,契约要求此时不应用快照不写历史,成功路径早有这道检查而对账路径漏了。
对账同时刷新素材库,否则只 GET 项目却让用户核对素材库,他看到的是旧列表。
服务端 guard 把标记钉为 4 处并要求只出现在 persist_editor_generated_image_owned
之后;客户端新增三条用例覆盖带标记对账、未带标记不对账、用户删除占位。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-01 12:51:12 +00:00 |
|
lhk229
|
adfe980110
|
收窄完美像素对账的触发条件与副作用
Project CI / Repository checks (pull_request) Failing after 43s
Project CI / Frontend tests (pull_request) Successful in 3m1s
Project CI / Backend tests (pull_request) Successful in 3m38s
Project CI / Native shell tests (pull_request) Failing after 7m37s
cc88564d4 的对账有两处考虑不周。
一、对账被套用到请求从未发出的失败上。占位创建、源图解析和 flushProjectPersistence
都在 POST 之前,它们抛的不是 ApiClientError,于是也走未知分支,用户看到「素材库
可能已存在派生图,请先确认」——请求压根没发出去,不可能有派生图。这是原谎报的
镜像版本。用 perfectPixelPostAttempted 标记划界,顺带省掉一次无意义的权威读取。
二、占位存活分支调用 applyProjectSnapshot(reconciled) 不传 action。传给该 hook 的
是 ImageCanvasEditorView 的 applyGeneratedProjectSnapshot,其 action 默认值是
generate-image,因此会写一条类型错误且受撤销保护的历史。而权威快照此刻与本地一致
(占位都在),套用它只会覆盖用户在请求期间的未保存编辑。改为不调用——这次 GET 的
用途是判定,不是同步。
顺带核实:素材库同步没有问题,applyGeneratedProjectSnapshot 内部已经
void refreshAssetLibrary()。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-01 11:53:36 +00:00 |
|
lhk229
|
cc88564d4a
|
完美像素未知结果先对账再定性
Project CI / Repository checks (pull_request) Failing after 47s
Project CI / Frontend tests (pull_request) Successful in 2m53s
Project CI / Backend tests (pull_request) Successful in 3m32s
Project CI / Native shell tests (pull_request) Failing after 7m31s
catch 此前对所有错误一视同仁:标 failed、finally 解锁、按钮恢复可点。transport
异常、abort 和 120 秒客户端超时因此被谎报成明确失败,而服务端此时很可能已经完成
OSS PUT、asset object、project resource、账号素材和画布回填,只是响应没回来。用户
按提示重试就再造一整份。这违反本功能自己立下的契约:结果未知时先 GET 权威快照,
由用户显式决定是否再次执行。
判别依据是 ApiClientError 只在拿到 Response 时由 buildApiClientError 构造,
transport 异常、AbortError 和 TimeoutError 在重试判定后原样抛出。已知结果不发
对账 GET,避免每个 400 都多打一次权威读取。
未知结果先 loadEditorProject,再按占位是否存活分流:占位已被 completion 消费掉
说明这次其实成功,按快照收口并写入正常的 perfect-pixel 历史;占位仍在说明画布没
收到结果,同步快照但不写历史,文案要求先核对素材库再决定是否重试——持久化是非
事务的,对象和素材可能已落库而画布回填未完成。对账 GET 本身失败时给独立文案,
不退回谎报。
既有用例 keeps a failed perfect-pixel placeholder 原本用裸 Error 表达「服务端识别
不到网格」,语义不准且会误入对账路径,改为 ApiClientError。harness 新增
dialog-error 输出,否则对账文案不可观测。
刷新后停在 generating 的占位仍无自动收口,需要先给 dialog 增加「无 durable job 的
inline 链路」标记才能在 hydration 后对账,改动面大于本次,单独立项。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-01 11:44:57 +00:00 |
|
lhk229
|
0d7a73b0b2
|
Merge remote-tracking branch 'web/master' into feat/pixel_art2
# Conflicts:
# docs/project-memory/shared-memory/decision-log.md
# docs/project-memory/shared-memory/pitfalls.md
# docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md
# server-rs/crates/api-server/src/editor_project.rs
|
2026-07-31 09:11:12 +00:00 |
|
lhk229
|
ee2cad377f
|
新增画布完美像素功能
在图片工具栏接入完美像素交互、占位流程与历史保护
新增严格像素网格检测和登录态同步处理接口
补齐素材类型校验、持久化边界、并发限制及技术文档
修复 Windows rlib 门禁长文件名解析
|
2026-07-30 11:42:45 +00:00 |
|
AIGameCreator App
|
a36290b2e5
|
合并AI游戏创作智能体与通用Runtime基座
Project CI / Frontend tests (push) Failing after 27s
Project CI / Repository checks (push) Successful in 3m20s
Project CI / Backend tests (push) Successful in 3m52s
Project CI / Native shell tests (push) Successful in 13m19s
合并 codex/ai-game-creator-app 的独立客户端、多智能体 Runtime、Runner 与可扩展 LLM Provider 能力
保留 master 最新画布、钱包、后端和原生壳约束并完成四处语义化冲突合并
补齐根 Vitest 对独立 Tauri guest 模块的隔离测试别名并保持 HostBridge 依赖边界
统一正式工作台与 game-chat 的安全本地预览组件及 native-shell 静态门禁
修复合并态 Rust 格式、前端 lint 与共享文档验证口径
|
2026-07-30 18:01:19 +08:00 |
|
lhk229
|
9655324dea
|
补齐生成 payload 新增 style 字段的测试断言
Project CI / Repository checks (pull_request) Successful in 3m32s
Project CI / Frontend tests (pull_request) Successful in 5m6s
Project CI / Native shell tests (pull_request) Successful in 6m32s
Project CI / Backend tests (pull_request) Successful in 7m50s
useImageCanvasGenerationWorkflow.test.tsx 用 toHaveBeenCalledWith 精确匹配
普通图片生成 payload,本分支为该 payload 增加 style 字段后未同步该文件,
CI 前端测试报 "+ style: none"。
该文件不在本分支改动清单内,故此前未被发现。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-29 09:47:17 +00:00 |
|
kdletters
|
a5906ac26e
|
修复图片交付尺寸与提示重触发
Project CI / Repository checks (push) Successful in 47s
Project CI / Frontend tests (push) Successful in 1m39s
Project CI / Native shell tests (push) Successful in 2m15s
Project CI / Backend tests (push) Successful in 2m56s
统一图片模型的业务交付像素并保留 GPT provider 合法请求尺寸
禁止欠交付图片被放大并返回尺寸降级提示
重置相同 warning 的三秒自动关闭计时
补充前后端回归测试与编辑器契约文档
|
2026-07-27 21:16:01 +08:00 |
|
kdletters
|
25ee537e39
|
修复画布提示与图片尺寸一致性
Project CI / Repository checks (push) Successful in 1m3s
Project CI / Frontend tests (push) Successful in 2m5s
Project CI / Native shell tests (push) Successful in 2m33s
Project CI / Backend tests (push) Successful in 3m9s
提示弹窗三秒后自动消失并保留手动关闭
统一 nanobanana2 与 gpt-image-2 同规格图片的交付像素
补充尺寸归一和提示生命周期回归测试
同步图片画布生成契约文档
|
2026-07-27 20:24:07 +08:00 |
|
AIGameCreator App
|
a3337f4493
|
合并最新master分支
合入 origin/master 最新画布、外部接口与后端模块化改动。
按新队列语义解决画布测试和原生壳检查冲突。
把编辑器 Agent 迁移到模块化实现并适配 LlmRunRequest。
删除已废弃的旧编辑器 Agent 单文件与个人 Claude 本地配置。
|
2026-07-20 16:08:24 +08:00 |
|
zhaojingyan
|
eb608ac6f2
|
完善图片画布撤销保护与操作提示 (#89)
为画布历史记录补充操作类型和内容消失保护
增加撤销成功、恢复成功及阻止提示并在三秒后隐藏
补充拖动、上传、生成和替换等操作的历史语义
保留恢复按钮、Ctrl+Shift+Z 快捷键和双向历史栈
补充撤销与恢复规则的定向测试和说明文档
---------
Co-authored-by: 段舒康 <kdletters@qq.com>
Co-authored-by: kdletters <kdletters@qq.com>
Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/89
Co-authored-by: oj-afraid-student <1373241747@qq.com>
Co-committed-by: oj-afraid-student <1373241747@qq.com>
|
2026-07-20 15:19:48 +08:00 |
|
kdletters
|
d465e9b66c
|
补充图集拆分中的前端表现
维护逐图层拆分状态并在请求结束后可靠清理
源图集显示扫描蒙层和拆图中状态胶囊
工具栏显示旋转图标并禁用重复提交
补充工作流、画布、工具栏测试及入口验收文档
|
2026-07-18 19:52:45 +08:00 |
|
kdletters
|
5468bb3212
|
修复画布生成器恢复串台
区分生成结果归属与派生输入关系,避免角色动作和快速编辑面板串台
补全角色动作、视频、音效、背景音乐与宣发素材的生成器恢复类型
统一清理剪切和素材删除后的关联生成状态,避免孤立占位
补充生成器恢复、宣发类型和删除清理回归测试并同步编辑器文档
|
2026-07-17 21:23:12 +08:00 |
|
lhk229
|
aecabdacfd
|
新抠图算法 (#85)
Co-authored-by: 段舒康 <kdletters@qq.com>
Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/85
Co-authored-by: Linghong <ink29535@proton.me>
Co-committed-by: Linghong <ink29535@proton.me>
|
2026-07-16 18:33:06 +08:00 |
|
AIGameCreator App
|
d575b6887f
|
合并 master 最新改动
同步 origin/master 至 b303605bf
保留项目总控 Runtime 决策并合入后台账号与画布更新
沿用当前 platform-llm LlmRunRequest 接口解决背景决策冲突
|
2026-07-16 17:07:13 +08:00 |
|
kdletters
|
9807295a7d
|
调整画布生成输入与图集快速编辑
隐藏生成面板资源名称字段并恢复提示词输入边框
恢复图标图集快速编辑并仅对单图标禁用
补充工具栏右键菜单工作流回归测试与编辑器文档
|
2026-07-14 23:26:35 +08:00 |
|
AIGameCreator App
|
4ef3dbd677
|
合并主分支最新改动
同步 master 的最新功能与修复
保留 AI 游戏创作客户端分支现有实现
# Conflicts:
# docs/project-memory/shared-memory/decision-log.md
# docs/project-memory/shared-memory/pitfalls.md
# scripts/dev.mjs
# server-rs/crates/api-server/src/editor_screen_background_decision.rs
# server-rs/crates/api-server/src/modules/admin.rs
# src/components/rpg-entry/RpgEntryHomeView.tsx
|
2026-07-14 13:05:45 +08:00 |
|
kdletters
|
ed8be38287
|
统一画布生成资源命名
新增所有生成面板的资源名称输入并统一80字符边界
贯通画布标题、项目资源、素材库与生成请求的名称传播
为图标图集和角色动作补齐命名契约及中间产物后缀
补充前后端回归测试、OpenAPI与编辑器文档
|
2026-07-14 10:27:25 +08:00 |
|
kdletters
|
4e7bcb8f24
|
补齐生成中间产物持久化与拆图提示
图标和UI图集拆分失败时保留主图集并在内联、队列及刷新路径提示
角色、图片修改、图标UI和角色动作链路把可恢复中间产物写入项目与素材库
外部生成摘要新增独立告警字段并清理成功任务的历史错误
同步共享契约、SpacetimeDB迁移与绑定、OpenAPI、设计文档和回归测试
|
2026-07-13 21:41:46 +08:00 |
|
kdletters
|
eae00292a1
|
新增画板图集自动拆分
生成图标图集后自动拆分并持久化独立素材
新增图集工具栏手动拆分入口与权威画布回填
修复连通域切片阅读顺序并补齐前后端测试
同步外部接口与编辑器设计文档
|
2026-07-13 19:10:30 +08:00 |
|
kdletters
|
3cbc33bd69
|
优化画布快速编辑参数与替换规则
快速编辑继承并支持模型、比例和尺寸参数,旧模型回落当前默认模型
仅禁止图标与图标图集快速编辑,图标规范继续按普通图片处理
按用户选定分辨率替换当前图层并保持图层中心位置
补齐后端真实图层校验、移动端避让、定向测试与项目文档
|
2026-07-13 18:48:38 +08:00 |
|
kdletters
|
324f99efdf
|
修复外部生成任务大载荷导致的内存膨胀
阻止图片编辑器将 Data URL 和超限 JSON 写入生成任务,复用 objectKey 等轻量引用
新增外部生成任务摘要投影与分批 payload 压缩回填流程,避免正式列表读取大字段
收紧 SpacetimeDB 发布为永不删数据并移除 Jenkins 普通清库入口,补齐维护窗口门禁
更新生成绑定、运维文档和回归测试,并完成生产数据副本迁移与压缩验证
|
2026-07-11 13:55:05 +08:00 |
|
kdletters
|
e464e62697
|
修复创作页滚动与画布生成状态同步
为创作页恢复可见滚动条并补充样式测试
普通点击画布对象时收敛多选状态,避免批量拖动
裁扩结果先资源化,并在去背完成时保留源图层
队列完成后重读未决项目快照并补充回归测试
同步图片画布持久化文档与长期排障记录
|
2026-07-10 08:46:17 +08:00 |
|
AIGameCreator App
|
67a6cbb8d5
|
合并 master 分支
合并 origin/master 到 AI 游戏创作客户端功能分支。
解决画布文档、决策记录和本地工具配置冲突。
适配背景色决策与编辑器 Agent 测试到现行 LLM API。
|
2026-07-08 11:51:30 +08:00 |
|
kdletters
|
00db7d39ea
|
统一生成器对话框范围行为
移除生成器对话框打开后的安全范围自动拉动视口。
取消快速编辑、裁扩和角色动画面板的画布范围夹取。
保留创建生成器时聚焦新占位的行为并更新回归测试。
|
2026-07-07 19:36:20 +08:00 |
|
AIGameCreator App
|
d2ddb932b3
|
合并 master 更新到 AI 游戏创作分支
合入 master 的画布 Agent、精选素材审核、外部编辑器 API 与认证投影更新
保留当前分支的 AI 游戏创作壳、配置项和 LLM 运行接口改造
解决图片编辑器、LLM、去背景完成、外部生成排序和文档冲突
沿用 master 的 SpacetimeDB auth_store_projection 迁移与生成绑定
|
2026-07-06 11:47:19 +08:00 |
|
kdletters
|
1fb5a0773e
|
修复画板提示与失效项目跳转
画板参考图选择提示改为持续显示并支持手动关闭。
显式项目访问失效时同步切回项目页状态。
补充提示关闭和项目失效回退测试。
|
2026-07-05 18:01:02 +08:00 |
|
kdletters
|
d707613a8b
|
修复画布快速编辑回写与原图元数据
快速编辑回到原图面板流程,避免新建生成器占位
提交快速编辑时传入目标图层并在后端成功后回写画布
快速编辑生成输入记录原图引用,图片信息可展示原图来源
同步前后端测试与图片画布文档记忆
|
2026-07-02 23:05:48 +08:00 |
|
kdletters
|
d50ecbc492
|
修复创作弹窗与生成器引用缓存
未开放工具弹窗补充平台主题背景
画布生成器缓存引用按当前账号过滤
新画布工具栏引导改用文档图片
补充弹窗、引导图和引用归属回归测试
|
2026-06-30 21:50:16 +08:00 |
|
kdletters
|
3530e9251e
|
优化画布任务计时与去背景占位
移除画布任务列表的百分比展示
生成中任务显示阶段和已用时,排队任务不计时
去除背景在项目画布中创建生成占位并通过后端快照完成
补充客户端、工作流和后端契约测试
同步图片画布技术文档和项目记忆
|
2026-06-30 19:24:35 +08:00 |
|