实现侧: - 上下文:任务范围拆分为 范围校验/范围授权;索引按可发现口径重建、索引新鲜度改对称差;依赖校验统一快照漂移说明。 - 知识方法:方法与材料读取口径统一;超限方法材料按可选省略,核对路径不再二次计费;删除无合同的读时重算。 - 任务运行:新增 context.usage/tool.denied 事件类型;连接池常驻并在装配生命周期内开关;调用结算与核对分列。 - 效果评测/审校修订/交付连载/作者经验/作品规划:凭据冻结、标定消费、导出补证、事实引文核对等收尾修复。 - 资源加载:能力正文不再夹带索引用的导航注记(该注记此前进入角色与技能的模型提示)。 - 元数据:受保护骨架与代码保护属性对齐;字段校验与内置结构口径同步。 - 基础设施:环境预检进入装配生命周期;数据库连接运行期字段不参与相等比较;索引指纹归一化 jsonb 浮点。 - 删除被替代实现:7 份旧提示词模板与空壳 资料来源 读取器。 用例侧: - 用例身份与导航元信息迁移;夹具补生命周期、同库暴露与模板封存; - 本轮定向修复:方法材料省略、事实引文、迁移回执、额度与暂停用例、慢用例超时预算等。
221 lines
7.9 KiB
Python
221 lines
7.9 KiB
Python
"""返修比较只接受类型化来源与双评委证据;自报字段不能构成证明。"""
|
|
|
|
from copy import deepcopy
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
from pydantic import ValidationError
|
|
|
|
from muse.审校修订.接口 import 解析返修比较来源, 返修比较来源, 返修比较证明
|
|
from muse.正式变更.接口 import 固定哈希
|
|
|
|
哈希 = "0" * 64
|
|
|
|
|
|
def _来源():
|
|
value = {
|
|
"version": "revision-comparison-source-v1",
|
|
"author_id": "author",
|
|
"session_id": str(uuid4()),
|
|
"round": 1,
|
|
"target": {
|
|
"work_id": "work",
|
|
"chapter_id": "chapter",
|
|
"branch_id": "main",
|
|
"original_revision": 1,
|
|
"original_document_hash": 哈希,
|
|
},
|
|
"diagnosis": {
|
|
"diagnosis_id": str(uuid4()),
|
|
"diagnosis_hash": 哈希,
|
|
"authorization_hash": 哈希,
|
|
"basis_hash": 哈希,
|
|
},
|
|
"original": {"revision": 1, "document_hash": 哈希, "text_hash": 哈希},
|
|
"candidate": {
|
|
"candidate_id": str(uuid4()),
|
|
"revision": 1,
|
|
"candidate_hash": 哈希,
|
|
"document_hash": 哈希,
|
|
"text_hash": 哈希,
|
|
},
|
|
"delivery": {
|
|
"task_id": str(uuid4()),
|
|
"attempt_id": str(uuid4()),
|
|
"call_id": "revision-call",
|
|
"output_hash": 哈希,
|
|
"model": "writer-model",
|
|
"provider": "provider",
|
|
"thinking": "high",
|
|
"config_id": "writer-config",
|
|
"config_version": "1",
|
|
"config_hash": 哈希,
|
|
"role_policy": "role-policy-v1",
|
|
"resource_release": "release-v1",
|
|
"host": "direct",
|
|
"host_version": "1",
|
|
"pricing_version": "price-v1",
|
|
"budget_account": "budget",
|
|
"dispatch_hash": 哈希,
|
|
"validation_mode": "runtime",
|
|
"validation_receipt_id": str(uuid4()),
|
|
},
|
|
"invariance": {
|
|
"mechanical_pass": True,
|
|
"checks_hash": 哈希,
|
|
"report_id": str(uuid4()),
|
|
"report_hash": 哈希,
|
|
"verdict": "passed",
|
|
},
|
|
}
|
|
value["source_hash"] = 固定哈希(value)
|
|
return value
|
|
|
|
|
|
def _证明():
|
|
decisions = [
|
|
{
|
|
"unit_id": str(uuid4()),
|
|
"task_id": str(uuid4()),
|
|
"call_id": f"judge-call-{index}",
|
|
"model": f"judge-model-{index}",
|
|
"config_hash": 哈希,
|
|
"role_policy": "role-policy-v1",
|
|
"resource_release": "release-v1",
|
|
"choice": "candidate",
|
|
"output_hash": 哈希,
|
|
"judgment_hash": 哈希,
|
|
}
|
|
for index in (1, 2)
|
|
]
|
|
return {
|
|
"version": "revision-comparison-proof-v1",
|
|
"consumer": "B06.fixed_revision_pair_v1",
|
|
"author_id": "author",
|
|
"experiment_id": str(uuid4()),
|
|
"source": _来源(),
|
|
"conditions_hash": 哈希,
|
|
"dataset_hash": 哈希,
|
|
"plan_hash": 哈希,
|
|
"report_hash": 哈希,
|
|
"outcome": "candidate",
|
|
"comparison_complete": True,
|
|
"selection": "candidate",
|
|
"reasons": ("uncalibrated_pairwise_preference",),
|
|
"decisions": decisions,
|
|
"validation_modes": ("runtime",),
|
|
"calibration_status": "uncalibrated",
|
|
"activation_status": "not_evaluated",
|
|
"automatic_adoption": False,
|
|
}
|
|
|
|
|
|
def _选段来源():
|
|
value = _来源()
|
|
value.pop("source_hash")
|
|
value.pop("diagnosis")
|
|
value.update(
|
|
version="revision-comparison-source-v2",
|
|
selection_authorization={
|
|
"authorization_hash": 哈希,
|
|
"basis_hash": 哈希,
|
|
"mode": "rewrite",
|
|
"purpose_hash": 哈希,
|
|
"selection_ids": ["1" * 64],
|
|
"selections_hash": 哈希,
|
|
"protected_range_ids": ["2" * 64],
|
|
"protected_ranges_hash": 哈希,
|
|
},
|
|
)
|
|
value["source_hash"] = 固定哈希(value)
|
|
return value
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w23-239003",
|
|
environment="离线",
|
|
given="具名作者、固定来源、隔离测试配置与真实模块存储",
|
|
when="通过实际公开入口执行并核对拒绝、状态及持久结果",
|
|
then=["来源任一关联改变而未重算哈希即拒绝"],
|
|
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
|
)
|
|
def test_来源任一关联改变而未重算哈希即拒绝__239003():
|
|
value = _来源()
|
|
source = 返修比较来源.model_validate(value)
|
|
assert source.source_hash == value["source_hash"]
|
|
assert source.model_dump(mode="json") == value
|
|
for path in ("candidate", "diagnosis", "delivery", "target"):
|
|
changed = deepcopy(value)
|
|
key = next(iter(changed[path]))
|
|
changed[path][key] = "changed"
|
|
with pytest.raises(ValidationError):
|
|
返修比较来源.model_validate(changed)
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w23-239008",
|
|
environment="离线",
|
|
given="具名作者、固定来源、隔离测试配置与真实模块存储",
|
|
when="通过实际公开入口执行并核对拒绝、状态及持久结果",
|
|
then=["选段来源显式携带授权与保护区且不接受伪诊断"],
|
|
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
|
)
|
|
def test_选段来源显式携带授权与保护区且不接受伪诊断__239008():
|
|
value = _选段来源()
|
|
source = 解析返修比较来源(value)
|
|
assert source.model_dump(mode="json") == value
|
|
assert source.selection_authorization.selection_ids == ("1" * 64,)
|
|
changed = deepcopy(value)
|
|
changed["diagnosis"] = _来源()["diagnosis"]
|
|
changed["source_hash"] = 固定哈希({k: v for k, v in changed.items() if k != "source_hash"})
|
|
with pytest.raises(ValidationError):
|
|
解析返修比较来源(changed)
|
|
|
|
proof = _证明()
|
|
proof.update(version="revision-comparison-proof-v2", source=value)
|
|
assert 返修比较证明.model_validate(proof).source.version.endswith("v2")
|
|
proof["version"] = "revision-comparison-proof-v1"
|
|
with pytest.raises(ValidationError, match="版本与来源类型"):
|
|
返修比较证明.model_validate(proof)
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w23-239004",
|
|
environment="离线",
|
|
given="具名作者、固定来源、隔离测试配置与真实模块存储",
|
|
when="通过实际公开入口执行并核对拒绝、状态及持久结果",
|
|
then=["自报模型或选择字段不能混入公共证明"],
|
|
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
|
)
|
|
@pytest.mark.parametrize("claim", ["selection_model", "pairwise_choice"])
|
|
def test_自报模型或选择字段不能混入公共证明__239004(claim):
|
|
value = _证明()
|
|
proof = 返修比较证明.model_validate(value)
|
|
assert proof.outcome == "candidate"
|
|
assert 固定哈希(proof.model_dump(mode="json")) == 固定哈希(value)
|
|
value[claim] = "claimed-success"
|
|
with pytest.raises(ValidationError):
|
|
返修比较证明.model_validate(value)
|
|
|
|
|
|
@pytest.mark.case_id(
|
|
"NC-w23-239005",
|
|
environment="离线",
|
|
given="具名作者、固定来源、隔离测试配置与真实模块存储",
|
|
when="通过实际公开入口执行并核对拒绝、状态及持久结果",
|
|
then=["缺评委重复模型或结论不一致不能声称完整"],
|
|
contract="docs/系统架构/新版设计/模块设计/B06-审校修订.md",
|
|
)
|
|
@pytest.mark.parametrize("changed", ["one_judge", "same_model", "inconsistent_choice"])
|
|
def test_缺评委重复模型或结论不一致不能声称完整__239005(changed):
|
|
value = _证明()
|
|
assert 返修比较证明.model_validate(value).comparison_complete is True
|
|
if changed == "one_judge":
|
|
value["decisions"] = value["decisions"][:1]
|
|
elif changed == "same_model":
|
|
value["decisions"][1]["model"] = value["decisions"][0]["model"]
|
|
else:
|
|
value["outcome"] = "original"
|
|
with pytest.raises(ValidationError):
|
|
返修比较证明.model_validate(value)
|