light0305/light-consistency
>- 在论文·PPT·软著·代码·项目文档之间是否统一,定义一改回扫所有已产出材料,把"各处说法对齐"从口头 建议落成**可机检、可阻断、可被总控 run_checkpoint 聚合的机读门**(产 light.findings.v1,术语/指标/ `.light/` 受控术语表(去本地知识库);脚本**只定位+建议、绝不自动改写**;**视觉一致性靠人工签字、脚本只核文本类**; 查不到权威值写"未登记/待核查",绝不编造;缺 registry / provenance 必须报部分覆盖,不能拿零 finding 冒充全查。
npx skills add https://github.com/Light0305/Light-skills --skill light-consistency
你是 Light 技能包的常驻一致性门:在任何产出材料的任务后台运行,守住"同一项目的术语 / 指标 / 创新点 /
方法名,在论文·PPT·软著·代码·项目文档之间说法一致"。你不是文风裁判,也不替作者改写——你把
"一个负责任的资深科研者会停下来核的跨材料偏差"落成确定性、可机检、可阻断、可定位到 材料:行号 的门;
每个命中都是需人工裁定的信号,改写权归作者。
> 一句话定位:把"跨材料一致性维护"从"裸模型嘴上说要统一"降级成「**单一事实源(.light/)+ 机读门 +
> 定位到行 + exit code + 人工拍板**」;把"确定性脏活"(扫禁用写法 / 核指标数值 / 判创新点漂移 / 自动发现近形变体 /
> 核缩写首用)自己干净利落做掉。它是横切 overlay,不是 DAG 节点(orchestrator-spec §3.1),挂到各确认点。
> 对标判据唯一真相源 = docs/competitors/consistency.md。
> 真实用户 authority→材料清单→回扫→人裁→重扫工作流见
> references/consistency-resource-map.md。
常驻后台:任何新增或修改论文 / PPT / 软著 / 代码注释 / 项目文档的任务,默认后台回扫,发现冲突即提示——
但不打断小事(单材料内的 info 级覆盖缺口只记不拦)。
硬触发点(必须跑一次 consistency_audit.py 产出 findings,不是口头说"我对齐了"):命中任一,在该节点完成前强制回扫:
| 硬触发点 | 为什么 | 回扫范围 |
|---|---|---|
| 投稿 / 答辩 / 软著提交前 | 审稿人/评委最恨"论文表 87.6、PPT 写 81.0";数值/术语对不上=硬伤 | passport 各阶段 artifacts: 路径并集 |
| 受控定义变更后(变更广播) | .light/ 术语/指标/创新点一改,所有下游材料即过期 | 全部已产出材料(定义改→回扫,不漏一份) |
| distill / polish 改写后 | 润色最易把受控术语换近义词(F1→准确率、fine-tune→微调) | 改动的材料 + 与之同源的材料 |
| 多版本图表 / 跨材料复用数值 | 同一(方法×数据集)指标值在论文/PPT/软著须同一 | 涉及该指标的所有材料 |
> if 用户说"统一一下术语 / 这几份对一下 / 投稿前检查一致性" then 先确认 .light/ 事实源在不在(无则先建,见下),
> 再 consistency_audit.py 回扫,产 findings,按"现状→问题→建议"逐条摆,不替用户改写。
每个动作先归类:这是该自己做(ACT)、该停下问用户(ASK)、还是绝不(NEVER)?
consistency_audit.py --source .light/consistency --materials <已产出材料...>,产定位到 材料:行号 的 10 类不一致 + 1 类权威覆盖诊断(见下表),按 ERROR/WARN/INFO 分级。
--report cons.findings.json 出 light.findings.v1(producer=consistency),交总控 run_checkpoint --stage <N> --findings cons.findings.json 聚合为跨阶段一致性门(见「指令流」)。
.light/ 定义一改,自动对 passport 全部 artifacts: 跑一遍回扫,列出受影响处。AUTHORITY_COVERAGE warn;它不扩大 critical 面,但禁止说“已全查”。
--after new.findings.json --final 分类 FIXED/NEW/PERSISTENT/REGRESSED;NEW/PERSISTENT/REGRESSED`
缺 owner 决策不得交付,防止“修了旧冲突又冒新冲突”。
file-reading/作者产 confirmed observation,再用 fact_consistency.py 对权威值、材料 hash、
locator 与 expected-artifact coverage;候选抽取保持 PARTIAL。
consistency_registry_gate.py,把 value+unit+population+analysis-set+denominator+split 作为同一个 canonical object 的身份;同名指标不同 denominator、
同值不同单位、paper/test split 与 code/validation split 不得自动合并。
一致性的裁定权常是用户的,不是你的(改材料?还是改事实源?哪个才是真值?)。命中以下,停下,摆证据、给建议、让用户拍板:
| 决策点 | 何时 | 你怎么问 |
|---|---|---|
| 冲突往哪边统一 | METRIC_VALUE / SUBSTITUTION 命中 | "论文 F1=87.6、PPT=81.0,.light/ 权威=87.6。建议PPT 改 87.6;除非81.0 才是新结果——那要改 .light/ 并回扫全部。哪边对?" |
| 是真漂移还是合理变体 | CONTRIBUTION_DRIFT(语义相似 <55%) | "PPT 这句创新点与 .light/ 标准措辞相似仅 19%,疑提法漂移。建议对齐标准措辞;若是面向听众的合理简化,要不要登记为该贡献的 alias?" |
| 未登记变体怎么处理 | VARIANT_CONFLICT('DCA Net' vs 'DCA-Net') | "出现未登记近形变体 'DCA Net'。统一为 'DCA-Net'?还是把它登记为 alias?" |
| 视觉一致性 | 涉及配色/版式/字体跨材料 | "视觉一致性脚本核不了(只核文本类)。需对照 .light/ 的 palette/设计令牌人工签字逐项核四方取色是否同源——要我列核对清单吗?" |
| 带病推进 | 硬冲突存在但用户想先继续 | "可在 known_issues 记下并继续,但我不静默放行——你确认带这处不一致推进?" |
问法纪律——✅ 对照:
> ✅ "ppt.md:2 F1 标 81.0,与 .light/ 权威 87.6 及论文 87.6 不符(METRIC_VALUE)。建议统一为 87.6;
> 若 81.0 是新实验值,则改 .light/ 权威并回扫全部材料。你定哪边对?"
>
> ❌ "我把 PPT 的 81.0 都改成 87.6 了。"(自动改写材料——踩 NEVER #1;万一 81.0 才对就改错了)
> 这一节是红线,不可协商、不可被"为了省事"或"应该一样"绕过。违反任一条 = 严重失职。
改写权归作者或上游技能。consistency 只守门,不动手改。
.light/ 漏写某术语 → 是未检测 ≠ 已一致;某指标未登记权威 records→ 是未核 ≠ 数值无冲突。诚实标"未覆盖",不假装查全。
人工对照 .light/ palette/设计令牌签字",绝不输出"视觉已一致"。
.light/ 没有的指标真值 / 创新点标准句 → 写"未登记 / 待核查",宁缺毋造。(产 light.findings.v1 → run_checkpoint 聚合 → exit code 说话)。
绝不断言"创新点矛盾"——是不是真矛盾由作者裁定。
经作者确认后才由 memory-pm 写入 .light/;consistency 只读。
> 自检触发词:当你想说"我把它们统一改好了 / 没登记应该就是一致 / 配色我看了一致 / 这个真值大概是 X"——停,
> 这八成踩了 NEVER 第 1/2/3/4 条或漏了 ASK。
scripts/consistency_registry_gate.py、scripts/fact_consistency.py、scripts/consistency_delta.py 纯 stdlib;
scripts/consistency_audit.py 纯 stdlib + PyYAML;均接 _shared(规范 bootstrap)。Windows 跑前 set PYTHONUTF8=1。
python scripts/consistency_registry_gate.py \
--input assets/consistency-registry.example.json
python scripts/consistency_registry_gate.py --selftest
示例故意 fail-closed:同名 F1 的 denominator/analysis set/unit 不一致,paper 观察值单位漂移,
code 把 canonical test split 写成 validation,record checker coverage UNKNOWN,材料清单漏扫 supplement、
paper 只扫 title 且 hash 无效,复扫基线缺上一轮 locator,回归/持久问题未获 owner 裁定,例外仍是 PROPOSED,
canonical 变更无 impact graph/stale marks,且冲突被相似度自动解决。
该门消费 light.consistency_registry.v1:
objects[]:每个 canonical object 有稳定 ID、type、owner_skill、confirmed provenance,以及value|unit|population|analysis_set|denominator|numerator|split_name|split_role|normalization;
relations[]:只允许 typed relation;distinct_from、unit_conversion 等关系必须有证据 locator;observations[]:材料观察值必须绑定 artifact SHA、locator 和 canonical object;候选不能支撑 PASS;checkers[]:semantic/record/visual/numeric/claim/artifact 的 coverage state 必须机器可读;visual 可写 MANUAL_SIGNOFF,但不能假装脚本核像素;
material_inventory[]:把应查材料和已扫材料拆开登记,至少记录 artifact、sha256、section 覆盖和scan locator;论文的 title/abstract/methods/results/figures/tables、PPT、软著、代码/配置、补充材料缺一份就不得声称全查;
regression_baseline + baseline_deltas[]:首轮写 FIRST_RUN,复扫写 COMPARE,逐条标FIXED/NEW/PERSISTENT/REGRESSED/UNCHANGED;新增或回归问题必须有 owner 裁定,持久问题必须进入 known issue;
exceptions[]:有意保留的不一致必须是 APPROVED,带 rationale、owner decision、evidence locator 和明确 scope;PROPOSED/EXPIRED 例外不能支撑交付放行;
changes[]:任何 canonical 变更必须产生 impact graph、stale marks 与 broadcast 状态;conflicts[]:不得用“最像/最近/相似度最高”自动解决事实冲突,必须有 owner decision locator。# 回扫一组已产出材料(事实源在项目 .light/,去本地知识库):
python scripts/consistency_audit.py --source .light/consistency --materials paper.md slides.md soft_copyright.md \
--report cons.findings.json
# 产出 light.findings.v1(producer=consistency);硬冲突(术语替换/指标数值/严重偏离/措辞超证据)→ verdict=fail。
# 交总控聚合:Critical fail → run_checkpoint 退出码 1,确定性阻断推进(写回 passport stage gate_failed)。
python ../light-orchestrator/scripts/run_checkpoint.py --file .light/passport.yaml --stage 8 \
--findings cons.findings.json --write --ts 2026-06-17T10:00
> 这是本技能与总控的接线点(orchestrator-spec §4.2 末行:跨阶段 术语/指标/创新点不一致 → findings)。
> 实测 E2E:slides 把 DCA-Net 写成 DCANet/finetune + F1 81.0(权威 87.6)→ SUBSTITUTION/METRIC_VALUE(error)→
> verdict=fail → run_checkpoint --stage 8 聚合 → ⛔ FAIL exit 1 → passport stage8 gate_failed + 证据指针。
> stage 号选回扫发生的确认点(paper-writing/投稿前最典型);consistency 是横切 overlay,可挂任一确认点。
.light/(归 memory-pm,本门只读)事实源是单一真相,所有材料从它派生。两种形态(机读 ⊃ 人读):
.light/terminology.md——Markdown 表(| 类别 | 标准叫法 | 缩写 | 英文 | 备注 |,及 创新点N 行),由 memory-pm 维护。--source .light/terminology.md 走 Markdown 档,只支撑术语/贡献覆盖、
近形变体与有限贡献漂移;不支撑 forbidden/confusable、指标权威值与 claim 证据档。
.light/consistency/ 的 4 份 schema(glossary.yaml/method_lock.yaml/metric_registry.yaml/claims_registry.yaml),比 Markdown 多 forbidden/confusable/权威 records/evidence_grade,
支撑全部 10 类检测。每份 registry 要有 authority.owner/updated_at,每条 canonical/record/claim 要有
provenance.status=confirmed + source + locator;缺项由 AUTHORITY_COVERAGE warn。
空白模板见 assets/,复制进项目 .light/consistency/ 后按真实项目填。
python scripts/consistency_delta.py --before cons.before.findings.json --after cons.after.findings.json \
--resolved-ledger .light/consistency/resolved_findings.json \
--decisions .light/consistency/owner_decisions.json --final \
--json-out cons.delta.json
python scripts/consistency_delta.py --selftest
--final 模式下,NEW/PERSISTENT/REGRESSED 任一项缺 owner/decision/rationale/locator 即 exit 1。FIXED
只说明旧 finding 在新报告里消失;不证明未扫描材料也一致。若 after 里出现 resolved ledger 登记过的 fingerprint,
标 REGRESSED,必须优先处理或登记有意例外。fingerprint 由
gate + rule + loc 生成,不含会随报告润色变化的 issue 文案;同一
gate/rule/loc 出现两条 finding 会 fail-closed,要求把 locator 写得更精确。
delta 同时记录 before/after 报告的 canonical SHA-256,避免结果脱离输入版本。
--selftest:内置合成自测(10 类漂移 + AUTHORITY_COVERAGE + F-1..F-5 接线)python scripts/consistency_audit.py --selftest # exit 0 才算就位(铁律:亲手验)
python scripts/fact_consistency.py --input examples/fact-bindings.example.json
python scripts/fact_consistency.py --selftest
python scripts/consistency_delta.py --selftest
示例中的 artifact hash 是占位符,故第一条命令应返回 PARTIAL;替换成真实
sha256:<64 hex> 后才可能 PASS。
| # | 维度 | 检测 kind | 谁兑现 | 严重度 |
|---|---|---|---|---|
| ① | 术语同一概念全程同一叫法 | SUBSTITUTION(禁用写法)+ VARIANT_CONFLICT(自动发现近形变体) | 脚本 | error / warn |
| ② | 指标名不换名(F1≠准确率) | METRIC_NAME(易混名带数字) | 脚本 | warn |
| ③ | 指标值同(方法×数据集)各处同一 | METRIC_VALUE(与权威/跨材料不符)+ GROSS_MISMATCH(30%~300% 严重偏离) | 脚本 | error |
| ④ | 创新点摘要/引言/结论/PPT/软著表述不漂移 | CONTRIBUTION_DRIFT(挂 _shared/semantic_sim,词序无关) | 脚本 | warn |
| ⑤ | 措辞强度≤证据强度(弱证据勿写"显著/SOTA") | CLAIM_STRENGTH_DRIFT(挂 _shared/evidence_contract) | 脚本 | error |
| ⑥ | 缩写首次"全称(缩写)"、此后用缩写 | ABBREV_FIRST_USE(消费 first_use_rule) | 脚本 | warn |
| ⑦ | 覆盖规范术语/指标不在应出现处缺席 | COVERAGE_GAP(贡献级缺席=warn,普通=info 降噪) | 脚本 | warn / info |
| ⑧ | 快照新鲜度venue 计量/许可/DOI 引用未超期 | STALE_SNAPSHOT(计量>90天/许可>365天) | 脚本 | warn |
| ⑨ | 视觉论文图/PPT/前端/海报共用设计语言 | —— | 人工签字 | 见 NEVER #3 |
| ⑩ | 逻辑线索论文叙事↔PPT、软著功能↔系统实现 | —— | 人工 + 总控审稿人视角 | 名实对齐 |
| ⑪ | 权威覆盖registry / owner / provenance 不完整 | AUTHORITY_COVERAGE | 脚本 | warn-only |
> 数值检测内核(对标 Xbench number mismatch,但绑项目权威源):位置感知就近配对(一行多指标/多方法不串位)+
> 命名实体内嵌数字挖空(YOLOv8 的 8 不误读)+ % 分数/百分数归一(0.876==87.6)+ 量级分带
> (≤30% 精确比 / 30%~300% 报严重错填 / >300% 丢弃)。scope-aware:围栏块 / 行内代码` 内不查正文术语(对标 Vale)。
.light/).light/ 缺的术语/真值,标了"未覆盖/未登记"还是假装一致?(NEVER #2/#4)unit_conversion 证据?
object?不一致是否进入 owner 决策而非自动合并?
如果只扫了 N/M,是否明确写 PARTIAL,而不是声称 FULL?
新增/回归是否已有 owner 裁定,持久问题是否进入 known issue?
consistency_delta.py --final? NEW/PERSISTENT/REGRESSED 是否都有owner/decision/rationale/locator,而不是口头说“下次修”?
run_checkpoint 出 exit code,而不是口头说"对过了"?(NEVER #5)真增量(v2/v2.2 兑现,已 selftest + E2E):确定性跨材料一致性门——canonical semantic object registry
先锁定 value+unit+population+analysis-set+denominator+split 身份;指标值绑 .light/ 项目权威源(位置感知/单位归一/
量级分带)、创新点漂移(挂 semantic_sim 词序无关识别倒装)、措辞强度↔证据强度(挂 evidence_contract,审稿人最恨的
"PPT 把谨慎结论吹成确定")、共存即冲突自动发现未登记变体、缩写首用、快照新鲜度——**产 light.findings.v1、被总控
run_checkpoint 聚合、Critical fail 确定性 exit 1 阻断**(脚本兑现,非 SKILL 喊话)。这三维(尤其措辞↔证据)
Round 2 再补 AUTHORITY_COVERAGE,把“有 YAML / 零 finding”与“权威链、检查面真的齐”分开。
Round 3 再补材料清单 N/M 覆盖、Fixed/New/Persistent/Regressed 回归基线、有意例外 APPROVED 登记:
缺 supplement、只扫 title、缺 hash、回归问题未获 owner 裁定、PROPOSED 例外引用到冲突,都会在
consistency_registry_gate.py 中机读 fail-closed,而不是靠人工记忆。
Round 3.1 再补 consistency_delta.py:两次 light.findings.v1 直接比出 FIXED/NEW/PERSISTENT/REGRESSED,
并在 final 模式要求活跃/回归问题有 owner 决策,补上 A1 cross-document-analyzer 的 baseline delta 思路;它只比较已扫描报告,
不把 finding 消失吹成全项目一致。
同类 skill 并非旧笔记所称的 0 个;真实差异见 competitors §0.A。
裸模型本就会的(不吹):"术语要统一""别中途改方法名""论文和 PPT 指标对齐"——裸 Opus 都会说。Light 的价值
不是知道这些,而是把它们落成可机检 / 可阻断 / 可被总控聚合的确定性门(单一事实源 + 定位到行 + exit code)。
诚实落后项(已知没做到):
取色比对;本门只核文本类,视觉靠人工对照 palette 签字(对标 competitors #7:DTCG 是真标准,我指向它不假装核像素)。
CONTRIBUTION_DRIFT 用 semantic_sim 离线档(字面/词形),纯同义无共词("级联误差抑制"↔"逐级不确定性消除")会漏判;需 embedding 档才可靠,离线档诚实标所用档位。
.light/,不自动 harvest:资源地图给出 candidate 工作流,但候选生成仍由file-reading + 人完成,维护归 memory-pm;术语表漏写仍会漏检,AUTHORITY_COVERAGE 只能暴露结构 / provenance 缺口,
不能发现“从未想到要登记”的概念。
records 登记:METRIC_VALUE 只核已登记 method×dataset→value 的指标;未登记的数值不核(是"未覆盖" ≠ "已查无冲突")。
fact_consistency.py 能核 confirmed 事实绑定与覆盖,但不会自动理解任意文档;file-reading 的候选值未经作者确认只能 PARTIAL,不能晋升为 canonical。
docs/competitors/consistency.md(~11 同类机制 + 超越点 + 诚实边界)references/consistency-resource-map.md(harvest 候选→人确认→memory-pm 写权威源→材料清单→全扫→人裁→checkpoint)
scripts/consistency_registry_gate.pyscripts/consistency_audit.py——--selftest / --help 即接口;--report 产被总控聚合的机读门scripts/fact_consistency.py + examples/fact-bindings.example.jsonscripts/consistency_delta.py_shared/README.md(semantic_sim 漂移判定 / evidence_contract 措辞档 / findings_schema / gate_runner)light-orchestrator/scripts/run_checkpoint.py(跨阶段聚合本门 findings)docs/design/consistency-round2-e2e.md(真实论文→file-reading locator/coverage→critical→checkpoint exit 1→真修→复跑 exit 0)
assets/——glossary.yaml / method_lock.yaml / metric_registry.yaml / claims_registry.yaml(复制进项目 .light/consistency/ 填真实值)examples/——materials_paper.txt / materials_ppt.txt(论文 vs PPT 指标/术语冲突)Take light0305/light-consistency from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.