This skill does not publish, does not prepare publishing copy, and does not click platforms on behalf of Jeffrey. It only registers publishing facts that have been manually confirmed or verified by the local Chrome adapter, and saves data and comment evidence;cheat-on-content is the prediction and retrospective review engine.
Workflow
1. Publishing Fact Registration
First run bianpai check --require final, then register the following two sources of publishing evidence:
USER_CONFIRMED_MANUAL: the currently only manual publishing source, continuing to usepublish-record.json. After Jeffrey manually publishes on the platform, provide the platform identity, URL (Douyin also requires aweme_id), and the exact title displayed by the platformplatform_title. Historicalsource: "user-confirmed"only allows read-only compatibility for schema <4 episodes; migration or new registration must writeUSER_CONFIRMED_MANUAL。ADAPTER_VERIFIED_RECEIPT: read12-发布/*-publish-results.jsonlin the same as the currentfinal.mp4SHA-matching lastPUBLISHEDrecord; the canonical source of the automatic receipt is fixed as source: ADAPTER_VERIFIED_RECEIPT, and if it is missing or has any other value it must not be registered.
The normalized registration record must retainplatform、source、receipt_id|url、published_at、final_sha256andplatform_title。ADAPTER_VERIFIED_RECEIPTAfter reading the complete JSONL for each platform, select from back to front the first legal receipt that simultaneously matches that platform, the current final SHA,publish_result: PUBLISHEDandsourceis exactlyADAPTER_VERIFIED_RECEIPT; subsequent FAILED or other final records must not obscure it. The receipt must also bindauthorized_by、authorized_at、authorization_noteandbound_input_record_sha256, and be fully consistent with the current episode'sFULL_PIPELINE_TO_PUBLISHauthorization;published_atandrecorded_atmust be valid times and must not be earlier than the authorization. If any binding field is missing, stop; do not fabricate.
⑫ only consumes the above normalized registration; raw JSONL lines, browser pages, or "having clicked" are not completion evidence.
This Skill must not undertake publishing clicks, uploads, form filling, or browser control; these belong only to the release package and the local Chrome adapter. An automatic publishing receipt only proves that the corresponding platform has published; it does not prove that the platform's operational data has been connected.
2. Manual Publishing Record
USER_CONFIRMED_MANUALOnly register the work URL, aweme_id, and platform_title provided by Jeffrey; do not call URL parsing, the platform browser, the publishing adapter, or any alternative publishing tool. The URL must contain the same aweme_id; if any identity field is missing, stop; do not fabricate.ADAPTER_VERIFIED_RECEIPTOnly read existing receipts; do not call or drive the publishing adapter.
Write 12-发布/publish-record.json:
{
"platform": "douyin",
"status": "PUBLISHED",
"url": "https://www.douyin.com/video/<aweme_id>",
"aweme_id": "<id>",
"platform_title": "平台显示的精确作品标题",
"published_at": "2026-07-10T20:00:00+08:00",
"final_path": "07-剪辑/final.mp4",
"final_sha256": "当前 final.mp4 的 SHA-256",
"source": "USER_CONFIRMED_MANUAL"
}
Then call the upstream cheat-publish to register the same URL; only update prediction metadata, and never modify the prediction segment. After completion, run node scripts/register-cheat-publish-evidence.mjs episodes/<slug>, save the lane state snapshot at publish time, and verify the prediction header, URL, aweme_id, publish time, and immutable prediction segment; if this evidence is missing, ⑫ must not complete.
The first-screen screenshot after publishing or the creator center export is optional strong evidence, cannot replace Jeffrey's publishing facts, and does not block ⑫ due to absence. If saved, the evidence file must be in the current episode's 12-发布/, and write platform-display-evidence.json:schema_version: 1, evidence_path/SHA, aweme_id, platform_title, display_title, cover_asset/SHA, final_sha256, and the three items title/cover/video MATCHED conclusion, reviewer, captured_at, reviewed_at. If any item is inconsistent with the current publish-record, selected-cover, or final, ⑫ must show incomplete until the optional evidence is deleted or the verification is redone; it must not automatically correct or fabricate screenshots.
3. Data snapshot
For manually provided creator center data, the source is written as manual. The TzFilm SQLite adapter may only be run explicitly:python3 scripts/tzfilm_douyin_adapter.py snapshot --db <douyin_stats.db> --episode episodes/<slug>. It must read aweme_id/platform_title from the current issue's publish-record, query by exact title and reject ambiguity, no longer accept a forged work ID from the command line, and must not overwrite an existing snapshot. It does not run launchd, Telegram, prediction tracking, or any publishing action.
TzFilm's Feishu sync serves only as an external dashboard; Feishu is not read as a data source, and no status other than episode is written. After publishing, once prediction tracking is complete and locally verified, it may additionally be saved to 13-数据/tzfilm-tracking.json, marked with source: tzfilm-tracker and the capture time; it only assists observation and must not replace Cheat's pre-publication blind prediction, retro, or rubric.
After publishing, by default recover according to ① 00-选题.json.experiment.observation_window ; the window must not be changed after publication.metric_keys is a preregistered metric key (plays、likes、comments、shares、favorites、ctr5s、avg_duration_sec). Currently only user-provided creator center data is accepted; unverified opencli or browser scraping must not be written as the default pipeline. After the TzFilm adapter acceptance is complete, update this section's automation priority and fallback chain.
Currently ⑬/⑭ default data and comment ground truth are still limited to Douyin; for other platforms writeUNSUPPORTED_SOURCEorNOT_COLLECTED, do not write0. Append one line each time to 13-数据/snapshots.jsonl:
{"platform":"douyin","aweme_id":"<id>","observed_at":"ISO-8601","observation_window":"T+3","measurement_role":"TARGET|CONTEXT","metric_dictionary_version":1,"source":"creator-center|manual","metrics":{"plays":0,"likes":0,"comments":0,"shares":0,"favorites":0}}
Only records whose window exactly matches ①,plays and all metric_keys non-empty may be marked TARGET; records that are early, extra, or missing metrics must be marked CONTEXT, may save trends but cannot complete ⑬, support or refute hypotheses. If automatic data capture fails, the failure reason and data source must be retained, downgraded to manual; null values must not be written as 0.
4. Comments and retro handoff
TzFilm's comment export only allows export, not reply. Explicit import:python3 scripts/tzfilm_douyin_adapter.py comments --input <unreplied-comments.json> --episode episodes/<slug>. The adapter must verify that the selectedWork exact title matches the publish-record, filter empty text and deduplicate; calling auto_reply.py reply or saving a reply plan to episode is prohibited.
Preferred douyin-session to scrape high-like comments; when the Cookie is invalid, guide the user to log in again, and after failure have the user paste the high-like comments. When comments are available, write 14-评论/comments.jsonl, each line fixed as {"platform":"douyin","aweme_id":"<id>","captured_at":"ISO-8601","source":"douyin-session|manual","text":"评论正文","likes":0}; when unavailable, still write the insights file and explain the reason.
Write 14-评论/insights.md, the first line must be 评论数据状态: AVAILABLE or 评论数据状态: UNAVAILABLE. When UNAVAILABLE, the second line must be 失败原因: <具体原因>; afterward record the capture time, source, representative comments, 3–5 themes, topic signals, and hypotheses to be verified.
After T+N data and comments are complete, call the upstream cheat-retro. It writes the prediction's ## 复盘 section,rubric-memo.md and the user-confirmed script_patterns.md; this skill does not modify the rubric. After completion, write 14-评论/retro-handoff.json:status: "COMPLETE", episode, aweme_id, prediction_file, prediction_after_retro_sha256, rubric_memo_sha256, snapshots_sha256, insights_sha256, comments_sha256 (null when there are no comments) and ISO completed_at are all required; a non-empty feedback_hypotheses array must also be written, each item having a unique hypothesis_id, intervention, expected_metric,T+N observation_window、OPEN|SUPPORTED|REJECTED|INCONCLUSIVE status and target feedback_target: "①"|"④". The conclusion is UPGRADE_EVIDENCE , additionally require at least two periods of evidence_episode_ids and comparison_note; a single-period conclusion may only be OBSERVATION or HYPOTHESIS. Without such evidence, ⑭ must not be marked complete.
Degradation chain
| Stage | Preferred | After failure | Final fallback |
|---|---|---|---|
| aweme_id | ID provided by Jeffrey | — | BLOCKED |
| Data | User-provided creator center data | Independent acceptance by TzFilm adapter (does not override ground truth) | BLOCKED |
| Comments | User-provided exported highly-liked comments | Independent acceptance by TzFilm export-only import | Mark UNAVAILABLE |
Anti-pattern
❌ Upon seeing final.mp4 , publish automatically, or use play data to retroactively alter blind predictions.
✅ After the user publishes, register the URL; data only enters snapshots and upstream retro.
❌ Treat the temporary scraping output of laohan-xiazai as the operational source of truth.
✅ Uniformly write into the episode's publication, snapshot, and comment artifacts, then route via bianpai.