---
name: release-manager
description: "Release scheduling and pre-publish verification: split one content item into publish units of platform × spec, check whether the assets are complete (final cut / image carousel / cover / title / body copy / hashtags / account / schedule), and for anything missing state exactly which asset to add and which skill owns it (video-editing, xiaohongshu-material, wechat-material, agent-caption etc.), while maintaining the release ledger and the post-publish re-check. Use when preparing to publish, for multi-platform distribution, scheduling, checking before publishing, asking whether the assets are complete, scheduled publishing, or the release ledger. Does not replace the upload action of the per-platform upload skills."
---

> Original skill · commissioned by the user · English edition, 2026-11-12

# Release Manager

## 0. One-line principle

**The most expensive mistake in publishing is not a failed upload, but discovering only after it went out that the asset was wrong or the timing was wrong.**
A failed upload can be retried; a wrong time can only be deleted and reposted. So every check moves forward and is completed before the "publish" button is pressed.

## 1. Three objects

| Object | What it is | Example |
|---|---|---|
| content | one creation, possibly several horizontal/vertical versions | sample-series EP01 |
| release unit | content × platform × account × time | EP01 → Bilibili main account → 10-19 20:00 |
| release package | all the assets one unit needs | final cut + cover + title + description + hashtags |

**One content item = multiple release units**; each unit is checked, recorded and re-checked separately.

## 2. Asset matrix (if it is missing, who fills it)

| Asset | Video platforms | Image-and-text platforms | Owning skill |
|---|---|---|---|
| final cut | required | — | `video-editing` (multi_export / render_final) |
| image carousel | — | required (cover 1 + content 5–8) | `xiaohongshu-material` / `wechat-material` |
| cover | required | the first carousel image is the cover | `video-editing` cover_variants / `xiaohongshu-material` |
| title | required | required | the content skill; for video also `video-editing` hook_variants |
| body copy / description | required | required | `xiaohongshu-material` / `wechat-material` / `ai-trend-publish` |
| hashtags | required | required | the content skill |
| subtitles | recommended | — | `agent-caption` / `wjs-translating-subtitles` |
| voiceover | required when there is talking-head narration | — | `local-audio` / `wjs-dubbing-video` |
| account | required | required | the user (if it is not provisioned it is a blocker — do not work around it) |
| schedule | required | required | this skill |

Full specs and length limits are in `references/asset-matrix-and-backfill-routing.md`.

## 3. Workflow (seven steps)

```text
plan → check → backfill → single-unit verification → batch publish → log → postcheck
```

1. **plan**: `release_check.py new` generates `release_plan.json`; fill content / platform / account / publish_at / assets.
2. **check**: `release_check.py check --plan release_plan.json`. Only exit code 0 allows publishing; on non-zero, backfill item by item following the "backfill instructions" in the output.
3. **backfill**: each gap item carries its own `owner` (which skill) and `action` (what to add, to what spec, acceptance criteria) — follow it directly, do not improvise.
4. **single-unit verification**: the first time a platform uses a given publish parameter (especially scheduling), publish 1 item and verify it in the backend, then write back `first_run_verified: true`. Until it is written back, batch publishing is blocked.
5. **batch publish**: still executed by the per-platform upload skills (`sau` etc.); this skill does not touch the upload implementation.
6. **log**: after each publish is finished, write the ledger: platform / link / actual time / status.
7. **postcheck**: after the scheduled time, re-check the live status; if it did not take effect, repost according to the ledger.

## 4. The three kinds of gap

| Level | Meaning | Handling |
|---|---|---|
| `block` | cannot publish without it (file does not exist, account is empty, spec does not match, first run not verified) | must be filled completely, then check again |
| `warn` | publishable but the result suffers (title over the recommended length, missing subtitles, cover ratio not the preferred one) | record it, then decide |
| `info` | a reminder (name carries no sequence number, no licensing record) | can be ignored |

**Never downgrade a `block` to a `warn` in order to "get it out the door"** — that is exactly why a past Xiaohongshu release went out with 3 wrong items.

## 5. Boundaries

- Does not produce assets: it only outputs gaps and backfill instructions; production belongs to the corresponding skills.
- Does not replace upload: per-platform login, upload and scheduling still go through `bilibili-upload` / `douyin-upload` / `kuaishou-upload` / `xiaohongshu-upload`.
- Does not write copy: title / body copy / hashtags come from the content skills; this skill only validates length and completeness.
- Does not handle file archiving: where the release package goes and how it is named is `workspace-hygiene`.

## 6. Command cheat sheet

```powershell
# generate the plan
python <SKILL_DIR>/scripts/release_check.py new --root . --content sample-series-EP01 --platforms bilibili,douyin,xiaohongshu

# pre-publish check (only exit code 0 allows publishing)
python <SKILL_DIR>/scripts/release_check.py check --plan release_plan.json

# machine-readable (for an agent to backfill item by item)
python <SKILL_DIR>/scripts/release_check.py check --plan release_plan.json --json

# write the ledger
python <SKILL_DIR>/scripts/release_check.py log --ledger release-ledger.md --unit bili-ep01 --status published --url https://...
```
