publish-articlelisted
Install: claude install-skill shimo4228/zenn-content
# Publish Article Skill
このskillは公開操作だけを持つ。文章品質とpublic-safetyはglobal `quality-gate`、Zenn形式は
`zenn-format`、channel値は `.claude/rules/publishing-channels.md` が正本。
## Usage
```text
/publish-article articles/<slug>.md
/publish-article articles-en/<slug>.md
```
引数なしなら `published: false` のZenn原稿を列挙する。
## Preconditions
- 引数で指定した対象稿自身のglobal `quality-gate`がPASS
- 著者が最終タイトルと本文を通読済み
- 著者が公開GOを出している
不足していれば公開操作を始めず、欠けた証跡を返す。
最初に対象pathをchannel contractの1行へ解決する。JP稿のPASSをEN稿へ流用しない。
## Zenn / Dev.to publish flow
### 1. Validate target
```bash
npm run evidence -- articles/<slug>.md --online # 構造・書式・実在・一致 + 外部URLの生死
npm run validate
```
`deviations`が1件でもあれば公開操作を始めない。`grandfathered`は検査導入前の既公開分なので
blockしない。目視で数え直さず、scriptの出力をそのまま扱う。
Zenn稿のtitle、emoji、type、topics、slug、`published_at`は`zenn-format`とchannel contractに従う。
EN稿は`devto-translator` self-check済みであることを確認する。
### 2. Preview or dry-run
```bash
npm run preview
```
Zenn稿は`http://localhost:8000`でコードblock、画像、message/details、内部linkを確認する。
EN稿は実POSTせずdry-runする。
```bash
cd scripts && uv run python devto_crosspost.py post <slug> --dry-run
```
### 3. Schedule the resolved target
通常はfrontmatterを次の形にする。
```yaml
published: true
published_at: 2026-04-15 09:00
```
format、rate-limit、cadenceは`.claude/rules/publishing-channels.md`が正本。これはZenn channelだけに行う。
Dev.to channelではdry-runを著者へ提示して日時を確認してから予約する。
```bash
cd scripts && uv run python devto_crosspost.py schedule <slug> --at "2026-07-07 22:00 Asia/Tokyo"
```
即時投稿は著者が明示した場合だけ`post <slug