接续 88dd570,保存 W20–W24 已实现的共享接口、业务入口、迁移、工作台、测试与文档。 W20/W22/W23 保持 in_progress,W21/W24 保持 verified;此提交不宣称方法或规则正式启用、多轮返修、真实角色评测完成。 W25 新增实验、标定、逐调用交付与角色执行及其迁移/测试/索引留在实施工作树,原有私人和旧实现保留项不纳入。 验证:离线 571、前端 33 通过;PG 469 项通过、2 项浏览器未启用,2 项误带入的 W25 用例已移出本提交;最终任务与交付边界 37 项通过。make 检查、最终类型、84 项资源及 diff 检查通过。未重跑浏览器或 Pi 宿主,不以合成调用认证外部模型效果。 独立整体审查四维通过;证据保存在 R2-20260909/提交W20-W24。
91 lines
3.8 KiB
Python
91 lines
3.8 KiB
Python
"""完整审校的范围合同;结构覆盖不冒充模型调用或文学判定。"""
|
|
|
|
import hashlib
|
|
from dataclasses import replace
|
|
|
|
import pytest
|
|
|
|
from muse.共享.错误 import Muse错误
|
|
|
|
依据 = hashlib.sha256(b"synthetic-review-basis").hexdigest()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"原文", ["甲🙂乙𠀀丙。\n第二段不会被忽略。", "前文\r\n后文\r\n末句。", "\n\n 保留空白\n\n尾部"]
|
|
)
|
|
def test_核心覆盖全部码点且上下文不重复计数__22a001(原文):
|
|
from muse.审校修订.接口 import 核对审校覆盖, 生成审校分片
|
|
|
|
计划 = 生成审校分片(原文, 依据, 核心上限=5, 上下文字数=3)
|
|
assert "".join(原文[p.核心起点 : p.核心终点] for p in 计划) == 原文
|
|
assert all(p.文本 == 原文[p.上下文起点 : p.上下文终点] for p in 计划)
|
|
for p in 计划:
|
|
for pos in (p.核心起点, p.核心终点, p.上下文起点, p.上下文终点):
|
|
assert not (0 < pos < len(原文) and 原文[pos - 1 : pos + 1] == "\r\n")
|
|
完整 = 核对审校覆盖(原文, 依据, 计划, [p.片ID for p in 计划])
|
|
assert 完整["范围完整"] is True and 完整["已审字数"] == len(原文)
|
|
assert 完整["未审区"] == [] and "passed" not in 完整
|
|
部分 = 核对审校覆盖(原文, 依据, 计划, [计划[0].片ID])
|
|
assert 部分["范围完整"] is False
|
|
assert 部分["未审区"][-1][1] == len(原文)
|
|
assert 部分["已审字数"] == 计划[0].核心终点
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"变更", ["文本", "依据", "片段字节", "核心范围", "遗漏计划", "重复计划", "陌生完成", "重复完成"]
|
|
)
|
|
def test_旧依据与坏片段不能构造完整覆盖__22a002(变更):
|
|
from muse.审校修订.接口 import 核对审校覆盖, 生成审校分片
|
|
|
|
原文 = "同一个前缀,另一段尾部不能漏审。"
|
|
计划 = 生成审校分片(原文, 依据, 核心上限=6, 上下文字数=2)
|
|
完成 = [p.片ID for p in 计划]
|
|
新依据 = 依据
|
|
if 变更 == "文本":
|
|
原文 += "新"
|
|
elif 变更 == "依据":
|
|
新依据 = "0" * 64
|
|
elif 变更 == "片段字节":
|
|
计划 = (replace(计划[0], 文本="伪片段"), *计划[1:])
|
|
elif 变更 == "核心范围":
|
|
计划 = (replace(计划[0], 核心终点=计划[0].核心终点 + 1), *计划[1:])
|
|
elif 变更 == "遗漏计划":
|
|
计划 = 计划[:-1]
|
|
elif 变更 == "重复计划":
|
|
计划 = (计划[0], *计划)
|
|
elif 变更 == "陌生完成":
|
|
完成 += ["not-a-shard"]
|
|
else:
|
|
完成 += [完成[0]]
|
|
with pytest.raises(Muse错误):
|
|
核对审校覆盖(原文, 新依据, 计划, 完成)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"原文,上限,上下文",
|
|
[
|
|
("", 5, 2),
|
|
(" \n", 5, 2),
|
|
("正文", True, 0),
|
|
("正文", 1, 0),
|
|
("正文", 5, -1),
|
|
("正文", 5, 6),
|
|
("正文", 5, False),
|
|
],
|
|
)
|
|
def test_分片参数显式有界且不吞原文__22a003(原文, 上限, 上下文):
|
|
from muse.审校修订.接口 import 生成审校分片
|
|
|
|
with pytest.raises(Muse错误):
|
|
生成审校分片(原文, 依据, 核心上限=上限, 上下文字数=上下文)
|
|
|
|
|
|
def test_相同输入分片稳定且全文或依据变化使旧身份失效__22a004():
|
|
from muse.审校修订.接口 import 生成审校分片
|
|
|
|
一 = 生成审校分片("前缀相同的长文末尾。", 依据, 核心上限=4, 上下文字数=1)
|
|
assert 一 == 生成审校分片("前缀相同的长文末尾。", 依据, 核心上限=4, 上下文字数=1)
|
|
二 = 生成审校分片("前缀相同的长文末尾!", 依据, 核心上限=4, 上下文字数=1)
|
|
三 = 生成审校分片("前缀相同的长文末尾。", "0" * 64, 核心上限=4, 上下文字数=1)
|
|
assert 一[0].片ID != 二[0].片ID and 一[0].片ID != 三[0].片ID
|