174 lines
9.7 KiB
Markdown
174 lines
9.7 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Unified Asset Center
|
|
The system SHALL expose a first-class "资产中心" that replaces the old navigation-facing "素材库" while preserving the real media-library data source.
|
|
|
|
#### Scenario: User opens the asset center
|
|
- **WHEN** the user opens `/assets`
|
|
- **THEN** the page title and navigation label show "资产中心"
|
|
- **AND** the page provides first-level sections for "素材", "作品", and "已发布"
|
|
- **AND** the page keeps media filters for image, video, and audio assets
|
|
|
|
#### Scenario: Published assets are filtered by state
|
|
- **GIVEN** an asset was included in a successful publish target
|
|
- **WHEN** the user opens the "已发布" asset section
|
|
- **THEN** the asset is visible through its published marker
|
|
- **AND** the system does not create a duplicate copied asset library
|
|
|
|
#### Scenario: Asset source tags are available
|
|
- **WHEN** assets are displayed or selected for publishing
|
|
- **THEN** the system can distinguish source tags for "主体", "本地", "AI", "数字人", and "剪辑"
|
|
- **AND** legacy assets without new metadata remain compatible by falling back to local or AI source information
|
|
|
|
### Requirement: Auto Publishing Navigation
|
|
The system SHALL provide a first-class workbench entry named "自动发布" in the left navigation and application center.
|
|
|
|
#### Scenario: User opens auto publishing
|
|
- **WHEN** the user clicks "自动发布" in the left navigation
|
|
- **THEN** the workbench shows the auto publishing workspace
|
|
- **AND** the page uses the same visual system, navigation behavior, theme behavior, and responsive layout conventions as the existing workbench pages
|
|
|
|
### Requirement: Unified Finished Asset Hub
|
|
The system SHALL aggregate publishable finished image and video outputs from digital avatar, AI canvas, AI image, AI video, clipping, media library, and task/history sources into the asset center and publish-task selector.
|
|
|
|
#### Scenario: Completed generated media appears in the hub
|
|
- **GIVEN** an image or video generation task has completed with a result URL, thumbnail, or local asset reference
|
|
- **WHEN** the user opens the asset center "作品" view or the publish-task asset selector
|
|
- **THEN** the media appears as a publishable asset
|
|
- **AND** the item shows its media type, source module, title, created time, preview, and existing publish state
|
|
|
|
#### Scenario: Duplicate media is normalized
|
|
- **GIVEN** the same media is visible through task history and the media library
|
|
- **WHEN** the finished asset hub is loaded
|
|
- **THEN** the media appears once
|
|
- **AND** the item keeps references to every known source record
|
|
|
|
### Requirement: Multiple Social Account Authorization
|
|
The system SHALL let users manage multiple authorized accounts per social channel.
|
|
|
|
#### Scenario: User authorizes a channel account
|
|
- **WHEN** the user starts login for a supported channel account alias
|
|
- **THEN** the system starts the local social upload authorization flow
|
|
- **AND** the account row records platform, alias, status, last check time, and supported publishing capabilities
|
|
- **AND** the frontend does not store raw cookies or secrets
|
|
|
|
#### Scenario: User checks account status
|
|
- **WHEN** the user checks an existing account
|
|
- **THEN** the system verifies authorization through the local social upload bridge
|
|
- **AND** the UI shows whether the account is available, expired, failed, or needs user action
|
|
|
|
#### Scenario: Account list loads before validation completes
|
|
- **WHEN** the user opens account authorization
|
|
- **THEN** the system may show cached or quick-loaded account rows immediately
|
|
- **AND** slower authorization validation updates each row without blocking the page
|
|
|
|
#### Scenario: Login requires QR or browser action
|
|
- **WHEN** the local bridge reports QR data, browser-login progress, or a user-action message
|
|
- **THEN** the account dialog shows that progress in place
|
|
- **AND** updates the account row when the bridge reports success or failure
|
|
|
|
### Requirement: Multi-Channel Publish Composer
|
|
The system SHALL allow users to select one or more assets from the asset center or local upload and create a publish draft targeting multiple channels and accounts.
|
|
|
|
#### Scenario: User prepares a video campaign
|
|
- **GIVEN** the user selected a video asset
|
|
- **WHEN** the user selects multiple authorized channel accounts and enters title, description, tags, and optional schedule time
|
|
- **THEN** the composer validates channel requirements
|
|
- **AND** the user can enqueue one campaign containing one publish target per selected account
|
|
|
|
#### Scenario: User prepares an image-note campaign
|
|
- **GIVEN** the user selected one or more image assets
|
|
- **WHEN** the user selects channels that support image-note publishing and enters title, note body, tags, and optional schedule time
|
|
- **THEN** the composer validates channel requirements
|
|
- **AND** unsupported channels are disabled or reported before submission
|
|
|
|
#### Scenario: User manages multiple campaign drafts
|
|
- **WHEN** the user creates several publishing drafts before submission
|
|
- **THEN** the composer keeps each draft's selected assets, accounts, platform options, title, text, topics, and schedule independently
|
|
- **AND** the user can submit drafts individually or as a batch
|
|
|
|
#### Scenario: User chooses generated or uploaded material
|
|
- **WHEN** the user adds media to a draft
|
|
- **THEN** the system offers asset-center content first
|
|
- **AND** allows local upload fallback for media that was not generated in TrueGrowth
|
|
|
|
#### Scenario: User opens publish center
|
|
- **WHEN** the user opens `/publish`
|
|
- **THEN** only "发布任务" and "账号授权" tabs are visible
|
|
- **AND** "发布任务" is the default view
|
|
- **AND** publish records are shown beside the publish form, not as a separate tab
|
|
|
|
#### Scenario: User drafts social copy
|
|
- **WHEN** the user edits a video description or image-note body
|
|
- **THEN** the system provides knowledge-base fill and an intelligent copywriting dialog
|
|
- **AND** generated copy is shaped for external social publishing rather than internal generation prompts
|
|
|
|
### Requirement: Social Auto Upload Runtime Bridge
|
|
The system SHALL integrate bundled `vendor/social-auto-upload` source through a local runtime bridge compatible with the upstream `sau` command flow.
|
|
|
|
#### Scenario: Runtime resolves bundled sau
|
|
- **WHEN** the local runtime starts or checks publishing status
|
|
- **THEN** it resolves `sau` from `SOCIAL_AUTO_UPLOAD_COMMAND` only when explicitly configured for development
|
|
- **AND** otherwise runs the bundled `vendor/social-auto-upload/sau_cli.py`
|
|
- **AND** it does not depend on a system PATH `sau`
|
|
|
|
#### Scenario: Bundled sau source is missing
|
|
- **WHEN** `vendor/social-auto-upload` or its CLI entry is missing
|
|
- **THEN** the runtime reports an internal bundled publishing module error
|
|
- **AND** the UI must not instruct the user to install `sau` manually
|
|
|
|
#### Scenario: Runtime invokes video upload
|
|
- **GIVEN** a publish target uses a channel account with video upload support
|
|
- **WHEN** the job starts
|
|
- **THEN** the runtime materializes the media to a local file if needed
|
|
- **AND** invokes the equivalent `sau <platform> upload-video` command with account, file, title, description, tags, and supported channel options
|
|
- **AND** streams status and logs back to the workbench
|
|
|
|
#### Scenario: Runtime invokes image-note upload
|
|
- **GIVEN** a publish target uses a channel account with image-note support
|
|
- **WHEN** the job starts
|
|
- **THEN** the runtime invokes the equivalent `sau <platform> upload-note` command with account, image files, title, note body, tags, and supported channel options
|
|
- **AND** streams status and logs back to the workbench
|
|
|
|
#### Scenario: Runtime maps channel-specific options
|
|
- **GIVEN** a target includes supported options such as schedule time, cover image, Bilibili partition, Douyin product link, Douyin product title, original declaration, or draft-only intent
|
|
- **WHEN** the runtime builds the upload command
|
|
- **THEN** it passes only the options supported by that target channel
|
|
- **AND** records omitted unsupported options in validation output before the job starts
|
|
|
|
### Requirement: Publish Job Tracking
|
|
The system SHALL track publishing campaigns and per-channel jobs from draft submission through completion.
|
|
|
|
#### Scenario: One target fails in a multi-channel campaign
|
|
- **GIVEN** a campaign has multiple publish targets
|
|
- **WHEN** one target fails and another succeeds
|
|
- **THEN** the campaign remains visible with mixed status
|
|
- **AND** each target shows its own status, error/log summary, retry action, and source asset reference
|
|
|
|
#### Scenario: User retries a failed target
|
|
- **GIVEN** a publish target failed
|
|
- **WHEN** the user retries it
|
|
- **THEN** the system reuses the original asset and target metadata
|
|
- **AND** appends a new attempt to the target history
|
|
|
|
#### Scenario: User cancels batch publishing
|
|
- **GIVEN** multiple campaign drafts are being submitted as a batch
|
|
- **WHEN** the user cancels the batch
|
|
- **THEN** the system stops enqueueing remaining drafts where possible
|
|
- **AND** shows completed, failed, cancelled, and not-started target counts separately
|
|
|
|
### Requirement: Channel Capability Guardrails
|
|
The system SHALL expose platform-specific publishing capabilities and prevent invalid submissions.
|
|
|
|
#### Scenario: Unsupported schedule is selected
|
|
- **GIVEN** a selected channel does not support scheduled publishing through the configured bridge
|
|
- **WHEN** the user selects a scheduled publish time
|
|
- **THEN** the composer warns that the target cannot use scheduling
|
|
- **AND** the target must be changed, excluded, or switched to immediate publish before enqueueing
|
|
|
|
#### Scenario: Unsupported media type is selected
|
|
- **GIVEN** a selected channel account does not support the selected media type
|
|
- **WHEN** the user validates the draft
|
|
- **THEN** the target is marked invalid
|
|
- **AND** no job is created for that target until the issue is resolved
|