# Cheat Publish

登记一篇内容已发布，把 URL/平台 ID/发布时间写入对应预测文件 header 和 state...

- Repository: https://github.com/XBuilderLAB/cheat-on-content (7435 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-26
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-publish -g -a claude-code -y`
Codex: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-publish -g -a codex -y`
Cursor: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-publish -g -a cursor -y`
Gemini CLI: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-publish -g -a gemini-cli -y`

## Description

登记一篇内容已发布，把 URL/平台 ID/发布时间写入对应预测文件 header 和 state file。这是一个轻量动作, , 只更新元数据，**不动预测段任何字符**。触发词："已发布"/"I shipped"/"发布链接是 X"/"刚发完 [url]"/"publish registered"。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# /cheat-publish, 发布登记

把作品的发布元数据（URL、发布时间、平台）补到预测文件 header 与 state file。**禁止改预测段**, , hook 会拦。

## Overview

```
[用户：已发布 https://...]
  ↓
[Phase 0: 找到对应的预测文件]   ← 通过 in_progress_session 或匹配
  ↓
[Phase 1: 解析 URL → 平台/发布时间]
  ↓
[Phase 2: 更新 prediction 文件 header（仅 metadata 段）]
  ↓
[Phase 3: 更新 .cheat-state.json，清除 in_progress_session]
```

## Constants

- **AUTO_DETECT_PLATFORM = true**, 从 URL 模式自动识别平台
- **VERIFY_BLIND = true**, 提醒用户：从此刻起看到任何后续数据都会破坏盲度声明的诚信

## Inputs

| 必填 | 来源 |
|---|---|
| `<prediction-file>` 或 URL | 用户参数；缺失则用 `.cheat-state.json` 的 `in_progress_session.file` |
| `.cheat-state.json` | 用户项目根 |

## Workflow

### Phase 0: 找到对应的预测文件

按优先级：
1. 用户参数明确给了 prediction 文件路径 → 用它
2. 用户参数只给了 URL → 读 `.cheat-state.json` 的 `in_progress_session.file`
3. 都没有 → 列出 `predictions/*.md` 中 header 没填 `published_at` 的文件，让用户选

**警告路径**：若 `in_progress_session.file` 与用户给的 URL 时间差超过 14 天 → 提示"这个预测写于很久之前，确认是这篇？"

### Phase 1: 解析平台

`AUTO_DETECT_PLATFORM=true` 时按 URL 模式：

| URL 模式 | 平台 |
|---|---|
| `youtube.com/*` `youtu.be/*` | youtube |
| `bilibili.com/*` `b23.tv/*` | bilibili |
| `douyin.com/*` `iesdouyin.com/*` `v.douyin.com/*` | douyin |
| `xiaohongshu.com/*` `xhslink.com/*` | xhs |
| `mp.weixin.qq.com/*` | wechat |
| `substack.com/*` `*.substack.com/*` | substack |
| `medium.com/*` `*.medium.com/*` | medium |
| `twitter.com/*` `x.com/*` | twitter |
| 其他 | unknown, 询问用户 |

发布时间获取：
- 不强求自动抓, , 绝大多数平台需要登录态
- 询问用户："发布时间是？（默认：现在）" → 接受 ISO 8601 或自然语言（"今天 14:30" / "20 分钟前"）
- 解析失败 → 用 now()

### Phase 2: 更新 prediction 文件 header

**绝不**触碰 `## 预测` 段及之后。只动文件最顶部的 metadata 块。

读文件，定位到 metadata 块（在第一个 `##` 之前的所有行）。检查是否已有这些字段, , 有则警告"已登记过"并询问是否覆盖；无则追加：

```markdown
**Published at**: 2026-05-04T14:32:00+08:00
**Platform**: douyin
**URL**: https://v.douyin.com/abc123
**Video Folder**: videos/2026-05-04_a3f2c1d4_停止期待/
**Aweme ID**: 7234567890123456789  (douyin / 视频号 等需要的 platform-specific ID)
```

The rest: https://github.com/XBuilderLAB/cheat-on-content/blob/HEAD/skills/cheat-publish/SKILL.md
