diff --git a/runtime/history/CONTEXT-AUTO-20260918T221701Z.json b/runtime/history/CONTEXT-AUTO-20260918T221701Z.json new file mode 100644 index 00000000..9826113b --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260918T221701Z.json @@ -0,0 +1 @@ +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260918T221701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-09-18T22:17:01Z","finished_at_utc":"2026-09-18T22: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-20260918T221701Z.txt b/runtime/history/CONTEXT-AUTO-20260918T221701Z.txt new file mode 100644 index 00000000..44480cc5 --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260918T221701Z.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: Sat 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]025236,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":110},{"cpu":[PRIVATE_IP][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":[PRIVATE_IP],"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":112},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":113},{"cpu":[PRIVATE_IP]68636,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":130},{"cpu":[PRIVATE_IP]907975,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"snikket","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":150},{"cpu":[PRIVATE_IP]313424,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":160},{"cpu":[PRIVATE_IP]35057,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":170},{"cpu":[PRIVATE_IP]40359,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":171},{"cpu":[PRIVATE_IP]292897,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":190},{"cpu":[PRIVATE_IP]907975,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/210","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":210},{"cpu":[PRIVATE_IP]702954,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/211","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-staging","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":211},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]4656,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]64885,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]2069,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":[PRIVATE_IP]},{"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/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/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","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/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 35.12% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.71% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-app-cloud-quorum-queue.service loaded failed failed Homelab canonical application cloud quorum backup queue +● homelab-backup-retention-gc.service loaded failed failed Homelab owner-aware cloud retention GC +● homelab-vm-cloud-quorum-queue.service loaded failed failed Homelab canonical VM/CT cloud quorum backup queue + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Sat [PRIVATE_IP] 01:17:34 MSK 31s Sat [PRIVATE_IP] 01:16:34 MSK 28s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sat [PRIVATE_IP] 01:17:58 MSK 55s Sat [PRIVATE_IP] 01:07:58 MSK 9min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sat [PRIVATE_IP] 01:19:52 MSK 2min 50s Sat [PRIVATE_IP] 01:04:52 MSK 12min ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sat [PRIVATE_IP] 01:19:52 MSK 2min 50s Sat [PRIVATE_IP] 01:04:52 MSK 12min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sat [PRIVATE_IP] 01:20:12 MSK 3min 9s Sat [PRIVATE_IP] 01:15:12 MSK 1min 50s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Sat [PRIVATE_IP] 01:20:12 MSK 3min 9s Sat [PRIVATE_IP] 01:15:12 MSK 1min 50s ago netbird-peers-health.timer netbird-peers-health.service +Sat [PRIVATE_IP] 01:21:27 MSK 4min 24s Sat [PRIVATE_IP] 01:16:16 MSK 46s ago homelab-health-metrics.timer homelab-health-metrics.service +Sat [PRIVATE_IP] 01:22:58 MSK 5min Sat [PRIVATE_IP] 01:07:58 MSK 9min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sat [PRIVATE_IP] 01:30:00 MSK 12min Sat [PRIVATE_IP] 01:15:12 MSK 1min 50s ago homelab-incident-journal.timer homelab-incident-journal.service +Sat [PRIVATE_IP] 01:30:14 MSK 13min Sat [PRIVATE_IP] 01:15:32 MSK 1min 30s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sat [PRIVATE_IP] 01:30:17 MSK 13min Sat [PRIVATE_IP] 01:00:44 MSK 16min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sat [PRIVATE_IP] 01:30:57 MSK 13min Sat [PRIVATE_IP] 01:16:16 MSK 46s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sat [PRIVATE_IP] 01:31:22 MSK 14min Sat [PRIVATE_IP] 01:15:58 MSK 1min 4s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sat [PRIVATE_IP] 01:31:58 MSK 14min Sat [PRIVATE_IP] 01:16:58 MSK 4s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sat [PRIVATE_IP] 01:34:15 MSK 17min Sat [PRIVATE_IP] 01:00:13 MSK 16min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sat [PRIVATE_IP] 01:36:57 MSK 19min Sat [PRIVATE_IP] 01:06:51 MSK 10min ago homelab-backup-audit.timer homelab-backup-audit.service +Sat [PRIVATE_IP] 02:12:34 MSK 55min Fri [PRIVATE_IP] 04:11:16 MSK 21h ago pve-daily-update.timer pve-daily-update.service +Sat [PRIVATE_IP] 03:23:30 MSK 2h 6min Fri [PRIVATE_IP] 03:22:16 MSK 21h ago homelab-backup-retention-gc.timer homelab-backup-retention-gc.service +Sat [PRIVATE_IP] 04:35:58 MSK 3h 18min Fri [PRIVATE_IP] 22:35:58 MSK 2h 41min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Sat [PRIVATE_IP] 05:39:35 MSK 4h 22min Fri [PRIVATE_IP] 23:36:52 MSK 1h 40min ago homelab-evidence-root.timer homelab-evidence-root.service +Sat [PRIVATE_IP] 06:15:09 MSK 4h 58min Fri [PRIVATE_IP] 06:03:32 MSK 19h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Sat [PRIVATE_IP] 06:50:01 MSK 5h 32min Sat [PRIVATE_IP] 00:49:52 MSK 27min ago homelab-mailru-trash-gc.timer homelab-mailru-trash-gc.service +Sat [PRIVATE_IP] 07:18:21 MSK 6h Fri [PRIVATE_IP] 07:18:12 MSK 17h ago homelab-drift-check.timer homelab-drift-check.service +Sat [PRIVATE_IP] 07:38:11 MSK 6h Fri [PRIVATE_IP] 07:48:57 MSK 17h ago homelab-alerting-health.timer homelab-alerting-health.service +Sat [PRIVATE_IP] 07:38:37 MSK 6h Fri [PRIVATE_IP] 07:39:32 MSK 17h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Sat [PRIVATE_IP] 07:40:06 MSK 6h Fri [PRIVATE_IP] 07:45:12 MSK 17h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Sat [PRIVATE_IP] 07:48:00 MSK 6h Fri [PRIVATE_IP] 07:58:00 MSK 17h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Sat [PRIVATE_IP] 07:56:40 MSK 6h Fri [PRIVATE_IP] 07:59:22 MSK 17h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Sat [PRIVATE_IP] 07:56:49 MSK 6h Fri [PRIVATE_IP] 08:00:57 MSK 17h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Sat [PRIVATE_IP] 08:08:44 MSK 6h Fri [PRIVATE_IP] 08:07:05 MSK 17h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Sat [PRIVATE_IP] 08:15:14 MSK 6h Fri [PRIVATE_IP] 08:15:57 MSK 17h ago homelab-overall-health.timer homelab-overall-health.service +Sat [PRIVATE_IP] 08:19:35 MSK 7h Fri [PRIVATE_IP] 08:29:57 MSK 16h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Sat [PRIVATE_IP] 08:31:12 MSK 7h Fri [PRIVATE_IP] 08:25:57 MSK 16h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Sat [PRIVATE_IP] 08:41:46 MSK 7h Fri [PRIVATE_IP] 08:37:57 MSK 16h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Sat [PRIVATE_IP] 08:48:35 MSK 7h Fri [PRIVATE_IP] 08:48:57 MSK 16h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Sat [PRIVATE_IP] 08:51:11 MSK 7h Fri [PRIVATE_IP] 09:00:12 MSK 16h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Sat [PRIVATE_IP] 10:15:00 MSK 8h Fri [PRIVATE_IP] 10:15:12 MSK 15h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sat [PRIVATE_IP] 11:53:30 MSK 10h Fri [PRIVATE_IP] 09:35:17 MSK 15h ago man-db.timer man-db.service +Sat [PRIVATE_IP] 14:33:20 MSK 13h Fri [PRIVATE_IP] 19:37:48 MSK 5h 39min ago apt-daily.timer apt-daily.service +Sat [PRIVATE_IP] 16:47:57 MSK 15h Fri [PRIVATE_IP] 16:47:57 MSK 8h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Sun [PRIVATE_IP] 00:00:00 MSK 22h Sat [PRIVATE_IP] 00:00:12 MSK 1h 16min ago dpkg-db-backup.timer dpkg-db-backup.service +Sun [PRIVATE_IP] 00:01:46 MSK 22h Sat [PRIVATE_IP] 00:18:33 MSK 58min ago homelab-storage-capacity.timer homelab-storage-capacity.service +Sun [PRIVATE_IP] 00:02:01 MSK 22h Sat [PRIVATE_IP] 00:13:59 MSK 1h 3min ago homelab-docker-health.timer homelab-docker-health.service +Sun [PRIVATE_IP] 00:04:22 MSK 22h Sat [PRIVATE_IP] 00:34:19 MSK 42min ago logrotate.timer logrotate.service +Sun [PRIVATE_IP] 00:13:10 MSK 22h Sat [PRIVATE_IP] 00:01:58 MSK 1h 15min ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Sun [PRIVATE_IP] 00:13:52 MSK 22h Sat [PRIVATE_IP] 00:02:46 MSK 1h 14min ago homelab-quality-gate.timer homelab-quality-gate.service +Sun [PRIVATE_IP] 03:10:03 MSK 1 day 1h Sun [PRIVATE_IP] 03:10:22 MSK 5 days ago e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:10:58 MSK 1 day 1h Sun [PRIVATE_IP] 03:10:39 MSK 5 days ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 07:40:18 MSK 1 day 6h Sun [PRIVATE_IP] 07:35:56 MSK 5 days ago homelab-rotating-boot-drill.timer homelab-rotating-boot-drill.service +Mon [PRIVATE_IP] 00:04:42 MSK 1 day 22h Mon [PRIVATE_IP] 00:10:39 MSK 5 days ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:09:14 MSK 1 day 22h Mon [PRIVATE_IP] 00:30:56 MSK 5 days ago fstrim.timer fstrim.service +- - Fri [PRIVATE_IP] 22:57:58 MSK 2h 19min ago homelab-backup-v2.timer homelab-backup-v2.service +- - Sat [PRIVATE_IP] 01:17:02 MSK 360ms ago homelab-router-watchdog.timer homelab-router-watchdog.service +- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service +- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service +- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service + +56 timers listed. +RUNTIME_MANIFEST_ID=df[PRIVATE_IP]ac9b5abd[PRIVATE_IP]b[PRIVATE_IP]d89496fb2bde[PRIVATE_IP] +EXPERIMENT_ID=5462ee[PRIVATE_IP]ebe[PRIVATE_IP]feb2ad[PRIVATE_IP]1ad87bbac0b8108 +COLLECTION_START_AT=[PRIVATE_IP]T[PRIVATE_IP]:00 +FIRST_COMPLETE_D1_CLOSE=[PRIVATE_IP]T[PRIVATE_IP]:00 +PRODUCTION_LAUNCH_ALLOWED=False +EXECUTION_AUTHORITY=False +RISK_AUTHORITY=False +STAGE_A_HEALTH=AWAITING_PRIMARY_FINALITY +FORENSIC_PREVIOUS_EPOCH_PRESERVED=YES + +## NEWFI_TASK6_AUTH_CHECKPOINT_V[PRIVATE_IP] +- Scope: historical accepted AUTH test, not a current SMTP connection test. +- Newfi approved SMTP account/sender: aleisaev@yandex.ru. +- Endpoint used by accepted test: smtp.yandex.ru:465 with certificate verification; single PLAIN initial response accepted with code 235. +- Evidence: incident ledger ### NEWFI_TASK6_YANDEX_AUTH_V2_OBSERVATION and ### NEWFI_TASK6_AUTH_PROOF_CLOSE_V1. +- No password file written, no application configuration changed, no mail sent by the accepted AUTH test. +- Persistent transport installation and application delivery are not proven by this checkpoint. Task6 is not complete. +- AUTH challenge and missing-file incidents closed; launch/session incident remains OPEN with original cause unproven. +- This update does not change VM211, VM160, routing, board state or Git. +- Other incidents and infrastructure health were not assessed. + + +## NEWFI_PRIVATE_STRUCTURE92_WRONG_MARKER_SCOPE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: NEWFI92 inspected the pve01 NEWFI90 attempt marker, which had not been finalized because the outer shell exited immediately after the guest returned RC3 following its successful rollback. The guest marker contained the true final rollback state. +- Correction: NEWFI93 required both the guest FINISHED/ROLLED_BACK record and a fresh exact demo-state readback before reconciling the outer NEWFI90 marker. NEWFI92 itself never reserved an attempt or mutated state. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] +- Status: OPEN +- Command: NEWFI95 +- Symptom: after the content-structure precheck passed, the pve03 Python wrapper failed to parse at the PHP line beginning with $root. No Portal discovery or application mutation was reached. +- RCA: an outer raw triple-single-quoted guest Python payload contained an inner raw triple-single-quoted PHP payload. The inner delimiter terminated the outer Python string, causing PHP source to be parsed as Python. +- Safety: NEWFI95 was read-only, created no attempt marker, and did not reach the intended nested guest execution. Do not replay NEWFI95. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: an inner triple-single-quoted PHP literal terminated the outer triple-single-quoted Python guest payload in NEWFI95. The wrapper therefore failed parsing before the intended Portal discovery executed. +- Correction: NEWFI96 removed the nested Python payload layer entirely and passed one Python program directly to VM211 through qm guest exec stdin. The read-only Portal contract completed with QGA exit 0 and the implementation worktree remained unchanged. +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index fbb45a21..9826113b 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1 @@ -{ - "schema_version": 1, - "channel": "homelab-runtime", - "command_id": "NEWFI-260919-NEWFDOM-CONTENTINDEXNOW-JOBMGR112", - "status": "OK", - "rc": 0, - "host": "pve01", - "mode": "read-only", - "component": "newfi-newfdom-contentindexnow-jobmanager-semantics-readonly", - "started_at_utc": "2026-09-18T22:12:40Z", - "finished_at_utc": "2026-09-18T22:12:43Z", - "reference_register_checked": true, - "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", - "error_register_checked": true, - "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "91c6d213f03dd756e7d98ffc978a277df1a7b265ebac81ff022fb0b6af52f527", - "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": "0cda876282b18beff61dc397bbdb0f847d5cf6d20170e0df2d682a7aafa6967b", - "sanitized_output_sha256": "0cda876282b18beff61dc397bbdb0f847d5cf6d20170e0df2d682a7aafa6967b", - "output_truncated_in_json": false, - "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "NEWFI112_BEGIN\nCOMMAND_ID=NEWFI-260919-NEWFDOM-CONTENTINDEXNOW-JOBMGR112\nNEWFI112_STAGING={\"contentindex\":{\"excerpt\":[{\"line\":40,\"text\":\"\\t\\tif (!$contentUrl)\"},{\"line\":41,\"text\":\"\\t\\t{\"},{\"line\":42,\"text\":\"\\t\\t\\t/** @var Entity $content */\"},{\"line\":43,\"text\":\"\\t\\t\\t$content = $this->app->findByContentType($contentType, $contentId);\"},{\"line\":44,\"text\":\"\"},{\"line\":45,\"text\":\"\\t\\t\\tif (!$content instanceof Entity)\"},{\"line\":46,\"text\":\"\\t\\t\\t{\"},{\"line\":47,\"text\":\"\\t\\t\\t\\t// content probably deleted\"},{\"line\":48,\"text\":\"\\t\\t\\t\\treturn $this->complete();\"},{\"line\":49,\"text\":\"\\t\\t\\t}\"},{\"line\":50,\"text\":\"\"},{\"line\":51,\"text\":\"\\t\\t\\tif (!method_exists($content, 'canView'))\"},{\"line\":52,\"text\":\"\\t\\t\\t{\"},{\"line\":53,\"text\":\"\\t\\t\\t\\tthrow new \\\\LogicException(\"},{\"line\":54,\"text\":\"\\t\\t\\t\\t\\t'Could not determine content viewability; Implement XF\\\\Entity\\\\ViewableInterface for ' . get_class($content)\"},{\"line\":55,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":56,\"text\":\"\\t\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t\\tif (!$content instanceof LinkableInterface)\"},{\"line\":59,\"text\":\"\\t\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\t\\tthrow new \\\\LogicException(\"},{\"line\":61,\"text\":\"\\t\\t\\t\\t\\t'Implement XF\\\\Entity\\\\LinkableInterface for ' . get_class($content)\"},{\"line\":62,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":63,\"text\":\"\\t\\t\\t}\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t\\t$guestUser = \\\\XF::repository(UserRepository::class)->getGuestUser();\"},{\"line\":66,\"text\":\"\\t\\t\\t$canView = \\\\XF::asVisitor($guestUser, function () use ($guestUser, $content)\"},{\"line\":67,\"text\":\"\\t\\t\\t{\"},{\"line\":68,\"text\":\"\\t\\t\\t\\tif (!$guestUser->hasPermission('general', 'view'))\"},{\"line\":69,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":70,\"text\":\"\\t\\t\\t\\t\\treturn false;\"},{\"line\":71,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":72,\"text\":\"\"},{\"line\":73,\"text\":\"\\t\\t\\t\\treturn $content->canView($content);\"},{\"line\":74,\"text\":\"\\t\\t\\t});\"},{\"line\":75,\"text\":\"\\t\\t\\tif (!$canView)\"},{\"line\":76,\"text\":\"\\t\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t\\treturn $this->complete();\"},{\"line\":78,\"text\":\"\\t\\t\\t}\"},{\"line\":79,\"text\":\"\"},{\"line\":80,\"text\":\"\\t\\t\\t$contentUrl = $content->getContentUrl(true);\"},{\"line\":81,\"text\":\"\\t\\t}\"},{\"line\":82,\"text\":\"\"}],\"sha256\":\"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0\"},\"counts\":{\"drafts\":0,\"resources\":6,\"tag_content\":18,\"tags\":15,\"updates\":6,\"versions\":6},\"errors\":{\"ids\":[33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],\"old_fp\":\"e739c2c309539a508e20eba89b0ebc688640ef6ff9f919bbb419b2faad819f80\",\"rows\":[{\"error_id\":33,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:variations.less: ParseError: Unexpected input in public:variations.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":34,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:core.less: ParseError: Unexpected input in public:core.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":35,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:app.less: ParseError: Unexpected input in public:app.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":36,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:extra.less: ParseError: Unexpected input in public:extra.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":37,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:variations.less: ParseError: Unexpected input in public:variations.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":38,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:core.less: ParseError: Unexpected input in public:core.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":39,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:app.less: ParseError: Unexpected input in public:app.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":40,\"exception_type\":\"XF\\\\CssRenderException\",\"filename\":\"src/XF/CssRenderException.php\",\"line\":89,\"message\":\"Error rendering template public:extra.less: ParseError: Unexpected input in public:extra.less on line 849, column 34 (on or near line 849)\"},{\"error_id\":41,\"exception_type\":\"XF\\\\PrintableException\",\"filename\":\"src/XF/Mvc/Entity/Entity.php\",\"line\":1276,\"message\":\"Строка 111: Ошибка синтаксиса - Название шаблона: public:newfi_portal\"},{\"error_id\":42,\"exception_type\":\"LogicException\",\"filename\":\"src/XF/Mvc/Entity/Entity.php\",\"line\":645,\"message\":\"Attempted to set 'type' while a save was pending without forceSet\"},{\"error_id\":43,\"exception_type\":\"ErrorException\",\"filename\":\"src/XF/Mvc/Entity/Entity.php\",\"line\":1276,\"message\":\"Fatal Error: Uncaught XF\\\\PrintableException: Строка 111: Ошибка синтаксиса - Название шаблона: public:newfi_portal in /var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php:1276 Stack trace: #0 Command line code(31): XF\\\\Mvc\\\\Entity\\\\Entity->save(true, false) #1 {main} thrown\"},{\"error_id\":44,\"exception_type\":\"ErrorException\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"Fatal Error: Uncaught XF\\\\Db\\\\InvalidQueryException: MySQL statement prepare error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\\\\'Gram/Support\\\\'' at line 1 in /var/www/forums/newfi/public/src/XF/Db/AbstractStatement.php:225 Stack trace: #0 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(207): XF\\\\Db\\\\AbstractStatement->getException('...', 1064, '...') #1 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(43): XF\\\\Db\\\\Mysqli\\\\Statement->getException('...', 1064, '...') #2 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(61): XF\\\\Db\\\\Mysqli\\\\Statement->prepare() #3 /var/www\"},{\"error_id\":45,\"exception_type\":\"XF\\\\PrintableException\",\"filename\":\"src/XF/Mvc/Entity/Entity.php\",\"line\":1276,\"message\":\"Пожалуйста, введите корректный префикс роутинга.\"},{\"error_id\":46,\"exception_type\":\"ErrorException\",\"filename\":\"Command line code\",\"line\":5,\"message\":\"Fatal Error: Uncaught ReflectionException: Method XF\\\\AddOn\\\\AbstractSetup::applyGlobalPermissionByGroup() does not exist in Command line code:5 Stack trace: #0 Command line code(5): ReflectionMethod->__construct('...', '...') #1 {main} thrown\"},{\"error_id\":47,\"exception_type\":\"XF\\\\Db\\\\InvalidQueryException\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"MySQL statement prepare error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'enabled FROM xf_template_modification WHERE addon_id = ? ORDER BY modificatio...' at line 1\"},{\"error_id\":48,\"exception_type\":\"XF\\\\Db\\\\InvalidQueryException\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"MySQL statement prepare error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'enabled FROM xf_template_modification WHERE addon_id = ? ORDER BY modificatio...' at line 1\"},{\"error_id\":49,\"exception_type\":\"XF\\\\Db\\\\Exception\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"MySQL statement prepare error [1054]: Unknown column 'sub_name_format' in 'SELECT'\"},{\"error_id\":50,\"exception_type\":\"XF\\\\Db\\\\Exception\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT'\"},{\"error_id\":51,\"exception_type\":\"ErrorException\",\"filename\":\"Command line code\",\"line\":32,\"message\":\"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:32 Stack trace: #0 Command line code(32): XF::handlePhpError(2, '...', '...', 32) #1 {main} thrown\"},{\"error_id\":52,\"exception_type\":\"ErrorException\",\"filename\":\"Command line code\",\"line\":16,\"message\":\"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:16 Stack trace: #0 Command line code(16): XF::handlePhpError(2, '...', '...', 16) #1 {main} thrown\"},{\"error_id\":53,\"exception_type\":\"ErrorException\",\"filename\":\"src/XF/Db/AbstractStatement.php\",\"line\":225,\"message\":\"Fatal Error: Uncaught XF\\\\Db\\\\Exception: MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT' in /var/www/forums/newfi/public/src/XF/Db/AbstractStatement.php:225 Stack trace: #0 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(207): XF\\\\Db\\\\AbstractStatement->getException('...', 1054, '...') #1 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(43): XF\\\\Db\\\\Mysqli\\\\Statement->getException('...', 1054, '...') #2 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(61): XF\\\\Db\\\\Mysqli\\\\Statement->prepare() #3 /var/www/forums/newfi/public/src/XF/Db/AbstractAdapter.php(96): XF\\\\Db\\\\Mysqli\\\\Statement->execute() #4 /var/www/forums/newfi/public/src/XF/Db/\"},{\"error_id\":54,\"exception_type\":\"ErrorException\",\"filename\":\"src/XF/Service/ValidateAndSavableTrait.php\",\"line\":36,\"message\":\"Fatal Error: Uncaught LogicException: Cannot save with validation errors. Use validate() to ensure there are no errors. (First error: Пожалуйста, укажите корректную версию.) in /var/www/forums/newfi/public/src/XF/Service/ValidateAndSavableTrait.php:36 Stack trace: #0 Command line code(4): XFRM\\\\Service\\\\ResourceItem\\\\Create->save() #1 /var/www/forums/newfi/public/src/XF.php(950): {closure}() #2 Command line code(4): XF::asVisitor(Object(XFRM\\\\XF\\\\Entity\\\\User), Object(Closure)) #3 {main} thrown\"}]},\"jobs\":[],\"manager\":{\"class\":\"XF\\\\Job\\\\Manager\",\"file\":\"/var/www/forums/newfi/public/src/XF/Job/Manager.php\",\"methods\":{\"cancelUniqueJob\":{\"end\":414,\"excerpt\":[{\"line\":402,\"text\":\"\\tpublic function cancelUniqueJob($uniqueId)\"},{\"line\":403,\"text\":\"\\t{\"},{\"line\":404,\"text\":\"\\t\\t$job = $this->getUniqueJob($uniqueId);\"},{\"line\":405,\"text\":\"\\t\\tif ($job)\"},{\"line\":406,\"text\":\"\\t\\t{\"},{\"line\":407,\"text\":\"\\t\\t\\t$this->cancelJob($job);\"},{\"line\":408,\"text\":\"\\t\\t\\treturn true;\"},{\"line\":409,\"text\":\"\\t\\t}\"},{\"line\":410,\"text\":\"\\t\\telse\"},{\"line\":411,\"text\":\"\\t\\t{\"},{\"line\":412,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":413,\"text\":\"\\t\\t}\"},{\"line\":414,\"text\":\"\\t}\"}],\"start\":402},\"runByIds\":{\"end\":138,\"excerpt\":[{\"line\":100,\"text\":\"\\tpublic function runByIds(array $ids, $maxRunTime)\"},{\"line\":101,\"text\":\"\\t{\"},{\"line\":102,\"text\":\"\\t\\tif ($maxRunTime < 2)\"},{\"line\":103,\"text\":\"\\t\\t{\"},{\"line\":104,\"text\":\"\\t\\t\\t$maxRunTime = 2;\"},{\"line\":105,\"text\":\"\\t\\t}\"},{\"line\":106,\"text\":\"\"},{\"line\":107,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":108,\"text\":\"\\t\\t$result = null;\"},{\"line\":109,\"text\":\"\"},{\"line\":110,\"text\":\"\\t\\tforeach ($ids AS $k => $id)\"},{\"line\":111,\"text\":\"\\t\\t{\"},{\"line\":112,\"text\":\"\\t\\t\\t$remaining = $maxRunTime - (microtime(true) - $startTime);\"},{\"line\":113,\"text\":\"\\t\\t\\tif ($remaining < 1)\"},{\"line\":114,\"text\":\"\\t\\t\\t{\"},{\"line\":115,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":116,\"text\":\"\\t\\t\\t}\"},{\"line\":117,\"text\":\"\"},{\"line\":118,\"text\":\"\\t\\t\\t$job = $this->getJob($id);\"},{\"line\":119,\"text\":\"\\t\\t\\tif ($job && $job['trigger_date'] <= time())\"},{\"line\":120,\"text\":\"\\t\\t\\t{\"},{\"line\":121,\"text\":\"\\t\\t\\t\\t$result = $this->runJobEntry($job, $remaining);\"},{\"line\":122,\"text\":\"\\t\\t\\t}\"},{\"line\":123,\"text\":\"\\t\\t\\telse\"},{\"line\":124,\"text\":\"\\t\\t\\t{\"},{\"line\":125,\"text\":\"\\t\\t\\t\\t$result = null;\"},{\"line\":126,\"text\":\"\\t\\t\\t}\"},{\"line\":127,\"text\":\"\"},{\"line\":128,\"text\":\"\\t\\t\\tif (!$result || $result->result === JobResult::RESULT_COMPLETED)\"},{\"line\":129,\"text\":\"\\t\\t\\t{\"},{\"line\":130,\"text\":\"\\t\\t\\t\\tunset($ids[$k]);\"},{\"line\":131,\"text\":\"\\t\\t\\t}\"},{\"line\":132,\"text\":\"\\t\\t}\"},{\"line\":133,\"text\":\"\"},{\"line\":134,\"text\":\"\\t\\treturn [\"},{\"line\":135,\"text\":\"\\t\\t\\t'result' => $result,\"},{\"line\":136,\"text\":\"\\t\\t\\t'remaining' => $ids,\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}],\"start\":100},\"runJobEntry\":{\"end\":249,\"excerpt\":[{\"line\":193,\"text\":\"\\tpublic function runJobEntry(array $job, $maxRunTime)\"},{\"line\":194,\"text\":\"\\t{\"},{\"line\":195,\"text\":\"\\t\\t$affected = $this->db->update('xf_job', [\"},{\"line\":196,\"text\":\"\\t\\t\\t'trigger_date' => time() + 15 * 60,\"},{\"line\":197,\"text\":\"\\t\\t\\t'last_run_date' => time(),\"},{\"line\":198,\"text\":\"\\t\\t], 'job_id = ? AND trigger_date = ?', [$job['job_id'], $job['trigger_date']]);\"},{\"line\":199,\"text\":\"\\t\\tif (!$affected)\"},{\"line\":200,\"text\":\"\\t\\t{\"},{\"line\":201,\"text\":\"\\t\\t\\t// job has already been taken, treat it as complete\"},{\"line\":202,\"text\":\"\\t\\t\\treturn JobResult::newComplete($job['job_id']);\"},{\"line\":203,\"text\":\"\\t\\t}\"},{\"line\":204,\"text\":\"\"},{\"line\":205,\"text\":\"\\t\\t$result = $this->runJobInternal($job, $maxRunTime);\"},{\"line\":206,\"text\":\"\"},{\"line\":207,\"text\":\"\\t\\tswitch ($result->result)\"},{\"line\":208,\"text\":\"\\t\\t{\"},{\"line\":209,\"text\":\"\\t\\t\\tcase JobResult::RESULT_COMPLETED:\"},{\"line\":210,\"text\":\"\\t\\t\\t\\t$this->cancelAndDequeueJob($job);\"},{\"line\":211,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":212,\"text\":\"\"},{\"line\":213,\"text\":\"\\t\\t\\tcase JobResult::RESULT_RESUME:\"},{\"line\":214,\"text\":\"\\t\\t\\tcase JobResult::RESULT_REATTEMPT:\"},{\"line\":215,\"text\":\"\\t\\t\\t\\t$update = [\"},{\"line\":216,\"text\":\"\\t\\t\\t\\t\\t'execute_data' => serialize($result->data),\"},{\"line\":217,\"text\":\"\\t\\t\\t\\t\\t'trigger_date' => $result->continueDate ? (int) $result->continueDate : $job['trigger_date'],\"},{\"line\":218,\"text\":\"\\t\\t\\t\\t\\t'last_run_date' => time(),\"},{\"line\":219,\"text\":\"\\t\\t\\t\\t];\"},{\"line\":220,\"text\":\"\"},{\"line\":221,\"text\":\"\\t\\t\\t\\tif ($result->result === JobResult::RESULT_REATTEMPT)\"},{\"line\":222,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":223,\"text\":\"\\t\\t\\t\\t\\t$update['attempts'] = $job['attempts'] + 1;\"},{\"line\":224,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":225,\"text\":\"\"},{\"line\":226,\"text\":\"\\t\\t\\t\\t$this->db->update('xf_job', $update, 'job_id = ?', $job['job_id']);\"},{\"line\":227,\"text\":\"\"},{\"line\":228,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":229,\"text\":\"\"},{\"line\":230,\"text\":\"\\t\\t\\tcase JobResult::RESULT_FAILED:\"},{\"line\":231,\"text\":\"\\t\\t\\t\\t$this->cancelAndDequeueJob($job);\"},{\"line\":232,\"text\":\"\"},{\"line\":233,\"text\":\"\\t\\t\\t\\tif ($result->exception)\"},{\"line\":234,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":235,\"text\":\"\\t\\t\\t\\t\\t$jobForLogging = $job;\"},{\"line\":236,\"text\":\"\\t\\t\\t\\t\\t$jobForLogging['execute_data'] = serialize($result->data);\"},{\"line\":237,\"text\":\"\\t\\t\\t\\t\\t$this->logFailedJob($jobForLogging, $result->exception);\"},{\"line\":238,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":239,\"text\":\"\"},{\"line\":240,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":241,\"text\":\"\\t\\t}\"},{\"line\":242,\"text\":\"\"},{\"line\":243,\"text\":\"\\t\\tif (!$job['manual_execute'])\"},{\"line\":244,\"text\":\"\\t\\t{\"},{\"line\":245,\"text\":\"\\t\\t\\t$this->scheduleRunTimeUpdate();\"},{\"line\":246,\"text\":\"\\t\\t}\"},{\"line\":247,\"text\":\"\"},{\"line\":248,\"text\":\"\\t\\treturn $result;\"},{\"line\":249,\"text\":\"\\t}\"}],\"start\":193},\"runQueue\":{\"end\":93,\"excerpt\":[{\"line\":70,\"text\":\"\\tpublic function runQueue($manual, $maxRunTime)\"},{\"line\":71,\"text\":\"\\t{\"},{\"line\":72,\"text\":\"\\t\\tif ($maxRunTime < 2)\"},{\"line\":73,\"text\":\"\\t\\t{\"},{\"line\":74,\"text\":\"\\t\\t\\t$maxRunTime = 2;\"},{\"line\":75,\"text\":\"\\t\\t}\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t$runnable = $this->getRunnable($manual);\"},{\"line\":78,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":79,\"text\":\"\\t\\t$result = null;\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\tforeach ($runnable AS $job)\"},{\"line\":82,\"text\":\"\\t\\t{\"},{\"line\":83,\"text\":\"\\t\\t\\t$remaining = $maxRunTime - (microtime(true) - $startTime);\"},{\"line\":84,\"text\":\"\\t\\t\\tif ($remaining < 1)\"},{\"line\":85,\"text\":\"\\t\\t\\t{\"},{\"line\":86,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":87,\"text\":\"\\t\\t\\t}\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\t\\t$result = $this->runJobEntry($job, $remaining);\"},{\"line\":90,\"text\":\"\\t\\t}\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\t\\treturn $result;\"},{\"line\":93,\"text\":\"\\t}\"}],\"start\":70}},\"sha256\":\"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9\"}}\nNEWFI112_PRODUCTION={\"contentindex\":{\"excerpt\":[{\"line\":40,\"text\":\"\\t\\tif (!$contentUrl)\"},{\"line\":41,\"text\":\"\\t\\t{\"},{\"line\":42,\"text\":\"\\t\\t\\t/** @var Entity $content */\"},{\"line\":43,\"text\":\"\\t\\t\\t$content = $this->app->findByContentType($contentType, $contentId);\"},{\"line\":44,\"text\":\"\"},{\"line\":45,\"text\":\"\\t\\t\\tif (!$content instanceof Entity)\"},{\"line\":46,\"text\":\"\\t\\t\\t{\"},{\"line\":47,\"text\":\"\\t\\t\\t\\t// content probably deleted\"},{\"line\":48,\"text\":\"\\t\\t\\t\\treturn $this->complete();\"},{\"line\":49,\"text\":\"\\t\\t\\t}\"},{\"line\":50,\"text\":\"\"},{\"line\":51,\"text\":\"\\t\\t\\tif (!method_exists($content, 'canView'))\"},{\"line\":52,\"text\":\"\\t\\t\\t{\"},{\"line\":53,\"text\":\"\\t\\t\\t\\tthrow new \\\\LogicException(\"},{\"line\":54,\"text\":\"\\t\\t\\t\\t\\t'Could not determine content viewability; Implement XF\\\\Entity\\\\ViewableInterface for ' . get_class($content)\"},{\"line\":55,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":56,\"text\":\"\\t\\t\\t}\"},{\"line\":57,\"text\":\"\"},{\"line\":58,\"text\":\"\\t\\t\\tif (!$content instanceof LinkableInterface)\"},{\"line\":59,\"text\":\"\\t\\t\\t{\"},{\"line\":60,\"text\":\"\\t\\t\\t\\tthrow new \\\\LogicException(\"},{\"line\":61,\"text\":\"\\t\\t\\t\\t\\t'Implement XF\\\\Entity\\\\LinkableInterface for ' . get_class($content)\"},{\"line\":62,\"text\":\"\\t\\t\\t\\t);\"},{\"line\":63,\"text\":\"\\t\\t\\t}\"},{\"line\":64,\"text\":\"\"},{\"line\":65,\"text\":\"\\t\\t\\t$guestUser = \\\\XF::repository(UserRepository::class)->getGuestUser();\"},{\"line\":66,\"text\":\"\\t\\t\\t$canView = \\\\XF::asVisitor($guestUser, function () use ($guestUser, $content)\"},{\"line\":67,\"text\":\"\\t\\t\\t{\"},{\"line\":68,\"text\":\"\\t\\t\\t\\tif (!$guestUser->hasPermission('general', 'view'))\"},{\"line\":69,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":70,\"text\":\"\\t\\t\\t\\t\\treturn false;\"},{\"line\":71,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":72,\"text\":\"\"},{\"line\":73,\"text\":\"\\t\\t\\t\\treturn $content->canView($content);\"},{\"line\":74,\"text\":\"\\t\\t\\t});\"},{\"line\":75,\"text\":\"\\t\\t\\tif (!$canView)\"},{\"line\":76,\"text\":\"\\t\\t\\t{\"},{\"line\":77,\"text\":\"\\t\\t\\t\\treturn $this->complete();\"},{\"line\":78,\"text\":\"\\t\\t\\t}\"},{\"line\":79,\"text\":\"\"},{\"line\":80,\"text\":\"\\t\\t\\t$contentUrl = $content->getContentUrl(true);\"},{\"line\":81,\"text\":\"\\t\\t}\"},{\"line\":82,\"text\":\"\"}],\"sha256\":\"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0\"},\"counts\":{\"drafts\":0,\"resources\":6,\"tag_content\":18,\"tags\":15,\"updates\":6,\"versions\":6},\"errors\":{\"ids\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],\"old_fp\":\"737935e0f156defd5fcd89c9e05899bb3577964371bc436e65db7c7e461be69b\",\"rows\":[{\"error_id\":1,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":2,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":3,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":4,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":5,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":6,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":7,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":8,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":9,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":10,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":11,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":12,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":13,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":14,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":15,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":16,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":17,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":18,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":19,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":20,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":21,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":22,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":23,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":24,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":25,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":26,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":27,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":28,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":29,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":30,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":31,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":32,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":33,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":34,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":35,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":36,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":37,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":38,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":39,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"},{\"error_id\":40,\"exception_type\":\"TypeError\",\"filename\":\"src/XF/Job/ContentIndexNow.php\",\"line\":51,\"message\":\"XF\\\\Job\\\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given\"}]},\"jobs\":[{\"decoded\":{\"content_id\":8,\"content_type\":\"resource_update\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2324,\"manual_execute\":0,\"sha\":\"591830a19f29b2c3e29b892e964de5b94f7fae02f06c93bd80b932322f9004ef\",\"trigger_date\":1789770301,\"unique_key\":null},{\"decoded\":{\"content_id\":8,\"content_type\":\"resource\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2325,\"manual_execute\":0,\"sha\":\"9ea9feade3b6f10bb73feaa687b4ef2517eceec0376c3c8bca2d8548a0e4ec0f\",\"trigger_date\":1789770301,\"unique_key\":null},{\"decoded\":{\"content_id\":8,\"content_type\":\"resource\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2326,\"manual_execute\":0,\"sha\":\"9ea9feade3b6f10bb73feaa687b4ef2517eceec0376c3c8bca2d8548a0e4ec0f\",\"trigger_date\":1789770301,\"unique_key\":null},{\"decoded\":{\"content_id\":9,\"content_type\":\"resource_update\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2327,\"manual_execute\":0,\"sha\":\"ca7e861203d277dcebcfe938cbd8b9ba6e2807f563a5a76e4abe0099208de304\",\"trigger_date\":1789770301,\"unique_key\":null},{\"decoded\":{\"content_id\":9,\"content_type\":\"resource\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2328,\"manual_execute\":0,\"sha\":\"33d264199467673b8d10d00f8c80cd84dbaaadbbd31cd98f2f54cc98570800ea\",\"trigger_date\":1789770301,\"unique_key\":null},{\"decoded\":{\"content_id\":9,\"content_type\":\"resource\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2329,\"manual_execute\":0,\"sha\":\"33d264199467673b8d10d00f8c80cd84dbaaadbbd31cd98f2f54cc98570800ea\",\"trigger_date\":1789770301,\"unique_key\":null},{\"decoded\":{\"content_id\":8,\"content_type\":\"resource\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2330,\"manual_execute\":0,\"sha\":\"9ea9feade3b6f10bb73feaa687b4ef2517eceec0376c3c8bca2d8548a0e4ec0f\",\"trigger_date\":1789770301,\"unique_key\":null},{\"decoded\":{\"content_id\":9,\"content_type\":\"resource\"},\"execute_class\":\"XF\\\\Job\\\\ContentIndexNow\",\"job_id\":2331,\"manual_execute\":0,\"sha\":\"33d264199467673b8d10d00f8c80cd84dbaaadbbd31cd98f2f54cc98570800ea\",\"trigger_date\":1789770301,\"unique_key\":null}],\"manager\":{\"class\":\"XF\\\\Job\\\\Manager\",\"file\":\"/var/www/forums/newfi/public/src/XF/Job/Manager.php\",\"methods\":{\"cancelUniqueJob\":{\"end\":414,\"excerpt\":[{\"line\":402,\"text\":\"\\tpublic function cancelUniqueJob($uniqueId)\"},{\"line\":403,\"text\":\"\\t{\"},{\"line\":404,\"text\":\"\\t\\t$job = $this->getUniqueJob($uniqueId);\"},{\"line\":405,\"text\":\"\\t\\tif ($job)\"},{\"line\":406,\"text\":\"\\t\\t{\"},{\"line\":407,\"text\":\"\\t\\t\\t$this->cancelJob($job);\"},{\"line\":408,\"text\":\"\\t\\t\\treturn true;\"},{\"line\":409,\"text\":\"\\t\\t}\"},{\"line\":410,\"text\":\"\\t\\telse\"},{\"line\":411,\"text\":\"\\t\\t{\"},{\"line\":412,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":413,\"text\":\"\\t\\t}\"},{\"line\":414,\"text\":\"\\t}\"}],\"start\":402},\"runByIds\":{\"end\":138,\"excerpt\":[{\"line\":100,\"text\":\"\\tpublic function runByIds(array $ids, $maxRunTime)\"},{\"line\":101,\"text\":\"\\t{\"},{\"line\":102,\"text\":\"\\t\\tif ($maxRunTime < 2)\"},{\"line\":103,\"text\":\"\\t\\t{\"},{\"line\":104,\"text\":\"\\t\\t\\t$maxRunTime = 2;\"},{\"line\":105,\"text\":\"\\t\\t}\"},{\"line\":106,\"text\":\"\"},{\"line\":107,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":108,\"text\":\"\\t\\t$result = null;\"},{\"line\":109,\"text\":\"\"},{\"line\":110,\"text\":\"\\t\\tforeach ($ids AS $k => $id)\"},{\"line\":111,\"text\":\"\\t\\t{\"},{\"line\":112,\"text\":\"\\t\\t\\t$remaining = $maxRunTime - (microtime(true) - $startTime);\"},{\"line\":113,\"text\":\"\\t\\t\\tif ($remaining < 1)\"},{\"line\":114,\"text\":\"\\t\\t\\t{\"},{\"line\":115,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":116,\"text\":\"\\t\\t\\t}\"},{\"line\":117,\"text\":\"\"},{\"line\":118,\"text\":\"\\t\\t\\t$job = $this->getJob($id);\"},{\"line\":119,\"text\":\"\\t\\t\\tif ($job && $job['trigger_date'] <= time())\"},{\"line\":120,\"text\":\"\\t\\t\\t{\"},{\"line\":121,\"text\":\"\\t\\t\\t\\t$result = $this->runJobEntry($job, $remaining);\"},{\"line\":122,\"text\":\"\\t\\t\\t}\"},{\"line\":123,\"text\":\"\\t\\t\\telse\"},{\"line\":124,\"text\":\"\\t\\t\\t{\"},{\"line\":125,\"text\":\"\\t\\t\\t\\t$result = null;\"},{\"line\":126,\"text\":\"\\t\\t\\t}\"},{\"line\":127,\"text\":\"\"},{\"line\":128,\"text\":\"\\t\\t\\tif (!$result || $result->result === JobResult::RESULT_COMPLETED)\"},{\"line\":129,\"text\":\"\\t\\t\\t{\"},{\"line\":130,\"text\":\"\\t\\t\\t\\tunset($ids[$k]);\"},{\"line\":131,\"text\":\"\\t\\t\\t}\"},{\"line\":132,\"text\":\"\\t\\t}\"},{\"line\":133,\"text\":\"\"},{\"line\":134,\"text\":\"\\t\\treturn [\"},{\"line\":135,\"text\":\"\\t\\t\\t'result' => $result,\"},{\"line\":136,\"text\":\"\\t\\t\\t'remaining' => $ids,\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}],\"start\":100},\"runJobEntry\":{\"end\":249,\"excerpt\":[{\"line\":193,\"text\":\"\\tpublic function runJobEntry(array $job, $maxRunTime)\"},{\"line\":194,\"text\":\"\\t{\"},{\"line\":195,\"text\":\"\\t\\t$affected = $this->db->update('xf_job', [\"},{\"line\":196,\"text\":\"\\t\\t\\t'trigger_date' => time() + 15 * 60,\"},{\"line\":197,\"text\":\"\\t\\t\\t'last_run_date' => time(),\"},{\"line\":198,\"text\":\"\\t\\t], 'job_id = ? AND trigger_date = ?', [$job['job_id'], $job['trigger_date']]);\"},{\"line\":199,\"text\":\"\\t\\tif (!$affected)\"},{\"line\":200,\"text\":\"\\t\\t{\"},{\"line\":201,\"text\":\"\\t\\t\\t// job has already been taken, treat it as complete\"},{\"line\":202,\"text\":\"\\t\\t\\treturn JobResult::newComplete($job['job_id']);\"},{\"line\":203,\"text\":\"\\t\\t}\"},{\"line\":204,\"text\":\"\"},{\"line\":205,\"text\":\"\\t\\t$result = $this->runJobInternal($job, $maxRunTime);\"},{\"line\":206,\"text\":\"\"},{\"line\":207,\"text\":\"\\t\\tswitch ($result->result)\"},{\"line\":208,\"text\":\"\\t\\t{\"},{\"line\":209,\"text\":\"\\t\\t\\tcase JobResult::RESULT_COMPLETED:\"},{\"line\":210,\"text\":\"\\t\\t\\t\\t$this->cancelAndDequeueJob($job);\"},{\"line\":211,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":212,\"text\":\"\"},{\"line\":213,\"text\":\"\\t\\t\\tcase JobResult::RESULT_RESUME:\"},{\"line\":214,\"text\":\"\\t\\t\\tcase JobResult::RESULT_REATTEMPT:\"},{\"line\":215,\"text\":\"\\t\\t\\t\\t$update = [\"},{\"line\":216,\"text\":\"\\t\\t\\t\\t\\t'execute_data' => serialize($result->data),\"},{\"line\":217,\"text\":\"\\t\\t\\t\\t\\t'trigger_date' => $result->continueDate ? (int) $result->continueDate : $job['trigger_date'],\"},{\"line\":218,\"text\":\"\\t\\t\\t\\t\\t'last_run_date' => time(),\"},{\"line\":219,\"text\":\"\\t\\t\\t\\t];\"},{\"line\":220,\"text\":\"\"},{\"line\":221,\"text\":\"\\t\\t\\t\\tif ($result->result === JobResult::RESULT_REATTEMPT)\"},{\"line\":222,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":223,\"text\":\"\\t\\t\\t\\t\\t$update['attempts'] = $job['attempts'] + 1;\"},{\"line\":224,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":225,\"text\":\"\"},{\"line\":226,\"text\":\"\\t\\t\\t\\t$this->db->update('xf_job', $update, 'job_id = ?', $job['job_id']);\"},{\"line\":227,\"text\":\"\"},{\"line\":228,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":229,\"text\":\"\"},{\"line\":230,\"text\":\"\\t\\t\\tcase JobResult::RESULT_FAILED:\"},{\"line\":231,\"text\":\"\\t\\t\\t\\t$this->cancelAndDequeueJob($job);\"},{\"line\":232,\"text\":\"\"},{\"line\":233,\"text\":\"\\t\\t\\t\\tif ($result->exception)\"},{\"line\":234,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":235,\"text\":\"\\t\\t\\t\\t\\t$jobForLogging = $job;\"},{\"line\":236,\"text\":\"\\t\\t\\t\\t\\t$jobForLogging['execute_data'] = serialize($result->data);\"},{\"line\":237,\"text\":\"\\t\\t\\t\\t\\t$this->logFailedJob($jobForLogging, $result->exception);\"},{\"line\":238,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":239,\"text\":\"\"},{\"line\":240,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":241,\"text\":\"\\t\\t}\"},{\"line\":242,\"text\":\"\"},{\"line\":243,\"text\":\"\\t\\tif (!$job['manual_execute'])\"},{\"line\":244,\"text\":\"\\t\\t{\"},{\"line\":245,\"text\":\"\\t\\t\\t$this->scheduleRunTimeUpdate();\"},{\"line\":246,\"text\":\"\\t\\t}\"},{\"line\":247,\"text\":\"\"},{\"line\":248,\"text\":\"\\t\\treturn $result;\"},{\"line\":249,\"text\":\"\\t}\"}],\"start\":193},\"runQueue\":{\"end\":93,\"excerpt\":[{\"line\":70,\"text\":\"\\tpublic function runQueue($manual, $maxRunTime)\"},{\"line\":71,\"text\":\"\\t{\"},{\"line\":72,\"text\":\"\\t\\tif ($maxRunTime < 2)\"},{\"line\":73,\"text\":\"\\t\\t{\"},{\"line\":74,\"text\":\"\\t\\t\\t$maxRunTime = 2;\"},{\"line\":75,\"text\":\"\\t\\t}\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t$runnable = $this->getRunnable($manual);\"},{\"line\":78,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":79,\"text\":\"\\t\\t$result = null;\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\tforeach ($runnable AS $job)\"},{\"line\":82,\"text\":\"\\t\\t{\"},{\"line\":83,\"text\":\"\\t\\t\\t$remaining = $maxRunTime - (microtime(true) - $startTime);\"},{\"line\":84,\"text\":\"\\t\\t\\tif ($remaining < 1)\"},{\"line\":85,\"text\":\"\\t\\t\\t{\"},{\"line\":86,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":87,\"text\":\"\\t\\t\\t}\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\t\\t$result = $this->runJobEntry($job, $remaining);\"},{\"line\":90,\"text\":\"\\t\\t}\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\t\\treturn $result;\"},{\"line\":93,\"text\":\"\\t}\"}],\"start\":70}},\"sha256\":\"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9\"}}\nNEWFI112_SAFE_REPORT={\"changes_made\":false,\"decision\":\"PASS_CONTENTINDEXNOW_JOBMANAGER_SEMANTICS_CAPTURED\",\"git_head\":\"e8f15ac7d52daa18470f4b2377a60aa3c2582b76\",\"manager_methods\":{\"cancelUniqueJob\":{\"end\":414,\"excerpt\":[{\"line\":402,\"text\":\"\\tpublic function cancelUniqueJob($uniqueId)\"},{\"line\":403,\"text\":\"\\t{\"},{\"line\":404,\"text\":\"\\t\\t$job = $this->getUniqueJob($uniqueId);\"},{\"line\":405,\"text\":\"\\t\\tif ($job)\"},{\"line\":406,\"text\":\"\\t\\t{\"},{\"line\":407,\"text\":\"\\t\\t\\t$this->cancelJob($job);\"},{\"line\":408,\"text\":\"\\t\\t\\treturn true;\"},{\"line\":409,\"text\":\"\\t\\t}\"},{\"line\":410,\"text\":\"\\t\\telse\"},{\"line\":411,\"text\":\"\\t\\t{\"},{\"line\":412,\"text\":\"\\t\\t\\treturn false;\"},{\"line\":413,\"text\":\"\\t\\t}\"},{\"line\":414,\"text\":\"\\t}\"}],\"start\":402},\"runByIds\":{\"end\":138,\"excerpt\":[{\"line\":100,\"text\":\"\\tpublic function runByIds(array $ids, $maxRunTime)\"},{\"line\":101,\"text\":\"\\t{\"},{\"line\":102,\"text\":\"\\t\\tif ($maxRunTime < 2)\"},{\"line\":103,\"text\":\"\\t\\t{\"},{\"line\":104,\"text\":\"\\t\\t\\t$maxRunTime = 2;\"},{\"line\":105,\"text\":\"\\t\\t}\"},{\"line\":106,\"text\":\"\"},{\"line\":107,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":108,\"text\":\"\\t\\t$result = null;\"},{\"line\":109,\"text\":\"\"},{\"line\":110,\"text\":\"\\t\\tforeach ($ids AS $k => $id)\"},{\"line\":111,\"text\":\"\\t\\t{\"},{\"line\":112,\"text\":\"\\t\\t\\t$remaining = $maxRunTime - (microtime(true) - $startTime);\"},{\"line\":113,\"text\":\"\\t\\t\\tif ($remaining < 1)\"},{\"line\":114,\"text\":\"\\t\\t\\t{\"},{\"line\":115,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":116,\"text\":\"\\t\\t\\t}\"},{\"line\":117,\"text\":\"\"},{\"line\":118,\"text\":\"\\t\\t\\t$job = $this->getJob($id);\"},{\"line\":119,\"text\":\"\\t\\t\\tif ($job && $job['trigger_date'] <= time())\"},{\"line\":120,\"text\":\"\\t\\t\\t{\"},{\"line\":121,\"text\":\"\\t\\t\\t\\t$result = $this->runJobEntry($job, $remaining);\"},{\"line\":122,\"text\":\"\\t\\t\\t}\"},{\"line\":123,\"text\":\"\\t\\t\\telse\"},{\"line\":124,\"text\":\"\\t\\t\\t{\"},{\"line\":125,\"text\":\"\\t\\t\\t\\t$result = null;\"},{\"line\":126,\"text\":\"\\t\\t\\t}\"},{\"line\":127,\"text\":\"\"},{\"line\":128,\"text\":\"\\t\\t\\tif (!$result || $result->result === JobResult::RESULT_COMPLETED)\"},{\"line\":129,\"text\":\"\\t\\t\\t{\"},{\"line\":130,\"text\":\"\\t\\t\\t\\tunset($ids[$k]);\"},{\"line\":131,\"text\":\"\\t\\t\\t}\"},{\"line\":132,\"text\":\"\\t\\t}\"},{\"line\":133,\"text\":\"\"},{\"line\":134,\"text\":\"\\t\\treturn [\"},{\"line\":135,\"text\":\"\\t\\t\\t'result' => $result,\"},{\"line\":136,\"text\":\"\\t\\t\\t'remaining' => $ids,\"},{\"line\":137,\"text\":\"\\t\\t];\"},{\"line\":138,\"text\":\"\\t}\"}],\"start\":100},\"runJobEntry\":{\"end\":249,\"excerpt\":[{\"line\":193,\"text\":\"\\tpublic function runJobEntry(array $job, $maxRunTime)\"},{\"line\":194,\"text\":\"\\t{\"},{\"line\":195,\"text\":\"\\t\\t$affected = $this->db->update('xf_job', [\"},{\"line\":196,\"text\":\"\\t\\t\\t'trigger_date' => time() + 15 * 60,\"},{\"line\":197,\"text\":\"\\t\\t\\t'last_run_date' => time(),\"},{\"line\":198,\"text\":\"\\t\\t], 'job_id = ? AND trigger_date = ?', [$job['job_id'], $job['trigger_date']]);\"},{\"line\":199,\"text\":\"\\t\\tif (!$affected)\"},{\"line\":200,\"text\":\"\\t\\t{\"},{\"line\":201,\"text\":\"\\t\\t\\t// job has already been taken, treat it as complete\"},{\"line\":202,\"text\":\"\\t\\t\\treturn JobResult::newComplete($job['job_id']);\"},{\"line\":203,\"text\":\"\\t\\t}\"},{\"line\":204,\"text\":\"\"},{\"line\":205,\"text\":\"\\t\\t$result = $this->runJobInternal($job, $maxRunTime);\"},{\"line\":206,\"text\":\"\"},{\"line\":207,\"text\":\"\\t\\tswitch ($result->result)\"},{\"line\":208,\"text\":\"\\t\\t{\"},{\"line\":209,\"text\":\"\\t\\t\\tcase JobResult::RESULT_COMPLETED:\"},{\"line\":210,\"text\":\"\\t\\t\\t\\t$this->cancelAndDequeueJob($job);\"},{\"line\":211,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":212,\"text\":\"\"},{\"line\":213,\"text\":\"\\t\\t\\tcase JobResult::RESULT_RESUME:\"},{\"line\":214,\"text\":\"\\t\\t\\tcase JobResult::RESULT_REATTEMPT:\"},{\"line\":215,\"text\":\"\\t\\t\\t\\t$update = [\"},{\"line\":216,\"text\":\"\\t\\t\\t\\t\\t'execute_data' => serialize($result->data),\"},{\"line\":217,\"text\":\"\\t\\t\\t\\t\\t'trigger_date' => $result->continueDate ? (int) $result->continueDate : $job['trigger_date'],\"},{\"line\":218,\"text\":\"\\t\\t\\t\\t\\t'last_run_date' => time(),\"},{\"line\":219,\"text\":\"\\t\\t\\t\\t];\"},{\"line\":220,\"text\":\"\"},{\"line\":221,\"text\":\"\\t\\t\\t\\tif ($result->result === JobResult::RESULT_REATTEMPT)\"},{\"line\":222,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":223,\"text\":\"\\t\\t\\t\\t\\t$update['attempts'] = $job['attempts'] + 1;\"},{\"line\":224,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":225,\"text\":\"\"},{\"line\":226,\"text\":\"\\t\\t\\t\\t$this->db->update('xf_job', $update, 'job_id = ?', $job['job_id']);\"},{\"line\":227,\"text\":\"\"},{\"line\":228,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":229,\"text\":\"\"},{\"line\":230,\"text\":\"\\t\\t\\tcase JobResult::RESULT_FAILED:\"},{\"line\":231,\"text\":\"\\t\\t\\t\\t$this->cancelAndDequeueJob($job);\"},{\"line\":232,\"text\":\"\"},{\"line\":233,\"text\":\"\\t\\t\\t\\tif ($result->exception)\"},{\"line\":234,\"text\":\"\\t\\t\\t\\t{\"},{\"line\":235,\"text\":\"\\t\\t\\t\\t\\t$jobForLogging = $job;\"},{\"line\":236,\"text\":\"\\t\\t\\t\\t\\t$jobForLogging['execute_data'] = serialize($result->data);\"},{\"line\":237,\"text\":\"\\t\\t\\t\\t\\t$this->logFailedJob($jobForLogging, $result->exception);\"},{\"line\":238,\"text\":\"\\t\\t\\t\\t}\"},{\"line\":239,\"text\":\"\"},{\"line\":240,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":241,\"text\":\"\\t\\t}\"},{\"line\":242,\"text\":\"\"},{\"line\":243,\"text\":\"\\t\\tif (!$job['manual_execute'])\"},{\"line\":244,\"text\":\"\\t\\t{\"},{\"line\":245,\"text\":\"\\t\\t\\t$this->scheduleRunTimeUpdate();\"},{\"line\":246,\"text\":\"\\t\\t}\"},{\"line\":247,\"text\":\"\"},{\"line\":248,\"text\":\"\\t\\treturn $result;\"},{\"line\":249,\"text\":\"\\t}\"}],\"start\":193},\"runQueue\":{\"end\":93,\"excerpt\":[{\"line\":70,\"text\":\"\\tpublic function runQueue($manual, $maxRunTime)\"},{\"line\":71,\"text\":\"\\t{\"},{\"line\":72,\"text\":\"\\t\\tif ($maxRunTime < 2)\"},{\"line\":73,\"text\":\"\\t\\t{\"},{\"line\":74,\"text\":\"\\t\\t\\t$maxRunTime = 2;\"},{\"line\":75,\"text\":\"\\t\\t}\"},{\"line\":76,\"text\":\"\"},{\"line\":77,\"text\":\"\\t\\t$runnable = $this->getRunnable($manual);\"},{\"line\":78,\"text\":\"\\t\\t$startTime = microtime(true);\"},{\"line\":79,\"text\":\"\\t\\t$result = null;\"},{\"line\":80,\"text\":\"\"},{\"line\":81,\"text\":\"\\t\\tforeach ($runnable AS $job)\"},{\"line\":82,\"text\":\"\\t\\t{\"},{\"line\":83,\"text\":\"\\t\\t\\t$remaining = $maxRunTime - (microtime(true) - $startTime);\"},{\"line\":84,\"text\":\"\\t\\t\\tif ($remaining < 1)\"},{\"line\":85,\"text\":\"\\t\\t\\t{\"},{\"line\":86,\"text\":\"\\t\\t\\t\\tbreak;\"},{\"line\":87,\"text\":\"\\t\\t\\t}\"},{\"line\":88,\"text\":\"\"},{\"line\":89,\"text\":\"\\t\\t\\t$result = $this->runJobEntry($job, $remaining);\"},{\"line\":90,\"text\":\"\\t\\t}\"},{\"line\":91,\"text\":\"\"},{\"line\":92,\"text\":\"\\t\\treturn $result;\"},{\"line\":93,\"text\":\"\\t}\"}],\"start\":70}},\"manager_sha256\":\"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9\",\"patched_sha_production\":\"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0\",\"patched_sha_staging\":\"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0\",\"production_error_ids\":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],\"production_jobs\":[2324,2325,2326,2327,2328,2329,2330,2331]}\nNEWFI112_DECISION=PASS_CONTENTINDEXNOW_JOBMANAGER_SEMANTICS_CAPTURED\nNEWFI112_NEXT_GATE=COMPLETE_HOTFIX_ACCEPTANCE_AND_REMOVE_ONLY_PROVEN_STALE_ROWS\n" -} +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260918T221701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-09-18T22:17:01Z","finished_at_utc":"2026-09-18T22: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 9d267513..44480cc5 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,39 +1,162 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260919-NEWFDOM-CONTENTINDEXNOW-JOBMGR112 +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z STATUS=OK RC=0 HOST=pve01 -MODE=read-only -COMPONENT=newfi-newfdom-contentindexnow-jobmanager-semantics-readonly -REFERENCE_REGISTER_CHECK=OK -REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=91c6d213f03dd756e7d98ffc978a277df1a7b265ebac81ff022fb0b6af52f527 -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=0cda876282b18beff61dc397bbdb0f847d5cf6d20170e0df2d682a7aafa6967b -SANITIZED_OUTPUT_SHA256=0cda876282b18beff61dc397bbdb0f847d5cf6d20170e0df2d682a7aafa6967b +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 -NEWFI112_BEGIN -COMMAND_ID=NEWFI-260919-NEWFDOM-CONTENTINDEXNOW-JOBMGR112 -NEWFI112_STAGING={"contentindex":{"excerpt":[{"line":40,"text":"\t\tif (!$contentUrl)"},{"line":41,"text":"\t\t{"},{"line":42,"text":"\t\t\t/** @var Entity $content */"},{"line":43,"text":"\t\t\t$content = $this->app->findByContentType($contentType, $contentId);"},{"line":44,"text":""},{"line":45,"text":"\t\t\tif (!$content instanceof Entity)"},{"line":46,"text":"\t\t\t{"},{"line":47,"text":"\t\t\t\t// content probably deleted"},{"line":48,"text":"\t\t\t\treturn $this->complete();"},{"line":49,"text":"\t\t\t}"},{"line":50,"text":""},{"line":51,"text":"\t\t\tif (!method_exists($content, 'canView'))"},{"line":52,"text":"\t\t\t{"},{"line":53,"text":"\t\t\t\tthrow new \\LogicException("},{"line":54,"text":"\t\t\t\t\t'Could not determine content viewability; Implement XF\\Entity\\ViewableInterface for ' . get_class($content)"},{"line":55,"text":"\t\t\t\t);"},{"line":56,"text":"\t\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t\tif (!$content instanceof LinkableInterface)"},{"line":59,"text":"\t\t\t{"},{"line":60,"text":"\t\t\t\tthrow new \\LogicException("},{"line":61,"text":"\t\t\t\t\t'Implement XF\\Entity\\LinkableInterface for ' . get_class($content)"},{"line":62,"text":"\t\t\t\t);"},{"line":63,"text":"\t\t\t}"},{"line":64,"text":""},{"line":65,"text":"\t\t\t$guestUser = \\XF::repository(UserRepository::class)->getGuestUser();"},{"line":66,"text":"\t\t\t$canView = \\XF::asVisitor($guestUser, function () use ($guestUser, $content)"},{"line":67,"text":"\t\t\t{"},{"line":68,"text":"\t\t\t\tif (!$guestUser->hasPermission('general', 'view'))"},{"line":69,"text":"\t\t\t\t{"},{"line":70,"text":"\t\t\t\t\treturn false;"},{"line":71,"text":"\t\t\t\t}"},{"line":72,"text":""},{"line":73,"text":"\t\t\t\treturn $content->canView($content);"},{"line":74,"text":"\t\t\t});"},{"line":75,"text":"\t\t\tif (!$canView)"},{"line":76,"text":"\t\t\t{"},{"line":77,"text":"\t\t\t\treturn $this->complete();"},{"line":78,"text":"\t\t\t}"},{"line":79,"text":""},{"line":80,"text":"\t\t\t$contentUrl = $content->getContentUrl(true);"},{"line":81,"text":"\t\t}"},{"line":82,"text":""}],"sha256":"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0"},"counts":{"drafts":0,"resources":6,"tag_content":18,"tags":15,"updates":6,"versions":6},"errors":{"ids":[33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],"old_fp":"e739c2c309539a508e20eba89b0ebc688640ef6ff9f919bbb419b2faad819f80","rows":[{"error_id":33,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:variations.less: ParseError: Unexpected input in public:variations.less on line 849, column 34 (on or near line 849)"},{"error_id":34,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:core.less: ParseError: Unexpected input in public:core.less on line 849, column 34 (on or near line 849)"},{"error_id":35,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:app.less: ParseError: Unexpected input in public:app.less on line 849, column 34 (on or near line 849)"},{"error_id":36,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:extra.less: ParseError: Unexpected input in public:extra.less on line 849, column 34 (on or near line 849)"},{"error_id":37,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:variations.less: ParseError: Unexpected input in public:variations.less on line 849, column 34 (on or near line 849)"},{"error_id":38,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:core.less: ParseError: Unexpected input in public:core.less on line 849, column 34 (on or near line 849)"},{"error_id":39,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:app.less: ParseError: Unexpected input in public:app.less on line 849, column 34 (on or near line 849)"},{"error_id":40,"exception_type":"XF\\CssRenderException","filename":"src/XF/CssRenderException.php","line":89,"message":"Error rendering template public:extra.less: ParseError: Unexpected input in public:extra.less on line 849, column 34 (on or near line 849)"},{"error_id":41,"exception_type":"XF\\PrintableException","filename":"src/XF/Mvc/Entity/Entity.php","line":1276,"message":"Строка 111: Ошибка синтаксиса - Название шаблона: public:newfi_portal"},{"error_id":42,"exception_type":"LogicException","filename":"src/XF/Mvc/Entity/Entity.php","line":645,"message":"Attempted to set 'type' while a save was pending without forceSet"},{"error_id":43,"exception_type":"ErrorException","filename":"src/XF/Mvc/Entity/Entity.php","line":1276,"message":"Fatal Error: Uncaught XF\\PrintableException: Строка 111: Ошибка синтаксиса - Название шаблона: public:newfi_portal in /var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php:1276 Stack trace: #0 Command line code(31): XF\\Mvc\\Entity\\Entity->save(true, false) #1 {main} thrown"},{"error_id":44,"exception_type":"ErrorException","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"Fatal Error: Uncaught XF\\Db\\InvalidQueryException: MySQL statement prepare error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\\'Gram/Support\\'' at line 1 in /var/www/forums/newfi/public/src/XF/Db/AbstractStatement.php:225 Stack trace: #0 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(207): XF\\Db\\AbstractStatement->getException('...', 1064, '...') #1 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(43): XF\\Db\\Mysqli\\Statement->getException('...', 1064, '...') #2 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(61): XF\\Db\\Mysqli\\Statement->prepare() #3 /var/www"},{"error_id":45,"exception_type":"XF\\PrintableException","filename":"src/XF/Mvc/Entity/Entity.php","line":1276,"message":"Пожалуйста, введите корректный префикс роутинга."},{"error_id":46,"exception_type":"ErrorException","filename":"Command line code","line":5,"message":"Fatal Error: Uncaught ReflectionException: Method XF\\AddOn\\AbstractSetup::applyGlobalPermissionByGroup() does not exist in Command line code:5 Stack trace: #0 Command line code(5): ReflectionMethod->__construct('...', '...') #1 {main} thrown"},{"error_id":47,"exception_type":"XF\\Db\\InvalidQueryException","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"MySQL statement prepare error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'enabled FROM xf_template_modification WHERE addon_id = ? ORDER BY modificatio...' at line 1"},{"error_id":48,"exception_type":"XF\\Db\\InvalidQueryException","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"MySQL statement prepare error [1064]: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'enabled FROM xf_template_modification WHERE addon_id = ? ORDER BY modificatio...' at line 1"},{"error_id":49,"exception_type":"XF\\Db\\Exception","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"MySQL statement prepare error [1054]: Unknown column 'sub_name_format' in 'SELECT'"},{"error_id":50,"exception_type":"XF\\Db\\Exception","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT'"},{"error_id":51,"exception_type":"ErrorException","filename":"Command line code","line":32,"message":"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:32 Stack trace: #0 Command line code(32): XF::handlePhpError(2, '...', '...', 32) #1 {main} thrown"},{"error_id":52,"exception_type":"ErrorException","filename":"Command line code","line":16,"message":"Fatal Error: Uncaught ErrorException: [E_WARNING] Trying to access array offset on false in Command line code:16 Stack trace: #0 Command line code(16): XF::handlePhpError(2, '...', '...', 16) #1 {main} thrown"},{"error_id":53,"exception_type":"ErrorException","filename":"src/XF/Db/AbstractStatement.php","line":225,"message":"Fatal Error: Uncaught XF\\Db\\Exception: MySQL statement prepare error [1054]: Unknown column 'display_in_list' in 'SELECT' in /var/www/forums/newfi/public/src/XF/Db/AbstractStatement.php:225 Stack trace: #0 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(207): XF\\Db\\AbstractStatement->getException('...', 1054, '...') #1 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(43): XF\\Db\\Mysqli\\Statement->getException('...', 1054, '...') #2 /var/www/forums/newfi/public/src/XF/Db/Mysqli/Statement.php(61): XF\\Db\\Mysqli\\Statement->prepare() #3 /var/www/forums/newfi/public/src/XF/Db/AbstractAdapter.php(96): XF\\Db\\Mysqli\\Statement->execute() #4 /var/www/forums/newfi/public/src/XF/Db/"},{"error_id":54,"exception_type":"ErrorException","filename":"src/XF/Service/ValidateAndSavableTrait.php","line":36,"message":"Fatal Error: Uncaught LogicException: Cannot save with validation errors. Use validate() to ensure there are no errors. (First error: Пожалуйста, укажите корректную версию.) in /var/www/forums/newfi/public/src/XF/Service/ValidateAndSavableTrait.php:36 Stack trace: #0 Command line code(4): XFRM\\Service\\ResourceItem\\Create->save() #1 /var/www/forums/newfi/public/src/XF.php(950): {closure}() #2 Command line code(4): XF::asVisitor(Object(XFRM\\XF\\Entity\\User), Object(Closure)) #3 {main} thrown"}]},"jobs":[],"manager":{"class":"XF\\Job\\Manager","file":"/var/www/forums/newfi/public/src/XF/Job/Manager.php","methods":{"cancelUniqueJob":{"end":414,"excerpt":[{"line":402,"text":"\tpublic function cancelUniqueJob($uniqueId)"},{"line":403,"text":"\t{"},{"line":404,"text":"\t\t$job = $this->getUniqueJob($uniqueId);"},{"line":405,"text":"\t\tif ($job)"},{"line":406,"text":"\t\t{"},{"line":407,"text":"\t\t\t$this->cancelJob($job);"},{"line":408,"text":"\t\t\treturn true;"},{"line":409,"text":"\t\t}"},{"line":410,"text":"\t\telse"},{"line":411,"text":"\t\t{"},{"line":412,"text":"\t\t\treturn false;"},{"line":413,"text":"\t\t}"},{"line":414,"text":"\t}"}],"start":402},"runByIds":{"end":138,"excerpt":[{"line":100,"text":"\tpublic function runByIds(array $ids, $maxRunTime)"},{"line":101,"text":"\t{"},{"line":102,"text":"\t\tif ($maxRunTime < 2)"},{"line":103,"text":"\t\t{"},{"line":104,"text":"\t\t\t$maxRunTime = 2;"},{"line":105,"text":"\t\t}"},{"line":106,"text":""},{"line":107,"text":"\t\t$startTime = microtime(true);"},{"line":108,"text":"\t\t$result = null;"},{"line":109,"text":""},{"line":110,"text":"\t\tforeach ($ids AS $k => $id)"},{"line":111,"text":"\t\t{"},{"line":112,"text":"\t\t\t$remaining = $maxRunTime - (microtime(true) - $startTime);"},{"line":113,"text":"\t\t\tif ($remaining < 1)"},{"line":114,"text":"\t\t\t{"},{"line":115,"text":"\t\t\t\tbreak;"},{"line":116,"text":"\t\t\t}"},{"line":117,"text":""},{"line":118,"text":"\t\t\t$job = $this->getJob($id);"},{"line":119,"text":"\t\t\tif ($job && $job['trigger_date'] <= time())"},{"line":120,"text":"\t\t\t{"},{"line":121,"text":"\t\t\t\t$result = $this->runJobEntry($job, $remaining);"},{"line":122,"text":"\t\t\t}"},{"line":123,"text":"\t\t\telse"},{"line":124,"text":"\t\t\t{"},{"line":125,"text":"\t\t\t\t$result = null;"},{"line":126,"text":"\t\t\t}"},{"line":127,"text":""},{"line":128,"text":"\t\t\tif (!$result || $result->result === JobResult::RESULT_COMPLETED)"},{"line":129,"text":"\t\t\t{"},{"line":130,"text":"\t\t\t\tunset($ids[$k]);"},{"line":131,"text":"\t\t\t}"},{"line":132,"text":"\t\t}"},{"line":133,"text":""},{"line":134,"text":"\t\treturn ["},{"line":135,"text":"\t\t\t'result' => $result,"},{"line":136,"text":"\t\t\t'remaining' => $ids,"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}],"start":100},"runJobEntry":{"end":249,"excerpt":[{"line":193,"text":"\tpublic function runJobEntry(array $job, $maxRunTime)"},{"line":194,"text":"\t{"},{"line":195,"text":"\t\t$affected = $this->db->update('xf_job', ["},{"line":196,"text":"\t\t\t'trigger_date' => time() + 15 * 60,"},{"line":197,"text":"\t\t\t'last_run_date' => time(),"},{"line":198,"text":"\t\t], 'job_id = ? AND trigger_date = ?', [$job['job_id'], $job['trigger_date']]);"},{"line":199,"text":"\t\tif (!$affected)"},{"line":200,"text":"\t\t{"},{"line":201,"text":"\t\t\t// job has already been taken, treat it as complete"},{"line":202,"text":"\t\t\treturn JobResult::newComplete($job['job_id']);"},{"line":203,"text":"\t\t}"},{"line":204,"text":""},{"line":205,"text":"\t\t$result = $this->runJobInternal($job, $maxRunTime);"},{"line":206,"text":""},{"line":207,"text":"\t\tswitch ($result->result)"},{"line":208,"text":"\t\t{"},{"line":209,"text":"\t\t\tcase JobResult::RESULT_COMPLETED:"},{"line":210,"text":"\t\t\t\t$this->cancelAndDequeueJob($job);"},{"line":211,"text":"\t\t\t\tbreak;"},{"line":212,"text":""},{"line":213,"text":"\t\t\tcase JobResult::RESULT_RESUME:"},{"line":214,"text":"\t\t\tcase JobResult::RESULT_REATTEMPT:"},{"line":215,"text":"\t\t\t\t$update = ["},{"line":216,"text":"\t\t\t\t\t'execute_data' => serialize($result->data),"},{"line":217,"text":"\t\t\t\t\t'trigger_date' => $result->continueDate ? (int) $result->continueDate : $job['trigger_date'],"},{"line":218,"text":"\t\t\t\t\t'last_run_date' => time(),"},{"line":219,"text":"\t\t\t\t];"},{"line":220,"text":""},{"line":221,"text":"\t\t\t\tif ($result->result === JobResult::RESULT_REATTEMPT)"},{"line":222,"text":"\t\t\t\t{"},{"line":223,"text":"\t\t\t\t\t$update['attempts'] = $job['attempts'] + 1;"},{"line":224,"text":"\t\t\t\t}"},{"line":225,"text":""},{"line":226,"text":"\t\t\t\t$this->db->update('xf_job', $update, 'job_id = ?', $job['job_id']);"},{"line":227,"text":""},{"line":228,"text":"\t\t\t\tbreak;"},{"line":229,"text":""},{"line":230,"text":"\t\t\tcase JobResult::RESULT_FAILED:"},{"line":231,"text":"\t\t\t\t$this->cancelAndDequeueJob($job);"},{"line":232,"text":""},{"line":233,"text":"\t\t\t\tif ($result->exception)"},{"line":234,"text":"\t\t\t\t{"},{"line":235,"text":"\t\t\t\t\t$jobForLogging = $job;"},{"line":236,"text":"\t\t\t\t\t$jobForLogging['execute_data'] = serialize($result->data);"},{"line":237,"text":"\t\t\t\t\t$this->logFailedJob($jobForLogging, $result->exception);"},{"line":238,"text":"\t\t\t\t}"},{"line":239,"text":""},{"line":240,"text":"\t\t\t\tbreak;"},{"line":241,"text":"\t\t}"},{"line":242,"text":""},{"line":243,"text":"\t\tif (!$job['manual_execute'])"},{"line":244,"text":"\t\t{"},{"line":245,"text":"\t\t\t$this->scheduleRunTimeUpdate();"},{"line":246,"text":"\t\t}"},{"line":247,"text":""},{"line":248,"text":"\t\treturn $result;"},{"line":249,"text":"\t}"}],"start":193},"runQueue":{"end":93,"excerpt":[{"line":70,"text":"\tpublic function runQueue($manual, $maxRunTime)"},{"line":71,"text":"\t{"},{"line":72,"text":"\t\tif ($maxRunTime < 2)"},{"line":73,"text":"\t\t{"},{"line":74,"text":"\t\t\t$maxRunTime = 2;"},{"line":75,"text":"\t\t}"},{"line":76,"text":""},{"line":77,"text":"\t\t$runnable = $this->getRunnable($manual);"},{"line":78,"text":"\t\t$startTime = microtime(true);"},{"line":79,"text":"\t\t$result = null;"},{"line":80,"text":""},{"line":81,"text":"\t\tforeach ($runnable AS $job)"},{"line":82,"text":"\t\t{"},{"line":83,"text":"\t\t\t$remaining = $maxRunTime - (microtime(true) - $startTime);"},{"line":84,"text":"\t\t\tif ($remaining < 1)"},{"line":85,"text":"\t\t\t{"},{"line":86,"text":"\t\t\t\tbreak;"},{"line":87,"text":"\t\t\t}"},{"line":88,"text":""},{"line":89,"text":"\t\t\t$result = $this->runJobEntry($job, $remaining);"},{"line":90,"text":"\t\t}"},{"line":91,"text":""},{"line":92,"text":"\t\treturn $result;"},{"line":93,"text":"\t}"}],"start":70}},"sha256":"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9"}} -NEWFI112_PRODUCTION={"contentindex":{"excerpt":[{"line":40,"text":"\t\tif (!$contentUrl)"},{"line":41,"text":"\t\t{"},{"line":42,"text":"\t\t\t/** @var Entity $content */"},{"line":43,"text":"\t\t\t$content = $this->app->findByContentType($contentType, $contentId);"},{"line":44,"text":""},{"line":45,"text":"\t\t\tif (!$content instanceof Entity)"},{"line":46,"text":"\t\t\t{"},{"line":47,"text":"\t\t\t\t// content probably deleted"},{"line":48,"text":"\t\t\t\treturn $this->complete();"},{"line":49,"text":"\t\t\t}"},{"line":50,"text":""},{"line":51,"text":"\t\t\tif (!method_exists($content, 'canView'))"},{"line":52,"text":"\t\t\t{"},{"line":53,"text":"\t\t\t\tthrow new \\LogicException("},{"line":54,"text":"\t\t\t\t\t'Could not determine content viewability; Implement XF\\Entity\\ViewableInterface for ' . get_class($content)"},{"line":55,"text":"\t\t\t\t);"},{"line":56,"text":"\t\t\t}"},{"line":57,"text":""},{"line":58,"text":"\t\t\tif (!$content instanceof LinkableInterface)"},{"line":59,"text":"\t\t\t{"},{"line":60,"text":"\t\t\t\tthrow new \\LogicException("},{"line":61,"text":"\t\t\t\t\t'Implement XF\\Entity\\LinkableInterface for ' . get_class($content)"},{"line":62,"text":"\t\t\t\t);"},{"line":63,"text":"\t\t\t}"},{"line":64,"text":""},{"line":65,"text":"\t\t\t$guestUser = \\XF::repository(UserRepository::class)->getGuestUser();"},{"line":66,"text":"\t\t\t$canView = \\XF::asVisitor($guestUser, function () use ($guestUser, $content)"},{"line":67,"text":"\t\t\t{"},{"line":68,"text":"\t\t\t\tif (!$guestUser->hasPermission('general', 'view'))"},{"line":69,"text":"\t\t\t\t{"},{"line":70,"text":"\t\t\t\t\treturn false;"},{"line":71,"text":"\t\t\t\t}"},{"line":72,"text":""},{"line":73,"text":"\t\t\t\treturn $content->canView($content);"},{"line":74,"text":"\t\t\t});"},{"line":75,"text":"\t\t\tif (!$canView)"},{"line":76,"text":"\t\t\t{"},{"line":77,"text":"\t\t\t\treturn $this->complete();"},{"line":78,"text":"\t\t\t}"},{"line":79,"text":""},{"line":80,"text":"\t\t\t$contentUrl = $content->getContentUrl(true);"},{"line":81,"text":"\t\t}"},{"line":82,"text":""}],"sha256":"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0"},"counts":{"drafts":0,"resources":6,"tag_content":18,"tags":15,"updates":6,"versions":6},"errors":{"ids":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"old_fp":"737935e0f156defd5fcd89c9e05899bb3577964371bc436e65db7c7e461be69b","rows":[{"error_id":1,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":2,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":3,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":4,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":5,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":6,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":7,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":8,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":9,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":10,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":11,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":12,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":13,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":14,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":15,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":16,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":17,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":18,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":19,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":20,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":21,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":22,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":23,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":24,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":25,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":26,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":27,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":28,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":29,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":30,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":31,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":32,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":33,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":34,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":35,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":36,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":37,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":38,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":39,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"},{"error_id":40,"exception_type":"TypeError","filename":"src/XF/Job/ContentIndexNow.php","line":51,"message":"XF\\Job\\ContentIndexNow: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given"}]},"jobs":[{"decoded":{"content_id":8,"content_type":"resource_update"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2324,"manual_execute":0,"sha":"591830a19f29b2c3e29b892e964de5b94f7fae02f06c93bd80b932322f9004ef","trigger_date":1789770301,"unique_key":null},{"decoded":{"content_id":8,"content_type":"resource"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2325,"manual_execute":0,"sha":"9ea9feade3b6f10bb73feaa687b4ef2517eceec0376c3c8bca2d8548a0e4ec0f","trigger_date":1789770301,"unique_key":null},{"decoded":{"content_id":8,"content_type":"resource"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2326,"manual_execute":0,"sha":"9ea9feade3b6f10bb73feaa687b4ef2517eceec0376c3c8bca2d8548a0e4ec0f","trigger_date":1789770301,"unique_key":null},{"decoded":{"content_id":9,"content_type":"resource_update"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2327,"manual_execute":0,"sha":"ca7e861203d277dcebcfe938cbd8b9ba6e2807f563a5a76e4abe0099208de304","trigger_date":1789770301,"unique_key":null},{"decoded":{"content_id":9,"content_type":"resource"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2328,"manual_execute":0,"sha":"33d264199467673b8d10d00f8c80cd84dbaaadbbd31cd98f2f54cc98570800ea","trigger_date":1789770301,"unique_key":null},{"decoded":{"content_id":9,"content_type":"resource"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2329,"manual_execute":0,"sha":"33d264199467673b8d10d00f8c80cd84dbaaadbbd31cd98f2f54cc98570800ea","trigger_date":1789770301,"unique_key":null},{"decoded":{"content_id":8,"content_type":"resource"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2330,"manual_execute":0,"sha":"9ea9feade3b6f10bb73feaa687b4ef2517eceec0376c3c8bca2d8548a0e4ec0f","trigger_date":1789770301,"unique_key":null},{"decoded":{"content_id":9,"content_type":"resource"},"execute_class":"XF\\Job\\ContentIndexNow","job_id":2331,"manual_execute":0,"sha":"33d264199467673b8d10d00f8c80cd84dbaaadbbd31cd98f2f54cc98570800ea","trigger_date":1789770301,"unique_key":null}],"manager":{"class":"XF\\Job\\Manager","file":"/var/www/forums/newfi/public/src/XF/Job/Manager.php","methods":{"cancelUniqueJob":{"end":414,"excerpt":[{"line":402,"text":"\tpublic function cancelUniqueJob($uniqueId)"},{"line":403,"text":"\t{"},{"line":404,"text":"\t\t$job = $this->getUniqueJob($uniqueId);"},{"line":405,"text":"\t\tif ($job)"},{"line":406,"text":"\t\t{"},{"line":407,"text":"\t\t\t$this->cancelJob($job);"},{"line":408,"text":"\t\t\treturn true;"},{"line":409,"text":"\t\t}"},{"line":410,"text":"\t\telse"},{"line":411,"text":"\t\t{"},{"line":412,"text":"\t\t\treturn false;"},{"line":413,"text":"\t\t}"},{"line":414,"text":"\t}"}],"start":402},"runByIds":{"end":138,"excerpt":[{"line":100,"text":"\tpublic function runByIds(array $ids, $maxRunTime)"},{"line":101,"text":"\t{"},{"line":102,"text":"\t\tif ($maxRunTime < 2)"},{"line":103,"text":"\t\t{"},{"line":104,"text":"\t\t\t$maxRunTime = 2;"},{"line":105,"text":"\t\t}"},{"line":106,"text":""},{"line":107,"text":"\t\t$startTime = microtime(true);"},{"line":108,"text":"\t\t$result = null;"},{"line":109,"text":""},{"line":110,"text":"\t\tforeach ($ids AS $k => $id)"},{"line":111,"text":"\t\t{"},{"line":112,"text":"\t\t\t$remaining = $maxRunTime - (microtime(true) - $startTime);"},{"line":113,"text":"\t\t\tif ($remaining < 1)"},{"line":114,"text":"\t\t\t{"},{"line":115,"text":"\t\t\t\tbreak;"},{"line":116,"text":"\t\t\t}"},{"line":117,"text":""},{"line":118,"text":"\t\t\t$job = $this->getJob($id);"},{"line":119,"text":"\t\t\tif ($job && $job['trigger_date'] <= time())"},{"line":120,"text":"\t\t\t{"},{"line":121,"text":"\t\t\t\t$result = $this->runJobEntry($job, $remaining);"},{"line":122,"text":"\t\t\t}"},{"line":123,"text":"\t\t\telse"},{"line":124,"text":"\t\t\t{"},{"line":125,"text":"\t\t\t\t$result = null;"},{"line":126,"text":"\t\t\t}"},{"line":127,"text":""},{"line":128,"text":"\t\t\tif (!$result || $result->result === JobResult::RESULT_COMPLETED)"},{"line":129,"text":"\t\t\t{"},{"line":130,"text":"\t\t\t\tunset($ids[$k]);"},{"line":131,"text":"\t\t\t}"},{"line":132,"text":"\t\t}"},{"line":133,"text":""},{"line":134,"text":"\t\treturn ["},{"line":135,"text":"\t\t\t'result' => $result,"},{"line":136,"text":"\t\t\t'remaining' => $ids,"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}],"start":100},"runJobEntry":{"end":249,"excerpt":[{"line":193,"text":"\tpublic function runJobEntry(array $job, $maxRunTime)"},{"line":194,"text":"\t{"},{"line":195,"text":"\t\t$affected = $this->db->update('xf_job', ["},{"line":196,"text":"\t\t\t'trigger_date' => time() + 15 * 60,"},{"line":197,"text":"\t\t\t'last_run_date' => time(),"},{"line":198,"text":"\t\t], 'job_id = ? AND trigger_date = ?', [$job['job_id'], $job['trigger_date']]);"},{"line":199,"text":"\t\tif (!$affected)"},{"line":200,"text":"\t\t{"},{"line":201,"text":"\t\t\t// job has already been taken, treat it as complete"},{"line":202,"text":"\t\t\treturn JobResult::newComplete($job['job_id']);"},{"line":203,"text":"\t\t}"},{"line":204,"text":""},{"line":205,"text":"\t\t$result = $this->runJobInternal($job, $maxRunTime);"},{"line":206,"text":""},{"line":207,"text":"\t\tswitch ($result->result)"},{"line":208,"text":"\t\t{"},{"line":209,"text":"\t\t\tcase JobResult::RESULT_COMPLETED:"},{"line":210,"text":"\t\t\t\t$this->cancelAndDequeueJob($job);"},{"line":211,"text":"\t\t\t\tbreak;"},{"line":212,"text":""},{"line":213,"text":"\t\t\tcase JobResult::RESULT_RESUME:"},{"line":214,"text":"\t\t\tcase JobResult::RESULT_REATTEMPT:"},{"line":215,"text":"\t\t\t\t$update = ["},{"line":216,"text":"\t\t\t\t\t'execute_data' => serialize($result->data),"},{"line":217,"text":"\t\t\t\t\t'trigger_date' => $result->continueDate ? (int) $result->continueDate : $job['trigger_date'],"},{"line":218,"text":"\t\t\t\t\t'last_run_date' => time(),"},{"line":219,"text":"\t\t\t\t];"},{"line":220,"text":""},{"line":221,"text":"\t\t\t\tif ($result->result === JobResult::RESULT_REATTEMPT)"},{"line":222,"text":"\t\t\t\t{"},{"line":223,"text":"\t\t\t\t\t$update['attempts'] = $job['attempts'] + 1;"},{"line":224,"text":"\t\t\t\t}"},{"line":225,"text":""},{"line":226,"text":"\t\t\t\t$this->db->update('xf_job', $update, 'job_id = ?', $job['job_id']);"},{"line":227,"text":""},{"line":228,"text":"\t\t\t\tbreak;"},{"line":229,"text":""},{"line":230,"text":"\t\t\tcase JobResult::RESULT_FAILED:"},{"line":231,"text":"\t\t\t\t$this->cancelAndDequeueJob($job);"},{"line":232,"text":""},{"line":233,"text":"\t\t\t\tif ($result->exception)"},{"line":234,"text":"\t\t\t\t{"},{"line":235,"text":"\t\t\t\t\t$jobForLogging = $job;"},{"line":236,"text":"\t\t\t\t\t$jobForLogging['execute_data'] = serialize($result->data);"},{"line":237,"text":"\t\t\t\t\t$this->logFailedJob($jobForLogging, $result->exception);"},{"line":238,"text":"\t\t\t\t}"},{"line":239,"text":""},{"line":240,"text":"\t\t\t\tbreak;"},{"line":241,"text":"\t\t}"},{"line":242,"text":""},{"line":243,"text":"\t\tif (!$job['manual_execute'])"},{"line":244,"text":"\t\t{"},{"line":245,"text":"\t\t\t$this->scheduleRunTimeUpdate();"},{"line":246,"text":"\t\t}"},{"line":247,"text":""},{"line":248,"text":"\t\treturn $result;"},{"line":249,"text":"\t}"}],"start":193},"runQueue":{"end":93,"excerpt":[{"line":70,"text":"\tpublic function runQueue($manual, $maxRunTime)"},{"line":71,"text":"\t{"},{"line":72,"text":"\t\tif ($maxRunTime < 2)"},{"line":73,"text":"\t\t{"},{"line":74,"text":"\t\t\t$maxRunTime = 2;"},{"line":75,"text":"\t\t}"},{"line":76,"text":""},{"line":77,"text":"\t\t$runnable = $this->getRunnable($manual);"},{"line":78,"text":"\t\t$startTime = microtime(true);"},{"line":79,"text":"\t\t$result = null;"},{"line":80,"text":""},{"line":81,"text":"\t\tforeach ($runnable AS $job)"},{"line":82,"text":"\t\t{"},{"line":83,"text":"\t\t\t$remaining = $maxRunTime - (microtime(true) - $startTime);"},{"line":84,"text":"\t\t\tif ($remaining < 1)"},{"line":85,"text":"\t\t\t{"},{"line":86,"text":"\t\t\t\tbreak;"},{"line":87,"text":"\t\t\t}"},{"line":88,"text":""},{"line":89,"text":"\t\t\t$result = $this->runJobEntry($job, $remaining);"},{"line":90,"text":"\t\t}"},{"line":91,"text":""},{"line":92,"text":"\t\treturn $result;"},{"line":93,"text":"\t}"}],"start":70}},"sha256":"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9"}} -NEWFI112_SAFE_REPORT={"changes_made":false,"decision":"PASS_CONTENTINDEXNOW_JOBMANAGER_SEMANTICS_CAPTURED","git_head":"e8f15ac7d52daa18470f4b2377a60aa3c2582b76","manager_methods":{"cancelUniqueJob":{"end":414,"excerpt":[{"line":402,"text":"\tpublic function cancelUniqueJob($uniqueId)"},{"line":403,"text":"\t{"},{"line":404,"text":"\t\t$job = $this->getUniqueJob($uniqueId);"},{"line":405,"text":"\t\tif ($job)"},{"line":406,"text":"\t\t{"},{"line":407,"text":"\t\t\t$this->cancelJob($job);"},{"line":408,"text":"\t\t\treturn true;"},{"line":409,"text":"\t\t}"},{"line":410,"text":"\t\telse"},{"line":411,"text":"\t\t{"},{"line":412,"text":"\t\t\treturn false;"},{"line":413,"text":"\t\t}"},{"line":414,"text":"\t}"}],"start":402},"runByIds":{"end":138,"excerpt":[{"line":100,"text":"\tpublic function runByIds(array $ids, $maxRunTime)"},{"line":101,"text":"\t{"},{"line":102,"text":"\t\tif ($maxRunTime < 2)"},{"line":103,"text":"\t\t{"},{"line":104,"text":"\t\t\t$maxRunTime = 2;"},{"line":105,"text":"\t\t}"},{"line":106,"text":""},{"line":107,"text":"\t\t$startTime = microtime(true);"},{"line":108,"text":"\t\t$result = null;"},{"line":109,"text":""},{"line":110,"text":"\t\tforeach ($ids AS $k => $id)"},{"line":111,"text":"\t\t{"},{"line":112,"text":"\t\t\t$remaining = $maxRunTime - (microtime(true) - $startTime);"},{"line":113,"text":"\t\t\tif ($remaining < 1)"},{"line":114,"text":"\t\t\t{"},{"line":115,"text":"\t\t\t\tbreak;"},{"line":116,"text":"\t\t\t}"},{"line":117,"text":""},{"line":118,"text":"\t\t\t$job = $this->getJob($id);"},{"line":119,"text":"\t\t\tif ($job && $job['trigger_date'] <= time())"},{"line":120,"text":"\t\t\t{"},{"line":121,"text":"\t\t\t\t$result = $this->runJobEntry($job, $remaining);"},{"line":122,"text":"\t\t\t}"},{"line":123,"text":"\t\t\telse"},{"line":124,"text":"\t\t\t{"},{"line":125,"text":"\t\t\t\t$result = null;"},{"line":126,"text":"\t\t\t}"},{"line":127,"text":""},{"line":128,"text":"\t\t\tif (!$result || $result->result === JobResult::RESULT_COMPLETED)"},{"line":129,"text":"\t\t\t{"},{"line":130,"text":"\t\t\t\tunset($ids[$k]);"},{"line":131,"text":"\t\t\t}"},{"line":132,"text":"\t\t}"},{"line":133,"text":""},{"line":134,"text":"\t\treturn ["},{"line":135,"text":"\t\t\t'result' => $result,"},{"line":136,"text":"\t\t\t'remaining' => $ids,"},{"line":137,"text":"\t\t];"},{"line":138,"text":"\t}"}],"start":100},"runJobEntry":{"end":249,"excerpt":[{"line":193,"text":"\tpublic function runJobEntry(array $job, $maxRunTime)"},{"line":194,"text":"\t{"},{"line":195,"text":"\t\t$affected = $this->db->update('xf_job', ["},{"line":196,"text":"\t\t\t'trigger_date' => time() + 15 * 60,"},{"line":197,"text":"\t\t\t'last_run_date' => time(),"},{"line":198,"text":"\t\t], 'job_id = ? AND trigger_date = ?', [$job['job_id'], $job['trigger_date']]);"},{"line":199,"text":"\t\tif (!$affected)"},{"line":200,"text":"\t\t{"},{"line":201,"text":"\t\t\t// job has already been taken, treat it as complete"},{"line":202,"text":"\t\t\treturn JobResult::newComplete($job['job_id']);"},{"line":203,"text":"\t\t}"},{"line":204,"text":""},{"line":205,"text":"\t\t$result = $this->runJobInternal($job, $maxRunTime);"},{"line":206,"text":""},{"line":207,"text":"\t\tswitch ($result->result)"},{"line":208,"text":"\t\t{"},{"line":209,"text":"\t\t\tcase JobResult::RESULT_COMPLETED:"},{"line":210,"text":"\t\t\t\t$this->cancelAndDequeueJob($job);"},{"line":211,"text":"\t\t\t\tbreak;"},{"line":212,"text":""},{"line":213,"text":"\t\t\tcase JobResult::RESULT_RESUME:"},{"line":214,"text":"\t\t\tcase JobResult::RESULT_REATTEMPT:"},{"line":215,"text":"\t\t\t\t$update = ["},{"line":216,"text":"\t\t\t\t\t'execute_data' => serialize($result->data),"},{"line":217,"text":"\t\t\t\t\t'trigger_date' => $result->continueDate ? (int) $result->continueDate : $job['trigger_date'],"},{"line":218,"text":"\t\t\t\t\t'last_run_date' => time(),"},{"line":219,"text":"\t\t\t\t];"},{"line":220,"text":""},{"line":221,"text":"\t\t\t\tif ($result->result === JobResult::RESULT_REATTEMPT)"},{"line":222,"text":"\t\t\t\t{"},{"line":223,"text":"\t\t\t\t\t$update['attempts'] = $job['attempts'] + 1;"},{"line":224,"text":"\t\t\t\t}"},{"line":225,"text":""},{"line":226,"text":"\t\t\t\t$this->db->update('xf_job', $update, 'job_id = ?', $job['job_id']);"},{"line":227,"text":""},{"line":228,"text":"\t\t\t\tbreak;"},{"line":229,"text":""},{"line":230,"text":"\t\t\tcase JobResult::RESULT_FAILED:"},{"line":231,"text":"\t\t\t\t$this->cancelAndDequeueJob($job);"},{"line":232,"text":""},{"line":233,"text":"\t\t\t\tif ($result->exception)"},{"line":234,"text":"\t\t\t\t{"},{"line":235,"text":"\t\t\t\t\t$jobForLogging = $job;"},{"line":236,"text":"\t\t\t\t\t$jobForLogging['execute_data'] = serialize($result->data);"},{"line":237,"text":"\t\t\t\t\t$this->logFailedJob($jobForLogging, $result->exception);"},{"line":238,"text":"\t\t\t\t}"},{"line":239,"text":""},{"line":240,"text":"\t\t\t\tbreak;"},{"line":241,"text":"\t\t}"},{"line":242,"text":""},{"line":243,"text":"\t\tif (!$job['manual_execute'])"},{"line":244,"text":"\t\t{"},{"line":245,"text":"\t\t\t$this->scheduleRunTimeUpdate();"},{"line":246,"text":"\t\t}"},{"line":247,"text":""},{"line":248,"text":"\t\treturn $result;"},{"line":249,"text":"\t}"}],"start":193},"runQueue":{"end":93,"excerpt":[{"line":70,"text":"\tpublic function runQueue($manual, $maxRunTime)"},{"line":71,"text":"\t{"},{"line":72,"text":"\t\tif ($maxRunTime < 2)"},{"line":73,"text":"\t\t{"},{"line":74,"text":"\t\t\t$maxRunTime = 2;"},{"line":75,"text":"\t\t}"},{"line":76,"text":""},{"line":77,"text":"\t\t$runnable = $this->getRunnable($manual);"},{"line":78,"text":"\t\t$startTime = microtime(true);"},{"line":79,"text":"\t\t$result = null;"},{"line":80,"text":""},{"line":81,"text":"\t\tforeach ($runnable AS $job)"},{"line":82,"text":"\t\t{"},{"line":83,"text":"\t\t\t$remaining = $maxRunTime - (microtime(true) - $startTime);"},{"line":84,"text":"\t\t\tif ($remaining < 1)"},{"line":85,"text":"\t\t\t{"},{"line":86,"text":"\t\t\t\tbreak;"},{"line":87,"text":"\t\t\t}"},{"line":88,"text":""},{"line":89,"text":"\t\t\t$result = $this->runJobEntry($job, $remaining);"},{"line":90,"text":"\t\t}"},{"line":91,"text":""},{"line":92,"text":"\t\treturn $result;"},{"line":93,"text":"\t}"}],"start":70}},"manager_sha256":"bb62eaeb6d8e4ade4a5cef3a942b1ce0e67dec3af01ef50224700ee4765dbeb9","patched_sha_production":"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0","patched_sha_staging":"b025d0658da8716a5cf5bbf85e63bb7885ac24715353da58a8bac9c5b7adeef0","production_error_ids":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"production_jobs":[2324,2325,2326,2327,2328,2329,2330,2331]} -NEWFI112_DECISION=PASS_CONTENTINDEXNOW_JOBMANAGER_SEMANTICS_CAPTURED -NEWFI112_NEXT_GATE=COMPLETE_HOTFIX_ACCEPTANCE_AND_REMOVE_ONLY_PROVEN_STALE_ROWS +GENERATED_AT_UTC=[PRIVATE_IP]T22:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on +Quorum information +------------------ +Date: Sat 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]025236,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":110},{"cpu":[PRIVATE_IP][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":[PRIVATE_IP],"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":112},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":[PRIVATE_IP],"vmid":113},{"cpu":[PRIVATE_IP]68636,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":130},{"cpu":[PRIVATE_IP]907975,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"snikket","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":150},{"cpu":[PRIVATE_IP]313424,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":160},{"cpu":[PRIVATE_IP]35057,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":170},{"cpu":[PRIVATE_IP]40359,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":171},{"cpu":[PRIVATE_IP]292897,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":190},{"cpu":[PRIVATE_IP]907975,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/210","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":210},{"cpu":[PRIVATE_IP]702954,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/211","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"newfi-staging","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":[PRIVATE_IP],"vmid":211},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]4656,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]64885,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":[PRIVATE_IP]},{"cgroup-mode":2,"cpu":[PRIVATE_IP]2069,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":[PRIVATE_IP]},{"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/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/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","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/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 35.12% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.71% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-app-cloud-quorum-queue.service loaded failed failed Homelab canonical application cloud quorum backup queue +● homelab-backup-retention-gc.service loaded failed failed Homelab owner-aware cloud retention GC +● homelab-vm-cloud-quorum-queue.service loaded failed failed Homelab canonical VM/CT cloud quorum backup queue + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Sat [PRIVATE_IP] 01:17:34 MSK 31s Sat [PRIVATE_IP] 01:16:34 MSK 28s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sat [PRIVATE_IP] 01:17:58 MSK 55s Sat [PRIVATE_IP] 01:07:58 MSK 9min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sat [PRIVATE_IP] 01:19:52 MSK 2min 50s Sat [PRIVATE_IP] 01:04:52 MSK 12min ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sat [PRIVATE_IP] 01:19:52 MSK 2min 50s Sat [PRIVATE_IP] 01:04:52 MSK 12min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sat [PRIVATE_IP] 01:20:12 MSK 3min 9s Sat [PRIVATE_IP] 01:15:12 MSK 1min 50s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Sat [PRIVATE_IP] 01:20:12 MSK 3min 9s Sat [PRIVATE_IP] 01:15:12 MSK 1min 50s ago netbird-peers-health.timer netbird-peers-health.service +Sat [PRIVATE_IP] 01:21:27 MSK 4min 24s Sat [PRIVATE_IP] 01:16:16 MSK 46s ago homelab-health-metrics.timer homelab-health-metrics.service +Sat [PRIVATE_IP] 01:22:58 MSK 5min Sat [PRIVATE_IP] 01:07:58 MSK 9min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sat [PRIVATE_IP] 01:30:00 MSK 12min Sat [PRIVATE_IP] 01:15:12 MSK 1min 50s ago homelab-incident-journal.timer homelab-incident-journal.service +Sat [PRIVATE_IP] 01:30:14 MSK 13min Sat [PRIVATE_IP] 01:15:32 MSK 1min 30s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sat [PRIVATE_IP] 01:30:17 MSK 13min Sat [PRIVATE_IP] 01:00:44 MSK 16min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sat [PRIVATE_IP] 01:30:57 MSK 13min Sat [PRIVATE_IP] 01:16:16 MSK 46s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sat [PRIVATE_IP] 01:31:22 MSK 14min Sat [PRIVATE_IP] 01:15:58 MSK 1min 4s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sat [PRIVATE_IP] 01:31:58 MSK 14min Sat [PRIVATE_IP] 01:16:58 MSK 4s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sat [PRIVATE_IP] 01:34:15 MSK 17min Sat [PRIVATE_IP] 01:00:13 MSK 16min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sat [PRIVATE_IP] 01:36:57 MSK 19min Sat [PRIVATE_IP] 01:06:51 MSK 10min ago homelab-backup-audit.timer homelab-backup-audit.service +Sat [PRIVATE_IP] 02:12:34 MSK 55min Fri [PRIVATE_IP] 04:11:16 MSK 21h ago pve-daily-update.timer pve-daily-update.service +Sat [PRIVATE_IP] 03:23:30 MSK 2h 6min Fri [PRIVATE_IP] 03:22:16 MSK 21h ago homelab-backup-retention-gc.timer homelab-backup-retention-gc.service +Sat [PRIVATE_IP] 04:35:58 MSK 3h 18min Fri [PRIVATE_IP] 22:35:58 MSK 2h 41min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Sat [PRIVATE_IP] 05:39:35 MSK 4h 22min Fri [PRIVATE_IP] 23:36:52 MSK 1h 40min ago homelab-evidence-root.timer homelab-evidence-root.service +Sat [PRIVATE_IP] 06:15:09 MSK 4h 58min Fri [PRIVATE_IP] 06:03:32 MSK 19h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Sat [PRIVATE_IP] 06:50:01 MSK 5h 32min Sat [PRIVATE_IP] 00:49:52 MSK 27min ago homelab-mailru-trash-gc.timer homelab-mailru-trash-gc.service +Sat [PRIVATE_IP] 07:18:21 MSK 6h Fri [PRIVATE_IP] 07:18:12 MSK 17h ago homelab-drift-check.timer homelab-drift-check.service +Sat [PRIVATE_IP] 07:38:11 MSK 6h Fri [PRIVATE_IP] 07:48:57 MSK 17h ago homelab-alerting-health.timer homelab-alerting-health.service +Sat [PRIVATE_IP] 07:38:37 MSK 6h Fri [PRIVATE_IP] 07:39:32 MSK 17h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Sat [PRIVATE_IP] 07:40:06 MSK 6h Fri [PRIVATE_IP] 07:45:12 MSK 17h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Sat [PRIVATE_IP] 07:48:00 MSK 6h Fri [PRIVATE_IP] 07:58:00 MSK 17h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Sat [PRIVATE_IP] 07:56:40 MSK 6h Fri [PRIVATE_IP] 07:59:22 MSK 17h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Sat [PRIVATE_IP] 07:56:49 MSK 6h Fri [PRIVATE_IP] 08:00:57 MSK 17h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Sat [PRIVATE_IP] 08:08:44 MSK 6h Fri [PRIVATE_IP] 08:07:05 MSK 17h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Sat [PRIVATE_IP] 08:15:14 MSK 6h Fri [PRIVATE_IP] 08:15:57 MSK 17h ago homelab-overall-health.timer homelab-overall-health.service +Sat [PRIVATE_IP] 08:19:35 MSK 7h Fri [PRIVATE_IP] 08:29:57 MSK 16h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Sat [PRIVATE_IP] 08:31:12 MSK 7h Fri [PRIVATE_IP] 08:25:57 MSK 16h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Sat [PRIVATE_IP] 08:41:46 MSK 7h Fri [PRIVATE_IP] 08:37:57 MSK 16h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Sat [PRIVATE_IP] 08:48:35 MSK 7h Fri [PRIVATE_IP] 08:48:57 MSK 16h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Sat [PRIVATE_IP] 08:51:11 MSK 7h Fri [PRIVATE_IP] 09:00:12 MSK 16h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Sat [PRIVATE_IP] 10:15:00 MSK 8h Fri [PRIVATE_IP] 10:15:12 MSK 15h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sat [PRIVATE_IP] 11:53:30 MSK 10h Fri [PRIVATE_IP] 09:35:17 MSK 15h ago man-db.timer man-db.service +Sat [PRIVATE_IP] 14:33:20 MSK 13h Fri [PRIVATE_IP] 19:37:48 MSK 5h 39min ago apt-daily.timer apt-daily.service +Sat [PRIVATE_IP] 16:47:57 MSK 15h Fri [PRIVATE_IP] 16:47:57 MSK 8h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Sun [PRIVATE_IP] 00:00:00 MSK 22h Sat [PRIVATE_IP] 00:00:12 MSK 1h 16min ago dpkg-db-backup.timer dpkg-db-backup.service +Sun [PRIVATE_IP] 00:01:46 MSK 22h Sat [PRIVATE_IP] 00:18:33 MSK 58min ago homelab-storage-capacity.timer homelab-storage-capacity.service +Sun [PRIVATE_IP] 00:02:01 MSK 22h Sat [PRIVATE_IP] 00:13:59 MSK 1h 3min ago homelab-docker-health.timer homelab-docker-health.service +Sun [PRIVATE_IP] 00:04:22 MSK 22h Sat [PRIVATE_IP] 00:34:19 MSK 42min ago logrotate.timer logrotate.service +Sun [PRIVATE_IP] 00:13:10 MSK 22h Sat [PRIVATE_IP] 00:01:58 MSK 1h 15min ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Sun [PRIVATE_IP] 00:13:52 MSK 22h Sat [PRIVATE_IP] 00:02:46 MSK 1h 14min ago homelab-quality-gate.timer homelab-quality-gate.service +Sun [PRIVATE_IP] 03:10:03 MSK 1 day 1h Sun [PRIVATE_IP] 03:10:22 MSK 5 days ago e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:10:58 MSK 1 day 1h Sun [PRIVATE_IP] 03:10:39 MSK 5 days ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 07:40:18 MSK 1 day 6h Sun [PRIVATE_IP] 07:35:56 MSK 5 days ago homelab-rotating-boot-drill.timer homelab-rotating-boot-drill.service +Mon [PRIVATE_IP] 00:04:42 MSK 1 day 22h Mon [PRIVATE_IP] 00:10:39 MSK 5 days ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:09:14 MSK 1 day 22h Mon [PRIVATE_IP] 00:30:56 MSK 5 days ago fstrim.timer fstrim.service +- - Fri [PRIVATE_IP] 22:57:58 MSK 2h 19min ago homelab-backup-v2.timer homelab-backup-v2.service +- - Sat [PRIVATE_IP] 01:17:02 MSK 360ms ago homelab-router-watchdog.timer homelab-router-watchdog.service +- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service +- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service +- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service + +56 timers listed. +RUNTIME_MANIFEST_ID=df[PRIVATE_IP]ac9b5abd[PRIVATE_IP]b[PRIVATE_IP]d89496fb2bde[PRIVATE_IP] +EXPERIMENT_ID=5462ee[PRIVATE_IP]ebe[PRIVATE_IP]feb2ad[PRIVATE_IP]1ad87bbac0b8108 +COLLECTION_START_AT=[PRIVATE_IP]T[PRIVATE_IP]:00 +FIRST_COMPLETE_D1_CLOSE=[PRIVATE_IP]T[PRIVATE_IP]:00 +PRODUCTION_LAUNCH_ALLOWED=False +EXECUTION_AUTHORITY=False +RISK_AUTHORITY=False +STAGE_A_HEALTH=AWAITING_PRIMARY_FINALITY +FORENSIC_PREVIOUS_EPOCH_PRESERVED=YES + +## NEWFI_TASK6_AUTH_CHECKPOINT_V[PRIVATE_IP] +- Scope: historical accepted AUTH test, not a current SMTP connection test. +- Newfi approved SMTP account/sender: aleisaev@yandex.ru. +- Endpoint used by accepted test: smtp.yandex.ru:465 with certificate verification; single PLAIN initial response accepted with code 235. +- Evidence: incident ledger ### NEWFI_TASK6_YANDEX_AUTH_V2_OBSERVATION and ### NEWFI_TASK6_AUTH_PROOF_CLOSE_V1. +- No password file written, no application configuration changed, no mail sent by the accepted AUTH test. +- Persistent transport installation and application delivery are not proven by this checkpoint. Task6 is not complete. +- AUTH challenge and missing-file incidents closed; launch/session incident remains OPEN with original cause unproven. +- This update does not change VM211, VM160, routing, board state or Git. +- Other incidents and infrastructure health were not assessed. + + +## NEWFI_PRIVATE_STRUCTURE92_WRONG_MARKER_SCOPE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: NEWFI92 inspected the pve01 NEWFI90 attempt marker, which had not been finalized because the outer shell exited immediately after the guest returned RC3 following its successful rollback. The guest marker contained the true final rollback state. +- Correction: NEWFI93 required both the guest FINISHED/ROLLED_BACK record and a fresh exact demo-state readback before reconciling the outer NEWFI90 marker. NEWFI92 itself never reserved an attempt or mutated state. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] +- Status: OPEN +- Command: NEWFI95 +- Symptom: after the content-structure precheck passed, the pve03 Python wrapper failed to parse at the PHP line beginning with $root. No Portal discovery or application mutation was reached. +- RCA: an outer raw triple-single-quoted guest Python payload contained an inner raw triple-single-quoted PHP payload. The inner delimiter terminated the outer Python string, causing PHP source to be parsed as Python. +- Safety: NEWFI95 was read-only, created no attempt marker, and did not reach the intended nested guest execution. Do not replay NEWFI95. + + +## NEWFI_PRIVATE_NEWFI95_NESTED_TRIPLE_QUOTE_PARSE_[PRIVATE_IP] CLOSURE +- Status: CLOSED +- RCA: an inner triple-single-quoted PHP literal terminated the outer triple-single-quoted Python guest payload in NEWFI95. The wrapper therefore failed parsing before the intended Portal discovery executed. +- Correction: NEWFI96 removed the nested Python payload layer entirely and passed one Python program directly to VM211 through qm guest exec stdin. The read-only Portal contract completed with QGA exit 0 and the implementation worktree remained unchanged. OUTPUT_END CHAT_OUTPUT_END