修复画布生成配方恢复边界

兼容生成配方未来字段与历史完美像素快照
补齐参数回退、旧版恢复告警和本地参考图上传
收紧生成任务幂等比较与裁扩来源归属
同步画布编辑器设计文档和回归测试
This commit is contained in:
2026-08-07 13:19:47 +08:00
parent 323051be29
commit 21b05f9446
13 changed files with 423 additions and 45 deletions
@@ -591,7 +591,10 @@ describe('ImageCanvasGenerationModel', () => {
],
references: [],
});
expect(alias).toMatchObject({ ok: true, warnings: [] });
expect(alias).toMatchObject({
ok: true,
warnings: [expect.objectContaining({ fieldIds: ['style'] })],
});
expect(
alias.ok
? alias.inputs.fields.find((field) => field.id === 'model')?.value
@@ -706,6 +709,50 @@ describe('ImageCanvasGenerationModel', () => {
);
});
it('materializes and warns about missing action parameters', () => {
const decoded = decodeCanvasGenerationInputs({
version: 2,
action: 'video.generate',
fields: [{ id: 'prompt', title: '视频描述', value: '追逐镜头' }],
references: [],
});
expect(decoded).toMatchObject({
ok: true,
inputs: {
fields: expect.arrayContaining([
expect.objectContaining({ id: 'model', value: DEFAULT_VIDEO_MODEL }),
expect.objectContaining({ id: 'durationSeconds', value: 4 }),
]),
},
warnings: expect.arrayContaining([
expect.objectContaining({ fieldIds: ['model'] }),
expect.objectContaining({ fieldIds: ['durationSeconds'] }),
]),
});
const animation = decodeCanvasGenerationInputs({
version: 2,
action: 'character-animation.generate',
fields: [{ id: 'prompt', title: '动作描述', value: '挥手' }],
references: [],
});
expect(animation).toMatchObject({
ok: true,
inputs: {
fields: expect.arrayContaining([
expect.objectContaining({ id: 'frameCount', value: 32 }),
expect.objectContaining({ id: 'durationSeconds', value: 4 }),
]),
},
warnings: expect.arrayContaining([
expect.objectContaining({
fieldIds: ['frameCount', 'durationSeconds'],
}),
]),
});
});
it('falls invalid sound and character animation parameters back to complete defaults', () => {
const sound = decodeCanvasGenerationInputs({
version: 2,