)]}'
{"osbase/bringup/bringup.go":[{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9628109c5ff779232f8ee490cca6b268a987ff","unresolved":true,"context_lines":[{"line_number":89,"context_line":"\t\tsupervisorOptions \u003d append(supervisorOptions, supervisor.WithMetrics(m))"},{"line_number":90,"context_line":"\t}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"\t// Don\u0027t reschedule the root runnable..."},{"line_number":93,"context_line":"\tsupervisor.New(sCtx, func(ctx context.Context) (err error) {"},{"line_number":94,"context_line":"\t\tdefer func() {"},{"line_number":95,"context_line":"\t\t\tif r :\u003d recover(); r !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"7c19c4f0_c38c099b","line":92,"range":{"start_line":92,"start_character":1,"end_line":92,"end_character":41},"updated":"2024-12-16 10:50:50.000000000","message":"If r returned nil without doing SignalDone, then this will result in the root runnable restarting, which is not supposed to happen. I suggest to fix it by adding this:\n\n```go\n// outside the function:\nvar started atomic.Bool\n\n// start of the function:\nif started.Swap(true) {\n  err \u003d fmt.Errorf(\"root runnable restarted\")\n  cancel(err)\n  return\n}\n```","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"89b23f2855b5d9b7aa22656fb9f8d984032ca55d","unresolved":false,"context_lines":[{"line_number":89,"context_line":"\t\tsupervisorOptions \u003d append(supervisorOptions, supervisor.WithMetrics(m))"},{"line_number":90,"context_line":"\t}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"\t// Don\u0027t reschedule the root runnable..."},{"line_number":93,"context_line":"\tsupervisor.New(sCtx, func(ctx context.Context) (err error) {"},{"line_number":94,"context_line":"\t\tdefer func() {"},{"line_number":95,"context_line":"\t\t\tif r :\u003d recover(); r !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"8240fe39_ce669842","line":92,"range":{"start_line":92,"start_character":1,"end_line":92,"end_character":41},"in_reply_to":"02ec805e_4294eca9","updated":"2024-12-17 23:02:12.000000000","message":"Done","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a878dd5816ec6255f333be6c58151a276641c740","unresolved":true,"context_lines":[{"line_number":89,"context_line":"\t\tsupervisorOptions \u003d append(supervisorOptions, supervisor.WithMetrics(m))"},{"line_number":90,"context_line":"\t}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"\t// Don\u0027t reschedule the root runnable..."},{"line_number":93,"context_line":"\tsupervisor.New(sCtx, func(ctx context.Context) (err error) {"},{"line_number":94,"context_line":"\t\tdefer func() {"},{"line_number":95,"context_line":"\t\t\tif r :\u003d recover(); r !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"920ab714_d266da77","line":92,"range":{"start_line":92,"start_character":1,"end_line":92,"end_character":41},"in_reply_to":"7c19c4f0_c38c099b","updated":"2024-12-16 12:29:59.000000000","message":"I still don\u0027t know if I want to get it rescheduled or not. I think it should be able to do a \"return nil\". Maybe we should do the healthy/Done calls? Alternatively we dont allow returning it and force all runnables to end in a select{}. Tbh not sure what the better option would be.","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"ba1ce9a9de45370ef03afa2225526ae5eafccea6","unresolved":true,"context_lines":[{"line_number":89,"context_line":"\t\tsupervisorOptions \u003d append(supervisorOptions, supervisor.WithMetrics(m))"},{"line_number":90,"context_line":"\t}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"\t// Don\u0027t reschedule the root runnable..."},{"line_number":93,"context_line":"\tsupervisor.New(sCtx, func(ctx context.Context) (err error) {"},{"line_number":94,"context_line":"\t\tdefer func() {"},{"line_number":95,"context_line":"\t\t\tif r :\u003d recover(); r !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"02ec805e_4294eca9","line":92,"range":{"start_line":92,"start_character":1,"end_line":92,"end_character":41},"in_reply_to":"920ab714_d266da77","updated":"2024-12-16 12:49:24.000000000","message":"The root runnable generally does some initialization steps which can or should not be repeated, so I think it\u0027s fine to never restart just the root runnable, and instead reboot the machine.\n\nIf the runnable does call SignalDone and returns nil, the runnable won\u0027t be restarted, so this case already works. My comment was only about catching the case where nil is returned without calling SignalDone.","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9628109c5ff779232f8ee490cca6b268a987ff","unresolved":true,"context_lines":[{"line_number":189,"context_line":"\t\tdir   string"},{"line_number":190,"context_line":"\t\tfs    string"},{"line_number":191,"context_line":"\t\tflags uintptr"},{"line_number":192,"context_line":"\t\tdata  string"},{"line_number":193,"context_line":"\t}{"},{"line_number":194,"context_line":"\t\t{dir: \"/sys\", fs: \"sysfs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":195,"context_line":"\t\t{dir: \"/sys/kernel/tracing\", fs: \"tracefs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"}],"source_content_type":"text/x-go","patch_set":2,"id":"c06a4977_b9e5f5f1","line":192,"range":{"start_line":192,"start_character":2,"end_line":192,"end_character":6},"updated":"2024-12-16 10:50:50.000000000","message":"data is unused. It looks like it was intended to add this to mkdirAndMount.","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"89b23f2855b5d9b7aa22656fb9f8d984032ca55d","unresolved":false,"context_lines":[{"line_number":189,"context_line":"\t\tdir   string"},{"line_number":190,"context_line":"\t\tfs    string"},{"line_number":191,"context_line":"\t\tflags uintptr"},{"line_number":192,"context_line":"\t\tdata  string"},{"line_number":193,"context_line":"\t}{"},{"line_number":194,"context_line":"\t\t{dir: \"/sys\", fs: \"sysfs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":195,"context_line":"\t\t{dir: \"/sys/kernel/tracing\", fs: \"tracefs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"}],"source_content_type":"text/x-go","patch_set":2,"id":"cc27d2fb_7c9c4ff3","line":192,"range":{"start_line":192,"start_character":2,"end_line":192,"end_character":6},"in_reply_to":"c06a4977_b9e5f5f1","updated":"2024-12-17 23:02:12.000000000","message":"Done","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"45c68990ee99009dbeb678b27e4503d91ac61409","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"type Config struct {"},{"line_number":32,"context_line":"\tLogTree    LogTreeConfig"},{"line_number":33,"context_line":"\tSupervisor SupervisorConfig"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"type LogTreeConfig struct {"}],"source_content_type":"text/x-go","patch_set":3,"id":"296a270a_62012d04","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":28},"updated":"2024-12-18 11:04:08.000000000","message":"Why not pass opts directly?\n```suggestion\n\tSupervisor []supervisor.SupervisorOpt\n```","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"66198339c2b73bace98c901e81c73c62212e08b7","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"type Config struct {"},{"line_number":32,"context_line":"\tLogTree    LogTreeConfig"},{"line_number":33,"context_line":"\tSupervisor SupervisorConfig"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"type LogTreeConfig struct {"}],"source_content_type":"text/x-go","patch_set":3,"id":"d3018ede_1949d01d","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":28},"in_reply_to":"296a270a_62012d04","updated":"2024-12-23 23:55:41.000000000","message":"You could enable WithPropagatePanic. And I don\u0027t see any benefit in it","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e8ce350d05829582d360a9b1fcdb3f12a871583f","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"type Config struct {"},{"line_number":32,"context_line":"\tLogTree    LogTreeConfig"},{"line_number":33,"context_line":"\tSupervisor SupervisorConfig"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"type LogTreeConfig struct {"}],"source_content_type":"text/x-go","patch_set":3,"id":"e5ef9563_cfb4f00b","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":28},"in_reply_to":"d3018ede_1949d01d","updated":"2025-01-07 00:45:11.000000000","message":"Also we would have to prevent usages of WithLogtree, which would break things","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8a63e3ed8160bfe8e5cb107dbf8b976692f6bcc4","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"type Config struct {"},{"line_number":32,"context_line":"\tLogTree    LogTreeConfig"},{"line_number":33,"context_line":"\tSupervisor SupervisorConfig"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"type LogTreeConfig struct {"}],"source_content_type":"text/x-go","patch_set":3,"id":"71312b8c_bbee56cd","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":28},"in_reply_to":"e5ef9563_cfb4f00b","updated":"2025-01-13 14:12:17.000000000","message":"The benefit is that we don\u0027t need to handle every current and future supervisor option separately. And I would add the bringup WithExistingLogtree last, which overwrites any previous usages. But it\u0027s fine to leave it as is.","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"45c68990ee99009dbeb678b27e4503d91ac61409","unresolved":true,"context_lines":[{"line_number":33,"context_line":"\tSupervisor SupervisorConfig"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"type LogTreeConfig struct {"},{"line_number":37,"context_line":"\tShortenDictionary logtree.ShortenDictionary"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"\t// Filter is used to filter out some uselessly verbose logs from the"}],"source_content_type":"text/x-go","patch_set":3,"id":"638b14d1_f2cbbc82","line":36,"range":{"start_line":36,"start_character":5,"end_line":36,"end_character":18},"updated":"2024-12-18 11:04:08.000000000","message":"Maybe this should be called ConsoleConfig instead.","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"66198339c2b73bace98c901e81c73c62212e08b7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"\tSupervisor SupervisorConfig"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"type LogTreeConfig struct {"},{"line_number":37,"context_line":"\tShortenDictionary logtree.ShortenDictionary"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"\t// Filter is used to filter out some uselessly verbose logs from the"}],"source_content_type":"text/x-go","patch_set":3,"id":"cf49359f_044ad599","line":36,"range":{"start_line":36,"start_character":5,"end_line":36,"end_character":18},"in_reply_to":"638b14d1_f2cbbc82","updated":"2024-12-23 23:55:41.000000000","message":"Acknowledged","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"45c68990ee99009dbeb678b27e4503d91ac61409","unresolved":true,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"\t// Wait for final logs to flush to console..."},{"line_number":140,"context_line":"\ttime.Sleep(5 * time.Second)"},{"line_number":141,"context_line":"\tunix.Reboot(unix.LINUX_REBOOT_CMD_RESTART)"},{"line_number":142,"context_line":"}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"func rewireStdIO(lt *logtree.LogTree) error {"}],"source_content_type":"text/x-go","patch_set":3,"id":"66183bf0_6b238f47","line":141,"range":{"start_line":141,"start_character":1,"end_line":141,"end_character":43},"updated":"2024-12-18 11:04:08.000000000","message":"Add `unix.Sync()` before this.","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"66198339c2b73bace98c901e81c73c62212e08b7","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"\t// Wait for final logs to flush to console..."},{"line_number":140,"context_line":"\ttime.Sleep(5 * time.Second)"},{"line_number":141,"context_line":"\tunix.Reboot(unix.LINUX_REBOOT_CMD_RESTART)"},{"line_number":142,"context_line":"}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"func rewireStdIO(lt *logtree.LogTree) error {"}],"source_content_type":"text/x-go","patch_set":3,"id":"fb815382_bd56e6dc","line":141,"range":{"start_line":141,"start_character":1,"end_line":141,"end_character":43},"in_reply_to":"66183bf0_6b238f47","updated":"2024-12-23 23:55:41.000000000","message":"Done","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"45c68990ee99009dbeb678b27e4503d91ac61409","unresolved":true,"context_lines":[{"line_number":156,"context_line":"\tif err !\u003d nil {"},{"line_number":157,"context_line":"\t\treturn fmt.Errorf(\"creating pipe for %q: %w\", dn, err)"},{"line_number":158,"context_line":"\t}"},{"line_number":159,"context_line":"\t// We don\u0027t need to close this pipe since we need it for the entire"},{"line_number":160,"context_line":"\t// process lifetime."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"\tl :\u003d lt.MustLeveledFor(dn)"}],"source_content_type":"text/x-go","patch_set":3,"id":"bd433460_2f1bdcbf","line":159,"range":{"start_line":159,"start_character":4,"end_line":159,"end_character":36},"updated":"2024-12-18 11:04:08.000000000","message":"You can actually `defer w.Close()` here, because w can be closed after copying it over f.","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"66198339c2b73bace98c901e81c73c62212e08b7","unresolved":false,"context_lines":[{"line_number":156,"context_line":"\tif err !\u003d nil {"},{"line_number":157,"context_line":"\t\treturn fmt.Errorf(\"creating pipe for %q: %w\", dn, err)"},{"line_number":158,"context_line":"\t}"},{"line_number":159,"context_line":"\t// We don\u0027t need to close this pipe since we need it for the entire"},{"line_number":160,"context_line":"\t// process lifetime."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"\tl :\u003d lt.MustLeveledFor(dn)"}],"source_content_type":"text/x-go","patch_set":3,"id":"aab92673_d59b965e","line":159,"range":{"start_line":159,"start_character":4,"end_line":159,"end_character":36},"in_reply_to":"bd433460_2f1bdcbf","updated":"2024-12-23 23:55:41.000000000","message":"Acknowledged","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"45c68990ee99009dbeb678b27e4503d91ac61409","unresolved":true,"context_lines":[{"line_number":172,"context_line":"\t\t}"},{"line_number":173,"context_line":"\t}()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"\tif err :\u003d syscall.Dup2(int(w.Fd()), int(f.Fd())); err !\u003d nil {"},{"line_number":176,"context_line":"\t\treturn fmt.Errorf(\"failed to duplicate file descriptor %q: %w\", dn, err)"},{"line_number":177,"context_line":"\t}"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"83f8ef6e_bebfcf76","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":47},"updated":"2024-12-18 11:04:08.000000000","message":"I think it would be better to use f.SyscallConn() here, because f.Fd() sets f to blocking mode, which may have unintended effects.","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8a63e3ed8160bfe8e5cb107dbf8b976692f6bcc4","unresolved":true,"context_lines":[{"line_number":172,"context_line":"\t\t}"},{"line_number":173,"context_line":"\t}()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"\tif err :\u003d syscall.Dup2(int(w.Fd()), int(f.Fd())); err !\u003d nil {"},{"line_number":176,"context_line":"\t\treturn fmt.Errorf(\"failed to duplicate file descriptor %q: %w\", dn, err)"},{"line_number":177,"context_line":"\t}"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"e6089aa5_ae283f7c","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":47},"in_reply_to":"467a5971_c1975bdf","updated":"2025-01-13 14:12:17.000000000","message":"It would look like the following. This is verbose, but at least I\u0027m quite certain that it\u0027s correct and has no unintended side effects.\n```\n\twConn, err :\u003d w.SyscallConn()\n\tif err !\u003d nil {\n\t\treturn fmt.Errorf(\"error getting SyscallConn for %q: %w\", dn, err)\n\t}\n\tfConn, err :\u003d f.SyscallConn()\n\tif err !\u003d nil {\n\t\treturn fmt.Errorf(\"error getting SyscallConn for %q: %w\", dn, err)\n\t}\n\tvar wErr, fErr error\n\twErr \u003d wConn.Control(func(wFd uintptr) {\n\t\tfErr \u003d fConn.Control(func(fFd uintptr) {\n\t\t\terr \u003d syscall.Dup2(int(wFd), int(fFd))\n\t\t})\n\t})\n\terr \u003d errors.Join(wErr, fErr, err)\n\tif err !\u003d nil {\n\t\treturn fmt.Errorf(\"failed to duplicate file descriptor %q: %w\", dn, err)\n\t}\n```","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"66198339c2b73bace98c901e81c73c62212e08b7","unresolved":true,"context_lines":[{"line_number":172,"context_line":"\t\t}"},{"line_number":173,"context_line":"\t}()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"\tif err :\u003d syscall.Dup2(int(w.Fd()), int(f.Fd())); err !\u003d nil {"},{"line_number":176,"context_line":"\t\treturn fmt.Errorf(\"failed to duplicate file descriptor %q: %w\", dn, err)"},{"line_number":177,"context_line":"\t}"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"467a5971_c1975bdf","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":47},"in_reply_to":"83f8ef6e_bebfcf76","updated":"2024-12-23 23:55:41.000000000","message":"SyscallConn doesn\u0027t return the fd, instead it returns a wrapper struct. What do you mean?","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c76bb2bf3a96b035068ddedc80aac2e606f9dfed","unresolved":false,"context_lines":[{"line_number":172,"context_line":"\t\t}"},{"line_number":173,"context_line":"\t}()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"\tif err :\u003d syscall.Dup2(int(w.Fd()), int(f.Fd())); err !\u003d nil {"},{"line_number":176,"context_line":"\t\treturn fmt.Errorf(\"failed to duplicate file descriptor %q: %w\", dn, err)"},{"line_number":177,"context_line":"\t}"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"bdc32ded_3e8e83d5","line":175,"range":{"start_line":175,"start_character":41,"end_line":175,"end_character":47},"in_reply_to":"e6089aa5_ae283f7c","updated":"2025-01-13 14:15:24.000000000","message":"Acknowledged","commit_id":"1f0e25ce6ac82d71219278aa1544ab6cf1db1d80"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"f1e9bca0593f1a2d2d88781cfff71c1342ba2b3d","unresolved":true,"context_lines":[{"line_number":187,"context_line":"\tvar wErr, fErr error"},{"line_number":188,"context_line":"\twErr \u003d wConn.Control(func(wFd uintptr) {"},{"line_number":189,"context_line":"\t\tfErr \u003d fConn.Control(func(fFd uintptr) {"},{"line_number":190,"context_line":"\t\t\terr \u003d syscall.Dup3(int(wFd), int(fFd), syscall.O_CLOEXEC)"},{"line_number":191,"context_line":"\t\t})"},{"line_number":192,"context_line":"\t})"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-go","patch_set":10,"id":"6c6f0d9c_17c7f752","line":190,"range":{"start_line":190,"start_character":42,"end_line":190,"end_character":59},"updated":"2025-01-27 13:13:14.000000000","message":"Why did you add CLOEXEC here? I know that for most FDs, you want to set CLOEXEC. However, I think that FDs 0, 1, 2 are an exception to this rule and you probably don\u0027t want to set CLOEXEC for those. Programs generally expect these three FDs to be already open when they start, and will write logs there. If this expectation is not met, then it could happen that some unfortunate opened file ends up at one of those FDs and logs are written to it.","commit_id":"38a8bc02a61fcb852b0f04009b2092c3016fe6b0"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"edf77bc0386f399b44882367cbfe5e20183a5965","unresolved":false,"context_lines":[{"line_number":187,"context_line":"\tvar wErr, fErr error"},{"line_number":188,"context_line":"\twErr \u003d wConn.Control(func(wFd uintptr) {"},{"line_number":189,"context_line":"\t\tfErr \u003d fConn.Control(func(fFd uintptr) {"},{"line_number":190,"context_line":"\t\t\terr \u003d syscall.Dup3(int(wFd), int(fFd), syscall.O_CLOEXEC)"},{"line_number":191,"context_line":"\t\t})"},{"line_number":192,"context_line":"\t})"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-go","patch_set":10,"id":"8bf9a612_89002e02","line":190,"range":{"start_line":190,"start_character":42,"end_line":190,"end_character":59},"in_reply_to":"6c6f0d9c_17c7f752","updated":"2025-01-27 15:21:56.000000000","message":"I copied this behavior from the debug.SetCrashOutput while debugging. Rollbacking it to the original version with Dup2 as we don\u0027t have the issues that the runtime would have with unknown fds","commit_id":"38a8bc02a61fcb852b0f04009b2092c3016fe6b0"},{"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":"d87eb7bebab7b139d6ce512bab9d4827bbcf1120","unresolved":true,"context_lines":[{"line_number":220,"context_line":"\t\tflags uintptr"},{"line_number":221,"context_line":"\t\tdata  string"},{"line_number":222,"context_line":"\t}{"},{"line_number":223,"context_line":"\t\t{dir: \"/sys\", fs: \"sysfs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":224,"context_line":"\t\t{dir: \"/sys/kernel/tracing\", fs: \"tracefs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":225,"context_line":"\t\t{dir: \"/sys/fs/pstore\", fs: \"pstore\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":226,"context_line":"\t\t{dir: \"/proc\", fs: \"proc\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"}],"source_content_type":"text/x-go","patch_set":10,"id":"32f6646e_b3517a1f","line":223,"range":{"start_line":223,"start_character":3,"end_line":223,"end_character":8},"updated":"2025-01-27 11:55:16.000000000","message":"The docs for these is just above the table. These do not need to use named fields.","commit_id":"38a8bc02a61fcb852b0f04009b2092c3016fe6b0"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"edf77bc0386f399b44882367cbfe5e20183a5965","unresolved":false,"context_lines":[{"line_number":220,"context_line":"\t\tflags uintptr"},{"line_number":221,"context_line":"\t\tdata  string"},{"line_number":222,"context_line":"\t}{"},{"line_number":223,"context_line":"\t\t{dir: \"/sys\", fs: \"sysfs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":224,"context_line":"\t\t{dir: \"/sys/kernel/tracing\", fs: \"tracefs\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":225,"context_line":"\t\t{dir: \"/sys/fs/pstore\", fs: \"pstore\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"},{"line_number":226,"context_line":"\t\t{dir: \"/proc\", fs: \"proc\", flags: unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV},"}],"source_content_type":"text/x-go","patch_set":10,"id":"572a20cd_2f50b591","line":223,"range":{"start_line":223,"start_character":3,"end_line":223,"end_character":8},"in_reply_to":"32f6646e_b3517a1f","updated":"2025-01-27 15:21:56.000000000","message":"We have to set the data field to an empty string for all except the cgroup mount, else this wouldn\u0027t be valid. Done.","commit_id":"38a8bc02a61fcb852b0f04009b2092c3016fe6b0"},{"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":"d87eb7bebab7b139d6ce512bab9d4827bbcf1120","unresolved":true,"context_lines":[{"line_number":259,"context_line":"\tconsoles :\u003d map[string]int{"},{"line_number":260,"context_line":"\t\t\"tty0\":   defaultMaxWidth,"},{"line_number":261,"context_line":"\t\t\"ttyS0\":  defaultMaxWidth,"},{"line_number":262,"context_line":"\t\t\"stdout\": defaultMaxWidth,"},{"line_number":263,"context_line":"\t}"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"\t// Parse consoles from the kernel command line."}],"source_content_type":"text/x-go","patch_set":10,"id":"f05088a4_b1218751","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":28},"updated":"2025-01-27 11:55:16.000000000","message":"Won\u0027t that loop needlessly with stdout capture?","commit_id":"38a8bc02a61fcb852b0f04009b2092c3016fe6b0"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"edf77bc0386f399b44882367cbfe5e20183a5965","unresolved":false,"context_lines":[{"line_number":259,"context_line":"\tconsoles :\u003d map[string]int{"},{"line_number":260,"context_line":"\t\t\"tty0\":   defaultMaxWidth,"},{"line_number":261,"context_line":"\t\t\"ttyS0\":  defaultMaxWidth,"},{"line_number":262,"context_line":"\t\t\"stdout\": defaultMaxWidth,"},{"line_number":263,"context_line":"\t}"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"\t// Parse consoles from the kernel command line."}],"source_content_type":"text/x-go","patch_set":10,"id":"ccc5eee5_9055e945","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":28},"in_reply_to":"95d485c2_f0a43dbf","updated":"2025-01-27 15:21:56.000000000","message":"This was for debugging only anyway and I forgot to remove it again.","commit_id":"38a8bc02a61fcb852b0f04009b2092c3016fe6b0"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"f1e9bca0593f1a2d2d88781cfff71c1342ba2b3d","unresolved":true,"context_lines":[{"line_number":259,"context_line":"\tconsoles :\u003d map[string]int{"},{"line_number":260,"context_line":"\t\t\"tty0\":   defaultMaxWidth,"},{"line_number":261,"context_line":"\t\t\"ttyS0\":  defaultMaxWidth,"},{"line_number":262,"context_line":"\t\t\"stdout\": defaultMaxWidth,"},{"line_number":263,"context_line":"\t}"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"\t// Parse consoles from the kernel command line."}],"source_content_type":"text/x-go","patch_set":10,"id":"95d485c2_f0a43dbf","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":28},"in_reply_to":"f05088a4_b1218751","updated":"2025-01-27 13:13:14.000000000","message":"Actually, it looks like `/dev/stdout` does not even exist. If it would exist, it would be a symlink to `/proc/self/fd/1`, and before the stdio rewiring, `/proc/self/fd/1` is a symlink to `/dev/console`. I think this line can be removed, or possibly replaced with \"console\".","commit_id":"38a8bc02a61fcb852b0f04009b2092c3016fe6b0"}],"osbase/bringup/pstore.go":[{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9628109c5ff779232f8ee490cca6b268a987ff","unresolved":true,"context_lines":[{"line_number":15,"context_line":"\tdumps, err :\u003d pstore.GetKmsgDumps()"},{"line_number":16,"context_line":"\tif err !\u003d nil {"},{"line_number":17,"context_line":"\t\tlogger.Errorf(\"Failed to recover logs from pstore: %v\", err)"},{"line_number":18,"context_line":"\t\treturn nil"},{"line_number":19,"context_line":"\t}"},{"line_number":20,"context_line":"\tfor _, dump :\u003d range dumps {"},{"line_number":21,"context_line":"\t\tlogger.Errorf(\"Recovered log from %v at %v. Reconstructed log follows.\", dump.Reason, dump.OccurredAt)"}],"source_content_type":"text/x-go","patch_set":2,"id":"888feb24_11cca554","line":18,"range":{"start_line":18,"start_character":2,"end_line":18,"end_character":12},"updated":"2024-12-16 10:50:50.000000000","message":"I think this return should be removed. That way, even if reading kmsgs fails, we still read pmsg, clear the pstore (removing any possibly corrupt kmsgs), and do SignalDone (so it does not restart forever).","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a878dd5816ec6255f333be6c58151a276641c740","unresolved":true,"context_lines":[{"line_number":15,"context_line":"\tdumps, err :\u003d pstore.GetKmsgDumps()"},{"line_number":16,"context_line":"\tif err !\u003d nil {"},{"line_number":17,"context_line":"\t\tlogger.Errorf(\"Failed to recover logs from pstore: %v\", err)"},{"line_number":18,"context_line":"\t\treturn nil"},{"line_number":19,"context_line":"\t}"},{"line_number":20,"context_line":"\tfor _, dump :\u003d range dumps {"},{"line_number":21,"context_line":"\t\tlogger.Errorf(\"Recovered log from %v at %v. Reconstructed log follows.\", dump.Reason, dump.OccurredAt)"}],"source_content_type":"text/x-go","patch_set":2,"id":"f091ec8d_d89f9d89","line":18,"range":{"start_line":18,"start_character":2,"end_line":18,"end_character":12},"in_reply_to":"888feb24_11cca554","updated":"2024-12-16 12:29:59.000000000","message":"Yep this code is broken anyway as at least all userspace messages are corrupt when reading them.","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"89b23f2855b5d9b7aa22656fb9f8d984032ca55d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\tdumps, err :\u003d pstore.GetKmsgDumps()"},{"line_number":16,"context_line":"\tif err !\u003d nil {"},{"line_number":17,"context_line":"\t\tlogger.Errorf(\"Failed to recover logs from pstore: %v\", err)"},{"line_number":18,"context_line":"\t\treturn nil"},{"line_number":19,"context_line":"\t}"},{"line_number":20,"context_line":"\tfor _, dump :\u003d range dumps {"},{"line_number":21,"context_line":"\t\tlogger.Errorf(\"Recovered log from %v at %v. Reconstructed log follows.\", dump.Reason, dump.OccurredAt)"}],"source_content_type":"text/x-go","patch_set":2,"id":"a4ce26d1_992ecb7b","line":18,"range":{"start_line":18,"start_character":2,"end_line":18,"end_character":12},"in_reply_to":"ea0dc390_d350f1b7","updated":"2024-12-17 23:02:12.000000000","message":"I would prefer that as we have to fix and move this anyway","commit_id":"375a480464d9d10c399b4f42901c03146060666e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"ba1ce9a9de45370ef03afa2225526ae5eafccea6","unresolved":true,"context_lines":[{"line_number":15,"context_line":"\tdumps, err :\u003d pstore.GetKmsgDumps()"},{"line_number":16,"context_line":"\tif err !\u003d nil {"},{"line_number":17,"context_line":"\t\tlogger.Errorf(\"Failed to recover logs from pstore: %v\", err)"},{"line_number":18,"context_line":"\t\treturn nil"},{"line_number":19,"context_line":"\t}"},{"line_number":20,"context_line":"\tfor _, dump :\u003d range dumps {"},{"line_number":21,"context_line":"\t\tlogger.Errorf(\"Recovered log from %v at %v. Reconstructed log follows.\", dump.Reason, dump.OccurredAt)"}],"source_content_type":"text/x-go","patch_set":2,"id":"ea0dc390_d350f1b7","line":18,"range":{"start_line":18,"start_character":2,"end_line":18,"end_character":12},"in_reply_to":"f091ec8d_d89f9d89","updated":"2024-12-16 12:49:24.000000000","message":"I\u0027m aware this code already existed and you are just moving it around, so we can keep it as is for now and fix it later if you prefer that.","commit_id":"375a480464d9d10c399b4f42901c03146060666e"}]}
