{ "schema_version": 1, "channel": "homelab-runtime", "command_id": "SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R4", "status": "FAIL", "rc": 3, "host": "pve01", "mode": "read-only", "component": "xenforo-template-merge-service-rca", "started_at_utc": "2026-09-17T22:19:22Z", "finished_at_utc": "2026-09-17T22:19:25Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", "command_sha256": "f66955361fd82d2307ead100b2a5ecc8ef99f53c90131cfb6997170c5140693f", "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": 3, "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": "8e37e2561ea1769921a2d635d9d29e56238ab6889f6cc1953a6b5d87931e828d", "sanitized_output_sha256": "8e37e2561ea1769921a2d635d9d29e56238ab6889f6cc1953a6b5d87931e828d", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", "output": "TPL495T3R4_WRAPPER_BEGIN=true\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nTPL495T3R4_BEGIN=true\nMODE=READ_ONLY_MERGE_SERVICE_RCA\nVM211_EXCLUDED=true\nTPL495T3R4_SAFE_REPORT={\"affected\":[\"codevipe.ru\",\"dsmods.ru\",\"gamevipe.ru\",\"hkmods.ru\",\"zakrutim.ru\"],\"outdated_total\":5,\"xf_error_rows_total\":7,\"sites\":[{\"site\":\"codevipe.ru\",\"xf_error_rows\":1,\"board_active\":\"1\",\"outdated_count_repo\":1,\"action_merge_outdated\":{\"descriptor\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"service_bindings\":[],\"history_receivers\":[\"historyRepo\"]},\"filesystem_hits\":[{\"file\":\"src/XF/Job/TemplateMerge.php\",\"file_sha256\":\"7cac80d14ba46c6889f99d0603eed60b387bdf527458a15e912bddc0015e3a93\",\"definition\":false,\"occurrences\":[{\"line\":89,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"file_sha256\":\"73b31a31b0498882cf599b3bb95d00ec42783d921d720dadd5342f7d6716f060\",\"definition\":false,\"occurrences\":[{\"line\":452,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"definition\":true,\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"definition_hits\":[{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"outdated\":[{\"template_id\":1401,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"ca051810957679432c36024c18f3adbf3a087c7a034cd46d72edfffbd4564b6c\",\"bytes\":2396,\"lines\":131},\"outdated_meta\":{\"template_id\":1401,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1721849139,\"outdated_by_version\":1,\"outdated_by_date\":0},\"native_service\":null}]},{\"site\":\"dsmods.ru\",\"xf_error_rows\":1,\"board_active\":\"1\",\"outdated_count_repo\":1,\"action_merge_outdated\":{\"descriptor\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"service_bindings\":[],\"history_receivers\":[\"historyRepo\"]},\"filesystem_hits\":[{\"file\":\"src/XF/Job/TemplateMerge.php\",\"file_sha256\":\"7cac80d14ba46c6889f99d0603eed60b387bdf527458a15e912bddc0015e3a93\",\"definition\":false,\"occurrences\":[{\"line\":89,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"file_sha256\":\"73b31a31b0498882cf599b3bb95d00ec42783d921d720dadd5342f7d6716f060\",\"definition\":false,\"occurrences\":[{\"line\":452,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"definition\":true,\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"definition_hits\":[{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"outdated\":[{\"template_id\":1317,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"3898034b75b561c774b41f6e1d8dce66a171fe30c7c210d543b41a8133e42fa2\",\"bytes\":2402,\"lines\":131},\"outdated_meta\":{\"template_id\":1317,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1728727128,\"outdated_by_version\":1,\"outdated_by_date\":0},\"native_service\":null}]},{\"site\":\"gamevipe.ru\",\"xf_error_rows\":1,\"board_active\":\"1\",\"outdated_count_repo\":1,\"action_merge_outdated\":{\"descriptor\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"service_bindings\":[],\"history_receivers\":[\"historyRepo\"]},\"filesystem_hits\":[{\"file\":\"src/XF/Job/TemplateMerge.php\",\"file_sha256\":\"7cac80d14ba46c6889f99d0603eed60b387bdf527458a15e912bddc0015e3a93\",\"definition\":false,\"occurrences\":[{\"line\":89,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"file_sha256\":\"73b31a31b0498882cf599b3bb95d00ec42783d921d720dadd5342f7d6716f060\",\"definition\":false,\"occurrences\":[{\"line\":452,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"definition\":true,\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"definition_hits\":[{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"outdated\":[{\"template_id\":1696,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"fde07ae7d5f65a3cdee23b7f90834229c95495fb69db44727345b550441646ab\",\"bytes\":2410,\"lines\":131},\"outdated_meta\":{\"template_id\":1696,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1720986507,\"outdated_by_version\":1,\"outdated_by_date\":0},\"native_service\":null}]},{\"site\":\"hkmods.ru\",\"xf_error_rows\":1,\"board_active\":\"1\",\"outdated_count_repo\":1,\"action_merge_outdated\":{\"descriptor\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"service_bindings\":[],\"history_receivers\":[\"historyRepo\"]},\"filesystem_hits\":[{\"file\":\"src/XF/Job/TemplateMerge.php\",\"file_sha256\":\"7cac80d14ba46c6889f99d0603eed60b387bdf527458a15e912bddc0015e3a93\",\"definition\":false,\"occurrences\":[{\"line\":89,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"file_sha256\":\"73b31a31b0498882cf599b3bb95d00ec42783d921d720dadd5342f7d6716f060\",\"definition\":false,\"occurrences\":[{\"line\":452,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"definition\":true,\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"definition_hits\":[{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"outdated\":[{\"template_id\":2021,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"2339326596eb8f77111df70fa4336809e67615942b4b7b1afb2777d8ee447bd3\",\"bytes\":2422,\"lines\":131},\"outdated_meta\":{\"template_id\":2021,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1691944582,\"outdated_by_version\":1,\"outdated_by_date\":0},\"native_service\":null}]},{\"site\":\"kingofwolk.ru\",\"xf_error_rows\":1,\"board_active\":\"1\",\"outdated_count_repo\":0,\"action_merge_outdated\":{\"descriptor\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"service_bindings\":[],\"history_receivers\":[\"historyRepo\"]},\"filesystem_hits\":[{\"file\":\"src/XF/Job/TemplateMerge.php\",\"file_sha256\":\"7cac80d14ba46c6889f99d0603eed60b387bdf527458a15e912bddc0015e3a93\",\"definition\":false,\"occurrences\":[{\"line\":89,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"file_sha256\":\"73b31a31b0498882cf599b3bb95d00ec42783d921d720dadd5342f7d6716f060\",\"definition\":false,\"occurrences\":[{\"line\":452,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"definition\":true,\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"definition_hits\":[{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"outdated\":[]},{\"site\":\"zakrutim.ru\",\"xf_error_rows\":1,\"board_active\":\"1\",\"outdated_count_repo\":1,\"action_merge_outdated\":{\"descriptor\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"service_bindings\":[],\"history_receivers\":[\"historyRepo\"]},\"filesystem_hits\":[{\"file\":\"src/XF/Job/TemplateMerge.php\",\"file_sha256\":\"7cac80d14ba46c6889f99d0603eed60b387bdf527458a15e912bddc0015e3a93\",\"definition\":false,\"occurrences\":[{\"line\":89,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"file_sha256\":\"73b31a31b0498882cf599b3bb95d00ec42783d921d720dadd5342f7d6716f060\",\"definition\":false,\"occurrences\":[{\"line\":452,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"definition\":true,\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"definition_hits\":[{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"outdated\":[{\"template_id\":1921,\"type\":\"public\",\"title\":\"extra.less\",\"style_id\":2,\"addon_id\":\"\",\"version_id\":0,\"version_string\":\"\",\"last_edit_date\":1784195301,\"body\":{\"sha256\":\"9662d1b57f5f6fcd2992fd9d150aeb887c242f792eb750cf6cb458d65b99a12d\",\"bytes\":2435,\"lines\":131},\"outdated_meta\":{\"template_id\":1921,\"parent_version_string\":\"2.0.0 Alpha\",\"parent_last_edit_date\":1692264832,\"outdated_by_version\":1,\"outdated_by_date\":0},\"native_service\":null}]},{\"site\":\"newfi.ru\",\"xf_error_rows\":1,\"board_active\":\"1\",\"outdated_count_repo\":0,\"action_merge_outdated\":{\"descriptor\":{\"exists\":true,\"class\":\"XF\\\\Admin\\\\Controller\\\\TemplateController\",\"public\":true,\"required\":1,\"total\":1,\"params\":[{\"name\":\"params\",\"optional\":false,\"type\":\"XF\\\\Mvc\\\\ParameterBag\"}],\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"source_sha256\":\"1379d227c66f90a1e58acd7d0a3d00af36a7a8a3eaeee728cbb752231f6fcd61\",\"token_skeleton\":\"public function actionMergeOutdated ( ParameterBag $params ) { $this -> setSectionContext ( ) ; $template = $this -> assertTemplateForComparison ( $params -> template_id ) ; $parentTemplate = $template -> ParentTemplate ; if ( ! $parentTemplate -> last_edit_date || $parentTemplate -> last_edit_date < $template -> last_edit_date ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } $historyRepo = $this -> repository ( TemplateHistoryRepository :: class ) ; $previousVersion = $historyRepo -> getHistoryForMerge ( $template , $parentTemplate ) ; if ( ! $previousVersion ) { return $this -> error ( \\\\XF :: phrase ( ) ) ; } if ( $this -> isPost ( ) ) { $merged = $this -> filter ( , ) ; $final = implode ( , $merged ) ; $template -> template = $final ; $template -> last_edit_date = time ( ) ; if ( ! $template -> isChanged ( ) ) { $template -> updateVersionId ( ) ; } $template -> save ( ) ; return $this -> redirect ( $this -> buildLink ( ) ) ; } else { $diff = new Diff3 ( ) ; $diffs = $diff -> findDifferences ( $template -> template , $previousVersion -> template , $parentTemplate -> template ) ; $viewParams = [ => $template , => $parentTemplate , => $previousVersion , => $diffs , ] ; return $this -> view ( , , $viewParams ) ; } }\"},\"service_bindings\":[],\"history_receivers\":[\"historyRepo\"]},\"filesystem_hits\":[{\"file\":\"src/XF/Job/TemplateMerge.php\",\"file_sha256\":\"7cac80d14ba46c6889f99d0603eed60b387bdf527458a15e912bddc0015e3a93\",\"definition\":false,\"occurrences\":[{\"line\":89,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Admin/Controller/TemplateController.php\",\"file_sha256\":\"73b31a31b0498882cf599b3bb95d00ec42783d921d720dadd5342f7d6716f060\",\"definition\":false,\"occurrences\":[{\"line\":452,\"sha256\":\"acf4133f395cfc430e8fd41a922367ee843ff80ad9653089d5525859d1ac4b96\"}]},{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"definition\":true,\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"definition_hits\":[{\"file\":\"src/XF/Repository/TemplateHistoryRepository.php\",\"file_sha256\":\"5a3ee2f82eea6014df5a2db82ed37c49820c53abf375fde133884c93fef4a655\",\"occurrences\":[{\"line\":11,\"sha256\":\"62a29cb3534609192eff09eb69949a75b9e6f150b6a77f31e491c28ca9233f22\"}]}],\"outdated\":[]}],\"scope\":\"READ_ONLY_NO_XENFORO_MUTATION\"}\nTPL495T3R4_DECISION=HOLD_XF_ERROR_LOG_NOT_ZERO\nTPL495T3R4_HOLD=7\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-XENFORO-TEMPLATE-MERGE-SERVICE-RCA-495T3R4\",\"status\":\"FAIL\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" }