1
0
Files
homelab-public-context/runtime/latest.json
T

39 lines
21 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "SUPPORT-260918-GRAM-XF-CODEVIPE-PARTIAL-STATE-INSTALLABILITY-RCA-513R3R2",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "read-only",
"component": "gram-support-codevipe-partial-state-installability-rca",
"started_at_utc": "2026-09-18T01:28:11Z",
"finished_at_utc": "2026-09-18T01:28:13Z",
"reference_register_checked": true,
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
"error_register_checked": true,
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
"command_sha256": "2007a08bdd3a7e3c5541e130c8f14d46a334da28d493dc7aaa74707f6ed4d2b7",
"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": "f8164218838f14dc4258bebe0143a275376e0dd5cd30c7c34d38151d3b94a72d",
"sanitized_output_sha256": "f8164218838f14dc4258bebe0143a275376e0dd5cd30c7c34d38151d3b94a72d",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "GRAM513R3R2_WRAPPER_BEGIN=true\nERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nGRAM513R3R2_SAFE_REPORT={\"artifact\":{\"sha256\":\"2e31f89d3626a83c1211910aa6fd279cc04689b75ba822899952865085cf551e\",\"version_id\":1000120,\"version_string\":\"1.0.0 Alpha 3 Unified Fix 10\",\"setup_sha256\":\"4977f90ec0444e2e3a1e4ee9b79a4e88098c5a3ae37b30d63e77cff2e1fcb971\",\"template_modifications_sha256\":\"04f338a8107a80bd3c17b6f6888faea596a5057140556ce6f4f1673d2034628b\"},\"setup_hits\":[{\"line\":15,\"text\":\"public function installStep1(): void\",\"context\":\" use StepRunnerUninstallTrait;\\\\n\\\\n public function installStep1(): void\\\\n {\\\\n $sm = $this->schemaManager();\\\\n $sm->createTable('xf_gram_support_ticket', function($table) {\"},{\"line\":17,\"text\":\"$sm = $this->schemaManager();\",\"context\":\" public function installStep1(): void\\\\n {\\\\n $sm = $this->schemaManager();\\\\n $sm->createTable('xf_gram_support_ticket', function($table) {\\\\n $table->addColumn('ticket_id', 'int')->unsigned()->autoIncrement();\\\\n $table->addColumn('public_ref', 'varchar', 64);\"},{\"line\":18,\"text\":\"$sm->createTable('xf_gram_support_ticket', function($table) {\",\"context\":\" {\\\\n $sm = $this->schemaManager();\\\\n $sm->createTable('xf_gram_support_ticket', function($table) {\\\\n $table->addColumn('ticket_id', 'int')->unsigned()->autoIncrement();\\\\n $table->addColumn('public_ref', 'varchar', 64);\\\\n $table->addColumn('site_id', 'varchar', 32);\"},{\"line\":44,\"text\":\"$sm->createTable('xf_gram_support_message', function($table) {\",\"context\":\" $table->addKey(['site_id','status','updated_date'], 'site_status_updated');\\\\n });\\\\n $sm->createTable('xf_gram_support_message', function($table) {\\\\n $table->addColumn('message_id', 'int')->unsigned()->autoIncrement();\\\\n $table->addColumn('ticket_id', 'int')->unsigned();\\\\n $table->addColumn('user_id', 'int')->unsigned()->setDefault(0);\"},{\"line\":56,\"text\":\"$sm->createTable('xf_gram_support_event', function($table) {\",\"context\":\" $table->addKey(['ticket_id','is_internal','message_date'], 'ticket_public_date');\\\\n });\\\\n $sm->createTable('xf_gram_support_event', function($table) {\\\\n $table->addColumn('event_id', 'int')->unsigned()->autoIncrement();\\\\n $table->addColumn('ticket_id', 'int')->unsigned();\\\\n $table->addColumn('site_id', 'varchar', 32);\"},{\"line\":68,\"text\":\"$sm->createTable('xf_gram_support_attachment_meta', function($table) {\",\"context\":\" });\\\\n\\\\n $sm->createTable('xf_gram_support_attachment_meta', function($table) {\\\\n $table->addColumn('attachment_id', 'int')->unsigned();\\\\n $table->addColumn('ticket_id', 'int')->unsigned();\\\\n $table->addColumn('message_id', 'int')->unsigned()->setDefault(0);\"},{\"line\":78,\"text\":\"$sm->createTable('xf_gram_support_delivery', function($table) {\",\"context\":\" $table->addKey('message_id');\\\\n });\\\\n $sm->createTable('xf_gram_support_delivery', function($table) {\\\\n $table->addColumn('delivery_key', 'char', 64);\\\\n $table->addColumn('event_id', 'int')->unsigned();\\\\n $table->addColumn('consumer', 'varchar', 32);\"},{\"line\":94,\"text\":\"$sm->createTable('xf_gram_support_rate_limit', function($table) {\",\"context\":\" $table->addKey(['state','lease_expires'], 'state_lease');\\\\n });\\\\n $sm->createTable('xf_gram_support_rate_limit', function($table) {\\\\n $table->addColumn('rate_key', 'char', 64);\\\\n $table->addColumn('window_start', 'int')->unsigned();\\\\n $table->addColumn('hit_count', 'int')->unsigned()->setDefault(0);\"},{\"line\":104,\"text\":\"public function uninstallStep1(): void\",\"context\":\" }\\\\n\\\\n public function uninstallStep1(): void\\\\n {\\\\n $sm = $this->schemaManager();\\\\n foreach (['xf_gram_support_attachment_meta','xf_gram_support_delivery','xf_gram_support_rate_limit','xf_gram_support_event','xf_gram_support_message','xf_gram_support_ticket'] as $name) {\"},{\"line\":106,\"text\":\"$sm = $this->schemaManager();\",\"context\":\" public function uninstallStep1(): void\\\\n {\\\\n $sm = $this->schemaManager();\\\\n foreach (['xf_gram_support_attachment_meta','xf_gram_support_delivery','xf_gram_support_rate_limit','xf_gram_support_event','xf_gram_support_message','xf_gram_support_ticket'] as $name) {\\\\n $sm->dropTable($name);\\\\n }\"},{\"line\":108,\"text\":\"$sm->dropTable($name);\",\"context\":\" $sm = $this->schemaManager();\\\\n foreach (['xf_gram_support_attachment_meta','xf_gram_support_delivery','xf_gram_support_rate_limit','xf_gram_support_event','xf_gram_support_message','xf_gram_support_ticket'] as $name) {\\\\n $sm->dropTable($name);\\\\n }\\\\n }\\\\n}\"}],\"templates\":{\"gram_support.less\":{\"version_id\":\"1000100\",\"version_string\":\"1.0.0 Alpha 3 Unified Fix 8\",\"content\":\".gramSupport-launcher\\n{\\n\\tposition: fixed;\\n\\tright: 18px;\\n\\tbottom: 18px;\\n\\tz-index: 500;\\n\\tborder-radius: 999px;\\n\\tbox-shadow: 0 6px 24px rgba(0, 0, 0, .22);\\n}\\n\\n.gramSupport-messageMeta\\n{\\n\\tfont-size: 12px;\\n\\topacity: .7;\\n\\tmargin-bottom: 6px;\\n}\\n\\n.gramSupport-message--internal\\n{\\n\\tborder-left: 4px solid currentColor;\\n\\topacity: .9;\\n}\\n\\n@media (max-width: 650px)\\n{\\n\\t.gramSupport-launcher\\n\\t{\\n\\t\\tright: 12px;\\n\\t\\tbottom: 12px;\\n\\t\\tmax-width: calc(100vw - 24px);\\n\\t}\\n}\\n\\n.gramSupport-messageBody\\n{\\n\\twhite-space: pre-wrap;\\n\\toverflow-wrap: anywhere;\\n}\\n\\n/* gram-support-footer-center-v1 */\\n.gramSupport-launcher\\n{\\n position: static;\\n inset: auto;\\n z-index: auto;\\n flex: 1 1 auto;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: auto;\\n max-width: none;\\n padding: 5px 18px;\\n}\\n\\n.gramSupport-launcher .button.button--primary\\n{\\n position: relative;\\n overflow: hidden;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 220px;\\n min-height: 52px;\\n padding: 11px 24px;\\n border: 1px solid rgba(255, 213, 122, .78);\\n border-radius: 14px;\\n color: #fff1c4;\\n background-image:\\n linear-gradient(110deg, transparent 0%, transparent 43%, rgba(255, 255, 255, .42) 50%, transparent 57%, transparent 100%),\\n linear-gradient(135deg, #533100 0%, #9a6208 24%, #d8a63a 48%, #a76d0b 70%, #4a2b00 100%);\\n background-size: 260% 100%, 100% 100%;\\n background-position: 180% 0, 0 0;\\n box-shadow: inset 0 0 0 1px rgba(255, 246, 210, .12), 0 0 22px rgba(220, 166, 49, .38), 0 9px 26px rgba(0, 0, 0, .30);\\n text-shadow: 0 1px 1px rgba(0, 0, 0, .45);\\n animation: gramSupportFooterShimmer 4.8s ease-in-out infinite;\\n transition: transform .18s ease, box-shadow .18s ease, filter .18s ease;\\n}\\n\\n.gramSupport-launcher .button.button--primary:hover,\\n.gramSupport-launcher .button.button--primary:focus-visible\\n{\\n filter: brightness(1.10) saturate(1.08);\\n transform: translateY(-1px);\\n box-shadow: inset 0 0 0 1px rgba(255, 249, 224, .20), 0 0 28px rgba(235, 184, 67, .50), 0 11px 30px rgba(0, 0, 0, .34);\\n}\\n\\n.gramSupport-launcher .button-text\\n{\\n position: relative;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n gap: 10px;\\n font-size: 17px;\\n font-weight: 600;\\n letter-spacing: .01em;\\n}\\n\\n.gramSupport-launcher .button-text::before\\n{\\n content: \\\"\\\";\\n flex: 0 0 auto;\\n width: 20px;\\n height: 16px;\\n box-sizing: border-box;\\n border: 2px solid currentColor;\\n border-bottom: 0;\\n border-radius: 12px 12px 0 0;\\n}\\n\\n.gramSupport-launcher .button-text::after\\n{\\n content: \\\"\\\";\\n position: absolute;\\n left: 0;\\n top: 50%;\\n width: 4px;\\n height: 8px;\\n border-radius: 3px;\\n background: currentColor;\\n box-shadow: 16px 0 0 currentColor;\\n transform: translateY(-5%);\\n}\\n\\n@keyframes gramSupportFooterShimmer\\n{\\n 0%, 56% { background-position: 180% 0, 0 0; }\\n 82%, 100% { background-position: -80% 0, 0 0; }\\n}\\n\\n@media (max-width: 650px)\\n{\\n .p-footer-row\\n {\\n flex-wrap: wrap;\\n }\\n\\n .gramSupport-launcher\\n {\\n order: 3;\\n flex: 0 0 100%;\\n width: 100%;\\n max-width: none;\\n padding: 10px 0 2px;\\n }\\n\\n .gramSupport-launcher .button.button--primary\\n {\\n width: calc(100% - 32px);\\n max-width: 320px;\\n }\\n}\\n\\n@media (prefers-reduced-motion: reduce)\\n{\\n .gramSupport-launcher .button.button--primary\\n {\\n animation: none;\\n transition: none;\\n }\\n}\\n\\n/* gram-support-footer-align-v2 */\\n@media (min-width: 901px)\\n{\\n .p-footer-row\\n {\\n position: relative;\\n min-height: 64px;\\n }\\n\\n .gramSupport-launcher\\n {\\n position: absolute;\\n left: 50%;\\n top: 50%;\\n right: auto;\\n bottom: auto;\\n inset: auto;\\n transform: translate(-50%, -50%);\\n flex: 0 0 auto;\\n width: auto;\\n max-width: none;\\n padding: 0;\\n margin: 0;\\n z-index: 2;\\n }\\n}\\n\\n@media (max-width: 900px)\\n{\\n .p-footer-row\\n {\\n flex-wrap: wrap;\\n }\\n\\n .gramSupport-launcher\\n {\\n position: static;\\n inset: auto;\\n transform: none;\\n order: 3;\\n flex: 0 0 100%;\\n width: 100%;\\n max-width: none;\\n padding: 10px 0 2px;\\n margin: 0;\\n z-index: auto;\\n }\\n\\n .gramSupport-launcher .button.button--primary\\n {\\n width: calc(100% - 32px);\\n max-width: 320px;\\n }\\n}\\n\\n/* gram-support-footer-align-v3-mobile-center */\\n@media (max-width: 900px)\\n{\\n .gramSupport-launcher\\n {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n text-align: center;\\n }\\n\\n .gramSupport-launcher .button.button--primary\\n {\\n margin-left: auto;\\n margin-right: auto;\\n }\\n}\\n\\n/* gram-support-footer-align-v4-desktop-inset */\\n@media (min-width: 901px)\\n{\\n .gramSupport-launcher\\n {\\n inset: 50% auto auto 50%;\\n transform: translate(-50%, -50%);\\n }\\n}\\n\\n/* gram-support-footer-align-v5-gap-grid */\\n@media (min-width: 901px)\\n{\\n .p-footer-row\\n {\\n display: grid;\\n grid-template-columns: max-content minmax(0, 1fr) max-content;\\n align-items: center;\\n column-gap: 16px;\\n }\\n\\n .p-footer-row-main\\n {\\n grid-column: 1;\\n min-width: 0;\\n }\\n\\n .p-footer-row > .gramSupport-launcher\\n {\\n grid-column: 2;\\n grid-row: 1;\\n position: static;\\n inset: auto;\\n transform: none;\\n width: auto;\\n margin: 0;\\n justify-self: center;\\n align-self: center;\\n }\\n\\n .p-footer-row-opposite\\n {\\n grid-column: 3;\\n min-width: 0;\\n justify-self: end;\\n }\\n}\\n\\n/* gram-support-footer-align-v6-gap-grid-force */\\n@keyframes gramSupportFooterShimmerV6\\n{\\n 0% { background-position: 0% 50%; }\\n 100% { background-position: 200% 50%; }\\n}\\n\\nhtml body .p-footer .p-footer-row\\n{\\n position: relative !important;\\n}\\n\\nhtml body .p-footer .p-footer-row > .gramSupport-launcher.button\\n{\\n display: inline-flex !important;\\n align-items: center !important;\\n justify-content: center !important;\\n gap: .45em !important;\\n box-sizing: border-box !important;\\n min-height: 38px !important;\\n max-width: 100% !important;\\n padding: 8px 16px !important;\\n border: 1px solid rgba(255, 225, 128, .88) !important;\\n border-radius: 999px !important;\\n color: #241700 !important;\\n background: linear-gradient(120deg, #7c4b00 0%, #c88a16 18%, #f0c85a 36%, #fff1a8 50%, #d9a52f 66%, #8a5404 84%, #c88a16 100%) !important;\\n background-size: 220% 100% !important;\\n box-shadow: 0 0 14px rgba(235, 176, 44, .42), 0 0 28px rgba(235, 176, 44, .16), inset 0 1px 0 rgba(255, 255, 255, .45) !important;\\n font-weight: 700 !important;\\n line-height: 1.2 !important;\\n text-decoration: none !important;\\n white-space: nowrap !important;\\n animation: gramSupportFooterShimmerV6 3.2s linear infinite !important;\\n}\\n\\nhtml body .p-footer .p-footer-row > .gramSupport-launcher.button::before\\n{\\n content: \\\" \\\" !important;\\n display: inline-block !important;\\n flex: 0 0 16px !important;\\n width: 16px !important;\\n height: 14px !important;\\n box-sizing: border-box !important;\\n margin-right: .10em !important;\\n color: #2b1a00 !important;\\n border: 2px solid currentColor !important;\\n border-bottom: 0 !important;\\n border-radius: 9px 9px 2px 2px !important;\\n background:\\n linear-gradient(currentColor, currentColor) left bottom / 3px 6px no-repeat,\\n linear-gradient(currentColor, currentColor) right bottom / 3px 6px no-repeat !important;\\n}\\n\\n@media (min-width: 901px)\\n{\\n html body .p-footer .p-footer-row\\n {\\n display: grid !important;\\n grid-template-columns: max-content minmax(0, 1fr) max-content !important;\\n align-items: center !important;\\n column-gap: 16px !important;\\n }\\n\\n html body .p-footer .p-footer-row-main\\n {\\n grid-column: 1 !important;\\n grid-row: 1 !important;\\n float: none !important;\\n min-width: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n }\\n\\n html body .p-footer .p-footer-row-opposite\\n {\\n grid-column: 3 !important;\\n grid-row: 1 !important;\\n float: none !important;\\n min-width: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n justify-self: end !important;\\n }\\n\\n html body .p-footer .p-footer-row > .gramSupport-launcher.button\\n {\\n grid-column: 2 !important;\\n grid-row: 1 !important;\\n position: static !important;\\n inset: auto !important;\\n top: auto !important;\\n right: auto !important;\\n bottom: auto !important;\\n left: auto !important;\\n transform: none !important;\\n width: max-content !important;\\n margin: 0 !important;\\n float: none !important;\\n justify-self: center !important;\\n align-self: center !important;\\n }\\n}\\n\\n@media (max-width: 900px)\\n{\\n html body .p-footer .p-footer-row\\n {\\n display: grid !important;\\n grid-template-columns: minmax(0, 1fr) !important;\\n align-items: center !important;\\n row-gap: 8px !important;\\n }\\n\\n html body .p-footer .p-footer-row-main\\n {\\n grid-column: 1 !important;\\n grid-row: 1 !important;\\n float: none !important;\\n min-width: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n justify-self: stretch !important;\\n }\\n\\n html body .p-footer .p-footer-row-opposite\\n {\\n grid-column: 1 !important;\\n grid-row: 2 !important;\\n float: none !important;\\n min-width: 0 !important;\\n margin-left: 0 !important;\\n margin-right: 0 !important;\\n justify-self: stretch !important;\\n }\\n\\n html body .p-footer .p-footer-row > .gramSupport-launcher.button\\n {\\n grid-column: 1 !important;\\n grid-row: 3 !important;\\n position: static !important;\\n inset: auto !important;\\n top: auto !important;\\n right: auto !important;\\n bottom: auto !important;\\n left: auto !important;\\n transform: none !important;\\n width: max-content !important;\\n margin: 4px 0 0 !important;\\n float: none !important;\\n justify-self: center !important;\\n align-self: center !important;\\n }\\n}\\n\\n\",\"sha256\":\"4482bdc4eadbbaa7cd515303a1a76500eb4be2dfeb1a4d0ebd41ea99b2465e17\"},\"gram_support_launcher\":{\"version_id\":\"1000050\",\"version_string\":\"1.0.0 Alpha 3 Unified Fix 3\",\"content\":\"\\n<xf:css src=\\\"gram_support.less\\\" />\\n\\n<xf:if is=\\\"$xf.options.gramSupportSiteId\\\">\\n\\t<a class=\\\"gramSupport-launcher button button--primary\\\"\\n\\t\\thref=\\\"{{ link('support/create') }}\\\"\\n\\t\\taria-label=\\\"{{ phrase('gram_support_open_support') }}\\\">\\n\\t\\t{{ phrase('gram_support_open_support') }}\\n\\t</a>\\n</xf:if>\\n\",\"sha256\":\"eb8510732480507f86c2401a5d49c465820c225c9a3519530f751f6f501eaf5d\"}},\"codevipe\":{\"ok\":true,\"addon\":null,\"counts\":{\"xf_content_type_field\":0,\"xf_code_event_listener\":0,\"xf_option\":0,\"xf_option_group\":0,\"xf_permission\":0,\"xf_permission_interface_group\":0,\"xf_phrase\":0,\"xf_route\":0,\"xf_template\":0,\"xf_template_modification\":0},\"support_tables\":[\"xf_gram_support_attachment_meta\",\"xf_gram_support_delivery\",\"xf_gram_support_event\",\"xf_gram_support_message\",\"xf_gram_support_rate_limit\",\"xf_gram_support_ticket\"],\"support_table_rows\":{\"xf_gram_support_attachment_meta\":0,\"xf_gram_support_delivery\":0,\"xf_gram_support_event\":0,\"xf_gram_support_message\":0,\"xf_gram_support_rate_limit\":0,\"xf_gram_support_ticket\":0},\"routes\":[],\"jobs\":[{\"job_id\":4,\"execute_class\":\"XF\\\\Job\\\\Cron\",\"manual_execute\":0},{\"job_id\":50,\"execute_class\":\"XF\\\\Job\\\\UpgradeCheck\",\"manual_execute\":0}],\"error_max\":0,\"recent_errors\":[],\"schema_manager_createTable\":{\"ok\":true,\"class\":\"XF\\\\Db\\\\SchemaManager\",\"parameters\":[{\"name\":\"tableName\",\"optional\":false},{\"name\":\"toApply\",\"optional\":false}],\"file_basename\":\"SchemaManager.php\",\"start\":187,\"end\":200,\"source_sha256\":\"be6c143b9b8321148d841530fe0e5f8388b5fa178a96a8a1fe759e8208eb71a4\",\"key_lines\":[{\"line\":187,\"text\":\"public function createTable($tableName, \\\\Closure $toApply)\"},{\"line\":189,\"text\":\"$create = $this->newTable($tableName);\"},{\"line\":193,\"text\":\"$toApply($create);\"},{\"line\":194,\"text\":\"$create->apply();\"},{\"line\":198,\"text\":\"$this->handleException($e, $tableName, $create);\"}]},\"board_active\":\"1\",\"board_url\":\"https://codevipe.ru\"},\"assessment\":{\"expected_partial_state\":true,\"support_tables_all_empty\":true,\"schema_createTable_truthy_optional_default\":false,\"schema_createTable_exists_signal\":false,\"setup_createTable_hits\":6,\"setup_dropTable_hits\":1,\"retry_without_delete_candidate\":false},\"requested_footer_patch\":{\"goal\":\"center button in remaining gap between left footer block and right footer links; vertical center aligned with footer text\",\"css_override\":\".p-footer-row {\\n align-items: center;\\n}\\n.gramSupport-launcher {\\n position: static;\\n flex: 1 1 auto;\\n min-width: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n align-self: center;\\n margin: 0 16px;\\n}\\n.gramSupport-launcher .button {\\n margin: 0;\\n}\",\"strategy\":\"launcher already inserted immediately before p-footer-row-opposite; make launcher flex-grow and center contents\"}}\nGRAM513R3R2_DECISION=PASS_PARTIAL_STATE_INSTALLABILITY_RCA\nGRAM513R3R2_NEXT_GATE=HOLD_REQUIRES_INSTALL_PATH_DECISION_NO_DELETE\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260918-GRAM-XF-CODEVIPE-PARTIAL-STATE-INSTALLABILITY-RCA-513R3R2\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n"
}