sync(ci): 同步#981修复到main分支(docker兼容性+ruff清理+Unit Tests修复) #1003
Closed
xiaoxia
wants to merge 0 commits from
develop into main
pull from: develop
merge into: xiaoxia:main
xiaoxia:main
xiaoxia:feat/1714-upload-dedup
xiaoxia:fix/1677-review-followups
xiaoxia:feat/1677-canvas-batch-preview
xiaoxia:feat/1677-batch-generation
xiaoxia:fix/dedup-exclude-self-1702
xiaoxia:fix/dedup-zero-rate-1702
xiaoxia:fix/style-main-sync
xiaoxia:release/sync-develop-20260904
xiaoxia:fix/voice-duration-filter-and-warning-removal
xiaoxia:feature/clip-duration-voice-alignment
xiaoxia:fix/title-position-fallback-wrap-consistency
xiaoxia:fix/dedup-coverage-and-retry-bug
xiaoxia:feature/1659-dynamic-keyframe-sliding-window
xiaoxia:fix/ai-badge-overflow
xiaoxia:feat/cross-video-avoidance-1670
xiaoxia:feat/fingerprint-chunks-1657
xiaoxia:fix/ai-badge-fallback
xiaoxia:fix/extract-voice-api-path
xiaoxia:fix/ruff-b904-voices
xiaoxia:feat/segment-random-shuffle-1663
xiaoxia:fix/tts-duration-and-video-extract
xiaoxia:feat/extract-video-voice-and-source-label
xiaoxia:fix/auto-merge-race-condition
xiaoxia:diag/ref-env-test
xiaoxia:fix/upload-asset-not-visible-immediately
xiaoxia:infra/fix-main-workflows
xiaoxia:fix/ci-mypy-integ
xiaoxia:fix/disable-pr-auto-scan-schedule
xiaoxia:ci/canary-workflow
xiaoxia:fix/playwright-base-image
xiaoxia:feat/config-phase4-env-render
xiaoxia:fix/ci-production-deploy-skip
xiaoxia:fix/remove-duplicate-034-migration
xiaoxia:feat/ci-base-image-autobuild
xiaoxia:fix/preset-4items
xiaoxia:feat/smart-match-integration
xiaoxia:fix/video-duration-mismatch
xiaoxia:fix/title-preset-t-render
xiaoxia:fix/web-duplicate-rate-mapping
xiaoxia:feat/auto-duplicate-rate-user-scope
xiaoxia:fix/title-drag-pointer-events-and-size
xiaoxia:fix/smart-match-empty-results
xiaoxia:feat/title-drag-position
xiaoxia:fix/smart-match-limit-algorithm
xiaoxia:feat/title-drag-custom
xiaoxia:fix/from-assets-400-clip-config-fallback
xiaoxia:chore/pr-auto-scan-cron-15min
xiaoxia:sync/develop-to-main-v2
xiaoxia:fix/auto-merge-contexts-v2
xiaoxia:fix/psycopg2-to-psycopg3
xiaoxia:fix/prebake-ffmpeg-ci-image
xiaoxia:fix/cache-continue-on-error
xiaoxia:fix/auto-approve-contexts
xiaoxia:fix/buildx-web-cache-bust
xiaoxia:fix/ci-cache-robustness
xiaoxia:fix/check-push-paths-no-checkout
xiaoxia:fix/ci-check-push-paths-checkout
xiaoxia:fix/deploy-staging-skip-bug
xiaoxia:ci/pipeline-speedup-batch2
xiaoxia:feat/product-inline-player
xiaoxia:ci/transient-fault-auto-retry
xiaoxia:ci/image-content-verification
xiaoxia:ci/selfcheck-zombie-run-and-dedupe
xiaoxia:ci/fix-scheduled-jobs-zombie-timeout
xiaoxia:fix/test-hevc-mock-no-sysmodules
xiaoxia:fix/ingest-jobs-404-not-found
xiaoxia:feat/segment-duplication-control
xiaoxia:feat/persist-used-segments
xiaoxia:chore/remove-random-asset-mode
xiaoxia:fix/e2e-6step-generate-flow
xiaoxia:fix/audio-mime-inference
xiaoxia:fix/cover-from-final-video
xiaoxia:feat/merge-step4-step5
xiaoxia:fix/asset-thumbnails
xiaoxia:fix/thumbnail-v2
xiaoxia:fix/thumbnail-url-not-saved
xiaoxia:fix/title-position-default-top
xiaoxia:feat/from-assets-by-template-segments
xiaoxia:feat/mediakit-smart-clip-selection
xiaoxia:fix/restore-backend-files
xiaoxia:fix/cross-task-segment-dedup
xiaoxia:fix/ui-template-thumb-and-material-grid
xiaoxia:fix/cover-title-consistency
xiaoxia:fix/voice-library-id-passthrough
xiaoxia:fix/mark-clips-ready-after-from-assets
xiaoxia:fix/ass-fontsize-compensation-1.35
xiaoxia:fix/call-clips-from-assets
xiaoxia:fix/font-name-map-noto-sans-sc
xiaoxia:fix/restore-preview-step4-5-step7-video
xiaoxia:fix/editor-clips-random-start-time
xiaoxia:fix/remove-preview-and-generate-count
xiaoxia:fix/title-line-height
xiaoxia:fix/title-margin-top-120
xiaoxia:fix/title-size-max-128
xiaoxia:fix/preview-coord-system
xiaoxia:fix/title-fullwidth-slash
xiaoxia:fix/voice-preview-materials-v2
xiaoxia:fix/voice-preview-materials
xiaoxia:fix/preview-resolution
xiaoxia:feat/server-rendered-preview
xiaoxia:fix/source-edit-plan-id-v2
xiaoxia:chore/cleanup-template-editor-generation
xiaoxia:feat/sync-edit-plan-clips
xiaoxia:refactor/worker-use-edit-plan-clips
xiaoxia:fix/cover-title-style-e2
xiaoxia:fix/batch-writeback-once
xiaoxia:fix/edit-flow-data-chain
xiaoxia:fix/cover-ffmpeg-title-overlay
xiaoxia:fix/mediakit-completed-status
xiaoxia:fix/cover-mediakit-timeout
xiaoxia:fix/cover-extract-from-source-asset
xiaoxia:fix/webcodecs-decode-failure-fallback
xiaoxia:feat/hevc-auto-transcode
xiaoxia:fix/ai-code-review-blocking-v2
xiaoxia:fix/ai-code-review-blocking
xiaoxia:fix/hevc-description
xiaoxia:fix/infinity-samples
xiaoxia:fix/all-canvas-issues
xiaoxia:fix/promise-timeout
xiaoxia:fix/demux-async
xiaoxia:fix/optional-chaining-safety
xiaoxia:fix/frontend-segment-extraction
xiaoxia:fix/canvas-description-cache-and-keyframe
xiaoxia:fix/fullbox-offset-and-title-split
xiaoxia:fix/preview-player-4-issues
xiaoxia:fix/canvas-black-screen-voice-validation
xiaoxia:fix/canvas-player-issues
xiaoxia:fix/preview-player-v8
xiaoxia:fix/preview-player-v7
xiaoxia:fix/preview-player-v5
xiaoxia:fix/preview-player-v4
xiaoxia:fix/preview-player-v3
xiaoxia:fix/preview-player-v2
xiaoxia:fix/preview-player-playback-and-title
xiaoxia:fix/assets-batch-endpoint
xiaoxia:fix/usePreviewAssets-infinite-loop
xiaoxia:fix/token-refresh-bugs
xiaoxia:cleanup/remove-unused-preview-props
xiaoxia:refactor/frontend-preview-player
xiaoxia:fix/cover-url-in-finalize
xiaoxia:feat/upload-cover-and-title-in-generate
xiaoxia:fix/batch-download-session-flaky-v2
xiaoxia:fix/test-clip-mock-fields
xiaoxia:feat/title-style-panel-to-step5
xiaoxia:fix/flaky-batch-download-session-test
xiaoxia:fix/clips-api-response-structure
xiaoxia:fix/proactive-token-refresh
xiaoxia:fix/token-refresh-test-fix
xiaoxia:feat/clips-asset-url
xiaoxia:fix/canvas-video-resolution-match
xiaoxia:fix/worker-cjk-fonts
xiaoxia:fix/preview-title-render
xiaoxia:fix/cover-extract-frames
xiaoxia:fix/render-bool-config-crash
xiaoxia:fix/restore-showTitlePreview-prop
xiaoxia:fix/ts-errors-pr1382
xiaoxia:fix/bool-config-crash
xiaoxia:fix/e2e-step-order-adapt
xiaoxia:feat/title-preview-right-panel
xiaoxia:fix/title-config-param-mapping
xiaoxia:feat/title-preview-canvas-v2
xiaoxia:fix/auto-merge-ai-review-check
xiaoxia:fix/cover-title-overlay
xiaoxia:fix/cover-title-asr-path
xiaoxia:fix/cover-500-logger-and-source-plan-fallback
xiaoxia:fix/flaky-test-batch-download
xiaoxia:fix/auto-format-merge-commit-consistency
xiaoxia:fix/cover-generation-unify
xiaoxia:fix/custom-title-render
xiaoxia:fix/video-ratio-resolution-parsing
xiaoxia:fix/cover-templates-double-encoded-config
xiaoxia:fix/api-ffmpeg-missing
xiaoxia:fix/double-slash-oss-path
xiaoxia:fix/cover-types-import-paths
xiaoxia:refactor/decouple-cover-types-from-editing-planner
xiaoxia:optimize/cover-generation-speed
xiaoxia:fix/cover-issues-1341
xiaoxia:fix/confirm-api-path-1341
xiaoxia:fix/cover-error-logging-1347
xiaoxia:fix/remove-unused-useRef-import
xiaoxia:fix/cover-generation-issues-1341
xiaoxia:fix/totalDuration-duplicate-develop
xiaoxia:feat/cover-generation-ui-1341
xiaoxia:fix/cover-generation-progress-modal
xiaoxia:fix/remove-selected-template-text
xiaoxia:feature/unify-preview-confirm-render-path
xiaoxia:fix/generate-fallback-user-assets
xiaoxia:fix/worker-entrypoint-w-flag
xiaoxia:fix/cover-stub-placeholder-url
xiaoxia:fix/cover-field-name-1317
xiaoxia:fix/thumbnail-yuv-format
xiaoxia:fix/cover-templates-error-handling
xiaoxia:feat/cover-templates-api-integration
xiaoxia:feat/cover-settings-redesign
xiaoxia:fix/audio-only-clips-in-filter-complex
xiaoxia:fix/preview-voice-ids-fallback
xiaoxia:fix/confirm-generation-api-develop
xiaoxia:fix/sync-confirm-api-to-develop
xiaoxia:fix/issue-1294-preview-voiceover-asr-fallback
xiaoxia:fix/issue-1294-preview-voiceover-asr-init
xiaoxia:fix/worker-concurrency-default-4
xiaoxia:fix/auto-approve-skipped-status
xiaoxia:fix/e2e-title-input-timing
xiaoxia:bugfix/1294-preview-voice-injection
xiaoxia:fix/e2e-title-placeholder-v2
xiaoxia:fix/ci-lower-coverage-threshold
xiaoxia:fix/e2e-title-placeholder
xiaoxia:fix/preview-improvements
xiaoxia:feature/1286-preview-count-validation-and-worker-concurrency
xiaoxia:bugfix/1286-staging-ci-shell-quoting
xiaoxia:feature/1286-can-generate-auto-repair
xiaoxia:bugfix/1286-staging-ci-tests-fix
xiaoxia:fix/ci-concurrency-lock
xiaoxia:feature/1280-preview-generation-speedup
xiaoxia:fix/staging-tests-npm-retry
xiaoxia:feature/1256-random-asset-selection-preview
xiaoxia:feat/issue-1256-auto-smart-match
xiaoxia:fix/quota-test-wave78-pro-sync
xiaoxia:feat/upload-voice-modal-visual
xiaoxia:feat/remove-result-panel-and-plan-info
xiaoxia:fix/quota-pro-tier-fallback
xiaoxia:fix/asset-create-optional-project-id
xiaoxia:feature/integrate-cover-generation
xiaoxia:fix/step6-cover-ratio-label
xiaoxia:feat/step4-title-autocomplete
xiaoxia:fix/canvas-titlecentering-v2
xiaoxia:fix/skip-source-audio-in-mix
xiaoxia:feat/no-video-cleanup-and-centering-fix
xiaoxia:feat/title-preview-canvas
xiaoxia:feat/unify-asset-selection
xiaoxia:fix/pip-removal-and-title-wrap
xiaoxia:fix/preset-font-preview
xiaoxia:fix/preview-strategy-id-from-template
xiaoxia:fix/title-preview-overlay
xiaoxia:fix/preview-generation-3-issues
xiaoxia:fix/1221-auth-401-interceptor
xiaoxia:feat/preset-voice-previews-round2
xiaoxia:feat/preset-voice-previews
xiaoxia:feat/mediakit-ai-cover-1208
xiaoxia:fix/download-assets-allow-asset-ids-only
xiaoxia:feat/preview-generation-1197
xiaoxia:feat/voice-clone-preview-1195
xiaoxia:refactor/bind-contact-modal-split
xiaoxia:test/wave207-inmemory-small-repos
xiaoxia:test/wave219-template-clip-config
xiaoxia:refactor/asset-selector-split
xiaoxia:test/wave218-batch-download
xiaoxia:test/wave214-text-splitter
xiaoxia:test/wave213-bind-contact
xiaoxia:test/wave212-login-use-case
xiaoxia:test/wave211-password-reset
xiaoxia:test/wave210-verification-code
xiaoxia:test/wave209-jwt-auth
xiaoxia:test/wave203-bgm-mixer-pure
xiaoxia:test/wave202-multi-track-mixer-pure
xiaoxia:test/wave200-pip-engine-pure
xiaoxia:test/wave191-edit-template
xiaoxia:test/wave208-password-auth
xiaoxia:test/wave206-inmemory-repos
xiaoxia:test/wave205-path-security
xiaoxia:test/wave204-text-splitter-pagination
xiaoxia:test/wave201-concat-engine-pure
xiaoxia:refactor/generate-video-split
xiaoxia:test/wave199-sticker-engine-pure
xiaoxia:refactor/video-player-hook
xiaoxia:test/wave198-shared-ai-service
xiaoxia:test/wave196-auth-session-store
xiaoxia:test/wave197-asset-compat
xiaoxia:test/wave195-verification-code
xiaoxia:test/wave194-tts-config
xiaoxia:test/wave193-video-share
xiaoxia:test/wave192-media-validation
xiaoxia:refactor/generate-form-state
xiaoxia:test/wave190-preset-voices
xiaoxia:test/wave189-preset-bgm
xiaoxia:test/wave188-video-concat
xiaoxia:test/wave187-speed-config
xiaoxia:test/wave186-subtitle
xiaoxia:refactor/task-table
xiaoxia:test/wave185-audio-track-config
xiaoxia:test/wave184-intro-outro-config
xiaoxia:test/wave183-voice-presets
xiaoxia:test/wave182-config-schemas
xiaoxia:fix/develop-unit-tests-failure
xiaoxia:fix/frontend-unit-test-smoke-test
xiaoxia:fix/ci-unit-test-coverage-threshold
xiaoxia:fix/tts-panel-voices-api-v2
xiaoxia:fix/voice-clone-preview-play-1195
xiaoxia:test-branch-123
xiaoxia:fix/main-deploy-staging-manual
xiaoxia:merge/develop-ci-scripts
xiaoxia:fix/vitest-exclude-e2e
xiaoxia:test/wave173-pip-config
xiaoxia:fix/ci-staging-deploy-and-notify-0728
xiaoxia:fix/ci-production-build-bugs-0728
xiaoxia:fix/preview-cleanup-ssh-default
xiaoxia:fix/daily-check-outputs
xiaoxia:fix/auto-merge-short-job
xiaoxia:fix/build-production-needs-tests
xiaoxia:fix/pr-path-filter-skip
xiaoxia:fix/code-review-ci-gate
xiaoxia:test/wave164-filter-presets
xiaoxia:fix/pr-automation-concurrency
xiaoxia:fix/ci-pr-automation-optimization-0728
xiaoxia:refactor/generate-result-panel
xiaoxia:test/wave163-watermark-config
xiaoxia:refactor/step6-cover-settings
xiaoxia:test/wave162-asset-scoring
xiaoxia:refactor/use-product-actions
xiaoxia:test/wave161-domain-entities
xiaoxia:test/wave160-job-domain
xiaoxia:refactor/use-timeline-menus
xiaoxia:refactor/step7-confirm
xiaoxia:refactor/use-step5-voice
xiaoxia:test/wave140-watermark-config
xiaoxia:test/wave139-url-security
xiaoxia:test/wave159-template-clip-config
xiaoxia:test/wave158-edit-plan
xiaoxia:test/wave157-domain-small-modules
xiaoxia:test/wave156-generation-task
xiaoxia:test/wave155-generated-video
xiaoxia:test/wave154-classification
xiaoxia:test/wave153-edit-plan-clip
xiaoxia:fix/ci-p1-p2-optimizations-0728
xiaoxia:test/wave152-duplication
xiaoxia:test/wave151-quota
xiaoxia:fix/clone-upload-422-and-types-path
xiaoxia:test/wave172-color-grade-config
xiaoxia:test/wave171-subtitle-style
xiaoxia:test/wave170-chroma-key-config
xiaoxia:test/wave169-ass-subtitle-builder
xiaoxia:test/wave168-transition-presets
xiaoxia:test/wave167-sticker-config
xiaoxia:test/wave166-plan-generator-utils
xiaoxia:refactor/green-screen-panel
xiaoxia:test/wave165-trim-config
xiaoxia:refactor/clip-mutations
xiaoxia:fix/ci-p0-bugs-0728
xiaoxia:refactor/material-form
xiaoxia:refactor/clone-voice-card
xiaoxia:refactor/tag-selector
xiaoxia:fix/voice-material-types-path
xiaoxia:refactor/use-voice-material-actions
xiaoxia:fix/ruff-config-pyproject
xiaoxia:test/wave144-tts-job
xiaoxia:test/wave142-transition-presets
xiaoxia:fix/ci-gate-exit-code-develop
xiaoxia:fix/ci-gate-exit-code-main
xiaoxia:fix/auto-fix-loop-detection
xiaoxia:refactor/asset-selector
xiaoxia:refactor/generate-video-hook
xiaoxia:test/auto-format-verify-0727
xiaoxia:refactor/voice-materials-p4
xiaoxia:feature/ai-review-status
xiaoxia:refactor/use-voice-materials-split
xiaoxia:refactor/voice-library-deepen
xiaoxia:refactor/generate-page-phase1
xiaoxia:refactor/router-split
xiaoxia:refactor/my-voices
xiaoxia:refactor/clone-modal
xiaoxia:refactor/title-library
xiaoxia:refactor/timeline-panel-phase3-pr
xiaoxia:feature/ai-review-status-develop
xiaoxia:feature/auto-fix-all-prs-develop
xiaoxia:test/wave132-wechat-oauth-unit
xiaoxia:test/ci-format-auto-fix-0727
xiaoxia:test/wave131-password-hasher
xiaoxia:test/wave130-jwt-service
xiaoxia:test/wave129-asset-scoring
xiaoxia:test/wave128-url-security
xiaoxia:test/wave127-template-data-unit
xiaoxia:test/wave126-small-domain-unit
xiaoxia:test/wave125-entities-unit
xiaoxia:test/wave124-quota-unit
xiaoxia:test/wave123-job-unit
xiaoxia:refactor/asset-operations-hook
xiaoxia:test/wave117-speed-config
xiaoxia:feature/auto-fix-all-prs
xiaoxia:test/wave118-chroma-key-config
xiaoxia:test/wave119-noise-reduction-config
xiaoxia:test/wave120-ass-subtitle-builder
xiaoxia:test/wave121-xfade-builder
xiaoxia:test/wave122-trim-config
xiaoxia:test/wave91-generation-plan-builder
xiaoxia:test/wave92-asset-scoring
xiaoxia:test/wave93-duplication-domain
xiaoxia:test/wave94-media-validation
xiaoxia:test/wave95-domain-entities
xiaoxia:test/wave96-job-domain
xiaoxia:test/wave97-quota-domain
xiaoxia:test/wave98-preset-bgm
xiaoxia:test/wave99-small-domain-modules
xiaoxia:refactor/duplication-detail
xiaoxia:refactor/upload-voice-modal-split
xiaoxia:refactor/product-detail
xiaoxia:refactor/task-history
xiaoxia:refactor/bgm-selector-split
xiaoxia:refactor/use-clip-operations-split
xiaoxia:refactor/template-management-hook
xiaoxia:refactor/asset-library-deepen
xiaoxia:refactor/duplication-results-split
xiaoxia:refactor/clip-detail-section-split
xiaoxia:refactor/layer-config-split
xiaoxia:refactor/cover-selector-split
xiaoxia:refactor/template-editor-api
xiaoxia:refactor/assets-api
xiaoxia:refactor/editing-planner-api
xiaoxia:refactor/voice-clone-api
xiaoxia:refactor/tts-api
xiaoxia:refactor/products-api
xiaoxia:refactor/templates-api
xiaoxia:refactor/voices-api
xiaoxia:refactor/tasks-api
xiaoxia:refactor/titles-api
xiaoxia:refactor/subscription-api
xiaoxia:refactor/duplication-api
xiaoxia:refactor/bgm-projects-tags-api
xiaoxia:refactor/task-center
xiaoxia:refactor/voice-clone-page
xiaoxia:refactor/home-page
xiaoxia:refactor/template-library
xiaoxia:refactor/step5-voice-hook
xiaoxia:refactor/editing-drawers
xiaoxia:refactor/use-step4-title-split
xiaoxia:refactor/use-edit-plan-clips-split
xiaoxia:refactor/editing-planner-deepen
xiaoxia:refactor/editing-planner-types-split
xiaoxia:refactor/product-library-deepen
xiaoxia:refactor/upgrade-subscription-split
xiaoxia:fix/test-agent-docs-path
xiaoxia:fix/ci-daily-check-dood-mount
xiaoxia:fix/ci-daily-check-shell-bash
xiaoxia:refactor/my-templates-split
xiaoxia:fix/ci-format-cleanup-20260727
xiaoxia:test/wave116-trim-config
xiaoxia:test/wave115-watermark-config
xiaoxia:test/wave114-color-grade-config
xiaoxia:test/wave113-transition-config
xiaoxia:test/wave112-intro-outro-config
xiaoxia:test/wave111-audio-track-config
xiaoxia:test/wave110-pip-config
xiaoxia:test/wave90-plan-generator-utils
xiaoxia:test/wave88-streaming-service
xiaoxia:test/wave109-sticker-config
xiaoxia:test/wave108-ai-parsing
xiaoxia:test/wave107-subtitle-style
xiaoxia:test/wave106-video-concat-config
xiaoxia:test/wave105-render-layer-utils
xiaoxia:test/wave104-template-clip-converter
xiaoxia:test/wave100-application-modules
xiaoxia:test/wave103-clip-operations
xiaoxia:test/wave101-video-filter-builder
xiaoxia:pr-932
xiaoxia:test/wave102-template-effect-mapper
xiaoxia:sync/ci-scripts-to-main-20260726
xiaoxia:fix/frontend-lint-clip-type-import
xiaoxia:test/wave89-asset-analyzer-split
xiaoxia:test/wave87-worker-deep-coverage
xiaoxia:refactor/editing-planner-round2
xiaoxia:fix/ci-monitor-workflows-909-910-911
xiaoxia:fix/ci-daily-check-hardcoded-creds-912
xiaoxia:fix/ci-acr-cleanup-pr-days-908
xiaoxia:fix/ci-code-quality-905-914
xiaoxia:fix/ci-preview-deploy-907
xiaoxia:refactor/timeline-panel-phase1-pr
xiaoxia:refactor/timeline-panel-phase1
xiaoxia:refactor/product-library-phase3-final
xiaoxia:fix/ci-unit-tests-collection-906
xiaoxia:refactor/product-library-phase2-pr
xiaoxia:refactor/product-library-phase1
xiaoxia:refactor/editing-planner-phase3
xiaoxia:refactor/editing-planner-phase1
xiaoxia:test/wave86-worker-layer-coverage
xiaoxia:test/wave80-module-registry-subtitle-more
xiaoxia:test/wave85-exceptions-bgm-utils-subtitle-deep
xiaoxia:test/wave84-classification-tts-config-entities-more
xiaoxia:test/wave83-generated-video-verification-video-share-more
xiaoxia:test/wave82-exceptions-template-generated-video-more
xiaoxia:test/wave81-filter-transition-voice-presets-more
xiaoxia:test/wave79-subtitle-generator-text-splitter-more
xiaoxia:test/wave78-duplication-domain
xiaoxia:test/wave75-more-domain-utils
xiaoxia:test/wave77-generation-task-more-domain
xiaoxia:test/wave76-tts-job-state-machine
xiaoxia:test/wave74-classification-bgm-utils-subtitle
xiaoxia:refactor/asset-library-phase2
xiaoxia:fix/052-generation-task-bgm-config-migration
xiaoxia:fix/dedup-pure-test-db-import
xiaoxia:refactor/voice-library-phase3
xiaoxia:feat/ci-canary-release
xiaoxia:feat/ci-sync-renovate-to-main
xiaoxia:test/wave70-dedup-render-subtitles-tts-engine
xiaoxia:test/wave56-worker-more-engines
xiaoxia:refactor/voice-library-phase1
xiaoxia:chore/ci-acr-cleanup-main-sync
xiaoxia:chore/ci-acr-cleanup-enhance
xiaoxia:chore/ci-migration-upgrade-sync-main
xiaoxia:chore/ci-migration-validation-upgrade
xiaoxia:test/wave61-title-library-config-base
xiaoxia:test/wave58-in-memory-repositories
xiaoxia:fix/ci-preview-deploy-npm-ci
xiaoxia:fix/ci-worker-cache-optimization
xiaoxia:fix/staging-shell-sh-to-bash-main
xiaoxia:fix/staging-shell-sh-to-bash
xiaoxia:fix/ruff-f841-b007-detector
xiaoxia:fix/ruff-f401-cleanup
xiaoxia:test/unit-test-wave35
xiaoxia:ci/port-env-cleanup
xiaoxia:chore/sync-main-ci-config
xiaoxia:refactor/unified-enums
xiaoxia:fix/staging-e2e-container-cleanup
xiaoxia:fix/ci-systematic-p0-round2
xiaoxia:fix/jwt-tampered-test-flaky
xiaoxia:fix/black-format-ai-files
xiaoxia:fix/ci-staging-e2e-dood
xiaoxia:fix/wechat-callback-token-order
xiaoxia:fix/ci-systematic-p0-fix
xiaoxia:fix/ci-worker-base-registry
xiaoxia:fix/code-quality-black-format
xiaoxia:fix/ruff-format-2files
xiaoxia:feat/p3-1-tts-job-tests
xiaoxia:feat/p3-1-auth-handlers-tests
xiaoxia:feat/p3-1-wechat-oauth-tests
xiaoxia:feat/video-share-backend
xiaoxia:fix/ai-review-critical-match
xiaoxia:emergency-disk-cleanup
xiaoxia:fix/ci-simplify-merge-speed
xiaoxia:fix/ci-integration-oom-workers
xiaoxia:fix/flaky-jwt-tampered-test
xiaoxia:fix/462-pass-through-watermark
xiaoxia:test/p3-1-wave29-template-use-cases-tests
xiaoxia:fix/633-virtual-clip-transition-duration
xiaoxia:test/p3-1-wave26-tts-workflow-tests
xiaoxia:test/p3-1-wave23-cosyvoice-service-tests
xiaoxia:test/p3-1-wave24-register-password-reset-tests
xiaoxia:test/p3-1-wave28-cosyvoice-service-tests
xiaoxia:fix/login-token-order-bug
xiaoxia:fix/ci-architecture-bugs-3items
xiaoxia:test/p3-1-wave9-auth-service-tests
xiaoxia:test/p3-1-wave7-entities-domain-tests
xiaoxia:feat/ci-pytest-xdist-parallel
xiaoxia:feat/p3-1-validation-utils-tests
xiaoxia:feat/p3-1-module-registry-tests
xiaoxia:feat/p3-1-text-splitter-tests
xiaoxia:fix/ci-auto-merge-short-job-mode
xiaoxia:fix/auto-merge-no-approval-needed
xiaoxia:fix/vitest-related-flag-bug
xiaoxia:fix/worker-build-dood-fallback
xiaoxia:ci/repeated-failure-detection
xiaoxia:ci/validate-parallelization-phase2
xiaoxia:fix/auto-fix-ci-skip
xiaoxia:ci/failure-diagnosis-enhanced
xiaoxia:ci/validate-parallelization
xiaoxia:ci/worker-layered-cache
xiaoxia:fix/check-ci-status-order
xiaoxia:ci/autofix-distinguish-agent
xiaoxia:ci/cache-optimization-plus
xiaoxia:fix/558-wechat-login-fixes
xiaoxia:feat/558-wechat-login-polish
xiaoxia:test/unit-test-coverage-p3-batch2
xiaoxia:opt/restore-registry-cache-to
xiaoxia:p2-6-ci-health-daily
xiaoxia:fix/frontend-ts-error-message-type
xiaoxia:fix/ci-autoapprove-match-branch-protection
xiaoxia:fix/ci-autofix-checkout-force
xiaoxia:fix/ci-p02-checkout-retry
xiaoxia:fix/ci-black-format-worker
xiaoxia:fix/549-preset-voice-one-click-gen
xiaoxia:fix/ci-p01-preview-ssh-key
xiaoxia:fix/ci-pg-container-ip
xiaoxia:feature/agentloop-ci-trace
xiaoxia:feat/smart-edit-flow-restructure
xiaoxia:feat/smart-edit-cover-migration
xiaoxia:feat/frontend-coverage-phase3
xiaoxia:feat/frontend-coverage-phase2
xiaoxia:fix/p1-preset-voice-no-sound
xiaoxia:ci/fix-frontend-test-exclude-e2e
xiaoxia:fix/p1-asset-list-status-and-pagination
xiaoxia:fix/asset-batch-delete-crash
xiaoxia:test/cleanup-verify
xiaoxia:test/preview-e2e-verify
xiaoxia:fix/hevc-encoding-filter-and-auto-select
xiaoxia:ci/p1-4-preview-environment
xiaoxia:fix/download-asset-storage-key
xiaoxia:ci/p1-3-coverage-gate
xiaoxia:ci/fix-auto-approve-sha-and-scheduling
xiaoxia:ci/fix-scheduling-and-sha
xiaoxia:ci/fix-scheduling-label-mismatch
xiaoxia:ci/fix-build-review-prompt
xiaoxia:fix/docker-login-v2
xiaoxia:fix/docker-login-yaml
xiaoxia:feature/p1-2-edit-plan-render-link
xiaoxia:test/auto-merge-verify
xiaoxia:test/ci-trigger-rebase-verify
xiaoxia:test/auto-approve-validation
xiaoxia:feat/ci-auto-approve
xiaoxia:fix/buildx-builder-name-conflict
xiaoxia:fix/auto-merge-token
xiaoxia:fix/registry-login-v3
xiaoxia:fix/registry-login-v2
xiaoxia:fix/ci-build-registry-login
xiaoxia:feature/ai-code-review
xiaoxia:feat/ci-frontend-path-filter
xiaoxia:fix/migration-safety-push-event
xiaoxia:feat/runner-layered-scheduling
xiaoxia:feat/staging-auto-rollback
xiaoxia:feat/registry-retry-stability
xiaoxia:feat/ci-deploy-concurrency
xiaoxia:feat/ci-concurrency-fix
xiaoxia:fix/ci-validate-pg-container
xiaoxia:feat/ci-validate-isolated-pg
xiaoxia:feat/save-plan-as-template
xiaoxia:feat/frontend-ci-speedup
xiaoxia:ci/runner-diagnose
xiaoxia:feat/edit-plan-clips-api
xiaoxia:fix/voice-clone-ssrf
xiaoxia:fix/migration-safety-reliability
xiaoxia:fix/edit-plan-resume-editing
xiaoxia:fix/mypy-hardgate
xiaoxia:feat/mypy-incremental
xiaoxia:fix/task-id-prefix-polling
xiaoxia:fix/generation-put-status-restriction
xiaoxia:debug/ci-build-runs-on
xiaoxia:fix/ci-disable-registry-cache-to
xiaoxia:fix/ci-build-checkout-print
xiaoxia:debug/ci-build-schedule
xiaoxia:fix/runner-build-verify
xiaoxia:test/runner-build-verify
xiaoxia:test/build-farm-label
xiaoxia:fix/ci-build-checkout-parser
xiaoxia:fix/ci-build-checkout-syntax
xiaoxia:fix/ci-build-yaml
xiaoxia:feat/split-build-workflow-v2
xiaoxia:chore/cleanup-main-workflows
xiaoxia:feat/acr-registry-migration
xiaoxia:feat/split-build-workflow
xiaoxia:feat/ci-runner-saas-label
xiaoxia:fix/add-result-count-migration
xiaoxia:fix/matrix-run-newline
xiaoxia:ci/matrix-build-parallelism
xiaoxia:feature/product-center-ui-upgrade
xiaoxia:fix/hard-cut-use-concat
xiaoxia:fix/b007-unused-loop-var
xiaoxia:fix/b011-assert-false
xiaoxia:ci/local-cache-optimization
xiaoxia:fix/migration-diff-ci
xiaoxia:fix/frontend-lint-cache-validation
xiaoxia:ci/registry-cache-stability-fix
xiaoxia:fix/edit-plan-p0-asset-ids-and-p1-fixes
xiaoxia:fix/incremental-scan-api-based
xiaoxia:fix/unified-render-black-format
xiaoxia:fix/ci-incremental-scan-api-based
xiaoxia:fix/edit-plan-result-count-and-logs
xiaoxia:fix/prettier-format-frontend
xiaoxia:fix/ci-trigger-branch-patterns
xiaoxia:perf/web-build-cache-p1
xiaoxia:fix/eslint-npx-version-mismatch
xiaoxia:feat/ci-incremental-lint
xiaoxia:feat/ruff-replace-flake8
xiaoxia:fix/frontend-lint-npx-local
xiaoxia:fix/worker-pythonpath
xiaoxia:feat/worker-image-slimming
xiaoxia:fix/staging-ssh-deploy-call
xiaoxia:fix/staging-ssh-syntax
xiaoxia:feat/staging-ssh-deploy
xiaoxia:fix/code-quality-batch1
xiaoxia:fix/ci-bot-fix-pr
xiaoxia:feat/production-healthcheck
xiaoxia:fix/tech-debt-security-round2
xiaoxia:feat/staging-healthcheck-ci-v2
xiaoxia:temp-clean-npm-cache
xiaoxia:feat/ci-notify-final
xiaoxia:fix/frontend-type-debt-round2
xiaoxia:fix/deploy-notify-continue-on-error
xiaoxia:fix/render-engine-security-p0-p1
xiaoxia:feat/ci-notify-card-and-cache
xiaoxia:feature/task-center-page
xiaoxia:feat/ci-p2-optimization
xiaoxia:fix/pr312-security-debt-p1
xiaoxia:feat/ci-runner-layered
xiaoxia:feat/staging-healthcheck-ci
xiaoxia:fix/ci-buildx-builder
xiaoxia:feat/ci-parallel-build
xiaoxia:feat/multi-track-mix-subtitle-concat
xiaoxia:feat/changelog-auto-generate
xiaoxia:docs/audit-report-20260714
xiaoxia:feat/runner-label-routing
xiaoxia:ops/runner-labels
xiaoxia:feat/release-scripts-clean
xiaoxia:fix/deploy-production-ssh-key
xiaoxia:feat/ci-security-scans
xiaoxia:feat/release-scripts
xiaoxia:feat/video-speed-control
xiaoxia:fix/e2e-unroute-all-stability
xiaoxia:feat/cover-reverse-sticker
xiaoxia:feat/transition-engine
xiaoxia:fix/stub-generation-task-repository-filtered-methods
xiaoxia:feat/video-trimming
xiaoxia:feat/chroma-key-and-noise-reduction
xiaoxia:feat/watermark-intro-outro
xiaoxia:feat/bgm-mixing
xiaoxia:feat/picture-in-picture
xiaoxia:feat/tts-voiceover
xiaoxia:feat/template-and-plan-backend
xiaoxia:fix/build-script-grep-set-e
xiaoxia:feat/color-grading-engine
xiaoxia:feat/asr-auto-subtitles
xiaoxia:feat/video-center-backend
xiaoxia:feat/asset-batch-operations
xiaoxia:fix/build-cache-to-driver
xiaoxia:fix/e2e-disable-gpu
xiaoxia:fix/build-cache-tag
xiaoxia:fix/delete-204-response-body
xiaoxia:fix/ci-quick-fix
xiaoxia:ops/downgrade-runners
xiaoxia:cleanup/phase4-backend-p0
xiaoxia:bugfix/pip-break-system-packages-env
xiaoxia:cleanup/phase4-frontend-p2
xiaoxia:test-ci-verification
xiaoxia:fix/format-all-black-isort-flake8
xiaoxia:feature/ci-verification
xiaoxia:cleanup/phase4-frontend-p0p1
xiaoxia:ops/register-saas-runners
xiaoxia:fix/ci-runs-on-label
xiaoxia:fix/black-isort-format-fix
xiaoxia:fix/ci-pip-and-concurrency
xiaoxia:fix/pip-break-system-packages-compat
xiaoxia:ops/install-cmd-agent
xiaoxia:fix/pip-compatibility-all-runners
xiaoxia:cleanup/phase3-frontend
xiaoxia:feat/ci-security-scanning
xiaoxia:feat/frontend-build-gate
xiaoxia:fix/black-format-check-migration-safety
xiaoxia:ci/migration-safety-mypy
xiaoxia:ci/unify-cicd-config
xiaoxia:docs/ci-runner-planning
xiaoxia:feat/npm-audit-frontend
xiaoxia:cleanup/phase3-backend
xiaoxia:cleanup/phase2-backend
xiaoxia:fix/runner-labels
xiaoxia:cleanup/phase2-frontend
xiaoxia:ci/deploy-script-versioning
xiaoxia:feat/ci-vulture-dead-code
xiaoxia:feat/build-optimization
xiaoxia:feat/frontend-cache-optimization
xiaoxia:fix/redis-url-config
xiaoxia:feat/render-metrics
xiaoxia:cleanup/phase1-backend-v2
xiaoxia:cleanup/frontend-phase1-v2
xiaoxia:fix/develop-black-format
xiaoxia:cleanup/phase1-backend
xiaoxia:fix/generation-task-feature-flag
xiaoxia:cleanup/frontend-phase1
xiaoxia:feat/docker-cache-branch-isolation
xiaoxia:feat/ci-pr-gate-optimization
xiaoxia:feat/stream-copy-optimization
xiaoxia:fix/ffmpeg-timeout-protection
xiaoxia:feat/internal-render-download-api
xiaoxia:fix/dedup-float32-json
xiaoxia:fix/render-compare-p1
xiaoxia:fix/render-edit-plan-bugs
xiaoxia:feature/fix-format-render-adapter
xiaoxia:feat/unified-render-phase2
xiaoxia:feat/unified-render-phase1
xiaoxia:feat/ci-notify-all-jobs-v2
xiaoxia:feat/ci-notify-all-jobs
xiaoxia:fix/asset-status-enum-compat
xiaoxia:fix/generation-project-asset-download
xiaoxia:ci/runner-fix
xiaoxia:fix/classification-status-done-enum
xiaoxia:ci/runner-label-fix
xiaoxia:debug/cmd-agent
xiaoxia:temp/runner-expander
xiaoxia:temp/cmd-agent-fix
xiaoxia:temp/expand-runner
xiaoxia:feat/ci-split-v2
xiaoxia:feat/ci-split-integration-tests
xiaoxia:fix/voice-clone-source-audio-url-sign
xiaoxia:feat/task-queue-rate-limit
xiaoxia:fix/voice-clone-integration-test-assertions
xiaoxia:feat/ci-coverage-gate-and-notify
xiaoxia:fix/ci-validate-cache-exclude
xiaoxia:debug/cosyvoice-418-request-logging
xiaoxia:fix/cosyvoice-v3-flash-model
xiaoxia:fix/generation-task-enqueue-failure
xiaoxia:fix/cosyvoice-v3-voice-names
xiaoxia:fix/cosyvoice-full-rewrite
xiaoxia:feature/generation-logging-minimal
xiaoxia:fix/p02-deep-root-cause
xiaoxia:fix/p03-fps-setpts-order
xiaoxia:fix/p02-oss-credential-validation
xiaoxia:feat/worker-concurrency-env
xiaoxia:fix/p02-p03-deep-fix
xiaoxia:fix/generated-video-url-403
xiaoxia:fix/oneclick-gen-p0-fixes
xiaoxia:fix/ingest-job-library-id-length
xiaoxia:feat/app-version-in-dockerfile
xiaoxia:fix/cryptography-version
xiaoxia:fix/generation-task-status
xiaoxia:feature/ci-optimization
xiaoxia:feature/test-quality
xiaoxia:feature/ci-full-audit-fix
xiaoxia:feature/optimize-docker-tags
xiaoxia:feat/use-local-registry-mirrors
xiaoxia:feat/add-p1-api-tests
xiaoxia:feat/add-p1-e2e-tests
xiaoxia:feat/add-daily-health-check
xiaoxia:feat/add-performance-baseline
xiaoxia:feat/add-p0-e2e-tests
xiaoxia:fix/chunked-upload-route-order
xiaoxia:feat/add-p0-api-tests
xiaoxia:fix/config-standardization
xiaoxia:feat/editing-planner-frontend
xiaoxia:fix/editing-planner-mock-data
xiaoxia:feat/video-editing-modes-design
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "develop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
同步PR #981的修复到main分支,用于schedule类workflow的最终验证。
包含修复:
相关PR: #981
相关工单: #980
问题1修复: - 后端返回400错误时,error.message可能是对象{code,message}而非字符串 - 添加extractString辅助函数安全提取错误消息 - 确保传给message.error()和setGenerateError()的永远是string - 修复轮询失败状态和catch block两处的错误处理 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>Issue 2: getTitles() 兼容后端返回直接数组 [...] 和 {items:[...]} 两种格式 Issue 5: beforeUpload 改为同步返回 false(避免 async Promise 不稳定); 上传失败时延迟1.5秒关闭弹窗,让用户能看到错误提示根因:后端返回400错误时,error.response.data.message 是对象 {code, message} 而非字符串,拦截器直接传给 antd message.error() 导致 React 渲染崩溃 'Objects are not valid as a React child' 修复:在拦截器中添加 safeExtractString 辅助函数,安全提取 错误消息字符串,如果是对象则递归提取 message/msg/detail 字段- client.ts: safeExtractString 升级为递归版本,处理 {code, message: {code, message}} 嵌套 - GeneratePage.tsx: catch块 extractString 升级为递归版本 - GeneratePage.tsx: 轮询错误路径 safeExtract 递归处理嵌套对象 - GeneratePage.tsx: 渲染处加 typeof 防御,确保不传对象给 React - 修复 TS2304 变量名错误 (errorMsg → backendMsg)Root causes of 6 test failures: 1. CosyVoiceService was not mocked — production code instantiates it with real get_shared_settings() + httpx.Client() calls 2. VoiceCloneWorkflowService mocked as MagicMock doesn't execute real poll_and_process_clone logic — not_found test needs explicit side_effect 3. Celery bind=True task.__call__ auto-passes self — passing mock_self manually caused 'takes 2 positional arguments but 3 were given' Fixes: - Add @patch('worker_app.tasks.voice_clone.CosyVoiceService') to all tests - Use patch.object(task, 'retry') for timeout retry test - Use MagicMock for profile return values instead of real dataclass - Call process_voice_clone(profile_id) without manual self arg Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>- Add @patch('worker_app.tasks.voice_clone.SessionLocal') to all 6 test methods - Fixes test isolation issue where sys.modules.setdefault was no-op in full suite - Ensures SessionLocal is mocked regardless of import order- 新增 DELETE /asset-libraries/{library_id} 端点 - 删除素材库时同时删除库内所有素材 - 添加权限校验确保用户有项目访问权限 P0-3: 素材删除功能后端支持f767cdbvalidation883f500for validation将动态路由 /{upload_id}/{chunk_index} 移到固定路由 /{upload_id}/status 和 /{upload_id}/complete 之后。FastAPI按顺序匹配路由,之前动态路由 会捕获 complete/status 路径,导致这些端点无法正常访问。P0-1: _download_library_assets 支持双模式查询(asset_library_id / project_id) 下载失败时抛出 RuntimeError,不再静默忽略 P0-2: OSS 上传失败抛异常 + 上传后 HEAD 校验 URL 可访问性 P0-3: run_ffmpeg 失败时完整 stderr 打到日志(排查 exit code 183) _execute_ffmpeg 额外记录 filter_complex 便于诊断 P1: template_id 存在性校验(不存在/已禁用 → ValueError) asset_ids 归属校验(不属于指定项目/素材库 → ValueError) 新增 16 个单元测试覆盖全部修复点,全量 1170 测试通过无回归## 变更说明 基于最新 develop 分支重建的干净PR,替换旧的 #228(原分支太老,有4个文件冲突,CI也因为代码版本不一致各种出问题)。 ## 改动内容 1. **新增 `scripts/ci_notify_success.py`** — 部署成功通知脚本(飞书卡片,绿色成功样式) 2. **修改 `.gitea/workflows/ci-cd.yml`**: - 给以下 7 个 job 加上失败通知: - Frontend Lint - Build & Push Staging (Watchtower auto-deploy) - Staging E2E Tests - Staging API Integration Tests - Build Production Runtime Images - Deploy Production - Production Browser E2E - 给以下 2 个部署 job 加上成功通知(部署完成后发): - Build & Push Staging — Staging部署成功 - Deploy Production — 生产部署成功 ## 参考 - 失败通知参照已有的 Validate Code Quality And Tests 和 Integration Tests 里的 "Notify CI failure" 步骤写法 - 成功通知基于失败通知改写,调用 `scripts/ci_notify_success.py` --------- Co-authored-by: xiaoxia <ci@xiaoxiajianji.com> Reviewed-on: #229删除的 API 路由(5 个文件): - dashboard.py — 仪表盘概览(前端已改用 mock 数据) - edit_templates.py — 模板 CRUD(无前端调用,领域层保留) - generated_videos.py — 成片管理(已被 generation/tasks/{id}/results 替代) - recipes.py — 配方 CRUD + use(无任何调用方) - jobs.py — 通用异步任务管理(无调用方) 删除的 schema(3 个文件): - schemas/dashboard.py — 仅 dashboard 路由使用 - schemas/recipe.py — 仅 recipes 路由使用 - schemas/job.py — 仅 jobs 路由使用 - schemas/generated_video.py 保留(generation_tasks.py 仍在使用) 清理 router.py 中对应的 5 组 import 和 include_router 注册。 同步清理 3 个已删路由的测试文件,移除 1 个测试类中的死引用。 路由总数:121 → 116(减少 5 组死接口)1. 未使用依赖清理: - 从 requirements-base.txt 移除 cryptography 和 pyOpenSSL 2. pyflakes 警告清零 (apps/ + packages/ + tests/): - 移除 17 处未使用的 import (F401) - 修复 26 处未使用的局部变量 (F841): * 有副作用的赋值转为裸调用 * 无副作用的赋值直接删除 - 修复 1 处未使用的异常变量 (F841) - 修复 1 处空 except 块 3. 测试文件冗余清理: - 删除 tests/integration/test_project_management.py (模块级 skip,测试不存在的模块) - 删除 tests/integration/fixtures/duplication_routes_fixed.py (未被引用) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1. Remove unused aiosmtplib dependency from requirements.txt 2. Remove 5 unused config items (API_PREFIX, REDIS_MAX_CONNECTION, JWT_SECRET_KEY_OLD, SECRET_ROTATION_DAYS, LOG_LEVEL) from config.py, .env.production.example, and init_production_env.sh. Kept ENABLE_REDIS_SESSIONS (actively used in dependencies.py). 3. Fix project permission check TODOs in test_error_scenarios.py — permissions are implemented, updated assertions to expect 403. 4. Merge two Storage implementations into shared package: - packages/shared/storage.py: merged API features (HTTPS endpoint fix, diagnose(), detailed logging) into SharedStorageService - apps/api/app/core/storage.py: thin re-export wrapper for backward compatibility - Updated test mocks to target packages.shared.storageP1-1: processor.py 使用了 logger 但未定义,补 import logging + getLogger P1-2: test_unified_render_service.py 导入路径同步: - 音频函数 (mix_audio/merge_audio_video/clip_has_audio/RenderContext) → render_audio - 字幕函数 (_hex_to_ass_color/_position_to_ass_alignment/generate_ass_subtitles) → render_subtitles - patch.object(svc, '_mix_audio') → patch('video_processing.unified_render_service.mix_audio') - patch.object(svc, '_merge_audio_video') → patch('video_processing.unified_render_service.merge_audio_video') - probe_has_audio/run_ffmpeg patch 路径对齐到 render_audio 模块 全部 84 个测试通过。1. 封面预览 — 卡片已支持 thumbnailUrl 展示 2. 复核状态标签 — 右上角显示待复核(灰)/已通过(绿)/需修改(红),点击循环切换 3. 批量操作 — 批量下载改用 batch-download API + job_id 轮询 4. 筛选栏 — 新增按项目、按复核状态筛选 Select API 层新增: - updateReviewStatus: PATCH /products/{id}/review - batchDownload: POST /products/batch-download - getBatchDownloadStatus: GET /products/batch-download/{jobId} Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1. handleUse: 从调用不存在的 POST /templates/{id}/generate 改为导航到 /app/editing-planner?templateId=xxx 2. formatDuration: 参数类型扩展为 number|undefined|null,防止 target_duration 为空时显示 NaN 3. 清理未使用的 generateMutation 和 generateFromTemplate import Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>根因:Modal open={generating || generated},失败时两者都 false, 弹窗关闭导致 genError 错误信息不可见。 修复:open={generating || generated || !!genError}, title 同步区分失败/完成/进行中三种状态。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>🚀 预览环境已部署
代码审查结果 - PR #1003
⚠️ 问题(2个需要修改)
set +e关闭了错误自动退出机制。如果 SSH 连接 Staging 服务器失败或命令执行出错(例如网络抖动、密钥失效),脚本会继续执行,导致PROTECTED_TAGS为空。随后的清理步骤将以空白名单运行,极有可能误删正在 Staging 环境使用的镜像,造成严重事故。staging_host="${STAGING_SSH_HOST:-47.98.113.167}"使用了硬编码的 IP 地址作为默认回退值。这是一种危险的隐式依赖。如果环境变量STAGING_SSH_HOST遗漏或拼写错误,脚本会静默连接到错误的旧服务器,或者因密钥不匹配导致认证失败,难以排查。💡 建议(2个可选)
USE_IN_MEMORY_DB设为了false(旧版为true)。这会增加新开发者的本地启动门槛(必须配置 PostgreSQL)。建议为了开发体验,默认保留true,或通过APP_ENV=development自动推断。COSYVOICE_BASE_URL从完整路径截断为 Base URL(/api/v1)。请务必确认代码层(Python)已同步修改拼接逻辑,否则会导致生产环境语音合成接口调用失败(404)。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-26 23:38:49 | 模型:
🗑️ 预览环境已清理
PR #1003 已关闭或合并,对应的预览环境已被清理。
Pull request closed