fix: fail closed on missing DB fingerprints

This commit is contained in:
twentyOne2x 2026-07-15 00:06:33 +02:00
parent 2dfb608f51
commit c2eebb9654
3 changed files with 12 additions and 4 deletions

View file

@ -294,6 +294,11 @@ def build_turn_manifest(
database_tool_binding = _database_tool_binding(result) database_tool_binding = _database_tool_binding(result)
fingerprint_before = db_fingerprint_before or {} fingerprint_before = db_fingerprint_before or {}
fingerprint_after = db_fingerprint_after or {} fingerprint_after = db_fingerprint_after or {}
fingerprint_unchanged = bool(
fingerprint_before.get("fingerprint_sha256")
and fingerprint_after.get("fingerprint_sha256")
and fingerprint_before.get("fingerprint_sha256") == fingerprint_after.get("fingerprint_sha256")
)
missing = _required_missing( missing = _required_missing(
behavior=behavior_manifest, behavior=behavior_manifest,
calls=calls, calls=calls,
@ -356,8 +361,7 @@ def build_turn_manifest(
"database_tool_binding": database_tool_binding, "database_tool_binding": database_tool_binding,
"fingerprint_before": fingerprint_before, "fingerprint_before": fingerprint_before,
"fingerprint_after": fingerprint_after, "fingerprint_after": fingerprint_after,
"fingerprint_unchanged": fingerprint_before.get("fingerprint_sha256") "fingerprint_unchanged": fingerprint_unchanged,
== fingerprint_after.get("fingerprint_sha256"),
"suite_counts_before_sha256": canonical_sha256(db_counts_before or {}), "suite_counts_before_sha256": canonical_sha256(db_counts_before or {}),
"suite_counts_after_sha256": canonical_sha256(db_counts_after or {}), "suite_counts_after_sha256": canonical_sha256(db_counts_after or {}),
"suite_counts_changed": db_counts_changed, "suite_counts_changed": db_counts_changed,

View file

@ -617,8 +617,11 @@ async def run_suite():
report["db_counts_after"] = after_counts report["db_counts_after"] = after_counts
report["db_counts_changed"] = after_counts != before_counts report["db_counts_changed"] = after_counts != before_counts
report["db_fingerprint_after"] = after_fingerprint report["db_fingerprint_after"] = after_fingerprint
report["db_fingerprint_unchanged"] = ( report["db_fingerprint_unchanged"] = bool(
before_fingerprint.get("fingerprint_sha256") == after_fingerprint.get("fingerprint_sha256") before_fingerprint.get("status") == "ok"
and after_fingerprint.get("status") == "ok"
and before_fingerprint.get("fingerprint_sha256")
== after_fingerprint.get("fingerprint_sha256")
) )
report["live_behavior_manifest_after"] = behavior_after report["live_behavior_manifest_after"] = behavior_after
report["changed_live_profile"] = behavior_before["behavior_sha256"] != behavior_after["behavior_sha256"] report["changed_live_profile"] = behavior_before["behavior_sha256"] != behavior_after["behavior_sha256"]

View file

@ -168,3 +168,4 @@ def test_database_question_requires_a_stable_full_database_fingerprint() -> None
assert value["attribution"]["status"] == "incomplete" assert value["attribution"]["status"] == "incomplete"
assert "database_fingerprint_before" in value["attribution"]["missing_required_bindings"] assert "database_fingerprint_before" in value["attribution"]["missing_required_bindings"]
assert "database_fingerprint_after" in value["attribution"]["missing_required_bindings"] assert "database_fingerprint_after" in value["attribution"]["missing_required_bindings"]
assert value["canonical_database"]["fingerprint_unchanged"] is False