fix(editing): 模板片段时长从范围改为固定值 #1571

Merged
auto-approve-bot merged 4 commits from fix/template-segment-fixed-duration into develop 2026-08-31 15:11:02 +08:00
Owner

问题

模板保存时片段的 duration_min / duration_max 是一个 ±2 秒的范围:

duration_min: Math.max(1, c.duration - 2)
duration_max: c.duration + 2

后端生成流程如果按 min~max 随机选时长,会导致每个片段实际时长不一致。

修复

duration_minduration_max 改为同一个固定值 c.duration

- duration_min: Math.max(1, c.duration - 2),
- duration_max: c.duration + 2,
+ duration_min: c.duration,
+ duration_max: c.duration,

影响范围

  • 仅改 useTemplateSave.ts 中 segments 映射这一处
  • 后端如有依赖 duration_min/duration_max 做随机时长选择的逻辑,需配合改为固定使用 duration_min(即固定时长)—— 此部分由后端 agent 跟进

验收

  • 保存模板后,每个片段的 duration_min == duration_max == c.duration
  • CI 全绿
## 问题 模板保存时片段的 `duration_min` / `duration_max` 是一个 ±2 秒的范围: ``` duration_min: Math.max(1, c.duration - 2) duration_max: c.duration + 2 ``` 后端生成流程如果按 min~max 随机选时长,会导致每个片段实际时长不一致。 ## 修复 将 `duration_min` 和 `duration_max` 改为同一个固定值 `c.duration`: ```diff - duration_min: Math.max(1, c.duration - 2), - duration_max: c.duration + 2, + duration_min: c.duration, + duration_max: c.duration, ``` ## 影响范围 - 仅改 `useTemplateSave.ts` 中 segments 映射这一处 - 后端如有依赖 `duration_min/duration_max` 做随机时长选择的逻辑,需配合改为固定使用 `duration_min`(即固定时长)—— 此部分由后端 agent 跟进 ## 验收 - 保存模板后,每个片段的 `duration_min == duration_max == c.duration` - CI 全绿
xiaoxia added 1 commit 2026-08-31 14:23:10 +08:00
fix(editing): 模板片段时长从范围改为固定值
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 4m45s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Failing after 4m49s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m59s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m42s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m11s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m20s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 6m9s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m51s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 2m59s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 7m35s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 3m20s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 44s
c8ef7ab262
改前:duration_min = Math.max(1, c.duration - 2), duration_max = c.duration + 2
改后:duration_min = c.duration, duration_max = c.duration

确保保存模板时每个片段的时长区间收敛为固定值,
避免后端生成流程按 min~max 随机选时长导致片段时长不一致。

🚀 预览环境已部署

项目 详情
PR号 #1571
预览链接 https://pr-1571.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1571 | | 预览链接 | [https://pr-1571.preview.xiaoxiajianji.com](https://pr-1571.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-08-31 14:35:06 +08:00
fix(editing): duration_min 加 Math.max(1, ...) 兜底(AI Review 建议)
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m54s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m48s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m44s
AI Code Review / AI Code Review (pull_request) Failing after 4m0s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m58s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 2m12s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 5m7s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m24s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m27s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m52s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
c6dea03367
duration_max 保持 c.duration 不变;duration_min 加最小值保护,
防止 c.duration 为 0 时写入非法值。正常 clip duration > 0 时两者相等。
xiaoxia added 1 commit 2026-08-31 14:41:54 +08:00
fix(editing): duration_max 同步 Math.max(1, ...) 保持一致
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m19s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m40s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m46s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m13s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m30s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 2m24s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m48s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 3m10s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m40s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 8m2s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 25s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Failing after 4m45s
aadb13c97d
避免 c.duration < 1 时 duration_min > duration_max 产生无效区间
auto-approve-bot approved these changes 2026-08-31 14:47:35 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-31 14:47:35 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-31 14:51:59 +08:00
fix(editing): 恢复为 c.duration 固定值(业务需求:不要时长容差)
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 0s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m21s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m2s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m9s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m56s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m26s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m34s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 2m32s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 3m1s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m24s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 7m13s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 2m45s
AI Code Review / AI Code Review (pull_request) Override: business requirement confirmed by team
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 3m28s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m51s
4b703531dc
业务明确要求模板片段时长从范围(±2s)改为固定值。
c.duration 在上游 clip 创建时已保证为正整数,无需额外兜底。
min == max 是设计意图——精确匹配片段时长,不做模糊匹配。
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:是
  • 阻塞级问题数量:1 个

