docs: pick up proton rclone runtime gate repair

This commit is contained in:
Svrnty
2026-06-14 11:09:17 -04:00
parent 5d77eaffc9
commit f127076665
6 changed files with 72 additions and 39 deletions
+30 -12
View File
@@ -124,8 +124,8 @@ REQUIRED_RUNTIME_SURFACES = {
}
REQUIRED_RUNTIME_GAPS = {
"proton-email-gate-exited",
"proton-contacts-gate-exited",
"proton-runtime-gate-repair-source-lock-refresh",
"proton-rclone-service-posture-disabled",
"stale-protonmail-bridge-container",
"proton-bridge-systemd-auto-restart",
"proton-rclone-child-unregistered",
@@ -201,6 +201,7 @@ def main() -> int:
"PACR-008",
"PACR-010",
"PACR-011",
"PACR-012",
"status: candidate",
"owner: jp",
]:
@@ -364,15 +365,27 @@ def main() -> int:
candidate = proton.get("child_workspace_candidate", {})
expected_candidate = {
"path": "../proton-rclone",
"commit": "c49f85691232c317d694725445ec3acbf127c72b",
"commit": "c740d1ee6acfdb1d62b56cb38f2121a26e07ae1e",
"validator_command": "python3 tools/validate_proton_rclone_child.py",
"validator_result_observed": "ok",
"core_registration_candidate_packet": "../proton-rclone/.sot/08-OUTPUTS/proton-rclone-core-registration-candidate-packet.json",
"live_redacted_health_proof": "../proton-rclone/.sot/08-OUTPUTS/proton-rclone-live-redacted-health.json",
"runtime_gate_repair_proof": "../proton-rclone/.sot/08-OUTPUTS/proton-rclone-runtime-gate-repair-proof.json",
"current_runtime_state_reconciliation": "../proton-rclone/.sot/08-OUTPUTS/proton-rclone-current-runtime-state-reconciliation.json",
}
for key, expected in expected_candidate.items():
if candidate.get(key) != expected:
errors.append(f"proton_rclone_child_candidate_mismatch:{key}")
expected_hashes = {
"readonly_contract": "47bcbdf69152c709c728cca725a88c92de418280705357a57ea658ca9b24d607",
"live_redacted_health": "26ce58fe5ca74a66342dd3b28e223227eac74f6b91ee18a7cdd6acfae720579c",
"runtime_gate_repair_proof": "b200fa1f446165185821f6c3b51825b517b00777d502d30ce90665cfee1cd6a1",
"current_runtime_state_reconciliation": "0bfeb8f5d0977f43ffd04c468d445cf22fbeca8578d59fb38e014094a5e4cd07",
}
hashes = candidate.get("source_hashes", {})
for key, expected in expected_hashes.items():
if hashes.get(key) != expected:
errors.append(f"proton_rclone_child_hash_mismatch:{key}")
for key in ["core_registration_claimed", "runtime_readiness_claimed"]:
if candidate.get(key) is not False:
errors.append(f"proton_rclone_child_candidate_overclaim:{key}")
@@ -449,10 +462,10 @@ def main() -> int:
for name in ["sdo-calendar-gate", "sdo-email-gate", "sdo-contacts-gate"]:
if name not in docker:
errors.append(f"proton_rclone_docker_route_missing:{name}")
if docker.get("sdo-email-gate") != "not-up":
errors.append("proton_rclone_email_gate_state_not_captured")
if docker.get("sdo-contacts-gate") != "not-up":
errors.append("proton_rclone_contacts_gate_state_not_captured")
if docker.get("sdo-email-gate") != "up":
errors.append("proton_rclone_email_gate_state_not_up")
if docker.get("sdo-contacts-gate") != "up":
errors.append("proton_rclone_contacts_gate_state_not_up")
units = {item.get("name"): item for item in inventory.get("systemd_user_units", [])}
if units.get("proton-bridge.service", {}).get("observed_state") != "activating-auto-restart":
errors.append("proton_rclone_proton_bridge_gap_not_captured")
@@ -508,16 +521,19 @@ def main() -> int:
remaining_gates = proton.get("remaining_gates", {})
if remaining_gates.get("child_workspace_candidate") != "complete-child-local":
errors.append("proton_rclone_child_candidate_gate_missing")
if remaining_gates.get("email_gate_repair") != "complete-child-local":
errors.append("proton_rclone_email_gate_repair_not_complete")
if remaining_gates.get("contacts_gate_repair") != "complete-child-local":
errors.append("proton_rclone_contacts_gate_repair_not_complete")
for gate in [
"registered_child_workspace",
"email_gate_repair",
"contacts_gate_repair",
"systemd_bridge_convergence",
"secondbrain_durable_apply",
"seed_package_pickup",
]:
if remaining_gates.get(gate) != "blocked-follow-up":
errors.append(f"proton_rclone_remaining_gate_missing:{gate}")
if remaining_gates.get("seed_package_pickup") != "blocked-after-runtime-repair-source-lock-refresh":
errors.append("proton_rclone_seed_pickup_gate_invalid")
memory_route = load_json("docs/contracts/personal-agent-secondbrain-proposal-route.json", errors)
if memory_route:
@@ -962,9 +978,11 @@ def main() -> int:
errors.append("runtime_snapshot_governed_apply_route_not_defined")
if remaining_gates.get("proton_rclone_child_candidate") != "complete-child-local":
errors.append("runtime_snapshot_child_candidate_gate_missing")
if remaining_gates.get("proton_email_gate_repair") != "complete-child-local":
errors.append("runtime_snapshot_email_gate_repair_not_complete")
if remaining_gates.get("proton_contacts_gate_repair") != "complete-child-local":
errors.append("runtime_snapshot_contacts_gate_repair_not_complete")
for gate in [
"proton_email_gate_repair",
"proton_contacts_gate_repair",
"proton_rclone_child_registration",
"secondbrain_durable_apply",
"desktop_adapter_exposure",