{ "schema_version": 1, "channel": "homelab-runtime", "command_id": "NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA2", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", "component": "newfi-portal200-template-import-conflict-rca", "started_at_utc": "2026-09-07T21:02:36Z", "finished_at_utc": "2026-09-07T21:02:54Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", "command_sha256": "2f0dbd44e567fc367c6e4a1a605eef8adb7eca4687f5dc4e1ac7e160bc552430", "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": "ec0d72598f443612f00e95ef360b1e004eb071ed2eab6e62cc57118e7403bd87", "sanitized_output_sha256": "ec0d72598f443612f00e95ef360b1e004eb071ed2eab6e62cc57118e7403bd87", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", "output": "RCA2_BEGIN=true\nCOMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4FIX1-RCA2\nMUTATION_SCOPE=NONE_READ_ONLY\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_HISTORY_SHA256=18232adf6297087543f368e45e70f705eb529a09d4c392443d9b28b6376df394\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_STATUS=FAIL\nFAILED_CHANGES_MADE=true\nFAILED_ROLLBACK_STARTED=true\nFAILED_ROLLBACK_RESTORED=false\nFAILED_MUTATION_OUTCOME=ROLLBACK_FAILED\nFAILED_FINAL_DECISION=FAIL_PORTAL200_APPLY4_ROLLBACK_INCOMPLETE\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA1_HISTORY_SHA256=3a5953e2e7a9d3a67edd43047bd53fa6ecaeeec592d651e50ead6b1115439a41\nNEWFI_260907_A_PORTAL200_APPLY4FIX1_RCA1_STATUS=OK\nBASELINE_TEMPLATES_XML={\"bytes\":1461,\"children\":[{\"attrib\":{\"title\":\"newfi_portal\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"index\":0,\"prefix\":\"\\nNewfi\\n\\n
\\n
\\n
\\n
\\n

Newfi

\\n

Закрытое пространство для общения, знаний и материалов сообщества.

\\n
\\n \",\"tag\":\"template\",\"text_bytes\":1274,\"text_sha256\":\"1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741\"}],\"duplicate_keys\":{},\"label\":\"git-head\",\"root_attrib\":{},\"root_tag\":\"templates\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\"}\nCANDIDATE_TEMPLATES_XML={\"bytes\":10977,\"children\":[{\"attrib\":{\"title\":\"newfi_portal\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"index\":0,\"prefix\":\"\\nНьюфДом\\n\\n\\n
\\n
\\n
\\n
Ньюфаундленды · знания · люди\",\"tag\":\"template\",\"text_bytes\":7027,\"text_sha256\":\"2a7b332223b7fb0af18cfb9659d1698603faa79d5d0f63c49359dd6a1c8fbf7a\"},{\"attrib\":{\"title\":\"newfi_portal.less\",\"type\":\"public\",\"version_id\":\"1000010\",\"version_string\":\"1.0.0 Alpha 1\"},\"index\":1,\"prefix\":\"\\n.newfiPortal\\n{\\n\\t--newfi-portal200: 1;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: @xf-elementSpacer;\\n}\\n\\n.newfiPortal-hero,\\n.newfiPortal-cta\\n{\\n\\tborder: @xf-borderSize solid fade(@xf-paletteColor2, 20%);\\n\\tborder-radius: @xf-borderRadiusLarge;\\n\\tbackground: li\",\"tag\":\"template\",\"text_bytes\":3634,\"text_sha256\":\"25b1dc49e89ef7615a11cd1023876c4ab9b5f96f90b1fca52a4815bb5992fbe8\"}],\"duplicate_keys\":{},\"label\":\"candidate\",\"root_attrib\":{},\"root_tag\":\"templates\",\"sha256\":\"1650c3d868d4bc47703f1b75f1f179cd25309b2d3b20a2b848e81a4423c00861\"}\nTEMPLATES_XML_UNIFIED_DIFF=[\"--- baseline\",\"+++ candidate\",\"@@ -1,35 +1,392 @@\",\" \",\" \",\" \",\"+\",\"+ \",\" \"]\nGIT_HEAD={\"err\":\"\",\"out\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"rc\":0}\nGIT_STATUS={\"err\":\"\",\"out\":\"\",\"rc\":0}\nGIT_REMOTE_HEAD=06bab5acd124e768f70305b3d7eca2f595871890\nDB_SCHEMAS=[\"xf_newfi\"]\nXF_TEMPLATE_COLUMNS={\"cols\":[\"template_id\",\"type\",\"title\",\"style_id\",\"template\",\"template_parsed\",\"addon_id\",\"version_id\",\"version_string\",\"last_edit_date\"],\"err\":\"\",\"rc\":0}\nXF_ERROR_LOG_COLUMNS={\"cols\":[\"error_id\",\"exception_date\",\"user_id\",\"ip_address\",\"exception_type\",\"message\",\"filename\",\"line\",\"trace_string\",\"request_state\"],\"err\":\"\",\"rc\":0}\nCURRENT_TEMPLATE_ROWS={\"err\":\"\",\"rc\":0,\"rows\":[\"1610\\t0\\tpublic\\tnewfi_portal\\tNewfi/Portal\\t1f484c8cf6bdeda8fda2974abf8a57f8cc7453fe2a779af7c735afa3b73aa741\\t0\"]}\nCURRENT_ADDON_ROW={\"err\":\"\",\"rc\":0,\"rows\":[\"Newfi/Portal\\t1000010\\t1.0.0 Alpha 1\\t1\\t0\\tNULL\"]}\nCURRENT_ERROR_MAX={\"err\":\"\",\"out\":\"42\",\"rc\":0}\nERROR_ROWS_GE_42={\"columns\":[\"error_id\",\"exception_type\",\"message\",\"filename\",\"line\",\"trace_string\",\"request_state\",\"ip_address\",\"user_id\"],\"err\":\"\",\"rc\":0,\"rows\":[\"42\\tLogicException\\tAttempted to set 'type' while a save was pending without forceSet\\tsrc/XF/Mvc/Entity/Entity.php\\t645\\t#0 src/XF/Mvc/Entity/Entity.php(618): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->set('type', 'public')\\\\n#1 src/XF/AddOn/DataType/AbstractDataType.php(275): XF\\\\\\\\Mvc\\\\\\\\Entity\\\\\\\\Entity->__set('type', 'public')\\\\n#2 src/XF/AddOn/DataType/Template.php(94): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\AbstractDataType->importMappedAttributes(Object(SimpleXMLElement), Object(XF\\\\\\\\Entity\\\\\\\\Template))\\\\n#3 src/XF/Job/AddOnData.php(111): XF\\\\\\\\AddOn\\\\\\\\DataType\\\\\\\\Template->importAddOnData('Newfi/Portal', Object(SimpleXMLElement), 0, 8)\\\\n#4 src/XF/Job/Manager.php(275): XF\\\\\\\\Job\\\\\\\\AddOnData->run(8)\\\\n#5 src/XF/Job/Manager.php(205): XF\\\\\\\\Job\\\\\\\\Manager->runJobInternal(Array, 8)\\\\n#6 src/XF/Job/Manager.php(174): XF\\\\\\\\Job\\\\\\\\Manager->runJobEntry(Array, 8)\\\\n#7 src/XF/Cli/Runner.php(228): XF\\\\\\\\Job\\\\\\\\Manager->runById(530, 8)\\\\n#8 src/XF/Cli/Runner.php(116): XF\\\\\\\\Cli\\\\\\\\Runner->postExecutionCleanUp(Object(Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Output\\\\\\\\ConsoleOutput))\\\\n#9 cmd.php(17): XF\\\\\\\\Cli\\\\\\\\Runner->run()\\\\n#10 {main}\\t{\\\"cli\\\":\\\"\\\\\\\\/var\\\\\\\\/www\\\\\\\\/forums\\\\\\\\/newfi\\\\\\\\/public\\\\\\\\/cmd.php xf:addon-sub-action Newfi\\\\\\\\/Portal import --k=2f35b6e13d3bab46553e340045815fb2bf00d9a4\\\"}\\t\\t0\"]}\nXF_TEMPLATE_DATATYPE_SOURCE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/Template.php\",\"rc\":0,\"text\":\" 65\\t\\t\\t\\t\\t->whereOr($conditions)\\n 66\\t\\t\\t\\t\\t->where('style_id', 0)\\n 67\\t\\t\\t\\t\\t->fetch()\\n 68\\t\\t\\t\\t\\t->groupBy('type', 'title');\\n 69\\t\\t\\t}\\n 70\\t\\t\\telse\\n 71\\t\\t\\t{\\n 72\\t\\t\\t\\t$existing = [];\\n 73\\t\\t\\t}\\n 74\\t\\n 75\\t\\t\\t$i = 0;\\n 76\\t\\t\\t$last = 0;\\n 77\\t\\n 78\\t\\t\\tforeach ($entries AS $entry)\\n 79\\t\\t\\t{\\n 80\\t\\t\\t\\t$i++;\\n 81\\t\\n 82\\t\\t\\t\\tif ($i <= $start)\\n 83\\t\\t\\t\\t{\\n 84\\t\\t\\t\\t\\tcontinue;\\n 85\\t\\t\\t\\t}\\n 86\\t\\n 87\\t\\t\\t\\t$type = (string) $entry['type'];\\n 88\\t\\t\\t\\t$title = (string) $entry['title'];\\n 89\\t\\t\\t\\t$entity = $existing[$type][$title] ?? $this->create();\\n 90\\t\\t\\t\\t$entity->setOption('check_duplicate', false);\\n 91\\t\\t\\t\\t$entity->setOption('report_modification_errors', false);\\n 92\\t\\t\\t\\t$entity->getBehavior(DevOutputWritable::class)->setOption('write_dev_output', false);\\n 93\\t\\n 94\\t\\t\\t\\t$this->importMappedAttributes($entry, $entity);\\n 95\\t\\t\\t\\t$entity->style_id = 0;\\n 96\\t\\t\\t\\t$entity->template = $this->getCdataValue($entry);\\n 97\\t\\t\\t\\t$entity->addon_id = $addOnId;\\n 98\\t\\t\\t\\t$entity->save(true, false);\\n 99\\t\\n 100\\t\\t\\t\\t\\\\XF::dequeueRunOnce('styleLastModifiedDate');\\n 101\\t\\n 102\\t\\t\\t\\tif ($this->resume($maxRunTime, $startTime))\\n 103\\t\\t\\t\\t{\\n 104\\t\\t\\t\\t\\t$last = $i;\\n 105\\t\\t\\t\\t\\tbreak;\\n 106\\t\\t\\t\\t}\\n 107\\t\\t\\t}\\n 108\\t\\t\\treturn ($last ?: false);\\n 109\\t\\t}\\n 110\\t\\n 111\\t\\tpublic function deleteOrphanedAddOnData($addOnId, \\\\SimpleXMLElement $container)\\n 112\\t\\t{\\n 113\\t\\t\\t$existing = $this->findAllForType($addOnId)->where('style_id', 0)->fetch()->groupBy('type', 'title');\\n 114\\t\\t\\tif (!$existing)\\n 115\\t\\t\\t{\\n\"}\nXF_ABSTRACT_DATATYPE_SOURCE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/AddOn/DataType/AbstractDataType.php\",\"rc\":0,\"text\":\" 245\\t\\t{\\n 246\\t\\t\\tif ($entity->exists() && $allowMaintained)\\n 247\\t\\t\\t{\\n 248\\t\\t\\t\\t$maintained = $this->getMaintainedAttributes();\\n 249\\t\\t\\t}\\n 250\\t\\t\\telse\\n 251\\t\\t\\t{\\n 252\\t\\t\\t\\t$maintained = [];\\n 253\\t\\t\\t}\\n 254\\t\\n 255\\t\\t\\tforeach ($this->getMappedAttributes() AS $attr)\\n 256\\t\\t\\t{\\n 257\\t\\t\\t\\tif (in_array($attr, $maintained))\\n 258\\t\\t\\t\\t{\\n 259\\t\\t\\t\\t\\tcontinue;\\n 260\\t\\t\\t\\t}\\n 261\\t\\n 262\\t\\t\\t\\tif (self::USE_AUTO_CDATA)\\n 263\\t\\t\\t\\t{\\n 264\\t\\t\\t\\t\\tif (isset($el[$attr]))\\n 265\\t\\t\\t\\t\\t{\\n 266\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 267\\t\\t\\t\\t\\t}\\n 268\\t\\t\\t\\t\\telse if (isset($el->{$attr}))\\n 269\\t\\t\\t\\t\\t{\\n 270\\t\\t\\t\\t\\t\\t$entity->$attr = (string) $el->{$attr};\\n 271\\t\\t\\t\\t\\t}\\n 272\\t\\t\\t\\t}\\n 273\\t\\t\\t\\telse\\n 274\\t\\t\\t\\t{\\n 275\\t\\t\\t\\t\\t$entity->$attr = (string) $el[$attr];\\n 276\\t\\t\\t\\t}\\n 277\\t\\t\\t}\\n 278\\t\\t}\\n 279\\t\\n 280\\t\\tprotected function pluckXmlAttribute(\\\\SimpleXMLElement $els, $key)\\n 281\\t\\t{\\n 282\\t\\t\\t$values = [];\\n 283\\t\\t\\t$i = 0;\\n 284\\t\\t\\tforeach ($els AS $el)\\n 285\\t\\t\\t{\\n 286\\t\\t\\t\\t$values[$i++] = (string) $el[$key];\\n 287\\t\\t\\t}\\n 288\\t\\n 289\\t\\t\\treturn $values;\\n 290\\t\\t}\\n\"}\nXF_ENTITY_SET_SOURCE={\"err\":\"\",\"path\":\"/var/www/forums/newfi/public/src/XF/Mvc/Entity/Entity.php\",\"rc\":0,\"text\":\" 625\\t\\n 626\\t\\tpublic function set($key, $value, array $options = [])\\n 627\\t\\t{\\n 628\\t\\t\\tif ($this->_readOnly)\\n 629\\t\\t\\t{\\n 630\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Entity is read only\\\");\\n 631\\t\\t\\t}\\n 632\\t\\n 633\\t\\t\\tif ($this->_deleted)\\n 634\\t\\t\\t{\\n 635\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' on a deleted entity\\\");\\n 636\\t\\t\\t}\\n 637\\t\\n 638\\t\\t\\tif ($this->_writePending == 'delete')\\n 639\\t\\t\\t{\\n 640\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a deletion was pending\\\");\\n 641\\t\\t\\t}\\n 642\\t\\n 643\\t\\t\\tif ($this->_writePending && empty($options['forceSet']))\\n 644\\t\\t\\t{\\n 645\\t\\t\\t\\tthrow new \\\\LogicException(\\\"Attempted to set '$key' while a save was pending without forceSet\\\");\\n 646\\t\\t\\t}\\n 647\\t\\n 648\\t\\t\\tif (!isset($this->_structure->columns[$key]))\\n 649\\t\\t\\t{\\n 650\\t\\t\\t\\tif (empty($options['skipInvalid']))\\n 651\\t\\t\\t\\t{\\n 652\\t\\t\\t\\t\\tthrow new \\\\InvalidArgumentException(\\\"Column '$key' is unknown\\\");\\n 653\\t\\t\\t\\t}\\n 654\\t\\t\\t\\treturn false;\\n 655\\t\\t\\t}\\n\"}\nADDON_REBUILD_HELP={\"err\":\"\",\"out\":\"Description:\\n Rebuilds the specified add-on data.\\n\\nUsage:\\n xf:addon-rebuild [options] [--] \\n xf-addon:rebuild\\n\\nArguments:\\n id Add-On ID\\n\\nOptions:\\n -f, --force Skip verifying that the add-on is rebuildable\\n -h, --help Display help for the given command. When no command is given display help for the list command\\n -q, --quiet Do not output any message\\n -V, --version Display this application version\\n --ansi|--no-ansi Force (or disable --no-ansi) ANSI output\\n -n, --no-interaction Do not ask any interactive question\\n -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\\n\",\"rc\":0}\nCMD_GLOBAL_HELP={\"err\":\"\",\"out\":\"Description:\\n List commands\\n\\nUsage:\\n list [options] [--] []\\n\\nArguments:\\n namespace The namespace name\\n\\nOptions:\\n --raw To output raw command list\\n --format=FORMAT The output format (txt, xml, json, or md) [default: \\\"txt\\\"]\\n --short To skip describing commands' arguments\\n -h, --help Display help for the given command. When no command is given display help for the list command\\n -q, --quiet Do not output any message\\n -V, --version Display this application version\\n --ansi|--no-ansi Force (or disable --no-ansi) ANSI output\\n -n, --no-interaction Do not ask any interactive question\\n -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug\\n\\nHelp:\\n The list command lists all commands:\\n \\n /var/www/forums/newfi/public/cmd.php list\\n \\n You can also display the commands for a specific namespace:\\n \\n /var/www/forums/newfi/public/cmd.php list test\\n \\n You can also output the information in other formats by using the --format option:\\n \\n /var/www/forums/newfi/public/cmd.php list --format=xml\\n \\n It's also possible to get raw list of commands (useful for embedding command runner):\\n \\n /var/www/forums/newfi/public/cmd.php list --raw\\n\",\"rc\":0}\nFINAL_DECISION=RCA2_COMPLETE_NO_MUTATION_TEMPLATE_IMPORT_CONFLICT_EVIDENCE_READY\nRCA2_END=true\n" }