diff --git a/runtime/history/CONTEXT-AUTO-20260907T221701Z.json b/runtime/history/CONTEXT-AUTO-20260907T221701Z.json new file mode 100644 index 00000000..b9beb46a --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260907T221701Z.json @@ -0,0 +1 @@ +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260907T221701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-09-07T22:17:01Z","finished_at_utc":"2026-09-07T22: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-20260907T221701Z.txt b/runtime/history/CONTEXT-AUTO-20260907T221701Z.txt new file mode 100644 index 00000000..672a6c7a --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260907T221701Z.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]T22:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on + +Quorum information +------------------ +Date: Tue 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][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":895493,"vmid":110},{"cpu":[PRIVATE_IP][PRIVATE_IP],"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":895496,"vmid":111},{"cpu":[PRIVATE_IP][PRIVATE_IP],"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":895496,"vmid":112},{"cpu":[PRIVATE_IP]932e-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":895499,"vmid":113},{"cpu":[PRIVATE_IP]3366,"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":895366,"vmid":130},{"cpu":[PRIVATE_IP]078965,"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":895483,"vmid":150},{"cpu":[PRIVATE_IP]782253,"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":895493,"vmid":160},{"cpu":[PRIVATE_IP]24666,"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":895491,"vmid":170},{"cpu":[PRIVATE_IP]49056,"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":895488,"vmid":171},{"cpu":[PRIVATE_IP]550786,"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":895362,"vmid":190},{"cpu":[PRIVATE_IP]282319,"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":83957,"vmid":210},{"cpu":[PRIVATE_IP]101573,"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":279890,"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]559259,"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":895519},{"cgroup-mode":2,"cpu":[PRIVATE_IP]7037,"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":895523},{"cgroup-mode":2,"cpu":[PRIVATE_IP]00361,"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":895384},{"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/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","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":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","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/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 20.45% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 9.25% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-retention-gc.service loaded failed failed Homelab owner-aware cloud retention GC + +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. + +1 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Tue [PRIVATE_IP] 01:17:32 MSK 29s Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Tue [PRIVATE_IP] 01:17:34 MSK 31s Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Tue [PRIVATE_IP] 01:18:30 MSK 1min 27s Tue [PRIVATE_IP] 01:13:12 MSK 3min 50s ago homelab-health-metrics.timer homelab-health-metrics.service +Tue [PRIVATE_IP] 01:19:17 MSK 2min 15s Tue [PRIVATE_IP] 01:14:17 MSK 2min 44s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Tue [PRIVATE_IP] 01:19:17 MSK 2min 15s Tue [PRIVATE_IP] 01:14:17 MSK 2min 44s ago netbird-peers-health.timer netbird-peers-health.service +Tue [PRIVATE_IP] 01:20:17 MSK 3min 15s Tue [PRIVATE_IP] 01:05:17 MSK 11min ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Tue [PRIVATE_IP] 01:22:54 MSK 5min Tue [PRIVATE_IP] 01:07:54 MSK 9min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Tue [PRIVATE_IP] 01:24:17 MSK 7min Tue [PRIVATE_IP] 01:14:17 MSK 2min 44s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Tue [PRIVATE_IP] 01:27:54 MSK 10min Tue [PRIVATE_IP] 01:12:54 MSK 4min 8s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Tue [PRIVATE_IP] 01:30:00 MSK 12min Mon [PRIVATE_IP] 23:30:00 MSK 1h 47min ago homelab-app-cloud-quorum-queue.timer homelab-app-cloud-quorum-queue.service +Tue [PRIVATE_IP] 01:30:00 MSK 12min Tue [PRIVATE_IP] 01:15:07 MSK 1min 55s ago homelab-incident-journal.timer homelab-incident-journal.service +Tue [PRIVATE_IP] 01:30:37 MSK 13min Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Tue [PRIVATE_IP] 01:30:39 MSK 13min Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Tue [PRIVATE_IP] 01:30:54 MSK 13min Tue [PRIVATE_IP] 01:15:54 MSK 1min 8s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Tue [PRIVATE_IP] 01:31:13 MSK 14min Tue [PRIVATE_IP] 01:16:16 MSK 46s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Tue [PRIVATE_IP] 01:32:19 MSK 15min Tue [PRIVATE_IP] 01:00:54 MSK 16min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Tue [PRIVATE_IP] 01:36:50 MSK 19min Tue [PRIVATE_IP] 01:06:07 MSK 10min ago homelab-backup-audit.timer homelab-backup-audit.service +Tue [PRIVATE_IP] 01:45:03 MSK 28min Tue [PRIVATE_IP] 01:13:54 MSK 3min 8s ago homelab-reference-refresh.timer homelab-reference-refresh.service +Tue [PRIVATE_IP] 01:45:26 MSK 28min Mon [PRIVATE_IP] 00:25:16 MSK 24h ago man-db.timer man-db.service +Tue [PRIVATE_IP] 02:07:28 MSK 50min Tue [PRIVATE_IP] 01:03:54 MSK 13min ago homelab-control-backup.timer homelab-control-backup.service +Tue [PRIVATE_IP] 03:20:32 MSK 2h 3min Mon [PRIVATE_IP] 03:24:53 MSK 21h ago homelab-backup-retention-gc.timer homelab-backup-retention-gc.service +Tue [PRIVATE_IP] 04:33:54 MSK 3h 16min Tue [PRIVATE_IP] 00:34:54 MSK 42min ago homelab-vm-cloud-quorum-queue.timer homelab-vm-cloud-quorum-queue.service +Tue [PRIVATE_IP] 04:35:43 MSK 3h 18min Mon [PRIVATE_IP] 22:31:37 MSK 2h 45min ago homelab-evidence-root.timer homelab-evidence-root.service +Tue [PRIVATE_IP] 04:35:54 MSK 3h 18min Mon [PRIVATE_IP] 22:35:54 MSK 2h 41min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Tue [PRIVATE_IP] 04:54:58 MSK 3h 37min Mon [PRIVATE_IP] 04:38:42 MSK 20h ago pve-daily-update.timer pve-daily-update.service +Tue [PRIVATE_IP] 06:05:10 MSK 4h 48min Mon [PRIVATE_IP] 23:55:54 MSK 1h 21min ago homelab-mailru-trash-gc.timer homelab-mailru-trash-gc.service +Tue [PRIVATE_IP] 06:12:28 MSK 4h 55min Mon [PRIVATE_IP] 06:19:50 MSK 18h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Tue [PRIVATE_IP] 07:07:23 MSK 5h 50min Mon [PRIVATE_IP] 07:07:53 MSK 18h ago homelab-drift-check.timer homelab-drift-check.service +Tue [PRIVATE_IP] 07:37:02 MSK 6h Mon [PRIVATE_IP] 07:38:52 MSK 17h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Tue [PRIVATE_IP] 07:48:47 MSK 6h Mon [PRIVATE_IP] 07:59:58 MSK 17h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Tue [PRIVATE_IP] 07:52:04 MSK 6h Mon [PRIVATE_IP] 07:50:22 MSK 17h ago homelab-alerting-health.timer homelab-alerting-health.service +Tue [PRIVATE_IP] 07:56:21 MSK 6h Mon [PRIVATE_IP] 07:56:16 MSK 17h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Tue [PRIVATE_IP] 08:04:06 MSK 6h Mon [PRIVATE_IP] 07:54:22 MSK 17h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Tue [PRIVATE_IP] 08:04:22 MSK 6h Mon [PRIVATE_IP] 07:57:52 MSK 17h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Tue [PRIVATE_IP] 08:10:52 MSK 6h Mon [PRIVATE_IP] 08:01:32 MSK 17h ago homelab-overall-health.timer homelab-overall-health.service +Tue [PRIVATE_IP] 08:21:03 MSK 7h Mon [PRIVATE_IP] 08:13:50 MSK 17h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Tue [PRIVATE_IP] 08:21:06 MSK 7h Mon [PRIVATE_IP] 08:19:16 MSK 16h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Tue [PRIVATE_IP] 08:34:29 MSK 7h Mon [PRIVATE_IP] 08:38:53 MSK 16h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Tue [PRIVATE_IP] 08:46:35 MSK 7h Mon [PRIVATE_IP] 09:00:19 MSK 16h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Tue [PRIVATE_IP] 08:46:44 MSK 7h Mon [PRIVATE_IP] 08:41:53 MSK 16h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Tue [PRIVATE_IP] 08:47:46 MSK 7h Mon [PRIVATE_IP] 08:53:04 MSK 16h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Tue [PRIVATE_IP] 10:15:00 MSK 8h Mon [PRIVATE_IP] 10:15:12 MSK 15h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Tue [PRIVATE_IP] 14:50:21 MSK 13h Mon [PRIVATE_IP] 22:53:32 MSK 2h 23min ago apt-daily.timer apt-daily.service +Tue [PRIVATE_IP] 16:47:18 MSK 15h Mon [PRIVATE_IP] 16:47:18 MSK 8h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Wed [PRIVATE_IP] 00:00:00 MSK 22h Tue [PRIVATE_IP] 00:00:07 MSK 1h 16min ago dpkg-db-backup.timer dpkg-db-backup.service +Wed [PRIVATE_IP] 00:05:59 MSK 22h Tue [PRIVATE_IP] 00:02:16 MSK 1h 14min ago homelab-docker-health.timer homelab-docker-health.service +Wed [PRIVATE_IP] 00:08:51 MSK 22h Tue [PRIVATE_IP] 00:18:04 MSK 58min ago homelab-storage-capacity.timer homelab-storage-capacity.service +Wed [PRIVATE_IP] 00:11:26 MSK 22h Tue [PRIVATE_IP] 00:09:07 MSK 1h 7min ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Wed [PRIVATE_IP] 00:14:14 MSK 22h Tue [PRIVATE_IP] 00:05:16 MSK 1h 11min ago homelab-quality-gate.timer homelab-quality-gate.service +Wed [PRIVATE_IP] 00:41:05 MSK 23h Tue [PRIVATE_IP] 00:58:58 MSK 18min ago logrotate.timer logrotate.service +Sun [PRIVATE_IP] 03:10:21 MSK 5 days Sun [PRIVATE_IP] 03:11:16 MSK 1 day 22h ago e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:10:35 MSK 5 days Sun [PRIVATE_IP] 03:10:50 MSK 1 day 22h ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 07:35:54 MSK 5 days Sun [PRIVATE_IP] 07:57:53 MSK 1 day 17h ago homelab-rotating-boot-drill.timer homelab-rotating-boot-drill.service +Mon [PRIVATE_IP] 00:10:37 MSK 5 days Mon [PRIVATE_IP] 00:08:52 MSK 1 day 1h ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:30:41 MSK 5 days Mon [PRIVATE_IP] 00:39:53 MSK 24h ago fstrim.timer fstrim.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 + +58 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 9856cf59..b9beb46a 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1 @@ -{ - "schema_version": 1, - "channel": "homelab-runtime", - "command_id": "NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7", - "status": "OK", - "rc": 0, - "host": "pve01", - "mode": "read-only", - "component": "newfi-portal200-consolidated-final-template-rca", - "started_at_utc": "2026-09-07T21:21:30Z", - "finished_at_utc": "2026-09-07T21:21:51Z", - "reference_register_checked": true, - "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", - "error_register_checked": true, - "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "c5f396b50e88cd61820fa8cdbca3f34d37dc259b18372b37317ac6fdb2a7c1ae", - "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": "37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273", - "sanitized_output_sha256": "37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273", - "output_truncated_in_json": false, - "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "RCA7_BEGIN=true\nCOMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7\nMUTATION_SCOPE=NONE_READ_ONLY\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_HISTORY_SHA256=18232adf6297087543f368e45e70f705eb529a09d4c392443d9b28b6376df394\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_STATUS=FAIL\nFAILED_CHANGES_MADE=true\nFAILED_ROLLBACK_STARTED=true\nFAILED_ROLLBACK_RESTORED=false\nFAILED_MUTATION_OUTCOME=ROLLBACK_FAILED\nFAILED_FINAL_DECISION=FAIL_PORTAL200_APPLY4_ROLLBACK_INCOMPLETE\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_HISTORY_SHA256=76f74a798da08cdfa0e1545961b58ffb293b33c15868510c915c3dbb261bac34\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_STATUS=OK\nGIT_HEAD={\"err\":\"\",\"out\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"rc\":0}\nGIT_STATUS={\"err\":\"\",\"out\":\"\",\"rc\":0}\nGIT_LOG3={\"err\":\"\",\"out\":\"06bab5a (HEAD -> implementation/newfi-closed-mvp-20260906, origin/implementation/newfi-closed-mvp-20260906) style: apply Big Water XenForo theme [NEWFI-260907-STYLE199B]\\n4ade504 brand: add Newfi technical identity assets\\n9f7e0ca ops: authorize final Newfi public cutover\",\"rc\":0}\nGIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890\nCANDIDATE_XML_BYTES=10977\nCANDIDATE_XML_SHA256=1650c3d868d4bc47703f1b75f1f179cd25309b2d3b20a2b848e81a4423c00861\nCANDIDATE_CHILDREN=[{\"attrib\":{\"title\":\"newfi_portal\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"i\":0,\"tag\":\"template\",\"text_bytes\":7027,\"text_sha256\":\"2a7b332223b7fb0af18cfb9659d1698603faa79d5d0f63c49359dd6a1c8fbf7a\"},{\"attrib\":{\"title\":\"newfi_portal.less\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"i\":1,\"tag\":\"template\",\"text_bytes\":3634,\"text_sha256\":\"25b1dc49e89ef7615a11cd1023876c4ab9b5f96f90b1fca52a4815bb5992fbe8\"}]\nTEMPLATE_DATATYPE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/Template.php\",\"rc\":0,\"text\":\" 35\\t\\t\\t\\t$this->exportMappedAttributes($node, $entry);\\n 36\\t\\t\\t\\t$this->exportCdata($node, $entry->template);\\n 37\\t\\n 38\\t\\t\\t\\t$container->appendChild($node);\\n 39\\t\\t\\t}\\n 40\\t\\n 41\\t\\t\\treturn $entries->count() ? true : false;\\n 42\\t\\t}\\n 43\\t\\n 44\\t\\tpublic function importAddOnData($addOnId, \\\\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\\n 45\\t\\t{\\n 46\\t\\t\\t$startTime = microtime(true);\\n 47\\t\\n 48\\t\\t\\t$entries = $this->getEntries($container, $start);\\n 49\\t\\t\\tif (!$entries)\\n 50\\t\\t\\t{\\n 51\\t\\t\\t\\treturn false;\\n 52\\t\\t\\t}\\n 53\\t\\n 54\\t\\t\\t$conditions = [];\\n 55\\t\\t\\tforeach ($entries AS $entry)\\n 56\\t\\t\\t{\\n 57\\t\\t\\t\\t$conditions[] = [\\n 58\\t\\t\\t\\t\\t'type' => (string) $entry['type'],\\n 59\\t\\t\\t\\t\\t'title' => (string) $entry['title'],\\n 60\\t\\t\\t\\t];\\n 61\\t\\t\\t}\\n 62\\t\\t\\tif ($conditions)\\n 63\\t\\t\\t{\\n 64\\t\\t\\t\\t$existing = $this->finder()\\n 65\\t\\t\\t\\t\\t->whereOr($conditions)\\n 66\\t\\t\\t\\t\\t->where('style_id', 0)\\n 67\\t\\t\\t\\t\\t->fetch()\\n 68\\t\\t\\t\\t\\t->groupBy('type', 'title');\\n 69\\t\\t\\t}\\n 70\\t\\t\\telse\\n 71\\t\\t\\t{\\n 72\\t\\t\\t\\t$existing = [];\\n 73\\t\\t\\t}\\n 74\\t\\n 75\\t\\t\\t$i = 0;\\n 76\\t\\t\\t$last = 0;\\n 77\\t\\n 78\\t\\t\\tforeach ($entries AS $entry)\\n 79\\t\\t\\t{\\n 80\\t\\t\\t\\t$i++;\\n 81\\t\\n 82\\t\\t\\t\\tif ($i <= $start)\\n 83\\t\\t\\t\\t{\\n 84\\t\\t\\t\\t\\tcontinue;\\n 85\\t\\t\\t\\t}\\n 86\\t\\n 87\\t\\t\\t\\t$type = (string) $entry['type'];\\n 88\\t\\t\\t\\t$title = (string) $entry['title'];\\n 89\\t\\t\\t\\t$entity = $existing[$type][$title] ?? $this->create();\\n 90\\t\\t\\t\\t$entity->setOption('check_duplicate', false);\\n 91\\t\\t\\t\\t$entity->setOption('report_modification_errors', false);\\n 92\\t\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\\n 93\\t\\n 94\\t\\t\\t\\t$this->importMappedAttributes($entry, $entity);\\n 95\\t\\t\\t\\t$entity->style_id = 0;\\n 96\\t\\t\\t\\t$entity->template = $this->getCdataValue($entry);\\n 97\\t\\t\\t\\t$entity->addon_id = $addOnId;\\n 98\\t\\t\\t\\t$entity->save(true, false);\\n 99\\t\\n 100\\t\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\\n 101\\t\\n 102\\t\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\\n 103\\t\\t\\t\\t{\\n 104\\t\\t\\t\\t\\t$last = $i;\\n 105\\t\\t\\t\\t\\tbreak;\\n 106\\t\\t\\t\\t}\\n 107\\t\\t\\t}\\n 108\\t\\t\\treturn ($last ?: false);\\n 109\\t\\t}\\n 110\\t\\n 111\\t\\tpublic function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container)\\n 112\\t\\t{\\n 113\\t\\t\\t$existing = $this->findAllForType($addOnId)->where('style_id', 0)->fetch()->groupBy('type', 'title');\\n 114\\t\\t\\tif (!$existing)\\n 115\\t\\t\\t{\\n\"}\nABSTRACT_DATATYPE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/AbstractDataType.php\",\"rc\":0,\"text\":\" 220\\t\\t\\t\\t\\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\\n 221\\t\\t\\t\\t\\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\\\"]*$/si', $value))\\n 222\\t\\t\\t\\t\\t{\\n 223\\t\\t\\t\\t\\t\\t// This exports CDATA, but does not escape `]]>` like \\\\XF\\\\Util\\\\XML::createDomCdataSection(),\\n 224\\t\\t\\t\\t\\t\\t// because it needs to be transparently importable.\\n 225\\t\\t\\t\\t\\t\\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\\n 226\\t\\t\\t\\t\\t\\t// and remove this attribute from exportMappedAttributes()\\n 227\\t\\n 228\\t\\t\\t\\t\\t\\t$newNode = $tag->ownerDocument->createElement($attr);\\n 229\\t\\n 230\\t\\t\\t\\t\\t\\t$newNode->appendChild(\\n 231\\t\\t\\t\\t\\t\\t\\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\\n 232\\t\\t\\t\\t\\t\\t);\\n 233\\t\\n 234\\t\\t\\t\\t\\t\\t$tag->appendChild($newNode);\\n 235\\t\\t\\t\\t\\t}\\n 236\\t\\t\\t\\t\\telse\\n 237\\t\\t\\t\\t\\t{\\n 238\\t\\t\\t\\t\\t\\t$tag->setAttribute($attr, $value);\\n 239\\t\\t\\t\\t\\t}\\n 240\\t\\t\\t\\t}\\n 241\\t\\t\\t}\\n 242\\t\\t}\\n 243\\t\\n 244\\t\\tprotected function importMappedAttributes(\\\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\\n 245\\t\\t{\\n 246\\t\\t\\tif ($entity->exists() && $allowMaintained)\\n 247\\t\\t\\t{\\n 248\\t\\t\\t\\t$maintained = $this->getMaintainedAttributes();\\n 249\\t\\t\\t}\\n 250\\t\\t\\telse\\n 251\\t\\t\\t{\\n 252\\t\\t\\t\\t$maintained = [];\\n 253\\t\\t\\t}\\n 254\\t\\n 255\\t\\t\\tforeach ($this->getMappedAttributes() AS $attr)\\n 256\\t\\t\\t{\\n 257\\t\\t\\t\\tif (in_array($attr, $maintained))\\n 258\\t\\t\\t\\t{\\n 259\\t\\t\\t\\t\\tcontinue;\\n 260\\t\\t\\t\\t}\\n 261\\t\\n 262\\t\\t\\t\\tif (self::USE_AUTO_CDATA)\\n 263\\t\\t\\t\\t{\\n 264\\t\\t\\t\\t\\tif (isset($el[$attr]))\\n 265\\t\\t\\t\\t\\t{\\n 266\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 267\\t\\t\\t\\t\\t}\\n 268\\t\\t\\t\\t\\telse if (isset($el->{$attr}))\\n 269\\t\\t\\t\\t\\t{\\n 270\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el->{$attr};\\n 271\\t\\t\\t\\t\\t}\\n 272\\t\\t\\t\\t}\\n 273\\t\\t\\t\\telse\\n 274\\t\\t\\t\\t{\\n 275\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 276\\t\\t\\t\\t}\\n 277\\t\\t\\t}\\n 278\\t\\t}\\n 279\\t\\n 280\\t\\tprotected function pluckXmlAttribute(\\\\SimpleXMLElement $els, $key)\\n 281\\t\\t{\\n 282\\t\\t\\t$values = [];\\n 283\\t\\t\\t$i = 0;\\n 284\\t\\t\\tforeach ($els AS $el)\\n 285\\t\\t\\t{\\n 286\\t\\t\\t\\t$values[$i++] = (string) $el[$key];\\n 287\\t\\t\\t}\\n 288\\t\\n 289\\t\\t\\treturn $values;\\n 290\\t\\t}\\n 291\\t\\n 292\\t\\tprotected function getSimpleAttributes(\\\\SimpleXMLElement $el)\\n 293\\t\\t{\\n 294\\t\\t\\t$output = [];\\n 295\\t\\t\\tforeach ($el->attributes() AS $key => $val)\\n 296\\t\\t\\t{\\n 297\\t\\t\\t\\t$output[$key] = (string) $val;\\n 298\\t\\t\\t}\\n 299\\t\\t\\treturn $output;\\n 300\\t\\t}\\n\"}\nADDON_DATA_JOB={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Job/AddOnData.php\",\"rc\":0,\"text\":\" 1\\t null,\\n 11\\t\\t\\t'data_dir' => null,\\n 12\\t\\n 13\\t\\t\\t'data_types' => null,\\n 14\\t\\t\\t'current_type' => null,\\n 15\\t\\n 16\\t\\t\\t'start' => 0,\\n 17\\t\\t];\\n 18\\t\\n 19\\t\\tprotected $currentType = null;\\n 20\\t\\tprotected $lastIndex = 0;\\n 21\\t\\tprotected $totalEntries = 0;\\n 22\\t\\n 23\\t\\tpublic function run($maxRunTime)\\n 24\\t\\t{\\n 25\\t\\t\\tif ($this->data['addon_id'] != 'XF')\\n 26\\t\\t\\t{\\n 27\\t\\t\\t\\t$addOnManager = $this->app->addOnManager();\\n 28\\t\\t\\t\\t$addOn = $addOnManager->getById($this->data['addon_id']);\\n 29\\t\\t\\t\\tif (!$addOn)\\n 30\\t\\t\\t\\t{\\n 31\\t\\t\\t\\t\\t// add-on isn't installed, can't do anything\\n 32\\t\\t\\t\\t\\treturn $this->complete();\\n 33\\t\\t\\t\\t}\\n 34\\t\\n 35\\t\\t\\t\\tif ($this->data['data_dir'] === null)\\n 36\\t\\t\\t\\t{\\n 37\\t\\t\\t\\t\\t$this->data['data_dir'] = $addOn->getDataDirectory();\\n 38\\t\\t\\t\\t}\\n 39\\t\\t\\t}\\n 40\\t\\t\\telse\\n 41\\t\\t\\t{\\n 42\\t\\t\\t\\t$addOn = null; // don't populate this for XF since it wouldn't be the same type of object\\n 43\\t\\n 44\\t\\t\\t\\tif ($this->data['data_dir'] === null)\\n 45\\t\\t\\t\\t{\\n 46\\t\\t\\t\\t\\t$ds = \\\\XF::$DS;\\n 47\\t\\t\\t\\t\\t$this->data['data_dir'] = \\\\XF::getAddOnDirectory() . $ds . 'XF' . $ds . '_data';\\n 48\\t\\t\\t\\t}\\n 49\\t\\t\\t}\\n 50\\t\\n 51\\t\\t\\t$dataManager = $this->app->addOnDataManager();\\n 52\\t\\n 53\\t\\t\\t$addOnId = $this->data['addon_id'];\\n 54\\t\\t\\t$dataDir = $this->data['data_dir'];\\n 55\\t\\n 56\\t\\t\\tif ($this->data['data_types'] === null)\\n 57\\t\\t\\t{\\n 58\\t\\t\\t\\t$dataTypes = $dataManager->getDataTypeClasses();\\n 59\\t\\t\\t\\tforeach ($dataTypes AS $key => $dataType)\\n 60\\t\\t\\t\\t{\\n 61\\t\\t\\t\\t\\t$handler = $dataManager->getDataTypeHandler($dataType);\\n 62\\t\\t\\t\\t\\t$xml = $handler->openTypeFile($dataDir);\\n 63\\t\\t\\t\\t\\tif (!$xml || !$xml->count())\\n 64\\t\\t\\t\\t\\t{\\n 65\\t\\t\\t\\t\\t\\t// We can skip this type entirely, but clean up any existing data first\\n 66\\t\\t\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n 67\\t\\t\\t\\t\\t\\tunset($dataTypes[$key]);\\n 68\\t\\t\\t\\t\\t}\\n 69\\t\\t\\t\\t}\\n 70\\t\\t\\t\\t$this->data['data_types'] = $dataTypes;\\n 71\\t\\t\\t}\\n 72\\t\\n 73\\t\\t\\tif (!$this->data['current_type'])\\n 74\\t\\t\\t{\\n 75\\t\\t\\t\\t$this->data['current_type'] = array_shift($this->data['data_types']);\\n 76\\t\\t\\t\\tif (!$this->data['current_type'])\\n 77\\t\\t\\t\\t{\\n 78\\t\\t\\t\\t\\tif ($addOn)\\n 79\\t\\t\\t\\t\\t{\\n 80\\t\\t\\t\\t\\t\\t$addOn->postDataImport();\\n 81\\t\\t\\t\\t\\t}\\n 82\\t\\n 83\\t\\t\\t\\t\\t$repo = $this->app->repository(StyleRepository::class);\\n 84\\t\\t\\t\\t\\t$repo->updateAllStylesLastModifiedDateLater();\\n 85\\t\\n 86\\t\\t\\t\\t\\treturn $this->complete();\\n 87\\t\\t\\t\\t}\\n 88\\t\\n 89\\t\\t\\t\\t$this->data['start'] = 0;\\n 90\\t\\t\\t}\\n 91\\t\\n 92\\t\\t\\t$start = $this->data['start'];\\n 93\\t\\t\\t$type = $this->data['current_type'];\\n 94\\t\\n 95\\t\\t\\t$handler = $dataManager->getDataTypeHandler($type);\\n 96\\t\\n 97\\t\\t\\t$this->currentType = $handler->getContainerTag();\\n 98\\t\\t\\t$this->lastIndex = $start;\\n 99\\t\\n 100\\t\\t\\t$xml = $handler->openTypeFile($dataDir);\\n 101\\t\\t\\tif (!$xml || !$xml->count())\\n 102\\t\\t\\t{\\n 103\\t\\t\\t\\t// No data so skip and delete existing data for type (if any)\\n 104\\t\\t\\t\\t$this->data['current_type'] = null;\\n 105\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n 106\\t\\t\\t\\treturn $this->resume();\\n 107\\t\\t\\t}\\n 108\\t\\n 109\\t\\t\\t$this->totalEntries = $xml->count();\\n 110\\t\\n 111\\t\\t\\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\\n 112\\t\\t\\tif (!$last)\\n 113\\t\\t\\t{\\n 114\\t\\t\\t\\t// finished type, delete any existing data not in the XML file for this type\\n 115\\t\\t\\t\\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\\n 116\\t\\n 117\\t\\t\\t\\t\\\\XF::triggerRunOnce();\\n 118\\t\\t\\t\\t$this->data['current_type'] = null;\\n 119\\t\\t\\t\\treturn $this->resume();\\n 120\\t\\t\\t}\\n 121\\t\\n 122\\t\\t\\t$this->data['start'] = $last;\\n 123\\t\\t\\treturn $this->resume();\\n 124\\t\\t}\\n 125\\t\\n 126\\t\\tpublic function getStatusMessage()\\n 127\\t\\t{\\n 128\\t\\t\\t// TODO: These (and the types) probably should be phrased\\n 129\\t\\t\\t$actionPhrase = 'Importing';\\n 130\\t\\t\\tif ($this->data['addon_id'] == 'XF')\\n 131\\t\\t\\t{\\n 132\\t\\t\\t\\t$typePhrase = 'Master data';\\n 133\\t\\t\\t}\\n 134\\t\\t\\telse\\n 135\\t\\t\\t{\\n 136\\t\\t\\t\\t$typePhrase = 'Add-on data';\\n 137\\t\\t\\t}\\n 138\\t\\n 139\\t\\t\\t$currentType = null;\\n 140\\t\\t\\tif ($this->currentType)\\n 141\\t\\t\\t{\\n 142\\t\\t\\t\\t$currentType = ucfirst(str_replace('_', ' ', $this->currentType));\\n 143\\t\\t\\t}\\n 144\\t\\n 145\\t\\t\\tif ($currentType && $this->lastIndex)\\n 146\\t\\t\\t{\\n 147\\t\\t\\t\\t$percentage = $this->app->language()->numberFormat(($this->lastIndex / $this->totalEntries) * 100, 1);\\n 148\\t\\t\\t\\treturn sprintf('%s... %s (%s: %s%%)', $actionPhrase, $typePhrase, $currentType, $percentage);\\n 149\\t\\t\\t}\\n 150\\t\\t\\telse if ($currentType)\\n 151\\t\\t\\t{\\n 152\\t\\t\\t\\treturn sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, $currentType);\\n 153\\t\\t\\t}\\n 154\\t\\t\\telse\\n 155\\t\\t\\t{\\n 156\\t\\t\\t\\treturn sprintf('%s... %s', $actionPhrase, $typePhrase);\\n 157\\t\\t\\t}\\n 158\\t\\t}\\n 159\\t\\n 160\\t\\tpublic function canCancel()\\n 161\\t\\t{\\n 162\\t\\t\\treturn false;\\n 163\\t\\t}\\n 164\\t\\n 165\\t\\tpublic function canTriggerByChoice()\\n 166\\t\\t{\\n 167\\t\\t\\treturn false;\\n 168\\t\\t}\\n 169\\t}\\n\"}\nENTITY_CORE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php\",\"rc\":0,\"text\":\" 520\\t\\t\\t\\t{\\n 521\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"To many relations must be hydrated with collections\\\");\\n 522\\t\\t\\t\\t}\\n 523\\t\\t\\t}\\n 524\\t\\t\\telse\\n 525\\t\\t\\t{\\n 526\\t\\t\\t\\tif ($value !== null && !($value instanceof Entity))\\n 527\\t\\t\\t\\t{\\n 528\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"To one relations must be hydrated with entities or null\\\");\\n 529\\t\\t\\t\\t}\\n 530\\t\\t\\t}\\n 531\\t\\n 532\\t\\t\\t$this->_relations[$key] = $value;\\n 533\\t\\t}\\n 534\\t\\n 535\\t\\tpublic function getExistingRelation($key)\\n 536\\t\\t{\\n 537\\t\\t\\t$relations = $this->_structure->relations;\\n 538\\t\\n 539\\t\\t\\tif (empty($relations[$key]))\\n 540\\t\\t\\t{\\n 541\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Unknown relation $key\\\");\\n 542\\t\\t\\t}\\n 543\\t\\n 544\\t\\t\\treturn $this->_em->getRelation($relations[$key], $this, 'existing');\\n 545\\t\\t}\\n 546\\t\\n 547\\t\\tpublic function getRelationFinder($key, $type = 'current')\\n 548\\t\\t{\\n 549\\t\\t\\t$relations = $this->_structure->relations;\\n 550\\t\\n 551\\t\\t\\tif (empty($relations[$key]))\\n 552\\t\\t\\t{\\n 553\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Unknown relation $key\\\");\\n 554\\t\\t\\t}\\n 555\\t\\n 556\\t\\t\\treturn $this->_em->getRelationFinder($relations[$key], $this, $type);\\n 557\\t\\t}\\n 558\\t\\n 559\\t\\tpublic function toArray($allowGetters = true)\\n 560\\t\\t{\\n 561\\t\\t\\t$output = [];\\n 562\\t\\t\\tforeach ($this->_structure->columns AS $key => $null)\\n 563\\t\\t\\t{\\n 564\\t\\t\\t\\t$output[$key] = $allowGetters ? $this->get($key) : $this->getValue($key);\\n 565\\t\\t\\t}\\n 566\\t\\n 567\\t\\t\\treturn $output;\\n 568\\t\\t}\\n 569\\t\\n 570\\t\\tfinal public function toApiResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\\n 571\\t\\t{\\n 572\\t\\t\\t$result = new EntityResult($this);\\n 573\\t\\t\\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\\n 574\\t\\n 575\\t\\t\\tif ($subResult instanceof EntityResultInterface)\\n 576\\t\\t\\t{\\n 577\\t\\t\\t\\treturn $subResult;\\n 578\\t\\t\\t}\\n 579\\t\\t\\telse\\n 580\\t\\t\\t{\\n 581\\t\\t\\t\\treturn $result;\\n 582\\t\\t\\t}\\n 583\\t\\t}\\n 584\\t\\n 585\\t\\tfinal public function toWebhookResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\\n 586\\t\\t{\\n 587\\t\\t\\t$result = new EntityResult($this, EntityResultInterface::TYPE_WEBHOOK);\\n 588\\t\\t\\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\\n 589\\t\\n 590\\t\\t\\tif ($subResult instanceof EntityResultInterface)\\n 591\\t\\t\\t{\\n 592\\t\\t\\t\\treturn $subResult;\\n 593\\t\\t\\t}\\n 594\\t\\n 595\\t\\t\\treturn $result;\\n 596\\t\\t}\\n 597\\t\\n 598\\t\\t/**\\n 599\\t\\t * This method must be overridden to enable API access to this entity.\\n 600\\t\\t *\\n 601\\t\\t * @param EntityResult $result\\n 602\\t\\t * @param int $verbosity\\n 603\\t\\t * @param array $options\\n 604\\t\\t */\\n 605\\t\\tprotected function setupApiResultData(\\n 606\\t\\t\\tEntityResult $result,\\n 607\\t\\t\\t$verbosity = self::VERBOSITY_NORMAL,\\n 608\\t\\t\\tarray $options = []\\n 609\\t\\t)\\n 610\\t\\t{\\n 611\\t\\t\\tthrow new \\\\LogicException(\\n 612\\t\\t\\t\\t\\\"API result rules not defined by \\\" . $this->_structure->shortName . '. Override setupApiResultData().'\\n 613\\t\\t\\t);\\n 614\\t\\t}\\n 615\\t\\n 616\\t\\tpublic function __set($key, $value)\\n 617\\t\\t{\\n 618\\t\\t\\t$this->set($key, $value);\\n 619\\t\\t}\\n 620\\t\\n 621\\t\\tpublic function offsetSet($key, $value): void\\n 622\\t\\t{\\n 623\\t\\t\\t$this->set($key, $value);\\n 624\\t\\t}\\n 625\\t\\n 626\\t\\tpublic function set($key, $value, array $options = [])\\n 627\\t\\t{\\n 628\\t\\t\\tif ($this->_readOnly)\\n 629\\t\\t\\t{\\n 630\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Entity is read only\\\");\\n 631\\t\\t\\t}\\n 632\\t\\n 633\\t\\t\\tif ($this->_deleted)\\n 634\\t\\t\\t{\\n 635\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' on a deleted entity\\\");\\n 636\\t\\t\\t}\\n 637\\t\\n 638\\t\\t\\tif ($this->_writePending == 'delete')\\n 639\\t\\t\\t{\\n 640\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a deletion was pending\\\");\\n 641\\t\\t\\t}\\n 642\\t\\n 643\\t\\t\\tif ($this->_writePending && empty($options['forceSet']))\\n 644\\t\\t\\t{\\n 645\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a save was pending without forceSet\\\");\\n 646\\t\\t\\t}\\n 647\\t\\n 648\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 649\\t\\t\\t{\\n 650\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 651\\t\\t\\t\\t{\\n 652\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 653\\t\\t\\t\\t}\\n 654\\t\\t\\t\\treturn false;\\n 655\\t\\t\\t}\\n 656\\t\\n 657\\t\\t\\t$column = $this->_structure->columns[$key];\\n 658\\t\\n 659\\t\\t\\tif ((!empty($column['readOnly']) || !empty($column['autoIncrement'])) && empty($options['forceSet']))\\n 660\\t\\t\\t{\\n 661\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 662\\t\\t\\t\\t{\\n 663\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is read only, can only be set with forceSet\\\");\\n 664\\t\\t\\t\\t}\\n 665\\t\\t\\t\\treturn false;\\n 666\\t\\t\\t}\\n 667\\t\\n 668\\t\\t\\tif (!empty($column['writeOnce']) && $this->isUpdate() && empty($options['forceSet']))\\n 669\\t\\t\\t{\\n 670\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 671\\t\\t\\t\\t{\\n 672\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' can only be written on insert or set with forceSet\\\");\\n 673\\t\\t\\t\\t}\\n 674\\t\\t\\t\\treturn false;\\n 675\\t\\t\\t}\\n 676\\t\\n 677\\t\\t\\tif ($value instanceof DeferredValue)\\n 678\\t\\t\\t{\\n 679\\t\\t\\t\\t$this->_setInternal($key, $value);\\n 680\\t\\t\\t\\treturn true;\\n 681\\t\\t\\t}\\n 682\\t\\n 683\\t\\t\\tif (!$this->_verifyValueCustom($value, $key, $column['type'], $column))\\n 684\\t\\t\\t{\\n 685\\t\\t\\t\\treturn false;\\n 686\\t\\t\\t}\\n 687\\t\\n 688\\t\\t\\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\\n 689\\t\\n 690\\t\\t\\tif (!$this->_em->getValueFormatter()->applyValueConstraints(\\n 691\\t\\t\\t\\t$value,\\n 692\\t\\t\\t\\t$column['type'],\\n 693\\t\\t\\t\\t$column,\\n 694\\t\\t\\t\\t$constraintError,\\n 695\\t\\t\\t\\t!empty($options['forceConstraint'])\\n 696\\t\\t\\t))\\n 697\\t\\t\\t{\\n 698\\t\\t\\t\\tif ($constraintError)\\n 699\\t\\t\\t\\t{\\n 700\\t\\t\\t\\t\\t$this->error($constraintError, $key, false);\\n 701\\t\\t\\t\\t}\\n 702\\t\\n 703\\t\\t\\t\\treturn false;\\n 704\\t\\t\\t}\\n 705\\t\\n 706\\t\\t\\tif ($this->_columnValueIsDifferent($key, $value, $column) && $value !== null)\\n 707\\t\\t\\t{\\n 708\\t\\t\\t\\tif (!empty($column['unique']))\\n 709\\t\\t\\t\\t{\\n 710\\t\\t\\t\\t\\tif (!$this->_verifyUniqueValue($value, $key, $column['unique']))\\n 711\\t\\t\\t\\t\\t{\\n 712\\t\\t\\t\\t\\t\\treturn false;\\n 713\\t\\t\\t\\t\\t}\\n 714\\t\\t\\t\\t}\\n 715\\t\\t\\t\\telse if (!empty($column['autoIncrement']) || $this->_structure->primaryKey === $key)\\n 716\\t\\t\\t\\t{\\n 717\\t\\t\\t\\t\\tif (!$this->_verifyUniqueValue($value, $key, true))\\n 718\\t\\t\\t\\t\\t{\\n 719\\t\\t\\t\\t\\t\\treturn false;\\n 720\\t\\t\\t\\t\\t}\\n 721\\t\\t\\t\\t}\\n 722\\t\\t\\t}\\n 723\\t\\n 724\\t\\t\\t$this->_setInternal($key, $value);\\n 725\\t\\t\\treturn true;\\n 726\\t\\t}\\n 727\\t\\n 728\\t\\tpublic function setTrusted($key, $value)\\n 729\\t\\t{\\n 730\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 731\\t\\t\\t{\\n 732\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 733\\t\\t\\t}\\n 734\\t\\n 735\\t\\t\\t$column = $this->_structure->columns[$key];\\n 736\\t\\t\\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\\n 737\\t\\n 738\\t\\t\\t$this->_setInternal($key, $value);\\n 739\\t\\t\\treturn true;\\n 740\\t\\t}\\n 741\\t\\n 742\\t\\tpublic function setFromEncoded($key, $value, array $options = [])\\n 743\\t\\t{\\n 744\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 745\\t\\t\\t{\\n 746\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 747\\t\\t\\t}\\n 748\\t\\n 749\\t\\t\\t$column = $this->_structure->columns[$key];\\n 750\\t\\n 751\\t\\t\\t$value = $this->_em->decodeValueFromSourceExtended($column['type'], $value, $column);\\n 752\\t\\t\\treturn $this->set($key, $value, $options);\\n 753\\t\\t}\\n 754\\t\\n 755\\t\\tpublic function setAsSaved($key, $value)\\n 756\\t\\t{\\n 757\\t\\t\\tif (!$this->exists() && !$this->_writeRunning)\\n 758\\t\\t\\t{\\n 759\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Can only set an already saved value on a saved entity\\\");\\n 760\\t\\t\\t}\\n\"}\nTEMPLATE_ENTITY={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Entity/Template.php\",\"rc\":0,\"text\":\" 1\\t $History\\n 44\\t * @property-read Style|null $Style_\\n 45\\t */\\n 46\\tclass Template extends Entity\\n 47\\t{\\n 48\\t\\tprotected $modificationStatuses = null;\\n 49\\t\\n 50\\t\\t/**\\n 51\\t\\t * @return string\\n 52\\t\\t */\\n 53\\t\\tpublic function getCombinedTitle()\\n 54\\t\\t{\\n 55\\t\\t\\treturn \\\"{$this->type}:{$this->title}\\\";\\n 56\\t\\t}\\n 57\\t\\n 58\\t\\t/**\\n 59\\t\\t * @return Style\\n 60\\t\\t */\\n 61\\t\\tpublic function getStyle()\\n 62\\t\\t{\\n 63\\t\\t\\tif ($this->style_id == 0)\\n 64\\t\\t\\t{\\n 65\\t\\t\\t\\treturn $this->getStyleRepo()->getMasterStyle();\\n 66\\t\\t\\t}\\n 67\\t\\t\\telse\\n 68\\t\\t\\t{\\n 69\\t\\t\\t\\treturn $this->getRelation('Style');\\n 70\\t\\t\\t}\\n 71\\t\\t}\\n 72\\t\\n 73\\t\\t/**\\n 74\\t\\t * @return Template|null\\n 75\\t\\t */\\n 76\\t\\tpublic function getParentTemplate()\\n 77\\t\\t{\\n 78\\t\\t\\tif (!$this->style_id)\\n 79\\t\\t\\t{\\n 80\\t\\t\\t\\treturn null;\\n 81\\t\\t\\t}\\n 82\\t\\n 83\\t\\t\\t$style = $this->Style;\\n 84\\t\\t\\tif (!$style)\\n 85\\t\\t\\t{\\n 86\\t\\t\\t\\treturn null;\\n 87\\t\\t\\t}\\n 88\\t\\n 89\\t\\t\\t$templateMap = $this->finder(TemplateMapFinder::class)\\n 90\\t\\t\\t\\t->where([\\n 91\\t\\t\\t\\t\\t'style_id' => $style->parent_id,\\n 92\\t\\t\\t\\t\\t'type' => $this->type,\\n 93\\t\\t\\t\\t\\t'title' => $this->title,\\n 94\\t\\t\\t\\t])\\n 95\\t\\t\\t\\t->with('Template', true)\\n 96\\t\\t\\t\\t->with('Template.Style', false)\\n 97\\t\\t\\t\\t->fetchOne();\\n 98\\t\\t\\tif (!$templateMap)\\n 99\\t\\t\\t{\\n 100\\t\\t\\t\\treturn null;\\n 101\\t\\t\\t}\\n 102\\t\\n 103\\t\\t\\treturn $templateMap->Template;\\n 104\\t\\t}\\n 105\\t\\n 106\\t\\tpublic function getAbstractedCompiledTemplatePath($languageId, $styleId, $new = true)\\n 107\\t\\t{\\n 108\\t\\t\\t$title = $new ? $this->getValue('title') : $this->getExistingValue('title');\\n 109\\t\\t\\t$type = $new ? $this->getValue('type') : $this->getExistingValue('type');\\n 110\\t\\n 111\\t\\t\\treturn 'code-cache://templates/l' . $languageId . '/s' . $styleId . '/' . $type . '/' . $title . '.php';\\n 112\\t\\t}\\n 113\\t\\n 114\\t\\tpublic function getHash()\\n 115\\t\\t{\\n 116\\t\\t\\t$contents = str_replace(\\\"\\\\r\\\", '', $this->template);\\n 117\\t\\t\\treturn md5($contents);\\n 118\\t\\t}\\n 119\\t\\n 120\\t\\t/**\\n 121\\t\\t * @return array\\n 122\\t\\t */\\n 123\\t\\tpublic function getPhrasesUsed()\\n 124\\t\\t{\\n 125\\t\\t\\treturn $this->db()->fetchAllColumn(\\\"\\n 126\\t\\t\\t\\tSELECT phrase_title\\n 127\\t\\t\\t\\tFROM xf_template_phrase\\n 128\\t\\t\\t\\tWHERE template_id = ?\\n 129\\t\\t\\t\\\", $this->template_id);\\n 130\\t\\t}\\n 131\\t\\n 132\\t\\tpublic function reparseTemplate($forceValid = false, &$error = null)\\n 133\\t\\t{\\n 134\\t\\t\\t$valid = $this->validateTemplateText($this->template, $forceValid, $ast, $error);\\n 135\\t\\t\\tif ($valid && $ast != $this->template_parsed)\\n 136\\t\\t\\t{\\n 137\\t\\t\\t\\t$this->template_parsed = $ast;\\n 138\\t\\t\\t\\treturn true;\\n 139\\t\\t\\t}\\n 140\\t\\t\\tif (!$valid)\\n 141\\t\\t\\t{\\n 142\\t\\t\\t\\t$this->error($error, 'template');\\n 143\\t\\t\\t\\treturn true;\\n 144\\t\\t\\t}\\n 145\\t\\n 146\\t\\t\\treturn false;\\n 147\\t\\t}\\n 148\\t\\n 149\\t\\tpublic function setTemplateUnchecked($template)\\n 150\\t\\t{\\n 151\\t\\t\\t$template = strval($template);\\n 152\\t\\t\\t$this->_setInternal('template', $template);\\n 153\\t\\t\\t$this->validateTemplateText($template, true, $ast);\\n 154\\t\\n 155\\t\\t\\t$this->template_parsed = $ast;\\n 156\\t\\n 157\\t\\t\\treturn true;\\n 158\\t\\t}\\n 159\\t\\n 160\\t\\tprotected function verifyTitle($title)\\n 161\\t\\t{\\n 162\\t\\t\\tif (substr($title, 0, 1) == '.' || strpos($title, '..') !== false)\\n 163\\t\\t\\t{\\n 164\\t\\t\\t\\t$this->error(\\\\XF::phrase('please_enter_title_using_only_alphanumeric_dot'), 'title');\\n 165\\t\\t\\t\\treturn false;\\n 166\\t\\t\\t}\\n 167\\t\\n 168\\t\\t\\tif (preg_match('/\\\\.html$/i', $title))\\n 169\\t\\t\\t{\\n 170\\t\\t\\t\\t$this->error(\\\\XF::phrase('template_titles_may_not_end_in_html'), 'title');\\n 171\\t\\t\\t\\treturn false;\\n 172\\t\\t\\t}\\n 173\\t\\n 174\\t\\t\\treturn true;\\n 175\\t\\t}\\n 176\\t\\n 177\\t\\tprotected function verifyTemplate($template)\\n 178\\t\\t{\\n 179\\t\\t\\t$valid = $this->validateTemplateText($template, false, $ast, $error);\\n 180\\t\\t\\tif (!$valid)\\n 181\\t\\t\\t{\\n 182\\t\\t\\t\\t$this->error($error, 'template');\\n 183\\t\\t\\t\\treturn false;\\n 184\\t\\t\\t}\\n 185\\t\\n 186\\t\\t\\t$this->template_parsed = $ast;\\n 187\\t\\n 188\\t\\t\\treturn true;\\n 189\\t\\t}\\n 190\\t\\n 191\\t\\tprotected function validateTemplateText($template, $forceValid = false, &$ast = null, &$error = null)\\n 192\\t\\t{\\n 193\\t\\t\\t$compiler = $this->app()->templateCompiler();\\n 194\\t\\n 195\\t\\t\\t$templateModRepo = $this->repository(TemplateModificationRepository::class);\\n 196\\t\\t\\t$templateWithModifications = $templateModRepo->applyModificationsToTemplate(\\n 197\\t\\t\\t\\t$this->type,\\n 198\\t\\t\\t\\t$this->title,\\n 199\\t\\t\\t\\t$template,\\n 200\\t\\t\\t\\t$modificationStatuses\\n 201\\t\\t\\t);\\n 202\\t\\n 203\\t\\t\\t$standardParse = true;\\n 204\\t\\t\\t$error = null;\\n 205\\t\\n 206\\t\\t\\tif ($modificationStatuses)\\n 207\\t\\t\\t{\\n 208\\t\\t\\t\\ttry\\n 209\\t\\t\\t\\t{\\n 210\\t\\t\\t\\t\\t$ast = $compiler->compileToAst($templateWithModifications);\\n 211\\t\\n 212\\t\\t\\t\\t\\tif ($this->getOption('test_compile'))\\n 213\\t\\t\\t\\t\\t{\\n 214\\t\\t\\t\\t\\t\\t$compiler->compileAst($ast);\\n 215\\t\\t\\t\\t\\t}\\n 216\\t\\t\\t\\t\\t$standardParse = false;\\n 217\\t\\t\\t\\t}\\n 218\\t\\t\\t\\tcatch (Exception $e)\\n 219\\t\\t\\t\\t{\\n 220\\t\\t\\t\\t\\t$error = $e->getMessage() . ' - ' . \\\\XF::phrase('template_modifications:') . ' ' . \\\"{$this->type}:{$this->title}\\\";\\n 221\\t\\t\\t\\t\\tforeach ($modificationStatuses AS &$status)\\n 222\\t\\t\\t\\t\\t{\\n 223\\t\\t\\t\\t\\t\\tif (is_int($status))\\n 224\\t\\t\\t\\t\\t\\t{\\n 225\\t\\t\\t\\t\\t\\t\\t$status = 'error_compile';\\n 226\\t\\t\\t\\t\\t\\t}\\n 227\\t\\t\\t\\t\\t}\\n 228\\t\\t\\t\\t}\\n 229\\t\\t\\t}\\n 230\\t\\n 231\\t\\t\\tif ($standardParse)\\n 232\\t\\t\\t{\\n 233\\t\\t\\t\\ttry\\n 234\\t\\t\\t\\t{\\n 235\\t\\t\\t\\t\\t$ast = $compiler->compileToAst($template);\\n 236\\t\\n 237\\t\\t\\t\\t\\tif ($this->getOption('test_compile'))\\n 238\\t\\t\\t\\t\\t{\\n 239\\t\\t\\t\\t\\t\\t$compiler->compileAst($ast);\\n 240\\t\\t\\t\\t\\t}\\n 241\\t\\n 242\\t\\t\\t\\t\\tif ($forceValid || !$this->getOption('report_modification_errors'))\\n 243\\t\\t\\t\\t\\t{\\n 244\\t\\t\\t\\t\\t\\t$error = null;\\n 245\\t\\t\\t\\t\\t}\\n 246\\t\\t\\t\\t}\\n 247\\t\\t\\t\\tcatch (Exception $e)\\n 248\\t\\t\\t\\t{\\n 249\\t\\t\\t\\t\\t$error = $e->getMessage() . ' - ' . \\\\XF::phrase('template_name:') . ' ' . \\\"{$this->type}:{$this->title}\\\";\\n 250\\t\\t\\t\\t}\\n 251\\t\\t\\t}\\n 252\\t\\n 253\\t\\t\\tif ($forceValid && $error)\\n 254\\t\\t\\t{\\n 255\\t\\t\\t\\t$error = null;\\n 256\\t\\t\\t\\t$ast = $compiler->stringAst($template);\\n 257\\t\\t\\t}\\n 258\\t\\n 259\\t\\t\\tif ($error)\\n 260\\t\\t\\t{\\n\"}\nENTITY_WRITE_PENDING_ALL={\"err\":\"\",\"rc\":0,\"text\":\"76-\\n77-\\tprotected $_options = [];\\n78-\\n79-\\tprotected $_deleted = false;\\n80-\\n81-\\tprotected $_readOnly = false;\\n82:\\tprotected $_writePending = false;\\n83-\\tprotected $_writeRunning = false;\\n84-\\tprotected $_errors = [];\\n85-\\n86-\\t/**\\n87-\\t * @var \\\\Closure[]\\n88-\\t */\\n--\\n632-\\n633-\\t\\tif ($this->_deleted)\\n634-\\t\\t{\\n635-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' on a deleted entity\\\");\\n636-\\t\\t}\\n637-\\n638:\\t\\tif ($this->_writePending == 'delete')\\n639-\\t\\t{\\n640-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a deletion was pending\\\");\\n641-\\t\\t}\\n642-\\n643:\\t\\tif ($this->_writePending && empty($options['forceSet']))\\n644-\\t\\t{\\n645-\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a save was pending without forceSet\\\");\\n646-\\t\\t}\\n647-\\n648-\\t\\tif (!isset($this->_structure->columns[$key]))\\n649-\\t\\t{\\n--\\n1365-\\t}\\n1366-\\n1367-\\tfinal public function saveIfChanged(&$saved = null, $throw = true, $newTransaction = true)\\n1368-\\t{\\n1369-\\t\\tif (!$this->_newValues && $this->isUpdate())\\n1370-\\t\\t{\\n1371:\\t\\t\\t$this->_writePending = false;\\n1372-\\n1373-\\t\\t\\t$saved = false;\\n1374-\\t\\t\\treturn true;\\n1375-\\t\\t}\\n1376-\\n1377-\\t\\t$saved = true;\\n--\\n1412-\\t\\t$this->db()->update($this->_structure->table, $dbUpdate, $condition);\\n1413-\\t}\\n1414-\\n1415-\\tfinal public function preSave()\\n1416-\\t{\\n1417-\\t\\t// write will be pending after calling this; this means call it only once\\n1418:\\t\\tif ($this->_writePending != 'save')\\n1419-\\t\\t{\\n1420-\\t\\t\\t$this->_fillDeferredValues('preSave');\\n1421-\\t\\t\\t$this->_preSave();\\n1422-\\n1423-\\t\\t\\tforeach ($this->getBehaviors() AS $behavior)\\n1424-\\t\\t\\t{\\n--\\n1453-\\t\\t\\tif ($this->isInsert())\\n1454-\\t\\t\\t{\\n1455-\\t\\t\\t\\t$this->_fillInsertDefaults();\\n1456-\\t\\t\\t}\\n1457-\\t\\t\\t$this->_validateRequirements();\\n1458-\\n1459:\\t\\t\\t$this->_writePending = 'save';\\n1460-\\t\\t}\\n1461-\\n1462-\\t\\treturn count($this->_errors) == 0;\\n1463-\\t}\\n1464-\\n1465-\\tprotected function _preSave()\\n--\\n1610-\\tprotected function _postSave()\\n1611-\\t{\\n1612-\\t}\\n1613-\\n1614-\\tprotected function _saveCleanUp(array $newDbValues)\\n1615-\\t{\\n1616:\\t\\t$this->_writePending = false;\\n1617-\\t\\t$this->_writeRunning = false;\\n1618-\\t\\t$this->_previousValues = $this->_values;\\n1619-\\t\\t$this->_values = array_merge($this->_values, $newDbValues);\\n1620-\\t\\t$this->_newValues = [];\\n1621-\\t\\t$this->_errors = [];\\n1622-\\t\\t$this->_cascadeSave = [];\\n--\\n1633-\\t\\t\\t$fn($this);\\n1634-\\t\\t}\\n1635-\\t}\\n1636-\\n1637-\\tpublic function reset()\\n1638-\\t{\\n1639:\\t\\t$this->_writePending = false;\\n1640-\\t\\t$this->_newValues = [];\\n1641-\\t\\t$this->_errors = [];\\n1642-\\t\\t$this->_getterCache = [];\\n1643-\\t\\t$this->_valueCache = [];\\n1644-\\t\\t$this->_options = [];\\n1645-\\t\\t$this->_cascadeSave = [];\\n--\\n1736-\\t\\tif ($newTransaction)\\n1737-\\t\\t{\\n1738-\\t\\t\\t$db->commit();\\n1739-\\t\\t}\\n1740-\\n1741-\\t\\t$this->_em->detachEntity($this);\\n1742:\\t\\t$this->_writePending = false;\\n1743-\\t\\t$this->_writeRunning = false;\\n1744-\\n1745-\\t\\treturn true;\\n1746-\\t}\\n1747-\\n1748-\\tfinal public function preDelete()\\n1749-\\t{\\n1750-\\t\\tif ($this->_deleted)\\n1751-\\t\\t{\\n1752-\\t\\t\\treturn true;\\n1753-\\t\\t}\\n1754-\\n1755:\\t\\tif ($this->_writePending != 'delete')\\n1756-\\t\\t{\\n1757-\\t\\t\\t$this->_preDelete();\\n1758-\\n1759-\\t\\t\\tforeach ($this->getBehaviors() AS $behavior)\\n1760-\\t\\t\\t{\\n1761-\\t\\t\\t\\t$behavior->preDelete();\\n--\\n1804-\\t\\t\\t\\t\\t\\t}\\n1805-\\t\\t\\t\\t\\t}\\n1806-\\t\\t\\t\\t}\\n1807-\\t\\t\\t}\\n1808-\\n1809-\\t\\t\\t$this->_em->finishCascadeEvent('preDelete');\\n1810:\\t\\t\\t$this->_writePending = 'delete';\\n1811-\\t\\t}\\n1812-\\n1813-\\t\\treturn count($this->_errors) == 0;\\n1814-\\t}\\n1815-\\n1816-\\tpublic function isDeleted()\\n\"}\nDB_SCHEMAS=[\"xf_newfi\"]\nTEMPLATE_INDEXES={\"err\":\"\",\"rc\":0,\"rows\":[\"xf_template\\t0\\tPRIMARY\\t1\\ttemplate_id\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t1\\ttype\\tA\\t6\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t2\\ttitle\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\",\"xf_template\\t0\\ttype_title_style_id\\t3\\tstyle_id\\tA\\t1307\\tNULL\\tNULL\\t\\tBTREE\\t\\t\\tNO\"]}\nTEMPLATE_ROWS={\"err\":\"\",\"rc\":0,\"rows\":[\"1610\\t0\\tpublic\\tnewfi_portal\\tNewfi/Portal\\t1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741\"]}\nADDON_ROW={\"err\":\"\",\"rc\":0,\"rows\":[\"Newfi/Portal\\t1000010\\t1.0.0 Alpha 1\\t1\\t0\\tNULL\"]}\nERROR42={\"err\":\"\",\"rc\":0,\"rows\":[\"42\\tLogicException\\tAttempted to set 'type' while a save was pending without forceSet\\tsrc/XF/Mvc/Entity/Entity.php\\t645\\t#0 src/XF/Mvc/Entity/Entity.php(618): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->set('type', 'public')\\\\n#1 src/XF/AddOn/DataType/AbstractDataType.php(275): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->__set('type', 'public')\\\\n#2 src/XF/AddOn/DataType/Template.php(94): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\AbstractDataType->importMappedAttributes(Object(SimpleXMLElement), Object(XF\\\\\\\\Entity\\\\\\\\Template))\\\\n#3 src/XF/Job/AddOnData.php(111): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\Template->importAddOnData('Newfi/Portal', Object(SimpleXMLElement), 0, 8)\\\\n#4 src/XF/Job/Manager.php(275): XF\\\\\\\\Job\\\\\\\\AddOnData->run(8)\\\\n#5 src/XF/Job/Manager.php(205): XF\\\\\\\\Job\\\\\\\\Manager->runJobInternal(Array, 8)\\\\n#6 src/XF/Job/Manager.php(174): XF\\\\\\\\Job\\\\\\\\Manager->runJobEntry(Array, 8)\\\\n#7 src/XF/Cli/Runner.php(228): XF\\\\\\\\Job\\\\\\\\Manager->runById(530, 8)\\\\n#8 src/XF/Cli/Runner.php(116): XF\\\\\\\\Cli\\\\\\\\Runner->postExecutionCleanUp(Object(Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Output\\\\\\\\ConsoleOutput))\\\\n#9 cmd.php(17): XF\\\\\\\\Cli\\\\\\\\Runner->run()\\\\n#10 {main}\"]}\nIN_MEMORY_ENTITY_PROBE={\"err\":\"\",\"rc\":0,\"rows\":[\"{\\\"label\\\":\\\"initial\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_check_duplicate_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_report_modification_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_behavior_option\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_title\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_type\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_version_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_version_string\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_style_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\",\"{\\\"label\\\":\\\"after_addon_id\\\",\\\"writePending\\\":false,\\\"type\\\":\\\"public\\\",\\\"title\\\":\\\"newfi_portal\\\",\\\"style_id\\\":0,\\\"addon_id\\\":\\\"Newfi/Portal\\\"}\"]}\nNATIVE_REBUILD_IMPLEMENTATION_GREP={\"err\":\"\",\"rc\":0,\"text\":\"/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:16:use XF\\\\Job\\\\AddOnData;\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:150:\\tprotected function importAddOnData(InputInterface $input, OutputInterface $output, AddOn $addOn)\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:171:\\t\\t\\t\\t'xfAddOnData-' . $addOn->addon_id,\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:172:\\t\\t\\t\\tAddOnData::class,\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:219:\\t\\t\\t'xf:addon-sub-action',\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Designer/RebuildMetadata.php:11:class RebuildMetadata extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildUsers.php:7:class RebuildUsers extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSearch.php:8:class RebuildSearch extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractRebuildCommand.php:11:abstract class AbstractRebuildCommand extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildAttachmentThumbs.php:7:class RebuildAttachmentThumbs extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildForums.php:7:class RebuildForums extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildThreads.php:8:class RebuildThreads extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildStats.php:8:class RebuildStats extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildReactionScore.php:7:class RebuildReactionScore extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildIconUsage.php:7:class RebuildIconUsage extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildMessageCounts.php:7:class RebuildMessageCounts extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSitemap.php:7:class RebuildSitemap extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractImageOptimizationCommand.php:7:abstract class AbstractImageOptimizationCommand extends AbstractRebuildCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/RebuildMasterData.php:10:class RebuildMasterData extends AbstractCommand implements CustomAppCommandInterface\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:18:\\t\\t\\t->setName('xf:addon-sub-action')\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:66:\\t\\t\\t\\t\\t$this->importAddOnData($input, $output, $addOn);\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:12:class AddOnRebuild extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:20:\\t\\t\\t->setName('xf:addon-rebuild')\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/AbstractImportCommand.php:87:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/LintTemplates.php:39:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/GeneratePhpStormMeta.php:145:\\t\\t\\t'AddOnDataType' => [\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildMetadata.php:9:class RebuildMetadata extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildCaches.php:11:class RebuildCaches extends AbstractCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/SyncTemplates.php:37:\\t\\t$installedAddOns = \\\\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildPosts.php:7:class RebuildPosts extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePosts.php:7:class RebuildProfilePosts extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildConversationMessages.php:7:class RebuildConversationMessages extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePostComments.php:7:class RebuildProfilePostComments extends AbstractEmbedMetadataCommand\\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:40:\\t\\t\\t\\t\\t$dataManager->finalizeRemoveAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:52:\\t\\t\\t$isComplete = $handler->deleteAddOnData($addOnId, $timeLeft);\\n/var/www/forums/newfi/public/src/XF/Job/Poll.php:7:class Poll extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/SearchRebuild.php:9:class SearchRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AttachmentThumb.php:10:class AttachmentThumb extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/StylePropertyRebuild.php:7:class StylePropertyRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/MessageCount.php:8:class MessageCount extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Thread.php:7:class Thread extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuildPartial.php:7:class PermissionRebuildPartial extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AbstractImageOptimizationJob.php:7:abstract class AbstractImageOptimizationJob extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/SearchForum.php:8:class SearchForum extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Forum.php:5:class Forum extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuild.php:9:class PermissionRebuild extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/AbstractRebuildJob.php:5:abstract class AbstractRebuildJob extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/ProfilePost.php:5:class ProfilePost extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/CoreCacheRebuild.php:31:class CoreCacheRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/StyleAssetRebuild.php:7:class StyleAssetRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/PhraseRebuild.php:12:class PhraseRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:7:class AddOnData extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:66:\\t\\t\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:105:\\t\\t\\t$handler->deleteAddOnData($addOnId);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:111:\\t\\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:115:\\t\\t\\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\\n/var/www/forums/newfi/public/src/XF/Job/Gravatar.php:10:class Gravatar extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/Conversation.php:7:class Conversation extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/TemplateRebuild.php:12:class TemplateRebuild extends AbstractJob\\n/var/www/forums/newfi/public/src/XF/Job/User.php:9:class User extends AbstractRebuildJob\\n/var/www/forums/newfi/public/src/XF/Job/AddOnInstallBatch.php:341:\\t\\t$job = $this->app->job(AddOnData::class, 0, $params['data']);\\n/var/www/forums/newfi/public/src/XF/Job/ReactionScore.php:7:class ReactionScore extends AbstractRebuildJob\\n\"}\nSTAGING_QGA={\"err\":\"\",\"hostname\":\"newfi-staging\",\"rc\":0}\nPRODUCTION_QGA={\"err\":\"\",\"hostname\":\"newfi-prod\",\"rc\":0}\nPRODUCTION_PUBLIC_HTTP={\"err\":\"\",\"http\":\"200\",\"rc\":0}\nSTAGING_LOCAL_HTTP={\"err\":\"\",\"http\":\"503\",\"rc\":0}\nFINAL_DECISION=RCA7_COMPLETE_NO_MUTATION_ALL_REMAINING_TEMPLATE_IMPORT_EVIDENCE_READY\nRCA7_END=true\n" -} +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260907T221701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-09-07T22:17:01Z","finished_at_utc":"2026-09-07T22: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 c11093c2..672a6c7a 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,76 +1,162 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7 +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z STATUS=OK RC=0 HOST=pve01 -MODE=read-only -COMPONENT=newfi-portal200-consolidated-final-template-rca -REFERENCE_REGISTER_CHECK=OK -REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=c5f396b50e88cd61820fa8cdbca3f34d37dc259b18372b37317ac6fdb2a7c1ae -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=37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273 -SANITIZED_OUTPUT_SHA256=37e75015b9a9ff7b1ac27197d0b089cd3e006cd0027cfdfbbb2c85bd17160273 +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 -RCA7_BEGIN=true -COMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA7 -MUTATION_SCOPE=NONE_READ_ONLY -MUTATIONS_PERFORMED=NO -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -REFERENCE_CHECK=OK -REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 -AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED -NEWFI_260907_A_PORTAL200_APPLY4FIX1_HISTORY_SHA256=18232adf6297087543f368e45e70f705eb529a09d4c392443d9b28b6376df394 -NEWFI_260907_A_PORTAL200_APPLY4FIX1_STATUS=FAIL -FAILED_CHANGES_MADE=true -FAILED_ROLLBACK_STARTED=true -FAILED_ROLLBACK_RESTORED=false -FAILED_MUTATION_OUTCOME=ROLLBACK_FAILED -FAILED_FINAL_DECISION=FAIL_PORTAL200_APPLY4_ROLLBACK_INCOMPLETE -NEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_HISTORY_SHA256=76f74a798da08cdfa0e1545961b58ffb293b33c15868510c915c3dbb261bac34 -NEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA6_STATUS=OK -GIT_HEAD={"err":"","out":"06bab5acd124e768f70305b3d7eca2f595871890","rc":0} -GIT_STATUS={"err":"","out":"","rc":0} -GIT_LOG3={"err":"","out":"06bab5a (HEAD -> implementation/newfi-closed-mvp-20260906, origin/implementation/newfi-closed-mvp-20260906) style: apply Big Water XenForo theme [NEWFI-260907-STYLE199B]\n4ade504 brand: add Newfi technical identity assets\n9f7e0ca ops: authorize final Newfi public cutover","rc":0} -GIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890 -CANDIDATE_XML_BYTES=10977 -CANDIDATE_XML_SHA256=1650c3d868d4bc47703f1b75f1f179cd25309b2d3b20a2b848e81a4423c00861 -CANDIDATE_CHILDREN=[{"attrib":{"title":"newfi_portal","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"i":0,"tag":"template","text_bytes":7027,"text_sha256":"2a7b332223b7fb0af18cfb9659d1698603faa79d5d0f63c49359dd6a1c8fbf7a"},{"attrib":{"title":"newfi_portal.less","type":"public","version_id":"1000010","version_string":"1.0.0 Alpha 1"},"i":1,"tag":"template","text_bytes":3634,"text_sha256":"25b1dc49e89ef7615a11cd1023876c4ab9b5f96f90b1fca52a4815bb5992fbe8"}] -TEMPLATE_DATATYPE={"err":"","path":"/var/www/forums/newfi/public/src/XF/AddOn/DataType/Template.php","rc":0,"text":" 35\t\t\t\t$this->exportMappedAttributes($node, $entry);\n 36\t\t\t\t$this->exportCdata($node, $entry->template);\n 37\t\n 38\t\t\t\t$container->appendChild($node);\n 39\t\t\t}\n 40\t\n 41\t\t\treturn $entries->count() ? true : false;\n 42\t\t}\n 43\t\n 44\t\tpublic function importAddOnData($addOnId, \\SimpleXMLElement $container, $start = 0, $maxRunTime = 0)\n 45\t\t{\n 46\t\t\t$startTime = microtime(true);\n 47\t\n 48\t\t\t$entries = $this->getEntries($container, $start);\n 49\t\t\tif (!$entries)\n 50\t\t\t{\n 51\t\t\t\treturn false;\n 52\t\t\t}\n 53\t\n 54\t\t\t$conditions = [];\n 55\t\t\tforeach ($entries AS $entry)\n 56\t\t\t{\n 57\t\t\t\t$conditions[] = [\n 58\t\t\t\t\t'type' => (string) $entry['type'],\n 59\t\t\t\t\t'title' => (string) $entry['title'],\n 60\t\t\t\t];\n 61\t\t\t}\n 62\t\t\tif ($conditions)\n 63\t\t\t{\n 64\t\t\t\t$existing = $this->finder()\n 65\t\t\t\t\t->whereOr($conditions)\n 66\t\t\t\t\t->where('style_id', 0)\n 67\t\t\t\t\t->fetch()\n 68\t\t\t\t\t->groupBy('type', 'title');\n 69\t\t\t}\n 70\t\t\telse\n 71\t\t\t{\n 72\t\t\t\t$existing = [];\n 73\t\t\t}\n 74\t\n 75\t\t\t$i = 0;\n 76\t\t\t$last = 0;\n 77\t\n 78\t\t\tforeach ($entries AS $entry)\n 79\t\t\t{\n 80\t\t\t\t$i++;\n 81\t\n 82\t\t\t\tif ($i <= $start)\n 83\t\t\t\t{\n 84\t\t\t\t\tcontinue;\n 85\t\t\t\t}\n 86\t\n 87\t\t\t\t$type = (string) $entry['type'];\n 88\t\t\t\t$title = (string) $entry['title'];\n 89\t\t\t\t$entity = $existing[$type][$title] ?? $this->create();\n 90\t\t\t\t$entity->setOption('check_duplicate', false);\n 91\t\t\t\t$entity->setOption('report_modification_errors', false);\n 92\t\t\t\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\n 93\t\n 94\t\t\t\t$this->importMappedAttributes($entry, $entity);\n 95\t\t\t\t$entity->style_id = 0;\n 96\t\t\t\t$entity->template = $this->getCdataValue($entry);\n 97\t\t\t\t$entity->addon_id = $addOnId;\n 98\t\t\t\t$entity->save(true, false);\n 99\t\n 100\t\t\t\t\\XF::dequeueRunOnce('styleLastModifiedDate');\n 101\t\n 102\t\t\t\tif ($this->resume($maxRunTime, $startTime))\n 103\t\t\t\t{\n 104\t\t\t\t\t$last = $i;\n 105\t\t\t\t\tbreak;\n 106\t\t\t\t}\n 107\t\t\t}\n 108\t\t\treturn ($last ?: false);\n 109\t\t}\n 110\t\n 111\t\tpublic function deleteOrphanedAddOnData($addOnId, \\SimpleXMLElement $container)\n 112\t\t{\n 113\t\t\t$existing = $this->findAllForType($addOnId)->where('style_id', 0)->fetch()->groupBy('type', 'title');\n 114\t\t\tif (!$existing)\n 115\t\t\t{\n"} -ABSTRACT_DATATYPE={"err":"","path":"/var/www/forums/newfi/public/src/XF/AddOn/DataType/AbstractDataType.php","rc":0,"text":" 220\t\t\t\t\t// CURRENTLY NOT USED DUE TO BC ISSUES WITH 2.0.x < 2.0.4\n 221\t\t\t\t\tif (self::USE_AUTO_CDATA && is_string($value) && !preg_match('/^[^<>&\"]*$/si', $value))\n 222\t\t\t\t\t{\n 223\t\t\t\t\t\t// This exports CDATA, but does not escape `]]>` like \\XF\\Util\\XML::createDomCdataSection(),\n 224\t\t\t\t\t\t// because it needs to be transparently importable.\n 225\t\t\t\t\t\t// If you need to export values containing `]]>`, use exportCdataToNewNode()\n 226\t\t\t\t\t\t// and remove this attribute from exportMappedAttributes()\n 227\t\n 228\t\t\t\t\t\t$newNode = $tag->ownerDocument->createElement($attr);\n 229\t\n 230\t\t\t\t\t\t$newNode->appendChild(\n 231\t\t\t\t\t\t\t$newNode->ownerDocument->createCDATASection($entity->{$attr})\n 232\t\t\t\t\t\t);\n 233\t\n 234\t\t\t\t\t\t$tag->appendChild($newNode);\n 235\t\t\t\t\t}\n 236\t\t\t\t\telse\n 237\t\t\t\t\t{\n 238\t\t\t\t\t\t$tag->setAttribute($attr, $value);\n 239\t\t\t\t\t}\n 240\t\t\t\t}\n 241\t\t\t}\n 242\t\t}\n 243\t\n 244\t\tprotected function importMappedAttributes(\\SimpleXMLElement $el, Entity $entity, $allowMaintained = true)\n 245\t\t{\n 246\t\t\tif ($entity->exists() && $allowMaintained)\n 247\t\t\t{\n 248\t\t\t\t$maintained = $this->getMaintainedAttributes();\n 249\t\t\t}\n 250\t\t\telse\n 251\t\t\t{\n 252\t\t\t\t$maintained = [];\n 253\t\t\t}\n 254\t\n 255\t\t\tforeach ($this->getMappedAttributes() AS $attr)\n 256\t\t\t{\n 257\t\t\t\tif (in_array($attr, $maintained))\n 258\t\t\t\t{\n 259\t\t\t\t\tcontinue;\n 260\t\t\t\t}\n 261\t\n 262\t\t\t\tif (self::USE_AUTO_CDATA)\n 263\t\t\t\t{\n 264\t\t\t\t\tif (isset($el[$attr]))\n 265\t\t\t\t\t{\n 266\t\t\t\t\t\t$entity->$attr = (string) $el[$attr];\n 267\t\t\t\t\t}\n 268\t\t\t\t\telse if (isset($el->{$attr}))\n 269\t\t\t\t\t{\n 270\t\t\t\t\t\t$entity->$attr = (string) $el->{$attr};\n 271\t\t\t\t\t}\n 272\t\t\t\t}\n 273\t\t\t\telse\n 274\t\t\t\t{\n 275\t\t\t\t\t$entity->$attr = (string) $el[$attr];\n 276\t\t\t\t}\n 277\t\t\t}\n 278\t\t}\n 279\t\n 280\t\tprotected function pluckXmlAttribute(\\SimpleXMLElement $els, $key)\n 281\t\t{\n 282\t\t\t$values = [];\n 283\t\t\t$i = 0;\n 284\t\t\tforeach ($els AS $el)\n 285\t\t\t{\n 286\t\t\t\t$values[$i++] = (string) $el[$key];\n 287\t\t\t}\n 288\t\n 289\t\t\treturn $values;\n 290\t\t}\n 291\t\n 292\t\tprotected function getSimpleAttributes(\\SimpleXMLElement $el)\n 293\t\t{\n 294\t\t\t$output = [];\n 295\t\t\tforeach ($el->attributes() AS $key => $val)\n 296\t\t\t{\n 297\t\t\t\t$output[$key] = (string) $val;\n 298\t\t\t}\n 299\t\t\treturn $output;\n 300\t\t}\n"} -ADDON_DATA_JOB={"err":"","path":"/var/www/forums/newfi/public/src/XF/Job/AddOnData.php","rc":0,"text":" 1\t null,\n 11\t\t\t'data_dir' => null,\n 12\t\n 13\t\t\t'data_types' => null,\n 14\t\t\t'current_type' => null,\n 15\t\n 16\t\t\t'start' => 0,\n 17\t\t];\n 18\t\n 19\t\tprotected $currentType = null;\n 20\t\tprotected $lastIndex = 0;\n 21\t\tprotected $totalEntries = 0;\n 22\t\n 23\t\tpublic function run($maxRunTime)\n 24\t\t{\n 25\t\t\tif ($this->data['addon_id'] != 'XF')\n 26\t\t\t{\n 27\t\t\t\t$addOnManager = $this->app->addOnManager();\n 28\t\t\t\t$addOn = $addOnManager->getById($this->data['addon_id']);\n 29\t\t\t\tif (!$addOn)\n 30\t\t\t\t{\n 31\t\t\t\t\t// add-on isn't installed, can't do anything\n 32\t\t\t\t\treturn $this->complete();\n 33\t\t\t\t}\n 34\t\n 35\t\t\t\tif ($this->data['data_dir'] === null)\n 36\t\t\t\t{\n 37\t\t\t\t\t$this->data['data_dir'] = $addOn->getDataDirectory();\n 38\t\t\t\t}\n 39\t\t\t}\n 40\t\t\telse\n 41\t\t\t{\n 42\t\t\t\t$addOn = null; // don't populate this for XF since it wouldn't be the same type of object\n 43\t\n 44\t\t\t\tif ($this->data['data_dir'] === null)\n 45\t\t\t\t{\n 46\t\t\t\t\t$ds = \\XF::$DS;\n 47\t\t\t\t\t$this->data['data_dir'] = \\XF::getAddOnDirectory() . $ds . 'XF' . $ds . '_data';\n 48\t\t\t\t}\n 49\t\t\t}\n 50\t\n 51\t\t\t$dataManager = $this->app->addOnDataManager();\n 52\t\n 53\t\t\t$addOnId = $this->data['addon_id'];\n 54\t\t\t$dataDir = $this->data['data_dir'];\n 55\t\n 56\t\t\tif ($this->data['data_types'] === null)\n 57\t\t\t{\n 58\t\t\t\t$dataTypes = $dataManager->getDataTypeClasses();\n 59\t\t\t\tforeach ($dataTypes AS $key => $dataType)\n 60\t\t\t\t{\n 61\t\t\t\t\t$handler = $dataManager->getDataTypeHandler($dataType);\n 62\t\t\t\t\t$xml = $handler->openTypeFile($dataDir);\n 63\t\t\t\t\tif (!$xml || !$xml->count())\n 64\t\t\t\t\t{\n 65\t\t\t\t\t\t// We can skip this type entirely, but clean up any existing data first\n 66\t\t\t\t\t\t$handler->deleteAddOnData($addOnId);\n 67\t\t\t\t\t\tunset($dataTypes[$key]);\n 68\t\t\t\t\t}\n 69\t\t\t\t}\n 70\t\t\t\t$this->data['data_types'] = $dataTypes;\n 71\t\t\t}\n 72\t\n 73\t\t\tif (!$this->data['current_type'])\n 74\t\t\t{\n 75\t\t\t\t$this->data['current_type'] = array_shift($this->data['data_types']);\n 76\t\t\t\tif (!$this->data['current_type'])\n 77\t\t\t\t{\n 78\t\t\t\t\tif ($addOn)\n 79\t\t\t\t\t{\n 80\t\t\t\t\t\t$addOn->postDataImport();\n 81\t\t\t\t\t}\n 82\t\n 83\t\t\t\t\t$repo = $this->app->repository(StyleRepository::class);\n 84\t\t\t\t\t$repo->updateAllStylesLastModifiedDateLater();\n 85\t\n 86\t\t\t\t\treturn $this->complete();\n 87\t\t\t\t}\n 88\t\n 89\t\t\t\t$this->data['start'] = 0;\n 90\t\t\t}\n 91\t\n 92\t\t\t$start = $this->data['start'];\n 93\t\t\t$type = $this->data['current_type'];\n 94\t\n 95\t\t\t$handler = $dataManager->getDataTypeHandler($type);\n 96\t\n 97\t\t\t$this->currentType = $handler->getContainerTag();\n 98\t\t\t$this->lastIndex = $start;\n 99\t\n 100\t\t\t$xml = $handler->openTypeFile($dataDir);\n 101\t\t\tif (!$xml || !$xml->count())\n 102\t\t\t{\n 103\t\t\t\t// No data so skip and delete existing data for type (if any)\n 104\t\t\t\t$this->data['current_type'] = null;\n 105\t\t\t\t$handler->deleteAddOnData($addOnId);\n 106\t\t\t\treturn $this->resume();\n 107\t\t\t}\n 108\t\n 109\t\t\t$this->totalEntries = $xml->count();\n 110\t\n 111\t\t\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\n 112\t\t\tif (!$last)\n 113\t\t\t{\n 114\t\t\t\t// finished type, delete any existing data not in the XML file for this type\n 115\t\t\t\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\n 116\t\n 117\t\t\t\t\\XF::triggerRunOnce();\n 118\t\t\t\t$this->data['current_type'] = null;\n 119\t\t\t\treturn $this->resume();\n 120\t\t\t}\n 121\t\n 122\t\t\t$this->data['start'] = $last;\n 123\t\t\treturn $this->resume();\n 124\t\t}\n 125\t\n 126\t\tpublic function getStatusMessage()\n 127\t\t{\n 128\t\t\t// TODO: These (and the types) probably should be phrased\n 129\t\t\t$actionPhrase = 'Importing';\n 130\t\t\tif ($this->data['addon_id'] == 'XF')\n 131\t\t\t{\n 132\t\t\t\t$typePhrase = 'Master data';\n 133\t\t\t}\n 134\t\t\telse\n 135\t\t\t{\n 136\t\t\t\t$typePhrase = 'Add-on data';\n 137\t\t\t}\n 138\t\n 139\t\t\t$currentType = null;\n 140\t\t\tif ($this->currentType)\n 141\t\t\t{\n 142\t\t\t\t$currentType = ucfirst(str_replace('_', ' ', $this->currentType));\n 143\t\t\t}\n 144\t\n 145\t\t\tif ($currentType && $this->lastIndex)\n 146\t\t\t{\n 147\t\t\t\t$percentage = $this->app->language()->numberFormat(($this->lastIndex / $this->totalEntries) * 100, 1);\n 148\t\t\t\treturn sprintf('%s... %s (%s: %s%%)', $actionPhrase, $typePhrase, $currentType, $percentage);\n 149\t\t\t}\n 150\t\t\telse if ($currentType)\n 151\t\t\t{\n 152\t\t\t\treturn sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, $currentType);\n 153\t\t\t}\n 154\t\t\telse\n 155\t\t\t{\n 156\t\t\t\treturn sprintf('%s... %s', $actionPhrase, $typePhrase);\n 157\t\t\t}\n 158\t\t}\n 159\t\n 160\t\tpublic function canCancel()\n 161\t\t{\n 162\t\t\treturn false;\n 163\t\t}\n 164\t\n 165\t\tpublic function canTriggerByChoice()\n 166\t\t{\n 167\t\t\treturn false;\n 168\t\t}\n 169\t}\n"} -ENTITY_CORE={"err":"","path":"/var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php","rc":0,"text":" 520\t\t\t\t{\n 521\t\t\t\t\tthrow new \\InvalidArgumentException(\"To many relations must be hydrated with collections\");\n 522\t\t\t\t}\n 523\t\t\t}\n 524\t\t\telse\n 525\t\t\t{\n 526\t\t\t\tif ($value !== null && !($value instanceof Entity))\n 527\t\t\t\t{\n 528\t\t\t\t\tthrow new \\InvalidArgumentException(\"To one relations must be hydrated with entities or null\");\n 529\t\t\t\t}\n 530\t\t\t}\n 531\t\n 532\t\t\t$this->_relations[$key] = $value;\n 533\t\t}\n 534\t\n 535\t\tpublic function getExistingRelation($key)\n 536\t\t{\n 537\t\t\t$relations = $this->_structure->relations;\n 538\t\n 539\t\t\tif (empty($relations[$key]))\n 540\t\t\t{\n 541\t\t\t\tthrow new \\InvalidArgumentException(\"Unknown relation $key\");\n 542\t\t\t}\n 543\t\n 544\t\t\treturn $this->_em->getRelation($relations[$key], $this, 'existing');\n 545\t\t}\n 546\t\n 547\t\tpublic function getRelationFinder($key, $type = 'current')\n 548\t\t{\n 549\t\t\t$relations = $this->_structure->relations;\n 550\t\n 551\t\t\tif (empty($relations[$key]))\n 552\t\t\t{\n 553\t\t\t\tthrow new \\InvalidArgumentException(\"Unknown relation $key\");\n 554\t\t\t}\n 555\t\n 556\t\t\treturn $this->_em->getRelationFinder($relations[$key], $this, $type);\n 557\t\t}\n 558\t\n 559\t\tpublic function toArray($allowGetters = true)\n 560\t\t{\n 561\t\t\t$output = [];\n 562\t\t\tforeach ($this->_structure->columns AS $key => $null)\n 563\t\t\t{\n 564\t\t\t\t$output[$key] = $allowGetters ? $this->get($key) : $this->getValue($key);\n 565\t\t\t}\n 566\t\n 567\t\t\treturn $output;\n 568\t\t}\n 569\t\n 570\t\tfinal public function toApiResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\n 571\t\t{\n 572\t\t\t$result = new EntityResult($this);\n 573\t\t\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\n 574\t\n 575\t\t\tif ($subResult instanceof EntityResultInterface)\n 576\t\t\t{\n 577\t\t\t\treturn $subResult;\n 578\t\t\t}\n 579\t\t\telse\n 580\t\t\t{\n 581\t\t\t\treturn $result;\n 582\t\t\t}\n 583\t\t}\n 584\t\n 585\t\tfinal public function toWebhookResult($verbosity = self::VERBOSITY_NORMAL, array $options = [])\n 586\t\t{\n 587\t\t\t$result = new EntityResult($this, EntityResultInterface::TYPE_WEBHOOK);\n 588\t\t\t$subResult = $this->setupApiResultData($result, $verbosity, $options);\n 589\t\n 590\t\t\tif ($subResult instanceof EntityResultInterface)\n 591\t\t\t{\n 592\t\t\t\treturn $subResult;\n 593\t\t\t}\n 594\t\n 595\t\t\treturn $result;\n 596\t\t}\n 597\t\n 598\t\t/**\n 599\t\t * This method must be overridden to enable API access to this entity.\n 600\t\t *\n 601\t\t * @param EntityResult $result\n 602\t\t * @param int $verbosity\n 603\t\t * @param array $options\n 604\t\t */\n 605\t\tprotected function setupApiResultData(\n 606\t\t\tEntityResult $result,\n 607\t\t\t$verbosity = self::VERBOSITY_NORMAL,\n 608\t\t\tarray $options = []\n 609\t\t)\n 610\t\t{\n 611\t\t\tthrow new \\LogicException(\n 612\t\t\t\t\"API result rules not defined by \" . $this->_structure->shortName . '. Override setupApiResultData().'\n 613\t\t\t);\n 614\t\t}\n 615\t\n 616\t\tpublic function __set($key, $value)\n 617\t\t{\n 618\t\t\t$this->set($key, $value);\n 619\t\t}\n 620\t\n 621\t\tpublic function offsetSet($key, $value): void\n 622\t\t{\n 623\t\t\t$this->set($key, $value);\n 624\t\t}\n 625\t\n 626\t\tpublic function set($key, $value, array $options = [])\n 627\t\t{\n 628\t\t\tif ($this->_readOnly)\n 629\t\t\t{\n 630\t\t\t\tthrow new \\LogicException(\"Entity is read only\");\n 631\t\t\t}\n 632\t\n 633\t\t\tif ($this->_deleted)\n 634\t\t\t{\n 635\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' on a deleted entity\");\n 636\t\t\t}\n 637\t\n 638\t\t\tif ($this->_writePending == 'delete')\n 639\t\t\t{\n 640\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a deletion was pending\");\n 641\t\t\t}\n 642\t\n 643\t\t\tif ($this->_writePending && empty($options['forceSet']))\n 644\t\t\t{\n 645\t\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a save was pending without forceSet\");\n 646\t\t\t}\n 647\t\n 648\t\t\tif (!isset($this->_structure->columns[$key]))\n 649\t\t\t{\n 650\t\t\t\tif (empty($options['skipInvalid']))\n 651\t\t\t\t{\n 652\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 653\t\t\t\t}\n 654\t\t\t\treturn false;\n 655\t\t\t}\n 656\t\n 657\t\t\t$column = $this->_structure->columns[$key];\n 658\t\n 659\t\t\tif ((!empty($column['readOnly']) || !empty($column['autoIncrement'])) && empty($options['forceSet']))\n 660\t\t\t{\n 661\t\t\t\tif (empty($options['skipInvalid']))\n 662\t\t\t\t{\n 663\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is read only, can only be set with forceSet\");\n 664\t\t\t\t}\n 665\t\t\t\treturn false;\n 666\t\t\t}\n 667\t\n 668\t\t\tif (!empty($column['writeOnce']) && $this->isUpdate() && empty($options['forceSet']))\n 669\t\t\t{\n 670\t\t\t\tif (empty($options['skipInvalid']))\n 671\t\t\t\t{\n 672\t\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' can only be written on insert or set with forceSet\");\n 673\t\t\t\t}\n 674\t\t\t\treturn false;\n 675\t\t\t}\n 676\t\n 677\t\t\tif ($value instanceof DeferredValue)\n 678\t\t\t{\n 679\t\t\t\t$this->_setInternal($key, $value);\n 680\t\t\t\treturn true;\n 681\t\t\t}\n 682\t\n 683\t\t\tif (!$this->_verifyValueCustom($value, $key, $column['type'], $column))\n 684\t\t\t{\n 685\t\t\t\treturn false;\n 686\t\t\t}\n 687\t\n 688\t\t\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\n 689\t\n 690\t\t\tif (!$this->_em->getValueFormatter()->applyValueConstraints(\n 691\t\t\t\t$value,\n 692\t\t\t\t$column['type'],\n 693\t\t\t\t$column,\n 694\t\t\t\t$constraintError,\n 695\t\t\t\t!empty($options['forceConstraint'])\n 696\t\t\t))\n 697\t\t\t{\n 698\t\t\t\tif ($constraintError)\n 699\t\t\t\t{\n 700\t\t\t\t\t$this->error($constraintError, $key, false);\n 701\t\t\t\t}\n 702\t\n 703\t\t\t\treturn false;\n 704\t\t\t}\n 705\t\n 706\t\t\tif ($this->_columnValueIsDifferent($key, $value, $column) && $value !== null)\n 707\t\t\t{\n 708\t\t\t\tif (!empty($column['unique']))\n 709\t\t\t\t{\n 710\t\t\t\t\tif (!$this->_verifyUniqueValue($value, $key, $column['unique']))\n 711\t\t\t\t\t{\n 712\t\t\t\t\t\treturn false;\n 713\t\t\t\t\t}\n 714\t\t\t\t}\n 715\t\t\t\telse if (!empty($column['autoIncrement']) || $this->_structure->primaryKey === $key)\n 716\t\t\t\t{\n 717\t\t\t\t\tif (!$this->_verifyUniqueValue($value, $key, true))\n 718\t\t\t\t\t{\n 719\t\t\t\t\t\treturn false;\n 720\t\t\t\t\t}\n 721\t\t\t\t}\n 722\t\t\t}\n 723\t\n 724\t\t\t$this->_setInternal($key, $value);\n 725\t\t\treturn true;\n 726\t\t}\n 727\t\n 728\t\tpublic function setTrusted($key, $value)\n 729\t\t{\n 730\t\t\tif (!isset($this->_structure->columns[$key]))\n 731\t\t\t{\n 732\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 733\t\t\t}\n 734\t\n 735\t\t\t$column = $this->_structure->columns[$key];\n 736\t\t\t$value = $this->_castValueToType($value, $key, $column['type'], $column);\n 737\t\n 738\t\t\t$this->_setInternal($key, $value);\n 739\t\t\treturn true;\n 740\t\t}\n 741\t\n 742\t\tpublic function setFromEncoded($key, $value, array $options = [])\n 743\t\t{\n 744\t\t\tif (!isset($this->_structure->columns[$key]))\n 745\t\t\t{\n 746\t\t\t\tthrow new \\InvalidArgumentException(\"Column '$key' is unknown\");\n 747\t\t\t}\n 748\t\n 749\t\t\t$column = $this->_structure->columns[$key];\n 750\t\n 751\t\t\t$value = $this->_em->decodeValueFromSourceExtended($column['type'], $value, $column);\n 752\t\t\treturn $this->set($key, $value, $options);\n 753\t\t}\n 754\t\n 755\t\tpublic function setAsSaved($key, $value)\n 756\t\t{\n 757\t\t\tif (!$this->exists() && !$this->_writeRunning)\n 758\t\t\t{\n 759\t\t\t\tthrow new \\LogicException(\"Can only set an already saved value on a saved entity\");\n 760\t\t\t}\n"} -TEMPLATE_ENTITY={"err":"","path":"/var/www/forums/newfi/public/src/XF/Entity/Template.php","rc":0,"text":" 1\t $History\n 44\t * @property-read Style|null $Style_\n 45\t */\n 46\tclass Template extends Entity\n 47\t{\n 48\t\tprotected $modificationStatuses = null;\n 49\t\n 50\t\t/**\n 51\t\t * @return string\n 52\t\t */\n 53\t\tpublic function getCombinedTitle()\n 54\t\t{\n 55\t\t\treturn \"{$this->type}:{$this->title}\";\n 56\t\t}\n 57\t\n 58\t\t/**\n 59\t\t * @return Style\n 60\t\t */\n 61\t\tpublic function getStyle()\n 62\t\t{\n 63\t\t\tif ($this->style_id == 0)\n 64\t\t\t{\n 65\t\t\t\treturn $this->getStyleRepo()->getMasterStyle();\n 66\t\t\t}\n 67\t\t\telse\n 68\t\t\t{\n 69\t\t\t\treturn $this->getRelation('Style');\n 70\t\t\t}\n 71\t\t}\n 72\t\n 73\t\t/**\n 74\t\t * @return Template|null\n 75\t\t */\n 76\t\tpublic function getParentTemplate()\n 77\t\t{\n 78\t\t\tif (!$this->style_id)\n 79\t\t\t{\n 80\t\t\t\treturn null;\n 81\t\t\t}\n 82\t\n 83\t\t\t$style = $this->Style;\n 84\t\t\tif (!$style)\n 85\t\t\t{\n 86\t\t\t\treturn null;\n 87\t\t\t}\n 88\t\n 89\t\t\t$templateMap = $this->finder(TemplateMapFinder::class)\n 90\t\t\t\t->where([\n 91\t\t\t\t\t'style_id' => $style->parent_id,\n 92\t\t\t\t\t'type' => $this->type,\n 93\t\t\t\t\t'title' => $this->title,\n 94\t\t\t\t])\n 95\t\t\t\t->with('Template', true)\n 96\t\t\t\t->with('Template.Style', false)\n 97\t\t\t\t->fetchOne();\n 98\t\t\tif (!$templateMap)\n 99\t\t\t{\n 100\t\t\t\treturn null;\n 101\t\t\t}\n 102\t\n 103\t\t\treturn $templateMap->Template;\n 104\t\t}\n 105\t\n 106\t\tpublic function getAbstractedCompiledTemplatePath($languageId, $styleId, $new = true)\n 107\t\t{\n 108\t\t\t$title = $new ? $this->getValue('title') : $this->getExistingValue('title');\n 109\t\t\t$type = $new ? $this->getValue('type') : $this->getExistingValue('type');\n 110\t\n 111\t\t\treturn 'code-cache://templates/l' . $languageId . '/s' . $styleId . '/' . $type . '/' . $title . '.php';\n 112\t\t}\n 113\t\n 114\t\tpublic function getHash()\n 115\t\t{\n 116\t\t\t$contents = str_replace(\"\\r\", '', $this->template);\n 117\t\t\treturn md5($contents);\n 118\t\t}\n 119\t\n 120\t\t/**\n 121\t\t * @return array\n 122\t\t */\n 123\t\tpublic function getPhrasesUsed()\n 124\t\t{\n 125\t\t\treturn $this->db()->fetchAllColumn(\"\n 126\t\t\t\tSELECT phrase_title\n 127\t\t\t\tFROM xf_template_phrase\n 128\t\t\t\tWHERE template_id = ?\n 129\t\t\t\", $this->template_id);\n 130\t\t}\n 131\t\n 132\t\tpublic function reparseTemplate($forceValid = false, &$error = null)\n 133\t\t{\n 134\t\t\t$valid = $this->validateTemplateText($this->template, $forceValid, $ast, $error);\n 135\t\t\tif ($valid && $ast != $this->template_parsed)\n 136\t\t\t{\n 137\t\t\t\t$this->template_parsed = $ast;\n 138\t\t\t\treturn true;\n 139\t\t\t}\n 140\t\t\tif (!$valid)\n 141\t\t\t{\n 142\t\t\t\t$this->error($error, 'template');\n 143\t\t\t\treturn true;\n 144\t\t\t}\n 145\t\n 146\t\t\treturn false;\n 147\t\t}\n 148\t\n 149\t\tpublic function setTemplateUnchecked($template)\n 150\t\t{\n 151\t\t\t$template = strval($template);\n 152\t\t\t$this->_setInternal('template', $template);\n 153\t\t\t$this->validateTemplateText($template, true, $ast);\n 154\t\n 155\t\t\t$this->template_parsed = $ast;\n 156\t\n 157\t\t\treturn true;\n 158\t\t}\n 159\t\n 160\t\tprotected function verifyTitle($title)\n 161\t\t{\n 162\t\t\tif (substr($title, 0, 1) == '.' || strpos($title, '..') !== false)\n 163\t\t\t{\n 164\t\t\t\t$this->error(\\XF::phrase('please_enter_title_using_only_alphanumeric_dot'), 'title');\n 165\t\t\t\treturn false;\n 166\t\t\t}\n 167\t\n 168\t\t\tif (preg_match('/\\.html$/i', $title))\n 169\t\t\t{\n 170\t\t\t\t$this->error(\\XF::phrase('template_titles_may_not_end_in_html'), 'title');\n 171\t\t\t\treturn false;\n 172\t\t\t}\n 173\t\n 174\t\t\treturn true;\n 175\t\t}\n 176\t\n 177\t\tprotected function verifyTemplate($template)\n 178\t\t{\n 179\t\t\t$valid = $this->validateTemplateText($template, false, $ast, $error);\n 180\t\t\tif (!$valid)\n 181\t\t\t{\n 182\t\t\t\t$this->error($error, 'template');\n 183\t\t\t\treturn false;\n 184\t\t\t}\n 185\t\n 186\t\t\t$this->template_parsed = $ast;\n 187\t\n 188\t\t\treturn true;\n 189\t\t}\n 190\t\n 191\t\tprotected function validateTemplateText($template, $forceValid = false, &$ast = null, &$error = null)\n 192\t\t{\n 193\t\t\t$compiler = $this->app()->templateCompiler();\n 194\t\n 195\t\t\t$templateModRepo = $this->repository(TemplateModificationRepository::class);\n 196\t\t\t$templateWithModifications = $templateModRepo->applyModificationsToTemplate(\n 197\t\t\t\t$this->type,\n 198\t\t\t\t$this->title,\n 199\t\t\t\t$template,\n 200\t\t\t\t$modificationStatuses\n 201\t\t\t);\n 202\t\n 203\t\t\t$standardParse = true;\n 204\t\t\t$error = null;\n 205\t\n 206\t\t\tif ($modificationStatuses)\n 207\t\t\t{\n 208\t\t\t\ttry\n 209\t\t\t\t{\n 210\t\t\t\t\t$ast = $compiler->compileToAst($templateWithModifications);\n 211\t\n 212\t\t\t\t\tif ($this->getOption('test_compile'))\n 213\t\t\t\t\t{\n 214\t\t\t\t\t\t$compiler->compileAst($ast);\n 215\t\t\t\t\t}\n 216\t\t\t\t\t$standardParse = false;\n 217\t\t\t\t}\n 218\t\t\t\tcatch (Exception $e)\n 219\t\t\t\t{\n 220\t\t\t\t\t$error = $e->getMessage() . ' - ' . \\XF::phrase('template_modifications:') . ' ' . \"{$this->type}:{$this->title}\";\n 221\t\t\t\t\tforeach ($modificationStatuses AS &$status)\n 222\t\t\t\t\t{\n 223\t\t\t\t\t\tif (is_int($status))\n 224\t\t\t\t\t\t{\n 225\t\t\t\t\t\t\t$status = 'error_compile';\n 226\t\t\t\t\t\t}\n 227\t\t\t\t\t}\n 228\t\t\t\t}\n 229\t\t\t}\n 230\t\n 231\t\t\tif ($standardParse)\n 232\t\t\t{\n 233\t\t\t\ttry\n 234\t\t\t\t{\n 235\t\t\t\t\t$ast = $compiler->compileToAst($template);\n 236\t\n 237\t\t\t\t\tif ($this->getOption('test_compile'))\n 238\t\t\t\t\t{\n 239\t\t\t\t\t\t$compiler->compileAst($ast);\n 240\t\t\t\t\t}\n 241\t\n 242\t\t\t\t\tif ($forceValid || !$this->getOption('report_modification_errors'))\n 243\t\t\t\t\t{\n 244\t\t\t\t\t\t$error = null;\n 245\t\t\t\t\t}\n 246\t\t\t\t}\n 247\t\t\t\tcatch (Exception $e)\n 248\t\t\t\t{\n 249\t\t\t\t\t$error = $e->getMessage() . ' - ' . \\XF::phrase('template_name:') . ' ' . \"{$this->type}:{$this->title}\";\n 250\t\t\t\t}\n 251\t\t\t}\n 252\t\n 253\t\t\tif ($forceValid && $error)\n 254\t\t\t{\n 255\t\t\t\t$error = null;\n 256\t\t\t\t$ast = $compiler->stringAst($template);\n 257\t\t\t}\n 258\t\n 259\t\t\tif ($error)\n 260\t\t\t{\n"} -ENTITY_WRITE_PENDING_ALL={"err":"","rc":0,"text":"76-\n77-\tprotected $_options = [];\n78-\n79-\tprotected $_deleted = false;\n80-\n81-\tprotected $_readOnly = false;\n82:\tprotected $_writePending = false;\n83-\tprotected $_writeRunning = false;\n84-\tprotected $_errors = [];\n85-\n86-\t/**\n87-\t * @var \\Closure[]\n88-\t */\n--\n632-\n633-\t\tif ($this->_deleted)\n634-\t\t{\n635-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' on a deleted entity\");\n636-\t\t}\n637-\n638:\t\tif ($this->_writePending == 'delete')\n639-\t\t{\n640-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a deletion was pending\");\n641-\t\t}\n642-\n643:\t\tif ($this->_writePending && empty($options['forceSet']))\n644-\t\t{\n645-\t\t\tthrow new \\LogicException(\"Attempted to set '$key' while a save was pending without forceSet\");\n646-\t\t}\n647-\n648-\t\tif (!isset($this->_structure->columns[$key]))\n649-\t\t{\n--\n1365-\t}\n1366-\n1367-\tfinal public function saveIfChanged(&$saved = null, $throw = true, $newTransaction = true)\n1368-\t{\n1369-\t\tif (!$this->_newValues && $this->isUpdate())\n1370-\t\t{\n1371:\t\t\t$this->_writePending = false;\n1372-\n1373-\t\t\t$saved = false;\n1374-\t\t\treturn true;\n1375-\t\t}\n1376-\n1377-\t\t$saved = true;\n--\n1412-\t\t$this->db()->update($this->_structure->table, $dbUpdate, $condition);\n1413-\t}\n1414-\n1415-\tfinal public function preSave()\n1416-\t{\n1417-\t\t// write will be pending after calling this; this means call it only once\n1418:\t\tif ($this->_writePending != 'save')\n1419-\t\t{\n1420-\t\t\t$this->_fillDeferredValues('preSave');\n1421-\t\t\t$this->_preSave();\n1422-\n1423-\t\t\tforeach ($this->getBehaviors() AS $behavior)\n1424-\t\t\t{\n--\n1453-\t\t\tif ($this->isInsert())\n1454-\t\t\t{\n1455-\t\t\t\t$this->_fillInsertDefaults();\n1456-\t\t\t}\n1457-\t\t\t$this->_validateRequirements();\n1458-\n1459:\t\t\t$this->_writePending = 'save';\n1460-\t\t}\n1461-\n1462-\t\treturn count($this->_errors) == 0;\n1463-\t}\n1464-\n1465-\tprotected function _preSave()\n--\n1610-\tprotected function _postSave()\n1611-\t{\n1612-\t}\n1613-\n1614-\tprotected function _saveCleanUp(array $newDbValues)\n1615-\t{\n1616:\t\t$this->_writePending = false;\n1617-\t\t$this->_writeRunning = false;\n1618-\t\t$this->_previousValues = $this->_values;\n1619-\t\t$this->_values = array_merge($this->_values, $newDbValues);\n1620-\t\t$this->_newValues = [];\n1621-\t\t$this->_errors = [];\n1622-\t\t$this->_cascadeSave = [];\n--\n1633-\t\t\t$fn($this);\n1634-\t\t}\n1635-\t}\n1636-\n1637-\tpublic function reset()\n1638-\t{\n1639:\t\t$this->_writePending = false;\n1640-\t\t$this->_newValues = [];\n1641-\t\t$this->_errors = [];\n1642-\t\t$this->_getterCache = [];\n1643-\t\t$this->_valueCache = [];\n1644-\t\t$this->_options = [];\n1645-\t\t$this->_cascadeSave = [];\n--\n1736-\t\tif ($newTransaction)\n1737-\t\t{\n1738-\t\t\t$db->commit();\n1739-\t\t}\n1740-\n1741-\t\t$this->_em->detachEntity($this);\n1742:\t\t$this->_writePending = false;\n1743-\t\t$this->_writeRunning = false;\n1744-\n1745-\t\treturn true;\n1746-\t}\n1747-\n1748-\tfinal public function preDelete()\n1749-\t{\n1750-\t\tif ($this->_deleted)\n1751-\t\t{\n1752-\t\t\treturn true;\n1753-\t\t}\n1754-\n1755:\t\tif ($this->_writePending != 'delete')\n1756-\t\t{\n1757-\t\t\t$this->_preDelete();\n1758-\n1759-\t\t\tforeach ($this->getBehaviors() AS $behavior)\n1760-\t\t\t{\n1761-\t\t\t\t$behavior->preDelete();\n--\n1804-\t\t\t\t\t\t}\n1805-\t\t\t\t\t}\n1806-\t\t\t\t}\n1807-\t\t\t}\n1808-\n1809-\t\t\t$this->_em->finishCascadeEvent('preDelete');\n1810:\t\t\t$this->_writePending = 'delete';\n1811-\t\t}\n1812-\n1813-\t\treturn count($this->_errors) == 0;\n1814-\t}\n1815-\n1816-\tpublic function isDeleted()\n"} -DB_SCHEMAS=["xf_newfi"] -TEMPLATE_INDEXES={"err":"","rc":0,"rows":["xf_template\t0\tPRIMARY\t1\ttemplate_id\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t1\ttype\tA\t6\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t2\ttitle\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO","xf_template\t0\ttype_title_style_id\t3\tstyle_id\tA\t1307\tNULL\tNULL\t\tBTREE\t\t\tNO"]} -TEMPLATE_ROWS={"err":"","rc":0,"rows":["1610\t0\tpublic\tnewfi_portal\tNewfi/Portal\t1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741"]} -ADDON_ROW={"err":"","rc":0,"rows":["Newfi/Portal\t1000010\t1.0.0 Alpha 1\t1\t0\tNULL"]} -ERROR42={"err":"","rc":0,"rows":["42\tLogicException\tAttempted to set 'type' while a save was pending without forceSet\tsrc/XF/Mvc/Entity/Entity.php\t645\t#0 src/XF/Mvc/Entity/Entity.php(618): XF\\\\Mvc\\\\Entity\\\\Entity->set('type', 'public')\\n#1 src/XF/AddOn/DataType/AbstractDataType.php(275): XF\\\\Mvc\\\\Entity\\\\Entity->__set('type', 'public')\\n#2 src/XF/AddOn/DataType/Template.php(94): XF\\\\AddOn\\\\DataType\\\\AbstractDataType->importMappedAttributes(Object(SimpleXMLElement), Object(XF\\\\Entity\\\\Template))\\n#3 src/XF/Job/AddOnData.php(111): XF\\\\AddOn\\\\DataType\\\\Template->importAddOnData('Newfi/Portal', Object(SimpleXMLElement), 0, 8)\\n#4 src/XF/Job/Manager.php(275): XF\\\\Job\\\\AddOnData->run(8)\\n#5 src/XF/Job/Manager.php(205): XF\\\\Job\\\\Manager->runJobInternal(Array, 8)\\n#6 src/XF/Job/Manager.php(174): XF\\\\Job\\\\Manager->runJobEntry(Array, 8)\\n#7 src/XF/Cli/Runner.php(228): XF\\\\Job\\\\Manager->runById(530, 8)\\n#8 src/XF/Cli/Runner.php(116): XF\\\\Cli\\\\Runner->postExecutionCleanUp(Object(Symfony\\\\Component\\\\Console\\\\Output\\\\ConsoleOutput))\\n#9 cmd.php(17): XF\\\\Cli\\\\Runner->run()\\n#10 {main}"]} -IN_MEMORY_ENTITY_PROBE={"err":"","rc":0,"rows":["{\"label\":\"initial\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_check_duplicate_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_report_modification_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_behavior_option\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_title\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_type\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_version_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_version_string\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_style_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}","{\"label\":\"after_addon_id\",\"writePending\":false,\"type\":\"public\",\"title\":\"newfi_portal\",\"style_id\":0,\"addon_id\":\"Newfi/Portal\"}"]} -NATIVE_REBUILD_IMPLEMENTATION_GREP={"err":"","rc":0,"text":"/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:16:use XF\\Job\\AddOnData;\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:150:\tprotected function importAddOnData(InputInterface $input, OutputInterface $output, AddOn $addOn)\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:171:\t\t\t\t'xfAddOnData-' . $addOn->addon_id,\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:172:\t\t\t\tAddOnData::class,\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnActionTrait.php:219:\t\t\t'xf:addon-sub-action',\n/var/www/forums/newfi/public/src/XF/Cli/Command/Designer/RebuildMetadata.php:11:class RebuildMetadata extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildUsers.php:7:class RebuildUsers extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSearch.php:8:class RebuildSearch extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractRebuildCommand.php:11:abstract class AbstractRebuildCommand extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildAttachmentThumbs.php:7:class RebuildAttachmentThumbs extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildForums.php:7:class RebuildForums extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildThreads.php:8:class RebuildThreads extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildStats.php:8:class RebuildStats extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildReactionScore.php:7:class RebuildReactionScore extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildIconUsage.php:7:class RebuildIconUsage extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildMessageCounts.php:7:class RebuildMessageCounts extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/RebuildSitemap.php:7:class RebuildSitemap extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Rebuild/AbstractImageOptimizationCommand.php:7:abstract class AbstractImageOptimizationCommand extends AbstractRebuildCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/RebuildMasterData.php:10:class RebuildMasterData extends AbstractCommand implements CustomAppCommandInterface\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:18:\t\t\t->setName('xf:addon-sub-action')\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnSubAction.php:66:\t\t\t\t\t$this->importAddOnData($input, $output, $addOn);\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:12:class AddOnRebuild extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/AddOnRebuild.php:20:\t\t\t->setName('xf:addon-rebuild')\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/AbstractImportCommand.php:87:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/LintTemplates.php:39:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/GeneratePhpStormMeta.php:145:\t\t\t'AddOnDataType' => [\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildMetadata.php:9:class RebuildMetadata extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/RebuildCaches.php:11:class RebuildCaches extends AbstractCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/Development/SyncTemplates.php:37:\t\t$installedAddOns = \\XF::repository(AddOnRepository::class)->getInstalledAddOnData();\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildPosts.php:7:class RebuildPosts extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePosts.php:7:class RebuildProfilePosts extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildConversationMessages.php:7:class RebuildConversationMessages extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Cli/Command/EmbedMetadata/RebuildProfilePostComments.php:7:class RebuildProfilePostComments extends AbstractEmbedMetadataCommand\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:40:\t\t\t\t\t$dataManager->finalizeRemoveAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnUninstallData.php:52:\t\t\t$isComplete = $handler->deleteAddOnData($addOnId, $timeLeft);\n/var/www/forums/newfi/public/src/XF/Job/Poll.php:7:class Poll extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/SearchRebuild.php:9:class SearchRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AttachmentThumb.php:10:class AttachmentThumb extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/StylePropertyRebuild.php:7:class StylePropertyRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/MessageCount.php:8:class MessageCount extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Thread.php:7:class Thread extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuildPartial.php:7:class PermissionRebuildPartial extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AbstractImageOptimizationJob.php:7:abstract class AbstractImageOptimizationJob extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/SearchForum.php:8:class SearchForum extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Forum.php:5:class Forum extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/PermissionRebuild.php:9:class PermissionRebuild extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/AbstractRebuildJob.php:5:abstract class AbstractRebuildJob extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/ProfilePost.php:5:class ProfilePost extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/CoreCacheRebuild.php:31:class CoreCacheRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/StyleAssetRebuild.php:7:class StyleAssetRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/PhraseRebuild.php:12:class PhraseRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:7:class AddOnData extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:66:\t\t\t\t\t$handler->deleteAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:105:\t\t\t$handler->deleteAddOnData($addOnId);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:111:\t\t$last = $handler->importAddOnData($addOnId, $xml, $start, $maxRunTime);\n/var/www/forums/newfi/public/src/XF/Job/AddOnData.php:115:\t\t\t$handler->deleteOrphanedAddOnData($addOnId, $xml);\n/var/www/forums/newfi/public/src/XF/Job/Gravatar.php:10:class Gravatar extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/Conversation.php:7:class Conversation extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/TemplateRebuild.php:12:class TemplateRebuild extends AbstractJob\n/var/www/forums/newfi/public/src/XF/Job/User.php:9:class User extends AbstractRebuildJob\n/var/www/forums/newfi/public/src/XF/Job/AddOnInstallBatch.php:341:\t\t$job = $this->app->job(AddOnData::class, 0, $params['data']);\n/var/www/forums/newfi/public/src/XF/Job/ReactionScore.php:7:class ReactionScore extends AbstractRebuildJob\n"} -STAGING_QGA={"err":"","hostname":"newfi-staging","rc":0} -PRODUCTION_QGA={"err":"","hostname":"newfi-prod","rc":0} -PRODUCTION_PUBLIC_HTTP={"err":"","http":"200","rc":0} -STAGING_LOCAL_HTTP={"err":"","http":"503","rc":0} -FINAL_DECISION=RCA7_COMPLETE_NO_MUTATION_ALL_REMAINING_TEMPLATE_IMPORT_EVIDENCE_READY -RCA7_END=true +GENERATED_AT_UTC=[PRIVATE_IP]T22:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on +Quorum information +------------------ +Date: Tue 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][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":895493,"vmid":110},{"cpu":[PRIVATE_IP][PRIVATE_IP],"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":895496,"vmid":111},{"cpu":[PRIVATE_IP][PRIVATE_IP],"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":895496,"vmid":112},{"cpu":[PRIVATE_IP]932e-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":895499,"vmid":113},{"cpu":[PRIVATE_IP]3366,"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":895366,"vmid":130},{"cpu":[PRIVATE_IP]078965,"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":895483,"vmid":150},{"cpu":[PRIVATE_IP]782253,"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":895493,"vmid":160},{"cpu":[PRIVATE_IP]24666,"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":895491,"vmid":170},{"cpu":[PRIVATE_IP]49056,"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":895488,"vmid":171},{"cpu":[PRIVATE_IP]550786,"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":895362,"vmid":190},{"cpu":[PRIVATE_IP]282319,"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":83957,"vmid":210},{"cpu":[PRIVATE_IP]101573,"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":279890,"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]559259,"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":895519},{"cgroup-mode":2,"cpu":[PRIVATE_IP]7037,"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":895523},{"cgroup-mode":2,"cpu":[PRIVATE_IP]00361,"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":895384},{"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/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","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":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","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/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 20.45% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 9.25% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-retention-gc.service loaded failed failed Homelab owner-aware cloud retention GC + +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. + +1 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Tue [PRIVATE_IP] 01:17:32 MSK 29s Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Tue [PRIVATE_IP] 01:17:34 MSK 31s Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Tue [PRIVATE_IP] 01:18:30 MSK 1min 27s Tue [PRIVATE_IP] 01:13:12 MSK 3min 50s ago homelab-health-metrics.timer homelab-health-metrics.service +Tue [PRIVATE_IP] 01:19:17 MSK 2min 15s Tue [PRIVATE_IP] 01:14:17 MSK 2min 44s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Tue [PRIVATE_IP] 01:19:17 MSK 2min 15s Tue [PRIVATE_IP] 01:14:17 MSK 2min 44s ago netbird-peers-health.timer netbird-peers-health.service +Tue [PRIVATE_IP] 01:20:17 MSK 3min 15s Tue [PRIVATE_IP] 01:05:17 MSK 11min ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Tue [PRIVATE_IP] 01:22:54 MSK 5min Tue [PRIVATE_IP] 01:07:54 MSK 9min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Tue [PRIVATE_IP] 01:24:17 MSK 7min Tue [PRIVATE_IP] 01:14:17 MSK 2min 44s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Tue [PRIVATE_IP] 01:27:54 MSK 10min Tue [PRIVATE_IP] 01:12:54 MSK 4min 8s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Tue [PRIVATE_IP] 01:30:00 MSK 12min Mon [PRIVATE_IP] 23:30:00 MSK 1h 47min ago homelab-app-cloud-quorum-queue.timer homelab-app-cloud-quorum-queue.service +Tue [PRIVATE_IP] 01:30:00 MSK 12min Tue [PRIVATE_IP] 01:15:07 MSK 1min 55s ago homelab-incident-journal.timer homelab-incident-journal.service +Tue [PRIVATE_IP] 01:30:37 MSK 13min Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Tue [PRIVATE_IP] 01:30:39 MSK 13min Tue [PRIVATE_IP] 01:16:32 MSK 30s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Tue [PRIVATE_IP] 01:30:54 MSK 13min Tue [PRIVATE_IP] 01:15:54 MSK 1min 8s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Tue [PRIVATE_IP] 01:31:13 MSK 14min Tue [PRIVATE_IP] 01:16:16 MSK 46s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Tue [PRIVATE_IP] 01:32:19 MSK 15min Tue [PRIVATE_IP] 01:00:54 MSK 16min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Tue [PRIVATE_IP] 01:36:50 MSK 19min Tue [PRIVATE_IP] 01:06:07 MSK 10min ago homelab-backup-audit.timer homelab-backup-audit.service +Tue [PRIVATE_IP] 01:45:03 MSK 28min Tue [PRIVATE_IP] 01:13:54 MSK 3min 8s ago homelab-reference-refresh.timer homelab-reference-refresh.service +Tue [PRIVATE_IP] 01:45:26 MSK 28min Mon [PRIVATE_IP] 00:25:16 MSK 24h ago man-db.timer man-db.service +Tue [PRIVATE_IP] 02:07:28 MSK 50min Tue [PRIVATE_IP] 01:03:54 MSK 13min ago homelab-control-backup.timer homelab-control-backup.service +Tue [PRIVATE_IP] 03:20:32 MSK 2h 3min Mon [PRIVATE_IP] 03:24:53 MSK 21h ago homelab-backup-retention-gc.timer homelab-backup-retention-gc.service +Tue [PRIVATE_IP] 04:33:54 MSK 3h 16min Tue [PRIVATE_IP] 00:34:54 MSK 42min ago homelab-vm-cloud-quorum-queue.timer homelab-vm-cloud-quorum-queue.service +Tue [PRIVATE_IP] 04:35:43 MSK 3h 18min Mon [PRIVATE_IP] 22:31:37 MSK 2h 45min ago homelab-evidence-root.timer homelab-evidence-root.service +Tue [PRIVATE_IP] 04:35:54 MSK 3h 18min Mon [PRIVATE_IP] 22:35:54 MSK 2h 41min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Tue [PRIVATE_IP] 04:54:58 MSK 3h 37min Mon [PRIVATE_IP] 04:38:42 MSK 20h ago pve-daily-update.timer pve-daily-update.service +Tue [PRIVATE_IP] 06:05:10 MSK 4h 48min Mon [PRIVATE_IP] 23:55:54 MSK 1h 21min ago homelab-mailru-trash-gc.timer homelab-mailru-trash-gc.service +Tue [PRIVATE_IP] 06:12:28 MSK 4h 55min Mon [PRIVATE_IP] 06:19:50 MSK 18h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Tue [PRIVATE_IP] 07:07:23 MSK 5h 50min Mon [PRIVATE_IP] 07:07:53 MSK 18h ago homelab-drift-check.timer homelab-drift-check.service +Tue [PRIVATE_IP] 07:37:02 MSK 6h Mon [PRIVATE_IP] 07:38:52 MSK 17h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Tue [PRIVATE_IP] 07:48:47 MSK 6h Mon [PRIVATE_IP] 07:59:58 MSK 17h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Tue [PRIVATE_IP] 07:52:04 MSK 6h Mon [PRIVATE_IP] 07:50:22 MSK 17h ago homelab-alerting-health.timer homelab-alerting-health.service +Tue [PRIVATE_IP] 07:56:21 MSK 6h Mon [PRIVATE_IP] 07:56:16 MSK 17h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Tue [PRIVATE_IP] 08:04:06 MSK 6h Mon [PRIVATE_IP] 07:54:22 MSK 17h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Tue [PRIVATE_IP] 08:04:22 MSK 6h Mon [PRIVATE_IP] 07:57:52 MSK 17h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Tue [PRIVATE_IP] 08:10:52 MSK 6h Mon [PRIVATE_IP] 08:01:32 MSK 17h ago homelab-overall-health.timer homelab-overall-health.service +Tue [PRIVATE_IP] 08:21:03 MSK 7h Mon [PRIVATE_IP] 08:13:50 MSK 17h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Tue [PRIVATE_IP] 08:21:06 MSK 7h Mon [PRIVATE_IP] 08:19:16 MSK 16h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Tue [PRIVATE_IP] 08:34:29 MSK 7h Mon [PRIVATE_IP] 08:38:53 MSK 16h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Tue [PRIVATE_IP] 08:46:35 MSK 7h Mon [PRIVATE_IP] 09:00:19 MSK 16h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Tue [PRIVATE_IP] 08:46:44 MSK 7h Mon [PRIVATE_IP] 08:41:53 MSK 16h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Tue [PRIVATE_IP] 08:47:46 MSK 7h Mon [PRIVATE_IP] 08:53:04 MSK 16h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Tue [PRIVATE_IP] 10:15:00 MSK 8h Mon [PRIVATE_IP] 10:15:12 MSK 15h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Tue [PRIVATE_IP] 14:50:21 MSK 13h Mon [PRIVATE_IP] 22:53:32 MSK 2h 23min ago apt-daily.timer apt-daily.service +Tue [PRIVATE_IP] 16:47:18 MSK 15h Mon [PRIVATE_IP] 16:47:18 MSK 8h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Wed [PRIVATE_IP] 00:00:00 MSK 22h Tue [PRIVATE_IP] 00:00:07 MSK 1h 16min ago dpkg-db-backup.timer dpkg-db-backup.service +Wed [PRIVATE_IP] 00:05:59 MSK 22h Tue [PRIVATE_IP] 00:02:16 MSK 1h 14min ago homelab-docker-health.timer homelab-docker-health.service +Wed [PRIVATE_IP] 00:08:51 MSK 22h Tue [PRIVATE_IP] 00:18:04 MSK 58min ago homelab-storage-capacity.timer homelab-storage-capacity.service +Wed [PRIVATE_IP] 00:11:26 MSK 22h Tue [PRIVATE_IP] 00:09:07 MSK 1h 7min ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Wed [PRIVATE_IP] 00:14:14 MSK 22h Tue [PRIVATE_IP] 00:05:16 MSK 1h 11min ago homelab-quality-gate.timer homelab-quality-gate.service +Wed [PRIVATE_IP] 00:41:05 MSK 23h Tue [PRIVATE_IP] 00:58:58 MSK 18min ago logrotate.timer logrotate.service +Sun [PRIVATE_IP] 03:10:21 MSK 5 days Sun [PRIVATE_IP] 03:11:16 MSK 1 day 22h ago e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:10:35 MSK 5 days Sun [PRIVATE_IP] 03:10:50 MSK 1 day 22h ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 07:35:54 MSK 5 days Sun [PRIVATE_IP] 07:57:53 MSK 1 day 17h ago homelab-rotating-boot-drill.timer homelab-rotating-boot-drill.service +Mon [PRIVATE_IP] 00:10:37 MSK 5 days Mon [PRIVATE_IP] 00:08:52 MSK 1 day 1h ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:30:41 MSK 5 days Mon [PRIVATE_IP] 00:39:53 MSK 24h ago fstrim.timer fstrim.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 + +58 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