)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f3d6dbf789ec80b37e0798cf997ad361781214c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"68d07e24_ccc887c2","updated":"2026-05-06 01:56:36.000000000","message":"Just some typing checks that I was gonna submit against the existing scripts. Thanks for doing this!","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4da472caec53e570706da78abd83b856d55b4c99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d4d93c7d_0ea296ad","updated":"2026-05-06 05:14:59.000000000","message":"The following container images are built with this for anyone who wants to test without building their own:\n\nquay.io/steveb/ironic-vnc-container:ubuntu-graceful\nquay.io/steveb/ironic-vnc-container:centos-graceful","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b1df8daed40a9cc864051fa26722fa79d3ab3b87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"fd85db15_cc8b22b0","updated":"2026-05-08 18:28:30.000000000","message":"Looks like the pep8 is possibly legit.","commit_id":"d07afc93c02064d7208f7cd479c0d218faa23b04"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"d16121cb57c9ec1e829d0887a5cc4504788a780a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c2e6cbe5_bf61124b","updated":"2026-05-08 00:37:02.000000000","message":"recheck","commit_id":"d07afc93c02064d7208f7cd479c0d218faa23b04"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b02c8f1f98e4581b7f152e2dde35e4aedc247dc2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"55482fb1_b0989ad1","updated":"2026-05-10 20:57:31.000000000","message":"Ugh I fixed it but didn\u0027t push it. The change is now up","commit_id":"b5f43144aca5b418929fd43119e2dfc5acaf7743"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"27410226425fb72bf1fd90992fac957c4d9a7693","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6d89a730_caa1e915","updated":"2026-05-19 16:04:41.000000000","message":"recheck","commit_id":"b5f43144aca5b418929fd43119e2dfc5acaf7743"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"0c9045e87bd4849fe0494eb1934a71970e1aae79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0bd9a83e_f8e43527","updated":"2026-05-13 02:40:17.000000000","message":"recheck did this run during the tempest breakage?","commit_id":"b5f43144aca5b418929fd43119e2dfc5acaf7743"}],"tools/vnc-container/bin/start-x11vnc.py":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f3d6dbf789ec80b37e0798cf997ad361781214c","unresolved":true,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"EXTENSION_PATH \u003d os.environ[\u0027EXTENSION_PATH\u0027]"},{"line_number":28,"context_line":"APP_INFO \u003d os.environ.get(\u0027APP_INFO\u0027, \u0027{}\u0027)"},{"line_number":29,"context_line":"APP \u003d os.environ.get(\u0027APP\u0027, \u0027fake\u0027)"},{"line_number":30,"context_line":"READ_ONLY \u003d os.environ.get(\u0027READ_ONLY\u0027, \u0027False\u0027)"},{"line_number":31,"context_line":"DISPLAY_WIDTH \u003d os.environ.get(\u0027DISPLAY_WIDTH\u0027, \u00271280\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"cc0aea4d_9dfed495","line":28,"updated":"2026-05-06 01:56:36.000000000","message":"```suggestion\nAPP_INFO \u003d os.environ.get(\u0027APP_INFO\u0027) or \u0027{}\u0027\n```","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4da472caec53e570706da78abd83b856d55b4c99","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"EXTENSION_PATH \u003d os.environ[\u0027EXTENSION_PATH\u0027]"},{"line_number":28,"context_line":"APP_INFO \u003d os.environ.get(\u0027APP_INFO\u0027, \u0027{}\u0027)"},{"line_number":29,"context_line":"APP \u003d os.environ.get(\u0027APP\u0027, \u0027fake\u0027)"},{"line_number":30,"context_line":"READ_ONLY \u003d os.environ.get(\u0027READ_ONLY\u0027, \u0027False\u0027)"},{"line_number":31,"context_line":"DISPLAY_WIDTH \u003d os.environ.get(\u0027DISPLAY_WIDTH\u0027, \u00271280\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"10d0f095_15559765","line":28,"in_reply_to":"cc0aea4d_9dfed495","updated":"2026-05-06 05:14:59.000000000","message":"Done","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f3d6dbf789ec80b37e0798cf997ad361781214c","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"EXTENSION_PATH \u003d os.environ[\u0027EXTENSION_PATH\u0027]"},{"line_number":28,"context_line":"APP_INFO \u003d os.environ.get(\u0027APP_INFO\u0027, \u0027{}\u0027)"},{"line_number":29,"context_line":"APP \u003d os.environ.get(\u0027APP\u0027, \u0027fake\u0027)"},{"line_number":30,"context_line":"READ_ONLY \u003d os.environ.get(\u0027READ_ONLY\u0027, \u0027False\u0027)"},{"line_number":31,"context_line":"DISPLAY_WIDTH \u003d os.environ.get(\u0027DISPLAY_WIDTH\u0027, \u00271280\u0027)"},{"line_number":32,"context_line":"DISPLAY_HEIGHT \u003d os.environ.get(\u0027DISPLAY_HEIGHT\u0027, \u0027960\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"902e5a07_538aff41","line":29,"updated":"2026-05-06 01:56:36.000000000","message":"```suggestion\nAPP \u003d os.environ.get(\u0027APP\u0027) or \u0027fake\u0027\n```","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4da472caec53e570706da78abd83b856d55b4c99","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"EXTENSION_PATH \u003d os.environ[\u0027EXTENSION_PATH\u0027]"},{"line_number":28,"context_line":"APP_INFO \u003d os.environ.get(\u0027APP_INFO\u0027, \u0027{}\u0027)"},{"line_number":29,"context_line":"APP \u003d os.environ.get(\u0027APP\u0027, \u0027fake\u0027)"},{"line_number":30,"context_line":"READ_ONLY \u003d os.environ.get(\u0027READ_ONLY\u0027, \u0027False\u0027)"},{"line_number":31,"context_line":"DISPLAY_WIDTH \u003d os.environ.get(\u0027DISPLAY_WIDTH\u0027, \u00271280\u0027)"},{"line_number":32,"context_line":"DISPLAY_HEIGHT \u003d os.environ.get(\u0027DISPLAY_HEIGHT\u0027, \u0027960\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fce3ab5_e69f5943","line":29,"in_reply_to":"902e5a07_538aff41","updated":"2026-05-06 05:14:59.000000000","message":"Done","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f3d6dbf789ec80b37e0798cf997ad361781214c","unresolved":true,"context_lines":[{"line_number":30,"context_line":"READ_ONLY \u003d os.environ.get(\u0027READ_ONLY\u0027, \u0027False\u0027)"},{"line_number":31,"context_line":"DISPLAY_WIDTH \u003d os.environ.get(\u0027DISPLAY_WIDTH\u0027, \u00271280\u0027)"},{"line_number":32,"context_line":"DISPLAY_HEIGHT \u003d os.environ.get(\u0027DISPLAY_HEIGHT\u0027, \u0027960\u0027)"},{"line_number":33,"context_line":"FIREFOX \u003d os.environ.get(\u0027FIREFOX\u0027, \u0027firefox\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"REDFISH_SUPPORTED \u003d {\u0027Dell\u0027, \u0027Hpe\u0027, \u0027Supermicro\u0027}"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"95b7864f_7287dbbf","line":33,"updated":"2026-05-06 01:56:36.000000000","message":"use the or pattern for the rest to cover the environment variable set but empty","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4da472caec53e570706da78abd83b856d55b4c99","unresolved":false,"context_lines":[{"line_number":30,"context_line":"READ_ONLY \u003d os.environ.get(\u0027READ_ONLY\u0027, \u0027False\u0027)"},{"line_number":31,"context_line":"DISPLAY_WIDTH \u003d os.environ.get(\u0027DISPLAY_WIDTH\u0027, \u00271280\u0027)"},{"line_number":32,"context_line":"DISPLAY_HEIGHT \u003d os.environ.get(\u0027DISPLAY_HEIGHT\u0027, \u0027960\u0027)"},{"line_number":33,"context_line":"FIREFOX \u003d os.environ.get(\u0027FIREFOX\u0027, \u0027firefox\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"REDFISH_SUPPORTED \u003d {\u0027Dell\u0027, \u0027Hpe\u0027, \u0027Supermicro\u0027}"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a0700587_0287a1e2","line":33,"in_reply_to":"95b7864f_7287dbbf","updated":"2026-05-06 05:14:59.000000000","message":"Done","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f3d6dbf789ec80b37e0798cf997ad361781214c","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        return \u0027fake\u0027"},{"line_number":90,"context_line":"    if app_name \u003d\u003d \u0027redfish-graphical\u0027:"},{"line_number":91,"context_line":"        url \u003d app_info[\u0027address\u0027] + app_info.get(\u0027root_prefix\u0027, \u0027/redfish/v1\u0027)"},{"line_number":92,"context_line":"        verify \u003d app_info.get(\u0027verify_ca\u0027, True)"},{"line_number":93,"context_line":"        r \u003d requests.get(url, verify\u003dverify, timeout\u003d60).json()"},{"line_number":94,"context_line":"        oem \u003d \u0027,\u0027.join(r[\u0027Oem\u0027].keys())"},{"line_number":95,"context_line":"        if oem in REDFISH_SUPPORTED:"}],"source_content_type":"text/x-python","patch_set":1,"id":"102f27e3_94a814b7","line":92,"updated":"2026-05-06 01:56:36.000000000","message":"```suggestion\n        verify \u003d app_info.get(\u0027verify_ca\u0027) or True\n```\n\nLean towards verify if we got a bad dict.","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4da472caec53e570706da78abd83b856d55b4c99","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return \u0027fake\u0027"},{"line_number":90,"context_line":"    if app_name \u003d\u003d \u0027redfish-graphical\u0027:"},{"line_number":91,"context_line":"        url \u003d app_info[\u0027address\u0027] + app_info.get(\u0027root_prefix\u0027, \u0027/redfish/v1\u0027)"},{"line_number":92,"context_line":"        verify \u003d app_info.get(\u0027verify_ca\u0027, True)"},{"line_number":93,"context_line":"        r \u003d requests.get(url, verify\u003dverify, timeout\u003d60).json()"},{"line_number":94,"context_line":"        oem \u003d \u0027,\u0027.join(r[\u0027Oem\u0027].keys())"},{"line_number":95,"context_line":"        if oem in REDFISH_SUPPORTED:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ea5e76c3_82b88f0a","line":92,"in_reply_to":"102f27e3_94a814b7","updated":"2026-05-06 05:14:59.000000000","message":"Done","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2f3d6dbf789ec80b37e0798cf997ad361781214c","unresolved":true,"context_lines":[{"line_number":252,"context_line":"    try:"},{"line_number":253,"context_line":"        app_name \u003d discover_app(APP, app_info)"},{"line_number":254,"context_line":"    except Exception as e:"},{"line_number":255,"context_line":"        error \u003d urllib.parse.quote(str(e))"},{"line_number":256,"context_line":"        app_name \u003d \u0027error\u0027"},{"line_number":257,"context_line":"        LOG.error(\u0027App discovery failed: %s\u0027, e)"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"57184896_fca73679","line":255,"updated":"2026-05-06 01:56:36.000000000","message":"Not exported directly. Need to from urllib import parse.","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4da472caec53e570706da78abd83b856d55b4c99","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    try:"},{"line_number":253,"context_line":"        app_name \u003d discover_app(APP, app_info)"},{"line_number":254,"context_line":"    except Exception as e:"},{"line_number":255,"context_line":"        error \u003d urllib.parse.quote(str(e))"},{"line_number":256,"context_line":"        app_name \u003d \u0027error\u0027"},{"line_number":257,"context_line":"        LOG.error(\u0027App discovery failed: %s\u0027, e)"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9d674393_cc8b2cb4","line":255,"in_reply_to":"57184896_fca73679","updated":"2026-05-06 05:14:59.000000000","message":"Done","commit_id":"7e8421acb12f0ee9575f5a1039518af9a9f4e5be"},{"author":{"_account_id":15519,"name":"Iury Gregory Melo Ferreira","display_name":"Iury Gregory","email":"iurygregory@gmail.com","username":"iurygregory"},"change_message_id":"a48d9aec0074fab438c5142477ab202ce33e0685","unresolved":true,"context_lines":[{"line_number":202,"context_line":"    The browser extension cannot fetch file:// URLs from its background"},{"line_number":203,"context_line":"    script, so shutdown state is communicated over HTTP instead."},{"line_number":204,"context_line":"    \"\"\""},{"line_number":205,"context_line":"    server \u003d http.server.HTTPServer((\u0027127.0.0.1\u0027, 8888), ShutdownHandler)"},{"line_number":206,"context_line":"    thread \u003d threading.Thread(target\u003dserver.serve_forever, daemon\u003dTrue)"},{"line_number":207,"context_line":"    thread.start()"},{"line_number":208,"context_line":"    LOG.info(\u0027Shutdown HTTP server listening on port 8888\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d4d383ab_49b5cb39","line":205,"updated":"2026-05-15 00:43:53.000000000","message":"we will always be default to 127.0.0.1 and port 8888?","commit_id":"b5f43144aca5b418929fd43119e2dfc5acaf7743"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0d0e6fd0fe2ec343369bb42c8b09d95aa65f74a5","unresolved":true,"context_lines":[{"line_number":202,"context_line":"    The browser extension cannot fetch file:// URLs from its background"},{"line_number":203,"context_line":"    script, so shutdown state is communicated over HTTP instead."},{"line_number":204,"context_line":"    \"\"\""},{"line_number":205,"context_line":"    server \u003d http.server.HTTPServer((\u0027127.0.0.1\u0027, 8888), ShutdownHandler)"},{"line_number":206,"context_line":"    thread \u003d threading.Thread(target\u003dserver.serve_forever, daemon\u003dTrue)"},{"line_number":207,"context_line":"    thread.start()"},{"line_number":208,"context_line":"    LOG.info(\u0027Shutdown HTTP server listening on port 8888\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"465b2fd8_4bcaf1b2","line":205,"in_reply_to":"d4d383ab_49b5cb39","updated":"2026-05-15 03:02:47.000000000","message":"Yes, this runs inside the container so there will not be a conflict and this server will not be exposed to the host.","commit_id":"b5f43144aca5b418929fd43119e2dfc5acaf7743"}],"tools/vnc-container/extension/background.js":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"39741396aa28e3ed0c1a1376d286beea950dd878","unresolved":true,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"/**"},{"line_number":3,"context_line":" * Background script that watches for a shutdown signal."},{"line_number":4,"context_line":" *"},{"line_number":5,"context_line":" * Polls the container\u0027s HTTP server for a shutdown request. When"}],"source_content_type":"text/javascript","patch_set":3,"id":"5495d5cf_f15c04ea","line":2,"updated":"2026-05-15 13:50:28.000000000","message":"nit: likely also should have the apache2 license here ;)","commit_id":"b5f43144aca5b418929fd43119e2dfc5acaf7743"}]}
