)]}'
{"metropolis/node/BUILD.bazel":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"903e3e1a5dcb461a1601ae8580e38e48f3e4ede2","unresolved":true,"context_lines":[{"line_number":93,"context_line":"efi_unified_kernel_image("},{"line_number":94,"context_line":"    name \u003d \"kernel_efi\","},{"line_number":95,"context_line":"    kernel \u003d \"//third_party/linux\","},{"line_number":96,"context_line":"    os_release \u003d \":os-release-info\","},{"line_number":97,"context_line":")"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"genrule("}],"source_content_type":"text/x-python","patch_set":1,"id":"347b2bc9_9e2e1aad","line":96,"range":{"start_line":96,"start_character":18,"end_line":96,"end_character":34},"updated":"2021-09-30 11:17:05.000000000","message":"I think this file is missing? CI doesn\u0027t work on this change anyway right now because we have to redeploy the builder image, so I can\u0027t tell.\n\n(I\u0027ll bump the CI builder image version in a bit)","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e4f4180e07f8e7f34fc7d27b9c26ed03afa61afe","unresolved":true,"context_lines":[{"line_number":93,"context_line":"efi_unified_kernel_image("},{"line_number":94,"context_line":"    name \u003d \"kernel_efi\","},{"line_number":95,"context_line":"    kernel \u003d \"//third_party/linux\","},{"line_number":96,"context_line":"    os_release \u003d \":os-release-info\","},{"line_number":97,"context_line":")"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"genrule("}],"source_content_type":"text/x-python","patch_set":1,"id":"836b9f58_f51c30cf","line":96,"range":{"start_line":96,"start_character":18,"end_line":96,"end_character":34},"in_reply_to":"347b2bc9_9e2e1aad","updated":"2021-09-30 12:49:55.000000000","message":"This file is generated by Bazel on line 161. This already existed for the rootfs.","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"68260c9446f080ecc8df7e322e95a2c891c02263","unresolved":false,"context_lines":[{"line_number":93,"context_line":"efi_unified_kernel_image("},{"line_number":94,"context_line":"    name \u003d \"kernel_efi\","},{"line_number":95,"context_line":"    kernel \u003d \"//third_party/linux\","},{"line_number":96,"context_line":"    os_release \u003d \":os-release-info\","},{"line_number":97,"context_line":")"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"genrule("}],"source_content_type":"text/x-python","patch_set":1,"id":"b08e1791_045bb1a1","line":96,"range":{"start_line":96,"start_character":18,"end_line":96,"end_character":34},"in_reply_to":"836b9f58_f51c30cf","updated":"2021-10-04 12:50:09.000000000","message":"Ack","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"}],"metropolis/node/build/unifiedefi/defs.bzl":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"903e3e1a5dcb461a1601ae8580e38e48f3e4ede2","unresolved":true,"context_lines":[{"line_number":8,"context_line":"def _efi_unified_kernel_image_impl(ctx):"},{"line_number":9,"context_line":"    out \u003d ctx.actions.declare_file(ctx.attr.name + \".efi\")"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    toolchainInfo \u003d ctx.attr._toolchain[platform_common.ToolchainInfo]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    sections \u003d ["},{"line_number":14,"context_line":"        dict(name \u003d \".linux\", file \u003d ctx.file.kernel, vma \u003d 0x2000000),"}],"source_content_type":"text/x-python","patch_set":1,"id":"f6e3ed3f_230b92a0","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":17},"updated":"2021-09-30 11:17:05.000000000","message":"nit: Python/Starlark style: snake_case toolchain_info.","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e4f4180e07f8e7f34fc7d27b9c26ed03afa61afe","unresolved":false,"context_lines":[{"line_number":8,"context_line":"def _efi_unified_kernel_image_impl(ctx):"},{"line_number":9,"context_line":"    out \u003d ctx.actions.declare_file(ctx.attr.name + \".efi\")"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    toolchainInfo \u003d ctx.attr._toolchain[platform_common.ToolchainInfo]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    sections \u003d ["},{"line_number":14,"context_line":"        dict(name \u003d \".linux\", file \u003d ctx.file.kernel, vma \u003d 0x2000000),"}],"source_content_type":"text/x-python","patch_set":1,"id":"71e728ac_ffccd1c4","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":17},"in_reply_to":"f6e3ed3f_230b92a0","updated":"2021-09-30 12:49:55.000000000","message":"Done","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"903e3e1a5dcb461a1601ae8580e38e48f3e4ede2","unresolved":true,"context_lines":[{"line_number":11,"context_line":"    toolchainInfo \u003d ctx.attr._toolchain[platform_common.ToolchainInfo]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    sections \u003d ["},{"line_number":14,"context_line":"        dict(name \u003d \".linux\", file \u003d ctx.file.kernel, vma \u003d 0x2000000),"},{"line_number":15,"context_line":"    ]"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    if ctx.attr.cmdline !\u003d \"\":"}],"source_content_type":"text/x-python","patch_set":1,"id":"797f4f41_ea0b0b56","line":14,"range":{"start_line":14,"start_character":60,"end_line":14,"end_character":69},"updated":"2021-09-30 11:17:05.000000000","message":"How are these offsets calculated? Do they break if any of the sections/files get too large?","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"68260c9446f080ecc8df7e322e95a2c891c02263","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    toolchainInfo \u003d ctx.attr._toolchain[platform_common.ToolchainInfo]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    sections \u003d ["},{"line_number":14,"context_line":"        dict(name \u003d \".linux\", file \u003d ctx.file.kernel, vma \u003d 0x2000000),"},{"line_number":15,"context_line":"    ]"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    if ctx.attr.cmdline !\u003d \"\":"}],"source_content_type":"text/x-python","patch_set":1,"id":"0fdf6981_fe33f8a4","line":14,"range":{"start_line":14,"start_character":60,"end_line":14,"end_character":69},"in_reply_to":"3a32936e_24903c84","updated":"2021-10-04 12:50:09.000000000","message":"Ack","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e4f4180e07f8e7f34fc7d27b9c26ed03afa61afe","unresolved":true,"context_lines":[{"line_number":11,"context_line":"    toolchainInfo \u003d ctx.attr._toolchain[platform_common.ToolchainInfo]"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    sections \u003d ["},{"line_number":14,"context_line":"        dict(name \u003d \".linux\", file \u003d ctx.file.kernel, vma \u003d 0x2000000),"},{"line_number":15,"context_line":"    ]"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    if ctx.attr.cmdline !\u003d \"\":"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a32936e_24903c84","line":14,"range":{"start_line":14,"start_character":60,"end_line":14,"end_character":69},"in_reply_to":"797f4f41_ea0b0b56","updated":"2021-09-30 12:49:55.000000000","message":"Yes, these will eventually break if things get too large. But they are chosen quite conservatively. Sadly GNU objcopy can\u0027t do memory layouting for PE/COFF and llvm-objcopy cannot be used in any released version. These should be gone once we can switch to LLVM objcopy. There\u0027s a comment in the toolchain about this.\n\nIt will be pretty obvious if this ever happened, the EFI loader will refuse to load the payload.","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"903e3e1a5dcb461a1601ae8580e38e48f3e4ede2","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        inputs \u003d [ctx.file.stub] + [s[\"file\"] for s in sections],"},{"line_number":36,"context_line":"        outputs \u003d [out],"},{"line_number":37,"context_line":"        executable \u003d toolchainInfo.objcopy_executable,"},{"line_number":38,"context_line":"        arguments \u003d [arg for sec in sections for arg in [\"--add-section\", \"{}\u003d{}\".format(sec[\"name\"], sec[\"file\"].path), \"--change-section-vma\", \"{}\u003d{}\".format(sec[\"name\"], sec[\"vma\"])]] + ["},{"line_number":39,"context_line":"            ctx.file.stub.path,"},{"line_number":40,"context_line":"            out.path,"},{"line_number":41,"context_line":"        ],"}],"source_content_type":"text/x-python","patch_set":1,"id":"53c8498c_ac77e90e","line":38,"range":{"start_line":38,"start_character":21,"end_line":38,"end_character":56},"updated":"2021-09-30 11:17:05.000000000","message":"Spell this out explicitly, eg. in a imperative for loop.","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e4f4180e07f8e7f34fc7d27b9c26ed03afa61afe","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        inputs \u003d [ctx.file.stub] + [s[\"file\"] for s in sections],"},{"line_number":36,"context_line":"        outputs \u003d [out],"},{"line_number":37,"context_line":"        executable \u003d toolchainInfo.objcopy_executable,"},{"line_number":38,"context_line":"        arguments \u003d [arg for sec in sections for arg in [\"--add-section\", \"{}\u003d{}\".format(sec[\"name\"], sec[\"file\"].path), \"--change-section-vma\", \"{}\u003d{}\".format(sec[\"name\"], sec[\"vma\"])]] + ["},{"line_number":39,"context_line":"            ctx.file.stub.path,"},{"line_number":40,"context_line":"            out.path,"},{"line_number":41,"context_line":"        ],"}],"source_content_type":"text/x-python","patch_set":1,"id":"63925b63_95c75d3c","line":38,"range":{"start_line":38,"start_character":21,"end_line":38,"end_character":56},"in_reply_to":"53c8498c_ac77e90e","updated":"2021-09-30 12:49:55.000000000","message":"Done","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"903e3e1a5dcb461a1601ae8580e38e48f3e4ede2","unresolved":true,"context_lines":[{"line_number":57,"context_line":"            doc \u003d \"The initramfs to be embedded.\","},{"line_number":58,"context_line":"            allow_single_file \u003d True,"},{"line_number":59,"context_line":"        ),"},{"line_number":60,"context_line":"        \"os_release\": attr.label("},{"line_number":61,"context_line":"            doc \u003d \"\"\""},{"line_number":62,"context_line":"                The os-release file identifying the operating system."},{"line_number":63,"context_line":"                See https://www.freedesktop.org/software/systemd/man/os-release.html for format."}],"source_content_type":"text/x-python","patch_set":1,"id":"86d42e00_299e7154","line":60,"range":{"start_line":60,"start_character":9,"end_line":60,"end_character":19},"updated":"2021-09-30 11:17:05.000000000","message":"Should the rule generate this file based on a freeform dict attribute, or even just based on some assumptions and light attribute tunables?","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e4f4180e07f8e7f34fc7d27b9c26ed03afa61afe","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            doc \u003d \"The initramfs to be embedded.\","},{"line_number":58,"context_line":"            allow_single_file \u003d True,"},{"line_number":59,"context_line":"        ),"},{"line_number":60,"context_line":"        \"os_release\": attr.label("},{"line_number":61,"context_line":"            doc \u003d \"\"\""},{"line_number":62,"context_line":"                The os-release file identifying the operating system."},{"line_number":63,"context_line":"                See https://www.freedesktop.org/software/systemd/man/os-release.html for format."}],"source_content_type":"text/x-python","patch_set":1,"id":"f53d1fe6_d3a2fbc3","line":60,"range":{"start_line":60,"start_character":9,"end_line":60,"end_character":19},"in_reply_to":"86d42e00_299e7154","updated":"2021-09-30 12:49:55.000000000","message":"We already have a rule generating this. This is designed so we can reuse that one.","commit_id":"1d68cd69ae30b8e11249f1a594d6f31f42328e55"}]}
