k88936
6764950aec
限制原始图片上传字节
...
将 image 和 mask multipart 字段改为分块读取并限制单字段大小。
新增图片总字节上限、413 错误和字段/总量边界测试。
同步 Raw GPT Image 2 代理技术方案的资源防护合同。
2026-09-12 16:27:23 +08:00
k88936
0944667c37
限制原始图片解码并发
...
为 raw image PNG 预处理增加 AppState 专用 semaphore。
按请求截止时间限制槽位等待和 blocking 解码等待,并让 permit 持有到任务结束。
2026-09-12 16:22:06 +08:00
k88936
bb2f080d3b
分离产物使用 UUID 文件名
...
切分图片文件名改用 UUID,避免把 NodeId 当作物理路径。
继续通过 cut_paths 写入 BoundNode.cut_image_path,保留逻辑节点 ID 与产物路径的独立性。
2026-09-12 16:18:13 +08:00
lhk229
3f69ce8bb7
Merge pull request '重构策划agent,接入新工作流+harness' ( #322 ) from design_agent_refactor into master
...
Project CI / Repository checks (push) Successful in 2m33s
Project CI / Frontend tests (push) Successful in 3m18s
Project CI / Backend tests (push) Successful in 6m13s
Project CI / Native shell tests (push) Successful in 17m28s
Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/322
2026-09-12 16:10:07 +08:00
suzmii
46788edbb8
修复「编辑素材标签」保存后关窗:点「添加」成功后面板保持打开,可连续添加
...
Project CI / Repository checks (pull_request) Successful in 2m44s
Project CI / Frontend tests (pull_request) Successful in 3m37s
Project CI / Backend tests (pull_request) Successful in 7m5s
Project CI / Native shell tests (pull_request) Successful in 17m30s
- 定位关窗来源:面板的 saveResourceClassification 只调 onSaved、从不调 onClose;真正卸载面板的是宿主 index.tsx 的 setResourceClassificationAssetId(null)(在 reloadManifestAfterAssetCommand 里,由 handleResourceClassificationSaved 触发)
- 在宿主层给 reloadManifestAfterAssetCommand 加 keepClassificationPanelOpen 开关:默认仍然收起,删除素材 / 版本替换 / 重命名的既有行为不变,只有标签保存显式传 true
- 标签保存后不再清 resourceClassificationAssetId:面板保持打开,新标签已落成 pill、输入框已清空,用户可以接着加下一个标签
- 关闭面板仍只走头部 ×;标签 pill 内的「删除标签」按钮与删除素材流程都不受影响
- 面板用例:添加后不得调用 onClose、面板仍在、新标签出现在已有标签列表、输入框清空;连续两次「添加」各自写盘且第二次带上累计标签、category 仍原样回传落盘值
- 工台用例(resourceVersionReplacement.test.tsx)补真宿主链路:经工具条「编辑标签」打开面板 → 添加 → 断言写入载荷与面板仍在 → 再添加一次 → 两次写入各自发生且面板依然打开(只测面板组件看不出宿主把面板卸载了)
2026-09-12 15:59:44 +08:00
lhk229
2e87a1403a
自动隔离损坏的策划会话并修复 CI
...
Project CI / Repository checks (pull_request) Successful in 2m40s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / Backend tests (pull_request) Successful in 6m3s
Project CI / Native shell tests (pull_request) Successful in 17m48s
会话读取损坏时自动备份并允许项目继续打开
登记会话重置命令并补齐 Native shell 配置检查
2026-09-12 07:48:07 +00:00
k88936
413707da33
提前拒绝高位深 PNG 解码
...
通过 image crate 的 ImageReader decoder 元数据在像素缓冲分配前拒绝 16-bit PNG。
继续使用同一外部 decoder 执行受限像素读取校验,不手写 PNG 解析器。
2026-09-12 15:40:26 +08:00
k88936
6235fa3298
修复分离状态跨平台原子替换
...
使用唯一临时文件并同步写入,避免 checkpoint 临时文件互相覆盖。
Unix 使用 rename,Windows 使用 MoveFileExW 原子覆盖已有 state.json。
拒绝符号链接和非普通文件目标,并增加覆盖已有目标回归测试。
2026-09-12 15:40:12 +08:00
lhk229
f505d2792f
允许损坏策划会话降级打开项目
...
Project CI / Repository checks (pull_request) Successful in 2m34s
Project CI / Frontend tests (pull_request) Successful in 3m12s
Project CI / Native shell tests (pull_request) Failing after 4m5s
Project CI / Backend tests (pull_request) Successful in 5m51s
会话读取失败时保留工作台与产物访问能力
新增策划会话备份重置命令,不删除工作区产物
2026-09-12 07:33:49 +00:00
suzmii
dc243b0d57
资源工作台「替换素材」候选窗接上预览管线,补齐候选排序、禁用态可读性与删除素材入口
...
Project CI / Repository checks (pull_request) Successful in 2m48s
Project CI / Frontend tests (pull_request) Successful in 3m14s
Project CI / Backend tests (pull_request) Successful in 7m49s
Project CI / Native shell tests (pull_request) Successful in 18m27s
- 「替换素材」候选卡缩略图接入资源卡同一条预览管线:新增 ResourcePreviewMedia,复用同一份预览身份、同一条队列与 LRU 缓存,不再只渲染类型占位图标
- 预览 hook 暴露 sweepVisiblePreviews:弹窗内容挂在 portal 下、不在资源画本 observer 的 root 子树内,改为在「弹窗打开」与「候选区滚动」两个几何变化点显式按同一套视口几何判据兜底放行,不新增第二条加载通路
- 候选排序抽出纯函数 sortResourceReplacementCandidates:可替换(无硬门禁失败)的排最前,其余按后端原名次跟随且仍渲染但禁用;判据与弹窗禁用状态同源,不会出现「排最前却点不动」
- 抽出纯函数 projectResourcesByManifestAssetId,让弹窗素材映射与候选缩略图共用同一份资源投影口径
- 共享选择弹窗的禁用态不再整卡压透明度:变灰只压在缩略图与名称上,「分类不同」这类禁用原因保持全对比度可读(网页端美术画布不传禁用原因,视觉逐字不变)
- 资源卡选中工具条末位新增「删除素材」,前置共享工具条同一套分隔线与前面的非破坏性动作隔开,只在 manifestAssetId 存在时才渲染
- 删除流程抽成 useResourceAssetDeleteFlow(读引用信息 → ResourceAssetDeleteDialog 二次确认 → delete_local_project_asset 的 deleteReferencedVersions 三分支),工具条与面板共用同一份实现,没有第二套删除
- 「编辑素材标签」面板底部只留右下角一个「添加」:点它把输入框内容(含未按回车的尾巴)落成 pill 并按现有写入路径保存,分类仍原样回传落盘原值;删除素材/取消/保存标签三个按钮移除,关闭仍走头部 ×
- 标签 pill 内的删除标签按钮保持不变
- 更新与补充用例:候选排序、排序与禁用同源、候选缩略图真链路与滚动兜底放行、工具条删除入口位置与 IPC 载荷、连带删除分支、面板无删除入口与「添加」语义、禁用态可读性类名契约、工具条动作清单
2026-09-12 15:30:38 +08:00
k88936
8a9d37d5ad
移除分离提示词的破坏性清洗
...
保留描述、返工意见和 NodeId 原文,删除重复截断与字符改写。
返工意见仍由 validate_binding_response 统一执行 MAX_REWORK_NOTE_CHARS 校验。
2026-09-12 15:19:24 +08:00
lhk229
74fad546ff
增加 Responses 槽位安全保险丝
...
拒绝超出 4096 的 output_index,避免异常上游输入触发巨额扩容
补充安全边界测试且不限制正常输出内容
2026-09-12 07:17:16 +00:00
lhk229
16a6cdaf79
修复策划审批回调跨项目污染
...
为审批响应增加项目路径与请求身份校验
防止旧项目回调覆盖当前会话并清理新项目状态
2026-09-12 07:11:40 +00:00
k88936
9bbfc56cd7
修正分离期间保存选项的闭包判断
...
由调用方明确传入的 allowDuringSeparation 直接生效,避免依赖点击时捕获的过期状态。
2026-09-12 15:02:56 +08:00
k88936
e9d0180054
集中管理 GPT Image 2 尺寸限制
...
将请求尺寸压缩与原始编辑校验共用同一组像素、边长和对齐常量。
2026-09-12 15:00:55 +08:00
k88936
664bdd6877
避免伪造原始图片供应商请求编号
...
原始图片响应未提供供应商 request id 时不再写入操作名作为关联编号。
2026-09-12 14:58:21 +08:00
k88936
39a64a864a
声明图片平台使用 reqwest 流式特性
...
为 Part::stream 补齐 platform-image 的直接依赖特性,支持独立构建。
2026-09-12 14:56:54 +08:00
k88936
f055961714
修正分离源图 MIME 识别回退
...
缺失或未知 MIME 时强制走 PNG 规范化,避免非 PNG 数据被误标为 image/png。
2026-09-12 14:55:35 +08:00
k88936
3bcabe36fa
清理字体校验中的冗余空值判断
...
按 FontSource 的实际联合类型保留运行时字体资源校验。
2026-09-12 14:54:49 +08:00
k88936
2bfc870854
复用分离流程已选批次节点
...
让批次校验和应用使用同一份已选节点,避免重复选择造成目标漂移。
2026-09-12 14:54:05 +08:00
k88936
b0e9741e81
在预览区尺寸变化时重新适配画布
...
将画布尺寸纳入适配视口 effect 依赖,恢复面板调整后的自动 fit。
2026-09-12 14:49:30 +08:00
k88936
b52a33cc28
明确提示词清洗的字符映射意图
...
使用 map 替代始终返回 Some 的 filter_map,保持清洗行为不变。
2026-09-12 14:48:42 +08:00
k88936
398edd6e86
将分离状态序列化移入阻塞任务
...
避免在异步执行器线程同步格式化大型 separation state。
2026-09-12 14:48:00 +08:00
k88936
9788087271
修复组件操作失败时确认弹窗卡住
...
当组件更新返回 undefined 时关闭替换或移除确认弹窗,避免操作无反馈地停留。
2026-09-12 14:47:01 +08:00
k88936
329de5fce9
修复组件面板展开状态重置
...
仅在组件存在性发生变化时同步展开状态,避免深拷贝更新意外重新展开。
2026-09-12 14:46:08 +08:00
suzmii
33a85a67b8
Merge remote-tracking branch 'origin/master' into fix/agc-manifest-revision-cas
Project CI / Repository checks (pull_request) Successful in 3m11s
Project CI / Frontend tests (pull_request) Successful in 3m14s
Project CI / Backend tests (pull_request) Successful in 5m38s
Project CI / Native shell tests (pull_request) Successful in 18m27s
2026-09-12 14:44:15 +08:00
lhk229
832f1e8b59
修复策划项目重开运行态恢复
...
Project CI / Repository checks (pull_request) Successful in 2m17s
Project CI / Frontend tests (pull_request) Successful in 3m8s
Project CI / Backend tests (pull_request) Successful in 7m46s
Project CI / Native shell tests (pull_request) Successful in 19m52s
持久化策划项目 design 运行模式并在重开时恢复 design/game 工作台。
补充旧策划会话兼容判断、前端夹具和恢复回归测试。
2026-09-12 06:41:49 +00:00
suzmii
c76ecd07ab
修正合并带入的 rustfmt 漂移与换行符,恢复 Repository checks
...
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / Frontend tests (pull_request) Successful in 3m3s
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Native shell tests (pull_request) Successful in 20m2s
- cargo fmt 三个由 feat/agc-resource-replace 带入且从未跑过 CI 的 Rust 文件:version_resource_replacement.rs、manifest/version_binding_rewrite_tests.rs、tests/version_resource_replacement.rs
- 四个文件统一为 LF,修掉 rustfmt 报的 Incorrect newline style:shared-contracts/game_creation_app.rs、view/project-development/index.tsx、decision-log.md、技术方案文档
- 本地按 CI 链复跑:encoding / npm-workspaces / spacetime-schema / production-ops / preview-deployer / maintenance-page / rustfmt / eslint / typecheck 全部 exit 0
- check:git-hooks 仍红,但红在已知 Windows EBUSY 抖动(rmdir 临时 repo 被占用),Linux CI 不受影响
2026-09-12 14:36:23 +08:00
suzmii
281e6ccf48
Merge branch 'master' into design_agent_refactor
Project CI / Repository checks (pull_request) Successful in 2m31s
Project CI / Frontend tests (pull_request) Successful in 3m5s
Project CI / Backend tests (pull_request) Successful in 6m27s
Project CI / Native shell tests (pull_request) Successful in 20m9s
2026-09-12 14:25:29 +08:00
lhk229
013c756b9e
Merge pull request 'CI 偶发失败修复:独立 crate 的 crates.io 预热缺口与两条用例自身缺陷' ( #328 ) from fix/ci-flaky-and-crates-io-fetch into master
...
Project CI / Repository checks (push) Successful in 2m42s
Project CI / Frontend tests (push) Successful in 3m28s
Project CI / Backend tests (push) Successful in 7m1s
Project CI / Native shell tests (push) Successful in 20m19s
Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/328
Reviewed-by: 孔令弘 <ink29535@proton.me >
2026-09-12 14:23:46 +08:00
suzmii
e4ee6c2be8
合并 feat/agc-resource-replace:把「替换素材」接进资源工作台
...
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m14s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Native shell tests (pull_request) Successful in 20m52s
- 解冲突 project/manifest.rs:保留版本写入公共体 write_manifest_locked_with_version_guard(版本只追加 + 绑定改写放行),并把 schema 校验并入该公共体,两侧语义都不丢
- 解冲突 shared-contracts:取当前分支的读显示口径 game_creation_app_asset_effective_category(含与 TS 交叉钉住的 EFFECTIVE_CATEGORY_CONTRACT 矩阵),同步改写 version_resource_replacement 对旧函数名的调用
- 解冲突 index.tsx:两处均为纯 import 追加,两侧都保留
- 解冲突 decision-log 与技术方案文档:两侧条目都是追加,全部保留
- 随之进入本分支:版本绑定改写窄放行通道、直接替换命令与其兼容性判据、资源卡工具条「替换素材」入口
2026-09-12 14:19:03 +08:00
lhk229
e602d3b420
Merge branch 'master' into fix/ci-flaky-and-crates-io-fetch
Project CI / Repository checks (pull_request) Successful in 2m38s
Project CI / Frontend tests (pull_request) Successful in 3m23s
Project CI / Backend tests (pull_request) Successful in 13m24s
Project CI / Native shell tests (pull_request) Successful in 23m40s
2026-09-12 13:56:23 +08:00
k88936
e4d70fbe1b
移除 Raw 编辑无效恢复审计字段
...
Project CI / Repository checks (pull_request) Successful in 2m59s
Project CI / Frontend tests (pull_request) Successful in 3m18s
Project CI / Backend tests (pull_request) Successful in 7m7s
Project CI / Native shell tests (pull_request) Successful in 19m53s
RawImageEditResult 仅保留实际透传的 b64_images
删除 raw-edit 不会产生的恢复审计转发与文档描述
补充 PreparedRawImageEdit 的 Debug 派生以通过现有测试
2026-09-12 13:50:25 +08:00
k88936
aaa9d3fb6f
补齐 Raw 编辑恢复审计语义
...
保留 recovered_failure_audits 公共字段并注明当前同步无回退不变量
让 raw handler 记录未来恢复审计并写入成功摘要计数
同步 Raw GPT Image 2 技术方案文档
2026-09-12 13:44:17 +08:00
k88936
bd127846f7
允许分离流程在忙碌态保存结果
...
保留 isSeparating 属于 isAiRunning 的全局语义
为内部分离保存增加受控 allowDuringSeparation 选项
2026-09-12 13:36:30 +08:00
suzmii
3015370286
补 C7 版本切换「重载当前预览」验收测试
...
- resourceVersionSwitch 新增用例:运行模块内切换版本必须既上报宿主又触发 onPlay 重载预览
- 覆盖验收用例 S16 的「并重载当前预览」条款(此前版本入口只测了记录层与高亮,重载没有守卫)
- 变异验证:摘掉 selectActiveVersion 里的 onPlay 调用后,该用例以 expected "spy" to be called at least once 失败
- 定向验证:resourceVersionSwitch 4 passed
2026-09-12 13:34:32 +08:00
suzmii
028b20a590
修复清单快照误判:CAS 判据面收窄为「资源 + 版本」,预览起停不再触发用户可见拒收
...
- projectResourceLiveUpdateModel 新增 manifestCasFingerprint,按 { assets, versions } 判定同版本号冲突
- 同 revision 且判据面一致时,仅非 CAS 账目状态(preview 运行地址/端口、任务进度、项目名)变化改为 accepted 并让内容落地,revision 不推不退
- 判据面变化仍判 revision-conflict,保留「改了被保护内容却没推 revision」的可观测信号,不吞真实缺陷
- 新增回归用例:同 revision 仅预览状态变化必须被接受;同 revision 资产变化必须仍被拒收
- 变异验证:把判据改回整份 JSON 指纹后,新用例以 expected 'revision-conflict' to be 'accepted' 失败
- 定向验证:projectResourceLiveUpdateModel 17 passed、workspaceLauncherManifestMerge 5 passed、appSurface 413 passed、npm run typecheck exit 0、npm run check:encoding 4399 files passed、git diff --check 干净
- 同步 decision-log 与 pitfalls 记录 CAS 判据面契约与本次取证
2026-09-12 13:30:18 +08:00
lhk229
a4373d7494
修正策划资源文档引用路径
...
Project CI / Repository checks (pull_request) Successful in 2m38s
Project CI / Frontend tests (pull_request) Successful in 3m15s
Project CI / Backend tests (pull_request) Successful in 6m44s
Project CI / Native shell tests (pull_request) Successful in 17m36s
将阶段 Skill 和系统模块中的旧附件名称统一为资源逻辑路径。
修正模板、范例、系统总纲及模块配套文件引用。
2026-09-12 05:28:26 +00:00
k88936
b1751784ba
修正切分状态写入日志格式
...
移除状态写入完成日志中多余的格式参数
2026-09-12 13:26:36 +08:00
lhk229
34616e1631
修复 CI 调试工作区测试
...
Project CI / Repository checks (pull_request) Successful in 2m42s
Project CI / Frontend tests (pull_request) Successful in 3m15s
Project CI / Backend tests (pull_request) Successful in 7m2s
Project CI / Native shell tests (pull_request) Successful in 19m28s
格式化 design runtime 调试命令
为 debug fixture 测试显式开启并清理 debug 环境变量
2026-09-12 05:21:21 +00:00
k88936
379611d552
避免渲染阶段写入画布尺寸引用
...
在 ResizeObserver 尺寸更新回调中同步 canvasSizeRef
2026-09-12 13:20:30 +08:00
k88936
ef04a19d5a
抽取组件确认弹窗公共结构
...
统一替换与移除操作的确认弹窗布局
保留各操作独立文案与按钮样式
2026-09-12 13:19:59 +08:00
k88936
206b4830a1
复用原图编辑错误摘要
...
解析失败分支只计算一次截断响应并同时用于审计与错误返回
2026-09-12 13:19:10 +08:00
k88936
4b8e268816
统一重启切分失败通知
...
restartSeparation 失败时复用工作流完成上报并清理完成提示
2026-09-12 13:18:30 +08:00
k88936
7e7d6f1563
避免忙碌时继续切分隐藏恢复提示
...
在清理恢复对话框前检查分离与工作流忙碌状态
2026-09-12 13:18:13 +08:00
k88936
a4b1d81123
避免忙碌时重启切分丢失恢复状态
...
restartSeparation 在清理 sidecar 前复用并发工作流守卫
2026-09-12 13:17:52 +08:00
k88936
983b15c3a7
允许恢复流程识别已完成的素材回填
...
同一 Sprite 已绑定的节点直接跳过
仅对缺失 Image 或绑定其他素材报告错误
2026-09-12 13:17:38 +08:00
k88936
cdb6fcfe97
切换组件时重置检查面板展开状态
...
按组件身份变化同步展开状态,避免沿用上一个节点的折叠状态
2026-09-12 13:17:01 +08:00
k88936
d8a4e35232
减少切分状态写入的重复克隆
...
让状态写入接口借用状态并在阻塞任务中写入序列化字节
保留 schema 与大小校验,避免每批次复制完整状态树
2026-09-12 13:16:25 +08:00
k88936
0726106818
为图片分离请求设置超时
...
将原图编辑 HTTP 请求限制为 120 秒,避免工作流永久阻塞
2026-09-12 13:14:22 +08:00