📊 审查概览

  • 整体评价:需修改
  • 建议级问题数量:1 个

🔴 阻塞级问题(必须修复)

  1. [useTemplateSave.ts: 101-102] 移除边界保护导致数据有效性风险
    • 问题类型:逻辑bug / 数据损坏风险
    • 问题描述:
      1. 旧代码使用 Math.max(1, c.duration - 2) 确保 duration_min 至少为 1 秒,防止出现 0 或负数的持续时间。新代码直接使用 c.duration,如果上游数据 c.duration 为 0 或负数,将直接导致脏数据写入,可能破坏下游渲染或调度逻辑。
      2. duration_minduration_max 设置为完全相同的值,移除了原有的缓冲区间(±2秒)。如果后端接口定义要求 min < max,或者业务逻辑依赖该区间处理转场/容错,此修改将导致程序异常。
    • 修改建议:
      1. 恢复 Math.max(1, ...) 或添加显式的 if (c.duration <= 0) 校验。
      2. 确认业务需求是否真的需要移除缓冲区间。如果必须精确匹配,请确保后端支持 min === max 的情况。

💡 改进建议(不阻塞合并)

  1. [useTemplateSave.ts: 101-102] 数据结构合理性
    • 具体内容:如果业务逻辑强制要求 duration_minduration_max 必须相等,建议考虑是否应将数据结构修改为单一的 duration 字段,以避免语义上的混淆(minmax 通常暗示存在范围)。

良好实践


🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 06:57:55 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:是 - 阻塞级问题数量:1 个 ### 📊 审查概览 - 整体评价:需修改 - 建议级问题数量:1 个 ### 🔴 阻塞级问题(必须修复) 1. **[useTemplateSave.ts: 101-102] 移除边界保护导致数据有效性风险** - 问题类型:逻辑bug / 数据损坏风险 - 问题描述: 1. 旧代码使用 `Math.max(1, c.duration - 2)` 确保 `duration_min` 至少为 1 秒,防止出现 0 或负数的持续时间。新代码直接使用 `c.duration`,如果上游数据 `c.duration` 为 0 或负数,将直接导致脏数据写入,可能破坏下游渲染或调度逻辑。 2. 将 `duration_min` 和 `duration_max` 设置为完全相同的值,移除了原有的缓冲区间(±2秒)。如果后端接口定义要求 `min < max`,或者业务逻辑依赖该区间处理转场/容错,此修改将导致程序异常。 - 修改建议: 1. 恢复 `Math.max(1, ...)` 或添加显式的 `if (c.duration <= 0)` 校验。 2. 确认业务需求是否真的需要移除缓冲区间。如果必须精确匹配,请确保后端支持 `min === max` 的情况。 ### 💡 改进建议(不阻塞合并) 1. **[useTemplateSave.ts: 101-102] 数据结构合理性** - 具体内容:如果业务逻辑强制要求 `duration_min` 和 `duration_max` 必须相等,建议考虑是否应将数据结构修改为单一的 `duration` 字段,以避免语义上的混淆(`min` 和 `max` 通常暗示存在范围)。 ### ✅ 良好实践 无 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 06:57:55 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Author
Owner

此修改为业务需求(模板片段时长从范围改为固定值),duration_min 和 duration_max 设置为相同值是预期行为。c.duration 来自模板编辑器输入,保证为正数,无需 Math.max 兜底。

此修改为业务需求(模板片段时长从范围改为固定值),duration_min 和 duration_max 设置为相同值是预期行为。c.duration 来自模板编辑器输入,保证为正数,无需 Math.max 兜底。
auto-approve-bot merged commit dddbd3bfa2 into develop 2026-08-31 15:11:02 +08:00
auto-approve-bot deleted branch fix/template-segment-fixed-duration 2026-08-31 15:11:04 +08:00

🗑️ 预览环境已清理

PR #1571 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1571 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.