)]}'
{
  "log": [
    {
      "commit": "85011c479f11ce1761b6f9fc0d3cb8c143687221",
      "tree": "a626eb6f879aa2d55927d91b30be5ac32a241ab5",
      "parents": [
        "8eff1ed9100ed14e455f5438101037d6320474bd"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 30 15:14:16 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 30 15:14:16 2026 +0200"
      },
      "message": "docs: Document XKB keymap conversion\n\nExplain how loadkeys can use XKB layout descriptions as input for Linux\nvirtual console keymaps when kbd is built with libxkbcommon support.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "8eff1ed9100ed14e455f5438101037d6320474bd",
      "tree": "fe241dcded1861ddd3ce83c5c50048c8d3fa3c87",
      "parents": [
        "7ca0bf04622a03eb0398ce88a2a94ea438c5d6f3"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun May 24 17:32:42 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon May 25 09:23:43 2026 +0200"
      },
      "message": "v2.10.0\n\nutils:\n+ openvt: make -u process matching more conservative.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "7ca0bf04622a03eb0398ce88a2a94ea438c5d6f3",
      "tree": "1c27a4398845738ebd7eeecb822bfe16ba1865d8",
      "parents": [
        "78d5ae119742e87baa7dbe0f5c4107e7533fd698"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun May 24 17:31:34 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon May 25 09:14:59 2026 +0200"
      },
      "message": "po: Update translations (from translationproject.org)\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "78d5ae119742e87baa7dbe0f5c4107e7533fd698",
      "tree": "d078b864645050bd400f08550a5889965e81e06a",
      "parents": [
        "433c3c7f7ec72ddc66860b34b8f0d1f68bd1a184"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue May 12 10:20:50 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue May 12 10:20:50 2026 +0200"
      },
      "message": "openvt: make -u process matching more conservative\n\nThe -u mode relies on the current VT owner to decide which user should\nbe used for the new login session. Make that check stricter by requiring\na matching process owner and controlling terminal instead of relying on\nthe ownership of an inherited file descriptor.\n\nAlso reject root as a pre-authenticated target and document the tighter\nbehavior in the man page.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "433c3c7f7ec72ddc66860b34b8f0d1f68bd1a184",
      "tree": "207e60a5c634efacad8f53efa83b5c7612f21c3c",
      "parents": [
        "8dbe02cb90976f565edb7bc381f0d41ff0fc4038"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 18:47:28 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun May 10 12:37:52 2026 +0200"
      },
      "message": "v2.10-rc1\n\nkeymaps:\n+ Add Backtab keysym and update keymaps to use it for Shift+Tab.\n+ Add keymap for Norwegian Apple ISO keyboard.\n+ Adjust Swiss German keyboard mappings.\n\nlibkeymap:\n+ Add API to validate keysyms.\n+ Add XKB-aware symbol aliases through the normal synonym tables.\n+ Fix compose table upload limit handling.\n\nutils:\n+ loadkeys: Add support for generating console keymaps from XKB.\n+ loadkeys: Add XKB compose import support.\n+ loadkeys: Add support for XKB group switching, modifier handling,\n  virtual console switching and keypad/editing remaps.\n+ loadkeys: Add diagnostics for XKB keysym coverage.\n\ncontrib:\n+ Add an XKB keysym coverage diagnostic tool.\n+ Add a VT layout indicator using keyboard LED lock triggers.\n\nbuild:\n+ Add a project-level coverage-report target.\n+ Keep coverage flags and gcov runtime linking consistent.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "8dbe02cb90976f565edb7bc381f0d41ff0fc4038",
      "tree": "cf42d915ec2e410e0a34276c972dce7b347d0ebd",
      "parents": [
        "49ab4915f1220ec029f4e18f7abebe95a4d5618e"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun May 10 12:37:17 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun May 10 12:37:52 2026 +0200"
      },
      "message": "CI: add packages for xkb tests\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "49ab4915f1220ec029f4e18f7abebe95a4d5618e",
      "tree": "c8a10fb31fa0292818d9acb5296cc31a19fc204f",
      "parents": [
        "dd838555e69c2bfd37d04f7315b8aee9bff075d6"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun May 10 11:42:45 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun May 10 11:43:07 2026 +0200"
      },
      "message": "xkb: fix xkbcommon detection\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "dd838555e69c2bfd37d04f7315b8aee9bff075d6",
      "tree": "dd187e594b5f654c5b5291621f8c37c418dde7f7",
      "parents": [
        "1e8ae79bc6e408a2092fa24b7b11c4d59eb46457"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 18:45:54 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 18:45:54 2026 +0200"
      },
      "message": "Update gitignore\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "1e8ae79bc6e408a2092fa24b7b11c4d59eb46457",
      "tree": "1dc353c0c9e63e4b7531b60708a069f44662d766",
      "parents": [
        "b6d77d6be520d666c666cb5e8df6a4ecdda4f46a"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 18:44:35 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 18:44:35 2026 +0200"
      },
      "message": "fixup! po: Update translations (from translationproject.org)\n"
    },
    {
      "commit": "b6d77d6be520d666c666cb5e8df6a4ecdda4f46a",
      "tree": "dba91aff18276b3901e3e09d7db4d2444b909965",
      "parents": [
        "d1a43f29fd29a783b4b044a77ae5bdc86f8484c4"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 18:30:58 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 18:30:58 2026 +0200"
      },
      "message": "build: test fortify redefinition under optimization\n\nSome toolchains, including gentoo configurations, define _FORTIFY_SOURCE\nthrough compiler specs only when optimization is enabled.\n\nAX_ADD_FORTIFY_SOURCE checked whether _FORTIFY_SOURCE was already\ndefined before the project added its normal -O2 flag. That made the\nconfigure test run in a different mode from the real build: the test saw\nno existing fortify definition and added -D_FORTIFY_SOURCE\u003d3 to\nCPPFLAGS, while the later optimized build also got toolchain-provided\ndefinition. The result was a repeated warning on every compile:\n\n    warning: \u0027_FORTIFY_SOURCE\u0027 redefined\n\nRun the probe with -O2 and include a system header so compiler-provided\nfortify is visible during the check. If the toolchain already defines it\nin optimized builds, leave CPPFLAGS unchanged instead of adding another\ndefinition.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "d1a43f29fd29a783b4b044a77ae5bdc86f8484c4",
      "tree": "7940fda634c949470153b9c70646909bceae89ee",
      "parents": [
        "427e682ff3c976517aec58ed04b9af484feefabd"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 14:33:28 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 14:33:28 2026 +0200"
      },
      "message": "po: Update translations (from translationproject.org)\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "427e682ff3c976517aec58ed04b9af484feefabd",
      "tree": "6554e4e6d961006cc6995be1bbf797b4cc023813",
      "parents": [
        "7719a6e7d81e162d06652eafb3c295043763ba08"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 13:45:08 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 13:45:08 2026 +0200"
      },
      "message": "tests: fix check without xkb support\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "7719a6e7d81e162d06652eafb3c295043763ba08",
      "tree": "9e9f2756f82fd2c9249c278d2c0301f845589776",
      "parents": [
        "32810105f55a289c80ed77a0b7bb756a73d5791d"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri May 08 18:24:57 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat May 09 10:06:06 2026 +0200"
      },
      "message": "nls: mark libkbdfile and XKB diagnostics for translation\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "32810105f55a289c80ed77a0b7bb756a73d5791d",
      "tree": "3912c5e0087c49c2ceb0e89904fa68c57a1dc85d",
      "parents": [
        "50e3189fb21423964d314a5b21b8b0e6017a7e8d",
        "3d56314ce4342cf975978ad2f36c63f8fd81d994"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed May 06 18:18:33 2026 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed May 06 18:18:33 2026 +0200"
      },
      "message": "Merge branch \u0027xkb\u0027\n\nInitial support for XKB has been added to loadkeys. The idea is to let\n`loadkeys` build a linux console keymap directly from xkb settings such\nas model, layout, variant and options.\n\n* xkbcommon-v4: (51 commits)\n  contrib: add a VT layout indicator driven by keyboard LED locks\n  xkbsupport: drop noisy keycode range warning\n  libkeymap: clamp compose uploads below MAX_DIACR\n  xkbsupport: probe semantic modifier masks across XKB layouts\n  tests: stress mixed XKB group semantics in one keymap\n  xkbsupport: simplify compose ordering helpers\n  tests: cover XKB group select and VT remaps explicitly\n  xkbsupport: separate semantic actions from VT approximations\n  xkbsupport: derive semantic modifier masks from the compiled XKB map\n  tests: add an xkb keyword for xkbsupport coverage\n  xkbsupport: document why modifier release stays a final pass\n  xkbsupport: stop folding LevelFive into Alt tables\n  xkbsupport: ignore prefer-unicode during lexical XKB lookup\n  tests: refresh XKB snapshots after Shift semantics fix\n  xkbsupport: guard _GNU_SOURCE against redefinition\n  xkbsupport: keep Shift release and CapsLock semantics stable\n  xkbsupport: canonicalize equivalent masks per XKB level\n  contrib: add an XKB keysym coverage diagnostic tool\n  xkbsupport: restore semantic handling for Delete keypad aliases\n  tests: cover multi-symbol XKB levels and renumber autotest cases\n  ...\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "3d56314ce4342cf975978ad2f36c63f8fd81d994",
      "tree": "3912c5e0087c49c2ceb0e89904fa68c57a1dc85d",
      "parents": [
        "9de5931e357278ce09623582e423aa970593dd3e"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue Mar 24 10:43:36 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue Mar 24 10:43:36 2026 +0100"
      },
      "message": "contrib: add a VT layout indicator driven by keyboard LED locks\n\nDebugging XKB-derived console layouts is awkward once group switching is\nimplemented through the VT lock bits. dumpkeys shows the loaded tables,\nbut it does not show which group state is active right now, and probing\nby typing sample letters is slow and error-prone.\n\nAdd a small proof-of-concept helper that infers the current layout from\nthe kbd-shiftllock and kbd-shiftrlock LED triggers and displays the\nresult directly on the active virtual console. The helper auto-detects\nusable LED devices, binds the required triggers, and restores their\nprevious settings on exit.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "9de5931e357278ce09623582e423aa970593dd3e",
      "tree": "d5bd3654ee526bb468dc4e3b27085096a9215b5a",
      "parents": [
        "2ff8eac5b6d01b163b0c50f19ae15b3a732c05d5"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 23 15:55:08 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 23 15:55:08 2026 +0100"
      },
      "message": "xkbsupport: drop noisy keycode range warning\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "2ff8eac5b6d01b163b0c50f19ae15b3a732c05d5",
      "tree": "65dc9270a6a54364f03d5023116ff635fc135e95",
      "parents": [
        "9e419a3320e61eca01d5056e42246a7069d674d4"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 23 15:46:44 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 23 15:46:44 2026 +0100"
      },
      "message": "libkeymap: clamp compose uploads below MAX_DIACR\n\nBoth KDSKBDIACR and KDSKBDIACRUC reject counts greater than or equal to\nMAX_DIACR, so hitting the limit still turns an oversized compose table\ninto EINVAL instead of loading the largest acceptable prefix.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "9e419a3320e61eca01d5056e42246a7069d674d4",
      "tree": "14666b5c6243e7563e455a4ae030165514908df5",
      "parents": [
        "0b0c26ddb7025251e70c9ec0d6a1e03bc4ec9160"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 23 13:54:33 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 23 13:54:33 2026 +0100"
      },
      "message": "xkbsupport: probe semantic modifier masks across XKB layouts\n\nThe semantic modifier mask discovery code assumed that keys such as\nISO_Level3_Shift would always be visible on layout 0. That is too narrow\nfor compiled XKB maps.\n\nSome rulesets expose the effective LevelThree chooser only in another\ngroup. In that case xkbsupport failed to find the modifier mask at all,\nand later treated reachable third-level symbols as if they had no safe\nkernel-table representation.\n\nlibxkbcommon does not expose a direct query for \"which real modifier\nmask implements this semantic keysym in the compiled keymap\", so derive\nit indirectly by probing candidate keys through xkb_state. Extend that\nprobe across all layouts, select the probed layout before pressing the\nkey, and keep the simplest resulting mask as the canonical one.\n\nAdd a local XKB fixture and a regression test that places the relevant\nLevelThree path in the second group and verifies that third-level\nsymbols remain reachable after conversion.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "0b0c26ddb7025251e70c9ec0d6a1e03bc4ec9160",
      "tree": "ca343ef360d6e6c42b7fed5e6b75646953e5a00b",
      "parents": [
        "67ceb3791c54a5b3d9a4948764561946c8d3440b"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 18:52:48 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 23 08:59:17 2026 +0100"
      },
      "message": "tests: stress mixed XKB group semantics in one keymap\n\nThe current XKB coverage checks individual layouts and a few two-group\ncombinations well, but it still leaves a gap around mixed multi-group\nmaps.\n\nThat gap matters because xkbsupport collapses up to four XKB layouts\ninto the kernel group tables, and failures there are more likely to show\nup only when very different symbol families and level semantics coexist\nin one import. A regression can keep the simple us,ru cases working\nwhile still dropping late-group symbols, Cyrillic aliases, polytonic\nGreek levels, or dead-key bindings once the map grows more diverse.\n\nAdd a focused four-layout stress test that combines us(altgr-intl),\nru(srp), gr(polytonic), and de(neo) in one keymap and checks that each\ngroup still keeps a characteristic binding. This gives xkbsupport a\ntargeted regression test for mixed Latin, Cyrillic, Greek, AltGr, and\ndead-key semantics without relying on another large snapshot.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "67ceb3791c54a5b3d9a4948764561946c8d3440b",
      "tree": "1f934c79197303f1bf0e2c528642c7224d7abeb5",
      "parents": [
        "a2e549aac14fff1f44f4935855f55a8ab8969aa7"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 13:43:38 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 18:07:31 2026 +0100"
      },
      "message": "xkbsupport: simplify compose ordering helpers\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "a2e549aac14fff1f44f4935855f55a8ab8969aa7",
      "tree": "29a453578b6409775883bdcd23e64de6663ddddd",
      "parents": [
        "2388299fec1e6bfd971b9f52639fa38a4836baa5"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 13:35:58 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 13:35:58 2026 +0100"
      },
      "message": "tests: cover XKB group select and VT remaps explicitly\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "2388299fec1e6bfd971b9f52639fa38a4836baa5",
      "tree": "f76356023ab8d267fb9c4635e6fa79f8887bfce8",
      "parents": [
        "03376e26135d37adf241ac6ef3a0fc7d7b8c33bc"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 13:28:30 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 13:28:30 2026 +0100"
      },
      "message": "xkbsupport: separate semantic actions from VT approximations\n\nNot every XKB-only keysym is the same kind of mapping.\n\nSome symbols correspond to direct semantic actions that the kernel\nkeymap model can represent reasonably well, such as modifiers, level\nchanges, and group switching. Others are already approximations on the\nLinux VT side, such as mapping Delete to Remove, collapsing keypad\nnavigation aliases to keypad digits, or turning VT switching symbols\ninto Console_* actions.\n\nKeeping both classes in one flat lookup table makes the intent harder to\nreview and makes it easier to treat policy decisions as if they were\nplain semantic equivalents.\n\nSplit the semantic remap table into direct semantic actions and Linux\nVT-specific approximations, and document why the semantic path is looked\nup first. This keeps the current behavior unchanged while making the\npolicy boundary in xkbsupport easier to see.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "03376e26135d37adf241ac6ef3a0fc7d7b8c33bc",
      "tree": "42c8addab6573a4b21d38181c419b6c793d2ebb5",
      "parents": [
        "31e1397e45a33422d2cbb31f68951ba3ee15fa4c"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 12:26:42 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 22 12:26:42 2026 +0100"
      },
      "message": "xkbsupport: derive semantic modifier masks from the compiled XKB map\n\nThe XKB importer still treated several modifier semantics as if they\nwere tied to fixed real ModN bits. That is not a safe assumption.\n\nxkb_keymap_key_get_mods_for_level() reports masks in the compiled\nkeymap\u0027s real modifier encoding, not in a stable semantic namespace.\nThe usual xkeyboard-config convention often makes it look as if\nLevelThree means Mod3 and LevelFive means Mod5, but alternate rulesets\nare free to bind those semantics differently. The test XKB data does\nexactly that: LevelThree is reachable through one real modifier bit,\nwhile LevelFive uses another.\n\nThat meant xkbsupport could interpret a correct level mask with the\nwrong kernel meaning. In practice the importer either dropped reachable\nthird-level symbols or merged them into the wrong kernel tables because\nit was decoding the mask by hardcoded Mod3/Mod5 expectations instead of\nthe compiled keymap\u0027s actual modifier bindings.\n\nThe failure was visible in the Serbian alias coverage test. The\nru(srp) layout exposes Serbian letters on the third level, for example:\n\n    AD01 level 3 -\u003e U+0458\n    AD06 level 3 -\u003e U+045A\n    AC08 level 3 -\u003e U+0459\n    AC09 level 3 -\u003e U+045F\n    AC10 level 3 -\u003e U+0452\n    AB02 level 3 -\u003e U+045B\n\nThese are expected to land in the same kernel tables that xkbsupport\nuses for XKB third-level access. With the hardcoded Mod3/Mod5 decoding,\nthose bindings disappeared from the imported keymap and\nlibkeymap-test64 failed with:\n\n    Missing keycode 16 in table 8\n\nThe same underlying mistake also changed the shape of the exported XKB\ndump snapshots. Once the semantic modifier mask was decoded correctly,\nthe converter again emitted the expected third-level Alt/Shift+Alt\ntables, so the stored dump fixtures had to be refreshed as well.\n\nFix this by deriving semantic modifier masks from the compiled XKB\nkeymap itself instead of from fixed ModN names:\n\n- Shift, Lock, and Control still use the named real modifiers.\n- Alt, LevelThree, and LevelFive are resolved from the effective\n  modifier state produced by their semantic keys.\n\nThis keeps the importer aligned with actual XKB semantics even when a\nruleset binds LevelThree and LevelFive to unexpected real modifiers, and\nit restores third-level symbol import for layouts such as ru(srp).\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "31e1397e45a33422d2cbb31f68951ba3ee15fa4c",
      "tree": "3b8ac4b462d29197547df421fd333be2fcdffe22",
      "parents": [
        "1a8e82a8654c132dc6841a10d0fe8fb1989f0442"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 23:49:59 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 23:49:59 2026 +0100"
      },
      "message": "tests: add an xkb keyword for xkbsupport coverage\n\nThe XKB conversion tests are useful as a focused regression set, but\nthey could only be selected indirectly through broader libkeymap\nkeywords.\n\nTag the xkbsupport-related tests with a dedicated xkb keyword and\nrefresh the XKB dump snapshots to match the current converter output\nafter the recent LevelFive handling change.\n\nThis makes `make -C tests check CHECK_KEYWORDS\u003d\u0027xkb\u0027` a reliable way to\nrun the whole XKB import test set without tripping over stale expected\ndumps.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "1a8e82a8654c132dc6841a10d0fe8fb1989f0442",
      "tree": "b200b4b931027e9819ddc88aeb82ad4ab6bed558",
      "parents": [
        "10a55ab3d3412cc93f3052c220fe73230d5bd92c"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 23:35:06 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 23:35:06 2026 +0100"
      },
      "message": "xkbsupport: document why modifier release stays a final pass\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "10a55ab3d3412cc93f3052c220fe73230d5bd92c",
      "tree": "1942289751f0bcc80a7dbec22816cd4a1c1e201d",
      "parents": [
        "2f9b59fea989aa4d18f3dbf5a0fe63615cd7f02c"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 23:07:48 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 23:07:48 2026 +0100"
      },
      "message": "xkbsupport: stop folding LevelFive into Alt tables\n\nThe Linux VT has no separate modifier state for XKB LevelFive.\n\nMapping Mod5 and LevelFive to Alt makes the converter silently merge\nfifth-level bindings into the Alt tables, which changes the meaning of\nthe imported layout instead of reporting that the state cannot be\nrepresented. A real LevelFive layout can then look valid in the kernel\ndump while producing the wrong bindings.\n\nTreat LevelFive-only masks like the other unsupported XKB modifiers and\nskip them during import. Add a regression test with a local eight-level\nfixture to make sure fifth-level symbols no longer appear as Alt\nbindings.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "2f9b59fea989aa4d18f3dbf5a0fe63615cd7f02c",
      "tree": "d75f5665359b9f6329999a9406d644ca935d0251",
      "parents": [
        "e0ebb800895c3d194747c3d79ccb83da63ff879e"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 22:48:49 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 22:48:49 2026 +0100"
      },
      "message": "xkbsupport: ignore prefer-unicode during lexical XKB lookup\n\nXKB import needs a stable lookup in the kernel key symbol namespace.\n\nUsing TO_AUTO for lexical symbol resolution lets LK_FLAG_PREFER_UNICODE\nchange how ordinary XKB names are interpreted. That makes the result\ndepend on parser mode and can turn shifted Latin bindings back into the\nwrong symbol class, undoing the recent CapsLock and Shift handling fix.\n\nResolve lexical XKB names explicitly in the 8-bit kernel code space and\ncover that behavior with a regression test that enables\nLK_FLAG_PREFER_UNICODE while importing a normal XKB layout.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "e0ebb800895c3d194747c3d79ccb83da63ff879e",
      "tree": "69caa76148f2d1afec329c803cdd83d52189d836",
      "parents": [
        "f6bc58602d826d37673e38b90467774ac499bc4d"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 22:46:13 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 22:46:13 2026 +0100"
      },
      "message": "tests: refresh XKB snapshots after Shift semantics fix\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "f6bc58602d826d37673e38b90467774ac499bc4d",
      "tree": "be11e18d319d07f7009c615c3e03760585ea58c7",
      "parents": [
        "9d15ac84518e23332a56d9c39954d6ab56cb66c5"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 19:50:00 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 19:50:00 2026 +0100"
      },
      "message": "xkbsupport: guard _GNU_SOURCE against redefinition\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "9d15ac84518e23332a56d9c39954d6ab56cb66c5",
      "tree": "774031ca006c08797b0dcf138e7df4258b6629cd",
      "parents": [
        "0f3fd3c619f514765fac84e12890f6637d806555"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 19:39:58 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 19:39:58 2026 +0100"
      },
      "message": "xkbsupport: keep Shift release and CapsLock semantics stable\n\nXKB conversion was generating kernel bindings that looked reasonable in\na dump, but still did not match how the Linux VT actually resolves key\nstate.\n\nFor ASCII letters, the lexical lookup path normalized keysyms through\nthe Unicode conversion path and could turn an explicit shifted Latin\nsymbol into KT_LETTER. That made dumps come out as \"+a +A\" and let\nCapsLock invert an already-shifted binding. The result was wrong case\nhandling for ordinary Latin keys.\n\nModifier keys had a second problem. The VT resolves key release using\nthe current modifier state, so a modifier key must remain bound in the\ntables reachable while it is still active. Leaving pure modifiers\nundefined in those tables turns release into VoidSymbol and makes\nmodifiers such as Shift appear to stick.\n\nSwitch lexical XKB lookup to a public libkeymap code-space conversion\nAPI, mark only the non-shifted Latin binding as CapsLock-able, and\nmirror pure modifier bindings into already-allocated tables so key\nrelease remains visible to the VT state machine.\n\nThis keeps Latin keys at \"+a A\" instead of \"+a +A\" and prevents Shift,\nControl, and Alt from getting stuck after XKB import.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "0f3fd3c619f514765fac84e12890f6637d806555",
      "tree": "eaa015544a7e2cf3c60d160d8e540fd3e4d9454a",
      "parents": [
        "c7a3ffc9df08c68166f86dfa1c6f2693f6819ad2"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 18:22:33 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 21 18:22:33 2026 +0100"
      },
      "message": "xkbsupport: canonicalize equivalent masks per XKB level\n\nOlder XKB key types can preserve modifiers while still resolving to the\nsame symbol. That makes libxkbcommon report several equivalent modifier\nmasks for one level.\n\nThe converter used every representable mask it saw. In the kernel keymap\nmodel those masks compete for the same table slots, so a plain function\nkey could claim Ctrl+Alt before the VT switching level was processed.\nWith legacy CTRL+ALT types this broke XF86_Switch_VT_* import and moved\nor dropped Console_* bindings.\n\nPick only the simplest representable mask for each XKB level and treat\nit as the canonical kernel binding. This keeps Ctrl+Alt+Fn on the VT\nswitching symbols while leaving the normal function-key levels in their\nown tables.\n\nAdd a regression test with a local legacy CTRL+ALT type fixture so the\nold preserve-modifier behaviour stays covered.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "c7a3ffc9df08c68166f86dfa1c6f2693f6819ad2",
      "tree": "5213cd960e0b3ca703410e0db2e79713c931f89d",
      "parents": [
        "9b14fcddb45d97107e0b20cab6f408f684136d0e"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 14:39:46 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 14:39:46 2026 +0100"
      },
      "message": "contrib: add an XKB keysym coverage diagnostic tool\n\nThe XKB import path now relies on a layered resolver with separate\nsemantic, lexical, unicode and hex fallbacks, but there is no simple way\nto see which path a given keysym actually takes. That makes cleanup and\nreview of xkbsupport changes harder than necessary, especially when a\nrefactor shifts symbols between semantic handling and normal libkeymap\nlookup.\n\nAdd a small developer tool that scans the libxkbcommon keysym header and\nclassifies each explicit keysym according to the current xkbsupport\nresolution path. This gives a quick coverage report for semantic, name,\nunicode, hex and unresolved cases and makes it much easier to spot\nunexpected gaps in the converter without reintroducing a separate XKB\ntranslation table.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "9b14fcddb45d97107e0b20cab6f408f684136d0e",
      "tree": "e1534d0c5893b126dcef0c95e3bb82bfc3993f46",
      "parents": [
        "62900d0fa9bca8e428768024d8f7b6d5f991e06d"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:59:54 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:59:54 2026 +0100"
      },
      "message": "xkbsupport: restore semantic handling for Delete keypad aliases\n\nThe split between lexical aliases and semantic XKB mappings accidentally\ndropped a few keys that do not have safe direct ksym equivalents in\nlibkeymap. That leaves Delete resolving to ASCII DEL instead of the\nkernel\u0027s Remove action, and it loses the keypad aliases that XKB uses\nfor the center and delete keys when NumLock is off.\n\nHandle Delete, KP_Begin and KP_Delete on the semantic path so the\nconverted keymap keeps the expected editing and keypad behavior instead\nof falling back to unrelated lexical names. Extend the multi-symbol XKB\nregression test to cover those cases directly.\n\nFixes: 8e91af9d (\"xkbsupport: keep lexical aliases off the semantic XKB path\")\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "62900d0fa9bca8e428768024d8f7b6d5f991e06d",
      "tree": "acd376a9f3c7f96bc4ea6929540420dba7792395",
      "parents": [
        "8e91af9d4cbeca6dd4606c2f7aeac4fbec32a654"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:38:12 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:38:12 2026 +0100"
      },
      "message": "tests: cover multi-symbol XKB levels and renumber autotest cases\n\nThe current XKB fixtures never exercise levels that resolve to more than\none keysym, even though libxkbcommon supports that case and xkbsupport\ncurrently handles it by taking the first symbol. Without a dedicated\ntest, that behavior is easy to change accidentally and any failure would\nonly show up when an unusual keymap reaches users.\n\nAdd a focused XKB test layout with multi-symbol levels and verify that\nthe converted kernel keymap still comes out usable by keeping the first\nkeysym for each affected level.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "8e91af9d4cbeca6dd4606c2f7aeac4fbec32a654",
      "tree": "8bc0e1bcfac05daccba8a2fea7abb7531f81a1cb",
      "parents": [
        "628370f6006b1ca1b827198c70d72eee0da92ede"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:27:45 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:27:45 2026 +0100"
      },
      "message": "xkbsupport: keep lexical aliases off the semantic XKB path\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "628370f6006b1ca1b827198c70d72eee0da92ede",
      "tree": "96c37495b759efd555040bb4b84bd17d4623124c",
      "parents": [
        "5f122796ec3ee6ce56de43ec4a070fddafac6e34"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:00:41 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 13:00:41 2026 +0100"
      },
      "message": "xkbsupport: drop the external XKB names table\n\nThe XKB import path no longer needs a separate xkbtrans dictionary to\ntranslate symbol names before they reach libkeymap. Keeping that extra\ndata file and its loader around now only preserves a second resolution\npath, forces the tests to carry explicit table setup, and leaves install\nlogic in place for data that is no longer part of the real conversion\nmodel.\n\nRemove the external translation table and resolve XKB names through the\nnormal libkeymap paths only. Keep the remaining digit aliases in the\nsynonym layer so Meta_0..9 bindings continue to match the existing\nkernel dumps, and simplify the XKB tests to verify import directly\nwithout LK_XKB_TRANSLATION_TABLE.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "5f122796ec3ee6ce56de43ec4a070fddafac6e34",
      "tree": "03b7d086ba42fcf844e3b193562984e20612211e",
      "parents": [
        "926f5fe364b8010109253793fdf837d8d95f54b6"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 12:19:06 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 12:19:06 2026 +0100"
      },
      "message": "libkeymap: fold Greek XKB symbol remnants into synonyms\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "926f5fe364b8010109253793fdf837d8d95f54b6",
      "tree": "4562c0dfcda5973475c934e8d395607ee63a8467",
      "parents": [
        "07e7b2c2b4dacdf9cfc7e5b585a9c1b3e3b4de5d"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 12:12:49 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 12:12:49 2026 +0100"
      },
      "message": "libkeymap: resolve Greek XKB aliases through symbol synonyms\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "07e7b2c2b4dacdf9cfc7e5b585a9c1b3e3b4de5d",
      "tree": "b8e4bea850048e514e128f3d030dfd2ee495e37c",
      "parents": [
        "a1f2323c50d7609a636941f60c06dd63b2a5a33e"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 12:04:42 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 12:04:42 2026 +0100"
      },
      "message": "tests: cover Serbian XKB aliases through Unicode fallback\n\nThe XKB names table still carried Serbian_* aliases even though the\ncurrent import path can already resolve those symbols from their Unicode\nvalues. Leaving them in the table hides which translations are still\nneeded and makes the remaining legacy mappings harder to justify.\n\nDrop the Serbian_* rows from data/xkbtrans/names and add a regression\ntest that removes only those aliases before importing ru(srp). This\nkeeps the check focused on the current question and verifies that the\nexisting Unicode-based path still produces the expected kernel symbols\nfor JE, LJE, NJE, DZE, DJE and TSHE without depending on the external\ntranslation table.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "a1f2323c50d7609a636941f60c06dd63b2a5a33e",
      "tree": "fcca1ea0849015c9095824634ecdbb94f7b145ff",
      "parents": [
        "362ececebbf05156f24aeb4a4c5f6120bb721626"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 11:53:20 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 11:53:20 2026 +0100"
      },
      "message": "tests: cover Cyrillic XKB aliases through Unicode fallback\n\nThe XKB names table still carried Macedonia_* and Ukrainian_* aliases\neven though those symbols no longer need explicit translation entries to\nreach the kernel keymap. Keeping them in the table makes it harder to\ntell which mappings are still required and which ones already fall\nthrough the normal unicode-based import path.\n\nDrop those aliases from data/xkbtrans/names and add a regression test\nthat removes only the Macedonia_* and Ukrainian_* rows from the\ntranslation table before importing ru(chu). This verifies that the\ncurrent XKB conversion path still resolves those symbols correctly\nthrough libxkbcommon unicode decoding and libkeymap\u0027s existing Cyrillic\nsymbol handling.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "362ececebbf05156f24aeb4a4c5f6120bb721626",
      "tree": "ea1c87efaaa4c1995e6b471f7a7b2ae25fcfae33",
      "parents": [
        "6842be3b2bb8b28627c73dc9ab152d8ee9725ef0"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 11:35:04 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 11:35:04 2026 +0100"
      },
      "message": "xkbsupport: cut redundant aliases from the XKB names table\n\nThe XKB importer still relied on data/xkbtrans/names for several classes\nof symbols whose meaning is already stable enough to resolve directly in\ncode. Keeping those entries in the external table makes the import path\nlook more data-driven than it really is and leaves the remaining legacy\naliases harder to distinguish from the mappings that are still required.\n\nResolve the common semantic keysyms in xkeymap_get_code() first, so\ngroup selectors, Compose, virtual console switches and keypad decimal\nstop depending on the translation table. With that builtin coverage in\nplace, drop the aliases that no longer affect the conversion result,\nincluding the now-redundant Print mapping.\n\nThis shrinks the table toward the legacy XKB-to-kbd mismatches that are\nstill genuinely needed, while keeping the current libkeymap XKB tests\nunchanged.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "6842be3b2bb8b28627c73dc9ab152d8ee9725ef0",
      "tree": "4bbf57b85f43da67fa5f86d4ee15e3dfef9359d9",
      "parents": [
        "1ed93947932f66da5327b470d228b2919a7297e6"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 11:06:31 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 20 11:06:31 2026 +0100"
      },
      "message": "xkbsupport: resolve common XKB symbols without the names table\n\nThe XKB import path still relies on data/xkbtrans/names for many symbols\nthat already have stable, well-known semantics in kbd. Keeping those\nlookups in the external table makes the conversion path more fragile\nthan it needs to be and leaves the translation file responsible for\naliases that can be handled directly in code.\n\nTeach xkeymap_get_code() to resolve a small builtin set of common\nnon-printing XKB keysyms first, then fall back to direct kbd names, and\nonly use unicode or raw name parsing when neither name-based path works.\nThis keeps the existing output stable while letting the importer handle\nmodifiers, group selectors and keypad navigation aliases without going\nthrough the translation table.\n\nWith those aliases resolved internally, drop the redundant entries from\ndata/xkbtrans/names. The remaining table keeps only the legacy mappings\nthat are still needed by the current import path.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "1ed93947932f66da5327b470d228b2919a7297e6",
      "tree": "2619bf4e356d0361028ebb9fdd1fb24055e079c2",
      "parents": [
        "2e9c7ef2de41693ad6a715e5ac14018f075d67f2"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 20:11:15 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 20:11:15 2026 +0100"
      },
      "message": "xkbsupport: keep compose import in the kernel\u0027s code space\n\nXKB compose import should follow the same conversion rules as the rest of\nkbd.  Appending raw diacritic entries bypasses the normal compose path,\nso the imported table no longer reflects the code space selected for the\ncurrent keymap context and the tests end up validating an ad hoc dump\nformat instead of the real library behavior.\n\nFeed imported compose rules through lk_append_compose() and extend the\ninternal compose test to catch that conversion path.  Update the XKB\ncompose snapshots to use lk_dump_diacs() under preferred-Unicode mode so\nthey match the way kbd actually stores and reports compose tables.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "2e9c7ef2de41693ad6a715e5ac14018f075d67f2",
      "tree": "5cf30127bfb78267fea172a09cad3a56a0519960",
      "parents": [
        "f4f33737d4dc07ec44c67346a83bd72a9759e9df"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 17:35:22 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 17:35:22 2026 +0100"
      },
      "message": "tests: refresh us,ru XKB dump after group fallback fix\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "f4f33737d4dc07ec44c67346a83bd72a9759e9df",
      "tree": "27b13114e425ba3a376aebaf218f30051a659044",
      "parents": [
        "a06b45b67e9ffb03fbed2a94c9d8d149dbc4cac3"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 17:26:36 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 17:26:36 2026 +0100"
      },
      "message": "tests: align libkeymap case numbers with test binaries\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "a06b45b67e9ffb03fbed2a94c9d8d149dbc4cac3",
      "tree": "d0129da6b00b243808f426b6b0d124d99c3fbf55",
      "parents": [
        "b98bf6012f435945b88c0b12c1945305aee3748c"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 17:18:33 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 17:18:33 2026 +0100"
      },
      "message": "xkbsupport: preserve XKB group fallback per key\n\nA key may define fewer groups than the keymap as a whole while XKB still\nmakes that key reachable in later groups by normalizing out-of-range\ngroup lookups back into range. Restricting the import walk to the groups\nexplicitly present on each key drops that fallback and leaves otherwise\nvalid multi-layout mappings incomplete in the kernel table.\n\nWalk every global layout when querying a key and let libxkbcommon apply\nits per-key group fallback rules. Add a regression test with a us,empty\nlayout pair to verify that a key defined only in the first group remains\nreachable after switching to the second group.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "b98bf6012f435945b88c0b12c1945305aee3748c",
      "tree": "7dc35069befeb55667f99240c0e75b44d7eb3f59",
      "parents": [
        "d2a461559bb2890c2b4d0939fb704a741cff9e43"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 16:48:10 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 16:48:10 2026 +0100"
      },
      "message": "xkbsupport: keep XKB import working without compose data\n\nMissing compose data should not make --xkb-* unusable. The keymap import\nitself is still valid when libxkbcommon cannot resolve a compose table\nfor the selected locale, so treating that lookup failure as fatal breaks\notherwise usable XKB layouts.\n\nContinue without compose support when the locale-specific Compose file\ncannot be found and add a regression test for that fallback. The new\ntest forces compose lookup to fail and verifies that XKB import still\nproduces a usable kernel keymap without writing to stderr.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "d2a461559bb2890c2b4d0939fb704a741cff9e43",
      "tree": "2bf911dc344020d519e108085eff961317c0b986",
      "parents": [
        "9eb0afb442ca519c582c48cad738a78f5ae8327d"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 11:37:03 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 11:37:03 2026 +0100"
      },
      "message": "xkbsupport: drop ad-hoc debug paths now that import is test-covered\n\nThe temporary debug output in the XKB conversion path was useful while\nthe import logic was still being shaped, but it has become a liability\nnow that the behaviour is pinned down by focused unit tests and full\nsnapshot coverage.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "9eb0afb442ca519c582c48cad738a78f5ae8327d",
      "tree": "b363c2ecb305dc7190552b8e266b3d81289967d0",
      "parents": [
        "b75e5661b386004f2ec2eca4f2c8f4ee5532ebdf"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 11:30:47 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 11:31:16 2026 +0100"
      },
      "message": "tests: cover XKB import with a non-Latin compose snapshot\n\nThe current XKB compose policy is already constrained by kernel limits\nand shaped by Latin dead-key expectations from existing console maps.\nChecking it only against us-intl, Czech and German still leaves too much\nroom for regressions that look fine on Latin layouts while quietly\nbreaking very different compose behaviour.\n\nAdd a Greek XKB snapshot so the import path is exercised on a layout\nwith a different alphabet and a different compose model.  This gives the\ntests a way to catch policy changes that accidentally overfit the kernel\nsubset to Latin accent handling and miss the behaviour users expect from\nnon-Latin XKB layouts.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "b75e5661b386004f2ec2eca4f2c8f4ee5532ebdf",
      "tree": "f8fd643e866393a9fea3bd72b371c5a209731f3c",
      "parents": [
        "6e833a7f0f3275cd30dca5f5b35f673327e58b00"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 11:14:40 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 11:31:16 2026 +0100"
      },
      "message": "xkbsupport: bias compose selection toward console-style dead keys\n\nThe kernel compose table is far too small for the locale-wide compose\nspace exposed by XKB, so the converter has to choose which rules are\nworth keeping.  Ranking only by generic \"dead key + letter\" heuristics\nstill leaves too much room for incidental XKB data to displace the\naccent combinations users actually expect from established console\nkeymaps.\n\nTeach the selector to favour the compact dead-key repertoires that\ntraditional console maps and console-setup keep for Latin layouts.  This\nmakes the limited kernel compose space track long-standing console\nbehaviour more closely, instead of being shaped by whichever extra XKB\nsequences happen to score similarly.\n\nAdd a German snapshot alongside the existing XKB compose snapshots so\nthe policy is exercised on more than one language and does not quietly\ndrift into being Czech-specific.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "6e833a7f0f3275cd30dca5f5b35f673327e58b00",
      "tree": "5108ac33c9ddb9dd84fe9c86786c95b6069ae725",
      "parents": [
        "2590c802b23e654be7aed1fa48e38471452536ef"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 10:43:31 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 11:31:16 2026 +0100"
      },
      "message": "xkbsupport: keep useful dead-key compose rules under kernel limits\n\nThe kernel compose table is too small for the full XKB compose space, so\nthe converter has to drop a large part of it.  Simply preferring rules\nthat introduce otherwise unreachable symbols turns out to be the wrong\npolicy for console layouts with established dead-key semantics: important\naccent combinations for national letters can disappear even though users\nstill expect those dead keys to work in the traditional way.\n\nBias compose selection toward letter-based dead-key sequences and treat\nalready reachable results as lower-value rather than worthless.  This\nkeeps compact kernel compose tables closer to existing console keymaps,\nin particular for layouts such as Czech where accented letters may be\ntyped directly but their dead-key combinations are still part of the\nexpected console behaviour.\n\nRefresh the XKB compose snapshots to match the new prioritisation.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "2590c802b23e654be7aed1fa48e38471452536ef",
      "tree": "0013c118a31e260aa879cfea85ac3d8a70eeb063",
      "parents": [
        "80f4577cfd1e54008bb6d8ba69b5b7dcc0dc5fc1"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 10:10:41 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Mar 19 10:10:41 2026 +0100"
      },
      "message": "tests: make XKB coverage survive distcheck without test-only noise\n\nThe new XKB conversion tests are only useful if they keep working from a\nrelease tarball and continue to verify the actual converted keymaps\ninstead of incidental diagnostics.  In their previous form, distcheck\neither lost XKB runtime data needed by the converter or treated expected\nwarnings as test failures, which made the release build look broken\ndespite the conversion itself working.\n\nKeep the XKB test environment self-contained in dist archives, install\nthe extra runtime translation data only when XKB support is enabled, and\nlet tests silence non-essential XKB warnings explicitly.  This preserves\nreadable snapshot-style coverage for XKB import while keeping distcheck\nfocused on real regressions rather than packaging gaps or stderr noise.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "80f4577cfd1e54008bb6d8ba69b5b7dcc0dc5fc1",
      "tree": "917cfb67ea11a08a42c20c4cbb0290e0d8e999f1",
      "parents": [
        "aeb13460146947d9861327418a66a802d363eec4"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:45:59 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:45:59 2026 +0100"
      },
      "message": "tests: pin XKB conversion against a readable full-keymap snapshot\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "aeb13460146947d9861327418a66a802d363eec4",
      "tree": "217b246bd426b1e500bc0afb7eeef1d208bd2843",
      "parents": [
        "7ed8d4e1150f01d625787aef699edfe222482637"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:20:25 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:20:25 2026 +0100"
      },
      "message": "xkbsupport: interpret XKB modifier masks in their native width\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "7ed8d4e1150f01d625787aef699edfe222482637",
      "tree": "49f14d2773706cf5a0596027586bd37df1f429ec",
      "parents": [
        "98e20c49074daf43a0aa856a76f3f4e61122ef11"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:08:58 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:08:58 2026 +0100"
      },
      "message": "xkbsupport: make compose selection deterministic under kernel limits\n\nThe kernel compose table is too small for locale-wide XKB compose data,\nso loadkeys has to choose a useful subset instead of depending on the\nincidental order of the XKB iterator.  If that choice is not stable, the\nsame keymap can keep different rules across refactorings and subtle\nduplicates can waste scarce compose slots.\n\nSelect compose entries in a deterministic order, keep only the strongest\ncandidate for each XKB sequence, and account for collisions only after\nthe rules are projected into the kernel format.  Add focused tests so\nfuture changes do not silently reintroduce unstable or misleading\ncompose selection.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "98e20c49074daf43a0aa856a76f3f4e61122ef11",
      "tree": "0a69d95d8775e1409958db63a6d1f7ab5da55d27",
      "parents": [
        "fd2b91a6a976e8d7b89bae0c1e246c37890a2951"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:04:24 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 20:04:24 2026 +0100"
      },
      "message": "xkbsupport: choose compose rules in the kernel\u0027s terms\n\nThe compose table shipped with XKB is much larger than the kernel can\nstore, so importing it blindly is not useful for the console.  In order\nto keep the limited kernel compose space for sequences that actually\nmatter, compose selection has to follow the same representation that\nloadkeys will finally install.\n\nBase reachability, deduplication and ranking on the kernel-facing result\nof the XKB conversion instead of treating the raw XKB compose data as\nthe source of truth.  This keeps filtering aligned with what the console\ncan really express, avoids wasting slots on entries that collapse to the\nsame kernel rule, and makes the compose limit meaningful for the\ngenerated keymap.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "fd2b91a6a976e8d7b89bae0c1e246c37890a2951",
      "tree": "9c5720087c21e1b698ef616d2deb900f674a8f23",
      "parents": [
        "00b88b6e8976be86be9a12d9f7fe1f60b200a66b"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 18:17:38 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 18:17:38 2026 +0100"
      },
      "message": "xkbsupport: base compose reachability on XKB symbols\n\nCompose rules are expressed in XKB keysyms, but the current filtering\nlogic decides reachability only after collapsing symbols into kernel key\ncodes.  That loses information too early and can make compose selection\nlook at the wrong notion of \"available\", especially when different XKB\nsymbols map to the same console representation.\n\nTrack which XKB symbols actually survive keymap generation and use that\nas the source of truth for compose filtering.  This keeps the compose\npath aligned with the XKB data it is consuming and prepares it for\nchoosing only the entries that are truly relevant to the generated\nconsole layout.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "00b88b6e8976be86be9a12d9f7fe1f60b200a66b",
      "tree": "fbc421b741bb05ccdfd388963c7206eb3b0e0578",
      "parents": [
        "c3f2d856a9f7912989c2c190c3cdc6bd90523017"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 17:53:09 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 17:53:09 2026 +0100"
      },
      "message": "xkbsupport: prepare compose import for policy-based filtering\n\nThe current compose path mixes table traversal, rule selection and kernel\ninsertion in one pass.  That makes it hard to teach loadkeys to keep\nonly the compose sequences that are actually useful for the generated\nconsole keymap, which is necessary because XKB compose data is far\nlarger than the kernel can store.\n\nSeparate candidate collection from installation so the next steps can\nfilter, rank and trim compose entries before they consume scarce kernel\nslots.  This keeps the current behaviour working while making the\ncompose import path ready for a smaller and more relevant policy.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "c3f2d856a9f7912989c2c190c3cdc6bd90523017",
      "tree": "28a22a45a49879920b56fd68ca6e4815a1643b43",
      "parents": [
        "e476fd61b984617b418c4fc7b5654c620b70ece6"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 16:48:57 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 16:48:57 2026 +0100"
      },
      "message": "xkbsupport: keep XKB import from breaking on valid keymaps\n\nReal XKB keymaps do not always fit the kernel keyboard model cleanly:\nsome keys expose fewer groups than the whole keymap, some levels produce\nmultiple symbols, and compose tables can legitimately fill the kernel\nlimit.  Treating these cases as hard failures makes loadkeys reject\nlayouts that are otherwise usable and leaves users with no console map\nfor common XKB configurations.\n\nHandle those mismatches defensively so conversion degrades instead of\nfailing.  This keeps valid multi-layout XKB setups importable, avoids\ndropping the last compose entry the kernel can still accept, and makes\nerror reporting around the translation table reliable when the default\nmapping data is missing.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "e476fd61b984617b418c4fc7b5654c620b70ece6",
      "tree": "2f705a2e1fbf1a816c95e6e35b03773b78661c88",
      "parents": [
        "829e8c511d55a1249d52a1f73d5ccd45ddc607be"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 16:22:16 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 16:25:26 2026 +0100"
      },
      "message": "xkbsupport: preserve usable console semantics when importing xkb\n\nXKB layouts can reach the same level through multiple modifier masks and\nmay expose combinations that have no meaningful kernel equivalent.  The\ncurrent conversion path treated those masks too loosely, so the result\ndepended on iteration order and could assign symbols to the wrong kernel\ntables or fail outright on multi-layout setups such as us,ru with group\nswitching.\n\nMake the conversion prefer the simplest reachable modifier state, ignore\nmasks that cannot be represented safely by the kernel keymap model, and\navoid manufacturing CapsLock behaviour for symbols that are not really\ncapslockable in the console.  This keeps layout switching usable and\nmakes the generated keymap closer to what users expect from the original\nXKB layout.\n\nAdd a focused libkeymap test so regressions in XKB import are caught\nbefore they break real loadkeys workflows.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "829e8c511d55a1249d52a1f73d5ccd45ddc607be",
      "tree": "f720aba789ddaaa7c5700012d4a90dc8e2ffa26e",
      "parents": [
        "e83858eb1450d0e51beb00fbab7195d0b7a7173f"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Jan 04 18:13:27 2024 +0000"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 15:18:03 2026 +0100"
      },
      "message": "xkbsupport: Add xkb compose\n\nThe approach to using compose differs between libxkbcommon and kernel.\nCompose in the kernel has stricter restrictions.\n\n1. Length of sequence.\n\nxkb: The length of the compose sequence can be any (or very long).\nkbd: The length of the sequence is 2.\n\n2. Length of result.\n\nxkb: Again, the result of the sequence can be anything.\nkbd: The result of compose restricted by unsigned int.\n\n3. How to use compose.\n\nxkb: The libxkbcommon library loads the entire table for all locales\n(more than 5000 combinations) and as characters are typed, it narrows\nthe number of variants until there is only one sequence left. The\nlibrary is not limited by the amount of memory by the number of stored\nvariants.\n\nkbd: Compose sequences are loaded into the kernel (ioctl KDGKBDIACR) and\nafter that it is applied in the kernel without our participation. A table\nin the kernel is limited to 256 records.\n\nTo reduce the number of combinations:\n\n1. We must ignore all xkb compose sequences longer than 2.\n2. We should ignore sequences that use unicodes that are not used in the\n   generated keymap.\n\nSuch tricks allow you to reduce 5000+ to ~220 (for en,ru keymap).\nUnfortunately, there is no guarantee yet that the amount of compose will\nbe within the limit and there is no way to control it yet.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "e83858eb1450d0e51beb00fbab7195d0b7a7173f",
      "tree": "c36d468909072f4cd94ec55612c9b583896a10b7",
      "parents": [
        "71dc51a0ff157ace7e9486bbb35affe7d8511cdb"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Jan 04 18:12:43 2024 +0000"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 15:03:24 2026 +0100"
      },
      "message": "xkbsupport: Extract translation table\n\nAn external table allows it to be expanded without recompilation.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "71dc51a0ff157ace7e9486bbb35affe7d8511cdb",
      "tree": "13e635bfeb62c7bb23616470c3efb8d3d1ea27d3",
      "parents": [
        "533b72f1a7acc649ddc239e247c11cd759be691a"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Jan 04 18:12:34 2024 +0000"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 15:03:24 2026 +0100"
      },
      "message": "xkbsupport: Create a list of used codes\n\nA binary search tree is created with all the unicodes that are used in\nthe generated keymap so that it can be checked later whether the unicode\nsymbol is used or not.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "533b72f1a7acc649ddc239e247c11cd759be691a",
      "tree": "e2b3ce20ce514d8a8ab4c10029f75e000735a466",
      "parents": [
        "6c8c2abfa5dd720b053c9b5bdacfbf2898d689e7"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Thu Jan 04 18:12:05 2024 +0000"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 15:03:20 2026 +0100"
      },
      "message": "xkbsupport: Add keymap generation from the xkb database\n\nXorg/Wayland uses its own keyboard configuration mechanism. Because of\nthis, the configuration of the text console and Xorg layouts may differ.\nNot all combinations of Xorg layouts have a keymap in the kbd database.\nIt\u0027s inconvenient for users.\n\nTo solve this problem, it is possible to try convert the Xorg keymap\nto the kernel keymap.\n\nThe XKB (X Keyboard Extension) database can be accessed with\nlibxkbcommon, which does not depend on the X11 libraries.\n\nlibxkbcommon is a keyboard keymap compiler and support library which\nprocesses a reduced subset of keymaps as defined by the XKB\nspecification [1].\n\nlibxkbcommon does not distribute a keymap dataset itself, other than for\ntesting purposes. The most common dataset is xkeyboard-config, which is\nused by all current distributions for their X11 XKB data [2].\n\nThere is a project that uses a similar approach to unify configurations.\nThis is console-setup [3].\n\nI talked with Anton Zinoviev and he helped me figure out their idea of\nswitching multiple layouts with a single key combination:\n\n  \u003e how you solved the problem of switching more than two layouts with\n  \u003e one key combination ?\n\n  The keys with ISO_Next_Group, for example the right Alt (keynumber\n  100), are defined like this:\n\n  keycode 100 \u003d ShiftL_lock\n  ShiftL keycode 100 \u003d ShiftR_lock\n  ShiftR keycode 100 \u003d ShiftR_lock\n  ShiftL ShiftR keycode 100 \u003d ShiftL_lock\n\n  So this key will work in the following way:\n\n  no modifiers are active -\u003e ShiftL is active\n  ShiftL is active -\u003e ShiftL and ShiftR are active\n  ShiftL and ShiftR are active -\u003e ShiftR is active\n  ShiftR is active -\u003e no modifiers are active\n\n  The groups (the layouts) are placed in the following way:\n\n  active modifiers  1 group    2 groups    3 groups    4 groups\n  ----------------  -------    --------    --------    --------\n  no modifier       group 1    group 1     group 1     group 1\n  ShiftL            group 1    group 2     group 2     group 2\n  ShiftR            group 1    group 2     group 3     group 4\n  ShiftL+ShiftR     group 1    group 1     group 1     group 3\n\n  In this way we have the following cycles:\n\n  1 group: gr1-\u003egr1-\u003egr1-\u003e...\n  2 groups: gr1-\u003egr2-\u003egr1-\u003egr2-\u003e...\n  3 groups: gr1-\u003egr2-\u003egr1-\u003egr4-\u003egr1-\u003egr2-\u003egr1-\u003egr4-\u003e...\n  4 groups: gr1-\u003egr2-\u003egr3-\u003egr4-\u003egr1-\u003egr2-\u003egr3-\u003egr4-\u003e...\n\n  --\n  Anton Zinoviev\n\nThe difference with this implementation is that I am not trying to read\nand parse the XKB base files. I analyze the resulting xkb keymap.\n\n[1] https://xkbcommon.org/doc/current/index.html\n[2] https://www.freedesktop.org/wiki/Software/XKeyboardConfig/\n[3] https://salsa.debian.org/installer-team/console-setup.git\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "6c8c2abfa5dd720b053c9b5bdacfbf2898d689e7",
      "tree": "30e9fbd905aed98fc4ed4269f9a3f6b8ea0ccc59",
      "parents": [
        "50e3189fb21423964d314a5b21b8b0e6017a7e8d"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Jun 19 10:48:58 2024 +0200"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Wed Mar 18 14:54:20 2026 +0100"
      },
      "message": "keymap: Add API to verify ksym\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "50e3189fb21423964d314a5b21b8b0e6017a7e8d",
      "tree": "e62384520bbf665c2e586440a713044ffcc46879",
      "parents": [
        "9720d5cf307089a5e62417fcb3835272d258f668"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue Mar 17 13:41:19 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue Mar 17 13:41:19 2026 +0100"
      },
      "message": "tests: catch libkeymap round-trip regressions earlier\n\nlibkeymap already has good parser and dump coverage, but it lacked a\ntest for the invariant that matters when both sides evolve together:\na keymap should still describe the same canonical state after\nparse -\u003e dump -\u003e parse.\n\nAdd a dedicated round-trip test over representative parser constructs,\nincluding keymaps ranges, alt_is_meta, strings, compose rules,\nmodifiers, +rvalues and a real file-backed keymap. This protects the\ncanonical dump format against regressions that would not be caught by\nparser-only or dump-only tests.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "9720d5cf307089a5e62417fcb3835272d258f668",
      "tree": "824de9725d93d008e5e11154f446042cf919c5ac",
      "parents": [
        "07e5b4c71c8ee235cf9b332708e4ac11b30cce54"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 12:58:32 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue Mar 17 11:39:32 2026 +0100"
      },
      "message": "data: Do not compress files twice\n\nLink: https://github.com/legionus/kbd/issues/154\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "07e5b4c71c8ee235cf9b332708e4ac11b30cce54",
      "tree": "a0caa86da7d23bde5f1ca220e08ae3aa17ebd3ea",
      "parents": [
        "bc085c0161d309e2b7e42988250d4843c93ca1a5"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 18:13:43 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Tue Mar 17 11:38:23 2026 +0100"
      },
      "message": "CI: report library coverage in workflow summaries\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "bc085c0161d309e2b7e42988250d4843c93ca1a5",
      "tree": "f74741432dfc1f78f3d6a6a23d1eda52654a3c31",
      "parents": [
        "2bfb5cac1afdcf8832b68fecc80e5962604e8336"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 17:07:19 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 18:04:01 2026 +0100"
      },
      "message": "tests: make expanded library coverage easier to maintain\n\nThe recent coverage work left libkeymap, libkbdfile and libkfont with a\nlong tail of tiny one-off test binaries. That makes the suites harder to\nnavigate, inflates testsuite output with low-signal case names and raises\nthe cost of extending coverage further.\n\nGroup related checks into a smaller set of logical test programs and\nrename the autotest entries to describe the behavior under test rather\nthan historical file numbers. This keeps the extra coverage in place\nwithout letting the unit suites turn into an unmaintainable list of\nsingle-purpose executables.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "2bfb5cac1afdcf8832b68fecc80e5962604e8336",
      "tree": "1007bf58231a4f72119ef46283673164cf396322",
      "parents": [
        "e575698bfc34a2318a32252b0fbaa83f228efc09"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 16:34:10 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 16:34:40 2026 +0100"
      },
      "message": "tests: libkfont: cover context and kdfontop helpers\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "e575698bfc34a2318a32252b0fbaa83f228efc09",
      "tree": "02597feaa3ade4d5497ce60f633cf56ee056b3b8",
      "parents": [
        "765c70d3259010fe788721f7221e19d16bbf3d40"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 16:31:36 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 16:34:40 2026 +0100"
      },
      "message": "tests: libkeymap: add unit tests for dump and kernel helpers\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "765c70d3259010fe788721f7221e19d16bbf3d40",
      "tree": "9971a7b0071df8294d4a946d7109a108958126e4",
      "parents": [
        "e2f8cbc04e495ddf1732c3e83e99ac735601bad1"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 11:21:50 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Mon Mar 16 11:56:25 2026 +0100"
      },
      "message": "libkfont: add unit tests for psf and console map\n\nAdd libkfont unit tests for the PSF reader and writer paths in\npsffontop.c, including PSF1/PSF2 images, unicode sequences and a set\nof malformed input cases.\n\nAlso cover console map save/load helpers in mapscrn.c for symbolic,\nbinary and failure paths, including direct screen maps, unicode screen\nmaps and save failures when no map or no output file is available.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "e2f8cbc04e495ddf1732c3e83e99ac735601bad1",
      "tree": "33e41a0a9e815e77d88e14e97b1298ddbd717e8e",
      "parents": [
        "31cb1650884910ed00a14eb89969a34b7bc23952"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 11:41:02 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "tests: add parser-focused libkeymap unit coverage\n\nlibkeymap\u0027s parser still had several grammar and semantic corners covered\nonly indirectly through full keymap fixtures, which made it harder to\npin regressions to a specific rule in parser.y.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "31cb1650884910ed00a14eb89969a34b7bc23952",
      "tree": "99489b871345ca1d488ebc72d974215ea7c14a5c",
      "parents": [
        "a554b2ec79f5d97e860a29665f15b0c2f776feea"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 00:02:28 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "build: make coverage-report rebuild and capture reliably\n\nMake coverage-report rebuild the tree before running the tests, reset\ncoverage counters explicitly, and restrict capture to the libkbdfile,\nlibkeymap, libkfont, and tests subtrees.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "a554b2ec79f5d97e860a29665f15b0c2f776feea",
      "tree": "7da242554c0226e85ee38c47bfb334cc0bf5742f",
      "parents": [
        "77f4d91e25fd22b15ab5583afecb16ab7823b550"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 23:51:20 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "build: keep coverage flags in target-specific CFLAGS\n\nMake those per-target CFLAGS append to AM_CFLAGS instead of replacing\nit, so coverage-enabled builds stay consistent across the tree.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "77f4d91e25fd22b15ab5583afecb16ab7823b550",
      "tree": "d7a0334b1cdded1130c49003cb40f9c2145ee9de",
      "parents": [
        "05a55f6676c6ead0d809aa90415b59bc7a115849"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 23:45:35 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "build: add a project-level coverage-report target\n\nAdd an official top-level coverage-report target that resets coverage\ncounters, runs the test suite, and generates the HTML report in one\nplace. Limit capture to the libkbdfile, libkeymap, libkfont, and tests\nsubtrees so the report stays focused on the supported unit-test paths,\nand drop genhtml options that are not accepted by the tool version used\nhere.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "05a55f6676c6ead0d809aa90415b59bc7a115849",
      "tree": "811e01b748793ca6fe27a5d87458b654052ee087",
      "parents": [
        "ea77b671d12213cd21485a5e2520a77008a40074"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 23:25:53 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "tests: cover libkeymap string and compose loading\n\nAdd focused unit tests for both paths so regressions in string clearing\nand compose table loading can be caught without a real console. This\nextends coverage for lk_load_keymap() beyond key bindings and Unicode\nmode handling.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "ea77b671d12213cd21485a5e2520a77008a40074",
      "tree": "9ecb66da8d18030fa202f62b9c5ce4900ac246ba",
      "parents": [
        "0cfc8e9154c46543554d5f62723953338aa867de"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 23:24:39 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "tests: cover libkfont font parsing and screen map loading\n\nAdd focused unit tests for reading a minimal PSF1 font image and for\nloading a symbolic console map into a Unicode screen map. This gives the\nsuite coverage for the PSF parser and for the code that expands sparse\nscreen maps into the default direct-to-font mapping.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "0cfc8e9154c46543554d5f62723953338aa867de",
      "tree": "52492e1e903a3818d6856a961a73c9d260d74269",
      "parents": [
        "0029aa560f6a79b260012d789d2a4a0d415de996"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 23:23:03 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "tests: cover libkbdfile\u0027s lazy dlopen helper\n\nlibkbdfile\u0027s shared-object lookup helper was still uncovered, even\nthough it drives the fallback path for optional decompressors.\n\nAdd a focused unit test that exercises both the successful symbol lookup\npath and the failure path for a missing symbol. This gives the test\nsuite coverage for the lazy loading logic and checks that failed lookups\ndo not leave a leaked library handle behind.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "0029aa560f6a79b260012d789d2a4a0d415de996",
      "tree": "f12caac832661dd6fc32e2e135e5280d1a0a9546",
      "parents": [
        "dda3280c45d14e1adebafdd8065338c2f7b2fb51"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 23:00:45 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "build: link coverage-instrumented binaries with gcov runtime flags\n\nEnabling code coverage was compiling objects with gcov instrumentation\nbut not reliably carrying the same flags into the final link step.\n\nThat leaves references such as __gcov_init unresolved when binaries link\nagainst static archives like libcommon.a. Propagate the coverage link\nflags through the common build rules and the standalone test makefiles so\na coverage-enabled build links successfully across the tree.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "dda3280c45d14e1adebafdd8065338c2f7b2fb51",
      "tree": "f2924ea72fea4c88f7dafbf422ce83727f716d3a",
      "parents": [
        "a48a8f27ecf1c2ca56545481130d91483b7260d2"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 14:40:38 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:36 2026 +0100"
      },
      "message": "tests: reduce libkbdfile unit test boilerplate\n\nFactor that common logic into a shared test helper, keep the individual\nscenarios separate, and add short descriptions to every libkbdfile\nautotest case so failures are easier to interpret.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "a48a8f27ecf1c2ca56545481130d91483b7260d2",
      "tree": "4a84106ffaa64aefe06e1c9ccdce5220e8a07e2b",
      "parents": [
        "d195b1108d2b5dd41ed7660909d688eb2f8821e5"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 13:55:51 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: cover lk_load_keymap() aborts on KDSKBENT failures\n\nKey loading must stop as soon as KDSKBENT reports a failure that leaves\nthe kernel state unreliable. In particular, permission failures and I/O\nerrors should abort the load instead of falling through to function\nstring or compose table updates.\n\nAdd unit tests that verify lk_load_keymap() stops immediately on EPERM\nand EIO from KDSKBENT and does not continue with later load stages.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "d195b1108d2b5dd41ed7660909d688eb2f8821e5",
      "tree": "8f5beb2a9e7d11ee23e8b592dd4de7c54d1d8e43",
      "parents": [
        "2287db7597e43aa2d7389256fe5fca3c9d3198aa"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 13:49:41 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: cover Unicode mode switching in lk_load_keymap()\n\nLoading a keymap in Unicode mode depends on temporarily switching the\nkernel keyboard mode before programming keys and restoring the original\nmode afterwards. If the initial mode switch fails, the load must stop\nimmediately instead of continuing with a partially applied state.\n\nAdd unit tests that verify both sides of this contract: the successful\nUnicode-mode load path and the early failure path when KDSKBMODE\nrejects the switch to K_UNICODE.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "2287db7597e43aa2d7389256fe5fca3c9d3198aa",
      "tree": "a7b1cf699c7e8eec97f76eb080116362e80632a0",
      "parents": [
        "bb26c3df2daac31bfbad9192f05fe48addc372ce"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 13:30:21 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: cover lk_load_keymap() fallback for old kernels\n\nSome kernels reject keymap deallocation through KDSKBENT with EINVAL,\nand libkeymap is expected to recover by clearing the table entry by\nentry instead of failing the load.\n\nAdd a unit test that exercises this path and verifies that lk_load_keymap()\nkeeps going after the deallocation failure by issuing a full manual\nclear.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "bb26c3df2daac31bfbad9192f05fe48addc372ce",
      "tree": "d75ee188429dedd13b290dc6878208b17fd618a3",
      "parents": [
        "33b8ea78709c8baa0f13472354968e73f828ae97"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 13:23:29 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: clarify libkeymap autotest case names\n\nAdd short behavior-oriented descriptions to every AT_SETUP entry and\nrenumber the later cases so the suite reads consistently from top to\nbottom.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "33b8ea78709c8baa0f13472354968e73f828ae97",
      "tree": "8042ee3a168324da427c55e5659df1b396e7a627",
      "parents": [
        "5eaa6a2c6bb2fc72cd61b28f35e9369d337dcdf0"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 13:15:53 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: cover libkeymap kernel keymap loading\n\nThis verifies that lk_kernel_keys() imports populated entries, preserves\nholes, and stops scanning tables when the kernel reports K_NOSUCHMAP,\nwithout requiring a real console device.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "5eaa6a2c6bb2fc72cd61b28f35e9369d337dcdf0",
      "tree": "4088fa16091adb5e29a1319003c4dc82a386a4e1",
      "parents": [
        "ca49f1e51783b4f76576933219f073a78a069928"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 13:09:31 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: add libkeymap coverage for kernel-backed paths\n\nThis covers behavior that was previously awkward to exercise without a\nreal console, including loading accent tables and function key strings,\nwhile keeping the checks deterministic and root-free.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "ca49f1e51783b4f76576933219f073a78a069928",
      "tree": "fdfaa86e08cfbd83b92952cf004103836a4066cd",
      "parents": [
        "827cfea669a0e6de857db9638f5d34bcc153d362"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 13:01:20 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: allow unit tests to exercise kernel-dependent paths\n\nSome libkeymap behavior is currently only reachable through ioctls to a\nreal console, which leaves important logic covered only by higher-level\ntests and makes failures harder to isolate.\n\nAdd an internal way to replace the ioctl backend so kernel-dependent\ncode can be tested deterministically in unit tests without changing the\nlibrary\u0027s normal runtime behavior.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "827cfea669a0e6de857db9638f5d34bcc153d362",
      "tree": "462a71a6324d362ee3131d63661f8e3ceb45b802",
      "parents": [
        "7f705308276e8e877d06d6b00d47c003cbd37d1d"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 12:54:32 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "libkeymap: make kernel-facing code unit-testable\n\nlibkeymap still has logic that can only be exercised through ioctls to a\nreal console, which makes unit tests awkward and pushes too much\nbehavior into root-only integration coverage.\n\nAdd an internal seam for the ioctl path so kernel-dependent behavior can\nbe tested in isolation while keeping the normal runtime behavior\nunchanged.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "7f705308276e8e877d06d6b00d47c003cbd37d1d",
      "tree": "4c5e51ae9b99fd899ecc9eb5f6afb070adcf7625",
      "parents": [
        "6e994005d5a52b1fd790d349564dbcc266533dc0"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 12:21:36 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkeymap: reduce libkeymap unit test boilerplate\n\nThis removes repeated kbdfile/keymap loading code, fixes a broken file\npath in one failure message, and tightens the compose-table test so it\nfails instead of only warning when expected entries are missing or still\npresent.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "6e994005d5a52b1fd790d349564dbcc266533dc0",
      "tree": "36dd23e9175d862c23f74fc9f80decdd0508a6f1",
      "parents": [
        "ebac2d1dc7b158f956cf3dae1d4a5c0847c8b575"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 12:02:58 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkfont: cover libkfont screen map wrappers\n\nVerify that getscrnmap() fills the caller buffer from GIO_SCRNMAP and\nthat loadscrnmap() passes the original screen map buffer through to\nPIO_SCRNMAP without modifying it.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "ebac2d1dc7b158f956cf3dae1d4a5c0847c8b575",
      "tree": "f76e404e40bc346837fa02127ad23016d064bb42",
      "parents": [
        "7528ba172d71debb4bce7f22e557b190f3992605"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:58:32 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkfont: cover kfont_put_unicodemap() clear failures\n\nVerify that kfont_put_unicodemap() stops immediately when PIO_UNIMAPCLR\nfails, does not attempt PIO_UNIMAP afterwards, and keeps the\ncaller-provided descriptors unchanged.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "7528ba172d71debb4bce7f22e557b190f3992605",
      "tree": "448015fab9e4b8f171a5ae97ba15f6e0f4186ad6",
      "parents": [
        "23f748c49f3c80498b25872b564d74e4b42f7464"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:45:22 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkfont: cover kfont_put_unicodemap() retry limit\n\nVerify that kfont_put_unicodemap() stops retrying once advised_hashlevel\nreaches the retry limit, returns an error after repeated ENOMEM\nfailures, and keeps the caller-provided descriptors unchanged.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "23f748c49f3c80498b25872b564d74e4b42f7464",
      "tree": "61e6986ef2512c98aa04a211b90468a3022bc584",
      "parents": [
        "4311d70f1f8fef137ef32d60c9eb8014c5cc47c8"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:40:47 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:35 2026 +0100"
      },
      "message": "tests: libkfont: cover kfont_put_unicodemap() ENOMEM retries\n\nVerify that kfont_put_unicodemap() retries PIO_UNIMAP after ENOMEM,\nreissues PIO_UNIMAPCLR with an increased advised_hashlevel, and leaves\nthe caller-provided descriptors unchanged.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "4311d70f1f8fef137ef32d60c9eb8014c5cc47c8",
      "tree": "9791f5eca82166a38282b65a325621fbf5df9000",
      "parents": [
        "5192e7524c5334cb301ca3359badad9f0d99b56e"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:38:00 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:34 2026 +0100"
      },
      "message": "tests: libkfont: verify kfont_put_uniscrnmap() copies the map\n\nVerify that kfont_put_uniscrnmap() passes a private copy of the screen\nmap to the ioctl so kernel-side modifications cannot alter the caller\u0027s\nbuffer.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "5192e7524c5334cb301ca3359badad9f0d99b56e",
      "tree": "1dedd064b6c02330b81e19382b9415cb98e67ce2",
      "parents": [
        "4f682181f3c7c943d316516ec23feffbf795ccac"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:34:44 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:34 2026 +0100"
      },
      "message": "tests: libkfont: cover tall kfont_put_font() requests\n\nVerify that kfont_put_font() switches to KD_FONT_OP_SET_TALL when the\nfont dimensions require a non-default vpitch, forwards the expected\ngeometry unchanged, and leaves the caller buffer untouched.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "4f682181f3c7c943d316516ec23feffbf795ccac",
      "tree": "de82b5522d43f900fd23c9dd95bfd740a98a5a34",
      "parents": [
        "4a592dc1c473853ab47810f2f56cdbd874aabe7a"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:23:10 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:34 2026 +0100"
      },
      "message": "tests: libkfont: cover kfont_put_font() ENOSYS handling\n\nVerify that kfont_put_font() returns an error without retrying and\nleaves the caller buffer unchanged when the requested font operation is\nnot supported.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "4a592dc1c473853ab47810f2f56cdbd874aabe7a",
      "tree": "2984a39814335d09a86820e3252c0d25f19ed904",
      "parents": [
        "81639892837e9293d10ceb13d3191dcaeb9a0643"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:18:55 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:34 2026 +0100"
      },
      "message": "tests: libkfont: cover kfont_put_font() retry after EINVAL\n\nCover the case where the kernel rejects a non-standard 8-bit font count\nwith EINVAL and verify that kfont_put_font() retries with a 256-glyph\nbuffer, preserves the original glyph data, zero-pads the extra slots,\nand leaves the caller buffer unchanged.\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "81639892837e9293d10ceb13d3191dcaeb9a0643",
      "tree": "99c0e1a73d4954cab6c16941f3e3343799ff37b1",
      "parents": [
        "ebc51c4efd62cd63ba7c6cae30ee51f785556cc4"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sat Mar 14 11:09:43 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:34 2026 +0100"
      },
      "message": "tests: libkfont: cover kfont_get_font() fallback and failure paths\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    },
    {
      "commit": "ebc51c4efd62cd63ba7c6cae30ee51f785556cc4",
      "tree": "433600ad358287364ba625819b401cd465d546ea",
      "parents": [
        "6a28bd38d37bf78338f40b0623229ef128e47802"
      ],
      "author": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Fri Mar 13 19:03:56 2026 +0100"
      },
      "committer": {
        "name": "Alexey Gladkov",
        "email": "legion@kernel.org",
        "time": "Sun Mar 15 15:43:34 2026 +0100"
      },
      "message": "tests: libkfont: add test for KD_FONT_OP_GET_TALL\n\nSigned-off-by: Alexey Gladkov \u003clegion@kernel.org\u003e\n"
    }
  ],
  "next": "6a28bd38d37bf78338f40b0623229ef128e47802"
}
