muse-agent-example/tests/单元/test_审校覆盖.py
zizi d909d1bd1b 后端实现与用例身份:19 包集成落地并修复收尾缺陷
实现侧:
- 上下文:任务范围拆分为 范围校验/范围授权;索引按可发现口径重建、索引新鲜度改对称差;依赖校验统一快照漂移说明。
- 知识方法:方法与材料读取口径统一;超限方法材料按可选省略,核对路径不再二次计费;删除无合同的读时重算。
- 任务运行:新增 context.usage/tool.denied 事件类型;连接池常驻并在装配生命周期内开关;调用结算与核对分列。
- 效果评测/审校修订/交付连载/作者经验/作品规划:凭据冻结、标定消费、导出补证、事实引文核对等收尾修复。
- 资源加载:能力正文不再夹带索引用的导航注记(该注记此前进入角色与技能的模型提示)。
- 元数据:受保护骨架与代码保护属性对齐;字段校验与内置结构口径同步。
- 基础设施:环境预检进入装配生命周期;数据库连接运行期字段不参与相等比较;索引指纹归一化 jsonb 浮点。
- 删除被替代实现:7 份旧提示词模板与空壳 资料来源 读取器。

用例侧:
- 用例身份与导航元信息迁移;夹具补生命周期、同库暴露与模板封存;
- 本轮定向修复:方法材料省略、事实引文、迁移回执、额度与暂停用例、慢用例超时预算等。
2026-09-18 01:15:00 +08:00

126 lines
5.4 KiB
Python

"""完整审校的范围合同;结构覆盖不冒充模型调用或文学判定。"""
import hashlib
from dataclasses import replace
import pytest
from muse.共享.错误 import Muse错误
依据 = hashlib.sha256(b"synthetic-review-basis").hexdigest()
@pytest.mark.case_id(
"NC-w22-22a001",
environment="默认离线",
given="多段、CRLF、Unicode和保留空白的完整文本",
when="调用公开审校分片/覆盖函数",
then=[
"核心连续覆盖全部码点、上下文不重复计数;缺片明确未审尾区",
"范围计算不证明模型已执行或文学合格",
],
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
)
@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.case_id(
"NC-w22-22a002",
environment="默认离线",
given="旧正文/依据、篡改片段/范围、缺片/重复片或陌生完成声明",
when="调用公开审校分片/覆盖函数",
then=["拒绝不一致计划或完成声明,不构造完整覆盖", "范围计算不证明模型已执行或文学合格"],
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
)
@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.case_id(
"NC-w22-22a003",
environment="默认离线",
given="空白文本及越界/布尔分片参数",
when="调用公开审校分片/覆盖函数",
then=["显式拒绝无效参数,不截取或吞掉原文", "范围计算不证明模型已执行或文学合格"],
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
)
@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错误):
生成审校分片(原文, 依据, 核心上限=上限, 上下文字数=上下文)
@pytest.mark.case_id(
"NC-w22-22a004",
environment="默认离线",
given="相同输入及相同前缀但不同全文/依据",
when="调用公开审校分片/覆盖函数",
then=["相同计划稳定;全文/依据变化使旧片身份失效", "范围计算不证明模型已执行或文学合格"],
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
)
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