Answer flex-auth B3: the emitter is the section 4 source, not the archive
AUDIT-IN-0005. flex-auth produces the decision record, declares no §11 emission guarantee, and declined to take the reading that moves the obligation to audit-core. audit-core declines it too, on its own authority: class, cadence and detection surface are properties of emitting; audit-core cannot detect non-production; the obligations already sit on each sender registration; archive-as-source would make §11's check vacuous; and no access-engine sender is registered at all. Binds audit-core, does not rule §11 — gate-house still owns that, so flex-auth's G2 stays open. Reflexive half: audit-core's own chain-head attestation emission is now declared in layer.yaml rather than only in docs/integrity.md prose, and asserted against the CronJob and the contract by test. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
This commit is contained in:
parent
5dc70afe64
commit
40fc7d694c
5 changed files with 338 additions and 1 deletions
|
|
@ -100,3 +100,49 @@ def test_the_receiver_has_no_api_server_egress():
|
|||
assert "443" in attest
|
||||
assert "6443" not in receiver
|
||||
assert "443" not in receiver
|
||||
|
||||
|
||||
# AUDIT-IN-0005 — §11's emission-guarantee check, made mechanical for audit-core's
|
||||
# own declaration. The ruling itself lives in docs/section-4-source-of-evidence.md;
|
||||
# these assert that the declaration keeps saying what the ruling says.
|
||||
|
||||
|
||||
def test_audit_core_declines_the_source_of_evidence_role():
|
||||
"""The archive is not the source. AUDIT-IN-0001, AUDIT-IN-0005."""
|
||||
assert LAYER["source_of_evidence"] is False
|
||||
note = LAYER["source_of_evidence_note"].lower()
|
||||
assert "non-production" in note
|
||||
assert "sender" in note
|
||||
|
||||
|
||||
def test_the_attestation_emission_is_declared_and_not_rate_monitored():
|
||||
"""A rare load-bearing class may not rest on rate monitoring (§11)."""
|
||||
rows = {row["id"]: row for row in LAYER["emission_guarantee"]}
|
||||
attestation = rows["chain-head-attestation"]
|
||||
assert attestation["class"] == "load-bearing"
|
||||
assert attestation["rarity"] == "rare"
|
||||
assert attestation["rate_monitoring"] == "forbidden"
|
||||
# All three things §11 asks a source to state.
|
||||
assert attestation["cadence"]["interval"] == "daily"
|
||||
assert attestation["detection_surface"]["form"] == "freshness-window"
|
||||
|
||||
|
||||
def test_the_declared_cadence_matches_the_deployed_schedule():
|
||||
"""Declared against the manifest, so drift fails here rather than at review."""
|
||||
cronjob = (ROOT / "deploy" / "attest-cronjob.yaml").read_text()
|
||||
declared = next(
|
||||
row for row in LAYER["emission_guarantee"]
|
||||
if row["id"] == "chain-head-attestation"
|
||||
)["cadence"]
|
||||
assert declared["schedule"] in cronjob
|
||||
assert declared["published_to"].split()[-1] in cronjob
|
||||
|
||||
|
||||
def test_the_declared_freshness_window_matches_the_contract():
|
||||
surface = next(
|
||||
row for row in LAYER["emission_guarantee"]
|
||||
if row["id"] == "chain-head-attestation"
|
||||
)["detection_surface"]
|
||||
assert surface["window_hours"] == 168
|
||||
contract = (ROOT / surface["contract"]).read_text()
|
||||
assert "168 hours" in contract
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue