)]}'
{
  "log": [
    {
      "commit": "e9b777034976e4993765cf8396ebda1325350f80",
      "tree": "5c1451987736bdc12f7ba4fc382f517b8530b71b",
      "parents": [
        "1abf7f61d849533b34a9e8a88c134724d7c4ffab"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Tue Nov 10 21:25:34 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Wed Nov 11 19:38:20 2026 +0100"
      },
      "message": "mynewt-format: Add --ignore-file option\n\nOther Mynewt repositories should use the options of mynewt-core instead\nof keeping a copy in sync, but still decide which of their own files\nare not checked. The check action and pre-commit hook now do that.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "1abf7f61d849533b34a9e8a88c134724d7c4ffab",
      "tree": "b497b4c43a47ef95f7711abbe2f3f342088fd073",
      "parents": [
        "9e5690e583145e66620a162deb851354de165127"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Tue Nov 10 15:19:54 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 21:14:52 2026 +0100"
      },
      "message": "ci: Remove clang-format style check\n\nmynewt-format is the style check now. Keeping clang-format around\nwould leave contributors with two tools disagreeing about the same\ncode.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "9e5690e583145e66620a162deb851354de165127",
      "tree": "0a21a3c09871815e9588ec9665b9d49340cab29a",
      "parents": [
        "df9ae6ef99fe7526c938710317025e05de13429f"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Tue Nov 10 15:42:53 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 21:14:52 2026 +0100"
      },
      "message": "ci: Make mynewt-format the coding style check\n\nmynewt-format replaces clang-format, so its errors should now block\nmerging. Warnings stay advisory and skip-style-check still works.\nCoding standards and off/on markers follow the new tool, and its\noptions are shared with the other Mynewt repositories.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "df9ae6ef99fe7526c938710317025e05de13429f",
      "tree": "c56f021b17a96d4c1811400fe836f77aa6c09da9",
      "parents": [
        "1c31e524a3a3ce4266cf391e6e8a22d6123c56be"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Mon Nov 09 13:35:11 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Tue Nov 10 15:11:12 2026 +0100"
      },
      "message": "util/ring_buffer: Fix buffers larger than 256 bytes\n\nhead and tail were uint8_t while size is uint16_t. With buffer larger\nthan 256 bytes positions wrapped at 256, so only first 256 bytes were\nused, and ring_buffer_is_full() compared unwrapped next position\n(256) with stored one, so full buffer was never detected and unread\ndata was overwritten. uart_console uses CONSOLE_UART_TX_BUF_SIZE and\nCONSOLE_UART_RX_BUF_SIZE that can be larger.\n\nring_buffer_free_space() used tail - head instead of head - tail, so\nit returned wrong value whenever buffer was not empty, also making\nring_buffer_write() write wrong number of bytes.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "1c31e524a3a3ce4266cf391e6e8a22d6123c56be",
      "tree": "e0d4fbebf0194d6f48bfddd5cc5d9b72eef1759d",
      "parents": [
        "5a8ffef55181a141d45b6c949f98b6a01882d76a"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Fri Nov 06 12:59:27 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Tue Nov 10 15:10:47 2026 +0100"
      },
      "message": "hw/bsp: Enable HAL I2S module in all STM32F4 BSPs\n\nHAL_I2S_MODULE_ENABLED was present only in the disabled (#if 0) part\nof stm32f4xx_hal_conf.h, so i2s_stm32f4 driver failed to compile with\nunknown I2S_HandleTypeDef on every STM32F4 board.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "5a8ffef55181a141d45b6c949f98b6a01882d76a",
      "tree": "7de408900e9bcd426912e3eb73579488feed1496",
      "parents": [
        "571e0e0cffc731bfa4bd9ef68e1b608f4c90b9ab"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Tue Nov 10 12:04:55 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Tue Nov 10 14:38:13 2026 +0100"
      },
      "message": "tinyusb: build with -std\u003dgnu11\n\nNow that core is build with -std\u003dc11 tinyusb fails to build\ndue to asm(\"NOP\") that is reported as function witout prototype.\n\nTo avoid change in TinyUSB we just build with -std\u003dgnu11 that\nalow usage of asm instead of __asm\n\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "571e0e0cffc731bfa4bd9ef68e1b608f4c90b9ab",
      "tree": "9b2dc6ade5744cdd554345d8705a6fd66dd5cb4c",
      "parents": [
        "2fd859934823931272d5b216f2d2a77125effa59"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Fri Oct 09 10:30:22 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "tools: Add coding standards for mynewt-format\n\nContributors need the whole standard in one place before writing\ncode, not rule by rule from --explain.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "2fd859934823931272d5b216f2d2a77125effa59",
      "tree": "6e8c2ab0ca6dbd1576946aab2d0b95dba332aa59",
      "parents": [
        "3b6ddf9e9eb978f9723f3e2a0b3c9381ff8e7a8c"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Wed Oct 07 16:33:10 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "ci: Add informational mynewt-format style check\n\nThe new rules should be tried on real pull requests before they\nreplace clang-format. Review comments show problems where they are,\nwithout digging through CI logs.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "3b6ddf9e9eb978f9723f3e2a0b3c9381ff8e7a8c",
      "tree": "ff581dc8338c016f73c858078a8de4d084b45dea",
      "parents": [
        "26eb60e77277070ffd005b2097060c5144fa322d"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Wed Oct 07 16:33:10 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "tools: Document mynewt-format\n\nContributors need to know how to run the tool and maintainers how to\nextend it.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "26eb60e77277070ffd005b2097060c5144fa322d",
      "tree": "363dd27be1dede8fb8df8ccccebdbbcd732da381",
      "parents": [
        "2e67cf2263a834d39a27867c1c28f847076ebaee"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Wed Oct 07 16:33:10 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "tools: Add mynewt-format unit tests\n\nA checker that reports false positives or breaks code with its fixes\nwould not be trusted.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "2e67cf2263a834d39a27867c1c28f847076ebaee",
      "tree": "2d0d7bcede9073f101c03b26a0d362a09f53fb0f",
      "parents": [
        "3a709bfa34206442c79c2ece480256b78a1c97fc"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Wed Oct 07 16:33:10 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "tools: Add mynewt-format configuration\n\nEach repository needs its own limits and ignore list without changing\nthe tool. Return type placement is not enforced for now.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "3a709bfa34206442c79c2ece480256b78a1c97fc",
      "tree": "967d1c9ff1b19b40e53942b62451beff6be4aacf",
      "parents": [
        "27a498e2ab1cb82ec3f9afabe9c15e40e9a66883"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Wed Oct 07 16:33:10 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "tools: Add expression, safety and declaration rules\n\nBug-prone code like unbounded string functions, implicit fall-through\nor unparenthesised macro arguments easily slips through review.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "27a498e2ab1cb82ec3f9afabe9c15e40e9a66883",
      "tree": "7eeb2f1f4014b03c733abc712bcdfeaa1ec6c2ac",
      "parents": [
        "91dce9b2742b89cdf80366338c64049d82b91fff"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Wed Oct 07 16:33:10 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "tools: Add rules for the documented coding style\n\nMuch of CODING_STANDARDS.md (license headers, include guards, aligned\ndefines) cannot be checked with clang-format, so it is left to review.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "91dce9b2742b89cdf80366338c64049d82b91fff",
      "tree": "1350762a913d2cea75431cb8067d8b3b60a40914",
      "parents": [
        "7c389fa561a39f773d387d7ab4fff3bff2604e40"
      ],
      "author": {
        "name": "Szymon Czapracki",
        "email": "szymon.czapracki@codecoup.pl",
        "time": "Wed Oct 07 16:33:10 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 14:06:09 2026 +0100"
      },
      "message": "tools: Add mynewt-format style checker engine\n\nclang-format output depends on its version and it reformats whole\nstatements, breaking deliberate layout. We need a checker the project\ncontrols that only touches code that actually breaks a rule.\n\nAssisted-by: Claude (claude-opus-5-5)\n"
    },
    {
      "commit": "7c389fa561a39f773d387d7ab4fff3bff2604e40",
      "tree": "f3eb02bc53b0a60194bd13947d2c27447efd54ef",
      "parents": [
        "517a1f9915538268f2a588f23a3af8ae22822ea8"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Mon Nov 09 15:34:47 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Tue Nov 10 13:58:31 2026 +0100"
      },
      "message": "net/ip/lwip_mn: Count lwIP app timeouts in MEMP_NUM_SYS_TIMEOUT\n\nMEMP_NUM_SYS_TIMEOUT was left at lwIP default, which counts only core\ntimers (LWIP_NUM_SYS_TIMEOUT_INTERNAL). With TCP, IP reassembly, ARP,\nDHCP and IGMP that leaves a single spare slot, used by tcp_tmr on\ndemand. mDNS needs a probe timeout per interface and keeps retrying\nevery 250 ms while an interface has no link, so with a host name on\nUSB network and no USB host it held the spare slot for good.\nsys_timeout() then silently failed for the Ethernet interface, which\nnever probed and never answered any mDNS query.\n\nPool now also counts mDNS (LWIP_APPS_MDNS_NUM_NETIF interfaces), TFTP\nand SNTP timeouts, and LWIP_NUM_SYS_TIMEOUT_EXTRA for application\ncode and apps that are not counted automatically.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "517a1f9915538268f2a588f23a3af8ae22822ea8",
      "tree": "60712d556ae2efccf4a73deae7fa4c1e1053f63e",
      "parents": [
        "1be040aed20c788d9e1f366cae567f7427c7cf9f"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 00:58:36 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 10 10:10:09 2026 +0100"
      },
      "message": "THREAT_MODEL: Clarify that master-only issues are not vulnerabilities\n\nCode that is only on master and not in any release is not shipped to\nusers, so flaws affecting only such code are regular bugs or\nregressions and are fixed without a CVE. Add this to the out of scope\nlist, known non-findings and triage dispositions, and to the summary in\nAGENTS.md, so reporters and scanners check that a released version is\naffected.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "1be040aed20c788d9e1f366cae567f7427c7cf9f",
      "tree": "81ffa89f5b69cdcb4c62db6c5b2626323808371d",
      "parents": [
        "48f5ef3667400f60849ef3b98fd47259d3e83381"
      ],
      "author": {
        "name": "Wiktor Kwiatkowski",
        "email": "wiktor.kwiatkowski@codecoup.pl",
        "time": "Mon Nov 09 16:45:14 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Mon Nov 09 21:01:45 2026 +0100"
      },
      "message": "libc/baselibc: Don\u0027t request memory already free at heap end\n\nmalloc() can fail although enough heap is left. For example,\nmalloc(141k), free() and malloc(281k) needs 422k of heap instead of\n281k. With a 392k heap the second malloc() returns NULL.\n\nWhen no free block fits, malloc() asks _sbrk() for the whole size and\nadds the new memory after the last block. If the last block is free,\nthe two are joined into one block. This block is bigger than needed\nby the size of the free block, and that much heap is wasted.\n\nAsk _sbrk() only for the part that the free last block is missing.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "48f5ef3667400f60849ef3b98fd47259d3e83381",
      "tree": "8944b2bf802377feda33ccf6bf494b7a0adfe277",
      "parents": [
        "c8f61a6af8e7621fecb76b7ba75ec2404cd6e6c9"
      ],
      "author": {
        "name": "Wiktor Kwiatkowski",
        "email": "wiktor.kwiatkowski@codecoup.pl",
        "time": "Mon Nov 09 16:44:59 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Mon Nov 09 21:01:45 2026 +0100"
      },
      "message": "libc/baselibc: Fix calloc rejecting valid sizes\n\ncalloc() checked each argument against SIZE_MAX \u003e\u003e 16 to detect\noverflow. On 32-bit targets this rejects any call with nmemb or size\nof 65535 or more, even when the product is small and fits in the heap.\nSuch calls returned NULL and looked like out of memory.\n\nCheck the product for overflow instead.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "c8f61a6af8e7621fecb76b7ba75ec2404cd6e6c9",
      "tree": "15a77f755e0681cce4b9a6df962fdfc9334f81a4",
      "parents": [
        "b8d10299032d7789999873913f78df4d6e3c150d"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Mon Nov 09 01:05:07 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Mon Nov 09 13:55:00 2026 +0100"
      },
      "message": "net/lora/node: Use mbedtls for AES and AES-CMAC\n\nLoRaMAC came with its own copies of AES and AES-CMAC code. Those are\nunder licenses not mentioned in LICENSE, which lists all of\nnet/lora/node as Semtech code, and duplicate what mbedtls provides.\n\nUse mbedtls instead and remove the copies. AES-CMAC requires\nMBEDTLS_CMAC_C, which is enabled by the package. CMAC context is set up\non first use and then reused, so computing MIC does not allocate memory.\n\nOn telee02 lora_app_shell this adds 4 kB of flash and 8 kB of RAM, as\nmbedtls generates AES tables in RAM by default. With\nMBEDTLS_AES_ROM_TABLES and MBEDTLS_AES_FEWER_TABLES it is 6 kB of flash\nand no extra RAM.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "b8d10299032d7789999873913f78df4d6e3c150d",
      "tree": "40618cf81d0a6c46cc0e129e005a3f4f6b0b3028",
      "parents": [
        "e6baf947af7cffd05fe6a2db334af1cfb221b7ec"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Mon Nov 09 11:43:32 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Mon Nov 09 13:54:43 2026 +0100"
      },
      "message": "hw: Add BSD license header to cmsis_nvic files\n\nThe cmsis_nvic files were copied from an early mbed release that had\nonly an \"All rights reserved\" ARM copyright line and no license. ARM\nlater released these files under the 3-clause BSD license (mbed PR\n#554, and the ARMmbed/cmsis-core repository, last release v1.2.0).\n\nReplace the old header with the one from ARMmbed/cmsis-core v1.2.0 so\nthe license is stated in the files themselves. stm32f3xx and samd21xx\nalso carried an ASF header on top of the ARM one, which is dropped as\nthese files are not ASF licensed.\n\nUpdate LICENSE accordingly: list all cmsis_nvic files under a single\nBSD entry (11 were missing) and remove the apollo3 one from the\nAmbiqSuite list.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "e6baf947af7cffd05fe6a2db334af1cfb221b7ec",
      "tree": "800534aded21f4b0342fdf6927f509290229678e",
      "parents": [
        "55d5a22aecfd9bbf8f858048de229fc006d3be2c"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 22:02:37 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Sun Nov 08 22:04:14 2026 +0100"
      },
      "message": "hw/mcu/stm32g0: Add mcu_cli shell module\n\nAdds the \"mcu\" shell module for STM32G0, similar to the ones for other\nSTM32 families.\n\n\"mcu info [all]\" shows oscillators, PLL configuration with P/Q/R\noutputs, SYSCLK source, flash latency, voltage scaling and enabled (or\nall) peripherals. For peripherals with clock enabled it also shows:\n- timers: counter frequency, ARR and update rate,\n- USART/LPUART: actual baud rate and kernel clock source,\n- I2C: SCL frequency computed from TIMINGR,\n- SPI: SCK frequency,\n- USB: clock frequency and source,\n- ADC: ADC clock.\nRegisters of peripherals with clock disabled are not read.\n\n\"mcu timingr \u003cvalue\u003e [1|2|3]\" sets TIMINGR of selected I2C instance.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "55d5a22aecfd9bbf8f858048de229fc006d3be2c",
      "tree": "a7b720cbc37b54052f0ff20a61c8d8ec96b9f065",
      "parents": [
        "c305dd0bb3dd74b9e41f1a0d4f01779399195942"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Thu Oct 29 20:42:24 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 21:22:01 2026 +0100"
      },
      "message": "hw/hal/shell_gpio: Add gpio shell module\n\nShell module gpio with commands to control any pin with hal_gpio API:\nin, out, read, write, toggle, pulse and deinit. Pin can be given as\na number or, on MCUs with MCU_GPIO_PORTx() macros, as port and pin\n(PA0, A0). Pulse sets level for given time (ms or us) and restores\nprevious one.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "c305dd0bb3dd74b9e41f1a0d4f01779399195942",
      "tree": "3ede76605cab4bc986e0aefc9a20f4c2b4f9473f",
      "parents": [
        "e9ad94849246f635a6192f129b57660202ec0f78"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 22:02:59 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 21:20:13 2026 +0100"
      },
      "message": "hw/bsp/weact_h743vi: Allow DMA for SPI transfers\n\nSPI DMA was disabled because of stale data returned by spi_stm32\ndriver when data cache was enabled. Driver now handles data cache\nso workaround is no longer needed.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "e9ad94849246f635a6192f129b57660202ec0f78",
      "tree": "0b96dd6da88b7e7031c0ca6c0a3ade9d4bdb09b2",
      "parents": [
        "0493631656013dabd615d856fd312be88af62487"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 22:02:59 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 21:20:13 2026 +0100"
      },
      "message": "hw/bus/drivers/spi_stm32: Handle data cache for DMA transfers\n\nOn Cortex-M7 devices (F7, H7) with data cache enabled DMA was used\nwithout any cache maintenance. Data received by DMA was not visible\nto CPU that read old content from cache (H743 reading SPI flash\nreturned stale stack data), and data to transmit could still sit\nin cache when DMA read it from memory.\n\nNow TX buffers are cleaned before DMA starts and RX buffers are\ninvalidated before and after transfer. To not lose CPU writes to\nthe same cache line, DMA is used for reception only when buffer\nstarts and ends on cache line boundary, otherwise interrupt mode\ntransfer is used.\n\nOn H7 DTCM RAM is not accessible by DMA1/DMA2, buffers located\nthere are also transferred in interrupt mode.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "0493631656013dabd615d856fd312be88af62487",
      "tree": "334f280d1f356418074ec66dc99dff24c21e8589",
      "parents": [
        "4d368dcfb51f86948f5ed01dd3ce251b7afbe064"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 22:02:59 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 21:20:13 2026 +0100"
      },
      "message": "hw/bus/drivers/spi_stm32: Use DMA channel ids for H7 streams\n\nDMA configuration for H7 used stream number as channel id, so\nDMA2 streams were registered in stm32_dma as DMA1 channels. DMA2\ninterrupt handlers then used empty table entries and DMA1 stream\nwith the same number could not be used at the same time.\nDMA1 clock was also enabled instead of DMA2.\n\nNow DMAx_CHy ids are used as for other families.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "4d368dcfb51f86948f5ed01dd3ce251b7afbe064",
      "tree": "230b682142905d63d47721dfa2a76a85e7521dcf",
      "parents": [
        "bc7749e2e39c0261a7b2940280f80b1929696aef"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 22:02:58 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 21:20:13 2026 +0100"
      },
      "message": "hw/bus/drivers/spi_stm32: Add STM32H5 DMA configuration\n\nspi_stm32 package depends on hw/bus/drivers/spi_stm32/stm32h5xx\nfor MCU_STM32H5 but this package was never added, so builds for H5\nwith BUS_DRIVER_PRESENT and SPI failed with missing package.\n\nPackage defines GPDMA1 and GPDMA2 channel 0-7 configuration for\nSPI1-SPI6 (same scheme as U5) and default channels so each SPI uses\nseparate pair of channels.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "bc7749e2e39c0261a7b2940280f80b1929696aef",
      "tree": "d877a12a993dee3f8b692bceb63d2deddc25defb",
      "parents": [
        "0ce422ca862c54af19b2253749d54378f9cb1cc1"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 22:02:35 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 21:20:13 2026 +0100"
      },
      "message": "hw/bus/drivers/spi_stm32: Fix GPDMA clock enable\n\nFor MCUs with GPDMA (STM32H5) code that should enable DMA clock\nused __HAL_RCC_GPDMAx_CLK_DISABLE() instead of the _ENABLE()\nvariant. DMA channels were never clocked so DMA transfers never\nstarted and SPI transfer completion never came. Task waiting for\ntransfer end was blocked forever (seen on H503 with SPI flash).\n\nDMA clock was also enabled only for RX channel. Now clock is enabled\nfor both RX and TX channels, they can be on different controllers.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n\n"
    },
    {
      "commit": "0ce422ca862c54af19b2253749d54378f9cb1cc1",
      "tree": "9dedc9df36a16b5139815b5b1dd9ad89db37ca57",
      "parents": [
        "fa395897c6d70679e0bbe6604515a11a86787eb7"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 22:02:34 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 21:20:13 2026 +0100"
      },
      "message": "hw/mcu/stm/stm32_common: Handle GPDMA2 channels in stm32_dma\n\nOn STM32H5 second DMA controller is called GPDMA2 and DMA2 is not\ndefined. Channel table had only 8 entries and DMA2 interrupt\nhandlers were not built, so any DMA2_CHx channel used by a driver\nwas stored past the end of the table.\n\nNow GPDMA2 is treated the same way as DMA2. Channel index check\nis also fixed, it allowed index equal to DMA_CH_NUM and did not\ntake table size into account.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n\n"
    },
    {
      "commit": "fa395897c6d70679e0bbe6604515a11a86787eb7",
      "tree": "af4a84349ae619924f98864dcec2a41443613cdf",
      "parents": [
        "db2754d293d6171a00a7cc8f260c88b972ae0e1a"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Fri Nov 06 12:33:00 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 18:20:22 2026 +0100"
      },
      "message": "compiler: Drop sifive from riscv64-unknown-elf name\n\nThe compiler package only calls the stock riscv64-unknown-elf-*\ntools. It is not tied to the SiFive SDK toolchain it was named after,\nand works with distribution toolchains such as MSYS2 or Ubuntu\u0027s\ngcc-riscv64-unknown-elf.\n\nRename compiler/riscv64-unknown-elf-sifive to\ncompiler/riscv64-unknown-elf and update the hifive1 BSP. Out-of-tree\nBSPs referring to the old name need the same update.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "db2754d293d6171a00a7cc8f260c88b972ae0e1a",
      "tree": "ac304a0069c309d5a92b7bf2955209eb513117c5",
      "parents": [
        "c17dd238baee2856f8529e7b5b94ac05a2153432"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Fri Nov 06 11:45:52 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 18:20:22 2026 +0100"
      },
      "message": "libc/baselibc: Fix RISC-V memset return value\n\nThe RISC-V inline assembly advanced the dst argument itself, so\nmemset() returned dst + n instead of dst. The asm also lacked a\n\"memory\" clobber.\n\nGCC 16 reuses the memset() return value in place of its first\nargument. In os_dev_create() this put dev + 16 on the device list,\nand os_dev_initialize() then called a NULL od_init, so HiFive1 apps\ntrapped at address 0 and reset in a loop.\n\nStep the local copy q instead and add the \"memory\" clobber.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "c17dd238baee2856f8529e7b5b94ac05a2153432",
      "tree": "c20237e0557facdc7db5a01290b8d97f2780dd26",
      "parents": [
        "ca122b290264ceafc2dd1d88e2d0dc52b4869eeb"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Fri Nov 06 11:45:45 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 18:20:22 2026 +0100"
      },
      "message": "bsp/hifive1: Update OpenOCD config for 0.12\n\nMainline OpenOCD has supported RISC-V since 0.11, so the SiFive fork\nis no longer needed. Replace the deprecated command names\n(interface, adapter_khz, ftdi_*) with their current forms and\nselect the JTAG transport explicitly.\n\nThe riscv target with debug spec 0.11 has no \u0027reset\u0027 command, so\nthe unused pulse_srst block becomes a hifive1_reset proc that pulses\nnSRST through the FT2232H. It can be called after init to recover a\nhart stuck in debug mode.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "ca122b290264ceafc2dd1d88e2d0dc52b4869eeb",
      "tree": "e58458a63ee2e92f16b0f06b0303bb9d020fe164",
      "parents": [
        "e5bc14256528776a6bc27d921d6e7e54b1b1d9ee"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Fri Nov 06 11:45:33 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Fri Nov 06 18:20:22 2026 +0100"
      },
      "message": "mcu/fe310: Add zicsr and zifencei to -march\n\nSince GCC 12 (RISC-V ISA spec 20191213) CSR access and fence.i are\nseparate extensions, so -march\u003drv32imac rejects csrr/csrw/fence.i\nwith \"extension `zicsr\u0027 required\".\n\nUse rv32imac_zicsr_zifencei. The flags are now given once, as\napp.cflags of the MCU package, which newt applies to every package\nand to the link. The BSP copy in pkg.cflags is removed.\n\napp.cflags must be a YAML list: newt silently ignores a plain string.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "e5bc14256528776a6bc27d921d6e7e54b1b1d9ee",
      "tree": "3fe1c3aff6b8dc639f4c0a0daa659ba675d80953",
      "parents": [
        "db2274f9f13d41e57126733aa76b36326e3ddcc7"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Thu Nov 05 23:16:28 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 15:41:20 2026 +0100"
      },
      "message": "docs: Document C11 in coding standards\n\nC code is now built with -std\u003dc11, but coding standards don\u0027t mention\nthe language standard, so contributors have no way to learn it other\nthan a build failure on code relying on GNU language modes.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "db2274f9f13d41e57126733aa76b36326e3ddcc7",
      "tree": "ae672b705a9f22140311d8db1192c30a6ae7432c",
      "parents": [
        "63d0bfb6a3f5d910efaa77b830f2fd3569765a6f"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 20 02:01:53 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 15:41:20 2026 +0100"
      },
      "message": "util: Don\u0027t override C standard in packages\n\nutil/cmdarg and util/parse set -std\u003dc99 in pkg.cflags to get\n[U]LLONG_{MIN,MAX}. Those are also provided in C11, which is now set\nby compiler packages, and package overrides take precedence over it.\n\nRemove those so that all code is built with the same standard.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "63d0bfb6a3f5d910efaa77b830f2fd3569765a6f",
      "tree": "3bb42f4aae9d5e986cd326828bc2c1e7f0b8c6cd",
      "parents": [
        "5d831fb643894012dfd38eb898d833c14a6ec3ba"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 20 02:01:53 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 15:41:20 2026 +0100"
      },
      "message": "net: Don\u0027t override C standard in packages\n\nnet/oic and net/lora/node set -std\u003dc99 in pkg.cflags. Those take\nprecedence over the C standard set by compiler package, so code in\nthose packages was not built as C11.\n\nRemove those so that all code is built with the same standard. C11 is\na superset of what those packages required from C99 (e.g. declarations\nin for loops).\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "5d831fb643894012dfd38eb898d833c14a6ec3ba",
      "tree": "c71f779a12d3bdbb0a4d72db72c129827cbd30c1",
      "parents": [
        "d3c5a995bdcdd46b7cc23d22fc1670af582b7daa"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 20 02:01:53 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 15:41:20 2026 +0100"
      },
      "message": "hw/mcu: Don\u0027t override C standard in packages\n\nnordic, nxp and samd21xx MCU packages set -std\u003dgnu99 or -std\u003dc99 in\npkg.cflags. Those take precedence over the C standard set by compiler\npackage, so code in those packages was not built as C11.\n\nRemove those so that all MCU code is built with the same standard. It\nbuilds fine with -std\u003dc11.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "d3c5a995bdcdd46b7cc23d22fc1670af582b7daa",
      "tree": "841697dc63d3add3bad79b2719f4ae2d33970a5d",
      "parents": [
        "606cfecdf756c71318ed8a5f5078372e31f611c6"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 20 00:59:39 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 15:41:20 2026 +0100"
      },
      "message": "compiler: Build C code with -std\u003dc11\n\nCompilers don\u0027t specify a C standard, so code is built with the\ntoolchain default (gnu99 up to gnu23 depending on GCC version). This\nlets GNU extensions and newer C features slip in unnoticed.\n\nUse compiler.c.flags to build C code with -std\u003dc11. compiler.flags\ncan\u0027t be used as those are also passed when compiling C++ files.\nxc32 -std\u003dgnu11 is moved to compiler.c.flags as -std\u003dc11 for the same\nreason.\n\nPackages may still override the standard with -std in pkg.cflags.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "606cfecdf756c71318ed8a5f5078372e31f611c6",
      "tree": "eb94b57b43b6ff529495bac677be0f1f54247e85",
      "parents": [
        "75d5e6f6283adcdaea5c7e87d93a243a91621930"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 20 00:58:22 2026 +0200"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 14:07:14 2026 +0100"
      },
      "message": "compiler/sim: Use -Og for debug build profile\n\nsim and sim-armv7 compilers use -O0 for debug build profile while all\nother compilers use -Og. Use -Og for native builds as well so that the\ndebug profile is consistent across compilers. This also makes unit\ntests (built with debug profile) see the same optimization related\nwarnings as debug builds for hardware targets.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "75d5e6f6283adcdaea5c7e87d93a243a91621930",
      "tree": "52def84d51b39c4b2253e65b1f866d2329d550fd",
      "parents": [
        "91517e1c604d086cfda64f6d6655869408fd48b8"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 10:40:33 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Nov 06 14:07:14 2026 +0100"
      },
      "message": "kernel/sim: Disable _FORTIFY_SOURCE\n\nSim switches tasks with siglongjmp. With _FORTIFY_SOURCE that resolves\nto a checked variant which treats a jump to another task stack as an\ninvalid frame and aborts with \"longjmp causes uninitialized stack\nframe\". Some toolchains, e.g. Ubuntu GCC, define _FORTIFY_SOURCE by\ndefault whenever optimization is enabled, so sim builds crash there.\n\nUndefine it for kernel/sim only, so other packages keep the checks.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "91517e1c604d086cfda64f6d6655869408fd48b8",
      "tree": "5cb4d0792739712cdfb08792962ef4006293fc30",
      "parents": [
        "9e965aecf911aeedc16b4b935d9f49e3be376701"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Wed Nov 04 22:04:55 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Nov 05 21:11:17 2026 +0100"
      },
      "message": "hw/bsp/hifive1: Expose SystemCoreClock through MCU header\n\nSystemCoreClock is defined by the fe310 clock code (sys_clock.c) but\nno header declares it, so applications that read the CPU clock frequency\nfail to compile for hifive1.\n\nDeclare it in the fe310 MCU header, next to the code that sets it, and\nhave the hifive1 BSP header include \u003cmcu/mcu.h\u003e so applications see the\nvariable through the BSP they already include.\n\nAssisted-by: Claude:claude-haiku-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "9e965aecf911aeedc16b4b935d9f49e3be376701",
      "tree": "2dbc625c45ec8d3bce2f39360e8906681ecafadd",
      "parents": [
        "bd2effa782ccc0291e4df571ef39bcbf2c9f1ebd"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Wed Nov 04 22:02:06 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Nov 05 21:11:17 2026 +0100"
      },
      "message": "hw/mcu: Add missing mcu/mcu.h for apollo2, apollo3 and fe310\n\nsys/shell/gpio users and other packages include \u003cmcu/mcu.h\u003e\nunconditionally, but the apollo2, apollo3 and fe310 MCU packages did\nnot provide one, so their builds failed with a missing header.\n\nAdd a thin mcu/mcu.h to each that includes the family header\n(mcu/apollo2.h, mcu/apollo3.h, mcu/fe310.h). The apollo headers also\ndefine MCU_SYSVIEW_INTERRUPTS so sys/sysview can name the interrupts.\n\nAssisted-by: Claude:claude-haiku-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "bd2effa782ccc0291e4df571ef39bcbf2c9f1ebd",
      "tree": "8e514d5a610f527f5d2f0f248e88c96d89d7ab7d",
      "parents": [
        "f1c3c88f0133cc8ebf516ec4da875b1e690d0e5a"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Wed Nov 04 19:25:06 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Nov 05 19:55:17 2026 +0100"
      },
      "message": "hw/mcu: Add missing hal_gpio_deinit()\n\nhal_gpio_deinit() is declared in hal/hal_gpio.h but was not implemented\nby the native, nxp/kinetis, nxp/lpc55xx, nxp/mkw41z and sifive/fe310\nGPIO HAL. Add an implementation to each:\n\n- native, nxp/kinetis, nxp/lpc55xx, sifive/fe310: release any IRQ on the\n  pin (where IRQs are supported) and reconfigure it as an input with no\n  pull.\n- nxp/mkw41z: return 0, matching the rest of that stub HAL.\n\nAssisted-by: Claude:claude-haiku-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "f1c3c88f0133cc8ebf516ec4da875b1e690d0e5a",
      "tree": "72fef1521c0c73c1718208a05cbc8a6918533b92",
      "parents": [
        "828d9a265beca95c5aeaf9f288470d668598503f"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Wed Nov 04 08:16:20 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Nov 04 18:29:24 2026 +0100"
      },
      "message": "net/ip/lwip_mn: Add syscfg for number of IGMP groups\n\nMEMP_NUM_IGMP_GROUP was not set, so lwIP\u0027s default of 8 applied. Each\nIGMP interface uses one entry for the all-systems group and one for\nevery group joined on it. A group joined on IP4_ADDR_ANY takes one\nentry on every IGMP interface, so a device with Ethernet and USB net\nrunning mDNS, SSDP and a couple of application groups runs out.\n\nAdd LWIP_NUM_IGMP_GROUP. The default stays 8.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "828d9a265beca95c5aeaf9f288470d668598503f",
      "tree": "f330fddb411e4b11105b611d752a86630b19d0b4",
      "parents": [
        "099ded1b1b017059fdab11478858ff0017c4073a"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Tue Nov 03 20:30:27 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Nov 04 18:17:02 2026 +0100"
      },
      "message": "hw/usb/tinyusb/stm32wb55: Keep CLK48 for USB with CPU2 running\n\nWhen wireless stack runs on CPU2 it uses CLK48 for RNG and may\nreconfigure or stop HSI48 unless CPU1 holds CLK48 config semaphore\n(HSEM 5, AN5289). HSI48 was observed turned off after CPU2 BLE init,\nwhich would leave USB without clock.\n\nWhen HSI48 is enabled CPU1 now takes the semaphore, selects HSI48 as\nUSB clock and enables CRS so HSI48 is trimmed from USB SOF, which is\nrequired for USB accuracy.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "099ded1b1b017059fdab11478858ff0017c4073a",
      "tree": "72cb4ec9d0c16c87f339879224484bc943fa043e",
      "parents": [
        "2784c46d4f0b79e2821392ffd937371706b8885f"
      ],
      "author": {
        "name": "Mariusz Skamra",
        "email": "mariusz.skamra@codecoup.pl",
        "time": "Tue Nov 03 14:51:49 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Wed Nov 04 09:40:41 2026 +0100"
      },
      "message": "hw/mcu/nordic/nrf5340_net: Use the IPC in the bootloader only\n\nOnly the virtual flash of the bootloader uses ipc_nrf5340, but it was\npulled into every network core application. It fails when the\napplication core does not run Mynewt.\n\nNRF5340_NET_VFLASH_ID set to -1 now disables the virtual flash and the\nIPC. This also drops the unused IPC flash driver from the network core\nBSPs. Applications using the IPC have to depend on it.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "2784c46d4f0b79e2821392ffd937371706b8885f",
      "tree": "d4c0250ac431e2e7c2bb63f8573c5374aff36c74",
      "parents": [
        "c81875e23d714c2c09de722a73df0feb6bdbdad4"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Thu Jan 09 11:32:29 2025 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Tue Nov 03 21:41:30 2026 +0100"
      },
      "message": "kernel/os: Allow 32000Hz for os_cputime\n\n32000 Hz is a valid LFXO frequency on some Nordic devices, e.g. nRF5340.\nThis adds dedicated conversions for 32000 Hz, so os_cputime and NimBLE\nLL can run from such a clock.\n"
    },
    {
      "commit": "c81875e23d714c2c09de722a73df0feb6bdbdad4",
      "tree": "ca97dfd839faf2aef1a21697fbb29e3db268ba25",
      "parents": [
        "45e3f66c40a827350e1604cf115931a00c828e53"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sun Nov 01 10:19:13 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Tue Nov 03 07:03:17 2026 +0100"
      },
      "message": "hw/cmsis-core: Clear pending SysTick in Cortex_DisableAll\n\nCortex_DisableAll() stops SysTick but leaves its exception pending if\nSysTick fired while interrupts were disabled. Bootloader calls it from\nhal_bsp_deinit() before jumping to application, which then takes the\nstale SysTick exception as soon as it enables interrupts, possibly\nbefore OS is ready to handle it.\n\nClear pending SysTick together with stopping it, like NVIC_DisableAll()\ndoes for NVIC interrupts.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n\n"
    },
    {
      "commit": "45e3f66c40a827350e1604cf115931a00c828e53",
      "tree": "753e49feff88c9060eac02bae1ddec0dc8892713",
      "parents": [
        "6caec67f236099aa7ebb0af17cd8514829f0ec4c"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Thu Oct 29 18:04:00 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Tue Nov 03 07:02:59 2026 +0100"
      },
      "message": "hw/mcu/stm/stm32wbxx: Fix clock setup with all oscillators enabled\n\nSecond HAL_RCC_OscConfig() call, intended to turn off unused\noscillators, was made even when HSI, HSE, HSI48 and MSI were all\nenabled. In that case osc_init still held the first configuration\nand HAL tried to reconfigure MSI that already drives PLL, which\nfailed and ended in assert().\n\nNow the second call is made only when some oscillator is to be\nturned off.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "6caec67f236099aa7ebb0af17cd8514829f0ec4c",
      "tree": "967bf47cbae2c414ca15e23540d46b4857e61212",
      "parents": [
        "5b98ce58fc3e1f50f0253f60e595645a334d10fb"
      ],
      "author": {
        "name": "Wiktor Kwiatkowski",
        "email": "wiktor.kwiatkowski@codecoup.pl",
        "time": "Mon Oct 26 19:08:46 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 03 00:31:12 2026 +0100"
      },
      "message": "tinyusb: Support MCUboot swap using offset algorithm\n\nSwap using offset algorithm requires a new image to be placed at\nsector 1 of slot 1, sector 0 stays empty. Write images uploaded\nover USB DFU and MSC at this offset instead of hardcoded 0.\n"
    },
    {
      "commit": "5b98ce58fc3e1f50f0253f60e595645a334d10fb",
      "tree": "fbe7228eebfdb664979c3e81363048c6c845d3d2",
      "parents": [
        "f2dff1393b6caa30595179eff3706c674f731c4c"
      ],
      "author": {
        "name": "Wiktor Kwiatkowski",
        "email": "wiktor.kwiatkowski@codecoup.pl",
        "time": "Mon Oct 26 18:59:42 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Nov 03 00:31:12 2026 +0100"
      },
      "message": "mgmt: Support MCUboot swap using offset algorithm\n\nSwap using offset algorithm requires a new image to be placed at\nsector 1 of slot 1, sector 0 stays empty. Use the actual image offset\n(one sector, or 0 after the swap) instead of hardcoded 0 when\naccessing slot 1.\n\nOther algorithms, including the default swap using scratch, are not\naffected and still use offset 0.\n"
    },
    {
      "commit": "f2dff1393b6caa30595179eff3706c674f731c4c",
      "tree": "c8b7dd7ba4cb94d457d8eecce5d8218348551e36",
      "parents": [
        "9e0766d467322e11a5b5d34fbc51d2a5b5852c1c"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Mon Nov 02 08:10:34 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Mon Nov 02 10:29:09 2026 +0100"
      },
      "message": "mgmt/log_mgmt: Drop broken LOG_NMGR_MAX_RSP_LEN override\n\nlog_mgmt syscfg had a backward compatibility block that mapped\nLOG_NMGR_MAX_RSP_LEN to LOG_MGMT_MAX_RSP_SIZE. That setting does not\nexist (log_mgmt uses LOG_MGMT_MAX_RSP_LEN), and since\nLOG_NMGR_MAX_RSP_LEN defaults to 400 the condition was always true,\nso the block applied to every build that included log_mgmt.\n\nLOG_NMGR_MAX_RSP_LEN has had no reader since log_nmgr.c was removed.\nRemove the override and mark the setting deprecated so targets that\nstill set it get a warning instead of a silent no-op.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "9e0766d467322e11a5b5d34fbc51d2a5b5852c1c",
      "tree": "7d1d479b98aa8c356fbc291e08c19e13ccd5b729",
      "parents": [
        "997a91d463955e3ae542dd02f96272b7ae2ba6d3"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Fri Oct 30 17:11:29 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Sun Nov 01 13:37:08 2026 +0100"
      },
      "message": "net/ip/lwip/apps: Start MDNS responder on interfaces with host name\n\nNothing started MDNS responder when LWIP_APPS_MDNS was enabled. Start\nit in sysinit, after network interfaces are added, on every interface\nthat has host name set.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "997a91d463955e3ae542dd02f96272b7ae2ba6d3",
      "tree": "00f726103386d5c3f16702d03422e3870993c617",
      "parents": [
        "caa7075aa26d25c9b9d786c69e7967524e010d43"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Fri Oct 30 17:11:29 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Sun Nov 01 13:37:08 2026 +0100"
      },
      "message": "net/ip/lwip_mn: Enable MDNS responder with LWIP_APPS_MDNS\n\nLWIP_APPS_MDNS compiled lwIP MDNS sources, but the responder was\ndisabled in lwipopts.h, so they produced no code. Enable responder\ntogether with netif client data slot it needs and extended status\ncallback, so that responder follows address changes (e.g. DHCP).\n\nlwipopts.h now includes syscfg.h so that settings can be checked in\n#if directives.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "caa7075aa26d25c9b9d786c69e7967524e010d43",
      "tree": "aeb2c57d4916e19969549cf4fa4bcdbe1cfa51ce",
      "parents": [
        "0d24fcca910b8554346aa8c0f408e39b85c35f6a"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Fri Oct 30 22:01:22 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Sun Nov 01 13:36:41 2026 +0100"
      },
      "message": "hw/bsp: Bring up Ethernet with DHCP on boards using stm32_eth\n\nApplications on these boards rely on Ethernet being brought up with\nDHCP without any code. Enable LWIP_AUTO_UP and LWIP_AUTO_UP_DHCP when\nETH_0 is enabled, so they keep working when stm32_eth driver stops\ndoing it.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "0d24fcca910b8554346aa8c0f408e39b85c35f6a",
      "tree": "2e5c29ef597907c10d5595d41888cef294ab3bc6",
      "parents": [
        "23dea280b553564e57d2d56eba37b3d0369ec616"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Fri Oct 30 22:01:22 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Sun Nov 01 13:36:41 2026 +0100"
      },
      "message": "net/ip/lwip_mn: Add option to bring up network interfaces\n\nNetwork interface drivers should only add interfaces, bringing them up\nand IPv4 configuration belong to the application. Applications that\ndo not configure interfaces themselves can enable LWIP_AUTO_UP (and\nLWIP_AUTO_UP_DHCP): in sysinit, after drivers, every interface left\ndown is brought up, the first one becomes default route and DHCP\nclient is started on it. Interfaces already up are not touched.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "23dea280b553564e57d2d56eba37b3d0369ec616",
      "tree": "edc5b4f137e2f909c40d1ab1c2dbd696ed7fc68d",
      "parents": [
        "f306b43cdef6dfd3399c4eefc7b5a4002ef911c8"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Fri Oct 30 22:01:39 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Sun Nov 01 13:36:27 2026 +0100"
      },
      "message": "drivers/stm32_eth: Leave interface configuration to the application\n\nDriver brought the interface up, made it default route and started\nDHCP client (STM32_ETH_AUTO_UP, STM32_ETH_DHCP or eth/up, eth/dhcp\nconfig values). That is network policy of the application, which may\nalso need to do something first, e.g. set host name before the first\nDHCP request.\n\nDriver now only adds the interface with MAC address and IPv6\nlink-local address (now created also when the interface is down).\nThe application brings it up, e.g. with netif_set_up(), dhcp_start()\nor \u0027ip \u003cinterface\u003e up\u0027 shell command, or enables LWIP_AUTO_UP and\nLWIP_AUTO_UP_DHCP (BSPs using this driver do). STM32_ETH_AUTO_UP and\nSTM32_ETH_DHCP are defunct, eth/up and eth/dhcp config values are\ngone; eth/mac stays.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "f306b43cdef6dfd3399c4eefc7b5a4002ef911c8",
      "tree": "089bdb797350eabbb284e4b16909f7b03ab96414",
      "parents": [
        "a59b6e69e15e0e91dc5e3e8881c16dc72d175688"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Fri Oct 30 16:38:32 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Sun Nov 01 13:36:27 2026 +0100"
      },
      "message": "drivers/stm32_eth: Create IPv6 link-local address\n\nInterface had no IPv6 address, so nothing could be sent over IPv6.\nlwIP MDNS responder counts a probe only when it was sent over both\nIPv4 and IPv6, so with LWIP_IPV6 enabled it kept probing forever and\nnever answered queries.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "a59b6e69e15e0e91dc5e3e8881c16dc72d175688",
      "tree": "bbb0d95767b64aa66707c96ceb1a0ad3754421c9",
      "parents": [
        "1dd9be925856c1d861957258ba48eb35a48cfa34"
      ],
      "author": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Fri Oct 30 15:39:10 2026 +0100"
      },
      "committer": {
        "name": "Andrzej Kaczmarek",
        "email": "andrzej.kaczmarek@codecoup.pl",
        "time": "Sun Nov 01 13:36:27 2026 +0100"
      },
      "message": "drivers/stm32_eth: Derive MAC address from hardware id\n\nWhen last 3 bytes of STM32_ETH_MAC_ADDR (or eth/mac config value)\nare 0, first 3 bytes are used as prefix and last 3 bytes are taken\nfrom FNV-1a hash of hal_bsp_hw_id(). This allows one image to be\nused on many boards without MAC address collisions.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "1dd9be925856c1d861957258ba48eb35a48cfa34",
      "tree": "fe0ddc7dd8af39586329106d0a7ec584c06efe2a",
      "parents": [
        "955366bb004f2512ea526066ec4d0ffa27061cf6"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 16:49:43 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Sun Nov 01 09:34:44 2026 +0100"
      },
      "message": "tinyusb: stm32g0: Fix USB clock configuration\n\nWhen HSI48 is used as USB clock CRS was not enabled. Without CRS\nHSI48 accuracy is not sufficient for USB. On tested STM32G0B1 CRS\nhad to move trimming value by 4 steps (~0.5%), out of USB full speed\ntolerance, resulting in intermittent enumeration failures.\nCRS is now enabled, its reset configuration already uses USB SOF\nas synchronization source.\n\nWhen HSI48 is not enabled, PLL \"Q\" output is now selected as USB\nclock (if PLL is enabled), previously USB clock source was left at\nreset value (HSI48) that was not running.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "955366bb004f2512ea526066ec4d0ffa27061cf6",
      "tree": "37a730f154a503f832c356bb6d4f002236f3cbde",
      "parents": [
        "bc89a76f108ab74fed61d54b6f62521c29ecfcf8"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 16:49:42 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Sun Nov 01 09:34:19 2026 +0100"
      },
      "message": "hw/mcu/stm: Fix STM32G0 flash erase on single bank devices\n\nErase code selected bank 2 for addresses in upper half of flash\nwhenever FLASH_BANK_2 was defined. FLASH_BANK_2 is defined for all\nSTM32G0B1/G0C1 devices but only some of them have dual bank flash\n(depends on part type and DUAL_BANK option byte).\n\nOn single bank 128kB STM32G0B1CB erase of any page at or above\n0x08010000 was requested with BKER set and failed so nothing could\nbe written to second half of flash.\n\nNow FLASH_BANK_NB and FLASH_BANK_SIZE (evaluated by HAL at runtime)\nare used to decide which bank to erase. Pages in bank 2 are numbered\nfrom 256 as described in reference manual.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "bc89a76f108ab74fed61d54b6f62521c29ecfcf8",
      "tree": "e0a23ee01aa928b1244637271596e79f53d8dfa7",
      "parents": [
        "6f14f0b9a9bcf150a02db68bc59fccbe6a3eb0f5"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 16:49:42 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Sun Nov 01 09:33:55 2026 +0100"
      },
      "message": "hw/mcu/stm: Fix nvreg on MCUs with backup registers in TAMP\n\nOn STM32G0 (and STM32L412/L422/L4P5/L4Q5) backup registers are\nlocated in TAMP peripheral. HAL_RTCEx_BKUPWrite/Read() find them\nusing hrtc-\u003eTampOffset that is normally set by HAL_RTC_Init().\n\nhal_nvreg created RTC handle with Instance only so TampOffset was 0\nand reads and writes went to RTC registers instead of backup\nregisters. As a result values written by application (i.e. DFU\nrequest magic) were not visible to bootloader.\n\nTampOffset is now set for devices that have this field in\nRTC_HandleTypeDef.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "6f14f0b9a9bcf150a02db68bc59fccbe6a3eb0f5",
      "tree": "3aefe1e7607952a035c69dcee66d034b52bfbb7d",
      "parents": [
        "cd01cc8ca567d6415d8cfd16f0529b329f1b95c7"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 17:58:29 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Sun Nov 01 09:33:12 2026 +0100"
      },
      "message": "hw/mcu/stm: Fix STM32G0 default voltage scaling\n\nDefault value of STM32_CLOCK_VOLTAGESCALING_CONFIG was\nPWR_REGULATOR_VOLTAGE_SCALE1_BOOST that does not exist on STM32G0\n(copied from STM32G4) so build failed for BSP that did not override\nit. Description also had STM32G4 frequency limits.\n\nDefault is now PWR_REGULATOR_VOLTAGE_SCALE1 and description lists\nSTM32G0 limits (range 1 up to 64MHz, range 2 up to 16MHz).\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n\n"
    },
    {
      "commit": "cd01cc8ca567d6415d8cfd16f0529b329f1b95c7",
      "tree": "5d8c462c8824361841fd6edf54dce22d648ebc7b",
      "parents": [
        "cd9ebae1cadc3b0f60ea7229c76f56a55d98272b"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 31 19:07:24 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Sun Nov 01 09:32:44 2026 +0100"
      },
      "message": "hw: Rename remaining .bss.core.nz to .noinit\n\nCommit e73585777 renamed .bss.core.nz section to .noinit in linker\ntemplates and BSPs but some files were not updated:\n\n- weact_h743vi bsp.h still placed bssnz_t variables in .bss.core.nz.\n  BSP uses autogenerated linker script where this section is caught\n  by *(.bss*) so variables were cleared on every boot.\n- stm32l152.ld (used by stm32l152discovery) placed only .bss.core.nz\n  while BSP already uses .noinit, leaving .noinit as orphan section.\n- run_from_sram.ld scripts and remaining MCU linker scripts\n  (stm32f0xx, stm32h723, stm32u5xx) still referenced old name.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n\n"
    },
    {
      "commit": "cd9ebae1cadc3b0f60ea7229c76f56a55d98272b",
      "tree": "65748b6f1a6655e8255f1c374a0a06d99b5cbe4f",
      "parents": [
        "470b313eeffb01ff0032191ac49544a6acbc5f88"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 20:03:30 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 23:21:59 2026 +0100"
      },
      "message": "hw/bsp: Quote paths in download and debug scripts\n\nBSP download and debug scripts sourced the common helpers through an\nunquoted $CORE_PATH and some used image paths unquoted, so they failed\nwhen the project was in a directory with spaces in its name.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "470b313eeffb01ff0032191ac49544a6acbc5f88",
      "tree": "1f810547146d9f0abb0ea80a5c0d4e72f1959cfc",
      "parents": [
        "0151beed2330265298f23ad711d7253d5e0fc45f"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 20:03:30 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 23:21:59 2026 +0100"
      },
      "message": "hw/scripts: Quote paths in download and debug scripts\n\nImage, core and tool paths were used unquoted in the common download\nand debug helpers, so newt load and newt debug failed for projects in\ndirectories with spaces in their names.\n\nQuote the paths on command lines. gdb restore and J-Link commands\ncannot take paths with spaces at all, so pass them paths relative to\nthe current directory (newt runs these scripts from the project root)\nand use Tcl braces around the image path in OpenOCD commands.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "0151beed2330265298f23ad711d7253d5e0fc45f",
      "tree": "003bcaf8b0086e892990e68c6e7f0a1026cc116e",
      "parents": [
        "47359b5601f906d9683712f3f98054b0a412aa14"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 19:57:11 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 23:21:59 2026 +0100"
      },
      "message": "hw: Quote paths in build scripts\n\nThe cmac and nrf5340 net core and TF-M build scripts used newt provided\npaths unquoted, so builds of projects in directories with spaces in\ntheir names failed. The net core script also took the image path from\nthe last word of the newt output, which cut it at the first space.\n\nQuote all paths, extract the image path with sed and stop if changing\ndirectory fails.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "47359b5601f906d9683712f3f98054b0a412aa14",
      "tree": "f0ef4dba3e9cc201640e14e414a0cccd5ebde0d2",
      "parents": [
        "2b161f5bb6991a62fdefe930d5e22d47b19d0323"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 19:57:11 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 23:21:59 2026 +0100"
      },
      "message": "boot/startup: Quote paths in linker script generator\n\ngenerate_linker_script.sh used newt provided paths unquoted, so every\nbuild of a project located in a directory with a space in its name\nfailed with \"cd: too many arguments\" and \"ambiguous redirect\".\n\nQuote all paths and stop if changing to the project directory fails\ninstead of continuing in the wrong directory.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "2b161f5bb6991a62fdefe930d5e22d47b19d0323",
      "tree": "9a816663c936a5d2fd12f082c631f7d07d3c2026",
      "parents": [
        "bd93db70d5a5710a8864dcef4b78f6b196011496"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Oct 30 14:52:12 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 23:12:00 2026 +0100"
      },
      "message": "net/oic: Add test for CoAP transaction handling\n\nVerify that transaction used for response to request is freed only\nonce when it is followed by malformed message.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "bd93db70d5a5710a8864dcef4b78f6b196011496",
      "tree": "20699f56e515a78e90c2296a115bc2fe3e7d5f63",
      "parents": [
        "f3207577e13135dd8455a450aeff0786a0973428"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Oct 30 14:52:12 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 23:12:00 2026 +0100"
      },
      "message": "net/oic: Fix use of freed CoAP transaction\n\nPointer to transaction used for response was kept in static variable\nin coap_receive(). It was not cleared after response transaction was\nsent and freed, so following message that failed to be parsed or\nhandled cleared that transaction again, putting the same memory block\nback to transactions pool multiple times. This could corrupt pool and\nresult in transaction being used by multiple users.\n\nKeep transaction pointer in local variable, it is not used across\ncoap_receive() calls.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "f3207577e13135dd8455a450aeff0786a0973428",
      "tree": "63839d1a9af775b194edb4fe7274f1a9efe69f12",
      "parents": [
        "61862d69317e4b695810faede5ebd8a35ef85566"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Fri Oct 30 15:57:38 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sat Oct 31 23:11:11 2026 +0100"
      },
      "message": "ci: Remove stale label in pull request maintenance\n\nThe stale workflow runs monthly, so the stale label stayed on a pull\nrequest for up to a month after it was updated or commented on, and\npull request maintenance skipped it until then.\n\nPull request maintenance runs every 15 minutes and already updates\npull request labels, so let it remove stale label from pull requests\nupdated since the label was added. The stale workflow still marks\npull requests, so actions write permission needed by actions/stale\nstays limited to that monthly workflow.\n\nLabel time is taken from newest label events. Adding the label is the\nlast change stale workflow makes, so any later update time means pull\nrequest was updated or commented on.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "61862d69317e4b695810faede5ebd8a35ef85566",
      "tree": "79e07fa1229d431f5e11f521301d0e8f84f6bd57",
      "parents": [
        "ea42088ec0cc8c167f2d8337673c5015f8acfa88"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sun Oct 25 01:37:11 2026 +0200"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Oct 29 18:00:20 2026 +0100"
      },
      "message": "hw/bsp: Add WeAct H743VI board\n\nBSP for WeAct MiniSTM32H7xx board with STM32H743VIT6.\n\nBoard has two 8MB Winbond W25Q64JV flashes: QSPI flash (flash id 1,\nenabled with stm32_qspi package) and SPI flash on SPI1 (flash id 2).\nBoth flashes use common hal_bsp_flash_dev().\n\nInternal flash holds only bootloader and image 0 (1920kB). SPI flash\nholds image 1, scratch, config and reboot log areas. SPI DMA is\ndisabled because spi_stm32 DMA transfers return stale data on H7.\n\nBus drivers (spi_hal, i2c_hal) are used only by applications,\nbootloader accesses SPI flash through hal_spi.\n\nUART_n and I2C_n numbers match USARTn and I2Cn peripherals, there is\nno UART_0 and I2C_0. Console is on UART_3 (USART3, PD8/PD9).\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "ea42088ec0cc8c167f2d8337673c5015f8acfa88",
      "tree": "449d8371294c51083b050e8663ff1704fe72b65c",
      "parents": [
        "adc3dd34241fbc0b36568294b279b180a9806a0c"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sun Oct 25 00:46:26 2026 +0200"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Oct 29 18:00:20 2026 +0100"
      },
      "message": "hw/bus/drivers/spi_stm32: Add PD7 as SPI1 MOSI for H7 and F7\n\nPD7 can be used as SPI1_MOSI (AF5) on STM32H7 and STM32F7. It is\nused by weact_h743vi for SPI flash.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n\n"
    },
    {
      "commit": "adc3dd34241fbc0b36568294b279b180a9806a0c",
      "tree": "35288d1b837dffe04ff74f68f06036018e4eddc2",
      "parents": [
        "9f02d87525c5137fcfc0a79a7a4f113ea02b1039"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Wed Oct 28 20:28:24 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Oct 29 12:44:45 2026 +0100"
      },
      "message": "hw/hal: Paste flash id directly in HAL_FLASH_DEV\n\nnewt now writes syscfg values that are a single number without\nparentheses, so MYNEWT_VAL(X_FLASH_ID) expands to plain n and can be\npasted into element name directly. Parentheses no longer have to be\nstripped and BSPs can use plain literal ids.\n\nRequires newt with syscfg change that drops parentheses around single\ntoken values.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "9f02d87525c5137fcfc0a79a7a4f113ea02b1039",
      "tree": "9342dbca21fc56180656ffb030f688660c9f1c17",
      "parents": [
        "5a9ed05bcee6c26d715b5a904070fbf32cdaea3e"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Thu Oct 29 09:18:43 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Oct 29 11:07:47 2026 +0100"
      },
      "message": "tinyusb/std_descriptors: Number interfaces in descriptor order\n\nInterface numbers were assigned in order NET, CDC, CDC console, CDC\nHCI, but desc_configuration lists functions as NET, CDC console,\nCDC HCI, CDC. With CDC and CDC console both enabled interface\nnumbers in configuration descriptor are out of order (i.e. 0, 1, 4,\n5, 2, 3, 6, 7)\n\nInterface numbers now follow function order in descriptor. Order of\nfunctions is not changed: TinyUSB assigns CDC instances in descriptor\norder and cdc_uart registers before CDC console.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "5a9ed05bcee6c26d715b5a904070fbf32cdaea3e",
      "tree": "abc9a7af4b313ba7b7ee10069a580cd65bf6d600",
      "parents": [
        "86d1942560aa844a2150349fb9c2ed922c548907"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy.kasenberg@codecoup.pl",
        "time": "Thu Oct 29 08:00:56 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Thu Oct 29 09:52:15 2026 +0100"
      },
      "message": "hw/drivers/lwip: Set NETIF_FLAG_ETHERNET in Ethernet drivers\n\nstm32_eth and pic32_eth set only NETIF_FLAG_ETHARP. lwIP expects\nEthernet interfaces to have NETIF_FLAG_ETHERNET as well, bridgeif\nrefuses ports without it and code that looks for Ethernet\ninterfaces by this flag skipped them. net_lwip (USB) already sets\nboth.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "86d1942560aa844a2150349fb9c2ed922c548907",
      "tree": "265c7bd7356d5376ec30c7e219e37b6d3e6778ec",
      "parents": [
        "64358c36e22d36eaf56b1572917637097ef900e5"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sun Oct 25 00:46:26 2026 +0200"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Oct 28 19:36:54 2026 +0100"
      },
      "message": "hw: Use common hal_bsp_flash_dev\n\nHAL_FLASH_DEV_TABLE is now enabled by default. Flash devices register\nthemselves in hal_flash_devs with the same ids that BSPs used, so BSP\nspecific hal_bsp_flash_dev() functions are removed.\n\nEncrypted flash devices defined in frdm-k64f, frdm-k82f, native and\nnordic_pca10040 BSPs are registered in hal_bsp.c.\n\nHAL_FLASH_MAX_DEVICE_COUNT was set for nRF5340 boards because of hole\nin flash ids when QSPI is not enabled; it is not used by common\nhal_flash_init().\n\nnative-armv7 has no linker script (so no link tables) and keeps its\nown function with HAL_FLASH_DEV_TABLE set to 0.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "64358c36e22d36eaf56b1572917637097ef900e5",
      "tree": "a2cb73815024ac1d1d5cad3a68ca6f3aaa8b23fa",
      "parents": [
        "936e4a864cf7c4e8f2555d9d8b18f583a50dda3b"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 24 23:34:41 2026 +0200"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Oct 28 19:36:54 2026 +0100"
      },
      "message": "hw: Register flash devices in hal_flash_devs\n\nMCU internal flash and flash drivers register their devices for\ncommon hal_bsp_flash_dev().\n\nEach driver has syscfg value with flash id, BSP can change it to match\nits flash map. Value -1 disables registration.\n- MCU_FLASH_ID: MCU internal flash (QSPI flash on DA1469x), default 0\n- QSPI_FLASH_ID: nRF and Kinetis QSPI, default 1\n- SPIFLASH_FLASH_ID: spiflash, default 1\n- STM32_QSPI_FLASH_ID: stm32_qspi, default 1\n- NRF5340_NET_VFLASH_ID: nRF5340 net core bootloader virtual flash,\n  default 1\n- IPC_NRF5340_FLASH_ID: nRF5340 net core flash accessed over IPC,\n  default 2\n\nLink table entry is the only reference to the device, so packages that\nregister flash devices are linked with pkg.whole_archive: true.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "936e4a864cf7c4e8f2555d9d8b18f583a50dda3b",
      "tree": "b8e85040c44874370c13fa8e849a4117308c2a28",
      "parents": [
        "b01f0d58ba398a74d114c4f59a235f193d0aebc1"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Sat Oct 24 23:34:41 2026 +0200"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Oct 28 19:36:54 2026 +0100"
      },
      "message": "hw/hal: Add flash device link table\n\nEach BSP implements hal_bsp_flash_dev() that maps flash ids to flash\ndevices. Adding a flash driver (SPI flash, QSPI, ...) to a board\nrequires change in BSP hal_bsp.c.\n\nFlash drivers can now register their struct hal_flash in link table\nhal_flash_devs with HAL_FLASH_DEV(name, id, dev). Id is the same number\nthat is used as device: in bsp.yml flash map.\n\nWith new syscfg value HAL_FLASH_DEV_TABLE set, hw/hal provides\nhal_bsp_flash_dev() that returns device with requested id from this\ntable, and hal_flash_init() that initializes all registered devices\nwithout calling hal_bsp_flash_dev(). Duplicated ids are reported with\nassert.\n\nHAL_FLASH_DEV_TABLE is 0 for now so BSP functions and old\nhal_flash_init() are still used.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "b01f0d58ba398a74d114c4f59a235f193d0aebc1",
      "tree": "3a5f82ceede3fc620faafbf0ffc053c0fba74315",
      "parents": [
        "5368142b61f4f221219033b27f85be28b0685426"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Tue Oct 27 19:48:16 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Oct 28 17:25:41 2026 +0100"
      },
      "message": "msc_fat_view: Build README.TXT from link table\n\nREADME.TXT content was hardcoded in entry_readme.c and generated\nwith baselibc specific fmemopen_w(). Only first sector was ever\ngenerated so longer content was read as zeros.\n\nNow README.TXT is assembled from entries in msc_fat_view_readme\nlink table. Any package can add content with macros from\nmsc_fat_view/readme.h:\n\n  README_TEXT(pri, \"text\")        - adds line of text\n  README_ENTRY(pri, fn, arg)      - fn(out, arg) writes to out_stream\n  README_SYSCFG_STRING(pri, NAME) - adds line \"NAME: \u003csyscfg value\u003e\"\n  README_SYSCFG_INT(pri, NAME)    - same for integer value\n  README_SYSCFG_HEX(pri, NAME)    - same for integer value in hex\n  README_INT(pri, var)            - adds line \"var: \u003ccurrent value\u003e\"\n  README_HEX(pri, var)            - same in hex\n\nEach table entry is just a function and its argument, so rendering\ncalls entries in order without checking entry type. README_SYSCFG_xxx\nand README_INT/HEX pass compound literal with name and value (or\nvariable address and size). Build fails if syscfg value or variable\ntype does not match the macro used.\n\npri becomes section name suffix so entries are sorted by linker\n(e.g. 00, 01_1, 50).\n\nREADME.TXT implementation is moved to msc_fat_view/readme package\npulled in when MSC_FAT_VIEW_DEFAULT_README is set. The package\ndefines constant MSC_FAT_VIEW_README, without it macros produce\nnothing (only type checks remain), so they can be used\nunconditionally. MSC_FAT_VIEW_DEFAULT_README_HEADER allows to skip\ndefault header line and provide own with README_TEXT(00, ...).\n\nContent is generated with util/stream so it works with any libc\nand files longer than one sector are read correctly.\n\nDefault content is the same as before except:\n- mcumgr hash is removed (mcumgr is no longer external repository)\n- nimble line is only present when nimble repository is used\n- \u0027Huge file\u0027 and firmware upgrade notes are added by\n  entry_huge_file.c and update_handler.c, upgrade note is now\n  shown only when update handler is present\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy.kasenberg@codecoup.pl\u003e\n"
    },
    {
      "commit": "5368142b61f4f221219033b27f85be28b0685426",
      "tree": "679c2aec472935cb5912fe3cea691c0af49a910d",
      "parents": [
        "4e1551582e0690b4f0856765b38ab7d7384d7f41"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Tue Oct 27 19:46:56 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Oct 28 17:25:41 2026 +0100"
      },
      "message": "msc_fat_view: Use mem_out_stream for generated files\n\nWrite error file used baselibc specific struct MemFile and\nfmemopen_w() that are not available in other libc implementations.\nCONFIG.TXT had its own output stream implementation that captured\none sector of generated content.\n\nNow msc_fat_view_sector_stream_init() initializes mem_out_stream\nfrom util/stream so it captures one sector of generated file\n(or just counts bytes to compute file size), and both files use it.\n\nThis also fixes CONFIG.TXT reads above 64kB (sector end offset was\nstored in uint16_t) and garbage at the end of last CONFIG.TXT sector\n(buffer was not cleared).\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "4e1551582e0690b4f0856765b38ab7d7384d7f41",
      "tree": "c4d574c806400897361f344342cd6f8a9fe09778",
      "parents": [
        "9b6255f35dfcfb8ce51b88591b17c4bcb2fcca1c"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Tue Oct 27 19:46:56 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Oct 28 17:25:41 2026 +0100"
      },
      "message": "msc_fat_view: Add missing string.h includes\n\nFiles used memset/memcpy/strlen without including string.h.\nIt worked with baselibc where string.h was included indirectly,\nbuild with other libc (LIBC: nano) failed.\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "9b6255f35dfcfb8ce51b88591b17c4bcb2fcca1c",
      "tree": "8faefd2681576366fe7c549667cffc5cb8b24f1e",
      "parents": [
        "2831da1539147ded84cc4b53b2b6026a82c4cec8"
      ],
      "author": {
        "name": "Jerzy Kasenberg",
        "email": "jerzy@apache.org",
        "time": "Tue Oct 27 19:46:56 2026 +0100"
      },
      "committer": {
        "name": "kasjer",
        "email": "kasjer@users.noreply.github.com",
        "time": "Wed Oct 28 17:25:41 2026 +0100"
      },
      "message": "util/stream: Add ostream_printf\n\nostream_printf() and ostream_vprintf() allow to write formatted\ntext to any output stream.\n\nText is formatted with vsnprintf() into stack buffer of\nSTREAM_PRINTF_MAX bytes so it does not depend on libc\nspecific features (like baselibc\u0027s fmemopen_w).\n\nAssisted-by: Claude:claude-opus-5-5\nSigned-off-by: Jerzy Kasenberg \u003cjerzy@apache.org\u003e\n"
    },
    {
      "commit": "2831da1539147ded84cc4b53b2b6026a82c4cec8",
      "tree": "0b70d3f09e04987f6572a86232b1f3a42c0af728",
      "parents": [
        "06a08aa7d34e48b1d158d6404a28a20e1cc96688"
      ],
      "author": {
        "name": "nailongzhanshen666",
        "email": "zhouzhuohua27@163.com",
        "time": "Mon Oct 26 23:13:17 2026 +0800"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Wed Oct 28 16:29:39 2026 +0100"
      },
      "message": "net/oic: bound UUID parser writes\n\nBound the conversion to the 16-byte UUID buffer, ignoring excess\ninput so it cannot overwrite adjacent memory.\n\nCast input bytes to unsigned char before passing them to isalpha.\n\nAdd tests for valid UUIDs and oversized strings with a guard byte.\n"
    },
    {
      "commit": "06a08aa7d34e48b1d158d6404a28a20e1cc96688",
      "tree": "d76a013b8c4991a0f3ee29da1096381a1a06fb55",
      "parents": [
        "113f5b472208492c9c5a352671b0c8e08d67d200"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 23:26:19 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Wed Oct 28 10:03:25 2026 +0100"
      },
      "message": "net/ip/mn_socket: Add tests for invalid IPv4 addresses\n\nVerify that addresses with more or less than 4 octets or with empty\noctets are rejected and that nothing is written past the address.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "113f5b472208492c9c5a352671b0c8e08d67d200",
      "tree": "c34cb4c8f990eed6d5771dbaa9586d9f519b2dc9",
      "parents": [
        "060338375f9d9c4e90d8cc07d3c32c524a8ddbe1"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 23:26:19 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Wed Oct 28 10:03:25 2026 +0100"
      },
      "message": "net/wifi/wifi_mgmt: Fix argument checks in wifi connect command\n\nLength of SSID was checked instead of key length before copying the\nkey into fixed size buffer, and argument count checks were off by one\nso missing SSID or key were dereferenced as NULL pointers. Also check\nthat wifi interface exists before using it.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "060338375f9d9c4e90d8cc07d3c32c524a8ddbe1",
      "tree": "0769db97103928f1b73aef24d6a0f659d9f4401a",
      "parents": [
        "73c201517aae919ce521f73177d8a91099f6a539"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 23:26:19 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Wed Oct 28 10:03:25 2026 +0100"
      },
      "message": "net/ip/mn_socket: Fix IPv4 address parsing in mn_inet_pton\n\nNumber of dots was checked before processing each character, so a\nfifth octet was written past the 4 bytes address. Addresses with less\nthan 4 octets or with empty octets were accepted as well, leaving\npart of the address unset.\n\nParse octets into a local buffer, require exactly 4 non-empty octets\nand copy the result only on success.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "73c201517aae919ce521f73177d8a91099f6a539",
      "tree": "24673646c39ba31155432a9f5159e9eb91ab6871",
      "parents": [
        "074d7ef1906ff02e9461f104d1ec5595770fd1de"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 23:52:38 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 16:27:25 2026 +0100"
      },
      "message": "hw/drivers/ipc_cmac: Validate mailbox offsets\n\nMailbox read and write offsets are stored in memory shared with CMAC\nand were used without checking them against mailbox size. Mailbox\nsizes used by host were also read from CMAC writable memory on every\naccess.\n\nCopy mailbox sizes during initialization, before CMAC is started, and\nfail mailbox access if offsets are outside of mailbox.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "074d7ef1906ff02e9461f104d1ec5595770fd1de",
      "tree": "8327ee6fbdf1e7cf642c11787482f668b27251fd",
      "parents": [
        "756a88782c73ab2443a3cb5b57fb3cf223a93d20"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 21:37:05 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:39:10 2026 +0100"
      },
      "message": "net/oic: Add tests for malformed payload parsing\n\nVerify that malformed payloads, e.g. with mixed type arrays, too long\nstrings, non-map root, non-string keys or too deep nesting, are\nrejected by oc_parse_rep() without leaking rep objects, and that root\narray is parsed as array of objects.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "756a88782c73ab2443a3cb5b57fb3cf223a93d20",
      "tree": "37d6cd1538f33255d8ae576cd76b2566be2a1e83",
      "parents": [
        "436f5ba541d462fa287b6ece586b5f88bdc6baa7"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 20:45:58 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:39:10 2026 +0100"
      },
      "message": "net/oic: Check rep type in discovery payload processing\n\nElements of parsed discovery payload were assumed to be objects and\nvalue_object was used without checking the type. For payload with\nroot map, value of e.g. integer property was used as pointer.\n\nSkip elements that are not objects.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "436f5ba541d462fa287b6ece586b5f88bdc6baa7",
      "tree": "69ecfb28d22b150c7bfd771749e4d44b22fa692d",
      "parents": [
        "c02c0f791ccf2ddfcc1fc0dac160b49c3af6aff6"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 20:45:47 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:39:10 2026 +0100"
      },
      "message": "net/oic: Fix payload parsing in oc_parse_rep\n\nPayload parser did not validate decoded data and kept parsing after\nerrors, which could result in memory corruption or crashes:\n- string array elements were copied into fixed size items without\n  checking length\n- array element type was taken from each element, while array was\n  allocated based on the type of the first element, and object array\n  elements after a non-object first element dereferenced NULL pointer\n- *out_rep was not set if payload root was neither a map nor an array,\n  and caller freed uninitialized pointer\n- payload with root array was parsed as properties of the first array\n  element, which was not checked to be a map\n- rep object and string allocation failures were not checked\n- decoding errors were accumulated and ignored, which could result in\n  infinite loops on malformed payload\n- out of memory error was truncated to 0 by uint16_t return type\n\nRewrite the parser so that every error is propagated and parsing stops\non first error. Arrays must contain elements of the same type, strings\nmust fit in string array items and nesting level of objects is now\nlimited. Root array is parsed as array of objects. *out_rep is always\nset and tree parsed so far is linked to it, so it can be freed with\noc_free_rep() regardless of the result.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "c02c0f791ccf2ddfcc1fc0dac160b49c3af6aff6",
      "tree": "66754bb8758ce3a2e8f39df035c5611221e2d82e",
      "parents": [
        "5c3c8bace0be7837034af5f6a25d9c4a72dc36d4"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 20:45:32 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:39:10 2026 +0100"
      },
      "message": "net/oic: Fix coding style in oc_ri_process_discovery_payload\n\nReformat with clang-format before modifying it. No functional changes.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "5c3c8bace0be7837034af5f6a25d9c4a72dc36d4",
      "tree": "de1f1ec1839c759b9b0dd2466562ace75a544ee5",
      "parents": [
        "500eb6eb246a7772168ab4b7ece90bf96a6bfe43"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:57:39 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Handle config lines split between sectors\n\nConfig line that crossed sector boundary was never joined. The part\nin first sector was dropped and the rest was parsed as separate line\nin next sector. Code that was meant to join lines was never reached\nand computed the length incorrectly.\n\nStore beginning of the line from previous sector and join it with\nthe rest. Lines longer than limit are dropped as a whole.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "500eb6eb246a7772168ab4b7ece90bf96a6bfe43",
      "tree": "62f7934d52d0c2eae913d0a8d6c5e299bde11248",
      "parents": [
        "53e6283a716e3bd6e188ed6a827ff03fb5927a1b"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:57:39 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Fix config marker line detection\n\nLines written to CONFIG.TXT were compared with begin and end markers\nusing length of the line. Any prefix of the marker, i.e. line with\njust \"#\", was taken as marker and lines longer than marker were\ncompared past the end of marker string.\n\nCompare whole line with marker without its new line character.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "53e6283a716e3bd6e188ed6a827ff03fb5927a1b",
      "tree": "062ff40be80fb9ccc50656dec7a7b6be08d0c7d9",
      "parents": [
        "fcd955de9872cc6dd580de8fd856208692182023"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:56:53 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Handle flash access errors\n\nResults of flash_area_open() and flash_area_read() were ignored in\nseveral places. Image write handler used flash area pointer even if\nopen failed, slot0 image size was computed from header that may not\nhave been read, and failed sector reads returned whatever was left in\nUSB buffer.\n\nCheck the results, return zeros for sectors that can\u0027t be read and\ncompute slot0 image size only for valid image header.\n\nNote: read_sector callbacks can\u0027t report errors, so failed reads are\nzero-filled, as unallocated clusters are, instead of sending the host\nstale data from a previous transfer.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "fcd955de9872cc6dd580de8fd856208692182023",
      "tree": "b6dc518b425bc404936e6bf1191fca0ece1300ab",
      "parents": [
        "2fbd99fe27a102789e371de81fdc86a5491bfd61"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:56:26 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Reject partial sector transfers\n\nREAD10 and WRITE10 callbacks assumed 512 byte blocks. Block size used\nby TinyUSB is computed from host supplied transfer length and block\ncount, so host could request transfers with non zero offset or buffer\nsize that is not a multiple of sector size. That triggered an assert\nin write callback, and write of less than one sector returned 0 which\nmade TinyUSB call the callback again forever.\n\nFail such transfers. Also fail the build if MSC endpoint buffer size\nis not a multiple of sector size, as callbacks always handle whole\nsectors.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "2fbd99fe27a102789e371de81fdc86a5491bfd61",
      "tree": "552d11270e4a1430d932b2cb85fb02fbf071b498",
      "parents": [
        "0b38b1cda2441f190073213d28ab9d9dfa066c6a"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:55:58 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Check root directory capacity\n\nmsc_fat_view_add_dir_entry() added entries to fixed size root_dir\narray without checking for free space. Update handler adds error file\nentry each time image upload fails, so repeated failed uploads wrote\npast the end of the array.\n\nEntry that is already in root directory is now reused and new entry\nis not added when array is full.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "0b38b1cda2441f190073213d28ab9d9dfa066c6a",
      "tree": "f16fb7e8bf6be7497c443d58d1c9a4729a819118",
      "parents": [
        "baae56f502ed6b61fadd9618c8f1142080737eec"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:55:29 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Stop chain lookup at last chain\n\nmsc_fat_view_fat_next_cluster() skipped chains that end before\nrequested cluster without checking for end of the array. For clusters\nafter the last chain (free space) it read entries past the last valid\nchain.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "baae56f502ed6b61fadd9618c8f1142080737eec",
      "tree": "f288f7279274d0f7dca43ceae899577a69dca127",
      "parents": [
        "97f2bcf723de765476a480c1501e445c026d7090"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:55:22 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Check FAT chain array capacity\n\nFAT chains are kept in fixed size array but new chains were added\nwithout checking if there is space left. FAT sectors written by host\nwith many short chains wrote past the end of the array.\n\nfat_chain_insert() now fails when array is full and callers skip the\nchange. It also no longer copies one element past the last chain.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "97f2bcf723de765476a480c1501e445c026d7090",
      "tree": "99af2e44f45257897ca3c4e69a550b68b9fa0ea4",
      "parents": [
        "c82d3ba3e2a56f88e44cf7a128ec878b539fe88d"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Sun Oct 25 13:54:48 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:35:17 2026 +0100"
      },
      "message": "tinyusb/msc_fat_view: Fix long file name parsing\n\nLong file name entries written by host to root directory were parsed\nwith sequence number masked to 4 bits and with wrong index of the\nname part that does not fit in the name buffer. Names longer than 78\ncharacters were written past the end of the buffer and sequence\nnumbers with lower 4 bits equal to 0 made the parser loop forever.\nEntries with mismatched checksum triggered an assert.\n\nUse 5 bit sequence number, reject invalid ones, skip parts that do not\nfit and always terminate the name. Entries with mismatched checksum\nnow fall back to the short name. Long name is used only for the short\nentry that follows it.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    },
    {
      "commit": "c82d3ba3e2a56f88e44cf7a128ec878b539fe88d",
      "tree": "31f0632ec13530ca30043ed203c7749a833df447",
      "parents": [
        "2b6c89ad313bc53c7eddb72289efd2c9209f1aa9"
      ],
      "author": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Mon Oct 26 17:13:17 2026 +0100"
      },
      "committer": {
        "name": "Szymon Janc",
        "email": "szymon.janc@codecoup.pl",
        "time": "Tue Oct 27 10:33:18 2026 +0100"
      },
      "message": "hw/usb/tinyusb/msc_flash: Preserve flash content on block write\n\nBefore writing a 512 bytes block that was not erased, the whole flash\nsector containing it was erased. With sectors larger than block, e.g.\n4 KB on nRF52, this destroyed content of other blocks in the sector,\ncorrupting file system on every overwrite.\n\nWhen written block is not erased, read the sector into buffer, erase\nit and write it back with new block content. Size of the buffer is set\nwith MSC_FLASH_SECTOR_BUF_SIZE, writes to flash with larger sectors\nfail unless written block is erased. The buffer is moved out of\nlun_data, which is initialized data, so it is not stored in flash\nimage, and it is shared by all LUNs as writes are serialized.\n\nAssisted-by: Claude:claude-opus-5-5\n"
    }
  ],
  "next": "2b6c89ad313bc53c7eddb72289efd2c9209f1aa9"
}
