Skip to content

Commit b362e60

Browse files
authored
Refactor external review packet tests and logic
Refactor external review packet tests to use new roles and questions structure. Update artifact creation and validation logic.
1 parent c9709e3 commit b362e60

1 file changed

Lines changed: 129 additions & 98 deletions

File tree

Lines changed: 129 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,159 +1,190 @@
1-
"""Tests for Wave 8 external review packet."""
2-
3-
from __future__ import annotations
4-
51
import pytest
62

73
from ix_cognition_kernel.wave8_external_review_packet import (
4+
ExternalReviewerRole,
85
ExternalReviewPacketDecision,
9-
ReviewerRole,
106
build_external_review_packet,
11-
default_review_questions,
7+
default_wave8_review_questions,
128
)
139
from ix_cognition_kernel.wave8_replay_validator import (
1410
ReplayArtifactKind,
1511
ReplayArtifactRecord,
1612
ReplayArtifactStatus,
17-
ReplayValidationDecision,
1813
validate_replay_packet,
1914
)
2015

16+
_SHA_A = "a" * 64
17+
_SHA_B = "b" * 64
18+
_SHA_C = "c" * 64
19+
_SHA_D = "d" * 64
20+
_SHA_E = "e" * 64
21+
2122

2223
def _artifact(
2324
artifact_id: str,
2425
kind: ReplayArtifactKind,
26+
source_fingerprint: str,
2527
status: ReplayArtifactStatus = ReplayArtifactStatus.REPLAYABLE,
2628
) -> ReplayArtifactRecord:
2729
return ReplayArtifactRecord(
2830
artifact_id=artifact_id,
2931
kind=kind,
30-
source_fingerprint="a" * 64,
32+
source_fingerprint=source_fingerprint,
3133
status=status,
32-
evidence_ids=(f"evidence-{artifact_id}",),
33-
summary=f"{kind.value} is bounded review evidence.",
34+
evidence_ids=(f"{artifact_id}:evidence",),
35+
summary=f"{artifact_id} is available for bounded external review.",
3436
)
3537

3638

