)]}'
{
  "log": [
    {
      "commit": "901c7326fe067707812757e4e9409f756edf0e37",
      "tree": "f07f9dc363f0448076024ec4217858dcf47bcb88",
      "parents": [
        "3df66ebf2ae75de9e62302332412655e8fb45d04"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jul 13 20:10:37 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Jul 19 11:54:30 2023 +0000"
      },
      "message": "m/p/localregistry: init\n\nAdds the localregistry package, which serves Bazel-built container\nimages via the Docker/OCI V2 registry API.\n\nThis will be used to serve test images instead of preseeding them.\n\nChange-Id: I0c2ceb9a83f807c9c87ab03bc1141ca67cc64268\nReviewed-on: https://review.monogon.dev/c/monogon/+/1926\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "800e7c9514c1ea5aa9267a19217086363d6d8c4d",
      "tree": "3543adb39b0f1ba5d84f651a2840edc885b7dce4",
      "parents": [
        "d1c392a788043f2bd82d936a334bd01e1be97421"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Jul 12 22:37:39 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jul 13 10:23:27 2023 +0000"
      },
      "message": "m/p/tpm: fix garbage when logging PCRs\n\nCasting an int to a string causes it to be interpreted as a byte of an\nUTF-8 string, not converted to the respective UTF-8 character(s).\nUse strconv instead to actually convert the integers to valid UTF-8\ntext.\n\nChange-Id: I4878d9312f2fd2f2401e7fc3ba0e7a69cbca4d9e\nReviewed-on: https://review.monogon.dev/c/monogon/+/1925\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "ca1cff0f214a1ed5ee967d421f5fe1fd5afa756d",
      "tree": "7ea16e63681ad4695f7d7cd1115c0168fc553d4b",
      "parents": [
        "4599aa2dfa42a7b694ad295bc700db03de96d7f5"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Jun 26 17:52:44 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jun 29 10:41:38 2023 +0000"
      },
      "message": "m/p/efivarfs: refactor\n\nThis accomplishes three things:\n\nFirst, split out the variable access layer from the rest of the code.\nThis cleans up the attribute handling, which is now done centrally as\nwell as making the high-level functions very short and clean. They now\nalso return better errors.\n\nSecond this introduces proper types for LoadOption, which can now also\nbe unmarshaled which was a requirement for A/B updates. This required\nimplementation of EFI\u0027s DevicePath structure.\nWhile refactoring the higher-level functions for this, this also\nfixes a bug where the variable index (the 4 hex nibbles at the end) were\nimproperly generated as lowercase hex.\n\nThird, this adds new high-level functions for interacting with more\nboot-related variables needed for the A/B effort.\n\nChange-Id: I53490fa4898a5e7a5498ecc05a9078bd2d66c26e\nReviewed-on: https://review.monogon.dev/c/monogon/+/1855\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "60d6b902d66a4c5c0a2a926c85936935106b9180",
      "tree": "d0d690bb830ebd611318626110db510015b5ce58",
      "parents": [
        "62a1edd234557c46facfd23661ff08c37c8e911f"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jun 20 16:02:40 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Jun 26 11:34:08 2023 +0000"
      },
      "message": "m/p/gpt: switch to msguid\n\nReplaces the old UUID mangling code with the newly-introduced msguid.\n\nChange-Id: I667e41c28959b4b95265c1ffdcf7f5bfcad4083d\nReviewed-on: https://review.monogon.dev/c/monogon/+/1850\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "62a1edd234557c46facfd23661ff08c37c8e911f",
      "tree": "7555b7996b1761d6eef4777a2ea482520b2c1db2",
      "parents": [
        "b390d715897e29064102257f4837959e694f9bf9"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jun 20 16:01:44 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Jun 26 11:34:03 2023 +0000"
      },
      "message": "m/p/msguid: init\n\nAdds a new msguid package which contains functions for encoding and\ndecoding Microsoft\u0027s mixed-endian GUID/UUID format. This format is\nused by Microsoft as well as a bunch of UEFI-related standards.\n\nChange-Id: Icca8ef7ad7f7359808ea7f19e3824639f7b1e2eb\nReviewed-on: https://review.monogon.dev/c/monogon/+/1849\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "d20af4f15347651efa7b90490f8e657d35281883",
      "tree": "49f01ce9ba6d73e06cf7ff3b7184c5db1d9c7b25",
      "parents": [
        "e1a4ac5eaec848a8b1d883c3963cfe399c71cb7d"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Jun 20 13:08:24 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Jun 20 13:06:46 2023 +0000"
      },
      "message": "metropolis/pkg/cmd: fix race condition\n\ncmd.Wait should not be accessed concurrently.\n\nChange-Id: Icaaa1a22b1d23211dc1259af6cf97463228944ae\nReviewed-on: https://review.monogon.dev/c/monogon/+/1824\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "6c45434189e387b234109b68b1ed5a8f2cd5b439",
      "tree": "4cff8bb2fac00df28699559256ce7649b38877e1",
      "parents": [
        "46bf7d6c6437dfbf9dcc1e1d7d80fcc1c601f9b5"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jun 01 12:23:38 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jun 13 13:44:46 2023 +0000"
      },
      "message": "m/node: build Linux with modules\n\nThis introduces modules into our Linux build. I originally didn\u0027t want\nto do this, this is why this wasn\u0027t done until now. But various things\nin the kernel weren\u0027t set up for this, for example the AMD and Intel KVM\nmodules cannot both be loaded, only the first one loaded works. Also,\nthe Linux kernel cannot load firmware for built-in modules reliably as\nthe filesystem it tries to load it from is not always mounted first,\neven if the kernel itself mounts it.\n\nThe firmware issue was brought up multiple times on LKML, but Linus is\nof the opinion that the firmware should be next to the kernel module,\nthus either built-in (not viable for licensing and size reasons) or the\nmodules need to be loadable and on the same filesystem as the firmware.\n\nThus unless we want to carry signifcant patches against the Kernel in a\ndeadlock-prone area, we are forced to adopt a design with loadable\nmodules (or ship everything twice in an initramfs which is also not\ndesirable).\n\nThe kernel config currently only has the modules as non-builtin which\nrequire firmware, everything else has been left as-is. For boot-time\nperformance it would eventually be a good idea to move to a setup with\nmore modules once we\u0027re confident in the implementation and everything\ncan deal with late-loaded modules/devices.\n\nAs a drive-by fix this also moves the kernel builds to out-of-tree so\nthat we no longer pollute the source folder. Bazel protected us from\nserious issues due to this, but it\u0027s still bad practice.\n\nChange-Id: Iced8e12234565e5b7447e732716651e05e67d55b\nReviewed-on: https://review.monogon.dev/c/monogon/+/1791\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "c7b036bca213962a7e60f3edb47624606799d074",
      "tree": "f0385f1ff6fe9a9fe41f62f32c0079006a1c5038",
      "parents": [
        "5832cd92957a6933c0fd644496d957ea2d8ef36d"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jun 01 12:23:57 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jun 13 13:44:46 2023 +0000"
      },
      "message": "m/p/kmod: init\n\nThis adds a package for working with Linux kernel loadable modules in\nGo. It contains syscall wrappers for loading and unloading modules, a\nmetadata format for fast lookup of modules handling devices using a\ncustom radix tree, parsers for module info metadata and various utility\nfunctions and data structures.\n\nA significant amount of the code in here has no formal spec and is\nwritten against behavior and information extracted from the reference\nkmod code as well as the Linux kernel itself.\n\nChange-Id: I3d527f3631f4dd1832b9cfba2d50aeb03a2b88a8\nReviewed-on: https://review.monogon.dev/c/monogon/+/1789\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "ca9cfcf9cfbb0ae46ee4f6f0d207cdbd7085e460",
      "tree": "772b7ebfbdfb6c0544860a919a346bcb462874bd",
      "parents": [
        "0508c6df9ab35ebbf0f0367ba1f7ed74bdfb20c8"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue May 02 19:29:14 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed May 03 09:47:02 2023 +0000"
      },
      "message": "m/p/{efivars,sysfs}: use typed UUIDs\n\nThe functions ReadLoaderDevicePartUUID and DeviceByPartUUID passed\naround UUIDs as strings. This is inconvenient as UUID strings are not\nnormalized and thus require special care.\n\nSwitch to Google\u0027s uuid library and use their type, same as most other\nthings in the monorepo.\n\nChange-Id: I19deed804cff7036f756257fbf5689570cccc812\nReviewed-on: https://review.monogon.dev/c/monogon/+/1640\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "1cd2696d61071b072a24dbe127d9d95874377d66",
      "tree": "fd9103766990c64daecec87fc9625bc267ba1cc5",
      "parents": [
        "3ea40da4d6642593f7535dc71084b3367c6eb35e"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Apr 19 16:10:17 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Apr 19 18:24:40 2023 +0000"
      },
      "message": "c/agent: include EFI support in hardware report\n\nAdds firmware EFI support status to the hardware report.\nIt is represented as an enum which is populated based on two different\ndata sources. The ENABLED state is set if Linux has EFI runtime\nservices available. The SUPPORTED/UNSUPPORTED states depend on the\nSMBIOS tables provided by the firmware\nand are used if EFI runtime services are not available.\nIf neither are available, UNKNOWN is used.\n\nChange-Id: I7642ccda14d5494294a7463755de18e73a8a9c53\nReviewed-on: https://review.monogon.dev/c/monogon/+/1571\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "e3032bd090603b0344727647028d03273bd7d3f5",
      "tree": "685a127ebd2955e1d586cc0a1277b8d464788fc8",
      "parents": [
        "bdc803b54b55b61bb07cd75ba966320e42a9c3b7"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Apr 13 14:43:41 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Apr 18 11:48:46 2023 +0000"
      },
      "message": "m/p/supervisor: allow signalling supervised processes\n\nUsing Command.Process.Signal to send signals to supervised processes\ncreates a data race between the Start function (called by Run) which\npopulates Command.Process and the access to that field.\nIntroduce a new option for RunCommand which takes a signal channel and\ninternally solves this race by first calling Start (at which point\nCommand.Process is populated and will not be mutated) and then spawning\na Goroutine which does the actual sending. This is safe at least on\nLinux since Go 1.7 [1].\n\n[1] https://github.com/golang/go/commit/cea29c4a358004d84d8711a07628c2f856b381e8\n\nChange-Id: Ibb76ef8a0434574c4df9ff85545987026518d8c0\nReviewed-on: https://review.monogon.dev/c/monogon/+/1540\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "d67eb4f7d6eff30320eac3fc564af2dbaff06a82",
      "tree": "5750b58d1139af063662b6b8a50dfafca5b3ed3a",
      "parents": [
        "23fa5c1f021739297bfc3def8514f3e1324503b7"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Apr 11 16:03:31 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Apr 12 12:59:55 2023 +0000"
      },
      "message": "m/p/bootparam: add Consoles param parser\n\nAdds the Consoles() helper function which processes all console params\nand puts them into a set.\n\nChange-Id: I7333bf5c22e6cd79bea0155c6a558e79bf6e824b\nReviewed-on: https://review.monogon.dev/c/monogon/+/1525\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "752fda3e5255bd6e0f08c4e2498b0bf7af15c321",
      "tree": "4d5988cda4a004cf5d217a481fc247fbee72df03",
      "parents": [
        "aadeb798a1f92b3d69ec7d6cde1b4567c2140452"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Apr 06 22:33:18 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Apr 06 21:27:23 2023 +0000"
      },
      "message": "m/p/smbios: remove print\n\nThis was accidentally left in there from debugging.\n\nChange-Id: I20d9903e5d7ce67dbe171869848696a00f9711ed\nReviewed-on: https://review.monogon.dev/c/monogon/+/1517\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "aadeb798a1f92b3d69ec7d6cde1b4567c2140452",
      "tree": "6278ec3b6a732f2d27e7948bcba8e7a579d0e5b1",
      "parents": [
        "4bbd8b34a5e81a28219ae95bedf7915568557800"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Mar 27 15:53:56 2023 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Apr 06 14:26:33 2023 +0000"
      },
      "message": "c/agent: implement\n\nImplement the currently-required agent functionality, i.e. running with\nboth autoconfigured as well as static network configuration, interacting\nwith the BMaaS API and installing Monogon OS.\n\nThe early-stage setup is similar to Monogon OS itself, but after setting\nup the root supervisor this instead calls into the agent runnable which\nthen performs the rest of the work.\nIn the process I made both logtree as well as supervisor public as they\nare very generic and I see no reason to keep them scoped so tightly.\nMaybe we should move them to go/ at some point.\n\nThis currently calls into osimage without the optimization the\nregular installer performs, this is intentional as I have code which\nwill replace osimage with a high-performance version, obviating the\nneed to manually make this fast here.\n\nThis also comes with an end-to-end test\nwhich exercises the whole flow, installing TestOS and checking if it\nlaunches.\n\nChange-Id: Iab3f89598a30072ea565ec2db3b198c8df7999ef\nReviewed-on: https://review.monogon.dev/c/monogon/+/1405\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "98e05e1e5fd348ac07e221732251734256777ecd",
      "tree": "d202ec3537c7f6faa903910bc5eb0258a8eb6f72",
      "parents": [
        "6c8ee0b3224934cf10b576e8caea15e4ad18a759"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 05 12:44:14 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 06 10:13:54 2023 +0000"
      },
      "message": "metropolis/*: confine etcd output in tests\n\nThe etcd test cluster logic produces some very chatty logs that end up\nin stdout.\n\nThis confines the etcd logs themselves, as well as gRPC logs that the\ntest logic also always enables by default.\n\nChange-Id: I1070f14b20e870865b510ae24015402c0469ceff\nReviewed-on: https://review.monogon.dev/c/monogon/+/1487\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "6c8ee0b3224934cf10b576e8caea15e4ad18a759",
      "tree": "3aac6bea1d0d0d4a43e1ce9cbaedf88e141dfab5",
      "parents": [
        "29974f3ba444e129cc142133778d09fa61e9679b"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 05 12:29:57 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 06 10:13:54 2023 +0000"
      },
      "message": "m/pkg/logtree: add Zap and gRPC facades\n\nChange-Id: I37a861edeba9b916e17598da559bd378e494ec35\nReviewed-on: https://review.monogon.dev/c/monogon/+/1486\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "29974f3ba444e129cc142133778d09fa61e9679b",
      "tree": "76fe13f1af556f1fbef15532025bba918c16150e",
      "parents": [
        "630fb5c5349b13330b7de6f8300b495b801db061"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 05 12:29:09 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 06 10:13:54 2023 +0000"
      },
      "message": "m/p/logtree: pipe to t.Log in tests instead of stdout\n\nChange-Id: I12506a0553810d934872aa0dd03478a66ba6e95f\nReviewed-on: https://review.monogon.dev/c/monogon/+/1488\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "e012b728d98e51e6b5564873f10c06c4f4c81415",
      "tree": "65d21fa881c46451a2c8234ef10cd4283e2f85b5",
      "parents": [
        "cff8eb9db471c6dd85f92e1828ecd268c2737dda"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 29 17:49:04 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 04 16:51:11 2023 +0000"
      },
      "message": "metropolis: implement NodeManagement.Logs\n\nThis takes the implementation from the debug service, dusts it off a\nbit, adds tests and moves eerything to the new node mgmt service.\n\nChange-Id: Id3b70126a2551775d8328c0c4e424ec0e675f40f\nReviewed-on: https://review.monogon.dev/c/monogon/+/1439\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "da11486352f2aaccfa271a8aaf06a3bef09b0a3a",
      "tree": "c5a4f5488061d4c0a8660014bc4f4838361ee4aa",
      "parents": [
        "bc7397214147701d6e70141ff70bf6e84f9aab62"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 29 17:46:42 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 30 14:19:03 2023 +0000"
      },
      "message": "metropolis/proto: move log-related types to common\n\nHaving them in API is kinda weird, especially as we\u0027re\ngenerating/parsing them from a few libraries already.\n\nChange-Id: I87b4b51f151443c60b87e3e50753c395fcf6e845\nReviewed-on: https://review.monogon.dev/c/monogon/+/1437\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "8fab014d343633828dc4df3c670def9c75fa4485",
      "tree": "178e3a4a95189e85e618fb966320e805961cb666",
      "parents": [
        "3ac3a2ecfab884ff26939834578ce731ee1778ac"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 29 16:48:16 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 29 16:03:23 2023 +0000"
      },
      "message": "m/pkg/logtree: fix exact backlog fetch, head/tail confusion\n\nThis started off as \u0027hm, the backlog data returned seems wrong\u0027. I\nrealized we had no test for that, so I added one. It was indeed broken.\n\nThis was because we had two simultaneous bugs: we confused head/tail\nbetween docs and different parts of the code, and we forgot to do a\nreverse operation when scanning/retrieving journal entries.\n\nWith those two fixed, we also implement backlog retrieval in a optimized\nfashion, but not scanning/retrieving more entries that is necessary.\n\nFinally, we drive-by fix a massacred ASCII graphic in a comment.\n\nChange-Id: I2ec5dd9b5b58f66fbc015c142feb91bd92038e4f\nReviewed-on: https://review.monogon.dev/c/monogon/+/1430\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "1ec1fe9f8af947c972f803d778f95d145606a6d0",
      "tree": "d63a4b0dc55dfd582bb20dcdd47011a501d4ed2c",
      "parents": [
        "fe39cc21b69bb9fd9f641dfc6b3514386cbb0d4c"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 22 18:29:28 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 23 13:32:41 2023 +0000"
      },
      "message": "m/pkg/socksproxy: fix fd leak\n\nChange-Id: I4e5f9e937b85a46a9c4ee2e79f4bdcea06858d59\nReviewed-on: https://review.monogon.dev/c/monogon/+/1386\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "c64ba1ec847af9314790d8f13ff9ead06a9be45c",
      "tree": "d5e0fbb008fe2ac950241ff53770aeee4e7b3df8",
      "parents": [
        "e013f1b87807b7c0eb7440cec41e568ef288b499"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 15 19:15:13 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 22 11:33:51 2023 +0000"
      },
      "message": "go/net/tinylb: init\n\nThis implements tinylb, a tiny round-robin load balancer for\nnet.Conn/net.Listener protocols.\n\nThis will be used to loadbalance connections to Kubernetes apiservers\nbefore cluster networking is available.\n\nChange-Id: I48892e1fe03e0648df60c674e7394ca69b32932d\nReviewed-on: https://review.monogon.dev/c/monogon/+/1369\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "e25b3a4154cd71c1efd4e26760f4e14d27ad005b",
      "tree": "51d8974c74b742f5fe6e26e7154789007f10da4b",
      "parents": [
        "3600690988cd075c4e775018bcc9d0f345dd3e86"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Mar 17 00:07:53 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Mar 20 16:18:08 2023 +0000"
      },
      "message": "m/pkg/{logtree,supervisor}: support Benchmarks in test helpers\n\nChange-Id: I811356ac50dd9588412c280a87ad6e5c4be1e2cd\nReviewed-on: https://review.monogon.dev/c/monogon/+/1368\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "367ee27b50654bc37358d9172aed7c3d19a32dac",
      "tree": "354e4e01616adbf92be250eacd28e66e2e97dd4e",
      "parents": [
        "ce4af2b7dbae61a81c791c30fe0a161b3ff8b7d9"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 17:50:39 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 20:52:16 2023 +0000"
      },
      "message": "m/pkg/logtree: implement concise stringification\n\nThis adds a new method on LogEntry: ConciseString(). It\u0027s designed to\nbe used in cases where we want to display the log line on some\nlimited-width (and likely non-interactive) log console, like TTY\nconsoles in Metropolis.\n\nThis is a bit too Metropolis-specific to my liking (we hardcode some\nlogic related to the layout of root.role.*), but it\u0027ll do for now.\n\nChange-Id: I1079b8b19a3c304fcc5077ce6b4c69887a34d7ae\nReviewed-on: https://review.monogon.dev/c/monogon/+/1359\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "0164c717e7ca2420f86043283f4c56867734ecce",
      "tree": "f75f52391d5db410cb081f04f372d34da26bf30b",
      "parents": [
        "9dd92d90074fbab1a15b07da9ccc0afab70a5f30"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 17:54:07 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 18:10:01 2023 +0000"
      },
      "message": "m/p/supervisor: provide more concise logs on runnable exit\n\nChange-Id: Iba99bdf5d516e0edad6da40951d61894acf0b70b\nReviewed-on: https://review.monogon.dev/c/monogon/+/1357\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "9dd92d90074fbab1a15b07da9ccc0afab70a5f30",
      "tree": "4914a511ce3cfc2afa7143b75cedae2a46f2b11b",
      "parents": [
        "37110c360f012c10f3b9456a0eb282eefd3275b3"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 01 14:29:07 2023 +0000"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 17:27:36 2023 +0000"
      },
      "message": "m/pkg/event: implement Pipe helper\n\nThis simplifies some of the roleserver code, and is possible now that\nevent values are strongly typed.\n\nChange-Id: I0a22ff97fe4304d35cc9cee105e98bc224d1433b\nReviewed-on: https://review.monogon.dev/c/monogon/+/1323\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "37110c360f012c10f3b9456a0eb282eefd3275b3",
      "tree": "0d8ade7c95d54a576d88e53fb5e8ca9ee76c8f29",
      "parents": [
        "5456a3c4f14f7f73eb49dbfbb3de0bc009c970fe"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 01 13:57:27 2023 +0000"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 16:55:28 2023 +0000"
      },
      "message": "m/pkg/event: make type-safe\n\nThis is a fairly large change which makes use of Go type parameters\n(“generics”) to make the event library (and its memory/etcd\nimplementations) type safe.\n\nSince we now have the event.Value interface strongly typed, we also move\noptions which were implementation-specific (like BacklogOnly)\nto be part of that interface, instead of the previously type-asserted\nspecific implementations. Use of options that are not handled by a\nparticular implementation is a runtime error. Expressing this in the\ntype system is probably not worth the effort.\n\nWe also implement Filter to allow offloading some of the functionality previously implemented in type assertion wrappers into the library itself.\n\nIn the end, this ends up removing a bunch of type assertion code, at\nthe cost of a fairly sweeping change. Unfortunately, some of this is due\nto IntelliJ suddenly deciding to reformat comments.\n\nChange-Id: I1ca6d93db1b5c4055a21af3fb9e5e3d425c0d86e\nReviewed-on: https://review.monogon.dev/c/monogon/+/1322\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "5456a3c4f14f7f73eb49dbfbb3de0bc009c970fe",
      "tree": "f71839e80a77bb094c9836a399ebc2e0f99e4854",
      "parents": [
        "591d808678b9770bd579509928997dc5494806e8"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 00:29:17 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Mar 16 13:41:02 2023 +0000"
      },
      "message": "m/p/logtree: do not emit broken klog entries\n\nAny invalid line parsed to the klog parser would turn into a big INVALID\nbeing emitted to the console, as the emitted log entry had neither a\nleveled nor raw logline attached.\n\nChange-Id: Ia6d620ea56d2112d11e2d3edcd6c762c58de6c50\nReviewed-on: https://review.monogon.dev/c/monogon/+/1339\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "2d284b5718ad0948e7ef5afc5905f36701f4a3ab",
      "tree": "1525231844ed4fb336e9cf3b0b252008f4f44393",
      "parents": [
        "7922d41e98a28458e17e4ff33c9ece0d9ff6578a"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Mar 08 17:05:12 2023 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Mar 09 20:09:06 2023 +0000"
      },
      "message": "c/takeover/e2e: add takeover end-to-end test\n\nThis adds an end-to-end test to the takeover system.\nIt launches a QEMU VM running a Debian Cloud Image which is configured\nvia cloud-init to accept SSH access from the test.\nIt connects to that VM via SSH, copies the takeover binary under test\nto it via SFTP and launches it.\nIt passes a test TakeoverInit message to it, performs basic sanity\nchecking on the response and then looks on the serial port for a flag\nmesage that the agent has started.\n\nChange-Id: I8edce6163259da305bb43660a2d70474f7f11612\nReviewed-on: https://review.monogon.dev/c/monogon/+/1262\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "1cf17953163089f6b90d0922bff0994e06c95e29",
      "tree": "cfcef14d8530761d9b0a18adf266262898ede7c6",
      "parents": [
        "d026b37c2a27d414821f860ccd0effb522be1ce4"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Feb 13 17:41:59 2023 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Feb 14 10:03:25 2023 +0000"
      },
      "message": "pkg/bootparam: add bootparam pkg\n\nThis adds the bootparam package which can marshal and unmarshal the Linux\nkernel command line into boot parameters and a rest section passed to\ninit.\n\nThis is a very quirky format, thus there is a fuzz testing harness\nagainst the reference implementation from the kernel included to verify\ncorrectness.\n\nA set of weird edge cases is rejected by Unmarshal instead of parsing\nto nonsensical data as the reference implementation does to save on\ncomplexity in the parser.\n\nChange-Id: I6debfa67e69ae8db4e0356f34ecb127ea27d18de\nReviewed-on: https://review.monogon.dev/c/monogon/+/1125\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "97f212c1d25424a099b6a2ff52e0464a2755f11e",
      "tree": "f5da74b0ac98113b684f51c98946d405fbeacb77",
      "parents": [
        "6294854ace5e06e3b731878544eb39f5351de66d"
      ],
      "author": {
        "name": "Leopold",
        "email": "leo@monogon.tech",
        "time": "Sat Jan 21 19:06:34 2023 +0100"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@monogon.tech",
        "time": "Tue Jan 24 16:16:59 2023 +0000"
      },
      "message": "build/ci: mark supervisor and e2e tests as flaky\n\nChange-Id: I56459eac238d3ecc5c8429226cab1c32ceb2e0c4\nReviewed-on: https://review.monogon.dev/c/monogon/+/1088\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "bffdda85d7750c9a9a34289a79281edeae1d73ef",
      "tree": "09bd64e59e1ed5a2dd3db9e4336b449158ba8fa0",
      "parents": [
        "6c9535b36d033ac647b1cf4fca2a29e8c260a79f"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jan 10 05:00:36 2023 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jan 19 17:32:52 2023 +0000"
      },
      "message": "m/p/scsi: add SCSI package\n\nThis adds a SCSI package to interact with SCSI devices.\nIt implements a subset of commands from the SPC-5 and SBC-4 standard\nuseful for discovery and health assessment.\nA follow-up will add SAT (SCSI-to-ATA translation) support.\n\nChange-Id: I7f084d26f11d9c951f51051040160e351cf5594c\nReviewed-on: https://review.monogon.dev/c/monogon/+/1066\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "12450d28a5a841994df41bb7c37c24d53a2c80d2",
      "tree": "4d986fcb759755fa81ebb4a6ef9bf98db916a3bb",
      "parents": [
        "fba5da0d552a7406276be9bacc87c79108698669"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Dec 20 13:06:19 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jan 03 18:16:07 2023 +0000"
      },
      "message": "pkg/smbios: fix error calculating memory size\n\nThere were two errors in the memory size calculation.\nOne was that if the high bit is set the unit is KiB, otherwise MiB, not\nthe other way around.\nThe other one was that I extracted the bit, but failed to shift it to\nthe right position. So I took the time to stop this bit twiddling and\nadded some constants and a good old-fashioned if.\n\nChange-Id: I0bce8f7607981e62120365374458425f3c663b51\nReviewed-on: https://review.monogon.dev/c/monogon/+/1000\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "fba5da0d552a7406276be9bacc87c79108698669",
      "tree": "fbb6f9eb26f86bfb3e7aa8ba524a29bafe76ec12",
      "parents": [
        "189495ac490e93770a88affdce25b8f2087cb193"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Dec 15 11:20:47 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jan 03 18:16:07 2023 +0000"
      },
      "message": "pkg/nvme: add NVMe package\n\nThis adds a NVMe package for performing various low-level operations on\nNVMe devices. Only the most important (to us) calls are implemented as\nNVMe has a vast API surface.\n\nChange-Id: I532894c3c2eb780309993a1688226c92c91cdedf\nReviewed-on: https://review.monogon.dev/c/monogon/+/999\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "f9c65e9e588c44e019d6b8836275493abe298a2e",
      "tree": "623c0d0e36c62d0593dbd6cc73ed3c629bf0466a",
      "parents": [
        "68ca370db4bb8314ac7598ce3b9c90194bde47a8"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Nov 22 12:50:56 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Nov 29 12:22:31 2022 +0000"
      },
      "message": "pkg/smbios: add SMBIOS package\n\nThis adds a new SMBIOS package which contains common structures from\nSMBIOS as well as corresponding parsers.\nI originally explored an approach where I manually designed optimized Go\ntypes for each structure, but that would have led to a huge amount of\ncode that reading a structure of this type would cause if done\nliterally. I also considered code generation, but if the generated types\nare to be close to the manually-designed ones it would be an incredibly\ncomplex piece of code as well.\nFinally I went with a design based on reflection which is much more\ncompact than the first two and consists of plain Go code at the expense\nsome niceness in the types.\nI called the current types SomeTypeRaw in case I want to come back later\nintroduce a small layer mapping the current structures into nicer ones.\nBut for our current purposes the raw ones are good enough already.\n\nThis has been tested against our deployment targets, but as the SMBIOS\ndata contains uniquely identifying information these small tests are not\npart of this CL. Sadly I haven\u0027t found any public SMBIOS test-cases.\n\nChange-Id: I55d746ada0801de456f2a0eb961821abd9d58fa2\nReviewed-on: https://review.monogon.dev/c/monogon/+/983\nTested-by: Jenkins CI\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "0123a1c948100c040c1924e50dc1e05a9cd523a7",
      "tree": "0e99c3903f18cca4e97c60f3595b4fee5924ca1d",
      "parents": [
        "35e8d79e695b290d371d82dbcc5b15cea429d424"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Oct 24 18:41:48 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Oct 26 15:46:46 2022 +0000"
      },
      "message": "m/p/kexec: add auxiliary EFI handling\n\nThis makes kexec do auxiliary handling related to EFI. If a system is\nbooted using EFI and has an ACPI Root System Description Pointer (RDSP)\ni.e. just about every modern system, the pointer to that structure needs\nto be passed to the kexec\u0027ed kernel on its command line.\nOtherwise various EFI-related functionality breaks, like accessing\nEFI variables which causes a kernel crash.\n\nLogically I think this functionality belongs to kexec as callers\nshouldn\u0027t need to be aware of kexec specifics and every caller\npotentially running on EFI needs this functionality.\n\nChange-Id: Iec7ad4c3c0a7e5c31d738d307ff0e10aac02ab11\nReviewed-on: https://review.monogon.dev/c/monogon/+/960\nTested-by: Jenkins CI\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "ee17d8303258980270587755f75dc4b6412e3a31",
      "tree": "25e30e22a95527592b8d596dc8da5e6f7b6b63ab",
      "parents": [
        "ce3d810f4fde5e00aba7539a4d12ebe82d65b672"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Oct 18 12:02:45 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Oct 24 16:30:56 2022 +0000"
      },
      "message": "m/p/gpt: add GPT package\n\nThis introduces our own GPT package. It will be used for provisioning\nand Metropolis images.\n\nChange-Id: I905cd5d540673fd4b69c01d8975f98b88e24edd4\nReviewed-on: https://review.monogon.dev/c/monogon/+/956\nTested-by: Jenkins CI\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "5486a9cf8c7092a213bfda0b52681c156fe87cbb",
      "tree": "458c972750c2a47ff4697ac11fe3c27b421fb8ff",
      "parents": [
        "d1bc4a61ebcebe25fc45fbaba577867a6f293b97"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Sep 12 16:49:30 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Sep 13 11:32:54 2022 +0000"
      },
      "message": "m/p/kexec: add minimal kexec library\n\nThis adds a minimal kexec library which wraps the kexec_file_load\nsyscall in a Go-style interface.\n\nChange-Id: Ia69b47ec6a305b19b238f30a7515aabdccb44bb9\nReviewed-on: https://review.monogon.dev/c/monogon/+/903\nTested-by: Jenkins CI\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "bd2ce6dcffa271d8ef00bceda1a89fc34d1d0f3d",
      "tree": "d40ddca810272927e140a369866be45adde0e150",
      "parents": [
        "4c078788121339beb45cad8b2ac2a24dac55cb93"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Fri Jul 22 00:00:13 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Sep 06 13:59:45 2022 +0000"
      },
      "message": "m/p/fat32: add fat32 package\n\nThe fat32 package is a write-only implementation of the FAT32\nfilesystem. It works quite unlike a normal file system by first\ndetermining the entire disk layout and then sequentially writing\nout everything. This allows it to have a fully streaming output without\nneeding to seek at all.\nBecause all IO is sequential the implementation is extremely fast and\ncan potentially even leverage things like the copy_file_range syscall.\nThis means however that all files and readers need to be prepared ahead\nof time, it is not possible to make decisions during the writing\nprocess.\nIt is also possible to generate \"right-sized\" filesystems by not\nspecifying an explicit block count. In that case the resulting image\nwill contain exactly as many clusters as needed.\n\nChange-Id: I49bf2ce09b26a7d628a39a0dd0745bca61c1c4da\nReviewed-on: https://review.monogon.dev/c/monogon/+/841\nTested-by: Jenkins CI\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "b838e05983828a443390479691dba3de086bcb53",
      "tree": "14eef15338691f9764f3e93452bc27fc0834f29c",
      "parents": [
        "9c315f1116567df934cf7fce5f3f341c70cb9b66"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Fri Aug 12 18:08:10 2022 +0200"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Thu Aug 25 11:26:58 2022 +0000"
      },
      "message": "m/c/metroctl: implement the \"describe\" command\n\nThis implements metroctl\u0027s \"describe\".\n\ncmd.TerminateIfFound was adjusted to meet new test needs.\n\nChange-Id: If86f35bc648d99396e7d5be48ab459d6b13334ce\nReviewed-on: https://review.monogon.dev/c/monogon/+/850\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "2f7790dfe7a93f5f048e914d0c1d61af61dbdfba",
      "tree": "5bf39f6d0c3a13b97a617b752789c2bf2764e60c",
      "parents": [
        "6cdc976f681edc51f68454a76e7d7af64417ca7e"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Sat Aug 06 16:10:42 2022 +0200"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Thu Aug 25 11:26:58 2022 +0000"
      },
      "message": "m/p/cmd: handle exiting processes\n\nRunCommand was seen waiting for the line that would trigger its\nsupplied predicate function even after the managed process exited,\nwhich is deemed a bad strategy.\n\nChange-Id: I5fa5add1daf3c4f0c69f72f5b5859e88f7bc2679\nReviewed-on: https://review.monogon.dev/c/monogon/+/847\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "6cdc976f681edc51f68454a76e7d7af64417ca7e",
      "tree": "dfcfa01566c2c82f41616cdc654937a3fbee0e31",
      "parents": [
        "18a67b033fd8ccd5dacb7c7e1f0c1a9c21eb0a6b"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Wed Aug 03 17:15:01 2022 +0200"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Thu Aug 25 11:26:58 2022 +0000"
      },
      "message": "m/p/cmd: use predicates in RunCommand\n\nThis generalizes RunCommand by making it accept any completion\npredicate function.\n\nChange-Id: Ic6b911244aaecd16c01000050fca618a8c8e09d7\nReviewed-on: https://review.monogon.dev/c/monogon/+/846\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "cf92f409655c4f4bc22eaa5d17f543d69e8c411b",
      "tree": "f0db9b6b5d73e168954544af951754a082b34493",
      "parents": [
        "28800ad9a591c8a9dbbba4f21de51d8e07443b1e"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Fri Jul 08 15:08:48 2022 +0200"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Mon Jul 11 12:09:15 2022 +0000"
      },
      "message": "m/p/api: use protobuf.Timestamp in LogEntry\n\nThis updates LogEntry to use google.protobuf.Timestamp.\nSee: issue #129.\n\nChange-Id: I937800aa91e86690da0d06f743e720c2d474ad0a\nReviewed-on: https://review.monogon.dev/c/monogon/+/832\nTested-by: Jenkins CI\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "f1234a9528f700bc3c44a45fe19d5a743da29af5",
      "tree": "26fd08130af2338c02b657eae8497454056e505d",
      "parents": [
        "cce1f0d12155fbaa4011ab459844575cd360036b"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Wed Jun 22 13:57:38 2022 +0200"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Mon Jul 11 12:09:15 2022 +0000"
      },
      "message": "m/p/cmd: implement RunCommand\n\nThis implements a new utility function RunCommand, based on existing\nm/installer/test implementation.\n\nRunCommand will be used in the upcoming metroctl test implementation.\n\nChange-Id: Ieb98acada7e7408249da0e289861674e80b4d581\nReviewed-on: https://review.monogon.dev/c/monogon/+/789\nTested-by: Jenkins CI\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "237cf4076e4314ea98f4d47e9557857ef73f554b",
      "tree": "2c4a6f8e62958469f84b5e948faace8bd8e3441e",
      "parents": [
        "d57ef1c61a520fa251ede0b4ef2491b8c3ebd3b8"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Jul 04 12:14:37 2022 +0000"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Jul 04 14:03:05 2022 +0000"
      },
      "message": "m/p/pki: set correct authority key identifier\n\nThe current code sets the AuthorityKeyId of a signed certificate to the\nparent\u0027s AuthorityKeyId while it should set it to the parent\u0027s\nSubjectKeyId. This worked as we do not currently use intermediate CAs.\n\nChange-Id: I74dae8b50fd32d2b158ed95ccf918a6a38a1c699\nReviewed-on: https://review.monogon.dev/c/monogon/+/819\nTested-by: Jenkins CI\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "bbb873d19c7b0b981c6d00e78c1d25544835b500",
      "tree": "ee0d0420f53aed79197f35491bc5e72a7d61d0c1",
      "parents": [
        "2a64fff55720780c1702d1013be2a80575d80aa7"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Jun 24 14:22:39 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Jun 28 10:26:11 2022 +0000"
      },
      "message": "m/p/event/etcd: better handle update coalescing\n\nI wasn\u0027t able to replicate this in a test, but sometimes etcd sends\nmultiple events relating to the same key within a single entry in the\nwatch channel. I assume this happens when the etcd watcher client is not\nreading from the server fast enough.\n\nAnyway, when that happened, we\u0027d get a panic about duplicate keys in a\nnon-ranged call because of a logic bug in the entry coalescing (in which\nwe would not coalesce multiple updates to the same key, just updates\nwith the same key and value). Now we coalesce these too, and the bug\nseems to be gone.\n\nChange-Id: I36234cc1104ec96a38ad1566b9df75532df44bba\nReviewed-on: https://review.monogon.dev/c/monogon/+/800\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "9d9711884e042066b1f9ba51b7d9665596828748",
      "tree": "0759c534953500a5dae5d684eba80e5f45593445",
      "parents": [
        "944cb53d38e1b506eb5dcb0ca17fa0811195b09f"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Jun 23 17:44:13 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Jun 24 09:24:48 2022 +0000"
      },
      "message": "m/p/event/etcd: provide logging for heisenbug\n\nI\u0027ve just had this panic(), but it didn\u0027t give me enough data to debug\nfurther. Wasn\u0027t able to replicate it yet, but whenever this happens\nagain we\u0027ll be able to hopefully figure out what went wrong.\n\nChange-Id: Id440ece88410d78eb720f353633c02db1a0f4588\nReviewed-on: https://review.monogon.dev/c/monogon/+/799\nTested-by: Jenkins CI\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "f8da2e7dfbcbb144ee894875e46c44a525e57c5c",
      "tree": "8a9d321de91d1816241d400bd167c67dcb472dfd",
      "parents": [
        "2c6906a62a623d49c6a9c8529b26d692194c1dd5"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Jun 14 12:39:32 2022 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Jun 15 13:40:21 2022 +0000"
      },
      "message": "m/pkg/pstore: add package to interface with pstore\n\nThis adds a package for interfacing with the Linux kernel\u0027s pstore\n(persistent storage) system. Currently only handles kmsg/dmesg-type logs\nas mce has an unknown format and I have no examples.\n\nChange-Id: I3089a53cdca224c7e6e04dd51a94035d7b2b880b\nReviewed-on: https://review.monogon.dev/c/monogon/+/769\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "ad10ecea0bf387c0093c7cb8ed7b873ccd039896",
      "tree": "bbc694c80fb2895dbf6824a4a7654f3bdb45b151",
      "parents": [
        "9a6cc56da8f1f5b11eda7ff8ae1f4c7315891556"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue May 17 11:20:17 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed May 25 13:51:16 2022 +0000"
      },
      "message": "m/pkg/value/etcd: fix test flakes on partitioning\n\nFixes monogon-dev/monogon#124\n\nChange-Id: Ib1224dc809901d8dea61a297c3d836bd35f160c5\nReviewed-on: https://review.monogon.dev/c/monogon/+/689\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "defff5220d4ed1123a85cf41300eeeeb558b7cc6",
      "tree": "9082dd3faaa58a3e219be579b0c7c6138b434b53",
      "parents": [
        "a81096f56a337b5709e7cc692e89cb0e55e45708"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon May 16 17:28:16 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue May 24 15:31:20 2022 +0000"
      },
      "message": "metropolis: fix tests using etcd\n\nEver since we bumped etcd, we have started calling\nintegration.BeforeTest. The correct call is BeforeTestExternal,\notherwise some internal-etcd-integration-test logic is invoked, which\nseems to break test error calls (!) in some cases (probably goroutine\nleak detection, which is enabled by default when using BeforeTest -\nwhich we don\u0027t care about, as we don\u0027t [yet] expect our tests to be fully\nclean).\n\nWe also have to modify the harnesses used by curator tests to\nsynchronously terminate the cluster on each test end. Otherwise, etcd\nwill fail due to conflicts on domain sockets on which test members\nlisten. Unfortunately, there doesn\u0027t seem to be an easy way to run each\ncluster/test in a totally separate, non-conflicting socket setup.\n\nChange-Id: I2fb1332edb35349b66af131684feb378ae3a13ee\nReviewed-on: https://review.monogon.dev/c/monogon/+/688\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "ed6bcacf756182ee62d249e3675ff050dcbc6800",
      "tree": "af1b4ea39b5a4ff2c9e1403748697b6869296938",
      "parents": [
        "e11ffb67bab34f1faa439b13aeb2630d86714441"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed May 04 17:39:41 2022 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed May 04 17:49:54 2022 +0000"
      },
      "message": "m/p/tpm: fix panic when unsealing corrupted data\n\nIf the Protobuf payload for the unseal operation is parseable but does\nnot contain a sealed_key member, the code panics trying to access it.\nThis adds an explicit check and returns a descriptive error when that\nhappens.\n\nChange-Id: I671958c69265a1e77207981a439a66dccda87064\nReviewed-on: https://review.monogon.dev/c/monogon/+/673\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "832bc77f0f0530059dd66b59cfd8a000b59b6251",
      "tree": "c063cc6398e410496844622ed9e2688f1e5c8116",
      "parents": [
        "abe02eb86b64920be8aec862e380853be1fd3372"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 07 12:33:01 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 19 08:06:03 2022 +0000"
      },
      "message": "m/p/event/etcd: handle spurious watch updates\n\nWith the recent etcd updates, we started seeing some failures in tests\nfor the etcd-backed Event Value library.\n\nThis seems to be due to etcd now sometimes returning \u0027spurious\u0027 watch\nupdates, in which a keyvalue is returned twice, with two separate\nrevision numbers, even though the underlying value has not been\nupdated.\n\nWe elect to deduplicate these within the event value library itself, if\nonly to make it less work for downstream users to do the same. This is\ndone be keeping a cross-watcher.Get map of key-\u003evalues, and filtering\nout updates which effectively do not update the data underneath.\n\nWe had one test relying on 1:1 correspondance between etcd puts and\nEvent Value backlogged Gets. However, the rest of our codebase does not\nmake this assumption, and it seems fair that this assumption doesn\u0027t\nmake sense alongside the intended use of the Event Value system in which\nwe deliberately and arbitrarily drop intermediate updates within a\nsingle Get call.\n\nChange-Id: I731a15b2d15ab6807bb95cb6c777c176dde22f0b\nReviewed-on: https://review.monogon.dev/c/monogon/+/654\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "fdc3a2473e4ebfd77db342252e1088882e01b2d6",
      "tree": "addfe894acce55d3088764cc49a6c1c3cee55573",
      "parents": [
        "33ce3bcd5c4791cb66a3020b7792829c534c97c6"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 06 15:56:38 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 19 08:01:17 2022 +0000"
      },
      "message": "third_party/go: fix `go mod tidy`\n\nThis makes our root repository somewhat more gomod-compliant, to the\npoint where we can run `go mod tidy` to manage dependencies.\n\nThe generated placeholder files turn their parent paths into enough of a\nGo package that the go tooling is appeased, but they are ignored by\nGazelle.\n\nIdeally, we will generate these placeholders automatically before\nrunning `go mod tidy` and gitignore them, but this will do as a first\npass.\n\nWe also remove some unused dependencies which got caught by `go mod\ntidy`.\n\nChange-Id: I81e7e92a45f22c8ef9c92207f67a5bd6cc773da5\nReviewed-on: https://review.monogon.dev/c/monogon/+/652\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "fe7134b0b25b620b6f40b1f41f37ab93fca6d3c0",
      "tree": "56bae6b492cb092f21723d3407e64258eb8b255f",
      "parents": [
        "a393814a28df60f67fa6a39309a6d8604811ca95"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Apr 01 15:46:29 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 05 14:44:40 2022 +0000"
      },
      "message": "m/pkg/socksproxy: init\n\nThis implements a simple SOCKS5 proxy server, which will be used within\nnanoswitch to expose multiple nodes to test code and metroctl.\n\nSome existing alternatives were considered, but none were in a healthy\nenough state to be usable within Metropolis. And, in the end, we only\nneed a small subset of an already simple standard, so implementing this\nourselves isn\u0027t a massive waste of time.\n\nChange-Id: Ifa4d4edf837b55b93cae9981028efef336ff2a3d\nReviewed-on: https://review.monogon.dev/c/monogon/+/646\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "8ca9c292b2b8e5aa83500f2065da56919ce7af41",
      "tree": "7e13b5cd63a4eb5a35c5e90178983b2360cd54e0",
      "parents": [
        "d13c1c64387ca9a83bb832a3faa5c4b07268d265"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Apr 04 16:29:26 2022 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 05 13:53:02 2022 +0000"
      },
      "message": "m/p/erofs: add character device test\n\nAlso, drive-by fix a misleading comment.\n\nChange-Id: Ic5dc2d16a0c2f453d55f0f698f06f30fd355098a\nReviewed-on: https://review.monogon.dev/c/monogon/+/649\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "d13c1c64387ca9a83bb832a3faa5c4b07268d265",
      "tree": "0c0f534db4726e4400486aad25235e8c573d455e",
      "parents": [
        "79a1a8f9dd49afe8e0a2364c4586b8f39525b204"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Mar 30 19:58:58 2022 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Apr 05 10:35:29 2022 +0000"
      },
      "message": "treewide: switch to gomod and bump everything\n\nThis switches version resolution from fietsje to gomod and updates\nall Go dependencies. It also bumps rules_go (required by gVisor) and\nswitches the Gazelle naming convention from go_default_xxx to the\nstandard Bazel convention of the default target having the package\nname.\n\nSince Kubernetes dropped upstream Bazel support and doesn\u0027t check in\nall generated files I manually pregenerated the OpenAPI spec. This\nshould be fixed, but because of the already-huge scope of this CL\nand the rebase complexity this is not in here.\n\nChange-Id: Iec8ea613d06946882426c2f9fad5bda7e8aaf833\nReviewed-on: https://review.monogon.dev/c/monogon/+/639\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "ec19b60842e905a4400e5f8b46b783a54d0a025a",
      "tree": "b4c0d22ef5dc693a21fef4e987d9c82457d816f6",
      "parents": [
        "662182fd732fb523ee76bdc069f603bc378a6d2e"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Mar 09 20:41:31 2022 +0100"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Mar 11 11:00:50 2022 +0000"
      },
      "message": "m/p/supervisor: wait for runnables to exit in TestHarness\n\nThis ensures that tests which aren\u0027t marked as parallel won\u0027t interfere\nwith eachother due to still running runnables (for example, gracefully\nterminating gRPC services listening on some stable port number).\n\nTo implement this, we add the Liquidator, a goroutine responsible for\nmaintaining a minimum viable supervisor processor which records all\nrunnables\u0027 exits. These can then be inspected by the TestHarness to\nensure that all runnables are truly dead.\n\nChange-Id: I436f9608d1e0e04796f7198b641e7d625df885f8\nReviewed-on: https://review.monogon.dev/c/monogon/+/625\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "662182fd732fb523ee76bdc069f603bc378a6d2e",
      "tree": "0dbebeb12a8be1de9f19d31d6c6319e005af749e",
      "parents": [
        "74440ac441be981eb570dc37036e71bf25a04492"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Mar 10 14:06:48 2022 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Mar 10 16:24:34 2022 +0000"
      },
      "message": "m/p/tpm: use secretbox with seal/unseal for larger payloads\n\nNatively the Seal/Unseal operation in the TPM 2.0 specification only\nsupports up to 128 bytes of payload. If you need to seal more than that\nthe specification tells you to generate and seal a key and use that to\nencrypt and authenticate the rest of the data. This CL implements said\nmechanism transparently as part of the Seal and Unseal functions using\na nacl-compatible secretbox as the authenticated encryption primitive.\n\nChange-Id: I0a724b12aae5e5151d103b52ed13b71c864076ab\nReviewed-on: https://review.monogon.dev/c/monogon/+/626\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "5a637b05610cfa0ecc7bfb5a6875f6c5fa98da11",
      "tree": "02db33e64d1574b71582b36c846d0d7bb79312a9",
      "parents": [
        "fb0fb6db2a30038fecea4500ffd4281ad510c1d3"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Feb 18 12:18:04 2022 +0100"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 21 11:58:32 2022 +0000"
      },
      "message": "m/n/c/curator: inject Spans into RPCs, log events\n\nThis uses the new Span/Trace API in the RPC library to inject some spans\ninto all Curator RPC handlers, and converts a bunch of TODO: add logging\ncomments into Trace(ctx).Printf.\n\nChange-Id: Ie480fa7020246b60befa024e000f9e452daabe0c\nReviewed-on: https://review.monogon.dev/c/monogon/+/542\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "d9775a656cb709133407507b1e3a94793dd0ea49",
      "tree": "c836f791e5bd2c3e737f43fce279f0b803384006",
      "parents": [
        "17c4c8bb0feaa0395b31757c8186521ec3c0d723"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Feb 15 13:28:55 2022 +0100"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Feb 15 20:10:48 2022 +0000"
      },
      "message": "m/p/logtree: implement WithAddedStackDepth\n\nThis is a prerequisite to easily pass over trace-based events into\nlogtree. It allows a testing/Test.Helper()-like mechanism to skip some\nstackframes within a call tree to the logger in order to log pertinent\nlog origins instead of a wrapper.\n\nChange-Id: Ida9732f8505ff4a400e689045bea318a185f7983\nReviewed-on: https://review.monogon.dev/c/monogon/+/538\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "26d5225a142057b6eb04cff9ba86173a6682b626",
      "tree": "8b5d8b35d0cd629d467b1e01200c2f12a950a588",
      "parents": [
        "cc078df2124306799c66786833746999259ea792"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 07 15:57:54 2022 +0100"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Feb 08 13:00:46 2022 +0000"
      },
      "message": "m/p/supervisor: implement sub-loggers\n\nThis permits logging from a runnable into a logtree sub-DN that is not\nbacked by an actualy child runnable. For example, \u0027root.foo\u0027 can request\na SubLogger with name \u0027bar\u0027 to emit logs into \u0027root.foo.bar\u0027.\n\nThis is in preparation for logging RPC calls within supervised\nrunnables, but can also come in handy in other situations where we\u0027d\nlike to log to separete \u0027topics\u0027 within a single runnable.\n\nThis breaks 1:1 correspondence between logtree DNs and supervisor DNs.\nAn alternative would be to introduce extra \u0027tags\u0027/\u0027topics\u0027 eg\nroot.foo:bar, but that would require encoding extra logic to the\nlogtree. However, that would perhaps allow us to introduce higher\ncardinality child loggers, with a logger per RPC. We\u0027ll have to consider\nthis at some later point.\n\nLet\u0027s see where this takes us, there\u0027s a chance we\u0027ll roll this\nback if it\u0027s too confusing from an UX point of view.\n\nChange-Id: Ibdee5c2b400bb8fce76b0a4f781914748793db0e\nReviewed-on: https://review.monogon.dev/c/monogon/+/536\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "ba1da9d64dddec392fd2ae8b495d339f4fe41883",
      "tree": "45de7129c77f263721e1a78cde453d11f49899cf",
      "parents": [
        "8ed99764d8bd692f31e84c1ffed8b86df7bca2d6"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Tue Jan 25 19:12:02 2022 +0100"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Mon Jan 31 08:34:28 2022 +0000"
      },
      "message": "m/n/b/mkverity: produce a combined image\n\nmkverity was updated to output a copy of the source image, with Verity\nmetadata appended to it, instead of a separate hash image. This is\nneeded by the upcoming verity rootfs implementation.\n\nChange-Id: I2a311da6851dabf5a09d77551dc3e9d35bcc845f\nReviewed-on: https://review.monogon.dev/c/monogon/+/525\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "8b786897cc419483fa586fd620c3d725d7bd6a95",
      "tree": "1e4f582b8c2272b73970e4727171175320aeab7c",
      "parents": [
        "57d06a7cfa461f367d4362ccecf4a2d66068a1f9"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jan 13 14:21:16 2022 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jan 13 16:46:06 2022 +0000"
      },
      "message": "m/n/core: only warn if no TPM 2.0 has been found\n\nCurrently the TPM is basically unused. The only user is the generator of\nnode and cluster unlock keys, which get fed with both TPM and local entropy\nwhich marginally increases security.\nThis converts a missing TPM 2.0 into a warning and falls back to generating\nboth of those keys purely with Linux entropy, allowing Metropolis to boot\non hardware without a TPM 2.0.\n\nChange-Id: I910f9768ede554e5ec2c3a35079a6799d1ee9c8c\nReviewed-on: https://review.monogon.dev/c/monogon/+/514\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "57d06a7cfa461f367d4362ccecf4a2d66068a1f9",
      "tree": "b7ba9bd74e49faf8965b70bb7a4ee75632ed7b00",
      "parents": [
        "8cde7ae0efa7dbef5d4d17759df5fd0a274db6fc"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jan 13 14:12:27 2022 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Jan 13 15:41:41 2022 +0000"
      },
      "message": "m/n/installer: wait for ESP block device to show up\n\nIn real-world hardware disks do not always show up before the kernel\nlaunches the init process. Wait up to 30s for the ESP to show up before\naborting because of that.\n\nChange-Id: I3f7972e699a06d6f9d0333fe0ae3355ae3ce9c73\nReviewed-on: https://review.monogon.dev/c/monogon/+/513\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "999e1db0130f148ac6e79e1acbb5ee68db1dcb64",
      "tree": "570784da91193e279b2777b809d6c4be55aa120e",
      "parents": [
        "e78a08987e48aa5d9f77954886b7cc544f218638"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Nov 30 20:37:38 2021 +0100"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Dec 09 17:51:43 2021 +0000"
      },
      "message": "m/p/pki: implement CRLs\n\nThis implements revokation and CRL watching functionality in the main\nmetropolis PKI library, in preparation for use in the consensus library\n(which has full CRL support). In the future, this should also be\nextended to be used in Metropolis authentication/authorization.\n\nThis also introduces a breaking change by changing the layout of etcd\nstorage for the PKI library - but we\u0027re pre-MVP, so this is fine.\n\nChange-Id: If0775f5447a76949d8498d8853dd7b9c03e0e6dc\nReviewed-on: https://review.monogon.dev/c/monogon/+/465\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "612a0335e94100137d8d95cbaf43da328bfb2e80",
      "tree": "839adcb5b38bbf92f5bad000b44816499e324fa0",
      "parents": [
        "290436425ac7e9f9c3a9c5a79520b48c623c95bd"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Wed Nov 17 20:04:52 2021 +0100"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Wed Dec 08 17:36:42 2021 +0000"
      },
      "message": "efivarfs, osimage: fix boot entry handling\n\nefivarfs was updated to handle partition UUIDs in the mixed-endian\nformat [1], enabling it to produce correct boot entries. Its interface\nwas changed in the process, leading to further changes in osimage.\n\nIn addition, BootEntry.Marshal will replace any backslash with a\nforward slash in the EFI executable path.\n\n[1] https://en.wikipedia.org/wiki/Universally_unique_identifier#Encoding\n\nChange-Id: Ib8300e01fd1664d0c08bb033b1dc36addb925b20\nReviewed-on: https://review.monogon.dev/c/monogon/+/456\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "02d69e99f0c8ccdd9f53e5bc6c2a5e4ee26cbd83",
      "tree": "55c4d4efbb2c39c822f16cd988f153f6c9ba6694",
      "parents": [
        "8cde8e70f3705cfdb6fa8ab298919df77ad9022d"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Fri Dec 03 17:21:38 2021 +0100"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Mon Dec 06 12:27:04 2021 +0000"
      },
      "message": "m/p/verity: add a missing copyright notice\n\nChange-Id: I330c3bf748c25b44a0616147b430b051bb8a5f99\nReviewed-on: https://review.monogon.dev/c/monogon/+/459\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "43e2107d9b76e8c1df0974c3125878ca64f2bb61",
      "tree": "3dbf072846ba3439240043f6f2f161f02d18ec50",
      "parents": [
        "cb2dcf6c3ffa2d50293faa1708fad975ea237afa"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Fri Oct 08 18:05:29 2021 +0200"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Tue Nov 30 15:09:01 2021 +0000"
      },
      "message": "m/{n,t}/installer: init\n\nThis adds partial implementation of the installer [1].\n\nIt needs to be integrated with the installer bundle to become\nfunctional.\n\n[1] https://github.com/monogon-dev/monogon/issues/44\n\nChange-Id: I6223e50dc02bc1ad1a8d1351b556ecba43f30a2f\nReviewed-on: https://review.monogon.dev/c/monogon/+/408\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "764a2de7911a42d57720911332a12895f0aad707",
      "tree": "dd0e31cee8fb5c753a762462e9eb16f776c3ec73",
      "parents": [
        "e65731049afb6fd49da80f064fa40a28c9d5741d"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Nov 22 16:26:36 2021 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Mon Nov 22 20:39:51 2021 +0000"
      },
      "message": "tree-wide: rewrite ioutil functions to their replacements\n\nThe ioutil package has been deprecated in Go 1.16 [1]. This CL removes\nall our own users of that package and rewrites them to use their\nreplacements in the os package. I initially wanted to do this with a\ngofix but because all replacements were signature-compatible I just\ndid it with a few string replaces and then ran goimports to fix up the\nimports.\n\nI intentionally didn\u0027t rewrite the patches as that would require a\ndifferent process and is IMO of less value.\n\n[1] https://github.com/golang/go/issues/42026\n\nChange-Id: Iac6663a1f1ee49f9b1c6e4b3d97e73f2c3b54a13\nReviewed-on: https://review.monogon.dev/c/monogon/+/449\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "5b60e581bdc1cd420a281e3a110367e310337850",
      "tree": "f5bf40f16039a685243f04ea64e4d279b3ab41ac",
      "parents": [
        "5611447f05c85eb5d0b7f7c5865911b1d560ef66"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Wed Nov 10 19:57:17 2021 +0100"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Thu Nov 18 17:10:32 2021 +0000"
      },
      "message": "m/p/efivarfs: add boot settings manipulation routines\n\nThis adds CreateBootEntry and SetBootOrder.\n\nBoth functions can be used to adjust EFI boot settings by writing to\nEFI variable files exposed through efivarfs.\n\nChange-Id: I0b1364357bcf1e8dabf24ef4046861924306e029\nReviewed-on: https://review.monogon.dev/c/monogon/+/436\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "6cefe518de0b964db90c1b10d57b8be47aa4448e",
      "tree": "c6ad847d934e0769c89c809e91077208f2a3adb3",
      "parents": [
        "531e2c25995933a2e3110f5a53852bdbb5a2a39c"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Mon Nov 08 18:19:42 2021 +0100"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Thu Nov 18 15:13:32 2021 +0000"
      },
      "message": "m/p/efivarfs: import the EFI boot entry data type\n\nThis imports marshal.go from the Softmetal project.\n\nThe complete MIT license under which it was released was added at the\nstart of the file. It was renamed to boot.go which better reflects its\npurpose in its current context. The implementation was adapted for\nMetropolis.\n\nChange-Id: I41d1b10bf5105c52fa7de7695def5b6f3a9b192e\nReviewed-on: https://review.monogon.dev/c/monogon/+/427\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "531e2c25995933a2e3110f5a53852bdbb5a2a39c",
      "tree": "b8b8dd9d56e6aebb9eaab8225e5f31fc999d8db3",
      "parents": [
        "ed86976004c8a9d8d06e787ece3d59b04dba11f9"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Nov 17 20:00:05 2021 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Nov 18 14:12:47 2021 +0000"
      },
      "message": "WORKSPACE: bump Linux to 5.15.2\n\nThis involves ripping out fsinfo because there now is quotactl_fd which\nhandles what we originally used fsinfo for. I also enabled a few new\ninteresting kernel features in the config like the Landlock LSM and\nKFENCE.\n\nChange-Id: Ic0a113893a437b2c8068d06984fdc386f34e6adb\nReviewed-on: https://review.monogon.dev/c/monogon/+/444\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "579015afff6be9d6c87c867b0645f254b9aeb2d8",
      "tree": "9d561def0da0671c67fd6aaea2e128e8dc01b432",
      "parents": [
        "ad5b47d816f50f8f63f65b63861adea811ed85e8"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Nov 18 13:20:20 2021 +0100"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Nov 18 12:34:46 2021 +0000"
      },
      "message": "m/p/supervisor: deflake tests\n\nThis removes some poorly designed test code which attempted to\nsynchronize with a goroutine in a way that\u0027s unsound in Go\u0027s concurrency\nmodel. Instead of doing a non-blocking read and failing if there is no\nsending goroutine, we just block. Test timeouts will, in this case,\ncause the test to error out.\n\nChange-Id: I5338693c578c8eb8b494a1a651a04de6a54df15c\nReviewed-on: https://review.monogon.dev/c/monogon/+/445\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "c6c092be9c8774192867620d1df41c6014e20de1",
      "tree": "ea4b7ca337f1465bfb71298a578cee55977e96a1",
      "parents": [
        "c2e3b1b7f29708fa136e9195645b31fce530c1f0"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Tue Nov 09 13:09:37 2021 +0100"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Tue Nov 16 13:18:01 2021 +0000"
      },
      "message": "m/p/efivarfs: init\n\nThis adds a package supporting efivarfs operations.\n\nChange-Id: Ib0d0713a121efaa0ecdd7e70d8c9d27f4697f958\nReviewed-on: https://review.monogon.dev/c/monogon/+/426\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "8d45a0598ae83b8da89442ce8960e64f065182c7",
      "tree": "76fc262f260152be7be130ed2a078738e03073c2",
      "parents": [
        "52304a8aa84604846e316e28c955b67e68c52f34"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Oct 18 17:24:24 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Nov 03 15:01:37 2021 +0000"
      },
      "message": "m/pkg/event/etcd: implement ranged watchers\n\nThis adds a new mode of operation to etcd Values/Watchers in which a\nrange of etcd keys is watched for updates instead of a single key.\n\nThis allows the implementation of watching a collection of objects\nstored in etcd for updates, eg. the node state in the Curator.\n\nThis has been implemented within the existing API of Event Values, which\nis likely the biggest contention point of this change. An alternative\nwould be to design a separate API for multi-value use, but this should\nallow us to more easily integrate with the existing code. We make use of\nGo\u0027s options-as-varargs paradigm to not break any existing use of this\ncodebase.\n\nSome behaviour of the Get() operation in ranged context is left\nunderdefined, but none of the expected users of this codebase are\nexpected to depend on this. Once the dust settles a bit, we can attempt\nto formalize this more strongly.\n\nChange-Id: I8f84d74332765e52b9bbec04b626d00f05c23071\nReviewed-on: https://review.monogon.dev/c/monogon/+/419\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "ba7bf7dc83c15cbd94a1f71b7992df7d7fc7d752",
      "tree": "b3594e9440c82c099a5be021cabed1ab84a8f789",
      "parents": [
        "1fd64a2ac8675eb532a8a01361c0b7251e8b9754"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Oct 29 16:59:00 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Nov 02 19:49:35 2021 +0000"
      },
      "message": "m/pkg/supervisor: log instances of runnables pending restart\n\nThis can be helpful to debug stuck runnables that cannot restart due to\nsome of their children not restarting yet.\n\nWe should probably also keep a list of \u0027stuck\u0027 runnables and expose them\nvia some introspection API?\n\nChange-Id: Ia6219f6e721987b0746cb5cd0e5f11c4edc01cc6\nReviewed-on: https://review.monogon.dev/c/monogon/+/415\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "1fd64a2ac8675eb532a8a01361c0b7251e8b9754",
      "tree": "819b0c9d2d4f5d22d792a13adc38663a05df7b4e",
      "parents": [
        "d102ebed4e10b33db95f6d6ff0c7fbc7dbb6b614"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Oct 29 16:59:40 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Nov 02 19:49:31 2021 +0000"
      },
      "message": "m/p/logtree/unraw: close fifo on context cancel\n\nThis makes unraw runnables capable of being restarted instead of being\nstuck forever in canceling.\n\nChange-Id: I99d66d25b96644cc6a2da431fd4ca1873e552104\nReviewed-on: https://review.monogon.dev/c/monogon/+/416\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "826a9e94db7345bbb1932fa51049bc6e090391e3",
      "tree": "f602a0ec7c7f6d251be419b6e62014c65080a407",
      "parents": [
        "27b6c4fd36a3e664cb9ed209e498404090d550a2"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Oct 05 21:23:48 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Oct 06 14:49:38 2021 +0000"
      },
      "message": "m/pkg/logtree/unraw: deflake tests\n\nThis test was flaking quite seriously on CI, due to races between the\nsupervisor\u0027s test harness logging a startup message and the test\u0027s own\nlogging exercise logic.\n\nFixing that, I also spotted a rare flake that occurs when a\nNamedPipeReader restart races a write to the named pipe, possible\ncausing the write to be sent to the old but still running\nNamedPipeReader. We fix that in the test, as fixing this in the code\nitself is difficult and the resulting problem (a lost log line in this\nrare race condition) isn\u0027t that bad.\n\nChange-Id: If749798498acb9bf9e6557fd9cbcc441207b9726\nReviewed-on: https://review.monogon.dev/c/monogon/+/345\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "96043bc1cb55b1271b21309b2011d64d2361a0fd",
      "tree": "b4db59595d8635154de74b0a244a6bb28bc52d2d",
      "parents": [
        "3379a5d0ffcd652031c135f2ffe7600272fa0093"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Oct 05 12:10:13 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Oct 05 17:29:16 2021 +0000"
      },
      "message": "*: import reformats\n\nAs caused by my IntelliJ/gofmt locally. We really need to do gofmt\nchecks in CI, especially now that we nearly have the tooling ready for\nit.\n\nChange-Id: Id105ba9ad8a34b8b8e883d52d621d47b0ea888d7\nReviewed-on: https://review.monogon.dev/c/monogon/+/338\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "3379a5d0ffcd652031c135f2ffe7600272fa0093",
      "tree": "6c771e39336d5df9f7d956fadb9578b94b25b174",
      "parents": [
        "6adf8840e846b15b7b34151c3432c886b540f420"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Sep 09 12:56:40 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Oct 05 17:13:53 2021 +0000"
      },
      "message": "m/n/core: factor out gRPC/TLS into rpc and identity libraries\n\nThis is an annoying large change, which started its life as me pulling\nthe \u0027let\u0027s add tests for authentication\u0027 thread, and ended up in\nunifying a whole bunch of dispersed logic under two new libraries.\n\nNotable changes:\n\n - m/n/core/identity now contains the NodeCertificate (now called Node)\n   and NodeCredentials types. These used to exist in the cluster code,\n   but were factored out to prevent loops between the curator, the\n   cluster enrolment logic, and other code. They can now be shared by\n   nearly all of the node code, removing the need for some conversions\n   between subsystems/packages.\n - Alongside Node{,Credentials} types, the identity package contains\n   code that creates x509 certificate templates and verifies x509\n   certificates, and has functions specific to nodes and users - not\n   clients and servers. This allows moving most of the rest of\n   certificate checking code into a single set of functions, and allows\n   us to test this logic thoroughly.\n - pki.{Client,Server,CA} are not used by the node core code anymore,\n   and can now be moved to kubernetes-specific code (as that was their\n   original purpose and that\u0027s their only current use).\n - m/n/core/rpc has been refactored to deduplicate code between the\n   local/external gRPC servers and unary/stream interceptors for these\n   servers, also allowing for more thorough testing and unified\n   behaviour between all.\n - A PeerInfo structure is now injected into all gRPC handlers, and is\n   unified to contain information both about nodes, users, and possibly\n   unauthenticated callers.\n - The AAA.Escrow implementation now makes use of PeerInfo in order to\n   retrieve the client\u0027s certificate, instead of rolling its own logic.\n - The EphemeralClusterCredentials test helper has been moved to the rpc\n   library, and now returns identity objects, allowing for simplified\n   test code (less juggling of bare public keys and\n   {x509,tls}.Certificate objects).\n\nChange-Id: I9284966b4f18c0d7628167ca3168b4b4037808c1\nReviewed-on: https://review.monogon.dev/c/monogon/+/325\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "356b896eb4c3db9608d637c775845a09fc20fd07",
      "tree": "af30addfbc8caba5275febf71847196f13aba8a5",
      "parents": [
        "116c4a69dc90827d82023c362cbc26a17e188787"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Tue Aug 10 17:27:15 2021 +0200"
      },
      "committer": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Tue Sep 28 12:14:43 2021 +0000"
      },
      "message": "m/n/b/mkverity: refactor into VerityEncoder\n\nThe implementation was refactored into a stream-oriented VerityEncoder and exposed for use outside the mkverity tool. In addition, end-to-end tests were provided.\n\nChange-Id: I2d009ca8030d6a86e9d6dbe6d6ae60a3b84d2d74\nReviewed-on: https://review.monogon.dev/c/monogon/+/314\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "d7d6e0284de38cbeeb185ca17c0853b4b2c10ee9",
      "tree": "37e0b443caf904f0b78d423ba6580c1416f5bc11",
      "parents": [
        "9ffa1f9577003ab70a6b483475874f3552d1ccc3"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Sep 01 15:03:06 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Fri Sep 03 11:15:40 2021 +0000"
      },
      "message": "m/n/core/rpc: create library for common gRPC functions\n\nThis is the beginning of consolidating all gRPC-related code into a\nsingle package.\n\nWe also run the Curator service publicly and place it behind a new\nauthorization permission bit. This is in preparation for Curator\nfollowers needing access to this Service.\n\nSome of the service split and authorization options are likely to be\nchanged in the future (I\u0027m considering renaming Curator to something\nelse, or at least clearly stating that it\u0027s a node-to-node service).\n\nChange-Id: I0a4a57da15b35688aefe7bf669ba6342d46aa3f5\nReviewed-on: https://review.monogon.dev/c/monogon/+/316\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "9ffa1f9577003ab70a6b483475874f3552d1ccc3",
      "tree": "a688d02424e8601ed830d12021b5867688d31438",
      "parents": [
        "6bd415920b84bd695038caeb386f1e97184f0c51"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Sep 01 15:42:23 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Sep 02 10:38:15 2021 +0000"
      },
      "message": "m/n/core/curator: authenticated RPC\n\nThis adds authentication middleware (server interceptors) for gRPC\nservices running on the public curator listener.\n\nMost of this code is testing harnesses to start up just the curator\nlistener with enough of a PKI infrastructure copy from a real Metropolis\ncluster to be able to start running tests against GetRegisterTicket.\n\nChange-Id: I429ff29e3c1233d74e8da619ddb543d56bc051b9\nReviewed-on: https://review.monogon.dev/c/monogon/+/311\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "031243f5a276726080a92410f7d3503e5870ed49",
      "tree": "ab582e63dccf71c27e916d23ea24d5f250774d41",
      "parents": [
        "cbeb8a01de2ac264f41b403b6fdc33dca7b5e568"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Aug 24 12:14:27 2021 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Aug 26 16:02:23 2021 +0000"
      },
      "message": "m/p/devicemapper: fix GC closing control fd\n\nThe devicemapper package stored a reference to its control file\ndescriptor as a uintptr after opening it thorugh os.Open(). This is a\nproblem as os.newFile (internally called by os.Open) sets a finalizer\non the os.File which closes the fd as soon as the object is GCed.\nBecause no such reference was kept by the devicemapper package, the GC\ncould end up closing the fd.\n\nTo fix this, the package now keeps the original os.File around and\njust grabs an Fd as necessary.  While we\u0027re at it, let\u0027s make the\ncontrol file descriptor implementation threadsafe.\n\nChange-Id: I6f7e0a398f28c1141627904ccbd2d99dd248bc78\nReviewed-on: https://review.monogon.dev/c/monogon/+/310\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\nVouch-Run-CI: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "b9044c888097757c36933062f27b5f5ee103ee5f",
      "tree": "b07722231a9cf0fd3c0b81486bd637e11cbd7b6b",
      "parents": [
        "3bb23219009a98643a562b1e59e3a4080f422c51"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Aug 24 11:59:47 2021 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Aug 24 16:12:52 2021 +0000"
      },
      "message": "m/p/devicemapper: make parameter encoding part of package\n\nThe DM kernel interface gets a single parameter string for each DM\ntarget in a table but internally the kernel immediately decodes it into\nan argv-style list of string arguments. Because everything needs to do\nit and it can be quite hard to get right, let\u0027s make it part of the\ndevicemapper package. Properly encoding this also means you get\nactionable errors when you pass invalid data instead of weird kernel\nerrors or misbehavior.\n\nChange-Id: I8060871a7459183c0395e5e4e8aac517544b2e87\nReviewed-on: https://review.monogon.dev/c/monogon/+/309\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "a41caacc71418f7307d851fad95991cf80bdcb41",
      "tree": "cbcf9af76f29ccb94b7c2b94d75f1e8eb39cfb3d",
      "parents": [
        "5253884d51cb64c1d1afcb2d7b969f7c2b50b302"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Aug 12 17:00:55 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Aug 19 10:20:55 2021 +0000"
      },
      "message": "m/pkg/pki: forbid External/Managed certificates without name\n\nThis ensures any stored certificates must have a name set - otherwise\nthey end up being created with an empty string as a name, and end up\ncolliding with eachother.\n\nChange-Id: I9e415b6ff89dbda179526920d58e33e638a28cec\nReviewed-on: https://review.monogon.dev/c/monogon/+/286\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "5253884d51cb64c1d1afcb2d7b969f7c2b50b302",
      "tree": "10a6bf03472e9c14da2515ea7755d74bb3f660e6",
      "parents": [
        "99f477412a2e701f89f7698be1dd432adcfff17c"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Aug 11 16:22:41 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Aug 19 10:20:55 2021 +0000"
      },
      "message": "m/pkg/pki: refactor, allow for external certificates\n\nThe pki library supported managing certificates in two modes:\n\n - default, when name !\u003d \"\"\n - volatile/ephemeral, when name \u003d\u003d \"\"\n\nThe difference between the two being that default certificates were\nfully stored in etcd (key and x509 certificate), while volatile\ncertificates weren\u0027t stored at all. However, both kinds needed private\nkeys passed to the pki library.\n\nWe want to be able to emit certificates without having private keys for\nthat certificate, so we end up a third mode of operation: \u0027external\ncertificates\u0027. These are still stored in etcd, but without any\ncorresponding private key.\n\nIn the future we might actually get rid of ephemeral certificates by\nexpanding the logic of external certificates to provide a full audit log\nand revocation system, instead of matching by Certificate Name. But this\nwill do for now.\n\nWe also use this opportunity to write some simple tests for this\npackage.\n\nChange-Id: I193f4b147273b0a3981c38d749b43362d3c1b69a\nReviewed-on: https://review.monogon.dev/c/monogon/+/263\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "257acab41f5a35575ca0f2dbc9568b1bd75d2570",
      "tree": "fdc41d8de424f74525b7a92024c12f00ed8928fa",
      "parents": [
        "1445396219351e711f82d4cebad6e84a46553bda"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Aug 10 12:36:17 2021 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Wed Aug 11 11:28:06 2021 +0000"
      },
      "message": "m/p/devicemapper: Support creating read-only devices\n\nI originally thought this is not going to be needed as R/W control can be done through devicemapper itself, but verity requires a read-only table.\n\nWhile we\u0027re here let\u0027s also add some doc comments to the Target struct.\n\nExisting functionality is covered by existing tests, read-only functionality will be exercised by verity tests once they land.\n\nChange-Id: Ib76bcffb14b5fe40d8d77bd9731b591d0d8cf22f\nReviewed-on: https://review.monogon.dev/c/monogon/+/262\nReviewed-by: Sergiusz Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "2098b98c7deaf9115742cf73071f888e0513cf2f",
      "tree": "6037aec601525299a09d8996f4ebe0c1e4a91674",
      "parents": [
        "79fc1e9fd6ee8777f097ab251b828d82e33b7bad"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 15:13:46 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 15:34:42 2021 +0000"
      },
      "message": "m/pkg/combinectx: reformat\n\nSeems like this slipped past the cracks on original review - we should\nadd CI for this.\n\nChange-Id: I35cc1d14710109d4d2d0a60b573400b65cb7d350\nReviewed-on: https://review.monogon.dev/c/monogon/+/212\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "ebe025936fc86f53e7316f894f54dd6ef9b0a9d7",
      "tree": "0dd0a48c297e69a8bcbe53ef65d3dba7f53961a3",
      "parents": [
        "020b7c53a59f7f4e31976d7b3f08011dadb1c9c4"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 14:23:26 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 13:45:29 2021 +0000"
      },
      "message": "m/pkg/logtree/unraw: implement\n\nThis is another part of the generic external leveled log ingestion\nmechanism. This parts takes care of ingesting external data either by\nexposing an io.Writer or a named pipe on the filesystem from which\nexternal logs are parsed and then inejcted into the logtree.\n\nChange-Id: Ie2263496ca4d50220abdd8e4d37a35730d127319\nReviewed-on: https://review.monogon.dev/c/monogon/+/208\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "020b7c53a59f7f4e31976d7b3f08011dadb1c9c4",
      "tree": "9c6b8ea68b0a4db7d4a8b90b636feff712998235",
      "parents": [
        "f8a8e65685cb621dc7fb39043a6d01caee5dcaf0"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 14:22:28 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 13:45:21 2021 +0000"
      },
      "message": "metropolis/pkg/logtree: allow logging external leveled payloads\n\nThis is in preparation for making the mechanism to ingest external\nlogging more generic (currently we have an ad-hoc solution for klog, but\nwe now also want to implement one for etcd).\n\nChange-Id: I6e6f656e5d83ad22d67a81fbeb87c8d369796e18\nReviewed-on: https://review.monogon.dev/c/monogon/+/207\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "f8a8e65685cb621dc7fb39043a6d01caee5dcaf0",
      "tree": "db6142898e003969628a3ec879f6af77780f8da4",
      "parents": [
        "f0b4da54afc17f4b2b1c31ddb9433ee888aea699"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Tue Jul 06 16:23:43 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 13:36:48 2021 +0000"
      },
      "message": "m/pkg/{logtree,supervisor}: add test helpers\n\nThis adds two functions:\n\n  logtree.PipeAllToStderr\n  supervisor.NewHarness\n\nThese are designed to simplify tests that exercise code which expects to\nbe run as a supervisor runnable and/or have access to a logtree\ninstance.\n\nChange-Id: Ibce77aa4927515af7c273d07ced15215ff456ecc\nReviewed-on: https://review.monogon.dev/c/monogon/+/205\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "35e43d133a16750adfa1683473f5c2648a010b1a",
      "tree": "6aa1e8bcebd03a74b3950128436c5a37268d87c0",
      "parents": [
        "3c885deeda9ab560ee29e94159782ce4323af80e"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Tue Jul 06 13:12:14 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Wed Jul 07 13:24:21 2021 +0000"
      },
      "message": "m/pkg/supervisor: move internal testhelpers\n\nThese are helper functions used for internal supervisor tests. This move\nis in preparation for writing the other kind of \u0027test helers\u0027: ones that\nare used by tests in other libraries when interacting with supervisor\ntypes.\n\nChange-Id: I64efe19b68c7c244ad426167565b0083a1b86fcf\nReviewed-on: https://review.monogon.dev/c/monogon/+/204\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "fac8b2e265836dea105e8463a3a22b189764fd3f",
      "tree": "0f78f138d0095d99a1bf529e29c29cb668a1f0b4",
      "parents": [
        "b9013af7fa0247191099ec1f471a2d751537f545"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Tue May 04 12:23:26 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Tue Jun 08 10:23:53 2021 +0000"
      },
      "message": "m/pkg/event: split out ValueWatch from Value\n\nSummary:\nThis implements a small TODO, letting the etcd Value implementation only\nimplement the Watch part of the interface.\n\nTest Plan: Refactor.\n\nChange-Id: I9ccd73ce4d165182d9588387230e71bcb425ab94\nReviewed-on: https://review.monogon.dev/c/monogon/+/122\nReviewed-by: Lorenz Brun \u003clorenz@nexantic.com\u003e\n"
    },
    {
      "commit": "4166a71f51d9546c1dfd9f99b5fdffcb9301b57b",
      "tree": "a1e5341a9b71f973e1c24734872b0e1cc897f93c",
      "parents": [
        "c89df2f0de65533e0801c6472cc4cee8b13cd761"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon Jun 07 21:58:54 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Tue Jun 08 00:02:06 2021 +0000"
      },
      "message": "m/pkg/combinectx: implement\n\nThis implements combinectx, a Go library for combining two contexts into\na single one. We need this for the new curator logic (where we want to\ncancel RPC calls both when the incoming request gets canceled but also\nwhen leadership status changes), and this functionality has been\nfactored out as a reusable, generic library.\n\nPrior art:\n\n1) https://github.com/golang/go/issues/36503\n   Proposal to add Merge() to context stdlib package. Unimplemented.\n\n2) https://github.com/teivah/onecontext\n   Complex reflect-based logic for arbitrary amount of contexts to join,\n   no functionality to detect which context caused the joined context to\n   be canceled.\n\n3) https://github.com/LK4D4/joincontext\n   No functionality to detect which context caused the joined context to\n   be canceled.\n\nChange-Id: I774607da38b06c192ff0fee133eb258abd500864\nReviewed-on: https://review.monogon.dev/c/monogon/+/123\nReviewed-by: Leopold Schabel \u003cleo@nexantic.com\u003e\n"
    },
    {
      "commit": "c89df2f0de65533e0801c6472cc4cee8b13cd761",
      "tree": "b65e4c12ab0c629dcc311335ad0151e1b19f3bbe",
      "parents": [
        "dcf654592593e4ad897bfb34a5a9238a3223cca4"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Tue Apr 27 15:51:37 2021 +0200"
      },
      "committer": {
        "name": "Sergiusz Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon May 31 16:51:31 2021 +0000"
      },
      "message": "m/pkg/event/etcd: implement etcd-backed Value\n\nThis implements Event Value stored in etcd, with each Value\ncorresponding to a single KV value stored in etcd.\n\nComes with more lines of unit tests than lines of code.\n\nChange-Id: I5514f211ded6640836ed801ddaf1b2fcc31ae552\nReviewed-on: https://review.monogon.dev/c/monogon/+/64\nReviewed-by: Lorenz Brun \u003clorenz@nexantic.com\u003e\n"
    },
    {
      "commit": "216fe7b3ae949376467f626f339423a31ea7da97",
      "tree": "b0fe587b671a76bf6229339825d2a61df7fc847b",
      "parents": [
        "6ebdc418f3c4799c12368e34ea78dc9c9757fb54"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Fri May 21 18:36:16 2021 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Fri May 28 17:54:03 2021 +0200"
      },
      "message": "*: reflow comments to 80 characters\n\nThis reformats the entire Metropolis codebase to have comments no longer\nthan 80 characters, implementing CR/66.\n\nThis has been done half manually, as we don\u0027t have a good integration\nbetween commentwrap/Bazel, but that can be implemented if we decide to\ngo for this tool/limit.\n\nChange-Id: If1fff0b093ef806f5dc00551c11506e8290379d0\n"
    },
    {
      "commit": "68ca5eebd0ccd00a2d60eb42289c64357fb2e83f",
      "tree": "5706f5b4fa8dc44775dbabe24cd577f1d37a0422",
      "parents": [
        "93bba15a0059da200a5d09a2bd7ec5ed5a667c60"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Tue Apr 27 16:09:16 2021 +0200"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Tue May 11 12:09:33 2021 +0200"
      },
      "message": "m/pkg/event: move MemoryValue to subpackage\n\nThis keeps metropolis/pkg/event as a pure interface package, and\nmoves the memory-backed implementation to a subpackage.\n\nTest Plan: Refactor, coevered by tests.\n\nX-Origin-Diff: phab/D764\nGitOrigin-RevId: 1337bf55a7752293791b3efe8648bbf5f6e6e9e1\n"
    },
    {
      "commit": "9956e72c6c0b4f6436dc9493bc213965ee0cc191",
      "tree": "7842ac67432e3a187dda6a2dcb46d11088934159",
      "parents": [
        "dca59d924dac4345099e5acd99405b5451d29cdb"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@nexantic.com",
        "time": "Wed Mar 24 18:48:55 2021 +0100"
      },
      "committer": {
        "name": "Leopold Schabel",
        "email": "leo@nexantic.com",
        "time": "Tue Apr 13 11:03:53 2021 +0200"
      },
      "message": "Add Loop Device package\n\nThis adds Loop device support in our Linux kernel and adds a Go package for working with them.\nIt also drive-by adds a pre-mounted tmpfs to ktest as that is quite useful in a lot of situations.\n\nTest Plan: Comes with ktests.\n\nX-Origin-Diff: phab/D745\nGitOrigin-RevId: fa06bcdddc033efb136f56da3b4a91159273bf88\n"
    },
    {
      "commit": "056042962060369bd7607ecfea51c515fc3a8140",
      "tree": "86a6dbf7b1781ed2f5baf332938d4e8211353112",
      "parents": [
        "0ab4edafde3eb22e111e75d6aa5e29faa92c30ca"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Fri Mar 12 17:47:21 2021 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Fri Mar 12 17:47:21 2021 +0100"
      },
      "message": "m/node/kubernetes: parse klog output from services\n\nThis translates Kubernetes\u0027 logging ingo logging that we can\nquery/filter more easily.\n\nTest Plan: We don\u0027t test resulting logs from the system, and I\u0027m not sure we should?\n\nX-Origin-Diff: phab/D716\nGitOrigin-RevId: ba3f42b9a4e3172bf058bd7dce4283f50dc8e69d\n"
    }
  ],
  "next": "0ab4edafde3eb22e111e75d6aa5e29faa92c30ca"
}
