Operations
This page is the operator entry point for runtime procedures in
jhf-openclaw-env. It intentionally stays concise and points to the canonical
runbooks and contracts.
Core Runtime Verify Paths
Fast repository checks
python infrastructure/validate_environment_contracts.pypython infrastructure/validate_module_features_registry.pypython infrastructure/validate_openclaw_runtime_config.pypython infrastructure/validate_execution_track.pybash scripts/scan_and_fix.sh --dry-run --max-issues 1
Host runtime checks
bash scripts/host_preflight_openclaw_env.shbash scripts/host_post_change_verify.shbash scripts/host_post_reboot_verify.shbash scripts/host_post_dockerd_reconcile_verify.sh
Guardrail/recovery checks
bash scripts/host_openclaw_runtime_guardrail.shbash scripts/host_reconcile_core_after_dockerd.shbash scripts/host_reconcile_jhf_tools_restart_safety.shbash scripts/host_tune_low_load_memory_limits.sh [--apply]bash scripts/host_verify_shared_host_disk_budget.shbash scripts/host_reclaim_shared_host_disk_pressure.sh [--apply] [--host HOST] [--user USER]bash scripts/host_reclaim_shared_host_disk_pressure.sh --apply --builder-cache-onlyonly when the documented owner decision permits BuildKit-cache cleanup and the read-only preflight shows it is the sole breached reclaim class (--applyomitted is strictly observational and fails closed if the cleanup guard detects stale diagnostics).bash scripts/host_reclaim_shared_host_swap_pressure.sh [--apply] [--host HOST] [--user USER]bash scripts/verify_post_dockerd_core_reconcile_30m.shbash scripts/host_reconcile_gitea_org_runners.shbash scripts/host_reconcile_heddle_checkout_main.sh --allow-dirty-resetbash scripts/host_verify_heddle_checkout_validator_bundle.shbash scripts/host_reconcile_warp_checkout_main.sh --allow-dirty-resetbash scripts/host_verify_warp_production_roster.shbash scripts/host_reconcile_pattern_checkout_main.sh --allow-dirty-resetreconciles the dedicated/home/administrator/jhf-patternowner checkout backup-first to exact Giteamain; read-only mode fails closed on ignored checkout state, while the explicit allow flag archives tracked, untracked, and ignored state before bounded cleanup. It does not deploy or mutate a runtime.
Windows client checks
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_verify_helpifyr_client_readiness.ps1aggregates Windows DNS, Windows TLS, and Python/OpenSSL trust evidence for the local SSO client lanepowershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_sync_helpifyr_client_dns.ps1 -PlanOnlypowershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_verify_helpifyr_client_dns.ps1powershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_sync_helpifyr_client_dns.ps1powershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_verify_helpifyr_client_tls.ps1powershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_sync_helpifyr_client_trust.ps1powershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_clear_helpifyr_browser_state.ps1powershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_clear_helpifyr_browser_state.ps1 -Applypython scripts/verify_helpifyr_schannel_revocation_chain.py --json
Auth and Access Runtime Checks
- OSS SSO Status Matrix (
docs/OSS_SSO_STATUS_MATRIX.md) bash scripts/host_verify_erp_identity_lifecycle_boundary.shbash scripts/host_verify_erp_identity_surface_fabric_parity.shbash scripts/host_verify_sso_v4_env_auth_runtime.shbash scripts/host_materialize_gitea_ci_oidc_sso.shbash scripts/host_verify_proxy_auth_topology.shbash scripts/host_verify_local_admin_quarantine.shbash scripts/host_verify_future_module_runtime_auth_onboarding.shbash scripts/host_verify_helpifyr_tls_client_trust.shpowershell -NoProfile -ExecutionPolicy Bypass -File scripts/windows_verify_helpifyr_client_readiness.ps1python scripts/verify_helpifyr_python_tls_client_trust.py --jsonpython scripts/verify_helpifyr_schannel_revocation_chain.py --jsonpython scripts/verify_helpifyr_client_trust_contract.pypython scripts/verify_erp_identity_surface_fabric_parity.pypython scripts/verify_oss_sso_status_matrix.pypython scripts/verify_helpifyr_sso_https_surface_inventory.pypython scripts/verify_helpifyr_sso_https_surface_inventory.py --check-livepython scripts/verify_helpifyr_sso_https_surface_inventory.py --check-live --ssh-target <internal-runtime-redacted><internal-runtime-redacted>python scripts/capture_issue2114_asterisk_grafana_workstation_truth.py --reported-browser-failurefor the bounded workstation-vs-Host172 contradiction lane when Asterisk or Grafana browser SSO is reported broken while the repo-owned launcher and host-managed E2E paths may already be green
Runtime Mutation Rule
For runtime-affecting changes, always capture:
- Pre-change snapshot/evidence
- Mutation/apply evidence
- Post-change verify evidence
- Post-push live verify evidence
Canonical evidence ledger:
LIVE_OPERATIONS_LOG.md (docs/LIVE_OPERATIONS_LOG.md)
Credential Reminder
- Canonical local operator credential source:
~/.config/helpifyr/operator.env - Includes:
GITEA_TOKEN- host SSH credentials (
OPENCLAW_HOST,OPENCLAW_HOST_USER,OPENCLAW_HOST_PW) - host sudo password (
OPENCLAW_HOST_SUDO_PW)
- Sanitized verify:
python scripts/operator_env.py --json --keys GITEA_TOKEN,OPENCLAW_HOST,OPENCLAW_HOST_USER,OPENCLAW_HOST_SUDO_PW - Canonical Host172 operator-env staging lane for admitted managed keys:
bash scripts/host_stage_operator_env_keys.sh --keys GITEA_TOKEN - Canonical bounded <internal-runtime-redacted> Gitea Helpifyr Identity materializer:
bash scripts/host_materialize_gitea_ci_oidc_sso.sh- hardening policy inputs are env-driven:
GITEA_CI_OIDC_GROUP_CLAIM_NAME,GITEA_CI_OIDC_REQUIRED_CLAIM_NAME,GITEA_CI_OIDC_REQUIRED_CLAIM_VALUE,GITEA_CI_OIDC_ADMIN_GROUP,GITEA_CI_OIDC_RESTRICTED_GROUP,GITEA_CI_OIDC_GROUP_TEAM_MAP,GITEA_CI_OIDC_GROUP_TEAM_MAP_REMOVAL
- hardening policy inputs are env-driven:
- Canonical bounded <internal-runtime-redacted> Gitea owner-runtime policy verifier:
bash scripts/host_verify_gitea_ci_oidc_source_ci_plane.sh- supports explicit expected policy readback for the same claim/team fields
- Canonical bounded Lantern HITL runtime auth materializer:
bash scripts/host_materialize_lantern_runtime_auth_env.sh - Canonical bounded Plan Studio Phase-1 owner-binding materializer (requires
an owner-approved Keystore source and fails closed when it is absent):
bash scripts/host_materialize_plan_studio_owner_bindings.sh - Canonical bounded Shuttle Plan Studio C8 owner-token materializer (requires
the owner-approved
jhf-keystore#289source and recreates only the C8 service):bash scripts/host_materialize_plan_studio_shuttle_owner_token.sh - Canonical bounded Lantern HITL runtime auth verifier:
python scripts/verify_issue1637_lantern_runtime_auth_materialization.py - Canonical bounded Lantern Customer360 MCP admission verifier:
python scripts/verify_issue1693_lantern_customer360_mcp_admission.py - Canonical bounded Weft Host172 live-Graph env sync lane:
bash scripts/host_sync_weft_m365_live_graph_env.sh - Canonical bounded Weft Host172 live-Graph env verifier:
python scripts/verify_issue1282_weft_m365_live_graph_env.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud selfhost OIDC env sync lane:
bash scripts/host_sync_weft_nextcloud_oidc_env.sh - Canonical bounded Weft Host172 Nextcloud selfhost OIDC env verifier:
python scripts/verify_issue1313_weft_nextcloud_oidc_env.py --allow-blocked - Canonical bounded Host172 Weft checkout dirty-state recovery lane:
bash scripts/host_resolve_issue1317_weft_checkout_dirty.sh - Canonical bounded Host172 Weft checkout dirty-state verifier:
python scripts/verify_issue1317_weft_checkout_dirty.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud public OIDC launcher trust sync lane:
bash scripts/host_sync_weft_nextcloud_oidc_trust.sh - Canonical bounded Weft Host172 Nextcloud public OIDC launcher trust verifier:
python scripts/verify_issue1318_weft_nextcloud_oidc_launcher_trust.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud OIDC callback-landing narrowing lane:
bash scripts/host_sync_weft_nextcloud_oidc_callback_landing.sh - Canonical bounded Weft Host172 Nextcloud OIDC callback-landing verifier:
python scripts/verify_issue1328_weft_nextcloud_oidc_callback_landing.py --allow-blocked - Canonical Host172 Weft checkout reconcile lane for bounded selfhost Collabora materialization:
bash scripts/host_reconcile_weft_checkout_main.sh --allow-dirty-reset- admitted cleanup scope inside this lane is limited to Weft-owned
compose/runtime-data*residue after backup capture - unrelated dirty state in the Host172 Weft checkout remains fail-closed even with
--allow-dirty-reset
- admitted cleanup scope inside this lane is limited to Weft-owned
- Canonical bounded Weft Host172 selfhost Collabora materialization lane:
bash scripts/host_materialize_issue1293_weft_collabora_runtime.sh - Canonical bounded Weft Host172 selfhost Collabora verifier:
python scripts/verify_issue1293_weft_collabora_runtime.py --allow-blocked - Canonical bounded Weft Host172 selfhost mail env sync lane:
bash scripts/host_sync_weft_selfhost_mail_env.sh - Canonical bounded Weft Host172 selfhost mail materialization lane:
bash scripts/host_materialize_issue1315_weft_selfhost_mail_runtime.sh - Canonical bounded Weft Host172 selfhost mail verifier:
python scripts/verify_issue1315_weft_selfhost_mail_runtime.py --allow-blocked - Canonical bounded Weft Host172 selfhost mail backup/restore drill materializer:
bash scripts/host_materialize_issue1358_weft_selfhost_mail_backup_restore.sh - Canonical bounded Weft Host172 selfhost mail backup/restore drill verifier:
python scripts/verify_issue1358_weft_selfhost_mail_backup_restore.py --allow-blocked - Canonical bounded Weft Host172 Stalwart backup/freshness materializer:
bash scripts/host_materialize_issue1565_weft_stalwart_backup_freshness.sh - Canonical Host172 dangling-Stalwart-bind forensic/reconcile lane:
bash scripts/host_reconcile_issue1864_weft_stalwart_data_bind.sh- default execution is read-only and reports
human_approval_required - a restore requires an explicit verified artifact and
--apply --human-approved-restore; it must never create or overwrite an empty data root
- default execution is read-only and reports
- Canonical bounded Weft Host172 Stalwart backup/freshness verifier:
python scripts/verify_issue1565_weft_stalwart_backup_freshness.py --allow-blocked - Canonical bounded Weft Host172 Stalwart restore drill from canonical backup materializer:
bash scripts/host_materialize_issue1572_weft_stalwart_restore_drill.sh - Canonical bounded Weft Host172 Stalwart restore drill from canonical backup verifier:
python scripts/verify_issue1572_weft_stalwart_restore_drill.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud Mail TLS alignment materializer:
bash scripts/host_materialize_issue1361_weft_nextcloud_mail_tls_alignment.sh - Canonical bounded Weft Host172 Nextcloud Mail TLS alignment verifier:
python scripts/verify_issue1361_weft_nextcloud_mail_tls_alignment.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud Mail authenticated-send materializer:
bash scripts/host_materialize_issue1363_weft_nextcloud_mail_authenticated_send.sh - Canonical bounded Weft Host172 Nextcloud Mail authenticated-send verifier:
python scripts/verify_issue1363_weft_nextcloud_mail_authenticated_send.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud Calendar/Contacts materialization lane:
bash scripts/host_materialize_issue1338_weft_calendar_contacts_runtime.sh - Canonical bounded Weft Host172 Nextcloud Calendar/Contacts verifier:
python scripts/verify_issue1338_weft_calendar_contacts_runtime.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud public ingress restore lane:
bash scripts/host_materialize_issue1495_weft_nextcloud_public_ingress.sh - Canonical bounded Weft Host172 Nextcloud public ingress restore verifier:
python scripts/verify_issue1495_weft_nextcloud_public_ingress.py --allow-blocked - Canonical bounded Weft Host172 runtime-state bind reconcile lane:
bash scripts/host_materialize_issue1581_weft_runtime_state_bind.sh - Canonical bounded Weft Host172 runtime-state bind reconcile verifier:
python scripts/verify_issue1581_weft_runtime_state_bind.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud Mail TLS/diagnose restore lane:
bash scripts/host_materialize_issue1499_weft_nextcloud_mail_tls_diagnose_restore.sh - Canonical bounded Weft Host172 Nextcloud Mail TLS/diagnose restore verifier:
python scripts/verify_issue1499_weft_nextcloud_mail_tls_diagnose_restore.py --allow-blocked - Canonical bounded Weft Host172 Nextcloud Mail auth-posture restore lane:
bash scripts/host_materialize_issue1500_weft_nextcloud_mail_auth_posture.sh - Canonical bounded Weft Host172 Nextcloud Mail auth-posture restore verifier:
python scripts/verify_issue1500_weft_nextcloud_mail_auth_posture.py --allow-blocked - Canonical bounded Weft Host172 Stalwart live-auth reload lane:
bash scripts/host_materialize_issue1514_weft_stalwart_live_auth_reload.sh - Canonical bounded Weft Host172 Stalwart live-auth reload verifier:
python scripts/verify_issue1514_weft_stalwart_live_auth_reload.py --allow-blocked - Canonical read-only Host172 Stalwart OIDC-directory runtime verifier:
python scripts/verify_issue2145_stalwart_oidc_directory_runtime.py --allow-blocked - Canonical bounded Host172 Stalwart OIDC-directory materializer (preview by default; use
--applyonly after review and merge):bash scripts/host_materialize_issue2145_stalwart_oidc_directory_runtime.sh [--apply]The apply path settles the post-recreate management readback before evaluating Heddle postconditions and only reports a rollback as completed after a final active-directory readback confirms the restored state. - Canonical read-only Host172 Stalwart legacy management/OIDC-consumer contract verifier:
python scripts/verify_issue2145_stalwart_legacy_management_contract.py --allow-blocked - Canonical read-only Stalwart admin ingress verifier (route, DNS, TLS, and
direct-port posture;
--pre-closurerequires explicit proxy/SSO evidence):bash scripts/host_verify_stalwart_management_ingress.sh [--pre-closure] - Canonical controlled direct-port closure lane (preview by default; never run
--applyuntil proxy/SSO readback is green and a human ticket is recorded):bash scripts/host_apply_issue1865_stalwart_direct_port_closure.sh [--apply|--rollback] - Canonical bounded Weft Host172 Nextcloud Mail restart-readiness lane:
bash scripts/host_materialize_issue1517_weft_nextcloud_mail_restart_readiness.sh - Canonical bounded Weft Host172 Nextcloud Mail restart-readiness verifier:
python scripts/verify_issue1517_weft_nextcloud_mail_restart_readiness.py --allow-blocked - Canonical bounded Weft Host172 functional mailbox inventory/owner readback lane:
bash scripts/host_materialize_issue1566_weft_functional_mailbox_owner_readback.sh - Canonical bounded Weft Host172 functional mailbox inventory/owner readback verifier:
python scripts/verify_issue1566_weft_functional_mailbox_owner_readback.py --allow-blocked - Canonical bounded Weft Host172 shared-mailbox ownership/work-claim readback lane:
bash scripts/host_materialize_issue1577_weft_shared_mailbox_work_claim_readback.sh - Canonical bounded Weft Host172 shared-mailbox ownership/work-claim readback verifier:
python scripts/verify_issue1577_weft_shared_mailbox_work_claim_readback.py --allow-blocked - Canonical bounded Weft Host172 deferred functional/shared mailbox delegation verifier:
python scripts/verify_issue1340_weft_mailbox_delegation_deferred.py --allow-blocked - Canonical bounded Weft Host172 explicit functional/shared mailbox principal-gap verifier:
python scripts/verify_issue1346_weft_functional_mailbox_principal_gap.py --allow-blocked - Canonical bounded Weft Host172 functional mailbox principal materializer:
bash scripts/host_materialize_issue1349_weft_functional_mailbox_principal.sh - Canonical bounded Weft Host172 functional mailbox principal materialized verifier:
python scripts/verify_issue1349_weft_functional_mailbox_principal_materialized.py --allow-blocked - Canonical bounded Weft Host172 delegated mailbox usage narrowing verifier:
python scripts/verify_issue1351_weft_delegated_mailbox_usage_narrowed.py --allow-blocked - Canonical bounded Weft Host172 direct functional mailbox JMAP auth materializer:
bash scripts/host_materialize_issue1354_weft_functional_mailbox_auth_surface.sh - Canonical bounded Weft Host172 direct functional mailbox JMAP auth verifier:
python scripts/verify_issue1354_weft_functional_mailbox_auth_surface.py --allow-blocked - Canonical bounded Weft Host172 shared-mailbox ownership materializer:
bash scripts/host_materialize_issue1365_weft_shared_mailbox_ownership.sh - Canonical bounded Weft Host172 shared-mailbox ownership verifier:
python scripts/verify_issue1365_weft_shared_mailbox_ownership.py --allow-blocked - Canonical bounded Weft Host172 alternative mailbox-group relation materializer:
bash scripts/host_materialize_issue1370_weft_mailbox_group_alt_path.sh - Canonical bounded Weft Host172 alternative mailbox-group relation verifier:
python scripts/verify_issue1370_weft_mailbox_group_alt_path.py --allow-blocked - Canonical bounded Weft Host172 Stalwart capability-gap materializer:
bash scripts/host_materialize_issue1373_weft_stalwart_capability_gap.sh - Canonical bounded Weft Host172 Stalwart capability-gap verifier:
python scripts/verify_issue1373_weft_stalwart_capability_gap.py --allow-blocked- exact-main relation/JMAP chain source:
scripts/fixtures/issue1370.weft_mailbox_group_alt_path.readback.json - Canonical bounded Weft Host172 Stalwart candidate-compatibility materializer:
bash scripts/host_materialize_issue1378_weft_stalwart_compatibility.sh - Canonical bounded Weft Host172 Stalwart candidate-compatibility verifier:
python scripts/verify_issue1378_weft_stalwart_compatibility.py --allow-blocked - Canonical bounded Weft Host172 Stalwart version-lift rehearsal materializer:
bash scripts/host_materialize_issue1380_weft_stalwart_rehearsal.sh - Canonical bounded Weft Host172 Stalwart version-lift rehearsal verifier:
python scripts/verify_issue1380_weft_stalwart_rehearsal.py --allow-blocked - Canonical bounded Weft Host172 Stalwart copied-config compatibility materializer:
bash scripts/host_materialize_issue1382_weft_stalwart_config_gap.sh - Canonical bounded Weft Host172 Stalwart copied-config compatibility verifier:
python scripts/verify_issue1382_weft_stalwart_config_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart config regeneration materializer:
bash scripts/host_materialize_issue1384_weft_stalwart_config_regeneration.sh - Canonical bounded Weft Host172 Stalwart config regeneration verifier:
python scripts/verify_issue1384_weft_stalwart_config_regeneration.py --allow-blocked - Canonical bounded Weft Host172 Stalwart copied-runtime ownership translation materializer:
bash scripts/host_materialize_issue1386_weft_stalwart_ownership_translation.sh - Canonical bounded Weft Host172 Stalwart copied-runtime ownership translation verifier:
python scripts/verify_issue1386_weft_stalwart_ownership_translation.py --allow-blocked - Canonical bounded Weft Host172 Stalwart post-translation v0.15 bridge materializer:
bash scripts/host_materialize_issue1388_weft_stalwart_v015_bridge.sh - Canonical bounded Weft Host172 Stalwart post-translation v0.15 bridge verifier:
python scripts/verify_issue1388_weft_stalwart_v015_bridge.py --allow-blocked - Canonical bounded Weft Host172 Stalwart
v0.15.5bridge rehearsal materializer:bash scripts/host_materialize_issue1390_weft_stalwart_v015_rehearsal.sh - Canonical bounded Weft Host172 Stalwart
v0.15.5bridge rehearsal verifier:python scripts/verify_issue1390_weft_stalwart_v015_rehearsal.py --allow-blocked - Canonical bounded Weft Host172 Stalwart
v0.16dump/convert helper materializer:bash scripts/host_materialize_issue1392_weft_stalwart_v016_dump_convert.sh - Canonical bounded Weft Host172 Stalwart
v0.16dump/convert helper verifier:python scripts/verify_issue1392_weft_stalwart_v016_dump_convert.py --allow-blocked - Canonical bounded Weft Host172 Stalwart
v0.16tomllib-prerequisite materializer:bash scripts/host_materialize_issue1394_weft_stalwart_v016_tomllib_prereq.sh - Canonical bounded Weft Host172 Stalwart
v0.16tomllib-prerequisite verifier:python scripts/verify_issue1394_weft_stalwart_v016_tomllib_prereq.py --allow-blocked - Canonical bounded Weft Host172 Stalwart helper-auth classification materializer:
bash scripts/host_materialize_issue1396_weft_stalwart_helper_auth_gap.sh - Canonical bounded Weft Host172 Stalwart helper-auth classification verifier:
python scripts/verify_issue1396_weft_stalwart_helper_auth_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart management-credential-source materializer:
bash scripts/host_materialize_issue1397_weft_stalwart_management_credential_source.sh - Canonical bounded Weft Host172 Stalwart management-credential-source verifier:
python scripts/verify_issue1397_weft_stalwart_management_credential_source.py --allow-blocked - Canonical bounded Weft Host172 Stalwart canonical host-secret-contract materializer:
bash scripts/host_materialize_issue1399_weft_stalwart_management_secret_contract.sh - Canonical bounded Weft Host172 Stalwart canonical host-secret-contract verifier:
python scripts/verify_issue1399_weft_stalwart_management_secret_contract.py --allow-blocked - Canonical bounded Weft Host172 Stalwart runtime-secret env contract-admission materializer:
bash scripts/host_materialize_issue1402_weft_stalwart_management_secret_env_contract.sh - Canonical bounded Weft Host172 Stalwart runtime-secret env contract-admission verifier:
python scripts/verify_issue1402_weft_stalwart_management_secret_env_contract.py --allow-blocked - Canonical bounded Weft Host172 Stalwart runtime-secret env unstaged-gap materializer:
bash scripts/host_materialize_issue1404_weft_stalwart_management_secret_env_staging_gap.sh - Canonical bounded Weft Host172 Stalwart runtime-secret env unstaged-gap verifier:
python scripts/verify_issue1404_weft_stalwart_management_secret_env_staging_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart secure-input-source gap materializer:
bash scripts/host_materialize_issue1406_weft_stalwart_secure_input_source_gap.sh - Canonical bounded Weft Host172 Stalwart secure-input-source gap verifier:
python scripts/verify_issue1406_weft_stalwart_secure_input_source_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart secure-input-source contract-gap materializer:
bash scripts/host_materialize_issue1408_weft_stalwart_secure_input_source_contract_gap.sh - Canonical bounded Weft Host172 Stalwart secure-input-source contract-gap verifier:
python scripts/verify_issue1408_weft_stalwart_secure_input_source_contract_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart secure-input-source materialization-gap materializer:
bash scripts/host_materialize_issue1410_weft_stalwart_secure_input_source_materialization_gap.sh
- exact-main relation/JMAP chain source:
- Canonical bounded Weft Host172 Stalwart secure-input-source materialization-gap verifier:
python scripts/verify_issue1410_weft_stalwart_secure_input_source_materialization_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart secure-input sync/stage-gap materializer:
bash scripts/host_materialize_issue1412_weft_stalwart_secure_input_source_sync_stage_gap.sh - Canonical bounded Weft Host172 Stalwart secure-input sync/stage-gap verifier:
python scripts/verify_issue1412_weft_stalwart_secure_input_source_sync_stage_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart operator-env managed-key-gap materializer:
bash scripts/host_materialize_issue1414_weft_stalwart_operator_env_managed_key_gap.sh - Canonical bounded Weft Host172 Stalwart operator-env managed-key-gap verifier:
python scripts/verify_issue1414_weft_stalwart_operator_env_managed_key_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart dedicated runtime-secret stage-wrapper-gap materializer:
bash scripts/host_materialize_issue1416_weft_stalwart_stage_wrapper_gap.sh - Canonical bounded Weft Host172 Stalwart dedicated runtime-secret stage-wrapper-gap verifier:
python scripts/verify_issue1416_weft_stalwart_stage_wrapper_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart managed-key-family-admission materializer:
bash scripts/host_materialize_issue1418_weft_stalwart_managed_key_family_admission.sh - Canonical bounded Weft Host172 Stalwart managed-key-family-admission verifier:
python scripts/verify_issue1418_weft_stalwart_managed_key_family_admission.py --allow-blocked - Canonical Weft Stalwart runtime-secret stage wrapper:
bash scripts/host_stage_weft_stalwart_management_env.sh - Canonical bounded Weft Host172 Stalwart dedicated stage-wrapper materializer:
bash scripts/host_materialize_issue1420_weft_stalwart_stage_wrapper_materialization.sh - Canonical bounded Weft Host172 Stalwart dedicated stage-wrapper verifier:
python scripts/verify_issue1420_weft_stalwart_stage_wrapper_materialization.py --allow-blocked - Canonical bounded Weft Host172 Stalwart stage-replay source-gap materializer:
bash scripts/host_materialize_issue1423_weft_stalwart_stage_source_gap.sh - Canonical bounded Weft Host172 Stalwart stage-replay source-gap verifier:
python scripts/verify_issue1423_weft_stalwart_stage_source_gap.py --allow-blocked - Canonical bounded Weft Host172 Stalwart successful stage-replay materializer:
bash scripts/host_materialize_issue1461_weft_stalwart_stage_replay.sh - Canonical bounded Weft Host172 Stalwart successful stage-replay verifier:
python scripts/verify_issue1461_weft_stalwart_stage_replay.py --allow-blocked - Canonical bounded Weft Host172 Stalwart post-secret helper-auth reprobe materializer:
bash scripts/host_materialize_issue1471_weft_stalwart_helper_auth_reprobe.sh - Canonical bounded Weft Host172 Stalwart post-secret helper-auth reprobe verifier:
python scripts/verify_issue1471_weft_stalwart_helper_auth_reprobe.py --allow-blocked - Canonical bounded Weft Host172 Stalwart fallback-admin hash alignment materializer:
bash scripts/host_materialize_issue1479_weft_stalwart_fallback_admin_hash_alignment.sh - Canonical bounded Weft Host172 Stalwart fallback-admin hash alignment verifier:
python scripts/verify_issue1479_weft_stalwart_fallback_admin_hash_alignment.py --allow-blocked - Canonical bounded Weft Host172 Stalwart runtime-drift reconcile materializer:
bash scripts/host_materialize_issue1483_weft_stalwart_runtime_drift.sh - Canonical bounded Weft Host172 Stalwart runtime-drift reconcile verifier:
python scripts/verify_issue1483_weft_stalwart_runtime_drift.py --allow-blocked - Canonical bounded Weft Host172 Stalwart
v0.15.5production bridge-cutover materializer:bash scripts/host_materialize_issue1487_weft_stalwart_v015_cutover.sh - Canonical bounded Weft Host172 Stalwart
v0.15.5production bridge-cutover verifier:python scripts/verify_issue1487_weft_stalwart_v015_cutover.py --allow-blocked - Canonical bounded Weft Host172 post-
v0.15.5helper/hash config-path re-anchor owner issue:JaddaHelpifyr/jhf-openclaw-env#1488- active runtime config truth after the cutover is the live
/opt/stalwart/etc/config.tomlpath family when present - legacy
/opt/stalwart-mailremains compatibility-only and must not stay the default assumption in helper/hash readback lanes
- active runtime config truth after the cutover is the live
- Canonical bounded Weft Host172 selfhost mail deliverability verifier:
python scripts/verify_issue1331_weft_selfhost_mail_deliverability.py --allow-blocked - The bounded Weft live-Graph owner posture now includes both:
- Graph URL/ref keys
- non-demo M365 identifiers (
WEFT_M365_TENANT_ID,WEFT_M365_SITE_ID,WEFT_M365_DRIVE_ID)
- Default posture:
stages only requested managed keys into
/home/administrator/.config/helpifyr/operator.envon Host172, preserves unrelated remote entries, never prints secret values, and fails closed when a requested key is missing locally. .is legacy fallback only and must not be treated as the canonical accumulation path.
OpenClaw Model Runtime Note
- Canonical default model policy is
deepseek/deepseek-v4-flashfor all standard OpenClaw agents and runtime-generated heartbeat/subagent lanes. - Explicit model exceptions are limited to:
jadda-voice-warm -> anthropic/claude-haiku-4-5
- Repository verifier:
python scripts/verify_openclaw_agent_model_policy.py - Live reconcile:
bash scripts/host_reconcile_openclaw_agent_model_policy.sh - Live verify:
python scripts/verify_openclaw_agent_model_policy.py --live-via-ssh <internal-runtime-redacted><internal-runtime-redacted> - Required success signal:
a bounded real
mainturn must start successfully; config or roster readback alone is not enough.
Repo-Local Scan&Fix Automation
- canonical execution standard prompt:
prompts/scan_and_fix_execution_standard.md - canonical dispatcher:
scripts/scan_and_fix.sh - default posture:
- Gitea open issues are the Source of Truth
- serial dispatch is worktree-safe and repo-scoped
- real execution uses
--executor-cmdor localopenclawCLI when present --dry-runis required for safe prompt inspection without execution
Repo-Local Scan&Pull Automation
- canonical merge dispatcher:
scripts/scan_and_pull.sh - canonical implementation:
scripts/scan_and_pull.py - default posture:
- Gitea open pull requests are the Source of Truth
- use
--mode scanwithGITEA_TOKENfor a read-only queue; use--mode review --owner <owner> --repo <repo> --number <number>withGITEA_MERGE_TOKENto submit and read back an exact-head GiteaAPPROVED; use--mode mergewithGITEA_MERGE_ACTOR_TOKENto merge - the wrapper resolves and exports exactly one role token per process; reviewer and merge-actor credentials are never loaded together
- owner repository discovery requests every Gitea page through the terminal empty page and preserves first-seen repository order without duplicates
- merge only when
mergeable=trueand an explicit redacted status-authority record matches the exact owner/repository/PR/head, uses eventpull_request, and records a terminal-success run and job. The contract iscontracts/ci/scan_and_pull_status_authority_v1.json; aggregate commit state and latest contexts remain diagnostic and are not sufficient authority. The independent local approval record and the persisted GiteaAPPROVEDstate exactly match the current head; reviewer, author, and merge actor must be three distinct identities; any authority mismatch, missing field, or non-terminal/non-success run or job remains fail-closed - the merge request uses Gitea's documented lowercase
doaction field and includes the exact admittedhead_commit_id - approvals default to
artifacts/scan_and_pull/review_approvals.json; setSCAN_AND_PULL_REVIEW_APPROVALS_FILEor pass--review-approvals-filefor an explicit artifact override. The JSON object must contain anapprovalsarray of records withowner,repo,number,head, andreviewer; the reviewer must differ from the PR author. - the merge actor never closes issues; perform owner-bounded post-merge
evidence and a separate
GITEA_TOKENcloseout before changing issue state - a head reachable from its base while Gitea reports
merged=falseis anintegrated_pr_audit_conflict: Scan&Pull records it withmutation: noneand never closes or merges that PR. The conflict stays fail-closed for that PR but does not block evaluation of an unrelated candidate that satisfies every exact-head approval and CI gate. --dry-runis required for safe review or merge preview without mutation- status authority defaults to
artifacts/scan_and_pull/status_authority.json; setSCAN_AND_PULL_STATUS_AUTHORITY_FILEor pass--status-authority-file. Missing, stale, mismatched, non-terminal, unredacted, duplicate, or ambiguous authority evidence remains fail-closed.
Post-Merge Mainline Reconcile
- canonical post-merge reconcile entrypoint:
python scripts/post_merge_mainline_reconcile.py - canonical delivery evidence verifier:
python scripts/verify_agent_platform_delivery_evidence_lane.py - canonical delegated closeout verifier:
python scripts/verify_agent_delegated_closeout_evidence_lane.py - default posture:
- Gitea PR merge truth is authoritative
- reconcile only the directly affected repo
- local
mainreadback and remote owner-checkoutmainreadback are mandatory - runtime reconcile is owner-bounded and command-driven, not host-global
- runtime stays unreconciled until bounded runtime verify/readback succeeds
- the canonical closeout sequence remains:
gitea_merge_readback -> local_main_readback -> remote_owner_checkout_readback -> runtime_reconcile -> runtime_verify_against_running_main - delegated closeout bundles add one more bounded proof layer:
required artifact-bundle completeness plus visual evidence when the Fabric
work-type posture marks it
required - canonical post-merge replay for the Host172 heavy-workload guardrail:
bash scripts/host_verify_issue758_759_heavy_workload_guardrail.sh --exercise-heavy-lanes
- canonical
jhf-openclaw-envlane after merge of a runtime-relevant PR:python scripts/post_merge_mainline_reconcile.py \--pr 627 \--remote-host <internal-runtime-redacted> \--remote-user administrator \--remote-checkout /home/administrator/jhf-openclaw-env \--remote-reconcile-command "bash scripts/host_reconcile_openclaw_env_checkout_main.sh --host <internal-runtime-redacted> --user administrator --allow-dirty-reset" \--runtime-source "systemd guardrail units plus repo-owned scripts under /home/administrator/jhf-openclaw-env/scripts" \--runtime-reconcile-command "bash scripts/host_start_openclaw_guardrail.sh --host <internal-runtime-redacted> --user administrator --start-now" \--runtime-verify-command "bash scripts/host_openclaw_runtime_guardrail.sh --host <internal-runtime-redacted> --user administrator" \--runtime-verify-command "ssh <internal-runtime-redacted><internal-runtime-redacted> \"systemctl show jhf-openclaw-env-guardrail.service -p ExecMainStatus -p Result && systemctl show jhf-openclaw-env-guardrail.timer -p UnitFileState -p ActiveState -p SubState\""
Contracts and Policies
- STACK_RUNTIME_CONTRACT.md (
docs/STACK_RUNTIME_CONTRACT.md) - SSO_HTTPS_SURFACE_INVENTORY.md (
docs/SSO_HTTPS_SURFACE_INVENTORY.md) - ERP_IDENTITY_LIFECYCLE_BOUNDARY.md (
docs/ERP_IDENTITY_LIFECYCLE_BOUNDARY.md) - RUNTIME_PORT_OBSERVATION_POLICY.md (
docs/RUNTIME_PORT_OBSERVATION_POLICY.md) - SSO_V4_ENV_AUTH_RUNTIME.md (
docs/SSO_V4_ENV_AUTH_RUNTIME.md) - FUTURE_MODULE_RUNTIME_AUTH_ONBOARDING.md (
docs/FUTURE_MODULE_RUNTIME_AUTH_ONBOARDING.md) - SECRETS_AND_ENV_POLICY.md (
docs/SECRETS_AND_ENV_POLICY.md) - M365_FILE_GRAPH_PROFILE.md (
jhf-weft/docs/M365_FILE_GRAPH_PROFILE.md)
Incident/Recovery Runbooks
- AUTONOMOUS_RESTART_GUARDRAIL.md (
docs/AUTONOMOUS_RESTART_GUARDRAIL.md) - GITEA_ORG_RUNNER_RECOVERY_RUNBOOK.md (
docs/GITEA_ORG_RUNNER_RECOVERY_RUNBOOK.md) - ROLLBACK_AND_RECOVERY.md (
docs/ROLLBACK_AND_RECOVERY.md) - CLIENT_TLS_TRUST_RUNBOOK.md (
docs/CLIENT_TLS_TRUST_RUNBOOK.md)
Scan&Fix Runbook
Schnellstart
bash scripts/scan_and_fix.sh
- Processes this repo's open Gitea issue queue serially by default.
- Uses
prompts/scan_and_fix_execution_standard.mdas the runtime standard block.
Dry-Run
bash scripts/scan_and_fix.sh --dry-run
- Shows the selection and prompt preview.
- Does not dispatch an executor.
Live-Run (bounded)
bash scripts/scan_and_fix.sh --max-issues 5
- Runs a bounded serial pass for the first N issues in priority order.
Typische Fehlerbilder
GITEA_TOKEN missing: Token fehlt im kanonischen Operator-Env~/.config/helpifyr/operator.envoder inHELPIFYR_OPERATOR_ENV_FILE;.wird in der Scan-Lane nicht mehr als stiller Fallback akzeptiert.Cannot infer repo owner/name:originRemote oder--repo-owner/--repo-namekorrigieren.scan_and_fix requires a pushed branch: for the OpenClaw executor, first push the current branch tooriginor switch to a branch that already has a remote head; local reconcile-only branches without a remote head are now rejected fail-closed immediately.- Visible wait lines:
scanfix_runner_heartbeatorscanfix_executor_heartbeatmean that the serial run is still active; they are not a stuck lock, but the bounded heartbeat during an active agent turn. - Local Codex fallback: if no
--executor-cmdis set,scan_and_fix.shusesgpt-5.4by default; a different locally verified model can be selected withSCAN_AND_FIX_CODEX_MODEL. - Local executor failure: check the standard executor
scripts/scan_and_fix_openclaw_executor.sh(openclaw-gateway, SSH/host access, agent timeout); override it explicitly with--executor-cmdonly when needed.
License: AGPLv3 Project: https://helpifyr.com
Workspace Git/Scan Guardrails (Mandatory)
- Gitea is Source of Truth; local Windows workspaces are disposable working copies.
- Never run Codex sessions on
<local-workspace-redacted>root; always use a concrete repo path. - Limit active repo sessions to 2-3 in parallel.
- Before each run in a repo:
git fetch --prune,git checkout <branch>,git pull --ff-only. - No background git discovery loops (
git status,git ls-files, worktree scans) without explicit scoped need. - Automation scripts must run repo-scoped only, never global over
<local-workspace-redacted>.
scan_and_fix Standard
scripts/scan_and_fix.shmust resolve credentials throughscripts/operator_env.py, keep legacy root.envas compatibility fallback only, and fail closed when required keys are missing.scripts/scan_and_fix_openclaw_executor.shis the canonical repo-aware host executor when a live OpenClaw turn must prove workspace path + branch insideopenclaw-gateway.scripts/scan_open_issues_repo_only.shmust exist and query only current repo open issues via Gitea API.
Workspace Hygiene
- Daily cleanup: stale
_worktrees/*,_tmp/*,test-results/*, large temporary artifacts. - Weekly cleanup: stale local branches/worktrees.
- Never leave valuable artifacts as untracked files in workspace root.
Dirty-State Policy
- Dirty state is allowed while actively implementing.
- Before new scan/automation runs: commit/stash, or use a dedicated worktree.
- Never propagate
dirty_unknownstates.
Incident Playbook (git.exe storm)
- Identify parent of
git.exe(usually oneCodex.exe). - Stop only the offending process tree.
- Restart session on concrete repo path.
- Reduce parallel sessions.
- Verify
git.execount drops within 30-60s.
Weft Mail Public Surface DNS/Ingress Posture
- issue owner lane:
jhf-openclaw-env#1588
- parent future owner lane:
jhf-openclaw-env#1587
- upstream program:
jhf-weft#6
- bounded runtime expectations:
<internal-runtime-redacted>is admitted in the repo-owned AdGuard rewrite list for Host172- Caddy terminates
tls internalfor<internal-runtime-redacted> - the public surface stays bounded to a redirect into
apps/mail - owner verify distinguishes missing DNS/ingress surfacing from later Weft/SSO/product gaps
- scope boundary:
- this lane proves bounded public DNS/TLS/redirect surfacing only
- it must not be overstated as standalone mail-product completion, mailbox provisioning, or Heddle SSO admission
Canonical bounded Weft Host172 <internal-runtime-redacted> host-preserving public surface lane (jhf-openclaw-env#1595)
- Canonical materializer:
bash scripts/host_materialize_issue1595_weft_mail_public_surface.sh
- Canonical verifier:
python scripts/verify_issue1595_weft_mail_public_surface.py --allow-blocked
- Upstream refs:
jhf-openclaw-env#1587jhf-weft#559jhf-heddle#298jhf-weft#6
- bounded runtime expectations:
<internal-runtime-redacted>/redirects only toapps/mail/apps/mail/,/login, and the OIDC launcher stay canonical on<internal-runtime-redacted>- if Heddle still rejects the rewritten mail callback, the verifier classifies
heddle_mail_redirect_uri_not_admitted
- scope boundary:
- this lane proves host-preserving public ingress/runtime surfacing only
- it must not be overstated as full Heddle admission, standalone mailbox-product completion, or broad selfhost mail readiness
Canonical bounded Weft Host172 <internal-runtime-redacted> trusted-domain and overwritehost runtime lane (jhf-openclaw-env#1597)
- Canonical materializer:
bash scripts/host_materialize_issue1597_weft_mail_host_ingress_runtime.sh
- Canonical verifier:
python scripts/verify_issue1597_weft_mail_host_ingress_runtime.py --allow-blocked
- Upstream refs:
jhf-weft#576jhf-openclaw-env#1595jhf-weft#559jhf-weft#6
- bounded runtime expectations:
- owner env truth in
compose/nextcloud-selfhost.envis upserted to the canonical mail-host values before reconcile nextcloud-selfhostis force-recreated from the reconciled env truth before OCC-level ingress reconcile runs- Host172 Nextcloud
trusted_domainsreadback contains<internal-runtime-redacted> - Host172
overwritehostreads back<internal-runtime-redacted> - Host172
overwrite.cli.urlreads backhttps://<internal-runtime-redacted> - bounded authenticated webmail verify is rerun against the canonical mail host after reconcile
- owner env truth in
- scope boundary:
- this lane proves owner-side Nextcloud config/runtime convergence for the canonical mail host
- it must not be overstated as broad selfhost mail product completion beyond the bounded webmail proof
Canonical bounded Weft Host172 dual-host OIDC callback runtime lane (jhf-openclaw-env#1600)
- Canonical materializer:
bash scripts/host_materialize_issue1600_weft_dual_host_oidc_callback.sh
- Canonical verifier:
python scripts/verify_issue1600_weft_dual_host_oidc_callback.py --allow-blocked
- Upstream refs:
jhf-openclaw-env#1600jhf-openclaw-env#1587jhf-weft#588jhf-heddle#298jhf-weft#6
- bounded runtime expectations:
apps/user_oidcstays canonical on<internal-runtime-redacted>apps/user_oidcstays canonical on<internal-runtime-redacted>- both launchers keep distinct encoded
redirect_uricallback hosts instead of collapsing onto one host - if Heddle still rejects one callback host, the verifier classifies the remaining blocker explicitly instead of overclaiming broad SSO admission
- scope boundary:
- this lane proves bounded dual-host launcher/callback canonicalization only
- it must not be overstated as broad Weft selfhost SSO completion, full logout/session admission, or mailbox-product completion