From 14ffd002fd808ac3650057aa9c707dc03fdae6c8 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Sun, 20 Sep 2026 01:17:03 +0000 Subject: [PATCH] runtime: publish CONTEXT-AUTO-20260920T011701Z --- .../CONTEXT-AUTO-20260920T011701Z.json | 1 + .../history/CONTEXT-AUTO-20260920T011701Z.txt | 162 ++++++++++++ runtime/latest.json | 39 +-- runtime/latest.txt | 238 +++++++++++------- 4 files changed, 318 insertions(+), 122 deletions(-) create mode 100644 runtime/history/CONTEXT-AUTO-20260920T011701Z.json create mode 100644 runtime/history/CONTEXT-AUTO-20260920T011701Z.txt diff --git a/runtime/history/CONTEXT-AUTO-20260920T011701Z.json b/runtime/history/CONTEXT-AUTO-20260920T011701Z.json new file mode 100644 index 00000000..afaaa80f --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260920T011701Z.json @@ -0,0 +1 @@ +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260920T011701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-09-20T01:17:01Z","finished_at_utc":"2026-09-20T01:17:02Z","reference_register_checked":true,"reference_sha256":"5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66","error_register_checked":true,"error_register_sha256":"3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0","changes_made":false,"sanitized":true,"secrets_included":false,"private_addresses_included":false,"output":"AUTOMATIC_CLUSTER_CONTEXT_REFRESH=OK"} diff --git a/runtime/history/CONTEXT-AUTO-20260920T011701Z.txt b/runtime/history/CONTEXT-AUTO-20260920T011701Z.txt new file mode 100644 index 00000000..65e13b88 --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260920T011701Z.txt @@ -0,0 +1,162 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z +STATUS=OK +RC=0 +HOST=pve01 +COMPONENT=cluster-context +REFERENCE_SHA[PRIVATE_IP]e5154c41cb[PRIVATE_IP]aca68090be[PRIVATE_IP]bf[PRIVATE_IP]df[PRIVATE_IP] +ERROR_REGISTER_SHA[PRIVATE_IP]ec0f527ed3afeed[PRIVATE_IP]ee[PRIVATE_IP]bbfb[PRIVATE_IP]af4ba7ba0 +OUTPUT_BEGIN +GENERATED_AT_UTC=[PRIVATE_IP]T01:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on + +Quorum information +------------------ +Date: Sun Sep [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.130 +Quorate: Yes + +Votequorum information +---------------------- +Expected votes: 3 +Highest expected: 3 +Total votes: 3 +Quorum: 2 +Flags: Quorate + +Membership information +---------------------- + Nodeid Votes Name +[PRIVATE_IP] [PRIVATE_IP].11 (local) +[PRIVATE_IP] [PRIVATE_IP].13 +[PRIVATE_IP] [PRIVATE_IP].12 + +Membership information +---------------------- + Nodeid Votes Name + 1 1 pve01 (local) + 2 1 pve03 + 3 1 pve02 +[{"cpu":[PRIVATE_IP]034646,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/100","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"pvepro-prod","netin":322353,"netout":411524,"node":"pve01","status":"running","template":0,"type":"qemu","uptime":993,"vmid":100},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/101","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"pvepro-staging-v1","netin":0,"netout":0,"node":"pve01","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":101},{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":110},{"cpu":[PRIVATE_IP]361e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/111","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":112},{"cpu":[PRIVATE_IP]361e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":113},{"cpu":[PRIVATE_IP]72206,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":130},{"cpu":[PRIVATE_IP]1973,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"snikket","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":150},{"cpu":[PRIVATE_IP]55366,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":160},{"cpu":[PRIVATE_IP]2121,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":170},{"cpu":[PRIVATE_IP]14916,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":171},{"cpu":[PRIVATE_IP]478451,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":190},{"cpu":[PRIVATE_IP]325309,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/210","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":210},{"cpu":[PRIVATE_IP]783053,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/211","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-staging","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":211},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]94279,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]44911,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]86166,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":[PRIVATE_IP]},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"vztmpl,iso,backup,import","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,iso,backup,import","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,iso,backup,import","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 37.18% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 15.51% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-app-cloud-quorum-queue.service loaded failed failed Homelab canonical application cloud quorum backup queue +● homelab-backup-retention-gc.service loaded failed failed Homelab owner-aware cloud retention GC +● homelab-vm-cloud-quorum-queue.service loaded failed failed Homelab canonical VM/CT cloud quorum backup queue + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Sun [PRIVATE_IP] 04:17:16 MSK 13s Sun [PRIVATE_IP] 04:16:16 MSK 46s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sun [PRIVATE_IP] 04:18:00 MSK 57s Sun [PRIVATE_IP] 04:16:58 MSK 4s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Sun [PRIVATE_IP] 04:18:16 MSK 1min 13s Sun [PRIVATE_IP] 04:03:16 MSK 13min ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sun [PRIVATE_IP] 04:18:17 MSK 1min 14s Sun [PRIVATE_IP] 03:46:16 MSK 30min ago homelab-backup-v2.timer homelab-backup-v2.service +Sun [PRIVATE_IP] 04:18:36 MSK 1min 34s Sun [PRIVATE_IP] 04:13:19 MSK 3min 43s ago homelab-health-metrics.timer homelab-health-metrics.service +Sun [PRIVATE_IP] 04:19:16 MSK 2min 13s Sun [PRIVATE_IP] 04:14:16 MSK 2min 46s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Sun [PRIVATE_IP] 04:19:19 MSK 2min 16s Sun [PRIVATE_IP] 04:14:19 MSK 2min 43s ago netbird-peers-health.timer netbird-peers-health.service +Sun [PRIVATE_IP] 04:22:58 MSK 5min Sun [PRIVATE_IP] 04:07:58 MSK 9min ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sun [PRIVATE_IP] 04:22:58 MSK 5min Sun [PRIVATE_IP] 04:12:58 MSK 4min 4s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sun [PRIVATE_IP] 04:22:58 MSK 5min Sun [PRIVATE_IP] 04:07:58 MSK 9min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sun [PRIVATE_IP] 04:25:58 MSK 8min Sun [PRIVATE_IP] 04:10:58 MSK 6min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sun [PRIVATE_IP] 04:30:00 MSK 12min Sun [PRIVATE_IP] 04:15:13 MSK 1min 48s ago homelab-incident-journal.timer homelab-incident-journal.service +Sun [PRIVATE_IP] 04:30:08 MSK 13min Sun [PRIVATE_IP] 04:16:16 MSK 46s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sun [PRIVATE_IP] 04:30:15 MSK 13min Sun [PRIVATE_IP] 04:15:16 MSK 1min 46s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sun [PRIVATE_IP] 04:30:58 MSK 13min Sun [PRIVATE_IP] 04:15:37 MSK 1min 24s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sun [PRIVATE_IP] 04:32:24 MSK 15min Sun [PRIVATE_IP] 04:01:12 MSK 15min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sun [PRIVATE_IP] 04:35:50 MSK 18min Sun [PRIVATE_IP] 04:05:58 MSK 11min ago homelab-backup-audit.timer homelab-backup-audit.service +Sun [PRIVATE_IP] 04:35:58 MSK 18min Sat [PRIVATE_IP] 22:35:58 MSK 5h 41min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Sun [PRIVATE_IP] 04:46:45 MSK 29min Sun [PRIVATE_IP] 04:12:58 MSK 4min 4s ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sun [PRIVATE_IP] 05:56:19 MSK 1h 39min Sat [PRIVATE_IP] 23:50:32 MSK 4h 26min ago homelab-evidence-root.timer homelab-evidence-root.service +Sun [PRIVATE_IP] 06:10:28 MSK 1h 53min Sat [PRIVATE_IP] 06:15:16 MSK 22h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Sun [PRIVATE_IP] 07:09:03 MSK 2h 52min Sun [PRIVATE_IP] 00:59:30 MSK 3h 17min ago homelab-mailru-trash-gc.timer homelab-mailru-trash-gc.service +Sun [PRIVATE_IP] 07:11:14 MSK 2h 54min Sat [PRIVATE_IP] 07:18:31 MSK 20h ago homelab-drift-check.timer homelab-drift-check.service +Sun [PRIVATE_IP] 07:34:28 MSK 3h 17min Sat [PRIVATE_IP] 07:38:42 MSK 20h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Sun [PRIVATE_IP] 07:40:18 MSK 3h 23min Sun [PRIVATE_IP] 07:35:56 MSK 6 days ago homelab-rotating-boot-drill.timer homelab-rotating-boot-drill.service +Sun [PRIVATE_IP] 07:46:29 MSK 3h 29min Sat [PRIVATE_IP] 07:40:16 MSK 20h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Sun [PRIVATE_IP] 07:46:56 MSK 3h 29min Sat [PRIVATE_IP] 07:38:16 MSK 20h ago homelab-alerting-health.timer homelab-alerting-health.service +Sun [PRIVATE_IP] 07:57:31 MSK 3h 40min Sat [PRIVATE_IP] 07:56:58 MSK 20h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Sun [PRIVATE_IP] 07:58:07 MSK 3h 41min Sat [PRIVATE_IP] 07:48:00 MSK 20h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Sun [PRIVATE_IP] 07:58:31 MSK 3h 41min Sat [PRIVATE_IP] 07:56:58 MSK 20h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Sun [PRIVATE_IP] 08:01:43 MSK 3h 44min Sat [PRIVATE_IP] 08:15:16 MSK 20h ago homelab-overall-health.timer homelab-overall-health.service +Sun [PRIVATE_IP] 08:06:27 MSK 3h 49min Sat [PRIVATE_IP] 11:53:32 MSK 16h ago man-db.timer man-db.service +Sun [PRIVATE_IP] 08:07:47 MSK 3h 50min Sat [PRIVATE_IP] 08:08:49 MSK 20h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Sun [PRIVATE_IP] 08:19:26 MSK 4h 2min Sun [PRIVATE_IP] 03:55:58 MSK 21min ago apt-daily.timer apt-daily.service +Sun [PRIVATE_IP] 08:24:01 MSK 4h 6min Sat [PRIVATE_IP] 08:19:39 MSK 19h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Sun [PRIVATE_IP] 08:42:10 MSK 4h 25min Sat [PRIVATE_IP] 08:31:16 MSK 19h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Sun [PRIVATE_IP] 08:46:34 MSK 4h 29min Sat [PRIVATE_IP] 08:41:46 MSK 19h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Sun [PRIVATE_IP] 08:54:41 MSK 4h 37min Sat [PRIVATE_IP] 08:48:43 MSK 19h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Sun [PRIVATE_IP] 09:01:11 MSK 4h 44min Sat [PRIVATE_IP] 08:51:16 MSK 19h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Sun [PRIVATE_IP] 10:15:00 MSK 5h 57min Sat [PRIVATE_IP] 10:15:00 MSK 18h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 16:47:58 MSK 12h Sat [PRIVATE_IP] 16:47:58 MSK 11h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Mon [PRIVATE_IP] 00:00:00 MSK 19h Sun [PRIVATE_IP] 00:00:12 MSK 4h 16min ago dpkg-db-backup.timer dpkg-db-backup.service +Mon [PRIVATE_IP] 00:04:42 MSK 19h Mon [PRIVATE_IP] 00:10:39 MSK 6 days ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:07:36 MSK 19h Sun [PRIVATE_IP] 00:13:12 MSK 4h 3min ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Mon [PRIVATE_IP] 00:07:48 MSK 19h Sun [PRIVATE_IP] 00:02:02 MSK 4h 14min ago homelab-docker-health.timer homelab-docker-health.service +Mon [PRIVATE_IP] 00:09:14 MSK 19h Mon [PRIVATE_IP] 00:30:56 MSK 6 days ago fstrim.timer fstrim.service +Mon [PRIVATE_IP] 00:16:19 MSK 19h Sun [PRIVATE_IP] 00:01:46 MSK 4h 15min ago homelab-storage-capacity.timer homelab-storage-capacity.service +Mon [PRIVATE_IP] 00:17:22 MSK 20h Sun [PRIVATE_IP] 00:13:55 MSK 4h 3min ago homelab-quality-gate.timer homelab-quality-gate.service +Mon [PRIVATE_IP] 00:23:49 MSK 20h Sun [PRIVATE_IP] 00:04:32 MSK 4h 12min ago logrotate.timer logrotate.service +Mon [PRIVATE_IP] 02:49:53 MSK 22h Sun [PRIVATE_IP] 01:11:58 MSK 3h 5min ago pve-daily-update.timer pve-daily-update.service +Mon [PRIVATE_IP] 03:22:30 MSK 23h Sun [PRIVATE_IP] 03:34:58 MSK 42min ago homelab-backup-retention-gc.timer homelab-backup-retention-gc.service +Sun [PRIVATE_IP] 03:10:17 MSK 6 days Sun [PRIVATE_IP] 03:10:58 MSK 1h 6min ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:23 MSK 6 days Sun [PRIVATE_IP] 03:10:12 MSK 1h 6min ago e2scrub_all.timer e2scrub_all.service +- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service +- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service +- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service + +56 timers listed. +RUNTIME_MANIFEST_ID=df[PRIVATE_IP]ac9b5abd[PRIVATE_IP]b[PRIVATE_IP]d89496fb2bde[PRIVATE_IP] +EXPERIMENT_ID=5462ee[PRIVATE_IP]ebe[PRIVATE_IP]feb2ad[PRIVATE_IP]1ad87bbac0b8108 +COLLECTION_START_AT=[PRIVATE_IP]T[PRIVATE_IP]:00 +FIRST_COMPLETE_D1_CLOSE=[PRIVATE_IP]T[PRIVATE_IP]:00 +PRODUCTION_LAUNCH_ALLOWED=False +EXECUTION_AUTHORITY=False +RISK_AUTHORITY=False +STAGE_A_HEALTH=AWAITING_PRIMARY_FINALITY +FORENSIC_PREVIOUS_EPOCH_PRESERVED=YES + +## NEWFI_TASK6_AUTH_CHECKPOINT_V[PRIVATE_IP] +- Scope: historical accepted AUTH test, not a current SMTP connection test. +- Newfi approved SMTP account/sender: aleisaev@yandex.ru. +- Endpoint used by accepted test: smtp.yandex.ru:465 with certificate verification; single PLAIN initial response accepted with code 235. +- Evidence: incident ledger ### NEWFI_TASK6_YANDEX_AUTH_V2_OBSERVATION and ### NEWFI_TASK6_AUTH_PROOF_CLOSE_V1. +- No password file written, no application configuration changed, no mail sent by the accepted AUTH test. +- Persistent transport installation and application delivery are not proven by this checkpoint. Task6 is not complete. +- AUTH challenge and missing-file incidents closed; launch/session incident remains OPEN with original cause unproven. +- This update does not change VM211, VM160, routing, board state or Git. +- Other incidents and infrastructure health were not assessed. + + +## NEWFI_PRIVATE_STRUCTURE92_WRONG_MARKER_SCOPE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: NEWFI92 inspected the pve01 NEWFI90 attempt marker, which had not been finalized because the outer shell exited immediately after the guest returned RC3 following its successful rollback. The guest marker contained the true final rollback state. +- Correction: NEWFI93 required both the guest FINISHED/ROLLED_BACK record and a fresh exact demo-state readback before reconciling the outer NEWFI90 marker. NEWFI92 itself never reserved an attempt or mutated state. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] +- Status: OPEN +- Command: NEWFI95 +- Symptom: after the content-structure precheck passed, the pve03 Python wrapper failed to parse at the PHP line beginning with $root. No Portal discovery or application mutation was reached. +- RCA: an outer raw triple-single-quoted guest Python payload contained an inner raw triple-single-quoted PHP payload. The inner delimiter terminated the outer Python string, causing PHP source to be parsed as Python. +- Safety: NEWFI95 was read-only, created no attempt marker, and did not reach the intended nested guest execution. Do not replay NEWFI95. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: an inner triple-single-quoted PHP literal terminated the outer triple-single-quoted Python guest payload in NEWFI95. The wrapper therefore failed parsing before the intended Portal discovery executed. +- Correction: NEWFI96 removed the nested Python payload layer entirely and passed one Python program directly to VM211 through qm guest exec stdin. The read-only Portal contract completed with QGA exit 0 and the implementation worktree remained unchanged. +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index e26bf222..afaaa80f 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1 @@ -{ - "schema_version": 1, - "channel": "homelab-runtime", - "command_id": "SUPPORT-260920-PVEPRO-RUSSIAN-RENDER-COMPAT-RCA-READONLY-728R2", - "status": "OK", - "rc": 0, - "host": "pve01", - "mode": "read-only", - "component": "pvepro-russian-render-compat-rca-readonly", - "started_at_utc": "2026-09-20T01:15:38Z", - "finished_at_utc": "2026-09-20T01:15:43Z", - "reference_register_checked": true, - "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", - "error_register_checked": true, - "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "08c58b6b904dacb9239f463c5b177bc7b653d604e2f5b5a0cc71036a03501e2d", - "duplicate_failed_command_blocked": false, - "block_reason": null, - "execution_started": true, - "change_declared": false, - "result_contract_valid": true, - "result_contract_status": null, - "result_contract_error": null, - "command_rc": 0, - "changes_made": false, - "rollback_started": false, - "rollback_restored": null, - "mutation_outcome": "NO_MUTATION", - "sanitized": true, - "secrets_included": false, - "private_addresses_included": false, - "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "44b857d085a80ed1072c60417b85c0fa29aa3babbc1422759948f16fc2750364", - "sanitized_output_sha256": "44b857d085a80ed1072c60417b85c0fa29aa3babbc1422759948f16fc2750364", - "output_truncated_in_json": false, - "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "PROD_STATUS=status: running\nSTAGE_STATUS=status: stopped\nSTAGE_NAME=pvepro-staging-v1\nSTAGE_ALL_LINK_DOWN=true\nPROD_NONCURRENT_SNAPSHOT_LINES=0\nSTAGE_NONCURRENT_SNAPSHOT_LINES=0\nARCHIVE_BYTES=298309\nARCHIVE_SHA256=68e0308b23a30dadd6399032fbef22e09693220a97a602ee6ef8a8c5492bce6b\nARCHIVE_XML_COUNT=1\nXML_BYTES=2240918\nXML_SHA256=36e02066e1d3f81827acb009937e79fcecbd686148bbbfe977dfeb3f5b000a63\nCOMPARE_TRANSPORT_RC=0\nCOMPARE_TRANSPORT_STDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nCOMPARE_GUEST_EXITCODE=0\nCOMPARE_OUTPUT_BEGIN\nZIP_STDIN_BYTES=298309\nZIP_STDIN_SHA256=68e0308b23a30dadd6399032fbef22e09693220a97a602ee6ef8a8c5492bce6b\nZIP_XML_COUNT=1\nEXTRACTED_XML_BYTES=2240918\nEXTRACTED_XML_SHA256=36e02066e1d3f81827acb009937e79fcecbd686148bbbfe977dfeb3f5b000a63\nPHP_COMPARE_RC=0\nPHP_COMPARE_STDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nPHP_COMPARE_OUTPUT_BEGIN\nXML_STDIN_BYTES=2240918\nXML_STDIN_SHA256=36e02066e1d3f81827acb009937e79fcecbd686148bbbfe977dfeb3f5b000a63\nXML_PARSE_OK=true\nMASTER_PHRASE_COUNT=11193\nMASTER_MAX_VERSION_ID=2031270\nPACK_PHRASE_COUNT=11142\nPACK_MAX_VERSION_ID=2031070\nPACK_BLANK_PHRASE_COUNT=112\nCOMMON_PHRASE_COUNT=11141\nPACK_ONLY_COUNT=1\nMASTER_ONLY_COUNT=52\nPACK_ONLY_SAMPLE=[\"php_version_minimum\"]\nMASTER_ONLY_SAMPLE=[\"trophy_description.1\",\"trophy_title.1\",\"trophy_description.2\",\"trophy_title.2\",\"trophy_description.3\",\"trophy_title.3\",\"trophy_description.4\",\"trophy_title.4\",\"trophy_description.5\",\"trophy_title.5\",\"trophy_description.6\",\"trophy_title.6\",\"trophy_description.7\",\"trophy_title.7\",\"trophy_description.8\",\"trophy_title.8\",\"trophy_description.9\",\"trophy_title.9\",\"warning_title.1\",\"warning_conv_title.1\",\"warning_conv_text.1\",\"warning_title.2\",\"warning_conv_title.2\",\"warning_conv_text.2\",\"warning_title.3\",\"warning_conv_title.3\",\"warning_conv_text.3\",\"warning_title.4\",\"warning_conv_title.4\",\"warning_conv_text.4\"]\nPLACEHOLDER_MISMATCH_COUNT=5\nPLACEHOLDER_MISMATCH_SAMPLE=[{\"title\":\"if_enabled_threads_posted_in_this_forum_will_automatically_be_featured\",\"pack\":[\"date\"],\"master\":[]},{\"title\":\"mod_log.thread_edit\",\"pack\":[\"elements\"],\"master\":[]},{\"title\":\"one_or_more_files_do_not_have_allowed_extension_x\",\"pack\":[\"allowed\"],\"master\":[\"allowed\",\"files\"]},{\"title\":\"php_version_not_newest\",\"pack\":[],\"master\":[\"recommended\"]},{\"title\":\"widget_pos_desc.featured_content_list_below_features\",\"pack\":[\"date\"],\"master\":[]}]\nIMPORT_SERVICE_FILE_SHA256=22344729c6871a640b678f3f02f4120d3eaed904f1aba274b8c4911920b1000b\nIMPORT_SERVICE_FILE_BYTES=4464\nIMPORT_SERVICE_KEY_LINES=[{\"line\":48,\"text\":\"$error = \\\\XF::phrase('provided_file_is_not_valid_language_xml');\"},{\"line\":54,\"text\":\"$error = \\\\XF::phrase('provided_file_is_not_valid_language_xml');\"},{\"line\":60,\"text\":\"$error = \\\\XF::phrase('this_language_xml_file_was_not_built_for_this_version_of_xenforo');\"},{\"line\":78,\"text\":\"$errors['addon_id'] = \\\\XF::phrase('xml_file_relates_add_on_not_installed_install_first');\"},{\"line\":97,\"text\":\"$errors['version_id'] = \\\\XF::phrase('xml_file_based_on_newer_version_than_installed');\"},{\"line\":106,\"text\":\"$errors['language_code'] = \\\\XF::phrase('locale_of_language_importing_differs_overwriting_is_correct');\"},{\"line\":113,\"text\":\"public function importFromXml(\\\\SimpleXMLElement $document)\"},{\"line\":122,\"text\":\"$phraseImporter = $this->service(\\\\XF\\\\Service\\\\Phrase\\\\ImportService::class, $language);\"},{\"line\":123,\"text\":\"$phraseImporter->importFromXml($document, $addOnId);\"}]\nCURRENT_JOB_COUNT=3\nCURRENT_MANUAL_JOB_COUNT=0\nCURRENT_ERROR_COUNT=16\nCURRENT_DEFAULT_LANGUAGE_ID=1\nCURRENT_RU_COUNT=0\nCURRENT_THREAD_COUNT=44\nCURRENT_POST_COUNT=44\nPHP_COMPARE_OUTPUT_END\nCOMPARE_OUTPUT_END\nSOURCE_SEARCH_TRANSPORT_RC=0\nSOURCE_SEARCH_EXITCODE=0\nSOURCE_LANGUAGE_REBUILD_HITS=[{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":3,\"text\":\"namespace XF\\\\Service\\\\Language;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":5,\"text\":\"use XF\\\\Entity\\\\Language;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":13,\"text\":\"* @var Language|null\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":15,\"text\":\"protected $overwriteLanguage;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":18,\"text\":\"* @var Language|null\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":20,\"text\":\"protected $parentLanguage;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":22,\"text\":\"public function setOverwriteLanguage(Language $language)\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":24,\"text\":\"$this->overwriteLanguage = $language;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":25,\"text\":\"$this->parentLanguage = null;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":28,\"text\":\"public function getOverwriteLanguage()\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":30,\"text\":\"return $this->overwriteLanguage;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":33,\"text\":\"public function setParentLanguage(?Language $language = null)\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":35,\"text\":\"$this->parentLanguage = $language;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":36,\"text\":\"$this->overwriteLanguage = null;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":39,\"text\":\"public function getParentLanguage()\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":41,\"text\":\"return $this->parentLanguage;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":48,\"text\":\"$error = \\\\XF::phrase('provided_file_is_not_valid_language_xml');\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":52,\"text\":\"if ($rootElement->getName() != 'language' || (string) $rootElement['title'] === '')\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":54,\"text\":\"$error = \\\\XF::phrase('provided_file_is_not_valid_language_xml');\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":60,\"text\":\"$error = \\\\XF::phrase('this_language_xml_file_was_not_built_for_this_version_of_xenforo');\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":78,\"text\":\"$errors['addon_id'] = \\\\XF::phrase('xml_file_relates_add_on_not_installed_install_first');\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":97,\"text\":\"$errors['version_id'] = \\\\XF::phrase('xml_file_based_on_newer_version_than_installed');\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":101,\"text\":\"if ($this->overwriteLanguage)\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":103,\"text\":\"$languageCode = (string) $document['language_code'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":104,\"text\":\"if ($languageCode != $this->overwriteLanguage->language_code)\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":106,\"text\":\"$errors['language_code'] = \\\\XF::phrase('locale_of_language_importing_differs_overwriting_is_correct');\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":113,\"text\":\"public function importFromXml(\\\\SimpleXMLElement $document)\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":120,\"text\":\"$language = $this->getTargetLanguage($document);\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":122,\"text\":\"$phraseImporter = $this->service(\\\\XF\\\\Service\\\\Phrase\\\\ImportService::class, $language);\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":123,\"text\":\"$phraseImporter->importFromXml($document, $addOnId);\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":127,\"text\":\"return $language;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":130,\"text\":\"protected function getTargetLanguage(\\\\SimpleXMLElement $document)\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":132,\"text\":\"if ($this->overwriteLanguage)\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":134,\"text\":\"return $this->overwriteLanguage;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":138,\"text\":\"$language = $this->em()->create(Language::class);\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":139,\"text\":\"$language->title = (string) $document['title'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":140,\"text\":\"$language->parent_id = $this->parentLanguage ? $this->parentLanguage->language_id : 0;\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":141,\"text\":\"$language->date_format = (string) $document['date_format'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":142,\"text\":\"$language->date_short_format = (string) $document['date_short_format'] ?: 'M \\\\'y';\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":143,\"text\":\"$language->date_short_recent_format = (string) $document['date_short_recent_format'] ?: 'M j';\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":144,\"text\":\"$language->time_format = (string) $document['time_format'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":145,\"text\":\"$language->currency_format = (string) $document['currency_format'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":146,\"text\":\"$language->week_start = (string) $document['week_start'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":147,\"text\":\"$language->decimal_point = (string) $document['decimal_point'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":148,\"text\":\"$language->thousands_separator = (string) $document['thousands_separator'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":149,\"text\":\"$language->label_separator = (string) $document['label_separator'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":150,\"text\":\"$language->comma_separator = (string) $document['comma_separator'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":151,\"text\":\"$language->ellipsis = (string) $document['ellipsis'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":152,\"text\":\"$language->parenthesis_open = (string) $document['parenthesis_open'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":153,\"text\":\"$language->parenthesis_close = (string) $document['parenthesis_close'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":154,\"text\":\"$language->language_code = (string) $document['language_code'];\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":155,\"text\":\"$language->text_direction = (string) $document['text_direction'] ?: 'LTR';\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":159,\"text\":\"$language->user_selectable = (string) $document['user_selectable'] === '1';\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":162,\"text\":\"$language->save(true, false);\"},{\"file\":\"ImportService.php\",\"file_sha256\":\"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1\",\"line\":164,\"text\":\"return $language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":3,\"text\":\"namespace XF\\\\Service\\\\Language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":7,\"text\":\"use XF\\\\Entity\\\\Language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":17,\"text\":\"* @var Language\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":19,\"text\":\"protected $language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":28,\"text\":\"public function __construct(App $app, Language $language)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":31,\"text\":\"$this->setLanguage($language);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":34,\"text\":\"public function setLanguage(Language $language)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":36,\"text\":\"$this->language = $language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":39,\"text\":\"public function getLanguage()\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":41,\"text\":\"return $this->language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":67,\"text\":\"$languageNode = $this->getLanguageNode($document);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":68,\"text\":\"$document->appendChild($languageNode);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":70,\"text\":\"foreach ($this->getExportablePhrases() AS $phrase)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":72,\"text\":\"$phraseNode = $this->getPhraseNode($document, $phrase);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":73,\"text\":\"$languageNode->appendChild($phraseNode);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":81,\"text\":\"$title = str_replace(' ', '-', Str::transliterate($this->language->title));\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":84,\"text\":\"return \\\"language-{$title}{$addOnLimit}.xml\\\";\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":102,\"text\":\"protected function getLanguageNode(\\\\DOMDocument $document)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":104,\"text\":\"$language = $this->language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":106,\"text\":\"$languageNode = $document->createElement('language');\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":107,\"text\":\"$languageNode->setAttribute('title', $language->title);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":108,\"text\":\"$languageNode->setAttribute('date_format', $language->date_format);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":109,\"text\":\"$languageNode->setAttribute('date_short_format', $language->date_short_format);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":110,\"text\":\"$languageNode->setAttribute('date_short_recent_format', $language->date_short_recent_format);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":111,\"text\":\"$languageNode->setAttribute('time_format', $language->time_format);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":112,\"text\":\"$languageNode->setAttribute('currency_format', $language->currency_format);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":113,\"text\":\"$languageNode->setAttribute('week_start', $language->week_start);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":114,\"text\":\"$languageNode->setAttribute('decimal_point', $language->decimal_point);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":115,\"text\":\"$languageNode->setAttribute('thousands_separator', $language->thousands_separator);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":116,\"text\":\"$languageNode->setAttribute('label_separator', $language->label_separator);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":117,\"text\":\"$languageNode->setAttribute('comma_separator', $language->comma_separator);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":118,\"text\":\"$languageNode->setAttribute('ellipsis', $language->ellipsis);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":119,\"text\":\"$languageNode->setAttribute('parenthesis_open', $language->parenthesis_open);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":120,\"text\":\"$languageNode->setAttribute('parenthesis_close', $language->parenthesis_close);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":121,\"text\":\"$languageNode->setAttribute('language_code', $language->language_code);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":122,\"text\":\"$languageNode->setAttribute('text_direction', $language->text_direction);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":123,\"text\":\"$languageNode->setAttribute('user_selectable', $language->user_selectable);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":126,\"text\":\"$languageNode->setAttribute('addon_id', $this->addOn->addon_id);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":127,\"text\":\"$languageNode->setAttribute('base_version_id', $this->addOn->version_id);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":131,\"text\":\"$languageNode->setAttribute('base_version_id', \\\\XF::$versionId);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":133,\"text\":\"$languageNode->setAttribute('export_version', self::EXPORT_VERSION_ID);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":134,\"text\":\"$document->appendChild($languageNode);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":136,\"text\":\"return $languageNode;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":139,\"text\":\"protected function getPhraseNode(\\\\DOMDocument $document, array $phrase)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":141,\"text\":\"$phraseNode = $document->createElement('phrase');\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":142,\"text\":\"$phraseNode->setAttribute('title', $phrase['title']);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":143,\"text\":\"$phraseNode->setAttribute('addon_id', $phrase['addon_id']);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":144,\"text\":\"if ($phrase['global_cache'])\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":146,\"text\":\"$phraseNode->setAttribute('global_cache', $phrase['global_cache']);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":148,\"text\":\"$phraseNode->setAttribute('version_id', $phrase['version_id']);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":149,\"text\":\"$phraseNode->setAttribute('version_string', $phrase['version_string']);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":150,\"text\":\"$phraseNode->appendChild(\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":151,\"text\":\"Xml::createDomCdataSection($document, $phrase['phrase_text'])\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":154,\"text\":\"return $phraseNode;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":160,\"text\":\"protected function getExportablePhrases()\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":162,\"text\":\"$language = $this->language;\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":171,\"text\":\"SELECT phrase.*,\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":172,\"text\":\"IF(master.phrase_id IS NOT NULL, master.addon_id, phrase.addon_id) AS addon_id\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":173,\"text\":\"FROM xf_phrase_map AS map\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":174,\"text\":\"INNER JOIN xf_phrase AS phrase ON (map.phrase_id = phrase.phrase_id)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":175,\"text\":\"LEFT JOIN xf_phrase AS master ON (master.title = phrase.title AND master.language_id = 0)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":176,\"text\":\"WHERE map.language_id = ?\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":179,\"text\":\"\\\", $language->language_id);\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":184,\"text\":\"SELECT phrase.*,\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":185,\"text\":\"IF(master.phrase_id, master.addon_id, phrase.addon_id) AS addon_id\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":186,\"text\":\"FROM xf_phrase AS phrase\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":187,\"text\":\"LEFT JOIN xf_phrase AS master ON (master.title = phrase.title AND master.language_id = 0)\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":188,\"text\":\"WHERE phrase.language_id = ?\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":190,\"text\":\"ORDER BY phrase.title\"},{\"file\":\"ExportService.php\",\"file_sha256\":\"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128\",\"line\":191,\"text\":\"\\\", $language->language_id);\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":3,\"text\":\"namespace XF\\\\Service\\\\Language;\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":5,\"text\":\"use XF\\\\Entity\\\\Language;\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":6,\"text\":\"use XF\\\\Repository\\\\LanguageRepository;\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":10,\"text\":\"class RebuildService extends AbstractService\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":15,\"text\":\"protected $languageTree;\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":17,\"text\":\"protected function setupLanguageTree()\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":19,\"text\":\"if ($this->languageTree)\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":24,\"text\":\"$repo = $this->app->em()->getRepository(LanguageRepository::class);\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":25,\"text\":\"$this->languageTree = $repo->getLanguageTree(false);\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":28,\"text\":\"public function rebuildFullParentList()\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":30,\"text\":\"$this->setupLanguageTree();\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":33,\"text\":\"$this->_rebuildParentList(0, []);\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":37,\"text\":\"protected function _rebuildParentList($id, array $path)\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":41,\"text\":\"/** @var Language $language */\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":42,\"text\":\"$language = $this->languageTree->getData($id);\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":43,\"text\":\"if ($language)\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":45,\"text\":\"if ($path != $language->parent_list)\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":47,\"text\":\"$language->fastUpdate('parent_list', $path);\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":51,\"text\":\"foreach ($this->languageTree->childIds($id) AS $childId)\"},{\"file\":\"RebuildService.php\",\"file_sha256\":\"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467\",\"line\":53,\"text\":\"$this->_rebuildParentList($childId, $path);\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":5,\"text\":\"use XF\\\\Entity\\\\Language;\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":7,\"text\":\"use XF\\\\Finder\\\\LanguageFinder;\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":8,\"text\":\"use XF\\\\Finder\\\\PhraseFinder;\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":13,\"text\":\"class LanguageRepository extends Repository\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":16,\"text\":\"* @return LanguageFinder\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":18,\"text\":\"public function findLanguages()\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":20,\"text\":\"return $this->finder(LanguageFinder::class)->order('language_id');\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":23,\"text\":\"public function showMasterLanguage()\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":28,\"text\":\"public function getMasterLanguage()\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":30,\"text\":\"$language = $this->em->create(Language::class);\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":31,\"text\":\"$language->setTrusted('language_id', 0);\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":32,\"text\":\"$language->setTrusted('parent_id', -1);\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":33,\"text\":\"$language->title = \\\\XF::phrase('master_language');\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":34,\"text\":\"$language->setReadOnly(true);\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":36,\"text\":\"return $language;\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":39,\"text\":\"public function getLanguageTree($withMaster = null)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":41,\"text\":\"$languages = $this->findLanguages()->fetch();\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":42,\"text\":\"return $this->createLanguageTree($languages, $withMaster);\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":48,\"text\":\"* @return Language[]\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":50,\"text\":\"public function getUserSelectableLanguages(?User $user = null)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":57,\"text\":\"$languages = [];\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":58,\"text\":\"foreach ($this->getLanguageTree(false)->getFlattened(0) AS $id => $record)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":62,\"text\":\"$languages[$id] = $record['record'];\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":66,\"text\":\"return $languages;\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":69,\"text\":\"public function createLanguageTree($languages, $withMaster = null, $rootId = null)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":77,\"text\":\"if ($languages instanceof AbstractCollection)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":79,\"text\":\"$languages = $languages->toArray();\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":81,\"text\":\"$languages[0] = $this->getMasterLanguage();\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":89,\"text\":\"return new Tree($languages, 'parent_id', $rootId);\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":92,\"text\":\"public function rebuildGlobalPhraseCache()\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":94,\"text\":\"$titles = $this->finder(PhraseFinder::class)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":95,\"text\":\"->where('language_id', 0)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":96,\"text\":\"->where('global_cache', 1)\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":100,\"text\":\"$languages = $this->findLanguages()->fetch();\"},{\"file\":\"LanguageRepository.php\",\"file_sha256\":\"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf\",\"line\":102,\"text\":\"$globalPhrases = [];\"}]\nNEWFI_LANGUAGE_WORKFLOW_HITS=[{\"path\":\"docs/operations/addons-language.md\",\"line\":18,\"text\":\"- Core Russian created `language_id=2`, title `Russian (RU)`, language code `ru-RU` through `XF\\\\Service\\\\Language\\\\ImportService`.\"},{\"path\":\"docs/operations/addons-language.md\",\"line\":20,\"text\":\"- Accepted phrase counts for language 2: XF `11142`, XFMG `722`, XFRM `464`, total `12328`.\"},{\"path\":\"docs/operations/addons-language.md\",\"line\":22,\"text\":\"- `defaultLanguageId` was changed through the XenForo Option repository from `1` to `2` only after all three packs passed acceptance.\"},{\"path\":\"docs/operations/addons-language.md\",\"line\":32,\"text\":\"- Accepted manual job count: `0`.\"},{\"path\":\"scripts/verify-addons-language.sh\",\"line\":14,\"text\":\"phrase_rows=$(mariadb --defaults-extra-file=/etc/newfi/db.cnf --batch --skip-column-names -e \\\"SELECT CONCAT_WS(0x7c,addon_id,COUNT(*)) FROM xf_phrase WHERE language_id=2 GROUP BY addon_id ORDER BY addon_id\\\")\"},{\"path\":\"scripts/verify-addons-language.sh\",\"line\":19,\"text\":\"phrases=$(mariadb --defaults-extra-file=/etc/newfi/db.cnf --batch --skip-column-names -e \\\"SELECT COUNT(*) FROM xf_phrase WHERE language_id=2\\\")\"},{\"path\":\"scripts/verify-addons-language.sh\",\"line\":22,\"text\":\"manual=$(mariadb --defaults-extra-file=/etc/newfi/db.cnf --batch --skip-column-names -e \\\"SELECT COUNT(*) FROM xf_job WHERE manual_execute=1\\\")\"},{\"path\":\"scripts/verify-addons-language.sh\",\"line\":25,\"text\":\"expected_phrases=$(printf \\\"XF|11142\\\\nXFMG|722\\\\nXFRM|464\\\")\"},{\"path\":\"scripts/verify-addons-language.sh\",\"line\":26,\"text\":\"printf \\\"ADDON_ROWS_BEGIN\\\\n%s\\\\nADDON_ROWS_END\\\\nLANGUAGE_ROWS_BEGIN\\\\n%s\\\\nLANGUAGE_ROWS_END\\\\nRU_PHRASE_ROWS_BEGIN\\\\n%s\\\\nRU_PHRASE_ROWS_END\\\\nDEFAULT_LANGUAGE_ID=%s\\\\nRU_PHRASE_COUNT=%s\\\\nDB_TABLES=%s\\\\nBOARD_ROW=%s|%s|%s\\\\nERROR_LOG_COUNT=%s\\\\nMANUAL_JOB_COUNT=%s\\\\n\\\" \\\"$addon_rows\\\" \\\"$language_rows\\\" \\\"$phrase_rows\\\" \\\"$default_lang\\\" \\\"$phrases\\\" \\\"$tables\\\" \\\"$board\\\" \\\"$title\\\" \\\"$url\\\" \\\"$errors\\\" \\\"$manual\\\"\"},{\"path\":\"scripts/verify-addons-language.sh\",\"line\":29,\"text\":\"test \\\"$phrase_rows\\\" = \\\"$expected_phrases\\\"\"},{\"path\":\"scripts/verify-addons-language.sh\",\"line\":31,\"text\":\"test \\\"$phrases\\\" -eq 12328\"}]\nEDGE_LOG_PROBE_TRANSPORT_RC=2\nROLLBACK_STATE_OK=true\nTASK_COMPLETE=true\nTASK_RESULT=PASS_PVEPRO_RUSSIAN_RENDER_COMPAT_RCA\nNO_MUTATION=true\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260920-PVEPRO-RUSSIAN-RENDER-COMPAT-RCA-READONLY-728R2\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" -} +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260920T011701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-09-20T01:17:01Z","finished_at_utc":"2026-09-20T01:17:02Z","reference_register_checked":true,"reference_sha256":"5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66","error_register_checked":true,"error_register_sha256":"3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0","changes_made":false,"sanitized":true,"secrets_included":false,"private_addresses_included":false,"output":"AUTOMATIC_CLUSTER_CONTEXT_REFRESH=OK"} diff --git a/runtime/latest.txt b/runtime/latest.txt index 6b066ae8..65e13b88 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,92 +1,162 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260920-PVEPRO-RUSSIAN-RENDER-COMPAT-RCA-READONLY-728R2 +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z STATUS=OK RC=0 HOST=pve01 -MODE=read-only -COMPONENT=pvepro-russian-render-compat-rca-readonly -REFERENCE_REGISTER_CHECK=OK -REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=08c58b6b904dacb9239f463c5b177bc7b653d604e2f5b5a0cc71036a03501e2d -DUPLICATE_FAILED_COMMAND_BLOCKED=false -EXECUTION_STARTED=true -CHANGE_DECLARED=false -RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=NOT_APPLICABLE -RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=0 -CHANGES_MADE=false -ROLLBACK_STARTED=false -ROLLBACK_RESTORED=null -MUTATION_OUTCOME=NO_MUTATION -SANITIZED=yes -SECRETS_INCLUDED=no -PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=44b857d085a80ed1072c60417b85c0fa29aa3babbc1422759948f16fc2750364 -SANITIZED_OUTPUT_SHA256=44b857d085a80ed1072c60417b85c0fa29aa3babbc1422759948f16fc2750364 +COMPONENT=cluster-context +REFERENCE_SHA[PRIVATE_IP]e5154c41cb[PRIVATE_IP]aca68090be[PRIVATE_IP]bf[PRIVATE_IP]df[PRIVATE_IP] +ERROR_REGISTER_SHA[PRIVATE_IP]ec0f527ed3afeed[PRIVATE_IP]ee[PRIVATE_IP]bbfb[PRIVATE_IP]af4ba7ba0 OUTPUT_BEGIN -PROD_STATUS=status: running -STAGE_STATUS=status: stopped -STAGE_NAME=pvepro-staging-v1 -STAGE_ALL_LINK_DOWN=true -PROD_NONCURRENT_SNAPSHOT_LINES=0 -STAGE_NONCURRENT_SNAPSHOT_LINES=0 -ARCHIVE_BYTES=298309 -ARCHIVE_SHA256=68e0308b23a30dadd6399032fbef22e09693220a97a602ee6ef8a8c5492bce6b -ARCHIVE_XML_COUNT=1 -XML_BYTES=2240918 -XML_SHA256=36e02066e1d3f81827acb009937e79fcecbd686148bbbfe977dfeb3f5b000a63 -COMPARE_TRANSPORT_RC=0 -COMPARE_TRANSPORT_STDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -COMPARE_GUEST_EXITCODE=0 -COMPARE_OUTPUT_BEGIN -ZIP_STDIN_BYTES=298309 -ZIP_STDIN_SHA256=68e0308b23a30dadd6399032fbef22e09693220a97a602ee6ef8a8c5492bce6b -ZIP_XML_COUNT=1 -EXTRACTED_XML_BYTES=2240918 -EXTRACTED_XML_SHA256=36e02066e1d3f81827acb009937e79fcecbd686148bbbfe977dfeb3f5b000a63 -PHP_COMPARE_RC=0 -PHP_COMPARE_STDERR_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -PHP_COMPARE_OUTPUT_BEGIN -XML_STDIN_BYTES=2240918 -XML_STDIN_SHA256=36e02066e1d3f81827acb009937e79fcecbd686148bbbfe977dfeb3f5b000a63 -XML_PARSE_OK=true -MASTER_PHRASE_COUNT=11193 -MASTER_MAX_VERSION_ID=2031270 -PACK_PHRASE_COUNT=11142 -PACK_MAX_VERSION_ID=2031070 -PACK_BLANK_PHRASE_COUNT=112 -COMMON_PHRASE_COUNT=11141 -PACK_ONLY_COUNT=1 -MASTER_ONLY_COUNT=52 -PACK_ONLY_SAMPLE=["php_version_minimum"] -MASTER_ONLY_SAMPLE=["trophy_description.1","trophy_title.1","trophy_description.2","trophy_title.2","trophy_description.3","trophy_title.3","trophy_description.4","trophy_title.4","trophy_description.5","trophy_title.5","trophy_description.6","trophy_title.6","trophy_description.7","trophy_title.7","trophy_description.8","trophy_title.8","trophy_description.9","trophy_title.9","warning_title.1","warning_conv_title.1","warning_conv_text.1","warning_title.2","warning_conv_title.2","warning_conv_text.2","warning_title.3","warning_conv_title.3","warning_conv_text.3","warning_title.4","warning_conv_title.4","warning_conv_text.4"] -PLACEHOLDER_MISMATCH_COUNT=5 -PLACEHOLDER_MISMATCH_SAMPLE=[{"title":"if_enabled_threads_posted_in_this_forum_will_automatically_be_featured","pack":["date"],"master":[]},{"title":"mod_log.thread_edit","pack":["elements"],"master":[]},{"title":"one_or_more_files_do_not_have_allowed_extension_x","pack":["allowed"],"master":["allowed","files"]},{"title":"php_version_not_newest","pack":[],"master":["recommended"]},{"title":"widget_pos_desc.featured_content_list_below_features","pack":["date"],"master":[]}] -IMPORT_SERVICE_FILE_SHA256=22344729c6871a640b678f3f02f4120d3eaed904f1aba274b8c4911920b1000b -IMPORT_SERVICE_FILE_BYTES=4464 -IMPORT_SERVICE_KEY_LINES=[{"line":48,"text":"$error = \\XF::phrase('provided_file_is_not_valid_language_xml');"},{"line":54,"text":"$error = \\XF::phrase('provided_file_is_not_valid_language_xml');"},{"line":60,"text":"$error = \\XF::phrase('this_language_xml_file_was_not_built_for_this_version_of_xenforo');"},{"line":78,"text":"$errors['addon_id'] = \\XF::phrase('xml_file_relates_add_on_not_installed_install_first');"},{"line":97,"text":"$errors['version_id'] = \\XF::phrase('xml_file_based_on_newer_version_than_installed');"},{"line":106,"text":"$errors['language_code'] = \\XF::phrase('locale_of_language_importing_differs_overwriting_is_correct');"},{"line":113,"text":"public function importFromXml(\\SimpleXMLElement $document)"},{"line":122,"text":"$phraseImporter = $this->service(\\XF\\Service\\Phrase\\ImportService::class, $language);"},{"line":123,"text":"$phraseImporter->importFromXml($document, $addOnId);"}] -CURRENT_JOB_COUNT=3 -CURRENT_MANUAL_JOB_COUNT=0 -CURRENT_ERROR_COUNT=16 -CURRENT_DEFAULT_LANGUAGE_ID=1 -CURRENT_RU_COUNT=0 -CURRENT_THREAD_COUNT=44 -CURRENT_POST_COUNT=44 -PHP_COMPARE_OUTPUT_END -COMPARE_OUTPUT_END -SOURCE_SEARCH_TRANSPORT_RC=0 -SOURCE_SEARCH_EXITCODE=0 -SOURCE_LANGUAGE_REBUILD_HITS=[{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":3,"text":"namespace XF\\Service\\Language;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":5,"text":"use XF\\Entity\\Language;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":13,"text":"* @var Language|null"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":15,"text":"protected $overwriteLanguage;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":18,"text":"* @var Language|null"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":20,"text":"protected $parentLanguage;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":22,"text":"public function setOverwriteLanguage(Language $language)"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":24,"text":"$this->overwriteLanguage = $language;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":25,"text":"$this->parentLanguage = null;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":28,"text":"public function getOverwriteLanguage()"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":30,"text":"return $this->overwriteLanguage;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":33,"text":"public function setParentLanguage(?Language $language = null)"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":35,"text":"$this->parentLanguage = $language;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":36,"text":"$this->overwriteLanguage = null;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":39,"text":"public function getParentLanguage()"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":41,"text":"return $this->parentLanguage;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":48,"text":"$error = \\XF::phrase('provided_file_is_not_valid_language_xml');"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":52,"text":"if ($rootElement->getName() != 'language' || (string) $rootElement['title'] === '')"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":54,"text":"$error = \\XF::phrase('provided_file_is_not_valid_language_xml');"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":60,"text":"$error = \\XF::phrase('this_language_xml_file_was_not_built_for_this_version_of_xenforo');"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":78,"text":"$errors['addon_id'] = \\XF::phrase('xml_file_relates_add_on_not_installed_install_first');"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":97,"text":"$errors['version_id'] = \\XF::phrase('xml_file_based_on_newer_version_than_installed');"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":101,"text":"if ($this->overwriteLanguage)"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":103,"text":"$languageCode = (string) $document['language_code'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":104,"text":"if ($languageCode != $this->overwriteLanguage->language_code)"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":106,"text":"$errors['language_code'] = \\XF::phrase('locale_of_language_importing_differs_overwriting_is_correct');"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":113,"text":"public function importFromXml(\\SimpleXMLElement $document)"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":120,"text":"$language = $this->getTargetLanguage($document);"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":122,"text":"$phraseImporter = $this->service(\\XF\\Service\\Phrase\\ImportService::class, $language);"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":123,"text":"$phraseImporter->importFromXml($document, $addOnId);"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":127,"text":"return $language;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":130,"text":"protected function getTargetLanguage(\\SimpleXMLElement $document)"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":132,"text":"if ($this->overwriteLanguage)"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":134,"text":"return $this->overwriteLanguage;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":138,"text":"$language = $this->em()->create(Language::class);"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":139,"text":"$language->title = (string) $document['title'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":140,"text":"$language->parent_id = $this->parentLanguage ? $this->parentLanguage->language_id : 0;"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":141,"text":"$language->date_format = (string) $document['date_format'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":142,"text":"$language->date_short_format = (string) $document['date_short_format'] ?: 'M \\'y';"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":143,"text":"$language->date_short_recent_format = (string) $document['date_short_recent_format'] ?: 'M j';"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":144,"text":"$language->time_format = (string) $document['time_format'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":145,"text":"$language->currency_format = (string) $document['currency_format'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":146,"text":"$language->week_start = (string) $document['week_start'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":147,"text":"$language->decimal_point = (string) $document['decimal_point'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":148,"text":"$language->thousands_separator = (string) $document['thousands_separator'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":149,"text":"$language->label_separator = (string) $document['label_separator'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":150,"text":"$language->comma_separator = (string) $document['comma_separator'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":151,"text":"$language->ellipsis = (string) $document['ellipsis'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":152,"text":"$language->parenthesis_open = (string) $document['parenthesis_open'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":153,"text":"$language->parenthesis_close = (string) $document['parenthesis_close'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":154,"text":"$language->language_code = (string) $document['language_code'];"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":155,"text":"$language->text_direction = (string) $document['text_direction'] ?: 'LTR';"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":159,"text":"$language->user_selectable = (string) $document['user_selectable'] === '1';"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":162,"text":"$language->save(true, false);"},{"file":"ImportService.php","file_sha256":"a2698fb71908d9db9430e937c265cf7cd26c706e33a26ca6103be926d0fd10a1","line":164,"text":"return $language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":3,"text":"namespace XF\\Service\\Language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":7,"text":"use XF\\Entity\\Language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":17,"text":"* @var Language"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":19,"text":"protected $language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":28,"text":"public function __construct(App $app, Language $language)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":31,"text":"$this->setLanguage($language);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":34,"text":"public function setLanguage(Language $language)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":36,"text":"$this->language = $language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":39,"text":"public function getLanguage()"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":41,"text":"return $this->language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":67,"text":"$languageNode = $this->getLanguageNode($document);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":68,"text":"$document->appendChild($languageNode);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":70,"text":"foreach ($this->getExportablePhrases() AS $phrase)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":72,"text":"$phraseNode = $this->getPhraseNode($document, $phrase);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":73,"text":"$languageNode->appendChild($phraseNode);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":81,"text":"$title = str_replace(' ', '-', Str::transliterate($this->language->title));"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":84,"text":"return \"language-{$title}{$addOnLimit}.xml\";"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":102,"text":"protected function getLanguageNode(\\DOMDocument $document)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":104,"text":"$language = $this->language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":106,"text":"$languageNode = $document->createElement('language');"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":107,"text":"$languageNode->setAttribute('title', $language->title);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":108,"text":"$languageNode->setAttribute('date_format', $language->date_format);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":109,"text":"$languageNode->setAttribute('date_short_format', $language->date_short_format);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":110,"text":"$languageNode->setAttribute('date_short_recent_format', $language->date_short_recent_format);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":111,"text":"$languageNode->setAttribute('time_format', $language->time_format);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":112,"text":"$languageNode->setAttribute('currency_format', $language->currency_format);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":113,"text":"$languageNode->setAttribute('week_start', $language->week_start);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":114,"text":"$languageNode->setAttribute('decimal_point', $language->decimal_point);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":115,"text":"$languageNode->setAttribute('thousands_separator', $language->thousands_separator);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":116,"text":"$languageNode->setAttribute('label_separator', $language->label_separator);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":117,"text":"$languageNode->setAttribute('comma_separator', $language->comma_separator);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":118,"text":"$languageNode->setAttribute('ellipsis', $language->ellipsis);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":119,"text":"$languageNode->setAttribute('parenthesis_open', $language->parenthesis_open);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":120,"text":"$languageNode->setAttribute('parenthesis_close', $language->parenthesis_close);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":121,"text":"$languageNode->setAttribute('language_code', $language->language_code);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":122,"text":"$languageNode->setAttribute('text_direction', $language->text_direction);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":123,"text":"$languageNode->setAttribute('user_selectable', $language->user_selectable);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":126,"text":"$languageNode->setAttribute('addon_id', $this->addOn->addon_id);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":127,"text":"$languageNode->setAttribute('base_version_id', $this->addOn->version_id);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":131,"text":"$languageNode->setAttribute('base_version_id', \\XF::$versionId);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":133,"text":"$languageNode->setAttribute('export_version', self::EXPORT_VERSION_ID);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":134,"text":"$document->appendChild($languageNode);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":136,"text":"return $languageNode;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":139,"text":"protected function getPhraseNode(\\DOMDocument $document, array $phrase)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":141,"text":"$phraseNode = $document->createElement('phrase');"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":142,"text":"$phraseNode->setAttribute('title', $phrase['title']);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":143,"text":"$phraseNode->setAttribute('addon_id', $phrase['addon_id']);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":144,"text":"if ($phrase['global_cache'])"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":146,"text":"$phraseNode->setAttribute('global_cache', $phrase['global_cache']);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":148,"text":"$phraseNode->setAttribute('version_id', $phrase['version_id']);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":149,"text":"$phraseNode->setAttribute('version_string', $phrase['version_string']);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":150,"text":"$phraseNode->appendChild("},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":151,"text":"Xml::createDomCdataSection($document, $phrase['phrase_text'])"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":154,"text":"return $phraseNode;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":160,"text":"protected function getExportablePhrases()"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":162,"text":"$language = $this->language;"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":171,"text":"SELECT phrase.*,"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":172,"text":"IF(master.phrase_id IS NOT NULL, master.addon_id, phrase.addon_id) AS addon_id"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":173,"text":"FROM xf_phrase_map AS map"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":174,"text":"INNER JOIN xf_phrase AS phrase ON (map.phrase_id = phrase.phrase_id)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":175,"text":"LEFT JOIN xf_phrase AS master ON (master.title = phrase.title AND master.language_id = 0)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":176,"text":"WHERE map.language_id = ?"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":179,"text":"\", $language->language_id);"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":184,"text":"SELECT phrase.*,"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":185,"text":"IF(master.phrase_id, master.addon_id, phrase.addon_id) AS addon_id"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":186,"text":"FROM xf_phrase AS phrase"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":187,"text":"LEFT JOIN xf_phrase AS master ON (master.title = phrase.title AND master.language_id = 0)"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":188,"text":"WHERE phrase.language_id = ?"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":190,"text":"ORDER BY phrase.title"},{"file":"ExportService.php","file_sha256":"5a4f6e45d47812fa8870d9cc8e7df793b79b0bde135d4d314623a3a6a3083128","line":191,"text":"\", $language->language_id);"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":3,"text":"namespace XF\\Service\\Language;"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":5,"text":"use XF\\Entity\\Language;"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":6,"text":"use XF\\Repository\\LanguageRepository;"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":10,"text":"class RebuildService extends AbstractService"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":15,"text":"protected $languageTree;"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":17,"text":"protected function setupLanguageTree()"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":19,"text":"if ($this->languageTree)"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":24,"text":"$repo = $this->app->em()->getRepository(LanguageRepository::class);"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":25,"text":"$this->languageTree = $repo->getLanguageTree(false);"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":28,"text":"public function rebuildFullParentList()"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":30,"text":"$this->setupLanguageTree();"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":33,"text":"$this->_rebuildParentList(0, []);"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":37,"text":"protected function _rebuildParentList($id, array $path)"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":41,"text":"/** @var Language $language */"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":42,"text":"$language = $this->languageTree->getData($id);"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":43,"text":"if ($language)"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":45,"text":"if ($path != $language->parent_list)"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":47,"text":"$language->fastUpdate('parent_list', $path);"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":51,"text":"foreach ($this->languageTree->childIds($id) AS $childId)"},{"file":"RebuildService.php","file_sha256":"2338e38fed0ca55e11b0756752ba422d2d731236f25d9566c8870fb8097e1467","line":53,"text":"$this->_rebuildParentList($childId, $path);"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":5,"text":"use XF\\Entity\\Language;"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":7,"text":"use XF\\Finder\\LanguageFinder;"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":8,"text":"use XF\\Finder\\PhraseFinder;"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":13,"text":"class LanguageRepository extends Repository"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":16,"text":"* @return LanguageFinder"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":18,"text":"public function findLanguages()"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":20,"text":"return $this->finder(LanguageFinder::class)->order('language_id');"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":23,"text":"public function showMasterLanguage()"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":28,"text":"public function getMasterLanguage()"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":30,"text":"$language = $this->em->create(Language::class);"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":31,"text":"$language->setTrusted('language_id', 0);"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":32,"text":"$language->setTrusted('parent_id', -1);"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":33,"text":"$language->title = \\XF::phrase('master_language');"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":34,"text":"$language->setReadOnly(true);"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":36,"text":"return $language;"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":39,"text":"public function getLanguageTree($withMaster = null)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":41,"text":"$languages = $this->findLanguages()->fetch();"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":42,"text":"return $this->createLanguageTree($languages, $withMaster);"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":48,"text":"* @return Language[]"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":50,"text":"public function getUserSelectableLanguages(?User $user = null)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":57,"text":"$languages = [];"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":58,"text":"foreach ($this->getLanguageTree(false)->getFlattened(0) AS $id => $record)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":62,"text":"$languages[$id] = $record['record'];"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":66,"text":"return $languages;"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":69,"text":"public function createLanguageTree($languages, $withMaster = null, $rootId = null)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":77,"text":"if ($languages instanceof AbstractCollection)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":79,"text":"$languages = $languages->toArray();"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":81,"text":"$languages[0] = $this->getMasterLanguage();"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":89,"text":"return new Tree($languages, 'parent_id', $rootId);"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":92,"text":"public function rebuildGlobalPhraseCache()"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":94,"text":"$titles = $this->finder(PhraseFinder::class)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":95,"text":"->where('language_id', 0)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":96,"text":"->where('global_cache', 1)"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":100,"text":"$languages = $this->findLanguages()->fetch();"},{"file":"LanguageRepository.php","file_sha256":"51702258ba9ec83c8c07e4d51f3b440a4d9dd6b4172d005f6053387402adcedf","line":102,"text":"$globalPhrases = [];"}] -NEWFI_LANGUAGE_WORKFLOW_HITS=[{"path":"docs/operations/addons-language.md","line":18,"text":"- Core Russian created `language_id=2`, title `Russian (RU)`, language code `ru-RU` through `XF\\Service\\Language\\ImportService`."},{"path":"docs/operations/addons-language.md","line":20,"text":"- Accepted phrase counts for language 2: XF `11142`, XFMG `722`, XFRM `464`, total `12328`."},{"path":"docs/operations/addons-language.md","line":22,"text":"- `defaultLanguageId` was changed through the XenForo Option repository from `1` to `2` only after all three packs passed acceptance."},{"path":"docs/operations/addons-language.md","line":32,"text":"- Accepted manual job count: `0`."},{"path":"scripts/verify-addons-language.sh","line":14,"text":"phrase_rows=$(mariadb --defaults-extra-file=/etc/newfi/db.cnf --batch --skip-column-names -e \"SELECT CONCAT_WS(0x7c,addon_id,COUNT(*)) FROM xf_phrase WHERE language_id=2 GROUP BY addon_id ORDER BY addon_id\")"},{"path":"scripts/verify-addons-language.sh","line":19,"text":"phrases=$(mariadb --defaults-extra-file=/etc/newfi/db.cnf --batch --skip-column-names -e \"SELECT COUNT(*) FROM xf_phrase WHERE language_id=2\")"},{"path":"scripts/verify-addons-language.sh","line":22,"text":"manual=$(mariadb --defaults-extra-file=/etc/newfi/db.cnf --batch --skip-column-names -e \"SELECT COUNT(*) FROM xf_job WHERE manual_execute=1\")"},{"path":"scripts/verify-addons-language.sh","line":25,"text":"expected_phrases=$(printf \"XF|11142\\nXFMG|722\\nXFRM|464\")"},{"path":"scripts/verify-addons-language.sh","line":26,"text":"printf \"ADDON_ROWS_BEGIN\\n%s\\nADDON_ROWS_END\\nLANGUAGE_ROWS_BEGIN\\n%s\\nLANGUAGE_ROWS_END\\nRU_PHRASE_ROWS_BEGIN\\n%s\\nRU_PHRASE_ROWS_END\\nDEFAULT_LANGUAGE_ID=%s\\nRU_PHRASE_COUNT=%s\\nDB_TABLES=%s\\nBOARD_ROW=%s|%s|%s\\nERROR_LOG_COUNT=%s\\nMANUAL_JOB_COUNT=%s\\n\" \"$addon_rows\" \"$language_rows\" \"$phrase_rows\" \"$default_lang\" \"$phrases\" \"$tables\" \"$board\" \"$title\" \"$url\" \"$errors\" \"$manual\""},{"path":"scripts/verify-addons-language.sh","line":29,"text":"test \"$phrase_rows\" = \"$expected_phrases\""},{"path":"scripts/verify-addons-language.sh","line":31,"text":"test \"$phrases\" -eq 12328"}] -EDGE_LOG_PROBE_TRANSPORT_RC=2 -ROLLBACK_STATE_OK=true -TASK_COMPLETE=true -TASK_RESULT=PASS_PVEPRO_RUSSIAN_RENDER_COMPAT_RCA -NO_MUTATION=true -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260920-PVEPRO-RUSSIAN-RENDER-COMPAT-RCA-READONLY-728R2","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +GENERATED_AT_UTC=[PRIVATE_IP]T01:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on +Quorum information +------------------ +Date: Sun Sep [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.130 +Quorate: Yes + +Votequorum information +---------------------- +Expected votes: 3 +Highest expected: 3 +Total votes: 3 +Quorum: 2 +Flags: Quorate + +Membership information +---------------------- + Nodeid Votes Name +[PRIVATE_IP] [PRIVATE_IP].11 (local) +[PRIVATE_IP] [PRIVATE_IP].13 +[PRIVATE_IP] [PRIVATE_IP].12 + +Membership information +---------------------- + Nodeid Votes Name + 1 1 pve01 (local) + 2 1 pve03 + 3 1 pve02 +[{"cpu":[PRIVATE_IP]034646,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/100","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"pvepro-prod","netin":322353,"netout":411524,"node":"pve01","status":"running","template":0,"type":"qemu","uptime":993,"vmid":100},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/101","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"pvepro-staging-v1","netin":0,"netout":0,"node":"pve01","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":101},{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":110},{"cpu":[PRIVATE_IP]361e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/111","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":112},{"cpu":[PRIVATE_IP]361e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":113},{"cpu":[PRIVATE_IP]72206,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":130},{"cpu":[PRIVATE_IP]1973,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"snikket","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":150},{"cpu":[PRIVATE_IP]55366,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":160},{"cpu":[PRIVATE_IP]2121,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":170},{"cpu":[PRIVATE_IP]14916,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":171},{"cpu":[PRIVATE_IP]478451,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":190},{"cpu":[PRIVATE_IP]325309,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/210","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":210},{"cpu":[PRIVATE_IP]783053,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/211","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-staging","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":211},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]94279,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]44911,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]86166,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":[PRIVATE_IP]},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"vztmpl,iso,backup,import","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,iso,backup,import","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,iso,backup,import","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 37.18% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 15.51% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-app-cloud-quorum-queue.service loaded failed failed Homelab canonical application cloud quorum backup queue +● homelab-backup-retention-gc.service loaded failed failed Homelab owner-aware cloud retention GC +● homelab-vm-cloud-quorum-queue.service loaded failed failed Homelab canonical VM/CT cloud quorum backup queue + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Sun [PRIVATE_IP] 04:17:16 MSK 13s Sun [PRIVATE_IP] 04:16:16 MSK 46s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sun [PRIVATE_IP] 04:18:00 MSK 57s Sun [PRIVATE_IP] 04:16:58 MSK 4s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Sun [PRIVATE_IP] 04:18:16 MSK 1min 13s Sun [PRIVATE_IP] 04:03:16 MSK 13min ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sun [PRIVATE_IP] 04:18:17 MSK 1min 14s Sun [PRIVATE_IP] 03:46:16 MSK 30min ago homelab-backup-v2.timer homelab-backup-v2.service +Sun [PRIVATE_IP] 04:18:36 MSK 1min 34s Sun [PRIVATE_IP] 04:13:19 MSK 3min 43s ago homelab-health-metrics.timer homelab-health-metrics.service +Sun [PRIVATE_IP] 04:19:16 MSK 2min 13s Sun [PRIVATE_IP] 04:14:16 MSK 2min 46s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Sun [PRIVATE_IP] 04:19:19 MSK 2min 16s Sun [PRIVATE_IP] 04:14:19 MSK 2min 43s ago netbird-peers-health.timer netbird-peers-health.service +Sun [PRIVATE_IP] 04:22:58 MSK 5min Sun [PRIVATE_IP] 04:07:58 MSK 9min ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sun [PRIVATE_IP] 04:22:58 MSK 5min Sun [PRIVATE_IP] 04:12:58 MSK 4min 4s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sun [PRIVATE_IP] 04:22:58 MSK 5min Sun [PRIVATE_IP] 04:07:58 MSK 9min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sun [PRIVATE_IP] 04:25:58 MSK 8min Sun [PRIVATE_IP] 04:10:58 MSK 6min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sun [PRIVATE_IP] 04:30:00 MSK 12min Sun [PRIVATE_IP] 04:15:13 MSK 1min 48s ago homelab-incident-journal.timer homelab-incident-journal.service +Sun [PRIVATE_IP] 04:30:08 MSK 13min Sun [PRIVATE_IP] 04:16:16 MSK 46s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sun [PRIVATE_IP] 04:30:15 MSK 13min Sun [PRIVATE_IP] 04:15:16 MSK 1min 46s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sun [PRIVATE_IP] 04:30:58 MSK 13min Sun [PRIVATE_IP] 04:15:37 MSK 1min 24s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sun [PRIVATE_IP] 04:32:24 MSK 15min Sun [PRIVATE_IP] 04:01:12 MSK 15min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sun [PRIVATE_IP] 04:35:50 MSK 18min Sun [PRIVATE_IP] 04:05:58 MSK 11min ago homelab-backup-audit.timer homelab-backup-audit.service +Sun [PRIVATE_IP] 04:35:58 MSK 18min Sat [PRIVATE_IP] 22:35:58 MSK 5h 41min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Sun [PRIVATE_IP] 04:46:45 MSK 29min Sun [PRIVATE_IP] 04:12:58 MSK 4min 4s ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sun [PRIVATE_IP] 05:56:19 MSK 1h 39min Sat [PRIVATE_IP] 23:50:32 MSK 4h 26min ago homelab-evidence-root.timer homelab-evidence-root.service +Sun [PRIVATE_IP] 06:10:28 MSK 1h 53min Sat [PRIVATE_IP] 06:15:16 MSK 22h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Sun [PRIVATE_IP] 07:09:03 MSK 2h 52min Sun [PRIVATE_IP] 00:59:30 MSK 3h 17min ago homelab-mailru-trash-gc.timer homelab-mailru-trash-gc.service +Sun [PRIVATE_IP] 07:11:14 MSK 2h 54min Sat [PRIVATE_IP] 07:18:31 MSK 20h ago homelab-drift-check.timer homelab-drift-check.service +Sun [PRIVATE_IP] 07:34:28 MSK 3h 17min Sat [PRIVATE_IP] 07:38:42 MSK 20h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Sun [PRIVATE_IP] 07:40:18 MSK 3h 23min Sun [PRIVATE_IP] 07:35:56 MSK 6 days ago homelab-rotating-boot-drill.timer homelab-rotating-boot-drill.service +Sun [PRIVATE_IP] 07:46:29 MSK 3h 29min Sat [PRIVATE_IP] 07:40:16 MSK 20h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Sun [PRIVATE_IP] 07:46:56 MSK 3h 29min Sat [PRIVATE_IP] 07:38:16 MSK 20h ago homelab-alerting-health.timer homelab-alerting-health.service +Sun [PRIVATE_IP] 07:57:31 MSK 3h 40min Sat [PRIVATE_IP] 07:56:58 MSK 20h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Sun [PRIVATE_IP] 07:58:07 MSK 3h 41min Sat [PRIVATE_IP] 07:48:00 MSK 20h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Sun [PRIVATE_IP] 07:58:31 MSK 3h 41min Sat [PRIVATE_IP] 07:56:58 MSK 20h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Sun [PRIVATE_IP] 08:01:43 MSK 3h 44min Sat [PRIVATE_IP] 08:15:16 MSK 20h ago homelab-overall-health.timer homelab-overall-health.service +Sun [PRIVATE_IP] 08:06:27 MSK 3h 49min Sat [PRIVATE_IP] 11:53:32 MSK 16h ago man-db.timer man-db.service +Sun [PRIVATE_IP] 08:07:47 MSK 3h 50min Sat [PRIVATE_IP] 08:08:49 MSK 20h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Sun [PRIVATE_IP] 08:19:26 MSK 4h 2min Sun [PRIVATE_IP] 03:55:58 MSK 21min ago apt-daily.timer apt-daily.service +Sun [PRIVATE_IP] 08:24:01 MSK 4h 6min Sat [PRIVATE_IP] 08:19:39 MSK 19h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Sun [PRIVATE_IP] 08:42:10 MSK 4h 25min Sat [PRIVATE_IP] 08:31:16 MSK 19h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Sun [PRIVATE_IP] 08:46:34 MSK 4h 29min Sat [PRIVATE_IP] 08:41:46 MSK 19h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Sun [PRIVATE_IP] 08:54:41 MSK 4h 37min Sat [PRIVATE_IP] 08:48:43 MSK 19h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Sun [PRIVATE_IP] 09:01:11 MSK 4h 44min Sat [PRIVATE_IP] 08:51:16 MSK 19h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Sun [PRIVATE_IP] 10:15:00 MSK 5h 57min Sat [PRIVATE_IP] 10:15:00 MSK 18h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 16:47:58 MSK 12h Sat [PRIVATE_IP] 16:47:58 MSK 11h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Mon [PRIVATE_IP] 00:00:00 MSK 19h Sun [PRIVATE_IP] 00:00:12 MSK 4h 16min ago dpkg-db-backup.timer dpkg-db-backup.service +Mon [PRIVATE_IP] 00:04:42 MSK 19h Mon [PRIVATE_IP] 00:10:39 MSK 6 days ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:07:36 MSK 19h Sun [PRIVATE_IP] 00:13:12 MSK 4h 3min ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Mon [PRIVATE_IP] 00:07:48 MSK 19h Sun [PRIVATE_IP] 00:02:02 MSK 4h 14min ago homelab-docker-health.timer homelab-docker-health.service +Mon [PRIVATE_IP] 00:09:14 MSK 19h Mon [PRIVATE_IP] 00:30:56 MSK 6 days ago fstrim.timer fstrim.service +Mon [PRIVATE_IP] 00:16:19 MSK 19h Sun [PRIVATE_IP] 00:01:46 MSK 4h 15min ago homelab-storage-capacity.timer homelab-storage-capacity.service +Mon [PRIVATE_IP] 00:17:22 MSK 20h Sun [PRIVATE_IP] 00:13:55 MSK 4h 3min ago homelab-quality-gate.timer homelab-quality-gate.service +Mon [PRIVATE_IP] 00:23:49 MSK 20h Sun [PRIVATE_IP] 00:04:32 MSK 4h 12min ago logrotate.timer logrotate.service +Mon [PRIVATE_IP] 02:49:53 MSK 22h Sun [PRIVATE_IP] 01:11:58 MSK 3h 5min ago pve-daily-update.timer pve-daily-update.service +Mon [PRIVATE_IP] 03:22:30 MSK 23h Sun [PRIVATE_IP] 03:34:58 MSK 42min ago homelab-backup-retention-gc.timer homelab-backup-retention-gc.service +Sun [PRIVATE_IP] 03:10:17 MSK 6 days Sun [PRIVATE_IP] 03:10:58 MSK 1h 6min ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:23 MSK 6 days Sun [PRIVATE_IP] 03:10:12 MSK 1h 6min ago e2scrub_all.timer e2scrub_all.service +- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service +- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service +- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service + +56 timers listed. +RUNTIME_MANIFEST_ID=df[PRIVATE_IP]ac9b5abd[PRIVATE_IP]b[PRIVATE_IP]d89496fb2bde[PRIVATE_IP] +EXPERIMENT_ID=5462ee[PRIVATE_IP]ebe[PRIVATE_IP]feb2ad[PRIVATE_IP]1ad87bbac0b8108 +COLLECTION_START_AT=[PRIVATE_IP]T[PRIVATE_IP]:00 +FIRST_COMPLETE_D1_CLOSE=[PRIVATE_IP]T[PRIVATE_IP]:00 +PRODUCTION_LAUNCH_ALLOWED=False +EXECUTION_AUTHORITY=False +RISK_AUTHORITY=False +STAGE_A_HEALTH=AWAITING_PRIMARY_FINALITY +FORENSIC_PREVIOUS_EPOCH_PRESERVED=YES + +## NEWFI_TASK6_AUTH_CHECKPOINT_V[PRIVATE_IP] +- Scope: historical accepted AUTH test, not a current SMTP connection test. +- Newfi approved SMTP account/sender: aleisaev@yandex.ru. +- Endpoint used by accepted test: smtp.yandex.ru:465 with certificate verification; single PLAIN initial response accepted with code 235. +- Evidence: incident ledger ### NEWFI_TASK6_YANDEX_AUTH_V2_OBSERVATION and ### NEWFI_TASK6_AUTH_PROOF_CLOSE_V1. +- No password file written, no application configuration changed, no mail sent by the accepted AUTH test. +- Persistent transport installation and application delivery are not proven by this checkpoint. Task6 is not complete. +- AUTH challenge and missing-file incidents closed; launch/session incident remains OPEN with original cause unproven. +- This update does not change VM211, VM160, routing, board state or Git. +- Other incidents and infrastructure health were not assessed. + + +## NEWFI_PRIVATE_STRUCTURE92_WRONG_MARKER_SCOPE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: NEWFI92 inspected the pve01 NEWFI90 attempt marker, which had not been finalized because the outer shell exited immediately after the guest returned RC3 following its successful rollback. The guest marker contained the true final rollback state. +- Correction: NEWFI93 required both the guest FINISHED/ROLLED_BACK record and a fresh exact demo-state readback before reconciling the outer NEWFI90 marker. NEWFI92 itself never reserved an attempt or mutated state. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] +- Status: OPEN +- Command: NEWFI95 +- Symptom: after the content-structure precheck passed, the pve03 Python wrapper failed to parse at the PHP line beginning with $root. No Portal discovery or application mutation was reached. +- RCA: an outer raw triple-single-quoted guest Python payload contained an inner raw triple-single-quoted PHP payload. The inner delimiter terminated the outer Python string, causing PHP source to be parsed as Python. +- Safety: NEWFI95 was read-only, created no attempt marker, and did not reach the intended nested guest execution. Do not replay NEWFI95. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: an inner triple-single-quoted PHP literal terminated the outer triple-single-quoted Python guest payload in NEWFI95. The wrapper therefore failed parsing before the intended Portal discovery executed. +- Correction: NEWFI96 removed the nested Python payload layer entirely and passed one Python program directly to VM211 through qm guest exec stdin. The read-only Portal contract completed with QGA exit 0 and the implementation worktree remained unchanged. OUTPUT_END CHAT_OUTPUT_END