37-
def _ready_replay_report() -> object:
38-
return validate_replay_packet(
39-
report_id="replay-report-review",
40-
purpose="Validate bounded replay evidence for review.",
41-
artifacts=(
42-
_artifact("artifact-episode", ReplayArtifactKind.EPISODE_RUN),
43-
_artifact("artifact-transfer", ReplayArtifactKind.TRANSFER_REPORT),
44-
_artifact("artifact-skill", ReplayArtifactKind.SKILL_VALIDATION),
45-
_artifact("artifact-world", ReplayArtifactKind.WORLD_MODEL_SNAPSHOT),
46-
_artifact("artifact-baseline", ReplayArtifactKind.BASELINE_COMPARISON),
47-
),
39+
def _artifacts():
40+
return (
41+
_artifact("artifact-episode", ReplayArtifactKind.EPISODE_RUN, _SHA_A),
42+
_artifact("artifact-transfer", ReplayArtifactKind.TRANSFER_REPORT, _SHA_B),
43+
_artifact("artifact-skill", ReplayArtifactKind.SKILL_VALIDATION, _SHA_C),
44+
_artifact("artifact-world", ReplayArtifactKind.WORLD_MODEL_SNAPSHOT, _SHA_D),
45+
_artifact("artifact-baseline", ReplayArtifactKind.BASELINE_COMPARISON, _SHA_E),
4846
)
4947

5048

51-
def test_default_review_questions_cover_core_roles() -> None:
52-
questions = default_review_questions(evidence_prefix="review-evidence")
49+
def _replay_report():
50+
return validate_replay_packet(
51+
report_id="replay-report-ready",
52+
purpose="Validate bounded Wave 8 replay packet for human review.",
53+
artifacts=_artifacts(),
54+
)
5355

54-
roles = {question.reviewer_role for question in questions}
55-
assert ReviewerRole.EXTERNAL_RESEARCHER in roles
56-
assert ReviewerRole.SAFETY_REVIEWER in roles
57-
assert ReviewerRole.HUMAN_AUTHORITY in roles
58-
assert all(len(question.fingerprint()) == 64 for question in questions)
5956

57+
def _roles():
58+
return (
59+
ExternalReviewerRole.HUMAN_AUTHORITY,
60+
ExternalReviewerRole.INDEPENDENT_REPLAYER,
61+
ExternalReviewerRole.SAFETY_REVIEWER,
62+
ExternalReviewerRole.BASELINE_REVIEWER,
63+
ExternalReviewerRole.TRANSFER_REVIEWER,
64+
)
6065

61-
def test_external_review_packet_ready_when_replay_and_questions_are_ready() -> None:
66+
67+
def test_external_review_packet_ready_with_replay_artifacts_roles_and_questions() -> (
68+
None
69+
):
6270
packet = build_external_review_packet(
63-
packet_id="packet-ready",
64-
purpose="Provide bounded replay evidence to external reviewers.",
65-
claim_boundary="Review packet only; no certification.",
66-
replay_report=_ready_replay_report(),
67-
review_questions=default_review_questions(evidence_prefix="review-evidence"),
71+
packet_id="external-review-packet-1",
72+
purpose="Package bounded recursive learning evidence for external review.",
73+
claim_boundary="Bounded recursive learning evidence only; no certification.",
74+
replay_report=_replay_report(),
75+
reviewer_roles=_roles(),
76+
questions=default_wave8_review_questions(),
6877
evidence_ids=("packet-evidence-1",),
6978
)
7079

71-
assert packet.decision is ExternalReviewPacketDecision.READY_FOR_EXTERNAL_REVIEW
7280
assert packet.ready
73-
assert packet.question_count == 4
74-
75-
76-
def test_external_review_packet_needs_replay_when_report_is_not_ready() -> None:
77-
report = validate_replay_packet(
78-
report_id="replay-report-not-ready",
79-
purpose="Validate bounded replay evidence for review.",
80-
artifacts=(
81-
_artifact(
82-
"artifact-episode",
83-
ReplayArtifactKind.EPISODE_RUN,
84-
ReplayArtifactStatus.NEEDS_MEASURED_RESULT,
85-
),
86-
),
81+
assert packet.decision is ExternalReviewPacketDecision.READY_FOR_EXTERNAL_REVIEW
82+
assert packet.findings == ()
83+
assert "episode-run" in packet.artifact_kinds_under_review
84+
assert "baseline-comparison" in packet.artifact_kinds_under_review
85+
assert packet.fingerprint() == packet.fingerprint()
86+
assert len(packet.fingerprint()) == 64
87+
88+
89+
def test_external_review_packet_requires_ready_replay_report() -> None:
90+
replay_report = validate_replay_packet(
91+
report_id="replay-report-missing",
92+
purpose="Validate incomplete replay packet.",
93+
artifacts=_artifacts()[:2],
8794
)
8895
packet = build_external_review_packet(
89-
packet_id="packet-not-ready",
90-
purpose="Provide bounded replay evidence to external reviewers.",
91-
claim_boundary="Review packet only; no certification.",
92-
replay_report=report,
93-
review_questions=default_review_questions(evidence_prefix="review-evidence"),
96+
packet_id="external-review-packet-missing-replay",
97+
purpose="Package bounded recursive learning evidence for external review.",
98+
claim_boundary="Bounded recursive learning evidence only; no certification.",
99+
replay_report=replay_report,
100+
reviewer_roles=_roles(),
101+
questions=default_wave8_review_questions(),
94102
evidence_ids=("packet-evidence-1",),
95103
)
96104

105+
assert not packet.ready
97106
assert packet.decision is ExternalReviewPacketDecision.NEEDS_REPLAY_VALIDATION
98-
assert "replay-report-not-ready" in packet.findings[0]
107+
assert any(
108+
finding.startswith("replay-report-not-ready") for finding in packet.findings
109+
)
110+
111+
112+
def test_external_review_packet_requires_all_reviewer_roles() -> None:
113+
packet = build_external_review_packet(
114+
packet_id="external-review-packet-missing-roles",
115+
purpose="Package bounded recursive learning evidence for external review.",
116+
claim_boundary="Bounded recursive learning evidence only; no certification.",
117+
replay_report=_replay_report(),
118+
reviewer_roles=(
119+
ExternalReviewerRole.HUMAN_AUTHORITY,
120+
ExternalReviewerRole.INDEPENDENT_REPLAYER,
121+
),
122+
questions=default_wave8_review_questions(),
123+
evidence_ids=("packet-evidence-1",),
124+
)
125+
126+
assert not packet.ready
127+
assert packet.decision is ExternalReviewPacketDecision.NEEDS_REQUIRED_REVIEWERS
128+
assert any(
129+
finding.startswith("missing-reviewer-roles") for finding in packet.findings
130+
)
99131

100132

101-
def test_external_review_packet_needs_questions() -> None:
133+
def test_external_review_packet_requires_review_questions() -> None:
102134
packet = build_external_review_packet(
103-
packet_id="packet-no-questions",
104-
purpose="Provide bounded replay evidence to external reviewers.",
105-
claim_boundary="Review packet only; no certification.",
106-
replay_report=_ready_replay_report(),
107-
review_questions=(),
135+
packet_id="external-review-packet-missing-questions",
136+
purpose="Package bounded recursive learning evidence for external review.",
137+
claim_boundary="Bounded recursive learning evidence only; no certification.",
138+
replay_report=_replay_report(),
139+
reviewer_roles=_roles(),
140+
questions=(),
108141
evidence_ids=("packet-evidence-1",),
109142
)
110143

144+
assert not packet.ready
111145
assert packet.decision is ExternalReviewPacketDecision.NEEDS_REVIEW_QUESTIONS
112146
assert "missing-review-questions" in packet.findings
113147

114148

115-
def test_external_review_packet_blocks_overclaiming_claim_boundary() -> None:
116-
with pytest.raises(ValueError, match="blocked overclaiming"):
149+
def test_external_review_packet_rejects_duplicate_reviewer_roles() -> None:
150+
with pytest.raises(ValueError, match="Duplicate reviewer role"):
117151
build_external_review_packet(
118-
packet_id="packet-overclaim",
119-
purpose="Provide bounded replay evidence to external reviewers.",
120-
claim_boundary="Certifies AGI.",
121-
replay_report=_ready_replay_report(),
122-
review_questions=default_review_questions(evidence_prefix="review-evidence"),
152+
packet_id="external-review-packet-duplicate-role",
153+
purpose="Package bounded recursive learning evidence for external review.",
154+
claim_boundary=(
155+
"Bounded recursive learning evidence only; no certification."
156+
),
157+
replay_report=_replay_report(),
158+
reviewer_roles=(
159+
ExternalReviewerRole.HUMAN_AUTHORITY,
160+
ExternalReviewerRole.HUMAN_AUTHORITY,
161+
),
162+
questions=default_wave8_review_questions(),
123163
evidence_ids=("packet-evidence-1",),
124164
)
125165

126166

127-
def test_external_review_packet_blocks_when_review_question_overclaims() -> None:
128-
from ix_cognition_kernel.wave8_external_review_packet import ExternalReviewQuestion
129-
167+
def test_external_review_packet_rejects_overclaiming_purpose_or_boundary() -> None:
130168
with pytest.raises(ValueError, match="blocked overclaiming"):
131-
ExternalReviewQuestion(
132-
question_id="question-overclaim",
133-
reviewer_role=ReviewerRole.EXTERNAL_RESEARCHER,
134-
prompt="Does this certify AGI?",
135-
required_artifact_kinds=(ReplayArtifactKind.EPISODE_RUN,),
136-
evidence_ids=("question-evidence-1",),
169+
build_external_review_packet(
170+
packet_id="external-review-packet-overclaim-purpose",
171+
purpose="This proves AGI.",
172+
claim_boundary=(
173+
"Bounded recursive learning evidence only; no certification."
174+
),
175+
replay_report=_replay_report(),
176+
reviewer_roles=_roles(),
177+
questions=default_wave8_review_questions(),
178+
evidence_ids=("packet-evidence-1",),
137179
)
138180

139-
140-
def test_external_review_packet_fingerprint_is_deterministic() -> None:
141-
packet = build_external_review_packet(
142-
packet_id="packet-stable",
143-
purpose="Provide bounded replay evidence to external reviewers.",
144-
claim_boundary="Review packet only; no certification.",
145-
replay_report=_ready_replay_report(),
146-
review_questions=default_review_questions(evidence_prefix="review-evidence"),
147-
evidence_ids=("packet-evidence-1",),
148-
)
149-
same = build_external_review_packet(
150-
packet_id="packet-stable",
151-
purpose="Provide bounded replay evidence to external reviewers.",
152-
claim_boundary="Review packet only; no certification.",
153-
replay_report=_ready_replay_report(),
154-
review_questions=default_review_questions(evidence_prefix="review-evidence"),
155-
evidence_ids=("packet-evidence-1",),
156-
)
157-
158-
assert packet.fingerprint() == same.fingerprint()
159-
assert packet.replay_report.decision is ReplayValidationDecision.READY_FOR_REVIEW
181+
with pytest.raises(ValueError, match="blocked overclaiming"):
182+
build_external_review_packet(
183+
packet_id="external-review-packet-overclaim-boundary",
184+
purpose="Package bounded recursive learning evidence for external review.",
185+
claim_boundary="This is an artificial general intelligence certification.",
186+
replay_report=_replay_report(),
187+
reviewer_roles=_roles(),
188+
questions=default_wave8_review_questions(),
189+
evidence_ids=("packet-evidence-1",),
190+
)

0 commit comments

Comments
 (0)