Changelog

May 22, 2026 · View on GitHub

All notable changes to cheat-on-content will be documented here.

格式参考 Keep a Changelog,版本号遵循 SemVer


[Unreleased]

Added — 受众画像 persona(cheat-persona skill + audience.md)

动机:用户选题 / 写稿时缺一个清晰的"谁在看"的镜子。新增受众画像功能——从复盘评论数据聚类出账号真实受众。

设计:persona 是和 rubric 平行的第二个派生物:

复盘数据(评论 + 完播 + 转粉)
   ├──→ rubric 进化(cheat-bump)   —— "怎么打分"
   └──→ 受众画像(cheat-persona)    —— "谁在看"
  • 新 skill /cheat-persona(第 15 个子 skill)—— 扫 predictions/*.md 复盘段评论,按"自我认同 / 情绪寄存 / 反驳点 / 语言"四维聚类,写 audience.md
  • 新文件 audience.md + templates/audience.template.md —— 受众画像 reference,和 benchmark.md 同级。强制每条"验证特征"带评论证据 + 条数;验证 / 假设 / 反画像三分;强制写"反画像"防 persona 变成讨好自己的虚构
  • ⚠️ 污染隔离audience.md 从评论派生 = 含实绩信号。cheat-score-blind hard refusal list 加 audience.md,refusal_code blocked_audience。persona 影响 cheat-seed 写什么(creative),不影响 cheat-predict 怎么打分(blind sub-agent 永不读 audience.md)
  • cheat-seed 接线:Phase 0 读 audience.md 作为"这个 persona 会在乎吗"的镜子(Confidence 🟡 以上才当检验视角;不进粗打分)
  • cheat-init 接线:Phase 3 脚手架创建空 audience.md;导了 benchmark 的用户提示可 /cheat-persona — seed-from-benchmark
  • Confidence 分级:🔴 无数据 / 🟠 benchmark-seed 未验证 / 🟡 1-2 篇复盘 / 🟢 3-5 篇 / 🔵 6+
  • 零 schema 变化:persona 元数据全放 audience.md header(version / last_rebuilt / 数据基础 / Confidence),不动 .cheat-state.json

Phase 1 范围(本次):上述。Phase 2 路线(未做):cheat-recommend persona-fit 排序 / cheat-status 新鲜度 nag / cheat-retro 自动 flag。

Known limitations(写进 cheat-persona/SKILL.md):评论 ≠ 全部受众(偏向会评论的活跃少数);评论可被水军污染;persona 滞后于真实受众变化;不替用户做"想要的受众 vs 实际受众"的战略决策。

Fixed — cheat-seed draft 写成字幕格式(一句一行)

问题:用户反馈 cheat-seed 写的 draft 正文是"一句话一行"的字幕格式,而不是段落版。根因不是文档缺失——"不要字幕格式"的指令在 4 个文件里都有,但全是散文指令。生成 draft 那一刻,模型"video script = 提词器短行"的训练先验压过了埋在 Phase 4 散文里的一句话。

修复(两手):

  • A — 生成时压先验:Phase 4 draft 模板块加 ❌字幕格式 / ✅段落版 的具象并排对照,就放在正文占位符旁边——generation 那一刻眼睛在示例上,先验被锚点压住
  • B — 落盘后确定性兜底:新增 Phase 4.5a line-format 自检——算正文 avg_chars_per_line< 15 字 且 行数 ≥ 8 → 判定字幕格式 → 自动重排为 3-6 段段落版。不靠模型自觉,靠 awk 判定
  • Phase 4.5 顺序固定:先 4.5a 修版式,再 4.5b humanizer(humanizer 处理散文,喂碎行会乱)
  • batch 模式的 N 份 draft 同样走 Phase 4 格式 + Phase 4.5 自检

Added — cheat-seed Phase 4.5:humanizer 自检 pass(去 AI 味)

问题:Claude 自己写的 cheat-seed 初稿天然带 AI 写作 tells——em-dash 滥用、rule of three、inflated 词汇、空泛归因、-ing 浅层分析。用户拿到的起点"机器味"重。

改动:draft 写完落盘后、展示给用户前,新增 Phase 4.5——用 humanizer skill(MIT,外部项目,18k stars)过一遍去掉 AI tells。

  • 只 humanize 正文,不动 header 的"必须改写"警告(那是有意的脚手架标记)
  • voice calibration:有历史脚本 / script_patterns.md 时作为参考样本一起传——往"用户的声音"靠,不是"通用人声"
  • 报告修了哪些 tell,Phase 5 输出展示
  • HUMANIZE_DRAFT = on 默认;humanizer 未装时优雅跳过 + 提示如何启用
  • 不污染校准:cheat-seed draft 不是被预测/发布的东西——cheat-predict 打分的是用户最终稿,humanize 初稿只是给更干净的起点
  • 不替用户改写:humanizer 去 AI 味 ≠ 变成用户的声音,"必须改写"警告依然成立

humanizer 不打包进 cheat-on-content——用户自己 git clone~/.claude/skills/humanizer/

Fixed — douyin-session 运行时路径隐私漏洞(@level5Ninja #16

问题:douyin-session adapter 把 .auth/含抖音登录 cookie)、debug 截图、report 写进 skill 源码目录 而不是用户内容项目——symlink 安装时,用户的会话凭据会落在 cheat-on-content repo 里,有被 commit 的风险。meta-logging hook 还把每条 user prompt 前 120 字存进 usage.jsonl,采集过度。

修复

  • 新增 adapters/perf-data/douyin-session/paths.py —— 运行时路径 helper(runtime_project_root / auth_dir / debug_dir / videos_dir),用 CHEAT_PROJECT_ROOT env var + cwd fallback
  • .auth/ → 用户内容项目根;debug 产物 → .cheat-cache/douyin-session-debug/;report/script → 用户项目 videos/(不再散落在 skill 源码树)
  • run.sh export CHEAT_PROJECT_ROOT
  • meta-logging hook 不再存 prompt 摘要——改成只记 prompt_present(bool)+ prompt_chars(长度)
  • docs(adapter README + state-management.md)同步

Fixed — cheat-shoot DIFF_METRIC 在口语化场景的 v2 误触发(BREAKING for v2-trigger-logic

问题:cheat-shoot Phase 3b 用 line-level unified diff 算 diff_pct = (added + removed) * 100 / orig_lines。但创作者真实场景——draft 是 markdown 长句(一行 ~50 字),拍摄稿是 whisper 转录的口语化短断句(每行 ~5-10 字)——同样的内容会 inflate diff_pct 到 100-200%,触发本不该的 v2 重判。

实测复现(use clone PR pre-fix):

  • draft markdown 63 行 / ~380 字
  • 拍摄转录 100 行 / 同 ~380 字
  • 内容几乎完全保留(审稿人原句一字不差 + 5 年前反应概念 + 升维段所有金句)
  • 唯一新增:1 句 brand 锚定 "全面拥抱 AI"
  • line-level diff_pct = 198% ⚠️ v2 错误触发
  • 语义内容真实 diff ≈ 15-25%

修复:拆 metric。

  • DIFF_METRIC=char_levenshtein_normalized(新默认)—— tools/diff_pct.py 先 normalize(去 markdown header / 分隔线 / 列表标记 / 装饰标点 / 折叠所有空白),再算 char-level Levenshtein / max(len_a, len_b)
  • backend 优先级:rapidfuzz(C-backed,~ms 级;需 pip install rapidfuzz) → difflib.SequenceMatcher(stdlib,永远可用,~10ms 级)
  • V2_TRIGGER_THRESHOLD = 0.30 保持不动(阈值经验合理)
  • legacy line-level 保留为终极 fallback(只在 python3 + tools/diff_pct.py 都不可达时降级)

测试:3 fixture × 2 backend = 6 case,全过:

Case内容期望范围difflibrapidfuzz
1markdown 长句 vs 转录短断句(内容同)< 30712
2完全不同主题≥ 608897
3加 20% outro/CTA10-301425

bash tools/diff_pct_test.sh 复现。

已知局限

  • 历史 v2 prediction 文件保留 line-level 数字作 audit trail——不重新走过去的 prediction
  • normalize 是启发式(中文标点)——对其他语言 / 非典型 markdown 可能需调整 regex

Fixed — rubric_notes.md 实绩泄漏漏洞(BREAKING for blind channel integrity

问题:PR #11 引入的 cheat-score-blind sub-agent 承诺只读 scripts/<id>.md + rubric_notes.md 两个文件。但 cheat-bump Phase 5 把升级 Memo(含真实视频名 + 实绩 + 派生证据)写进了 rubric_notes.md——sub-agent 通过白名单读到了本不该看的实绩,盲打分变成"看过实绩的事后合理化"。实测复现:5 条已发视频里 2 条 sub-agent 自动标 any_contamination_signal: true(refusal=non_blind_warning,所有维度 confidence 降 medium)。

修复(拆 file):

  • 新增 rubric-memo.md——升级 Memo 累积档案。cheat-bump Phase 5 写这里写 rubric_notes.md。append 模式累积多次 bump
  • rubric_notes.md 严格收窄——只放公式 + 通用语言维度定义 + bucket 边界 + 顶部 metadata 指向 rubric-memo.md。绝不含真实视频名 / 实绩 / 派生证据带命名锚
  • cheat-score-blind 硬禁读 rubric-memo.md——refusal_code blocked_rubric_memo;同时加白名单文件兜底自检(grep 命中实绩 pattern → 标 non_blind_warning
  • cheat-bump Phase 5 leak guard——写完 rubric_notes.md 后 grep 自检,命中违禁 pattern → abort + 回滚
  • shared-references/observation-lifecycle.md 加约束——任何 skill 写 rubric_notes.md 都不许含实绩 pattern(防止将来再犯)

老用户必跑:v0.x 任何已有 rubric_notes.md 含 bump Memo 的项目,git pull 后必须/cheat-migrate 把 rubric_notes.md 拆分为两份文件。不跑 → blind sub-agent 仍泄漏。详见 migrations/1.3-to-1.4.md

Changed — schema 1.3 → 1.4(MINOR but BREAKING for blind channel)

  • state 字段无变化——schema_version bump 仅标识"老用户须跑文件层拆分迁移"
  • migrations/1.3-to-1.4.md 7 步标准流程(备份 → 扫描 → 抽离 → 写 rubric-memo.md → 清理 rubric_notes.md → 自检 → bump schema)
  • cheat-init, SessionStart hook LATEST_SCHEMA, registry.md 三处同步

Added — Blind scoring sub-agent(channel B 隔离)

问题:cheat-on-content 的 7/9 维打分原本在主对话 inline 完成——但主 Claude 已经看过用户对话、实绩数据、复盘段历史,打分被污染。/cheat-bump Phase 2 校准池重打分时尤其严重——rank 一致性可能 overfit 而非真信号。

改动:引入 skills/cheat-score-blind 作为 channel B 隔离打分 sub-agent。三 channel 模型:

  • A = 主对话:决策 / 写 retro / 跟用户交互
  • B = blind sub-agent (新):只接收 script_path + rubric_notes_path,硬拒绝读 state file / predictions/ / videos/,输出严格 JSON 9 维分 + per-dim confidence
  • C = 跨模型 audit(qwen-max via mcp__llm-chat__chat,已有):bump 终局 sanity check

具体落地:

  • cheat-score Step 3 改为 Task tool delegate 到 cheat-score-blind(不再 inline 打分;cheat-score 无 --skip-blind 因为是轻量探索)
  • cheat-predict Phase 2 默认 delegate;新 Phase 2.5 做 disagreement detection——blind 与主 Claude 自估 |delta| ≥ 2 弹用户裁定(选 a/b/c);header 新增 BlindScored By + BlindScore Disagreement 字段(所有维度必记,delta=0 也记,作为复盘分析素材)
  • cheat-predict --skip-blind flag 是 escape hatch:触发 state.last_prediction_self_scored=true + last_self_scored_at 时间戳,cheat-status / SessionStart hook 持续 nag 至下次正常调用清回
  • cheat-bump Phase 2 强制 sub-agent,不接受任何 fallback——Task tool 不可用 → abort bump,不接受"自审";每条 prediction 的 Re-scored under vN 行额外标 blind: true
  • SessionStart hook 检测 last_prediction_self_scored && days_since >= 7 输出红色警告
  • install.sh / uninstall.shcheat-score-blind 到 SKILLS 数组(14 个子 skill)

Changed — schema 1.2 → 1.3(MINOR)

  • 新增 last_prediction_self_scored: bool(默认 false)+ last_self_scored_at: ISO 8601 / null
  • migrations/1.2-to-1.3.md 含 4 段标准格式(WHAT/WHY/HOW/Manual fallback)
  • 老 state 跑 /cheat-migrate 升级;不跑也兼容(skills 用 state.get(field, default) 兜底)

Known limitations(写进 cheat-score-blind/SKILL.md)

  1. sub-agent ≠ 真独立 —— 同 Claude 模型,RLHF priors 共享;新 context 不等于另一个判分体系
  2. 不解决 rubric 设计 bias —— 用户自己写的 rubric 自然让自己内容显得好。这层 bias 由 channel C 跨模型 audit 和定期 bump 验证解决
  3. 不解决 review 阶段的覆盖 —— 主 Claude 拿到 blind 分后,可能在 Phase 2.5 被实绩诱导覆盖。disagreement detection + 用户裁定减轻但不消除

Changed — README / cheat-init voice 重塑(递归宿命感)

  • README tagline 改递归宿命版:"你正在读这段话——这个 skill 预测过了。... 你停下来思考'这是不是真的'——也在它的预测里。" 替代原"凭感觉发是猜,这套让你算"框架
  • 新增 🌀 起源段:创作者本人视频脚本精华(一阶宿命 → 二阶宿命的觉醒)作为 README 中段叙事 hook
  • closing tagline 加 callback:"你看到这一行——也是它预测的"——首尾呼应把读者卡进预测循环
  • cheat-init Phase 1 首屏同步:从 "做内容本质上就是作弊" 改成 "你的下一条内容已经在改写 3 个月后的你。规律是客观存在的,区别是你看见还是没看见。这套让你看见。"
  • GitHub repo description 同步递归版

Changed — 多语言 README 拆分

  • README.md 现为英文默认——国际用户首屏
  • docs/README_CN.md 为简体中文(原 README 内容 + 宿命感重塑)
  • 两份顶部加 language switcher(QuantDinger 风格)
  • logo 路径 + 内部链接按相对路径调整

Added — Star History 图表

两份 README 末尾加 star-history.com 图表,社区可视化项目热度。

Changed — 弱化 Claude Code 强调

README 安装段从"### Claude Code"+"### Codex"双标题,改为"默认 + supported agents 列表"——把 skill 包装成跨 agent 的工作流而不是 Claude Code 专属。日常用法段同步换成 "skill-compatible agent" 泛称。

Added — Terminal-style logo SVG

  • docs/logo.svg(1.9KB 原生 SVG,无图片资源依赖)
  • 终端窗口 + traffic lights + $ fatesnail 命令行 + 5 阶段循环 + // cheat on content 注释
  • README hero 居中嵌入

Added — cheat-seed Mode 重构 + 双热点工具集成

问题:原 Mode B 给"a/b/c 三种例子"让用户讲经历——但同样的话术对有方向但抽象的用户("想做职场")和完全没想法的用户("帮我想")一视同仁,前者其实有真动机不需要 AI 列举,后者需要的是外部素材而不是 prompt。

改动

  • Mode B 改成单问"为什么想做这个主题?" —— 用户内省窗口,不调任何热点工具。3 类回答:含具体经历→转 Mode A;空动机→反问最多 2 轮;真没想法→转 Mode C
  • Mode C 整合外部素材:按 content_form 路由热点工具——AI 类形态调 aihot,文化/社会形态调 trendradar-mcp,混合两个都调;用户挑一条后回到内省问"你为啥对这条最有感觉",再转 Mode A 深挖
  • Mode A 灰色场景(用户给了时事话题):Phase 2A.5 询问"要不要拉外部数据作参考"——不主动调,避免外部信息带偏用户视角
  • 聊经历三选项移到 Mode C 兜底:仅当用户拒绝外部素材或外部都不感兴趣时呈现

Added — 两个一等公民 trend source

  • aihot(Claude skill):aihot.virxact.com 的中文 AI 行业每日精选,5 类(模型/产品/行业/论文/技巧)。无 auth,curl 公开 API,rate limit 600/min
  • trendradar-mcp(MCP server):TrendRadar(57k stars,GPL-3.0 通过 MCP 调用不构成 linking)。25+ MCP 工具——除 get_latest_news 外还有 analyze_topic_trend(爆火/衰退判定)、compare_periods(周环比)、analyze_sentiment

Added — shared-references/data-source-routing.md

热点工具的触发与路由协议——单一来源记录:"何时调"(5 个入口的触发矩阵)+ "调哪个"(content_form → adapter 路由表)+ "不调时怎么办"(失败降级链)+ Token 成本意识。

哲学保持不变

热点工具是"前置素材库",不是"主菜单"——AI 给材料,用户决定 angle。

cheat-seed 的核心论点"好内容来自用户的真实经历,AI 不凭空 brainstorm"完全保留。新设计只是让"完全没想法"这条 cold-cold-start 路径不再死锁。

Added — v2 预测重判系统(拍后改稿场景)

  • append-only v2 prediction:cheat-shoot 检测拍摄稿与 scripts/<id>.md 行级 diff ≥ 30%(V2_TRIGGER_THRESHOLD)→ 自动调用 /cheat-predict — mode: v2 — prediction-file: <path> → 在原 prediction 文件 ## 复盘 之前 append ## 预测 v2 (replaces v1) 段。v1 段绝不修改(hook 物理强制),v2 才进 cheat-retro 的偏差计算
  • immutability hook awk 升级:单个 ## 预测 改为可识别多个 ## 预测 vN 段(v1 / v2 / 任意 vN 一起锁),同时兼容 v0.1.0 的 legacy 裸 ## 预测 写法。端到端 5 场景验证通过(编辑 v1 / 编辑 v2 / 编辑 legacy 都 BLOCK;append 新段、改 ## 复盘 都 ALLOW)
  • cheat-predict 加 Phase 0.7 模式判定:检测目标 prediction 文件已含 ## 预测... 段 → 自动切 v2 模式(Edit 在 ## 复盘 边界 append,不 Write 覆盖)
  • cheat-retro 升级:识别多个 ## 预测 vN,取最后一段作校准依据;预测段哈希校验扩展为"全部 v? 段合并哈希",任一被改即报错回滚
  • prediction header 新字段 Prediction Basispre_shoot(v1 默认)/ post_shoot_pre_publish(v2)。score-curve 与 cheat-bump 据此区分两条数据线避免混样
  • shoots[] 项 schema 扩展:新增 scripts_path / script_consistency / script_diff_pct / v2_prediction_written / script_hash_at_shoot(详见 migrations/1.1-to-1.2.md

Changed — schema 1.1 → 1.2(MINOR)

  • 升级 migrations/registry.md LATEST_SCHEMA 标记 + 版本链表
  • cheat-init 新建 state 写 "schema_version": "1.2"
  • SessionStart hook LATEST_SCHEMA="1.2" —— 老用户 git pull + 跑会话 → hook 提示 schema mismatch → 用户跑 /cheat-migrate 5 秒升上来。MINOR 兼容,不强制(skills 用 state.get(field, default) 兜底)

Why now

用户实际工作流:写完草稿 → 常常拍摄时即兴改文案 → 草稿和实际播出版本脱节。原"拍前预测,拍后只登记"的严格盲预测让"预测对的稿子"与"实际播出的稿子"不是同一份——校准失真。

v2 系统让"拍后改稿"成为一等公民:v1 留作档案,v2 基于实际拍摄稿重判,diff(v1, v2) 本身成为 rubric 升级的强证据(用户改稿改高了 ER → 工具学到这个用户的 ER 阈值跟当前公式不一致)。盲预测原则保留:v2 仍在发布前完成,没有播放数据可"作弊"。

Added — Codex 安装兼容(@songth1ef #6

  • install.sh --codex:安装根路由 skill cheat-on-content 和 13 个子 skill 到 ~/.codex/skills/
  • install.sh --all:同时安装 Claude Code 和 Codex skill
  • uninstall.sh --codex / --all:对称卸载 Codex 或双端安装
  • Codex 路由说明:Codex 用自然语言触发同一套流程,不依赖 Claude Code 的 /cheat-* slash-command harness

Added — Migration 系统(让长期迭代不打断老用户)

  • /cheat-migrate skill:把老用户 .cheat-state.json 从旧 schema_version 升级到当前 LATEST_SCHEMA。幂等、不跳版、失败停在断点
  • migrations/ 目录:版本演进单一来源
    • registry.mdLATEST_SCHEMA 标记 + 完整版本链表
    • <from>-to-<to>.md:每步迁移 4 段(WHAT changed / WHY / HOW Claude steps / Manual fallback)
  • shared-references/migration-protocol.md:演进哲学 + maintainer checklist(bump schema 必做的 4 件事)
  • SessionStart hook 增强:检测 state.schema_version != LATEST_SCHEMA → 输出非阻塞警告,建议跑 /cheat-migrate
  • install.sh --reinstall-hooks <project>:git pull 后重写用户项目 .cheat-hooks/ 的脚本(不动 state / rubric / predictions)
  • state-management.md 升级:所有 schema 升级文档指向 cheat-migrate;明确 MINOR / MAJOR 边界

Why now

v0.1.0 用户的 state 是 schema 1.1。后续如果改字段语义、删字段、重命名等 → 没有迁移系统的话老用户 git pull 后会卡住。这套系统让"长期迭代不打断老用户"成为常态。

Fixed

  • cheat-init content_form 存成字母 bug:Phase 3 state JSON 模板用 <Q1> 抽象占位,导致 Claude 字面把 "a" 写进 state 文件而不是 enum "opinion-video"。修复:Q1/Q3/Q4/Q5 各加明确字母→enum 映射表 + Phase 3 模板加粗 warning。同时补全 7 个缺失的 last_* init 字段(之前靠 state.get(field, default) 兜底)+ enabled_perf_adapters 派生 + 强制 initialized_at 用本地 +08:00 时区不用 UTC Z

Changed — README 重写(v0.1.0 ship 后的定位调整)

  • 标题:英文 Cheat on Content,副标 网红外挂(之前 网红作弊器
  • Tagline 直面"作弊"框架:「做内容本质上就是作弊——谁先看穿规律,谁就拿走流量」
  • 新增"那 ChatGPT / 豆包 / DeepSeek 不是也能干这个?"段——核心定位为"你自己的运营专家 + 自动进化"
  • 删早期产品警示段(badge + 本 CHANGELOG 已经在传达,重复就是不自信)
  • 砍 ARIS attribution(保留多 adapter 设计思路,去掉外部归功)
  • README 总长 330 行 → 90 行
  • cheat-init Phase 1 首屏文案同步重写:删方法论哲学,2 条 caveats(早期不准 + 强烈建议导对标)

余项

  • Step B:软化更多硬编码规则
  • 完整 reference-implementation 脱敏快照

[0.1.0] — 2026-05-05

⚠️ 早期产品(v0.x)—— state schema 仍可能 breaking

在 v1.0 之前,每次升级可能改变 .cheat-state.json 的字段结构。升级前建议 backup 你的整个 <your-channel>/ 目录。重大 breaking 改动会在本 CHANGELOG 标 BREAKING,并在可能的情况下给手动迁移步骤。

Added

  • 方法论 + 12 个子 skill:完整闭环 init → learn-from → seed → score → predict → shoot → publish → retro → bump,加 status / recommend / trends 辅助
  • 3 条不可妥协原则:盲预测 + 升级=全量重打 + rubric 是工作台不是博物馆(详见 shared-references/
  • /cheat-learn-from 对标账号导入:5-10 条对标样本派生 base rubric 信号 + script patterns。两种 input 方式(粘文本 默认 / whisper 转录)+ 两种 data 方式(手填 / adapter 自动抓)
  • Buffer 警戒系统(cadence-protocol):按发布频率派生颜色阈值,断更预警
  • 统一预测格式 + confidence 等级:所有阶段同一 7 组件预测,header 显示 🔴/🟠/🟡/🟢/🔵 信心等级
  • prediction-immutability hook:harness 层强制原则 #1(端到端验证 5/5 通过)
  • SessionStart auto-report hook:每次开会话自动渲染状态报告
  • 跨模型 bump 审核(mcp__llm-chat__chat):rubric 升级时调外部 LLM 独立判定
  • douyin-session adapter(Playwright):自动抓抖音视频 + 评论数据
  • whisper adapter:转录视频文件为 transcript
  • 9 份 templates + 2 份 starter rubrics(opinion-video v2 校准 / opinion-video-zero v0 等权)
  • score-curve.py:预测精度收敛曲线诊断工具

软规则(Claude 判断为主,非死磕门槛)

下面规则有默认参考值但 Claude 可基于强信号软违反:

  • bump 触发样本数(默认 ≥5,可基于强反例破例)
  • 同向偏差触发(默认连续 ≥3 次,可基于 1 次极端偏差破例)
  • benchmark 影响淡出(默认 calibration_samples ≥10,可基于"用户数据 vs benchmark 差异度"破例)
  • observation 升格门槛(默认 ≥2 样本,可基于强信号破例)

软违反时 Claude 必须显式标注 judgment-driven 让用户审视。

硬约束(不可软违反)

  • bump 验证 THRESHOLD = 4/5(统计刚性)
  • prediction immutability hook(binary)
  • RETRO_WINDOW_DAYS = 3 默认(用户可配置 1/7)
  • 必须有 ≥3 条 benchmark 样本才能拆 pattern
  • 必须 ≥20 top 评论才能完成 manual paste 复盘

已知 limitations

  • v0.x 无自动 migration:升级时若 state schema 变了,老用户需手动 wipe + 重 init
  • adapter fragility:抖音 / 小红书 adapter 依赖反爬绕过,平台改版时可能 break,需要持续维护
  • whisper 中文准确度:medium 模型够用,long-form 准确度一般,关键稿子建议 manual review

升级指南(pre-v1.0)

每次 git pull 之后:

  1. Symlink 模式装(推荐):直接生效,无需重装
  2. Copy 模式装:重跑 bash install.sh --copy
  3. 如果 CHANGELOG 标了 BREAKING:照 manual migration steps 操作。无 steps 时建议 wipe + 重 init