[GRASS-git] [OSGeo/grass] 58dc4c: doc: Add conda badge to README (#7586)

Stefan Blumentrath noreply at github.com
Thu Aug 27 23:57:40 PDT 2026


  Branch: refs/heads/renovate/main-ubuntu-26.x
  Home:   https://github.com/OSGeo/grass
  Commit: 58dc4c7bc3ddb3ff1c3fa86046190baf38829678
      https://github.com/OSGeo/grass/commit/58dc4c7bc3ddb3ff1c3fa86046190baf38829678
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-06-19 (Fri, 19 Jun 2026)

  Changed paths:
    M README.md

  Log Message:
  -----------
  doc: Add conda badge to README (#7586)

Add conda badge to README.

Move user-focused badges to the front, then stats, then orgs.


  Commit: 4076a6c639013a910457ba129f0519b3106c93db
      https://github.com/OSGeo/grass/commit/4076a6c639013a910457ba129f0519b3106c93db
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-06-20 (Sat, 20 Jun 2026)

  Changed paths:
    M docker/alpine/Dockerfile

  Log Message:
  -----------
  CI(deps): Update alpine:3.24 Docker digest to 28bd5fe (main) (#7583)

CI(deps): Update alpine:3.24 Docker digest to 28bd5fe

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: b60984108eaafc3bf72161b10d63b9abba006c04
      https://github.com/OSGeo/grass/commit/b60984108eaafc3bf72161b10d63b9abba006c04
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-06-20 (Sat, 20 Jun 2026)

  Changed paths:
    M raster/r.param.scale/tests/r_param_scale_test.py

  Log Message:
  -----------
  r.param.scale: loosen curvature test tolerance across platforms (#7584)


  Commit: 5528eb87eb1524d87d31190ef85b9f9540c73e50
      https://github.com/OSGeo/grass/commit/5528eb87eb1524d87d31190ef85b9f9540c73e50
  Author: Rajveer* <irajveer.bishnoi2310 at gmail.com>
  Date:   2026-06-20 (Sat, 20 Jun 2026)

  Changed paths:
    M scripts/d.correlate/d.correlate.py
    A scripts/d.correlate/tests/d_correlate_test.py

  Log Message:
  -----------
  d.correlate: exit on insufficient input and fix text line counter (#7485)


  Commit: 1b103c4405d4be04e458bfb9a7206014ae290ad8
      https://github.com/OSGeo/grass/commit/1b103c4405d4be04e458bfb9a7206014ae290ad8
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-06-21 (Sun, 21 Jun 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (107) (#7589)

locale: Update translation files

Co-authored-by: echoix <27212526+echoix at users.noreply.github.com>


  Commit: 95df1e6fb546093129e5811bbee05db34e759887
      https://github.com/OSGeo/grass/commit/95df1e6fb546093129e5811bbee05db34e759887
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-06-22 (Mon, 22 Jun 2026)

  Changed paths:
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    M locale/tbx/grassglossary_ar.tbx
    M locale/tbx/grassglossary_bn.tbx
    M locale/tbx/grassglossary_cs.tbx
    M locale/tbx/grassglossary_de.tbx
    M locale/tbx/grassglossary_el.tbx
    M locale/tbx/grassglossary_es.tbx
    M locale/tbx/grassglossary_fi.tbx
    M locale/tbx/grassglossary_fr.tbx
    M locale/tbx/grassglossary_hi.tbx
    M locale/tbx/grassglossary_hu.tbx
    M locale/tbx/grassglossary_id.tbx
    M locale/tbx/grassglossary_it.tbx
    M locale/tbx/grassglossary_ja.tbx
    M locale/tbx/grassglossary_ko.tbx
    M locale/tbx/grassglossary_lv.tbx
    M locale/tbx/grassglossary_ml.tbx
    M locale/tbx/grassglossary_pl.tbx
    M locale/tbx/grassglossary_pt.tbx
    M locale/tbx/grassglossary_pt_BR.tbx
    M locale/tbx/grassglossary_ro.tbx
    M locale/tbx/grassglossary_ru.tbx
    M locale/tbx/grassglossary_si.tbx
    M locale/tbx/grassglossary_sl.tbx
    M locale/tbx/grassglossary_sv.tbx
    M locale/tbx/grassglossary_ta.tbx
    M locale/tbx/grassglossary_th.tbx
    M locale/tbx/grassglossary_tr.tbx
    M locale/tbx/grassglossary_uk.tbx
    M locale/tbx/grassglossary_vi.tbx
    M locale/tbx/grassglossary_zh_Hans.tbx

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#7591)


  Commit: 4b02be02267eb32ab6175a40c9924ab319fb2fe8
      https://github.com/OSGeo/grass/commit/4b02be02267eb32ab6175a40c9924ab319fb2fe8
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-06-23 (Tue, 23 Jun 2026)

  Changed paths:
    M temporal/t.list/t.list.py
    M temporal/t.list/tests/conftest.py
    M temporal/t.list/tests/test_t_list.py

  Log Message:
  -----------
  t.list: Check connection to prevent creating temporal database (#7580)

* Show message only for plain

* Add tests


  Commit: fdb189e68b8c295b589a8d425c713eed08d51524
      https://github.com/OSGeo/grass/commit/fdb189e68b8c295b589a8d425c713eed08d51524
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-06-23 (Tue, 23 Jun 2026)

  Changed paths:
    M temporal/t.rast3d.univar/t.rast3d.univar.py
    M temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py

  Log Message:
  -----------
  t.rast3d.univar: Add format options and tests (#7582)


  Commit: a41671246f4cf44bb9fc304da3eedc2d68346042
      https://github.com/OSGeo/grass/commit/a41671246f4cf44bb9fc304da3eedc2d68346042
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-06-23 (Tue, 23 Jun 2026)

  Changed paths:
    M raster/r.param.scale/tests/r_param_scale_test.py

  Log Message:
  -----------
  tests: skip r.param.scale reference test pending libgmath race fix #7539 (#7593)


  Commit: 734f46e784762210e72b97b33d4c25a32a5ecb12
      https://github.com/OSGeo/grass/commit/734f46e784762210e72b97b33d4c25a32a5ecb12
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-06-23 (Tue, 23 Jun 2026)

  Changed paths:
    M temporal/t.vect.db.select/t.vect.db.select.md
    M temporal/t.vect.db.select/t.vect.db.select.py
    M temporal/t.vect.db.select/tests/t_vect_db_select_test.py

  Log Message:
  -----------
  t.vect.db.select: Add format options (#7530)


  Commit: 3381348d807542ee12a9293330362bc3bc8827bd
      https://github.com/OSGeo/grass/commit/3381348d807542ee12a9293330362bc3bc8827bd
  Author: František Gurecký <119013992+gureckyfrantisek at users.noreply.github.com>
  Date:   2026-06-24 (Wed, 24 Jun 2026)

  Changed paths:
    M gui/wxpython/xml/module_tree.xml
    M gui/wxpython/xml/toolboxes.xml
    A utils/find_missing_toolboxes.py

  Log Message:
  -----------
  wxGUI: Finding unavailable toolboxes in the search tab (#7403)

* Add missing toolboxes finder script
* Update toolboxes.xml

---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>
Co-authored-by: Martin Landa <landa.martin at gmail.com>


  Commit: 3eb6e2932ed86c0ae0592de1790cafdad124f6cc
      https://github.com/OSGeo/grass/commit/3eb6e2932ed86c0ae0592de1790cafdad124f6cc
  Author: Linda Karlovska <49241681+lindakarlovska at users.noreply.github.com>
  Date:   2026-06-24 (Wed, 24 Jun 2026)

  Changed paths:
    M python/grass/script/raster.py

  Log Message:
  -----------
  grass.script: Fix typos in raster.py (#7600)

fixes typos

Co-authored-by: lindakladivova <l.kladivova at seznam.cz>


  Commit: 8b6db49ccfd9f20cd2832c6e5d2771e4cfd5a15b
      https://github.com/OSGeo/grass/commit/8b6db49ccfd9f20cd2832c6e5d2771e4cfd5a15b
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-06-24 (Wed, 24 Jun 2026)

  Changed paths:
    M locale/po/grasslibs_zh.po
    A locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_zh.po
    A locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_zh.po
    A locale/po/grasswxpy_zh_Hant.po
    M locale/tbx/grassglossary_zh_Hans.tbx
    A locale/tbx/grassglossary_zh_Hant.tbx

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#7601)


  Commit: d23b59e3bb090544f1468484c2420ecdefc1e1b9
      https://github.com/OSGeo/grass/commit/d23b59e3bb090544f1468484c2420ecdefc1e1b9
  Author: Rajveer* <irajveer.bishnoi2310 at gmail.com>
  Date:   2026-06-24 (Wed, 24 Jun 2026)

  Changed paths:
    M scripts/r.semantic.label/r.semantic.label.py
    A scripts/r.semantic.label/tests/r_semantic_label_test.py

  Log Message:
  -----------
  r.semantic.label: exit with error when print target is missing (#7496)

operation=print printed an error but exited successfully when the raster map was not found, because print_map_semantic_label returned None on OpenError and main() ignored it. The add/remove path returns 1 for the same condition and main() propagates it. Make print return a status (1 on a missing map, 0 otherwise) and have main() honor it, so all operations exit consistently.


  Commit: 4846566d384616e45034dcf2257363d27d43e5f1
      https://github.com/OSGeo/grass/commit/4846566d384616e45034dcf2257363d27d43e5f1
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-06-25 (Thu, 25 Jun 2026)

  Changed paths:
    M temporal/t.connect/main.c
    M temporal/t.connect/t.connect.md
    M temporal/t.connect/tests/conftest.py
    M temporal/t.connect/tests/test_t_connect.py
    M temporal/t.list/t.list.py
    M temporal/t.list/tests/test_t_list.py

  Log Message:
  -----------
  t.connect: add a mapset option to list connections across project (#7594)

* document mapset option

* add mapset option

* add tests for mapset option

* add testcase for empty VAR file

* adjust to t.connect JSON output

* adjust to t.connect JSON output

* use text for output

---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>


  Commit: d7eff8a866d3d0651c18120a7ecdfd619ed474e2
      https://github.com/OSGeo/grass/commit/d7eff8a866d3d0651c18120a7ecdfd619ed474e2
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-06-25 (Thu, 25 Jun 2026)

  Changed paths:
    M AGENTS.md

  Log Message:
  -----------
  contributing: Improve build instructions for agents (#7603)


  Commit: d7891fac84de79a6160f392f5c8882bbbefe104c
      https://github.com/OSGeo/grass/commit/d7891fac84de79a6160f392f5c8882bbbefe104c
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-06-25 (Thu, 25 Jun 2026)

  Changed paths:
    M CONTRIBUTING.md

  Log Message:
  -----------
  contributing: Link AGENTS.md from CONTRIBUTING.md (#7606)


  Commit: 86ad7de80090f79b253ea737def74d54bef08dce
      https://github.com/OSGeo/grass/commit/86ad7de80090f79b253ea737def74d54bef08dce
  Author: František Gurecký <119013992+gureckyfrantisek at users.noreply.github.com>
  Date:   2026-06-25 (Thu, 25 Jun 2026)

  Changed paths:
    M gui/wxpython/gmodeler/canvas.py
    M gui/wxpython/gmodeler/model.py
    M gui/wxpython/gmodeler/model_convert.py
    M gui/wxpython/gmodeler/model_items.py
    M gui/wxpython/gmodeler/panels.py

  Log Message:
  -----------
  wxGUI/gmodeler: Correct variable replacement in model_convert.py (#7241)

* backward compatibility for curly braces
* map variable replacement on Display change
---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>
Co-authored-by: Martin Landa <landa.martin at gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>


  Commit: b7712fb1d326e5532ee94d2f145281aac9a5ba85
      https://github.com/OSGeo/grass/commit/b7712fb1d326e5532ee94d2f145281aac9a5ba85
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-06-27 (Sat, 27 Jun 2026)

  Changed paths:
    M locale/po/grasslibs_zh.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_zh.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_zh.po
    M locale/tbx/grassglossary_zh_Hans.tbx

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#7611)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 76.9% (50 of 65 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 5.0% (509 of 10096 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 30.2% (1003 of 3314 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 11.8% (220 of 1854 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 4.9% (503 of 10096 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 30.1% (1000 of 3314 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 30.1% (1000 of 3314 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 30.1% (1000 of 3314 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 11.7% (218 of 1854 strings)

Translated using Weblate (French)

Currently translated at 36.3% (3669 of 10096 strings)

Translated using Weblate (French)

Currently translated at 96.3% (3192 of 3314 strings)




Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/zh_Hans/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/zh_Hans/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/zh_Hans/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/zh_Hans/
Translation: GRASS/grassglossary
Translation: GRASS/grasslibs
Translation: GRASS/grassmods
Translation: GRASS/grasswxpy

Co-authored-by: Weblate <noreply at weblate.org>
Co-authored-by: Edouard Choiniere <echoix at users.noreply.weblate.osgeo.org>
Co-authored-by: Jietao Wang <quaternary at 163.com>


  Commit: 9bab1f18753e2a127a78bce97b5bc2f11e4f9681
      https://github.com/OSGeo/grass/commit/9bab1f18753e2a127a78bce97b5bc2f11e4f9681
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-06-27 (Sat, 27 Jun 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (109) (#7612)

locale: Update translation files

Co-authored-by: echoix <27212526+echoix at users.noreply.github.com>


  Commit: c967be59670665427b9d953857b41066b01fbac2
      https://github.com/OSGeo/grass/commit/c967be59670665427b9d953857b41066b01fbac2
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-06-27 (Sat, 27 Jun 2026)

  Changed paths:
    M utils/mkdocs.py

  Log Message:
  -----------
  docs: Fix crash and simplify git calls in mkdocs generation (#7604)

* docs: Fix crash and simplify git calls in mkdocs generation

* exit instead of just writing message


  Commit: 000590f0b4eb3a331f9841eecc929b31ccfb98e3
      https://github.com/OSGeo/grass/commit/000590f0b4eb3a331f9841eecc929b31ccfb98e3
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-06-30 (Tue, 30 Jun 2026)

  Changed paths:
    M python/libgrass_interface_generator/libgrass__init__.py

  Log Message:
  -----------
  libpython: Speed up grass.lib import by registering $GISBASE/lib (#7605)

Register $GISBASE/lib (where the GRASS shared libraries are installed) with
the ctypes loader before any wrapper module loads its library. The loader
searches these directories first, so it finds the libraries by absolute path
and never reaches its ctypes.util.find_library() fallback. That fallback is
expensive on Linux, where find_library() spawns the toolchain (ldconfig, gcc,
ld, objdump) once per library; for the chain pulled in by grass.temporal that
was about 90 subprocesses and the bulk of the import time. The libraries are
still resolvable through the runtime linker path, so this is a startup
optimization, not a correctness fix; outside a GRASS session GISBASE may be
unset, in which case the loader keeps its original behavior.


  Commit: 283ebdc12dbd5cdbd224d5e8392cd7a890e76b52
      https://github.com/OSGeo/grass/commit/283ebdc12dbd5cdbd224d5e8392cd7a890e76b52
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-06-30 (Tue, 30 Jun 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml
    M .github/workflows/cmake.yml
    M .github/workflows/codeql-analysis.yml
    M .github/workflows/coverity.yml
    M .github/workflows/create_release_draft.yml
    M .github/workflows/docker.yml
    M .github/workflows/documentation.yml
    M .github/workflows/gcc.yml
    M .github/workflows/macos.yml
    M .github/workflows/macos_distribute_app.yml
    M .github/workflows/osgeo4w.yml
    M .github/workflows/periodic_update.yml
    M .github/workflows/pytest.yml
    M .github/workflows/python-code-quality.yml
    M .github/workflows/super-linter.yml
    M .github/workflows/test-nix.yml
    M .github/workflows/titles.yml
    M .github/workflows/ubuntu.yml

  Log Message:
  -----------
  CI(deps): Update actions/checkout action to v7 (main) (#7617)

CI(deps): Update actions/checkout action to v7

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: a822d6eb71cdb95120c05e17b7b3970aceeda924
      https://github.com/OSGeo/grass/commit/a822d6eb71cdb95120c05e17b7b3970aceeda924
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-06-30 (Tue, 30 Jun 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml
    M .github/workflows/macos.yml
    M .github/workflows/ubuntu.yml

  Log Message:
  -----------
  CI(deps): Update actions/cache action to v6 (main) (#7616)

CI(deps): Update actions/cache action to v6

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: 08c3e8acb4ed6a66c8c6ed120113e5a51a4416b7
      https://github.com/OSGeo/grass/commit/08c3e8acb4ed6a66c8c6ed120113e5a51a4416b7
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-06-30 (Tue, 30 Jun 2026)

  Changed paths:
    M AGENTS.md

  Log Message:
  -----------
  contributing: Add notes on sandbox and addon builds to AGENTS.md (#7609)

* contributing: Add notes on sandbox and addon builds to AGENTS.md

Using a use case of a standalone addon tool repo (specifically, r.pops.spread is published in addons, but the developed in a standalone repo), this expands instructions in AGENTS.md on how to compile and run with CMake in a sandbox (developed with Claude Code sandbox) and how to compile an addon tool. While grass-addon and cookie cutter repo instructions would be helpful as well, the addons instruction part covers the case when you use the source code of GRASS, but don't deal with the grass-addon repo.

I'm also slighltly changing how the grass.gunittest is presented, focusing on a single file, rather than a directory run. This simplifies the project-related instructions, replacing the currently confusing version.

* Wrap lines correctly


  Commit: 4be7fc08f5535b44f00f658556e401f9088a348e
      https://github.com/OSGeo/grass/commit/4be7fc08f5535b44f00f658556e401f9088a348e
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-01 (Wed, 01 Jul 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml

  Log Message:
  -----------
  CI(deps): Update dependency prek to v0.4.5 (main) (#7620)


  Commit: d7d253c6763627651d1c8dc9cca4841402cd7de5
      https://github.com/OSGeo/grass/commit/d7d253c6763627651d1c8dc9cca4841402cd7de5
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-01 (Wed, 01 Jul 2026)

  Changed paths:
    M .github/workflows/test-nix.yml

  Log Message:
  -----------
  CI(deps): Update DeterminateSystems/determinate-nix-action action to v3.21.2 (main) (#7621)

CI(deps): Update DeterminateSystems/determinate-nix-action action to v3.21.2

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: e8649b0535c3e98f2f9e3770d133654a7864946a
      https://github.com/OSGeo/grass/commit/e8649b0535c3e98f2f9e3770d133654a7864946a
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-01 (Wed, 01 Jul 2026)

  Changed paths:
    M .github/workflows/docker.yml

  Log Message:
  -----------
  CI(deps): Migrate actions/attest-build-provenance to actions/attest to v4.1.1 (main) (#7619)


  Commit: 14279f426bf057492d5ac22189f4b2078d487198
      https://github.com/OSGeo/grass/commit/14279f426bf057492d5ac22189f4b2078d487198
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-01 (Wed, 01 Jul 2026)

  Changed paths:
    M docker/debian/Dockerfile

  Log Message:
  -----------
  CI(deps): Update debian:13.5-slim Docker digest to 28de087 (main) (#7618)


  Commit: 12f6a4808719b8b706188fa39afdb179f521caa2
      https://github.com/OSGeo/grass/commit/12f6a4808719b8b706188fa39afdb179f521caa2
  Author: Arth Parikshit Patel <arth200patel at gmail.com>
  Date:   2026-07-01 (Wed, 01 Jul 2026)

  Changed paths:
    M .github/workflows/pytest.yml

  Log Message:
  -----------
  CI: Change codecov test result upload action (#7607)


  Commit: 224893862fbb6a2288de06c65b4608843f5277be
      https://github.com/OSGeo/grass/commit/224893862fbb6a2288de06c65b4608843f5277be
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-02 (Thu, 02 Jul 2026)

  Changed paths:
    M .github/workflows/docker.yml

  Log Message:
  -----------
  CI(deps): Update docker/build-push-action action to v7.3.0 (main) (#7623)


  Commit: 9fa558107b9cd238d0a14e2c5a547d493127379d
      https://github.com/OSGeo/grass/commit/9fa558107b9cd238d0a14e2c5a547d493127379d
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-02 (Thu, 02 Jul 2026)

  Changed paths:
    M flake.lock

  Log Message:
  -----------
  CI(deps): Lock file maintenance (main) (#7624)


  Commit: 763b17e9a558c866b9e79ca39ee557be213d0d8f
      https://github.com/OSGeo/grass/commit/763b17e9a558c866b9e79ca39ee557be213d0d8f
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-02 (Thu, 02 Jul 2026)

  Changed paths:
    M cmake/modules/CheckDependentLibraries.cmake
    M db/drivers/CMakeLists.txt
    M general/CMakeLists.txt

  Log Message:
  -----------
  CMake: Replace deprecated SQLite::SQLite3 with SQLite3::SQLite3 (#7588)

In CMake 4.3+, the `SQLite::SQLite3` is deprecated and throws messages. The docs page https://cmake.org/cmake/help/v4.3/module/FindSQLite3.html suggest using an `add_library()` alias to allow new name to compile on old versions.


  Commit: a47d22493f4527c0de4efae392992865ec501fe7
      https://github.com/OSGeo/grass/commit/a47d22493f4527c0de4efae392992865ec501fe7
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-04 (Sat, 04 Jul 2026)

  Changed paths:
    A raster/r.mapcalc/tests/r_mapcalc_rand_seed_test.py
    M raster/r.mapcalc/testsuite/test_r_mapcalc.py
    M raster/r.mapcalc/testsuite/test_r_mapcalc_parallel.py

  Log Message:
  -----------
  tests: Migrate r.mapcalc rand seed tests to pytest (#7633)


  Commit: 777ab4968fcc615b17691304b952cdfdcdfe6d93
      https://github.com/OSGeo/grass/commit/777ab4968fcc615b17691304b952cdfdcdfe6d93
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-04 (Sat, 04 Jul 2026)

  Changed paths:
    A lib/gis/tests/lib_gis_lrand48_test.py

  Log Message:
  -----------
  tests: Pin random number generator outputs in tests (#7634)


  Commit: 6e79a3feec9be04d118b1f610c62f9876b752ff3
      https://github.com/OSGeo/grass/commit/6e79a3feec9be04d118b1f610c62f9876b752ff3
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-07-04 (Sat, 04 Jul 2026)

  Changed paths:
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    M locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    M locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    M locale/po/grasswxpy_zh_Hant.po
    M locale/tbx/grassglossary_fr.tbx

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#7637)


  Commit: 1fcc4119cb54ab5a547a01d58234e02e94e0eb5a
      https://github.com/OSGeo/grass/commit/1fcc4119cb54ab5a547a01d58234e02e94e0eb5a
  Author: Nicklas Larsson <n_larsson at yahoo.com>
  Date:   2026-07-04 (Sat, 04 Jul 2026)

  Changed paths:
    M cmake/find_scripts/FindCBLAS.cmake
    M cmake/find_scripts/FindLAPACKE.cmake
    M cmake/modules/CheckDependentLibraries.cmake

  Log Message:
  -----------
  cmake: test CBLAS and LAPACKE packages for req. symbols (#7629)


  Commit: 4542f7153b3913c7b6bf2953607c9f0f555a59e3
      https://github.com/OSGeo/grass/commit/4542f7153b3913c7b6bf2953607c9f0f555a59e3
  Author: Linda Karlovska <49241681+lindakarlovska at users.noreply.github.com>
  Date:   2026-07-05 (Sun, 05 Jul 2026)

  Changed paths:
    M gui/wxpython/gui_core/pyedit.py

  Log Message:
  -----------
  wxGUI/pyedit: Fix saving and opening a file in docked mode (#7643)

Python editor: fix saving and opening a file in docked mode

Co-authored-by: lindakarlovska <l.kladivova at seznam.cz>


  Commit: 8eb0a03d8e482c4f841fd4b21ac79054b1ca2788
      https://github.com/OSGeo/grass/commit/8eb0a03d8e482c4f841fd4b21ac79054b1ca2788
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-07-07 (Tue, 07 Jul 2026)

  Changed paths:
    M python/grass/temporal/core.py
    A python/grass/temporal/tests/grass_temporal_core_init_skip_db_test.py

  Log Message:
  -----------
  temporal: add parameter to skip creation of TGIS DB in current mapset on tgis.init (#7645)

* enable DB creation skip on tgis.init()

* add test for tgis.init(skip_db_init=True)


  Commit: dcb3324768fc8dddb7d3937bea0fd6ab49f614c1
      https://github.com/OSGeo/grass/commit/dcb3324768fc8dddb7d3937bea0fd6ab49f614c1
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-07-08 (Wed, 08 Jul 2026)

  Changed paths:
    M python/grass/temporal/core.py
    M python/grass/temporal/list_stds.py
    M temporal/t.list/t.list.md
    M temporal/t.list/t.list.py
    M temporal/t.list/tests/conftest.py
    M temporal/t.list/tests/test_t_list.py

  Log Message:
  -----------
  t.list: Add mapset options for t.list (#7631)

* Add mapset options for t.list

* do not require a TGIS DB in current mapset

---------

Co-authored-by: ninsbl <stefan.blumentrath at gmx.de>


  Commit: b130fba6d22bebc084a1eb30dc62a08af5529434
      https://github.com/OSGeo/grass/commit/b130fba6d22bebc084a1eb30dc62a08af5529434
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-07-09 (Thu, 09 Jul 2026)

  Changed paths:
    M python/grass/temporal/core.py

  Log Message:
  -----------
  temporal: make SQLite TGIS DB connections more robust (#7653)


  Commit: 86a1345df62072f17063477306df101158a9c372
      https://github.com/OSGeo/grass/commit/86a1345df62072f17063477306df101158a9c372
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-09 (Thu, 09 Jul 2026)

  Changed paths:
    M .github/workflows/create_release_draft.yml

  Log Message:
  -----------
  CI(deps): Update softprops/action-gh-release action to v3.0.1 (main) (#7654)


  Commit: 48118b78e65e2f61b4a212b32051fd256c32a4b3
      https://github.com/OSGeo/grass/commit/48118b78e65e2f61b4a212b32051fd256c32a4b3
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-09 (Thu, 09 Jul 2026)

  Changed paths:
    M .github/workflows/label.yml

  Log Message:
  -----------
  CI(deps): Update actions/labeler action to v6.2.0 (main) (#7655)


  Commit: cc6382c77278d942bad9c498f3d285550d8f2393
      https://github.com/OSGeo/grass/commit/cc6382c77278d942bad9c498f3d285550d8f2393
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-07-09 (Thu, 09 Jul 2026)

  Changed paths:
    M temporal/t.rast.list/tests/t_rast_list_test.py
    M temporal/t.vect.list/tests/t_vect_list_test.py

  Log Message:
  -----------
  temporal: Remove needs_solo_run and fix parsing typos in t.vect.list & t.rast.list tests (#7636)

* Fix typo and remove marker

* update t.rast.list tests  as well

* Test with just t.vect.list changes


  Commit: 66463e1556686dde32df643eca5b6b74783ef08b
      https://github.com/OSGeo/grass/commit/66463e1556686dde32df643eca5b6b74783ef08b
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-10 (Fri, 10 Jul 2026)

  Changed paths:
    M .github/workflows/test-nix.yml

  Log Message:
  -----------
  CI(deps): Update DeterminateSystems/determinate-nix-action action to v3.21.5 (main) (#7661)

CI(deps): Update DeterminateSystems/determinate-nix-action action to v3.21.5

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: 35a7541bedce8b015b457bc24febe5f4153d703b
      https://github.com/OSGeo/grass/commit/35a7541bedce8b015b457bc24febe5f4153d703b
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-10 (Fri, 10 Jul 2026)

  Changed paths:
    M .github/workflows/codeql-analysis.yml
    M .github/workflows/python-code-quality.yml

  Log Message:
  -----------
  CI(deps): Update github/codeql-action action to v4.37.0 (main) (#7662)

CI(deps): Update github/codeql-action action to v4.37.0

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: 9ea295ab5a9dc034556e91cc669b69e1e77556b4
      https://github.com/OSGeo/grass/commit/9ea295ab5a9dc034556e91cc669b69e1e77556b4
  Author: Tomas Zigo <50632337+tmszi at users.noreply.github.com>
  Date:   2026-07-10 (Fri, 10 Jul 2026)

  Changed paths:
    M gui/wxpython/lmgr/layertree.py

  Log Message:
  -----------
  wxGUI/lmgr: preserve scroll map layer position during interaction with map layers (#7647)


  Commit: a53127d0afb2ea2c089acb04d48d4a1b85351463
      https://github.com/OSGeo/grass/commit/a53127d0afb2ea2c089acb04d48d4a1b85351463
  Author: Rajveer* <irajveer.bishnoi2310 at gmail.com>
  Date:   2026-07-10 (Fri, 10 Jul 2026)

  Changed paths:
    M temporal/t.list/tests/test_t_list.py

  Log Message:
  -----------
  t.list: add regression test for listing from a mapset without a temporal database (#7640)

* t.list: check for temporal databases in all accessible mapsets

* t.list: keep only the regression test, the fix lands in #7631


  Commit: f3910c2d64e605d5ecd8cc211219110f40fc595c
      https://github.com/OSGeo/grass/commit/f3910c2d64e605d5ecd8cc211219110f40fc595c
  Author: Khanh Le <58643031+nkgotcode at users.noreply.github.com>
  Date:   2026-07-10 (Fri, 10 Jul 2026)

  Changed paths:
    M python/grass/docs/src/index.rst

  Log Message:
  -----------
  doc: Fix libpython getting-started links (#7581)


  Commit: 03f7c9a2c2857c873a671e38d887033d56b763fb
      https://github.com/OSGeo/grass/commit/03f7c9a2c2857c873a671e38d887033d56b763fb
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-10 (Fri, 10 Jul 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml
    M .github/workflows/codeql-analysis.yml
    M .github/workflows/create_release_draft.yml
    M .github/workflows/documentation.yml
    M .github/workflows/pytest.yml
    M .github/workflows/python-code-quality.yml

  Log Message:
  -----------
  CI(deps): Update actions/setup-python action to v6.3.0 (main) (#7666)


  Commit: c2ccb36e5638f5f87d23835db5f05989ffffe436
      https://github.com/OSGeo/grass/commit/c2ccb36e5638f5f87d23835db5f05989ffffe436
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-10 (Fri, 10 Jul 2026)

  Changed paths:
    M Dockerfile
    M docker/ubuntu/Dockerfile

  Log Message:
  -----------
  CI(deps): Update docker/dockerfile Docker tag to v1.25 (main) (#7667)


  Commit: ae111ef612d90d14f2675d75cd7a5f5c9e1a8b92
      https://github.com/OSGeo/grass/commit/ae111ef612d90d14f2675d75cd7a5f5c9e1a8b92
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-12 (Sun, 12 Jul 2026)

  Changed paths:
    M raster/r.to.rast3elev/main.c

  Log Message:
  -----------
  r.to.rast3elev: Check return-value for 'scanf'-like functions (#7660)

Potential fix for code scanning alert no. 239: Incorrect return-value check for a 'scanf'-like function

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>


  Commit: c80a5d3b4aa1ff6415ec25dc9b879d3970598be3
      https://github.com/OSGeo/grass/commit/c80a5d3b4aa1ff6415ec25dc9b879d3970598be3
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-12 (Sun, 12 Jul 2026)

  Changed paths:
    M gui/wxpython/iscatt/core_c.py
    M gui/wxpython/iscatt/iscatt_core.py

  Log Message:
  -----------
  gui: Actually raise GExceptions in iscatt_core (#7659)

* gui: Actually raise GExceptions in iscatt_core

Some code in iscatt was not raising the exception it was creating.
Thus, it was not having any effect.

Here is the PR text for one of the fixes that was generated by AI. I
did the others.
General fix: when an error condition is detected, **raise** the
exception instead of just constructing it.

Best fix here: in `gui/wxpython/iscatt/iscatt_core.py`, inside
`CatRastUpdater._updateCatRast`, change line 277 from:
- `GException(_("Patching category raster conditions file failed."))`
to:
- `raise GException(_("Patching category raster conditions file
failed."))`

This preserves intended functionality (error reporting via
`GException`) while ensuring the failure is not silently ignored. No
new imports, methods, or definitions are required.

* Apply suggestions from code review


  Commit: e9a34c01e333df214bdfba72bb6846fb055712f3
      https://github.com/OSGeo/grass/commit/e9a34c01e333df214bdfba72bb6846fb055712f3
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-12 (Sun, 12 Jul 2026)

  Changed paths:
    M general/g.region/g.region.md
    M include/Make/Grass.make
    M include/Make/Html.make
    M man/Makefile
    M utils/Makefile
    A utils/g.md2man/Makefile
    A utils/g.md2man/g.md2man.py
    A utils/g.md2man/gmd.py
    A utils/g.md2man/tests/g_md2man_test.py

  Log Message:
  -----------
  doc: generate man pages from markdown (#7540)

Add g.md2man, a Markdown to groff converter reusing the g.html2man
groff formatter, and switch the Autotools man page build from the
HTML sources to the generated markdown. Man pages no longer depend
on the HTML build.

The converter code was generated with AI assistance (Claude Fable)
and reviewed with several rounds of AI-assisted review.


  Commit: 875be6b06501f77c376cc7ac79fb5a4e1b141419
      https://github.com/OSGeo/grass/commit/875be6b06501f77c376cc7ac79fb5a4e1b141419
  Author: Rajveer* <irajveer.bishnoi2310 at gmail.com>
  Date:   2026-07-12 (Sun, 12 Jul 2026)

  Changed paths:
    A raster/r.null/tests/r_null_test.py
    R raster/r.null/testsuite/test_r_null.py

  Log Message:
  -----------
  tests: Migrate r.null tests from gunittest to pytest (#7675)

Migrates the r.null testsuite from gunittest to pytest. Everything goes through grass.tools (r.describe results read with .json, no gs.parse_command). The three checks from the old testsuite are preserved: setnull on an integer map with -i, setnull on a floating point map with -f, and filling NULL cells with the null parameter.


  Commit: 011921fd74d825d0bb7acc007409e99801804824
      https://github.com/OSGeo/grass/commit/011921fd74d825d0bb7acc007409e99801804824
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M utils/g.md2man/tests/g_md2man_test.py

  Log Message:
  -----------
  g.md2man: Expand tests on other cases (#7679)

CodeQL Code Quality had some AI findings on a recently changed file, a test file for g.md2man. The tests suggested seemed legitimate, and they are passing. I am thus submitting them here, after testing them in my fork.

Original text explaining the findings: 

-------

The test asserts that there are exactly 3 bullet list markers for the input `"- first\n- second\n - nested\n"`, but this input only has 3 items (first, second, nested). The assertion `== 3` may be correct, but it should be verified that the nested item also produces the same `.IP \(bu 4n` marker, since nested items could produce a different marker format. If the nested list intentionally uses the same marker, this is fine, but the test name `test_unordered_list_nested` suggests the nesting behavior is what's being tested, and there is no assertion verifying that the nested item is actually rendered as nested (e.g., inside `.RS`/`.RE` blocks relative to the parent items). Consider adding an assertion that checks the order of `.RS`, `.IP`, and `.RE` to confirm correct nesting structure.


----------

The `test_comment_parsing_unit` test covers multi-line and inline comments, but there is no unit test for `strip_html_comments` behavior inside a fenced code block (i.e., that a comment inside a fence is preserved). The integration test `test_comment_kept_in_fenced_code` covers this via subprocess, but a direct unit test of `strip_html_comments` with a fenced block containing a comment would provide more precise coverage of that branch in `gmd.py`.

* Apply suggested fix to utils/g.md2man/tests/g_md2man_test.py from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Apply suggested fix to utils/g.md2man/tests/g_md2man_test.py from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Apply ruff format

---------

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>


  Commit: f9ae02a5e7ce8d143fe310671fc85cc085594ebd
      https://github.com/OSGeo/grass/commit/f9ae02a5e7ce8d143fe310671fc85cc085594ebd
  Author: Markus Neteler <neteler at osgeo.org>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M doc/Makefile
    M python/grass/docs/conf.py
    M python/grass/docs/src/gunittest_running_tests.rst
    M python/grass/docs/src/gunittest_testing.rst
    M python/grass/docs/src/index.rst

  Log Message:
  -----------
  docs: Reduce Sphinx build warnings and fix broken links (#7526)

Fix the today config type, skip PLY lexer docstrings in autodoc, remove
the unsupported logo theme option, correct the toctree entries, and make
the sample data links work again.

The initial changes were AI-assisted (OpenCode with DeepSeek), the review
and follow-up fixes used Claude Code (with Fable).

---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>
Co-authored-by: Vaclav Petras <wenzeslaus at gmail.com>


  Commit: d729f90aa20b5c853585d4fad50c6a0992919441
      https://github.com/OSGeo/grass/commit/d729f90aa20b5c853585d4fad50c6a0992919441
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M python/grass/temporal/core.py
    M python/grass/temporal/metadata.py
    M python/grass/temporal/tests/grass_temporal_core_init_skip_db_test.py

  Log Message:
  -----------
  temporal: allow STDS object construction without initialized database (#7672)

* set sqlite as default backend on init

* read tgis_db_version from globals if no DB is initialized

* add tests for STDS construction


  Commit: 2e02066d96b1e5c32d3b64c6ddb4834c77c9699b
      https://github.com/OSGeo/grass/commit/2e02066d96b1e5c32d3b64c6ddb4834c77c9699b
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M scripts/r.reclass.area/r.reclass.area.html
    M scripts/r.reclass.area/r.reclass.area.md
    M scripts/r.reclass.area/r.reclass.area.py
    M scripts/r.reclass.area/testsuite/test_r_reclass_area.py
    M scripts/r.reclass.area/testsuite/testrra.py

  Log Message:
  -----------
  r.reclass.area: add upper and lower option and rewrite with Tools API (#7337)

* move to Tools API

* add upper/lower filter range options) (backwards compatible) for both vector and raster based filtering

* propagate options of underlying tools (r.clump)

* add tests

Co-authored-by: Markus Neteler <markus at neteler.org>

* Edit html

* Unchange header line

* typos

---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>
Co-authored-by: Markus Neteler <markus at neteler.org>


  Commit: 32785cd092089a58c9ab0fce28aeaa85066a4ee1
      https://github.com/OSGeo/grass/commit/32785cd092089a58c9ab0fce28aeaa85066a4ee1
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M general/g.region/main.c
    M raster/r.out.vtk/writeascii.c
    M raster/r.watershed/seg/init_vars.c
    M raster3d/r3.out.vtk/writeVTKData.c

  Log Message:
  -----------
  CQ: Fix CodeQL issues "Incorrect return-value check for a 'scanf'-like function" (#7673)

Follow-up from https://github.com/OSGeo/grass/pull/7660

This PR applies the same logic as the other PR, where how sscanf can also return EOF "if input failure occurs before the first receiving argument was assigned". (See https://en.cppreference.com/c/io/fscanf).

Here, the little touch that is different for `raster/r.out.vtk/writeascii.c` and `raster3d/r3.out.vtk/writeVTKData.c`, is that I assume that if there's the `EOF` case, or any invalid case for the `null_value`, we would still want the null value to be 0. I think that's the design intention behind the code.


This was assisted by AI (Copilot-generated fix suggestions for code scanning alerts), but we can reason through it and I applied some myself in order to batch them in one single PR.

This should fix:
- https://github.com/OSGeo/grass/security/code-scanning/525
- https://github.com/OSGeo/grass/security/code-scanning/526
- https://github.com/OSGeo/grass/security/code-scanning/527
- https://github.com/OSGeo/grass/security/code-scanning/528
- https://github.com/OSGeo/grass/security/code-scanning/531
- https://github.com/OSGeo/grass/security/code-scanning/532
- https://github.com/OSGeo/grass/security/code-scanning/533


* Potential fix for code scanning alert no. 525: Incorrect return-value check for a 'scanf'-like function

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 528: Incorrect return-value check for a 'scanf'-like function

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update writeascii.c

* r3.out.vtk: Fix "Incorrect return-value check for a 'scanf'-like function" for null value

* r.watershed: Fix "Incorrect return-value check for a 'scanf'-like function" for disturbed_land default value

Adresses https://github.com/OSGeo/grass/security/code-scanning/532

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>


  Commit: 29bf67c51eaa0b90a426c8302d8cc8d86f5e1e85
      https://github.com/OSGeo/grass/commit/29bf67c51eaa0b90a426c8302d8cc8d86f5e1e85
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M .github/workflows/macos.yml
    M .github/workflows/pytest.yml

  Log Message:
  -----------
  CI: Set OMP_NUM_THREADS=1 for tests run in parallel (#7680)

We observed some random, transient timeouts on different tests. For one of them, t.list, there was no reason to fail on macOS, where there are 3 cores instead of 2 in GitHub Actions. There's a possibility that there's a problem with the temporal library locking up somewhere, but there’s also a small chance that the r.mapcalc calls are now using multiple processors. It "costs" not much to add this env var so that the number of threads is limited, even if it doesn't fix all problems; it might just fix some potential ones, since we are already running in parallel in that section.


  Commit: 842a5d7863aeed79717689dd07ef9fea97948b94
      https://github.com/OSGeo/grass/commit/842a5d7863aeed79717689dd07ef9fea97948b94
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M raster3d/r3.out.vtk/writeVTKData.c

  Log Message:
  -----------
  r3.out.vtk: Fix typo in translated string (#7685)

AI findings on a recently modified file found a typo in a translated string. This adds "be" in "Values should be in between"...

Apply suggested fix to raster3d/r3.out.vtk/writeVTKData.c from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>


  Commit: 46db5818f1288da21c47a8a36d35eda21623496f
      https://github.com/OSGeo/grass/commit/46db5818f1288da21c47a8a36d35eda21623496f
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M python/grass/temporal/c_libraries_interface.py
    M python/grass/temporal/space_time_datasets.py
    A python/grass/temporal/tests/grass_temporal_map_metadata_test.py

  Log Message:
  -----------
  grass.temporal: Fix swapped rows and cols in map metadata (#7681)

The ctypes interface assigned the number of columns to the rows key and
the number of rows to the cols key, for raster as well as 3D raster maps.
The swapped values are stored in the temporal database when a map is
registered and are reported by t.info, which therefore disagreed with
r.info and r3.info. The number of cells was not affected, because it is
the product of both.

Maps registered before this fix keep the swapped values in the temporal
database until they are registered again.

Update the doctests which asserted the swapped values and add a test
comparing the metadata read through the interface with the output of
r.info and r3.info.

The test was written with the help of Claude Code.


  Commit: 425d460918f26a35ff554c08798c9d8de3d70fad
      https://github.com/OSGeo/grass/commit/425d460918f26a35ff554c08798c9d8de3d70fad
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-13 (Mon, 13 Jul 2026)

  Changed paths:
    M .github/workflows/pytest.yml
    M .github/workflows/python-code-quality.yml
    M REQUIREMENTS.md
    M lib/init/grass.py
    M pyproject.toml
    M python/grass/script/setup.py
    M utils/mkdocs.py

  Log Message:
  -----------
  packaging: Update min Python version to 3.11 (#7684)

Python 3.10 receives security fixes only and reaches end of life in
October 2026, before the next release. Per RFC 8, raise the minimum
supported Python version from 3.10 to 3.11.

Update the version in REQUIREMENTS.md, pyproject.toml (requires-python,
Black, Pylint, Pyright, and isort) and CI (pytest matrix and
MIN_PYTHON_VERSION).

Update places in code which add code for the older version:

- utils/mkdocs.py: datetime.fromisoformat parses the Z suffix used by
  recent Git natively since 3.11, so the fallback is no longer needed.
- Use the datetime.UTC alias added in 3.11. Ruff enables this check
  (UP017) once it infers the higher target version from requires-python.
- Drop the toml extra for bandit. It provided a TOML parser for reading
  the bandit configuration from pyproject.toml, which the standard
  library covers since 3.11 with tomllib. Here the deciding version is
  the one the workflow runs, which is well past 3.11 already.


  Commit: 01ac43ddc639e01e14ecb3025ee4a624919e551a
      https://github.com/OSGeo/grass/commit/01ac43ddc639e01e14ecb3025ee4a624919e551a
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M CMakeLists.txt
    M cmake/modules/generate_docs.cmake
    M man/CMakeLists.txt
    A man/build_manpages.py
    M utils/CMakeLists.txt

  Log Message:
  -----------
  CMake: Build man pages from markdown (#7674)

* CMake: Build man pages from markdown
Generate the markdown documentation (--md-description + mkmarkdown.py)
in all three doc paths (modules, GUI, scripts) and convert man pages
from it with g.md2man instead of from HTML with g.html2man, mirroring
the Autotools build. Install g.md2man.py and gmd.py, and install the
generated docs/mkdocs tree, which was previously not installed at all.

Add man/build_manpages.py, a sweep run after the index scripts that
converts any markdown page without an up-to-date man page. It ports
man/Makefile's MANPAGES wildcard to CMake, which has no build-time
glob, and produces the index and dynamically named topic_* man pages
that the CMake build previously did not ship.

Run the doc generators in the tool source directory like Autotools
does. This fixes the SOURCE CODE footer in all CMake-built pages,
which previously pointed to a nonexistent build-directory path in the
repository and fell back to an Accessed date instead of the last
commit, and makes the copy-source-into-build-dir steps unnecessary.
Also fix build_class.py receiving the documentation directory as its
year argument.

Verified against an Autotools build: g.md2man output for the same
generated markdown is byte-identical.

Generated with AI assistance (Claude Fable), including the build
verification against the Autotools doc tree.

* address review


  Commit: e0672abdb0a386d847b8ef4c383c0b7d09f2ebcb
      https://github.com/OSGeo/grass/commit/e0672abdb0a386d847b8ef4c383c0b7d09f2ebcb
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M python/grass/pygrass/vector/table.py

  Log Message:
  -----------
  grass.pygrass: Add the psycopg2 hint as an exception note (#7690)

The table connection raised a new ImportError with the hint as its message,
so the message of the original error, which says which module is missing,
was replaced by the hint.

Add the hint as a note to the original error instead. From the Python
documentation of BaseException.add_note(): Add the string note to the
exception's notes which appear in the standard traceback after the exception
string. The traceback then shows both the missing module and the hint.

Exception notes need Python 3.11, which is now the minimum version.


  Commit: be451c43496529ce15626b4bb141df6028183302
      https://github.com/OSGeo/grass/commit/be451c43496529ce15626b4bb141df6028183302
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M python/grass/gunittest/loader.py

  Log Message:
  -----------
  grass.gunittest: Add the module name as an exception note (#7689)

The test loader raised a new ImportError to say which module could not be
imported. The message used e.message, which does not exist in Python 3, so
the handler raised AttributeError instead of the intended error.

Add the module name as a note to the original error instead. From the Python
documentation of BaseException.add_note(): Add the string note to the
exception's notes which appear in the standard traceback after the exception
string. The traceback then shows both the import error and the module name.

Exception notes need Python 3.11, which is now the minimum version.


  Commit: d4b639dccb5f9204648b68ae1e38dcde92137b8e
      https://github.com/OSGeo/grass/commit/d4b639dccb5f9204648b68ae1e38dcde92137b8e
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M lib/arraystats/class.c
    M vector/v.class/main.c
    M vector/v.class/tests/test_v_class.py

  Log Message:
  -----------
  v.class: Fix out-of-bounds read when no records are selected (#7692)

An empty WHERE result left an empty data array, which the classification
algorithms then indexed at data[0] and data[count - 1]. The values printed
as class breaks were whatever the heap happened to hold, which is zeroed
on Linux but not on Windows, making the test flaky there.

Warn the user and keep the zero-initialized breaks when nothing is selected, and
reject an empty array in AS_class_apply_algorithm.


  Commit: 3e84f7cf1a9f4ea2cca9be853a0028ffecd86ee0
      https://github.com/OSGeo/grass/commit/3e84f7cf1a9f4ea2cca9be853a0028ffecd86ee0
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M scripts/CMakeLists.txt
    M scripts/Makefile
    A scripts/v.geometry/Makefile
    A scripts/v.geometry/tests/conftest.py
    A scripts/v.geometry/tests/v_geometry_test.py
    A scripts/v.geometry/v.geometry.html
    A scripts/v.geometry/v.geometry.md
    A scripts/v.geometry/v.geometry.py

  Log Message:
  -----------
  v.geometry: new tool (v.to.db wrapper) for more obvious access to vector geometry computation (#7329)


  Commit: f5cd4fab795fdb47be00ef64b25c852dfbc48c60
      https://github.com/OSGeo/grass/commit/f5cd4fab795fdb47be00ef64b25c852dfbc48c60
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M gui/wxpython/iscatt/plots.py
    M gui/wxpython/timeline/frame.py
    M gui/wxpython/tplot/frame.py

  Log Message:
  -----------
  wxGUI: Add the matplotlib hint as an exception note (#7688)

The Scatterplot, Timeline, and Temporal Plot tools raised a new ImportError
with the hint as its message, so the message of the original error, which
says which module is actually missing, was replaced by the hint.

Add the hint as a note to the original error instead. From the Python
documentation of BaseException.add_note(): Add the string note to the
exception's notes which appear in the standard traceback after the exception
string. The traceback then shows both the missing module and the hint.

The consumer code (various places) shows always its own message, so the
not, not the original message is not used. These changes do not change that.  

Exception notes need Python 3.11, which is now the minimum version.


  Commit: 5deb0f6ee120cf52f0322bb82474c5a37cd75f55
      https://github.com/OSGeo/grass/commit/5deb0f6ee120cf52f0322bb82474c5a37cd75f55
  Author: Markus Neteler <neteler at osgeo.org>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M doc/howto_release.md

  Log Message:
  -----------
  docs: howto_release.md: update OSGeo server names (#7711)


  Commit: 7a67a8020abd7a1c2e56b338d71808da5d1a2a0a
      https://github.com/OSGeo/grass/commit/7a67a8020abd7a1c2e56b338d71808da5d1a2a0a
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M gui/wxpython/core/gcmd.py
    M gui/wxpython/core/gconsole.py
    M gui/wxpython/gui_core/forms.py
    M gui/wxpython/gui_core/ghelp.py
    M gui/wxpython/rlisetup/frame.py
    M lib/init/grass.py
    M python/grass/gunittest/multirunner.py
    M python/grass/script/utils.py
    M utils/mkhtml.py

  Log Message:
  -----------
  packaging: Remove locale fallbacks for Python older than 3.11 (#7697)

locale.getencoding() was added in Python 3.11, so the fallbacks to the
deprecated locale.getdefaultlocale() are never used now that 3.11 is the
minimal supported version. Call locale.getencoding() directly.

The two places calling locale.getlocale() get the same treatment. That
function is available in all supported versions, so those fallbacks could
not be reached even before.


  Commit: 223c3732ff214f21d980277c0cf38ba819bab13d
      https://github.com/OSGeo/grass/commit/223c3732ff214f21d980277c0cf38ba819bab13d
  Author: Linda Karlovska <49241681+lindakarlovska at users.noreply.github.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M doc/jupyter_intro.md
    A gui/icons/grass/jupyter.png
    A gui/icons/grass/jupyter.svg
    M gui/wxpython/CMakeLists.txt
    M gui/wxpython/Makefile
    A gui/wxpython/docs/jupyter_browser_mode.png
    A gui/wxpython/docs/jupyter_integrated_mode.png
    A gui/wxpython/docs/jupyter_startup_dialog.png
    A gui/wxpython/docs/wxGUI.jupyter.md
    A gui/wxpython/jupyter_notebook/dialogs.py
    A gui/wxpython/jupyter_notebook/environment.py
    A gui/wxpython/jupyter_notebook/frame.py
    A gui/wxpython/jupyter_notebook/notebook.py
    A gui/wxpython/jupyter_notebook/panel.py
    A gui/wxpython/jupyter_notebook/server.py
    A gui/wxpython/jupyter_notebook/storage.py
    A gui/wxpython/jupyter_notebook/template_notebooks/new.ipynb
    A gui/wxpython/jupyter_notebook/template_notebooks/welcome.ipynb
    A gui/wxpython/jupyter_notebook/toolbars.py
    A gui/wxpython/jupyter_notebook/utils.py
    M gui/wxpython/lmgr/frame.py
    M gui/wxpython/lmgr/toolbars.py
    M gui/wxpython/main_window/frame.py
    M gui/wxpython/main_window/notebook.py
    M gui/wxpython/xml/toolboxes.xml
    M gui/wxpython/xml/wxgui_items.xml
    M man/mkdocs/mkdocs.yml

  Log Message:
  -----------
  wxGUI: Support for Jupyter-based workflows (#5901)

Starting with GRASS 8.6, the GUI supports launching and managing Jupyter Notebooks directly. Users can access notebooks through two modes: Browser mode (default web browser) or Integrated mode (embedded in GUI).

Authored-by: Linda Karlovska <linda.karlovska at seznam.cz>
Co-authored-by: Tomas Zigo <tomas.zigo at slovanet.sk>
Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>
Co-authored-by: Anna Petrasova <kratochanna at gmail.com>
Co-authored-by: Vaclav Petras <wenzeslaus at gmail.com>


  Commit: 795f878d4b64042f46a875197e57d3199308b1cb
      https://github.com/OSGeo/grass/commit/795f878d4b64042f46a875197e57d3199308b1cb
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M lib/psdriver/draw_bitmap.c
    M lib/psdriver/erase.c

  Log Message:
  -----------
  lib/psdriver: Print double coordinates with %f, not %d (#7700)

PS_Bitmap passed the double cur_x and cur_y and PS_Erase passed the
double ps.left, ps.top, ps.right and ps.bot to output() as %d. On
x86_64 this reads the wrong varargs registers, so BITMAP and BOX
received garbage operands. Use %f as box.c already does for the same
BOX procedure.

Fixes 6 CodeQL cpp/wrong-type-format-argument alerts.


  Commit: 7d24287d272eef3e60c65a5cc98b22d74c6a1526
      https://github.com/OSGeo/grass/commit/7d24287d272eef3e60c65a5cc98b22d74c6a1526
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M lib/nviz/lights.c
    M lib/ogsf/gs.c
    M lib/ogsf/gs_norms.c
    M lib/ogsf/gsd_cplane.c
    M lib/ogsf/gsd_fringe.c
    M lib/ogsf/gsd_surf.c
    M lib/ogsf/gsd_views.c
    M lib/ogsf/gsd_wire.c

  Log Message:
  -----------
  lib/ogsf, lib/nviz: Fix multiplications converted to a larger type (#7704)


  Commit: ec578670869985105ab563de8b16b67f64014f0f
      https://github.com/OSGeo/grass/commit/ec578670869985105ab563de8b16b67f64014f0f
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M python/grass/utils/download.py
    M scripts/g.extension/g.extension.py
    M scripts/r.unpack/r.unpack.py
    M scripts/v.unpack/v.unpack.py

  Log Message:
  -----------
  r.unpack, v.unpack: Refuse to extract archives without a tarfile filter (#7701)


  Commit: 6ccda375af353bd4d6f7da5ffffcebac10d1a11b
      https://github.com/OSGeo/grass/commit/6ccda375af353bd4d6f7da5ffffcebac10d1a11b
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M lib/cairodriver/draw_bitmap.c
    M lib/cairodriver/graph.c
    M lib/external/ccmath/hmgen.c
    M lib/external/ccmath/unitary.c
    M lib/gmath/del2g.c
    M lib/gmath/getg.c
    M lib/linkm/new.c
    M lib/pngdriver/graph_close.c
    M lib/pngdriver/graph_set.c
    M lib/raster/get_row.c
    M lib/raster/put_row.c
    M lib/raster3d/cache.c
    M lib/raster3d/misc.c
    M lib/raster3d/tilewrite.c
    M lib/raster3d/volume.c
    M lib/segment/address.c
    M lib/vector/diglib/allocation.c

  Log Message:
  -----------
  libraries: Fix multiplications converted to a larger type (#7705)

Cast the first operand so that products assigned to or compared with
size_t, ssize_t, long, and off_t values are computed in the wide type
instead of int, which can overflow for large dimensions. This covers
buffer sizes in the png and cairo drivers, gmath filter kernels, the
ccmath calloc calls, linkm chunk allocation, raster row buffers,
raster3d tile and volume sizes, segment addressing, and diglib
reallocation.

Fixes 24 CodeQL cpp/integer-multiplication-cast-to-long alerts.


  Commit: 7a696dbba58d3f84bf22149f49f57dcb7894f7df
      https://github.com/OSGeo/grass/commit/7a696dbba58d3f84bf22149f49f57dcb7894f7df
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M display/d.linegraph/main.c
    M raster/r.sunmask/solpos00.c

  Log Message:
  -----------
  r.sunmask, d.linegraph: Compute trig products in double (#7712)


  Commit: f85545aac20250111392dfc30cbef97c784e49be
      https://github.com/OSGeo/grass/commit/f85545aac20250111392dfc30cbef97c784e49be
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M pyproject.toml

  Log Message:
  -----------
  checks: Exclude vendored code from bandit scanning (#7699)

Bandit scans the vendored ctypesgen copy in
python/libgrass_interface_generator and the vendored PLY copy in
python/grass/temporal/ply, reporting 13 findings (B102, B403, B605,
B307, B602, B607) in code GRASS does not maintain. Exclude both
directories, matching the existing pylint ignore-paths and formatter
extend-exclude entries.


  Commit: 4c45878bb13dc369b133973271c8310c0c82507a
      https://github.com/OSGeo/grass/commit/4c45878bb13dc369b133973271c8310c0c82507a
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M doc/howto_release.md

  Log Message:
  -----------
  doc: How to release: follow up typos (#7718)

Follow up of a recently changed file. AI findings mostly found typos, plus an interesting other situation.

The symlink source uses `grass-$VERSION.tar.md5sum`, but the md5sum file is created as `grass-${VERSION}.md5sum` (line 347). The `.tar` part in the filename is incorrect and the symlink will be broken.

_This PR applies 4/4 suggestions from code quality [AI findings](https://github.com/OSGeo/grass/security/quality/ai-findings)._

* Apply suggested fix to doc/howto_release.md from Copilot Autofix

---------

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>


  Commit: e193ca71e7d42d0beb730d17e95a6e8de689afb6
      https://github.com/OSGeo/grass/commit/e193ca71e7d42d0beb730d17e95a6e8de689afb6
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/temporal/register.py
    M temporal/t.register/t.register.html
    M temporal/t.register/t.register.md
    R temporal/t.register/test.t.register.raster.file.reltime.sh
    A temporal/t.register/tests/conftest.py
    A temporal/t.register/tests/t_register_file_test.py

  Log Message:
  -----------
  grass.temporal: Fix end time parsing when registering relative-time maps from file (t.register) (#7717)

The name|start|end input file format silently misread the end time as a
semantic label for relative-time datasets: maps were registered as point
time and the intended end times were written as semantic labels into the
raster metadata. Regression from the band references implementation
(a83af32aac). An integer third column is now interpreted as an end time
for relative time; anything else remains a semantic label.

Written with the help of Claude Code.


  Commit: 46836626508062ccf0ae8a5e0571666eb814cb5c
      https://github.com/OSGeo/grass/commit/46836626508062ccf0ae8a5e0571666eb814cb5c
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M display/d.linegraph/main.c

  Log Message:
  -----------
  d.linegraph: Follow-up fixes for typos, dereference pointers, and format string precision specifier (#7722)

A couple simple string typos were fixed, plus two other issues.

`tt` and `tb` are pointer parameters (`double *tt`, `double *tb`), so `tt - tb` computes pointer difference (an address offset), not the difference between the pointed-to text box values. The condition should dereference the pointers: `(*tt - *tb) > YTIC_DIST`.

The format string `"%f.0"` is incorrect — the `.0` precision specifier must be inside the format specifier, not after it. The literal `.0` will be appended as plain text to the output. The intended format is `"%.0f"` to format the value as a float with no decimal places.

* Apply suggested fix to display/d.linegraph/main.c from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Apply suggested fix to display/d.linegraph/main.c from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Apply suggested fix to display/d.linegraph/main.c from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Apply suggested fix to display/d.linegraph/main.c from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>


  Commit: 8031e362fd2f63a6c550be691aeda1e989839312
      https://github.com/OSGeo/grass/commit/8031e362fd2f63a6c550be691aeda1e989839312
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    A temporal/t.info/tests/conftest.py
    A temporal/t.info/tests/test_t_info_backend.py
    A temporal/t.info/tests/test_t_info_str3ds.py
    A temporal/t.info/tests/test_t_info_strds.py
    A temporal/t.info/tests/test_t_info_stvds.py
    R temporal/t.info/testsuite/test.t.info.sh

  Log Message:
  -----------
  t.info: Add tests (#7682)

Add pytest tests covering the plain, shell (-g), history (-h) and
temporal database backend (-d) output of t.info for space time datasets
and maps of all types. Include a dataset without registered maps, a
relative time dataset, a map registered in two datasets and non-ASCII
title and description.

Remove the shell script test, which the new tests replace.

The temporal history records the command name with the .py extension on
Windows, so assert the name and its parameters separately.

The tests were written with the help of Claude Code.


  Commit: f131b6caa797081a9a0cc4ca42514e793161f56b
      https://github.com/OSGeo/grass/commit/f131b6caa797081a9a0cc4ca42514e793161f56b
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/utils/download.py
    A python/grass/utils/tests/grass_utils_download_test.py
    M scripts/g.download.project/g.download.project.html
    M scripts/g.download.project/g.download.project.md

  Log Message:
  -----------
  grass.utils: Fix the download error message and limit the URL schemes (#7687)

Fix the HTTP error message, which lost its {desc} placeholder and was
formatted with the whole HTTPError instead of a status code. Limit a download
to the supported schemes (http, https, ftp, file), since urlretrieve opens
any scheme, including data and custom ones (Bandit B310), and document that a
local archive needs the file scheme (no change in behavior, just doc clarity).
Skip the content type check for a local file, which fixed extracting a local ZIP
on Windows. Add tests for the module.


  Commit: f0970ee81eb13fdfb9dee4ed0c5b37a7baa5cc7e
      https://github.com/OSGeo/grass/commit/f0970ee81eb13fdfb9dee4ed0c5b37a7baa5cc7e
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/app/cli.py
    M python/grass/app/tests/grass_app_cli_test.py
    M python/grass/script/__init__.py
    M python/grass/script/core.py
    A python/grass/script/tests/grass_script_create_mapset_test.py

  Log Message:
  -----------
  grass.script: add create_mapset function (#7298)

Validates project exists and has PERMANENT mapset
Validates mapset name using legal_name()
Rejects creating PERMANENT
overwrite=True to replace existing mapset
initialize_db=True (default) runs db.connect -c via Tools API
env parameter for use with specific sessions, falls back to os.environ
Raises ScriptError with clear messages for all error cases


  Commit: 9893d6817d3900835ff0e0775132f773ae547f0f
      https://github.com/OSGeo/grass/commit/9893d6817d3900835ff0e0775132f773ae547f0f
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/temporal/core.py
    M python/grass/temporal/tests/grass_temporal_core_init_skip_db_test.py
    M temporal/t.connect/t.connect.html
    M temporal/t.connect/t.connect.md
    M temporal/t.list/t.list.py

  Log Message:
  -----------
  temporal: handle TGIS DB connections for half initialized mapsets (#7707)

* exclude mapsets without DB

* handle defined connection without DB file.

* add test for half initialized mapset

* try to clarify functionality in manual

* de-escalate warnings

Co-authored-by: Anna Petrasova <kratochanna at gmail.com>
Co-authored-by: Veronica Andreo <veroandreo at gmail.com>


  Commit: e50e16c4b2c730c916fc4342b4966cd6d27ddb2c
      https://github.com/OSGeo/grass/commit/e50e16c4b2c730c916fc4342b4966cd6d27ddb2c
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M raster/r.in.gdal/main.c
    M raster/r.viewshed/grass.cpp
    M raster/r.watershed/ram/init_vars.c

  Log Message:
  -----------
  raster: Fix three single-alert CodeQL findings (#7702)

r.watershed(ram): checking sscanf against 0 misses the EOF return, so
use != 1 as the seg variant already does. 
r.viewshed: bound the inner
column loop by the local int ncols cast to dimensionType, matching the
row loop, instead of comparing the unsigned short counter directly to
Rast_window_cols().
r.in.gdal: drop the null check on sdsdesc, which
is always assigned a non-null pointer beforehand.


  Commit: 57968d60e7e3865a84ccf76bb4ed0ad92cd3cc32
      https://github.com/OSGeo/grass/commit/57968d60e7e3865a84ccf76bb4ed0ad92cd3cc32
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/temporal/abstract_space_time_dataset.py
    M python/grass/temporal/list_stds.py
    M temporal/t.rast.list/t.rast.list.py
    M temporal/t.rast.list/tests/t_rast_list_test.py

  Log Message:
  -----------
  t.rast.list: allow method gran with where option (#7678)

* enable where with method gran

* enable where with method gran, set '' to None for gran

* add gran-where test, move to tools

---------

Co-authored-by: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
Co-authored-by: Anna Petrasova <kratochanna at gmail.com>


  Commit: 22df76e0d0ba549593a8d044b80e6f0cbd954a83
      https://github.com/OSGeo/grass/commit/22df76e0d0ba549593a8d044b80e6f0cbd954a83
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/imaging/images2avi.py
    M python/grass/pygrass/modules/grid/grid.py

  Log Message:
  -----------
  python: Use argument lists instead of shell=True for subprocess (#7703)


  Commit: c6459dc35f802085fd32758d69661bdf07452ce0
      https://github.com/OSGeo/grass/commit/c6459dc35f802085fd32758d69661bdf07452ce0
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M doc/development/style_guide.md
    M man/mkdocs/docs/development_intro.md

  Log Message:
  -----------
  doc: use absolute links in style guide, add link to cookiecutter (#5656)


  Commit: f63463995a7ec61a3d2948cefe6a39092ef81683
      https://github.com/OSGeo/grass/commit/f63463995a7ec61a3d2948cefe6a39092ef81683
  Author: Markus Neteler <neteler at osgeo.org>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/script/db.py

  Log Message:
  -----------
  db.univar: fix Python error when input table not existing (#7726)


  Commit: 7aec9f206e28a71671277a4a6b8d8db23cac3ef3
      https://github.com/OSGeo/grass/commit/7aec9f206e28a71671277a4a6b8d8db23cac3ef3
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M cmake/modules/build_addon.cmake
    M include/Make/Module.make
    M include/Make/Script.make
    M scripts/g.extension/g.extension.py
    M scripts/g.extension/testsuite/test_addons_download.py
    M scripts/g.extension/testsuite/test_addons_modules.py

  Log Message:
  -----------
  g.extension: Install markdown documentation for addons (#7676)

Extend the addon install rules in Module.make and Script.make to
install the generated markdown page and its images into
docs/mkdocs/source in the addon prefix, next to the existing HTML and
man page. g.extension creates the directory on install and removes the
markdown page on uninstall.

Generate markdown and man pages also in the CMake addon build
(build_addon.cmake), which previously produced only HTML pages and no
man pages at all. This requires g.md2man in the installed GRASS
(shipped by the Autotools build since #7540 and by the CMake build
since #7674).

update_manual_page() intentionally remains HTML-only: it rewrites
relative links for the browser-based help, while the installed
markdown has no consumer that follows links (man pages drop link
targets, and the online addons manual build does its own linking).

Extend the g.extension tests to check the installed markdown files.

AI assistance (Claude Fable); verified with install and
remove round trips of a sample addon through both the make-based and
CMake-based paths.


  Commit: f0376624592e47e50148f3cc5a9f9bfdbcf776fd
      https://github.com/OSGeo/grass/commit/f0376624592e47e50148f3cc5a9f9bfdbcf776fd
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M CMakeLists.txt
    M include/CMakeLists.txt
    M lib/temporal/CMakeLists.txt

  Log Message:
  -----------
  CMake: Fix stale staging of headers, modules list, and temporal SQL in build output (#7720)

This PR fixes three CMake staging defects that leave the runnable tree under build/output stale or incomplete, typically after editing headers or switching branches. Each showed up as confusing failures unrelated to
the change under test. AI assistance Claude Fable


  Commit: c7fc4ea573ef6c5092d667105f3a08215319582b
      https://github.com/OSGeo/grass/commit/c7fc4ea573ef6c5092d667105f3a08215319582b
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-15 (Wed, 15 Jul 2026)

  Changed paths:
    M python/grass/temporal/__init__.py
    M python/grass/temporal/gui_support.py
    A python/grass/temporal/tests/grass_temporal_gui_support_test.py

  Log Message:
  -----------
  grass.temporal: Add registered_maps_grouped() and honor dbif mapsets in tlist() (#7714)

Add a gui_support helper that returns the maps registered in all space
time datasets of the mapsets covered by the given database connection,
grouped by dataset type and dataset id, ordered by start time. This
gives the Data Catalog a cheap way to show dataset contents and to
identify maps registered in any dataset without calling t.rast.list
per dataset.

Fix tlist() to iterate the mapsets of the passed connection instead of
re-deriving the search path, so tlist_grouped() works with a
connection created with mapsets=*. Default behavior is unchanged.

The tests also cover mapsets without a temporal database, a project
without any temporal database, and verify that listing with
tgis.init(skip_db_init=True) does not create a temporal database.

Written with the help of Claude Code.


  Commit: 0aaa18e7c0974244ec5564fc52c6495e2b426f59
      https://github.com/OSGeo/grass/commit/0aaa18e7c0974244ec5564fc52c6495e2b426f59
  Author: KBlumentrath <k.o.blumentrath at gmail.com>
  Date:   2026-07-16 (Thu, 16 Jul 2026)

  Changed paths:
    M gui/wxpython/core/menutree.py
    M gui/wxpython/core/utils.py
    M gui/wxpython/gmodeler/model.py
    M gui/wxpython/gmodeler/panels.py
    M gui/wxpython/image2target/ii2t_gis_set.py
    M gui/wxpython/rlisetup/frame.py
    M man/build.py
    M man/build_rest.py
    M pyproject.toml
    M python/grass/grassdb/manage.py
    M python/grass/gunittest/reporters.py
    M python/grass/pygrass/modules/interface/flag.py
    M python/grass/pygrass/modules/interface/module.py
    M python/grass/pygrass/modules/interface/parameter.py
    M python/grass/pygrass/modules/interface/read.py
    M python/grass/script/core.py
    M scripts/g.extension/g.extension.py
    M scripts/r.in.srtm/r.in.srtm.py

  Log Message:
  -----------
  style: fix ruff rules RUF019 and PTH104 (#7693)

* ruff 019 unnecessary key check

* PTH104 os rename

* checks: Remove fixed rules from ruff ignore list

* python: Add typing for investigated functions and dependent ones


---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>


  Commit: 6dc1110500c3e6eb9a5bb46772fab4214b1be2fd
      https://github.com/OSGeo/grass/commit/6dc1110500c3e6eb9a5bb46772fab4214b1be2fd
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-16 (Thu, 16 Jul 2026)

  Changed paths:
    M AGENTS.md
    M python/grass/temporal/tests/grass_temporal_gui_support_test.py

  Log Message:
  -----------
  grass.temporal: Use an explicit env in the gui_support test session (#7732)

The temporal tests needs separate environment like all the other tests, but env can't be explicitly passes as for the rest of the API, so this uses pytest's monkeypatch to work around that.

The module-scoped fixture created its sessions with gs.setup.init()
without env, which sets the session up in the global os.environ. init()
prepends the GRASS executable paths to PATH on every call and never
removes them again, so PATH kept growing for the rest of the pytest
process, and later tests which copy os.environ inherited it. On Windows
this made r.coin fail on main since #7714 was merged: r.coin runs r.stats
in a subprocess, and supposedly, cmd.exe could no longer resolve it on the inherited
PATH, so r.coin reported an empty table.

Create the sessions with env=os.environ.copy() instead. tgis reads the
session from os.environ, so mirror the second session there with
monkeypatch, which restores the environment once the module is done. This
is what test_project_without_temporal_database in the same file already
does. The ultimate fix is for tgis to accept env, which would remove the
need for the monkey patch.

Additionally, document the rule and the tgis exception in AGENTS.md.

The investigation of the CI failure and this patch were done with the
assistance of Claude Code.


  Commit: afa422114ae67aa02259ef382830b612885cec97
      https://github.com/OSGeo/grass/commit/afa422114ae67aa02259ef382830b612885cec97
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-16 (Thu, 16 Jul 2026)

  Changed paths:
    M .github/workflows/pytest_args_gunittest.txt
    A lib/vector/rtree/tests/lib_vector_rtree_ctypes_test.py
    M python/grass/temporal/Makefile
    A python/grass/temporal/tests/grass_temporal_datetime_math_test.py
    A python/grass/temporal/tests/grass_temporal_granularity_test.py
    A python/grass/temporal/tests/grass_temporal_spatial_extent_test.py
    A python/grass/temporal/tests/grass_temporal_topology_test.py
    R python/grass/temporal/unit_tests.py

  Log Message:
  -----------
  tests: Add pytest coverage for the temporal framework and R-tree bindings (#7728)

Add executed pytest tests for parts of the temporal framework and the
R-tree ctypes bindings that no test in CI covered. The cases build their
datasets in memory, so they need neither a temporal database nor a GRASS
session.

- grass_temporal_datetime_math_test.py: datetime increment by string and
  adjustment of a datetime to a granularity.
- grass_temporal_granularity_test.py: absolute-time granularity of map
  lists of intervals, time points and a mix of both.
- grass_temporal_topology_test.py: the temporal topology builder relations
  (overlaps, overlapped, follows, precedes, contains, during) and the map
  list sorting keys. Following TemporalExtent.overlaps, an interval that
  starts and ends earlier overlaps the later one.
- grass_temporal_spatial_extent_test.py: the 2D and 3D spatial extent
  relations and intersection.
- lib_vector_rtree_ctypes_test.py: the 1D to 4D R-tree search through the
  grass.lib ctypes bindings.

These checks previously existed only in grass.temporal.unit_tests, which
could not be imported and was not run, and in doctests that CI does not
execute.

Prepared with the assistance of AI (Claude Code).


  Commit: 36f3025aebf81700826b98cc65be1006a9db441e
      https://github.com/OSGeo/grass/commit/36f3025aebf81700826b98cc65be1006a9db441e
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-16 (Thu, 16 Jul 2026)

  Changed paths:
    M .github/workflows/cmake.yml
    M CMakeLists.txt
    M cmake/modules/generate_docs.cmake
    M display/CMakeLists.txt
    M doc/CMakeLists.txt
    A doc/development/CMakeLists.txt
    M gui/icons/CMakeLists.txt
    M man/CMakeLists.txt
    M man/build_manpages.py

  Log Message:
  -----------
  CMake: Build the MkDocs documentation site (#7719)

Make the markdown documentation tree complete enough to build the
MkDocs site, and add build-mkdocs and serve-mkdocs targets matching
the Autotools ones (both run mkdocs from PATH and are not part of the
default build).

Copy the site files from man/mkdocs (mkdocs.yml, index and keywords
pages, theme overrides, CSS, logo) into the markdown tree. Add an
MD_ONLY mode to generate_docs for the web-only guides from doc/ and
doc/development/, which have no HTML source and no man page. Exclude
those pages from man page generation with a new --exclude option in
build_manpages.py, derived from the doc/ directories like WEB_ONLY_MD
in man/Makefile. Copy the assets linked from the pages (GUI icons,
color tables, barscale and north arrow thumbnails, grass_logo.txt)
into the markdown tree alongside their existing html copies.

AI assistance (Claude Fable)


  Commit: 9e9262b9510b59d258aa78f648a08a5c659e635b
      https://github.com/OSGeo/grass/commit/9e9262b9510b59d258aa78f648a08a5c659e635b
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M lib/db/dbmi_base/dirent.c

  Log Message:
  -----------
  MSVC: Improve MSVC support (part 3) (#5514)

* define unistd only if unistd.h is not available

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>

* fix msvc broken build (works on gcc)

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>

* msvc: __attribute__ is gcc only

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>

* check for _WIN32 to support msvc and mingw

* msvc: undef min max and use math.h for math constants

Co-authored-by: Rashad Kanavath <mohammedrashadkm at gmail.com>

* msvc: fix warning POINT2D_C already defined

* Remove unneeded comment about GDAL without OGR

* Apply suggestions from code review

---------

Co-authored-by: Rashad Kanavath <mohammedrashadkm at gmail.com>
Co-authored-by: Anna Petrasova <kratochanna at gmail.com>


  Commit: d141869727a74ecdad11dab665ce7d006e6df2dc
      https://github.com/OSGeo/grass/commit/d141869727a74ecdad11dab665ce7d006e6df2dc
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M .github/workflows/macos.yml
    M .github/workflows/osgeo4w.yml

  Log Message:
  -----------
  CI: Change codecov test result upload action on macOS & Windows (#7683)

* CI: Change codecov test result upload action on macOS & windows

The PR #7607 missed to update the action in the macOS and OSGeo4W workflow. This PR makes the change in remaining workflows

* ci(macOS): Skip validation for codecov cli test results upload as unavailable in the current state of the runner; We uninstall homebrew in the workflow


  Commit: c80cbf1f6721ac35724fa5a8a480c5a11c2145eb
      https://github.com/OSGeo/grass/commit/c80cbf1f6721ac35724fa5a8a480c5a11c2145eb
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M lib/gmath/lu.c
    M raster/CMakeLists.txt
    M raster/r.param.scale/Makefile
    A raster/r.param.scale/benchmark/benchmark_r_param_scale_nprocs.py
    M raster/r.param.scale/close_down.c
    M raster/r.param.scale/find_normal.c
    M raster/r.param.scale/interface.c
    M raster/r.param.scale/main.c
    M raster/r.param.scale/open_files.c
    M raster/r.param.scale/param.h
    M raster/r.param.scale/process.c
    M raster/r.param.scale/r.param.scale.md
    M raster/r.param.scale/tests/r_param_scale_test.py

  Log Message:
  -----------
  r.param.scale: parallelize with OpenMP (#7440)

Instead of giving each thread a strip with the whole map, there's now an outer loop over a band of rows, and the work inside each band is split across the threads. Each thread keeps a small ring buffer of wsize rows and rotates it as it goes, reading a new row from disk per output row. So, a thread's input memory only depends on the window height, not the size of the map.

Memory is now limited by the usual memory= option, which sets how many rows are
in a band. A single shared output buffer for the band replaces each row having an allocation and row pointer arrays for the whole map. 

I also reworked find_obs() to precompute the window coordinates once and reuse
w*z across the six weighted sums. This does less floating-point work per cell and
the output is bit-identical to before.
---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>
Co-authored-by: Anna Petrasova <kratochanna at gmail.com>
Co-authored-by: Nicklas Larsson <n_larsson at yahoo.com>


  Commit: d6c75ad8e5e4c89cf400818669bbdaf263571ccd
      https://github.com/OSGeo/grass/commit/d6c75ad8e5e4c89cf400818669bbdaf263571ccd
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M .editorconfig
    M .pre-commit-config.yaml
    M CMakeLists.txt
    M GRASSConfig.cmake.in
    M cmake/ctypesgen.cmake
    M cmake/find_scripts/CMakeLists.txt
    M cmake/find_scripts/FindCBLAS.cmake
    M cmake/find_scripts/FindCairo.cmake
    M cmake/find_scripts/FindFFTW-egpbos.cmake
    M cmake/find_scripts/FindFFTW-eigen.cmake
    M cmake/find_scripts/FindFFTW.cmake
    M cmake/find_scripts/FindGEOS.cmake
    M cmake/find_scripts/FindLAPACKE.cmake
    M cmake/find_scripts/FindLibLAS.cmake
    M cmake/find_scripts/FindLibSVM.cmake
    M cmake/find_scripts/FindMySQL.cmake
    M cmake/find_scripts/FindNetCDF.cmake
    M cmake/find_scripts/FindPCRE.cmake
    M cmake/find_scripts/FindPROJ.cmake
    M cmake/find_scripts/FindReadline.cmake
    M cmake/find_scripts/Findzstd.cmake
    M cmake/locale_strings.cmake
    M cmake/modules/CMakeLists.txt
    M cmake/modules/CheckDependentLibraries.cmake
    M cmake/modules/Configure.cmake
    M cmake/modules/DevelUtils.cmake
    M cmake/modules/GRASSInstallDirs.cmake
    M cmake/modules/build_addon.cmake
    M cmake/modules/build_gui_in_subdir.cmake
    M cmake/modules/build_library_in_subdir.cmake
    M cmake/modules/build_module.cmake
    M cmake/modules/build_program.cmake
    M cmake/modules/build_program_in_subdir.cmake
    M cmake/modules/build_script_in_subdir.cmake
    M cmake/modules/check_target.cmake
    M cmake/modules/copy_python_files_in_subdir.cmake
    M cmake/modules/generate_docs.cmake
    M cmake/modules/get_host_arch.cmake
    M cmake/modules/get_versions.cmake
    M cmake/modules/linker.cmake
    M cmake/modules/repo_status.cmake
    M cmake/modules/set_compiler_flags.cmake
    A cmake/stubs/build_library_in_subdir_stub.cmake
    A cmake/stubs/build_program_in_subdir_stub.cmake
    A cmake/stubs/build_program_stub.cmake
    M db/CMakeLists.txt
    M db/drivers/CMakeLists.txt
    M demolocation/CMakeLists.txt
    M display/CMakeLists.txt
    M doc/CMakeLists.txt
    M doc/development/CMakeLists.txt
    M general/CMakeLists.txt
    M general/manage/lister/CMakeLists.txt
    M gui/CMakeLists.txt
    M gui/icons/CMakeLists.txt
    M gui/images/CMakeLists.txt
    M gui/scripts/CMakeLists.txt
    M gui/wxpython/CMakeLists.txt
    M gui/wxpython/docs/CMakeLists.txt
    M imagery/CMakeLists.txt
    M imagery/i.ortho.photo/CMakeLists.txt
    M include/CMakeLists.txt
    M lib/CMakeLists.txt
    M lib/db/CMakeLists.txt
    M lib/db/sqlp/CMakeLists.txt
    M lib/fonts/CMakeLists.txt
    M lib/gis/CMakeLists.txt
    M lib/init/CMakeLists.txt
    M lib/proj/CMakeLists.txt
    M lib/rst/CMakeLists.txt
    M lib/temporal/CMakeLists.txt
    M lib/vector/CMakeLists.txt
    M lib/vector/dglib/CMakeLists.txt
    M lib/vector/diglib/CMakeLists.txt
    M locale/CMakeLists.txt
    M man/CMakeLists.txt
    M misc/CMakeLists.txt
    M ps/CMakeLists.txt
    M python/grass/CMakeLists.txt
    R python/grass/pygrass/CMakeLists.txt
    M python/libgrass_interface_generator/CMakeLists.txt
    M raster/CMakeLists.txt
    M raster/r.colors.out/CMakeLists.txt
    M raster/r.colors/CMakeLists.txt
    M raster/r.li/CMakeLists.txt
    M raster/r.mapcalc/CMakeLists.txt
    M raster/r.sim/CMakeLists.txt
    M raster/r.spread/CMakeLists.txt
    M raster/r.univar/CMakeLists.txt
    M raster/r.watershed/CMakeLists.txt
    M raster3d/CMakeLists.txt
    M raster3d/r3.flow/CMakeLists.txt
    M scripts/CMakeLists.txt
    M scripts/g.extension/testsuite/data/sample_modules/r.plus.example/CMakeLists.txt
    M temporal/CMakeLists.txt
    M utils/CMakeLists.txt
    M vector/CMakeLists.txt
    M vector/v.lrs/CMakeLists.txt

  Log Message:
  -----------
  Checks: Add Gersemi to format cmake files in pre-commit (#7696)

* Checks: Add Gersemi to format cmake files in pre-commit

* CMake: Remove file python/grass/pygrass/CMakeLists.txt as unused per issue https://github.com/OSGeo/grass/issues/7686

[Bug] Where are CMake functions `build_pymodule_in_subdir` and `copy_python_file` defined?
Fixes #7686

* Define indentation for cmake files in .editorconfig to match gersemi's defaults

* checks: Create cmake stubs containing definitions for gersemi-unrecognized functions or macros

* cmake: Ignore one duplicated `_test_package` definition in FindLAPACKE.cmake/FindCBLAS.cmake

* cmake: Add more gersemi hints to indicate how to treat specific multi-value arguments

* cmake: Format all cmake files


  Commit: c77cf203fb82ce4871590e7b07bacaa3b268ff5e
      https://github.com/OSGeo/grass/commit/c77cf203fb82ce4871590e7b07bacaa3b268ff5e
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M vector/v.proj/main.c
    A vector/v.proj/tests/v_proj_wind_override_test.py

  Log Message:
  -----------
  v.proj: Seed region from default window to ignore region override (#7578)

When v.proj switches into the source project to read the input vector, it seeded its working region with G_get_window(), which honors WIND_OVERRIDE and GRASS_REGION. WIND_OVERRIDE names a region in the caller's mapset, not in the source project, so the read failed with "Unable to open element file" whenever v.proj ran under a named temporary region (e.g. inside RegionManager, use_temp_region(), or parallel pipelines). Using GRASS_REGION would also be wrong.

Read the source project's default window instead. The seed value is overwritten field by field from the input vector's extent immediately afterward, so seeding from the default window is sufficient and does not consult the override. G_unset_window() is dropped since it only existed to defeat G_get_window()'s cache.

Adds a regression test that runs v.proj with WIND_OVERRIDE naming a region present only in the target mapset.


  Commit: cb04122c70d15fa2b397ff93b36bc5f30525b587
      https://github.com/OSGeo/grass/commit/cb04122c70d15fa2b397ff93b36bc5f30525b587
  Author: Rajveer* <irajveer.bishnoi2310 at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    A raster/r.cross/tests/test_r_cross.py
    R raster/r.cross/testsuite/test_cross.py

  Log Message:
  -----------
  r.cross: migrate tests from gunittest to pytest (#7635)

* r.cross: migrate tests from gunittest to pytest

Replace the gunittest testsuite with a pytest module covering the same
behavior: the basic cross product (categories 0..8, no NULLs) and the -z
flag case (NULL combinations dropped, categories 0..5, output has NULLs).
It uses a tmp_path session fixture with synthetic 3x3 rasters and the
grass.tools API.

* Overwrite is not needed, use Tools everywhere

Co-authored-by: Vaclav Petras <wenzeslaus at gmail.com>

---------

Co-authored-by: Vaclav Petras <wenzeslaus at gmail.com>


  Commit: f778540e31a1ef6b05e5ff2b6efd55e82fa11e11
      https://github.com/OSGeo/grass/commit/f778540e31a1ef6b05e5ff2b6efd55e82fa11e11
  Author: Christian Braun <christian.braun1980 at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M gui/wxpython/lmgr/layertree.py

  Log Message:
  -----------
  wxGUI: fix orphaned drag image windows when dragging layers in layer tree on macOS (#7725)


  Commit: 7b7710694b1d2a250a78a4b0ea94ed7828dcf880
      https://github.com/OSGeo/grass/commit/7b7710694b1d2a250a78a4b0ea94ed7828dcf880
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M python/grass/gunittest/runner.py
    M python/grass/imaging/images2avi.py
    M python/grass/pydispatch/dispatcher.py
    M python/grass/pygrass/raster/abstract.py
    M python/grass/pygrass/vector/geometry.py
    M python/grass/temporal/core.py
    M python/grass/tools/session_tools.py

  Log Message:
  -----------
  docs: Fix reStructuredText markup in Python docstrings (#7741)

The Sphinx build of the Python API documentation reports docutils
warnings and errors for docstrings with invalid reStructuredText, and
the affected docstrings also render badly. Fix the markup without
changing the documented content:

- grass.pydispatch.dispatcher: mark the two attribute listings as
  literal blocks, so that their plain-text layout is preserved instead
  of being misparsed as definition lists and block quotes.
- grass.pygrass.raster.abstract: drop the literal block marker in front
  of the doctest example of Info, so that the example is parsed as a
  doctest block. The expected output lines are not prefixed with ">>>",
  which made the quoting of the literal block inconsistent.
- grass.pygrass.vector.geometry: turn the parameter descriptions of the
  Node constructor into an actual field list.
- grass.gunittest.runner, grass.pygrass.vector.geometry,
  grass.tools.session_tools: escape or quote the asterisks so that
  "**kwargs" is not parsed as the start of inline strong markup.
- grass.imaging.images2avi: indent the continuation line of the bg_task
  field body, so that the field list is not cut short.
- grass.temporal.core: indent the content of the warning directive in
  init(), so that the directive is not empty.

This brings the number of warnings and errors reported by the Sphinx
build down from 42 to 19. Each fixed docstring is reported twice because
the subpackages are currently documented under two names.

The fixes were prepared with the help of Claude Code (AI) and verified
against the rendered HTML pages.


  Commit: b6b18bde311b233357040d169ddc40a10f1a961a
      https://github.com/OSGeo/grass/commit/b6b18bde311b233357040d169ddc40a10f1a961a
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M lib/proj/do_proj.c
    A vector/v.proj/tests/conftest.py
    A vector/v.proj/tests/v_proj_test.py

  Log Message:
  -----------
  v.proj: fix reprojection with smax=0 from latlon (#7730)

Bug: v.proj with smax=0 (densification disabled) on lines or boundaries with more than one vertex, coming from a lat/lon source project — only the first vertex was projected correctly, the rest came out as garbage.


  Commit: 0b25cf0163752bd655dc78422ff5de047d4620ba
      https://github.com/OSGeo/grass/commit/0b25cf0163752bd655dc78422ff5de047d4620ba
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M .gitignore
    M doc/examples/notebooks/parallelization_tutorial.ipynb
    M doc/grass_projects.md
    M doc/python_intro.md
    M python/grass/docs/Makefile
    M python/grass/docs/conf.py
    M python/grass/docs/src/gunittest_testing.rst
    M python/grass/docs/src/index.rst
    M python/grass/docs/src/pygrass_gis.rst
    M python/grass/docs/src/pygrass_index.rst
    M python/grass/docs/src/pygrass_messages.rst
    M python/grass/docs/src/pygrass_modules.rst
    M python/grass/docs/src/pygrass_raster.rst
    M python/grass/docs/src/pygrass_vector.rst
    M python/grass/docs/src/script_intro.rst
    M python/grass/docs/src/temporal_framework.rst

  Log Message:
  -----------
  docs: Generate libpython API docs only under the grass namespace (#7740)

The Sphinx build of the Python library documented every subpackage
twice: once under a stripped namespace (pygrass, script, temporal, ...)
and once under the full, preferred one (grass.pygrass, grass.script,
...). Keep only the grass.* pages.

Drop the seven per-subpackage sphinx-apidoc runs and the sys.path
entries in conf.py that made the modules importable under their stripped
names, and point the handwritten pages, the theme navigation and the
links in doc/ at the grass.* pages and modules.

This removes 22 of the 42 Sphinx warnings. All ten "more than one target
found for cross-reference" warnings (Table, GrassTestFilesMultiReporter)
are gone, since they were caused purely by the duplicate generation, as
are the docstring warnings which were reported once per spelling.

The three remaining "duplicate object description" warnings (Module,
MultiModule, ParallelModuleQueue) are not caused by the stripped
namespace: grass.pygrass.modules re-exports these classes, so autodoc
documents them both on the package page and on the page of the module
defining them. They are left for a separate change.

This change was prepared with the assistance of Claude Code.


  Commit: bcca890878070c434e8cb93433d0c597bbf7e9e9
      https://github.com/OSGeo/grass/commit/bcca890878070c434e8cb93433d0c597bbf7e9e9
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M gui/wxpython/animation/data.py
    M gui/wxpython/animation/nviztask.py
    M gui/wxpython/core/settings.py
    M gui/wxpython/core/utils.py
    M gui/wxpython/dbmgr/base.py
    M gui/wxpython/gmodeler/model.py
    M gui/wxpython/gui_core/forms.py
    M gui/wxpython/gui_core/toolbars.py
    M gui/wxpython/mapdisp/main.py
    M gui/wxpython/rdigit/controller.py
    M gui/wxpython/wxgui.py
    M pyproject.toml
    M python/grass/gunittest/case.py
    M python/grass/imaging/images2avi.py
    M python/grass/pydispatch/dispatcher.py
    M python/grass/pygrass/raster/category.py
    M python/grass/pygrass/rpc/base.py
    M python/grass/pygrass/vector/table.py
    M python/grass/script/core.py
    M python/grass/script/task.py
    M python/grass/script/utils.py
    M python/grass/script/vector.py
    M python/grass/semantic_label/reader.py
    M python/grass/utils/download.py
    M scripts/r.in.wms/wms_cap_parsers.py

  Log Message:
  -----------
  style: Fix raise-without-from-inside-except (B904) (#4032)

Enable the ruff B904 rule and add explicit exception chaining to raise
statements inside except clauses.

Most exceptions are chained with "from error" to preserve the original,
including where the original is also passed into the message of the new
exception, so the detail is both in the message and in the chained traceback;
reducing that duplication is left for later. "from None" is used where the
original would be noise: where it is an implementation detail of the raising
code (for example, IndexError becoming StopIteration) or where the new
exception gives a clearer replacement message (for example, an invalid value
for a database column). In wxGUI, the original error is passed into the new
exception and "from None" is used; that exception is caught immediately and
only its message is shown, so no traceback is produced.

The change covers wxGUI, grass.script, grass.pygrass, grass.gunittest,
grass.imaging, grass.pydispatch, grass.semantic_label, grass.utils, and
r.in.wms.

Related bug fixes included:

* rdigit: "raise ScriptError" raised the class, not an instance. ScriptError
  requires a message argument, so this raised TypeError instead, which the
  callers' "except ScriptError" handlers did not catch. A failing r.mapcalc
  or g.copy resulted in a traceback instead of showing an error message. The
  message of the module error is now passed to ScriptError.
* wxGUI toolbars: Remove an unreachable return statement after a raise.
* wxGUI utils: Remove a dead try-except in __ll_parts which could not be
  reached and only re-raised an empty ValueError.


  Commit: 740266b459adf86f4e5154e10394f7702f402d36
      https://github.com/OSGeo/grass/commit/740266b459adf86f4e5154e10394f7702f402d36
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M scripts/g.extension/g.extension.py

  Log Message:
  -----------
  g.extension: Skip official repo query when installing from other sources (#7746)

Updating metadata after install consulted the official grass-addons
repository (git ls-remote and a clone) to identify multi-addon
overview pages, even when installing from a local directory, so
installs failed without internet access.


  Commit: 4c0c6b7f174d6b786a5dd07f843e2ca18c943e20
      https://github.com/OSGeo/grass/commit/4c0c6b7f174d6b786a5dd07f843e2ca18c943e20
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M .github/workflows/create_release_draft.yml

  Log Message:
  -----------
  CI: Replace softprops/action-gh-release with `gh release create` (#7745)

* CI: Replace softprops/action-gh-release with `gh release create`

gh cli is already on the runner. This also solves an issue surfaced by a new version of zizmor, noting that using actions like these when another tool already doing the same functionality is increasing the attack surface uselessly.

* style: Quote shell variables

* CI: `gh release create` allows using `--prerelease=true` and `--prerelease=false` as tested locally


  Commit: f53f2b4f4887cfe90c16297d98c12ec8a98cb619
      https://github.com/OSGeo/grass/commit/f53f2b4f4887cfe90c16297d98c12ec8a98cb619
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M .pre-commit-config.yaml

  Log Message:
  -----------
  CI(deps): Update pre-commit hook zizmorcore/zizmor-pre-commit to v1.27.0 (main) (#7253)

CI(deps): Update pre-commit hook zizmorcore/zizmor-pre-commit to v1.27.0

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: b1701e510f71f2bffb0e4773d1430df9868a5883
      https://github.com/OSGeo/grass/commit/b1701e510f71f2bffb0e4773d1430df9868a5883
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M python/grass/temporal/stds_import.py
    M temporal/t.rast.import/t.rast.import.py
    R temporal/t.rast.import/test.t.rast.import.relative.sh
    R temporal/t.rast.import/test.t.rast.import.relative.with.semantic.label.sh
    R temporal/t.rast.import/test.t.rast.import.sh
    R temporal/t.rast.import/test.t.rast.import_locations.sh
    A temporal/t.rast.import/tests/conftest.py
    A temporal/t.rast.import/tests/data/precip_2000.tar.bzip2
    A temporal/t.rast.import/tests/t_rast_import_test.py
    R temporal/t.rast.import/testsuite/data/precip_2000.tar.bzip2
    R temporal/t.rast.import/testsuite/test_temporal_rast_import.py
    A temporal/t.vect.import/tests/conftest.py
    A temporal/t.vect.import/tests/t_vect_import_test.py
    R temporal/t.vect.import/testsuite/test.t.vect.import.sh

  Log Message:
  -----------
  t.rast.import: use platform-indendent tempdir default (#7742)

* use .tmp in mapset as default tempdir (gs.tempdir())

* replace shell script tests with pytest

* style: Address issues in python/grass/temporal/stds_import.py

---------

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>


  Commit: c4d0dfd1be3a65480bfe8919856e48e313cc4c46
      https://github.com/OSGeo/grass/commit/c4d0dfd1be3a65480bfe8919856e48e313cc4c46
  Author: Linda Karlovska <49241681+lindakarlovska at users.noreply.github.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M python/grass/script/raster.py
    M python/grass/script/tests/grass_script_raster_region_test.py

  Log Message:
  -----------
  grass.script: RegionManager/RegionManagerEnv: Add support for storing current region under a persistent name (#7599)

* new save() method that stores the current region under a persistent name, allowing it to be reused after the context exits.

Co-authored-by: Anna Petrasova <kratochanna at gmail.com>


  Commit: e37a2aaa37e7afa281b4e8cb50be8e48b2184f3f
      https://github.com/OSGeo/grass/commit/e37a2aaa37e7afa281b4e8cb50be8e48b2184f3f
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-07-18 (Sat, 18 Jul 2026)

  Changed paths:
    M gui/wxpython/core/watchdog.py

  Log Message:
  -----------
  wxGUI: Share watchdog Observer to fix FSEvents RuntimeError (#7677)


  Commit: 9912224bc88d2f1125fb525bfbe39a5bb90283f5
      https://github.com/OSGeo/grass/commit/9912224bc88d2f1125fb525bfbe39a5bb90283f5
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-18 (Sat, 18 Jul 2026)

  Changed paths:
    M gui/wxpython/lmgr/layertree.py

  Log Message:
  -----------
  gui: Remove shadowing of `type()` and typo in class attribute (#7753)

AI autofixes, completed and vetted by me afterwards.

- Typo `self.centreFromsOnParent` -> `self.centreFormsOnParent` (+ extra missed instances were renamed)
- Shadowing of built in function type() -> Rename local variables inside file

These were made during the week but were not filed in a PR yet.

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Additionnal "centreFromsOnParent" -> "centreFormsOnParent"

* More changes to inner variable shadowing "type()" function

* Revert some uncertain changes

* Apply suggestions from code review

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>

* Update gui/wxpython/lmgr/layertree.py

---------

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>


  Commit: 8d7d3316c40fe259fa66a959ade7bc3afd6a4235
      https://github.com/OSGeo/grass/commit/8d7d3316c40fe259fa66a959ade7bc3afd6a4235
  Author: Rajveer* <irajveer.bishnoi2310 at gmail.com>
  Date:   2026-07-18 (Sat, 18 Jul 2026)

  Changed paths:
    M scripts/i.spectral/i.spectral.py
    A scripts/i.spectral/tests/i_spectral_test.py

  Log Message:
  -----------
  i.spectral: fix text output to write band values (#7488)

write2textf iterated with 'for row in enumerate(what)', binding row to the (index, row) tuple, so the -t text output wrote a Python tuple repr (a redundant index plus the easting/northing/label columns) instead of the band values. Unpack the index and write row[3:], matching draw_gnuplot and draw_linegraph, via writelines.

Add a regression test for the -t output.


  Commit: 5394d8e206745b2d9530d9c4bd9940c657cac628
      https://github.com/OSGeo/grass/commit/5394d8e206745b2d9530d9c4bd9940c657cac628
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-07-18 (Sat, 18 Jul 2026)

  Changed paths:
    M .github/workflows/documentation.yml

  Log Message:
  -----------
  CI: Fix inverted condition disabling ccache and mold in doc builds (#7755)

Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>


  Commit: 4f5ca7b89ad57f0b7260f0f223026e757e3e8e91
      https://github.com/OSGeo/grass/commit/4f5ca7b89ad57f0b7260f0f223026e757e3e8e91
  Author: Paulo van Breugel <paulo at ecodiv.earth>
  Date:   2026-07-18 (Sat, 18 Jul 2026)

  Changed paths:
    M gui/wxpython/core/gconsole.py

  Log Message:
  -----------
  gui: fix exception in gconsole.py (#6903)


  Commit: f4e55d1415dcf5b659c40de91633df14437a7273
      https://github.com/OSGeo/grass/commit/f4e55d1415dcf5b659c40de91633df14437a7273
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-07-18 (Sat, 18 Jul 2026)

  Changed paths:
    M locale/po/grasslibs_fr.po
    M locale/po/grassmods_fr.po
    M locale/po/grasswxpy_fr.po

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#7758)

Translated using Weblate (French)

Currently translated at 36.7% (3707 of 10100 strings)

Translated using Weblate (French)

Currently translated at 98.2% (1821 of 1854 strings)

Translated using Weblate (French)

Currently translated at 36.6% (3706 of 10100 strings)

Translated using Weblate (French)

Currently translated at 96.4% (3197 of 3314 strings)

Translated using Weblate (French)

Currently translated at 98.2% (1821 of 1854 strings)



Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/fr/
Translation: GRASS/grasslibs
Translation: GRASS/grassmods
Translation: GRASS/grasswxpy

Co-authored-by: Weblate <noreply at weblate.org>
Co-authored-by: Edouard Choiniere <echoix at users.noreply.weblate.osgeo.org>


  Commit: 0e625c9cdf1265cdb4c82f1b6b077af1f739606f
      https://github.com/OSGeo/grass/commit/0e625c9cdf1265cdb4c82f1b6b077af1f739606f
  Author: Edouard Choinière <27212526+echoix at users.noreply.github.com>
  Date:   2026-07-18 (Sat, 18 Jul 2026)

  Changed paths:
    M python/grass/gunittest/reporters.py

  Log Message:
  -----------
  grass.gunittest: Fix html reporter output (#7754)

* Apply suggested fix to python/grass/gunittest/reporters.py from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

* Apply suggested fix to python/grass/gunittest/reporters.py from Copilot Autofix

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>


  Commit: 608efca1852fda54fae071a7a740de24f340e693
      https://github.com/OSGeo/grass/commit/608efca1852fda54fae071a7a740de24f340e693
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-07-19 (Sun, 19 Jul 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (114) (#7761)

locale: Update translation files

Co-authored-by: echoix <27212526+echoix at users.noreply.github.com>


  Commit: a12020a5025cd59437b5ea829a8330691654323e
      https://github.com/OSGeo/grass/commit/a12020a5025cd59437b5ea829a8330691654323e
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-23 (Thu, 23 Jul 2026)

  Changed paths:
    M .github/workflows/documentation.yml

  Log Message:
  -----------
  CI: Increase documentation workflow artifact to from 3 to 15 days (#7767)


  Commit: 0c9de213ecdb68b41d522c2bbb285736c3aad502
      https://github.com/OSGeo/grass/commit/0c9de213ecdb68b41d522c2bbb285736c3aad502
  Author: Markus Neteler <neteler at osgeo.org>
  Date:   2026-07-24 (Fri, 24 Jul 2026)

  Changed paths:
    M docker/testdata/test_grass_session.py

  Log Message:
  -----------
  docker: update grass-session test to use tools (#7768)


  Commit: 651992d3fa85bbd36a6ca5e7f08515a4086a37ef
      https://github.com/OSGeo/grass/commit/651992d3fa85bbd36a6ca5e7f08515a4086a37ef
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-07-24 (Fri, 24 Jul 2026)

  Changed paths:
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    M locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    M locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    M locale/po/grasswxpy_zh_Hant.po

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#7770)


  Commit: 67a183c537009b0e4ec03e899d7162fa2e5b0406
      https://github.com/OSGeo/grass/commit/67a183c537009b0e4ec03e899d7162fa2e5b0406
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-24 (Fri, 24 Jul 2026)

  Changed paths:
    M .github/workflows/documentation.yml
    M python/grass/docs/conf.py
    M utils/merge_sitemaps.py
    A utils/test_merge_sitemaps.py

  Log Message:
  -----------
  docs: Fix libpython Sphinx canonical and sitemap version (#5935) (#7760)

* docs: Fix libpython canonical and sitemap URLs (#5935)

conf.py set html_baseurl twice. The second assignment (the bare domain root,
added for sphinx-sitemap) overwrote the canonical base, so every libpython page
emitted a bare-root canonical, and the sitemap scheme injected the full dev
version (grass8.6.0dev), producing 404 URLs.

Use a single html_baseurl built from the short numbered prefix
(https://grass.osgeo.org/grass<MAJOR><MINOR>/manuals/libpython/) and set the
sitemap scheme to "{link}", so canonical and sitemap URLs are identical and
resolve to the published grass86 tree.

Make merge_sitemaps.py preserve each source sitemap's URLs by default (the
--version rewrite is now opt-in) and drop the --version override in
documentation.yml, so the merged manuals sitemap keeps grass-stable manuals and
grass86 libpython URLs. Add a unit test for check_url_version.

Drafted with AI assistance.

* docs: Use grass-stable canonical for libpython to match core manuals

Per review feedback (OSGeo/grass#7760): keep the stable manuals tree as the
absolute canonical base instead of the numbered grassMAJORMINOR tree. This
matches the MkDocs core manuals (site_url = .../grass-stable/manuals/) so the
merged sitemap is uniformly grass-stable, and leaves dev-URL rewriting to CI.


  Commit: 0163d24d64b3421409a4abd254da0361522c593c
      https://github.com/OSGeo/grass/commit/0163d24d64b3421409a4abd254da0361522c593c
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-25 (Sat, 25 Jul 2026)

  Changed paths:
    M .github/workflows/documentation.yml
    M man/Makefile
    M man/mkdocs/mkdocs.yml
    A man/mkdocs/overrides/main.html
    M python/grass/docs/_templates/layout.html.template
    M python/grass/docs/conf.py

  Log Message:
  -----------
  docs: noindex development manuals so they defer to grass-stable (#7772)

* docs: noindex development manuals so they defer to grass-stable

Dev builds (VERSION micro ends in 'dev') publish under grass-devel/grass86 with
pages near-identical to grass-stable. They all canonicalize to grass-stable
(see #5935), but dev-only pages have no stable equivalent to canonicalize to, so
canonical alone can leave them indexed. Emit 'noindex, follow' on dev builds for
both generators:

- MkDocs: new overrides/main.html gated on extra.noindex, fed by GRASS_DOCS_NOINDEX
  which documentation.yml sets to true when MICRO ends in 'dev'.
- Sphinx: conf.py sets grass_noindex from the version and passes it via html_context
  to layout.html.template.

Stable and release builds leave the flag off and stay indexable.

* docs: fix MkDocs noindex flag on dev builds

mkdocs !ENV coerces the value to a boolean, so the == "true" test never matched.

* man: install mkdocs overrides/main.html into the docs dir

The build copies mkdocs files individually, so the new override was missing
from MKDOCS_DIR and dev pages got no noindex.


  Commit: 61a01ad9c6c1583d64743ed0405513c4e82fce05
      https://github.com/OSGeo/grass/commit/61a01ad9c6c1583d64743ed0405513c4e82fce05
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-07-25 (Sat, 25 Jul 2026)

  Changed paths:
    M man/mkdocs/requirements.txt

  Log Message:
  -----------
  CI(deps): Update dependency pymdown-extensions to v11 [SECURITY] (main) (#7774)

CI(deps): Update dependency pymdown-extensions to v11 [SECURITY]

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: 7050369433b0a954f3a1420b24517d641f462a05
      https://github.com/OSGeo/grass/commit/7050369433b0a954f3a1420b24517d641f462a05
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-07-25 (Sat, 25 Jul 2026)

  Changed paths:
    M lib/proj/do_proj.c

  Log Message:
  -----------
  lib/proj: fix data race on METERS_in/METERS_out in coordinate transform functions (#7764)

lib/proj: make METERS_in and METERS_out local to fix a data race

The file-scope variables METERS_in and METERS_out were written on every
call to GPJ_transform, GPJ_transform_array, pj_do_proj, and
pj_do_transform. When GPJ_transform is called from multiple threads,
ThreadSanitizer reports data races on both variables even when each
thread uses its own cloned PJ object.

Each function writes both variables before reading them, so they carry
no state between calls. This change makes them locals of the four
functions and removes the file-scope declaration. Output is unchanged.


  Commit: f040304d608f984188b1b564e1389b8aa8ed93ef
      https://github.com/OSGeo/grass/commit/f040304d608f984188b1b564e1389b8aa8ed93ef
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-07-25 (Sat, 25 Jul 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (116) (#7779)

locale: Update translation files

Co-authored-by: echoix <27212526+echoix at users.noreply.github.com>


  Commit: 8ff9ef6a73e5034a4311688cf58293065e1a2592
      https://github.com/OSGeo/grass/commit/8ff9ef6a73e5034a4311688cf58293065e1a2592
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-26 (Sun, 26 Jul 2026)

  Changed paths:
    M .github/workflows/documentation.yml

  Log Message:
  -----------
  CI: drop redundant libpython sitemap after the manuals merge (#7781)

CI: drop libpython sitemap after merging into the manuals sitemap

Its URLs are already in the merged sitemap; remove it so each URL is listed once.


  Commit: 94f43aea91a3cfcb180a8807a7a1bf5f8fa7bec8
      https://github.com/OSGeo/grass/commit/94f43aea91a3cfcb180a8807a7a1bf5f8fa7bec8
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-27 (Mon, 27 Jul 2026)

  Changed paths:
    M .github/workflows/documentation.yml
    M python/grass/docs/conf.py

  Log Message:
  -----------
  docs: fix logic for applying noindex to manuals (#7782)


  Commit: acb695ecf50887eaeb8f4f5d2cf57fea0f801ad8
      https://github.com/OSGeo/grass/commit/acb695ecf50887eaeb8f4f5d2cf57fea0f801ad8
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-07-28 (Tue, 28 Jul 2026)

  Changed paths:
    M raster/r.geomorphon/main.c

  Log Message:
  -----------
  r.geomorphon: check region rows against search radius before reading (#7773)

When the region has fewer rows than the search radius needs, the module fails without saying why. It just gives a confusing library message about the symptom, not the cause. This small PR adds an early check with an error message that tells the user their search value needs more rows than the region has, and what the minimum is.


  Commit: a3f62a394dc496936979cfd244d8df013ebd3dbe
      https://github.com/OSGeo/grass/commit/a3f62a394dc496936979cfd244d8df013ebd3dbe
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-07-29 (Wed, 29 Jul 2026)

  Changed paths:
    M python/grass/docs/conf.py

  Log Message:
  -----------
  docs: add lastmod to libpython sitemap entries (#7786)

* docs: add lastmod to libpython sitemap entries

Set sitemap_show_lastmod so sphinx-sitemap emits <lastmod> from git dates.

* docs: drop viewcode source pages and py-modindex from the sitemap

Low search value and no datable source; they stay reachable via the API pages.

* Added hook to give apidocs accurate per-module dates

* Bandit issue 'Starting a process with a partial executable path #1131'


  Commit: f92ca42ed5b8e5e67f3c66c71a21bb240da4e229
      https://github.com/OSGeo/grass/commit/f92ca42ed5b8e5e67f3c66c71a21bb240da4e229
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-08-01 (Sat, 01 Aug 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml
    M .github/workflows/cmake.yml
    M .github/workflows/codeql-analysis.yml
    M .github/workflows/coverity.yml
    M .github/workflows/create_release_draft.yml
    M .github/workflows/docker.yml
    M .github/workflows/documentation.yml
    M .github/workflows/gcc.yml
    M .github/workflows/macos.yml
    M .github/workflows/macos_distribute_app.yml
    M .github/workflows/osgeo4w.yml
    M .github/workflows/periodic_update.yml
    M .github/workflows/pytest.yml
    M .github/workflows/python-code-quality.yml
    M .github/workflows/super-linter.yml
    M .github/workflows/test-nix.yml
    M .github/workflows/titles.yml
    M .github/workflows/ubuntu.yml

  Log Message:
  -----------
  CI(deps): Update actions/checkout action to v7.0.1 (main) (#7794)

CI(deps): Update actions/checkout action to v7.0.1

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: 25eb6cf43f26bf6ffa50d6e59cc75bcce9416c30
      https://github.com/OSGeo/grass/commit/25eb6cf43f26bf6ffa50d6e59cc75bcce9416c30
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-08-01 (Sat, 01 Aug 2026)

  Changed paths:
    M Dockerfile
    M docker/ubuntu/Dockerfile

  Log Message:
  -----------
  CI(deps): Update ubuntu:24.04 Docker digest to 4fbb8e6 (main) (#7793)

CI(deps): Update ubuntu:24.04 Docker digest to 4fbb8e6

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>


  Commit: 4a165a59bed66d3a9510eb45f5b1dd5bbda916f0
      https://github.com/OSGeo/grass/commit/4a165a59bed66d3a9510eb45f5b1dd5bbda916f0
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-08-01 (Sat, 01 Aug 2026)

  Changed paths:
    M Dockerfile
    M docker/ubuntu/Dockerfile

  Log Message:
  -----------
  CI(deps): Update dependency OSGeo/gdal to v3.13.2 (main) (#7796)


  Commit: 365d9acf6e904ea0f639f717972c2b1244d8f79f
      https://github.com/OSGeo/grass/commit/365d9acf6e904ea0f639f717972c2b1244d8f79f
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-08-01 (Sat, 01 Aug 2026)

  Changed paths:
    M man/mkdocs/requirements.txt

  Log Message:
  -----------
  CI(deps): Update dependency mkdocs-material to v9.7.7 (main) (#7795)


  Commit: b152bfd74edc406e9d36c5426130efa4b97b672e
      https://github.com/OSGeo/grass/commit/b152bfd74edc406e9d36c5426130efa4b97b672e
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-08-01 (Sat, 01 Aug 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (117) (#7797)


  Commit: 90b1efabec0276be79ef251e84a0966da9be07b5
      https://github.com/OSGeo/grass/commit/90b1efabec0276be79ef251e84a0966da9be07b5
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-08-01 (Sat, 01 Aug 2026)

  Changed paths:
    M docker/debian/Dockerfile

  Log Message:
  -----------
  CI(deps): Update debian Docker tag to v13.6 (main) (#7800)


  Commit: 45e081e1806da56148db74c6eabeda25ed41c732
      https://github.com/OSGeo/grass/commit/45e081e1806da56148db74c6eabeda25ed41c732
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-08-01 (Sat, 01 Aug 2026)

  Changed paths:
    M .github/workflows/additional_checks.yml
    M .github/workflows/codeql-analysis.yml
    M .github/workflows/create_release_draft.yml
    M .github/workflows/documentation.yml
    M .github/workflows/pytest.yml
    M .github/workflows/python-code-quality.yml

  Log Message:
  -----------
  CI(deps): Update actions/setup-python action to v7 (main) (#7801)


  Commit: 28e384229dc2527a7ea4b04c78d4004ef0401388
      https://github.com/OSGeo/grass/commit/28e384229dc2527a7ea4b04c78d4004ef0401388
  Author: Vinay Kumar Chopra <147031659+HUN-sp at users.noreply.github.com>
  Date:   2026-08-03 (Mon, 03 Aug 2026)

  Changed paths:
    M raster/r.resamp.stats/main.c

  Log Message:
  -----------
  r.resamp.stats: Fix quantile option being truncated to an integer (#7791)

The quantile variable is a double, but its value was parsed with atoi, so
any quantile below 1.0 became 0 and method=quantile returned the minimum
regardless of the requested quantile. Use atof, as r.neighbors, r.series
and r3.neighbors already do for the same option.


  Commit: 93544721516395642d9643aa928dc057f729c458
      https://github.com/OSGeo/grass/commit/93544721516395642d9643aa928dc057f729c458
  Author: Vinay Kumar Chopra <147031659+HUN-sp at users.noreply.github.com>
  Date:   2026-08-04 (Tue, 04 Aug 2026)

  Changed paths:
    M raster/CMakeLists.txt
    M raster/r.resamp.stats/Makefile
    A raster/r.resamp.stats/benchmark/benchmark_r_resamp_stats_nprocs.py
    M raster/r.resamp.stats/main.c
    M raster/r.resamp.stats/r.resamp.stats.html
    M raster/r.resamp.stats/r.resamp.stats.md
    A raster/r.resamp.stats/testsuite/test_r_resamp_stats.py

  Log Message:
  -----------
  r.resamp.stats: OpenMP parallelization with memory chunking (#7044)



Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>
Co-authored-by: Anna Petrasova <kratochanna at gmail.com>
Co-authored-by: vinaykumarchopra <vinay.23bcs10174 at sst.scaler.com>


  Commit: 4229ab82273b42619c3ad5cb9c16f44b3954013b
      https://github.com/OSGeo/grass/commit/4229ab82273b42619c3ad5cb9c16f44b3954013b
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M CONTRIBUTING.md
    A doc/development/building_with_cmake.md
    M man/mkdocs/docs/development_intro.md

  Log Message:
  -----------
  doc: cmake compilation guide (#7744)


  Commit: d1f10cec609f4c8aa0e12edc3930f66148a0ab49
      https://github.com/OSGeo/grass/commit/d1f10cec609f4c8aa0e12edc3930f66148a0ab49
  Author: Jal Patel <102137104+jalpatel11 at users.noreply.github.com>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    A raster/r.timestamp/tests/conftest.py
    A raster/r.timestamp/tests/r_timestamp_test.py

  Log Message:
  -----------
  r.timestamp: Add pytest test suite (#7802)


  Commit: 0850a40412c109476e3551dd90a17c99e45908ff
      https://github.com/OSGeo/grass/commit/0850a40412c109476e3551dd90a17c99e45908ff
  Author: Markus Metz <33666869+metzm at users.noreply.github.com>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M scripts/r.reclass.area/r.reclass.area.html
    M scripts/r.reclass.area/r.reclass.area.md
    M scripts/r.reclass.area/r.reclass.area.py

  Log Message:
  -----------
  r.reclass.area: preserve backwards compatibility (#7806)

* r.reclass.area: preserve backwards compatibility
* update manual for the lower option
* Apply suggestions from code review

Co-authored-by: Stefan Blumentrath <stefan.blumentrath at gmx.de>

---------

Co-authored-by: Stefan Blumentrath <stefan.blumentrath at gmx.de>


  Commit: ba1d7b7f733e2c2c13694668f87895187d1c198a
      https://github.com/OSGeo/grass/commit/ba1d7b7f733e2c2c13694668f87895187d1c198a
  Author: Jal Patel <102137104+jalpatel11 at users.noreply.github.com>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    A general/g.gisenv/tests/conftest.py
    A general/g.gisenv/tests/g_gisenv_test.py

  Log Message:
  -----------
  g.gisenv: Add pytest test suite (#7803)


  Commit: 89b771c2d0dee90820868316d5a14864d3605793
      https://github.com/OSGeo/grass/commit/89b771c2d0dee90820868316d5a14864d3605793
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-08-08 (Sat, 08 Aug 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (119) (#7813)

locale: Update translation files

Co-authored-by: echoix <27212526+echoix at users.noreply.github.com>


  Commit: ff8f81ff9c4e06860da2c8add8f9f3e4a84a7a9f
      https://github.com/OSGeo/grass/commit/ff8f81ff9c4e06860da2c8add8f9f3e4a84a7a9f
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-08-09 (Sun, 09 Aug 2026)

  Changed paths:
    A raster/r.geomorphon/tests/conftest.py
    A raster/r.geomorphon/tests/r_geomorphon_test.py
    R raster/r.geomorphon/testsuite/test_r_geom.py

  Log Message:
  -----------
  r.geomorphon: replace testsuite with pytest reference (#7785)


  Commit: 00f13d7633bb4cb00ab75c2d53557d6dfbd27b49
      https://github.com/OSGeo/grass/commit/00f13d7633bb4cb00ab75c2d53557d6dfbd27b49
  Author: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  Date:   2026-08-09 (Sun, 09 Aug 2026)

  Changed paths:
    M man/mkdocs/requirements.txt

  Log Message:
  -----------
  CI(deps): Update dependency pymdown-extensions to v11.0.1 [SECURITY] (main) (#7814)


  Commit: 79d56d91a68f98f1d00e58a7b856c60bfb5d2cf4
      https://github.com/OSGeo/grass/commit/79d56d91a68f98f1d00e58a7b856c60bfb5d2cf4
  Author: OSGeo Weblate <97247866+osgeoweblate at users.noreply.github.com>
  Date:   2026-08-15 (Sat, 15 Aug 2026)

  Changed paths:
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    M locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    M locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    M locale/po/grasswxpy_zh_Hant.po
    M locale/tbx/grassglossary_ar.tbx
    M locale/tbx/grassglossary_bn.tbx
    M locale/tbx/grassglossary_cs.tbx
    M locale/tbx/grassglossary_de.tbx
    M locale/tbx/grassglossary_el.tbx
    M locale/tbx/grassglossary_es.tbx
    M locale/tbx/grassglossary_fi.tbx
    M locale/tbx/grassglossary_fr.tbx
    M locale/tbx/grassglossary_hi.tbx
    M locale/tbx/grassglossary_hu.tbx
    M locale/tbx/grassglossary_id.tbx
    M locale/tbx/grassglossary_it.tbx
    M locale/tbx/grassglossary_ja.tbx
    M locale/tbx/grassglossary_ko.tbx
    M locale/tbx/grassglossary_lv.tbx
    M locale/tbx/grassglossary_ml.tbx
    M locale/tbx/grassglossary_pl.tbx
    M locale/tbx/grassglossary_pt.tbx
    M locale/tbx/grassglossary_pt_BR.tbx
    M locale/tbx/grassglossary_ro.tbx
    M locale/tbx/grassglossary_ru.tbx
    M locale/tbx/grassglossary_si.tbx
    M locale/tbx/grassglossary_sl.tbx
    M locale/tbx/grassglossary_sv.tbx
    M locale/tbx/grassglossary_ta.tbx
    M locale/tbx/grassglossary_th.tbx
    M locale/tbx/grassglossary_tr.tbx
    M locale/tbx/grassglossary_uk.tbx
    M locale/tbx/grassglossary_vi.tbx
    M locale/tbx/grassglossary_zh_Hans.tbx
    M locale/tbx/grassglossary_zh_Hant.tbx

  Log Message:
  -----------
  Translations update from OSGeo Weblate (#7818)

Translated using Weblate (French)

Currently translated at 36.8% (3731 of 10117 strings)

Translated using Weblate (French)

Currently translated at 96.6% (3275 of 3390 strings)

Translated using Weblate (French)

Currently translated at 36.6% (3710 of 10117 strings)

Translated using Weblate (French)

Currently translated at 95.9% (3252 of 3390 strings)

Translated using Weblate (French)

Currently translated at 98.2% (1823 of 1855 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 0.0% (0 of 62 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 75.7% (50 of 66 strings)

Translated using Weblate (Vietnamese)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Ukrainian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Turkish)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Thai)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Tamil)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Swedish)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Slovenian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Sinhala)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Russian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Romanian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Portuguese)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Polish)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Malayalam)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Latvian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Korean)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Japanese)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Italian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Indonesian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Hungarian)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Hindi)

Currently translated at 65.1% (43 of 66 strings)

Translated using Weblate (French)

Currently translated at 86.5% (58 of 67 strings)

Translated using Weblate (Finnish)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Spanish)

Currently translated at 12.1% (8 of 66 strings)

Translated using Weblate (Greek)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (German)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Czech)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Bengali)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (Arabic)

Currently translated at 9.0% (6 of 66 strings)

Translated using Weblate (French)

Currently translated at 36.6% (3708 of 10115 strings)

Translated using Weblate (French)

Currently translated at 95.0% (3223 of 3390 strings)

Translated using Weblate (French)

Currently translated at 98.2% (1822 of 1855 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 29.6% (1005 of 3390 strings)

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.




Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/ar/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/bn/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/cs/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/de/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/el/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/es/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/fi/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/hi/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/hu/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/id/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/it/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/ja/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/ko/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/lv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/ml/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/pl/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/pt/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/pt_BR/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/ro/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/ru/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/si/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/sl/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/sv/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/ta/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/th/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/tr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/uk/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/vi/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/zh_Hans/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassglossary/zh_Hant/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasslibs/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grassmods/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/fr/
Translate-URL: https://weblate.osgeo.org/projects/grass-gis/grasswxpy/zh_Hans/
Translation: GRASS/grassglossary
Translation: GRASS/grasslibs
Translation: GRASS/grassmods
Translation: GRASS/grasswxpy

Co-authored-by: Weblate <noreply at weblate.org>
Co-authored-by: Edouard Choiniere <echoix at users.noreply.weblate.osgeo.org>
Co-authored-by: Liuxs <liuxspro at gmail.com>


  Commit: 3ebde05d387b5fcf1629d28d054adaee7cbdd1e0
      https://github.com/OSGeo/grass/commit/3ebde05d387b5fcf1629d28d054adaee7cbdd1e0
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-16 (Sun, 16 Aug 2026)

  Changed paths:
    R lib/temporal/SQL/update_stds_spatial_temporal_extent_template_old.sql
    R lib/temporal/SQL/update_str3ds_metadata_template_old.sql
    M lib/temporal/SQL/update_strds_metadata_template.sql
    R lib/temporal/SQL/update_strds_metadata_template_old.sql
    R lib/temporal/SQL/update_strds_metadata_template_v3.sql
    R lib/temporal/SQL/update_stvds_metadata_template_old.sql
    M python/grass/temporal/abstract_space_time_dataset.py

  Log Message:
  -----------
  temporal: Remove SQLite < 3.33 workaround (#7825)

revert 3723


  Commit: 251d7f0d941858cbc2f8c94bed67c2e7176e3192
      https://github.com/OSGeo/grass/commit/251d7f0d941858cbc2f8c94bed67c2e7176e3192
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-08-17 (Mon, 17 Aug 2026)

  Changed paths:
    M raster/CMakeLists.txt
    M raster/r.geomorphon/Makefile
    A raster/r.geomorphon/benchmark/benchmark_r_geomorphon.py
    M raster/r.geomorphon/local_proto.h
    M raster/r.geomorphon/main.c
    M raster/r.geomorphon/memory.c
    M raster/r.geomorphon/pattern.c
    M raster/r.geomorphon/r.geomorphon.md
    M raster/r.geomorphon/tests/r_geomorphon_test.py

  Log Message:
  -----------
  r.geomorphon: parallelize with OpenMP using memory-bounded banding (#7783)

The output is processed in bands sized from a new memory option, with the
input strip loaded through per thread descriptors and each band's rows
computed in parallel. Output is byte identical to the serial module at
every thread count across all twelve outputs, the
memory range, and the option matrix. A new nprocs option matches the other
parallel modules.


  Commit: 8f156a141931f424ea3b5501ae8cd40d52a3e485
      https://github.com/OSGeo/grass/commit/8f156a141931f424ea3b5501ae8cd40d52a3e485
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-18 (Tue, 18 Aug 2026)

  Changed paths:
    M gui/wxpython/tplot/frame.py

  Log Message:
  -----------
  wxGUI/tplot: Make the window resizable and add padding for nicer look (#7820)


  Commit: 4677089e442a50fc713db430de1ac07e6211bbd3
      https://github.com/OSGeo/grass/commit/4677089e442a50fc713db430de1ac07e6211bbd3
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-19 (Wed, 19 Aug 2026)

  Changed paths:
    M doc/development/CMakeLists.txt
    M doc/development/Makefile

  Log Message:
  -----------
  doc: building_with_cmake.md was not built (#7829)

* doc: building_with_cmake.md was not built

* cmake build too


  Commit: 0eed10543479097be6f861131a4abfcbb63bc4cb
      https://github.com/OSGeo/grass/commit/0eed10543479097be6f861131a4abfcbb63bc4cb
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-19 (Wed, 19 Aug 2026)

  Changed paths:
    M cmake/modules/build_gui_in_subdir.cmake

  Log Message:
  -----------
  CMake: Rebuild g.gui.* modules when their sources change (#7830)


  Commit: 74eb64c4e9f7670c5d8e57aff23b19b9e05d6763
      https://github.com/OSGeo/grass/commit/74eb64c4e9f7670c5d8e57aff23b19b9e05d6763
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-19 (Wed, 19 Aug 2026)

  Changed paths:
    A gui/icons/grass/str3ds.png
    A gui/icons/grass/str3ds.svg
    A gui/icons/grass/strds.png
    A gui/icons/grass/strds.svg
    A gui/icons/grass/stvds.png
    A gui/icons/grass/stvds.svg
    M gui/wxpython/core/gconsole.py
    M gui/wxpython/datacatalog/catalog.py
    M gui/wxpython/datacatalog/g.gui.datacatalog.md
    M gui/wxpython/datacatalog/toolbars.py
    M gui/wxpython/datacatalog/tree.py
    M python/grass/grassdb/data.py
    M python/grass/temporal/gui_support.py

  Log Message:
  -----------
  wxGUI/datacatalog : Add STDS in datacatalog (#7608)


  Commit: 236b827b293097fbea7a83731ea1878e77eab6fe
      https://github.com/OSGeo/grass/commit/236b827b293097fbea7a83731ea1878e77eab6fe
  Author: Tomas Zigo <50632337+tmszi at users.noreply.github.com>
  Date:   2026-08-20 (Thu, 20 Aug 2026)

  Changed paths:
    M gui/wxpython/CMakeLists.txt

  Log Message:
  -----------
  wxGUI/jupyter_notebook: fix copying missing template notebook files (#7809)

Failure during the compilation process if CMake was used.

Co-authored-by: Linda Karlovska <49241681+lindakarlovska at users.noreply.github.com>


  Commit: 058b1a29c3edc70d2fb26f7c3b859e7d1618bcc5
      https://github.com/OSGeo/grass/commit/058b1a29c3edc70d2fb26f7c3b859e7d1618bcc5
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-20 (Thu, 20 Aug 2026)

  Changed paths:
    M gui/wxpython/datacatalog/tree.py

  Log Message:
  -----------
  wxGUI/datacatalog: Add db path tooltip to nodes (#7824)


  Commit: 681365cc5497bc172ceda13e4e4d3170218fdeb1
      https://github.com/OSGeo/grass/commit/681365cc5497bc172ceda13e4e4d3170218fdeb1
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-20 (Thu, 20 Aug 2026)

  Changed paths:
    M gui/wxpython/animation/controller.py
    M gui/wxpython/animation/provider.py

  Log Message:
  -----------
  wxGUI/animation: Fix freeze and descriptor exhaustion on large datasets (#7811)


  Commit: 28bf457d525dea577549759501d3445f0a83335e
      https://github.com/OSGeo/grass/commit/28bf457d525dea577549759501d3445f0a83335e
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-20 (Thu, 20 Aug 2026)

  Changed paths:
    M lib/proj/CMakeLists.txt

  Log Message:
  -----------
  CMake: Copy proj tables to build output tree (#7831)


  Commit: 2446d8809a2ea014df3c47d9fd86aeced14d0ac6
      https://github.com/OSGeo/grass/commit/2446d8809a2ea014df3c47d9fd86aeced14d0ac6
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-21 (Fri, 21 Aug 2026)

  Changed paths:
    M gui/wxpython/animation/frame.py
    A gui/wxpython/animation/panels.py
    M gui/wxpython/animation/toolbars.py
    M gui/wxpython/main_window/frame.py

  Log Message:
  -----------
  wxGUI/animation: Integrate `g.gui.animation` into the GUI as a tab (#7823)


  Commit: 63e582d65f4a105152548db0fe5fb869215753b5
      https://github.com/OSGeo/grass/commit/63e582d65f4a105152548db0fe5fb869215753b5
  Author: Kaushik Raja <85415462+krcoder123 at users.noreply.github.com>
  Date:   2026-08-21 (Fri, 21 Aug 2026)

  Changed paths:
    A raster/r.proj/tests/conftest.py
    A raster/r.proj/tests/r_proj_methods_test.py
    A raster/r.proj/tests/r_proj_output_test.py
    R raster/r.proj/testsuite/test_rproj.py

  Log Message:
  -----------
  r.proj: replace gunittest testsuite with pytest method reference tests (#7766)


  Commit: 8f39c47c80befa707f6adf0ea8bc890223d84be1
      https://github.com/OSGeo/grass/commit/8f39c47c80befa707f6adf0ea8bc890223d84be1
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-21 (Fri, 21 Aug 2026)

  Changed paths:
    M python/grass/pygrass/rpc/base.py

  Log Message:
  -----------
  grass.pygrass: Fix resource_tracker semaphore warning at exit (#7833)

Unlink the RPC server lock semaphore when the server is stopped, so temporal tools no longer emit a resource_tracker warning at exit.

Note :- Messenger holds the same kind of lock, but bisecting showed only the CLibrariesInterface lock survives to shutdown, so changing its stop() would fix nothing.


  Commit: f87bf846fea303f5fc4fc383e6b520ab901f5c8d
      https://github.com/OSGeo/grass/commit/f87bf846fea303f5fc4fc383e6b520ab901f5c8d
  Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  Date:   2026-08-22 (Sat, 22 Aug 2026)

  Changed paths:
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot

  Log Message:
  -----------
  locale: Update translation files (122) (#7838)

locale: Update translation files

Co-authored-by: echoix <27212526+echoix at users.noreply.github.com>


  Commit: fc2cd0a8f53679edc85a0b75d0ccef98f192fb6e
      https://github.com/OSGeo/grass/commit/fc2cd0a8f53679edc85a0b75d0ccef98f192fb6e
  Author: R Sai Pranav <rajasaipranav0 at gmail.com>
  Date:   2026-08-23 (Sun, 23 Aug 2026)

  Changed paths:
    M raster/r.coin/make_coin.c
    M raster/r.coin/tests/test_coin.py

  Log Message:
  -----------
  r.coin: Fail when r.stats returns no data (#7841)


  Commit: adc72202d77f19806699e870c09e025904221fde
      https://github.com/OSGeo/grass/commit/adc72202d77f19806699e870c09e025904221fde
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-24 (Mon, 24 Aug 2026)

  Changed paths:
    A raster/r.sim/r.sim.water/r.sim.water.ipynb
    M raster/r.sim/r.sim.water/testsuite/data/depth_complex.pack
    A raster/r.sim/r.sim.water/testsuite/data/depth_infil.pack
    M raster/r.sim/r.sim.water/testsuite/data/discharge_complex.pack
    M raster/r.sim/r.sim.water/testsuite/test_r_sim_water.py
    M raster/r.sim/simlib/hydro.c
    M raster/r.sim/simlib/input.c

  Log Message:
  -----------
  r.sim: fix infiltration implementation (#5623)

* r.sim: fix infiltration computation

* fix order, add test

* forgotten file

* added testing notebook to run in binder

* fix paths for binder

* don't use log legend, fails with 0

* corrected behavior

* fix tests

* improve notebook

* fix parameter

* remove not needed comments from tests

* remove trapezoid rule multiplication, add comments

* don't remove trapezoidal rule to depth to not change results

* add condition to filter infil > 0

---------

Co-authored-by: Corey White <smortopahri at gmail.com>


  Commit: 1c684328ebea801f9838e5723bccd4af6b12001e
      https://github.com/OSGeo/grass/commit/1c684328ebea801f9838e5723bccd4af6b12001e
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-24 (Mon, 24 Aug 2026)

  Changed paths:
    M raster/r.in.pdal/info.cpp
    M raster/r.in.pdal/info.h
    M raster/r.in.pdal/main.cpp
    M raster/r.in.pdal/projection.c
    M raster/r.in.pdal/r.in.pdal.html
    M raster/r.in.pdal/r.in.pdal.md
    A raster/r.in.pdal/testsuite/data/points_3358.las
    A raster/r.in.pdal/testsuite/data/points_6346.las
    A raster/r.in.pdal/testsuite/test_r_in_pdal_extent.py

  Log Message:
  -----------
  r.in.pdal: fix reported data extent when CRS doesn't match (#6465)

* r.in.pdal: fix reported data extent when CRS doesn't match

* fix tests

* forgot to add test las files

* address review, improve test

* set higher delta for macOS

* add points along boox edges

* address review

* minor improvments

* address review

---------

Co-authored-by: Corey White <smortopahri at gmail.com>


  Commit: 18f5980b6a8ead3259b977b3f9653d03d6efb92e
      https://github.com/OSGeo/grass/commit/18f5980b6a8ead3259b977b3f9653d03d6efb92e
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-08-24 (Mon, 24 Aug 2026)

  Changed paths:
    M CITATION.cff

  Log Message:
  -----------
  docs: Add name to GRASS citation list (#7845)

* citation: Add name to GRASS Dev citation

* Reverted GRASS version and changed order


  Commit: 8ecfa87383928735946e5d85e3811f16d4531422
      https://github.com/OSGeo/grass/commit/8ecfa87383928735946e5d85e3811f16d4531422
  Author: Māris Nartišs <maris.gis at gmail.com>
  Date:   2026-08-25 (Tue, 25 Aug 2026)

  Changed paths:
    M raster/r.stats/stats.c

  Log Message:
  -----------
  r.stats: bump up counts storage to unsigned long long (#7790)


  Commit: 8d92e4594a9359143f00c7dbbe849f46db4327c6
      https://github.com/OSGeo/grass/commit/8d92e4594a9359143f00c7dbbe849f46db4327c6
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-24 (Mon, 24 Aug 2026)

  Changed paths:
    M CITATION.cff

  Log Message:
  -----------
  doc: remove stale fields in CITATION.cff (#7846)


  Commit: f5ebd74c5cf2a1c1fdeeee2c5cfa7702f7fdc2e1
      https://github.com/OSGeo/grass/commit/f5ebd74c5cf2a1c1fdeeee2c5cfa7702f7fdc2e1
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-08-24 (Mon, 24 Aug 2026)

  Changed paths:
    M gui/wxpython/xml/toolboxes.xml
    M vector/CMakeLists.txt
    M vector/Makefile
    A vector/v.ppa/Makefile
    A vector/v.ppa/doc_figures.py
    A vector/v.ppa/f_function.c
    A vector/v.ppa/g_function.c
    A vector/v.ppa/k_function.c
    A vector/v.ppa/local_proto.h
    A vector/v.ppa/main.c
    A vector/v.ppa/result.c
    A vector/v.ppa/tests/conftest.py
    A vector/v.ppa/tests/v_ppa_test.py
    A vector/v.ppa/v.ppa.html
    A vector/v.ppa/v.ppa.md
    A vector/v.ppa/v_ppa_f.png
    A vector/v.ppa/v_ppa_g.png
    A vector/v.ppa/v_ppa_k.png
    A vector/v.ppa/v_ppa_l.png
    A vector/v.ppa/v_ppa_patterns.png

  Log Message:
  -----------
  v.ppa: Point Pattern Analysis (#3826)

* v.ppa: Point Pattern Analysis

* Changed how vector ponits are counted

* Update vector/v.ppa/main.c

Co-authored-by: Loïc Bartoletti <lbartoletti at users.noreply.github.com>

* Update vector/v.ppa/main.c

Co-authored-by: Loïc Bartoletti <lbartoletti at users.noreply.github.com>

* Update vector/v.ppa/main.c

Co-authored-by: Loïc Bartoletti <lbartoletti at users.noreply.github.com>

* Update vector/v.ppa/main.c

Co-authored-by: Loïc Bartoletti <lbartoletti at users.noreply.github.com>

* Update vector/v.ppa/main.c

Co-authored-by: Loïc Bartoletti <lbartoletti at users.noreply.github.com>

* Update vector/v.ppa/main.c

Co-authored-by: Loïc Bartoletti <lbartoletti at users.noreply.github.com>

* Moved sqrt call outside of ec. distance loop

* Updated docs

* added random seed for random points

* updated g-function to return g-value under csr

* updated g-function docs

* Updated K and L functions and MC Sim

* Added base setup for JSON support

* Added tests

* Added json output to k and l functions

* Added markdown to fix build issue

* Updated docs

* v.ppa: Rework estimators, interface, and tests

Restructure the tool for core inclusion and fix correctness problems
found in review:

- Split main.c into per-function files (g_function.c, f_function.c,
  k_function.c, result.c) sharing local_proto.h.
- Use the computational region as the observation window for the
  intensity estimate, F function sampling, edge correction geometry,
  and default distance range. Points outside the region are ignored
  with a warning.
- Add Ripley's isotropic edge correction for the K and L functions
  (correction=isotropic|none, default isotropic), using the closed
  form for rectangular windows.
- Evaluate K and L up to max_distance (default one quarter of the
  shorter region side) instead of the O(n^2) pattern diameter, and
  estimate K with one radius query per point.
- Print results to standard output by default with
  format=plain|csv|json; JSON output is a records array with method,
  point count, intensity, window, and correction metadata. The output
  option optionally writes to a file for all methods.
- Fix correctness bugs: intensity truncated to int made the G CSR
  reference always zero, kdtree_knn was called with k=2 writing into
  scalars, duplicate coordinates were dropped from the k-d tree,
  omitting output crashed on fopen(NULL), and num_distances was
  ignored by the G and F functions.
- Remove the unfinished Monte Carlo envelope code and the simulations
  option; simulation envelopes are planned as a follow-up (see TODO
  in the manual).
- Add the nprocs and seed standard options; report all functions
  together with their theoretical values under CSR.
- Replace the gunittest testsuite and committed test data with pytest
  tests on seeded synthetic patterns that assert agreement with CSR
  theory, clustering detection, and edge correction behavior.
- Register the tool in vector/CMakeLists.txt and use grass/gjson.h
  instead of the removed grass/parson.h.
- Rewrite the manual pages.

The restructured estimators and the isotropic correction were
implemented with AI assistance; the correction was validated
numerically against a brute-force estimate of the circle fraction
inside the window, and the estimators against CSR theory on seeded
random patterns.

* v.ppa: Add manual figures for the summary functions

Add a pattern map figure (clustered, random, dispersed) rendered with
d.vect and one plot per function comparing the three patterns against
the CSR expectation. The figures are generated by the included
doc_figures.py script from seeded synthetic patterns, so they are
reproducible. Created with AI assistance.

* style: Format cmake files with Gersemi

* Add tool to the 'Vector Report and Statistics' and 'Point Analysis' toolboxes

---------

Co-authored-by: Corey White <ctwhite48 at gmail.com>
Co-authored-by: Loïc Bartoletti <lbartoletti at users.noreply.github.com>
Co-authored-by: Edouard Choinière <27212526+echoix at users.noreply.github.com>


  Commit: 961201997595e56cde5dfa4660f3dda3d1bfeb09
      https://github.com/OSGeo/grass/commit/961201997595e56cde5dfa4660f3dda3d1bfeb09
  Author: Corey White <smortopahri at gmail.com>
  Date:   2026-08-25 (Tue, 25 Aug 2026)

  Changed paths:
    M display/d.graph/do_graph.c
    M display/d.legend/draw.c
    M imagery/i.segment/flag.c
    M raster3d/r3.in.v5d/main.c
    M raster3d/r3.out.v5d/main.c
    M vector/v.vol.rst/user3.c
    M visualization/ximgview/color.c

  Log Message:
  -----------
  tools: Fix multiplications converted to a larger type (#7708)

* tools: Fix multiplications converted to a larger type

Cast the first operand so that integer products used as allocation
sizes, memset lengths, cell counts, and file offsets are computed in
size_t, long, or off_t instead of int, and so that int or float
products consumed as double (D_text_size, floor, region bounds) are
computed in double.

Fixes 24 CodeQL cpp/integer-multiplication-cast-to-long alerts across
display, general, imagery, raster3d, vector, and visualization tools.

* removed cases that require further investigation


  Commit: 67e876e30edd065558e28c884562fe595bedf80d
      https://github.com/OSGeo/grass/commit/67e876e30edd065558e28c884562fe595bedf80d
  Author: SAKET KUMAR MALL <72020337+saket0187 at users.noreply.github.com>
  Date:   2026-08-25 (Tue, 25 Aug 2026)

  Changed paths:
    M gui/wxpython/animation/frame.py
    M gui/wxpython/animation/panels.py
    M gui/wxpython/datacatalog/tree.py
    M gui/wxpython/lmgr/frame.py
    M gui/wxpython/main_window/frame.py

  Log Message:
  -----------
  wxGUI/datacatalog: Add Display animation option for space time datasets (#7834)


  Commit: c76c23b9577d736f2c8806a82e69e96d593d344f
      https://github.com/OSGeo/grass/commit/c76c23b9577d736f2c8806a82e69e96d593d344f
  Author: Anna Petrasova <kratochanna at gmail.com>
  Date:   2026-08-25 (Tue, 25 Aug 2026)

  Changed paths:
    M man/Makefile
    M man/build_manpages.py

  Log Message:
  -----------
  man: Use build_manpages.py for the man page sweep in both builds (#7748)

Replace the MANPAGES machinery in man/Makefile with a call to the
sweep script the CMake build already uses, so both builds share one
sweep and one exclusion list. The delayed-evaluation and
parenthesis-escaping workarounds are no longer needed because the
script globs the markdown tree at run time.

Implemented with AI assistance (Claude Fable).


  Commit: a6ea876f58b3e8c8b50ba7598797e0047644aaa1
      https://github.com/OSGeo/grass/commit/a6ea876f58b3e8c8b50ba7598797e0047644aaa1
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-08-26 (Wed, 26 Aug 2026)

  Changed paths:
    M Dockerfile
    M docker/ubuntu/Dockerfile

  Log Message:
  -----------
  docker: Update GDAL to 3.13.3 because of performance regression on Linux (#7852)

* update to GDAL 3.13.3 due to performance regression


  Commit: 69185b1f5f1246321ca19c53f464366a70f3ead0
      https://github.com/OSGeo/grass/commit/69185b1f5f1246321ca19c53f464366a70f3ead0
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-08-27 (Thu, 27 Aug 2026)

  Changed paths:
    M README.md

  Log Message:
  -----------
  doc: Update OpenSSF Scorecard badge URLs in README (#7857)

OpenSSF Scorecard moved from securityscorecards.dev to scorecard.dev. The old host still redirects, so the badge was not broken, but the README now uses the current addresses for both the badge image and the viewer link.


  Commit: 6693c66f34d3a8ab7185b92185ff1abe0d58daee
      https://github.com/OSGeo/grass/commit/6693c66f34d3a8ab7185b92185ff1abe0d58daee
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-08-27 (Thu, 27 Aug 2026)

  Changed paths:
    M README.md

  Log Message:
  -----------
  doc: Replace the broken Weblate badge in README (#7859)

The Weblate badge does not render on GitHub. weblate.osgeo.org is behind a Cloudflare managed challenge which answers non-browser requests with an HTTP 403 challenge page, so the SVG never reaches the reader. Opening the URL in a browser works, which is why the badge looks fine when it is checked by hand.

This uses a static shields.io badge instead. The link to the GRASS project on Weblate stays, but the translation percentage is gone.


  Commit: fd71b0267cd563c719f117c54f56353a5bff74e5
      https://github.com/OSGeo/grass/commit/fd71b0267cd563c719f117c54f56353a5bff74e5
  Author: Vaclav Petras <wenzeslaus at gmail.com>
  Date:   2026-08-27 (Thu, 27 Aug 2026)

  Changed paths:
    M AGENTS.md
    M CONTRIBUTING.md
    M doc/development/CMakeLists.txt
    M doc/development/Makefile
    M doc/development/README.md
    M doc/development/style_guide.md
    A doc/development/testing.md
    M man/mkdocs/docs/development_intro.md
    M testsuite/README.md

  Log Message:
  -----------
  contributing: Add a testing guide (#7851)

The most complete statement of GRASS testing conventions lived in AGENTS.md, written for AI agents, and a contributor following the documented path never saw it. style_guide.md had no testing section, testsuite/README.md gave pytest a single sentence, and the Testing section in development_intro.md linked only the gunittest manual.

This adds testing.md covering the choice between pytest and gunittest, test placement and naming, session fixtures, grass.tools, test data, running the tests, and tests which cannot run in parallel. AGENTS.md now points at the guide and keeps only its agent-specific notes, so the two cannot drift too much.

Trim the testsuite README to minimum. testsuite/README.md described which testing frameworks exist and how to run pytest, which testing.md now covers, and the export commands in its Running tests section had stray backslashes which made them set literal strings when copied. The directory still needs a README since it is a top level and has unclear content (a shell script). This keeps what the directory is for and the pointer to the CI, names raster_md5test.sh, and links testing.md for everything else. The North Carolina sample dataset URL moves to testing.md, next to the command which uses the dataset.


  Commit: b7785d3a9d8df26c0d2a8a23466c1b88ddc99f54
      https://github.com/OSGeo/grass/commit/b7785d3a9d8df26c0d2a8a23466c1b88ddc99f54
  Author: Stefan Blumentrath <stefan.blumentrath at gmx.de>
  Date:   2026-08-28 (Fri, 28 Aug 2026)

  Changed paths:
    M .editorconfig
    M .github/workflows/additional_checks.yml
    M .github/workflows/cmake.yml
    M .github/workflows/codeql-analysis.yml
    M .github/workflows/coverity.yml
    M .github/workflows/create_release_draft.yml
    M .github/workflows/docker.yml
    M .github/workflows/documentation.yml
    M .github/workflows/gcc.yml
    M .github/workflows/label.yml
    M .github/workflows/macos.yml
    M .github/workflows/macos_distribute_app.yml
    M .github/workflows/osgeo4w.yml
    M .github/workflows/periodic_update.yml
    M .github/workflows/pytest.yml
    M .github/workflows/pytest_args_gunittest.txt
    M .github/workflows/python-code-quality.yml
    M .github/workflows/super-linter.yml
    M .github/workflows/test-nix.yml
    M .github/workflows/titles.yml
    M .github/workflows/ubuntu.yml
    M .gitignore
    M .pre-commit-config.yaml
    M AGENTS.md
    M CITATION.cff
    M CMakeLists.txt
    M CONTRIBUTING.md
    M Dockerfile
    M GRASSConfig.cmake.in
    M README.md
    M REQUIREMENTS.md
    M cmake/ctypesgen.cmake
    M cmake/find_scripts/CMakeLists.txt
    M cmake/find_scripts/FindCBLAS.cmake
    M cmake/find_scripts/FindCairo.cmake
    M cmake/find_scripts/FindFFTW-egpbos.cmake
    M cmake/find_scripts/FindFFTW-eigen.cmake
    M cmake/find_scripts/FindFFTW.cmake
    M cmake/find_scripts/FindGEOS.cmake
    M cmake/find_scripts/FindLAPACKE.cmake
    M cmake/find_scripts/FindLibLAS.cmake
    M cmake/find_scripts/FindLibSVM.cmake
    M cmake/find_scripts/FindMySQL.cmake
    M cmake/find_scripts/FindNetCDF.cmake
    M cmake/find_scripts/FindPCRE.cmake
    M cmake/find_scripts/FindPROJ.cmake
    M cmake/find_scripts/FindReadline.cmake
    M cmake/find_scripts/Findzstd.cmake
    M cmake/locale_strings.cmake
    M cmake/modules/CMakeLists.txt
    M cmake/modules/CheckDependentLibraries.cmake
    M cmake/modules/Configure.cmake
    M cmake/modules/DevelUtils.cmake
    M cmake/modules/GRASSInstallDirs.cmake
    M cmake/modules/build_addon.cmake
    M cmake/modules/build_gui_in_subdir.cmake
    M cmake/modules/build_library_in_subdir.cmake
    M cmake/modules/build_module.cmake
    M cmake/modules/build_program.cmake
    M cmake/modules/build_program_in_subdir.cmake
    M cmake/modules/build_script_in_subdir.cmake
    M cmake/modules/check_target.cmake
    M cmake/modules/copy_python_files_in_subdir.cmake
    M cmake/modules/generate_docs.cmake
    M cmake/modules/get_host_arch.cmake
    M cmake/modules/get_versions.cmake
    M cmake/modules/linker.cmake
    M cmake/modules/repo_status.cmake
    M cmake/modules/set_compiler_flags.cmake
    A cmake/stubs/build_library_in_subdir_stub.cmake
    A cmake/stubs/build_program_in_subdir_stub.cmake
    A cmake/stubs/build_program_stub.cmake
    M db/CMakeLists.txt
    M db/drivers/CMakeLists.txt
    M demolocation/CMakeLists.txt
    M display/CMakeLists.txt
    M display/d.graph/do_graph.c
    M display/d.legend/draw.c
    M display/d.linegraph/main.c
    M doc/CMakeLists.txt
    M doc/Makefile
    A doc/development/CMakeLists.txt
    M doc/development/Makefile
    M doc/development/README.md
    A doc/development/building_with_cmake.md
    M doc/development/style_guide.md
    A doc/development/testing.md
    M doc/examples/notebooks/parallelization_tutorial.ipynb
    M doc/grass_projects.md
    M doc/howto_release.md
    M doc/jupyter_intro.md
    M doc/python_intro.md
    M docker/alpine/Dockerfile
    M docker/debian/Dockerfile
    M docker/testdata/test_grass_session.py
    M docker/ubuntu/Dockerfile
    M flake.lock
    M general/CMakeLists.txt
    A general/g.gisenv/tests/conftest.py
    A general/g.gisenv/tests/g_gisenv_test.py
    M general/g.region/g.region.md
    M general/g.region/main.c
    M general/manage/lister/CMakeLists.txt
    M gui/CMakeLists.txt
    M gui/icons/CMakeLists.txt
    A gui/icons/grass/jupyter.png
    A gui/icons/grass/jupyter.svg
    A gui/icons/grass/str3ds.png
    A gui/icons/grass/str3ds.svg
    A gui/icons/grass/strds.png
    A gui/icons/grass/strds.svg
    A gui/icons/grass/stvds.png
    A gui/icons/grass/stvds.svg
    M gui/images/CMakeLists.txt
    M gui/scripts/CMakeLists.txt
    M gui/wxpython/CMakeLists.txt
    M gui/wxpython/Makefile
    M gui/wxpython/animation/controller.py
    M gui/wxpython/animation/data.py
    M gui/wxpython/animation/frame.py
    M gui/wxpython/animation/nviztask.py
    A gui/wxpython/animation/panels.py
    M gui/wxpython/animation/provider.py
    M gui/wxpython/animation/toolbars.py
    M gui/wxpython/core/gcmd.py
    M gui/wxpython/core/gconsole.py
    M gui/wxpython/core/menutree.py
    M gui/wxpython/core/settings.py
    M gui/wxpython/core/utils.py
    M gui/wxpython/core/watchdog.py
    M gui/wxpython/datacatalog/catalog.py
    M gui/wxpython/datacatalog/g.gui.datacatalog.md
    M gui/wxpython/datacatalog/toolbars.py
    M gui/wxpython/datacatalog/tree.py
    M gui/wxpython/dbmgr/base.py
    M gui/wxpython/docs/CMakeLists.txt
    A gui/wxpython/docs/jupyter_browser_mode.png
    A gui/wxpython/docs/jupyter_integrated_mode.png
    A gui/wxpython/docs/jupyter_startup_dialog.png
    A gui/wxpython/docs/wxGUI.jupyter.md
    M gui/wxpython/gmodeler/canvas.py
    M gui/wxpython/gmodeler/model.py
    M gui/wxpython/gmodeler/model_convert.py
    M gui/wxpython/gmodeler/model_items.py
    M gui/wxpython/gmodeler/panels.py
    M gui/wxpython/gui_core/forms.py
    M gui/wxpython/gui_core/ghelp.py
    M gui/wxpython/gui_core/pyedit.py
    M gui/wxpython/gui_core/toolbars.py
    M gui/wxpython/image2target/ii2t_gis_set.py
    M gui/wxpython/iscatt/core_c.py
    M gui/wxpython/iscatt/iscatt_core.py
    M gui/wxpython/iscatt/plots.py
    A gui/wxpython/jupyter_notebook/dialogs.py
    A gui/wxpython/jupyter_notebook/environment.py
    A gui/wxpython/jupyter_notebook/frame.py
    A gui/wxpython/jupyter_notebook/notebook.py
    A gui/wxpython/jupyter_notebook/panel.py
    A gui/wxpython/jupyter_notebook/server.py
    A gui/wxpython/jupyter_notebook/storage.py
    A gui/wxpython/jupyter_notebook/template_notebooks/new.ipynb
    A gui/wxpython/jupyter_notebook/template_notebooks/welcome.ipynb
    A gui/wxpython/jupyter_notebook/toolbars.py
    A gui/wxpython/jupyter_notebook/utils.py
    M gui/wxpython/lmgr/frame.py
    M gui/wxpython/lmgr/layertree.py
    M gui/wxpython/lmgr/toolbars.py
    M gui/wxpython/main_window/frame.py
    M gui/wxpython/main_window/notebook.py
    M gui/wxpython/mapdisp/main.py
    M gui/wxpython/rdigit/controller.py
    M gui/wxpython/rlisetup/frame.py
    M gui/wxpython/timeline/frame.py
    M gui/wxpython/tplot/frame.py
    M gui/wxpython/wxgui.py
    M gui/wxpython/xml/module_tree.xml
    M gui/wxpython/xml/toolboxes.xml
    M gui/wxpython/xml/wxgui_items.xml
    M imagery/CMakeLists.txt
    M imagery/i.ortho.photo/CMakeLists.txt
    M imagery/i.segment/flag.c
    M include/CMakeLists.txt
    M include/Make/Grass.make
    M include/Make/Html.make
    M include/Make/Module.make
    M include/Make/Script.make
    M lib/CMakeLists.txt
    M lib/arraystats/class.c
    M lib/cairodriver/draw_bitmap.c
    M lib/cairodriver/graph.c
    M lib/db/CMakeLists.txt
    M lib/db/dbmi_base/dirent.c
    M lib/db/sqlp/CMakeLists.txt
    M lib/external/ccmath/hmgen.c
    M lib/external/ccmath/unitary.c
    M lib/fonts/CMakeLists.txt
    M lib/gis/CMakeLists.txt
    A lib/gis/tests/lib_gis_lrand48_test.py
    M lib/gmath/del2g.c
    M lib/gmath/getg.c
    M lib/gmath/lu.c
    M lib/init/CMakeLists.txt
    M lib/init/grass.py
    M lib/linkm/new.c
    M lib/nviz/lights.c
    M lib/ogsf/gs.c
    M lib/ogsf/gs_norms.c
    M lib/ogsf/gsd_cplane.c
    M lib/ogsf/gsd_fringe.c
    M lib/ogsf/gsd_surf.c
    M lib/ogsf/gsd_views.c
    M lib/ogsf/gsd_wire.c
    M lib/pngdriver/graph_close.c
    M lib/pngdriver/graph_set.c
    M lib/proj/CMakeLists.txt
    M lib/proj/do_proj.c
    M lib/psdriver/draw_bitmap.c
    M lib/psdriver/erase.c
    M lib/raster/get_row.c
    M lib/raster/put_row.c
    M lib/raster3d/cache.c
    M lib/raster3d/misc.c
    M lib/raster3d/tilewrite.c
    M lib/raster3d/volume.c
    M lib/rst/CMakeLists.txt
    M lib/segment/address.c
    M lib/temporal/CMakeLists.txt
    R lib/temporal/SQL/update_stds_spatial_temporal_extent_template_old.sql
    R lib/temporal/SQL/update_str3ds_metadata_template_old.sql
    M lib/temporal/SQL/update_strds_metadata_template.sql
    R lib/temporal/SQL/update_strds_metadata_template_old.sql
    R lib/temporal/SQL/update_strds_metadata_template_v3.sql
    R lib/temporal/SQL/update_stvds_metadata_template_old.sql
    M lib/vector/CMakeLists.txt
    M lib/vector/dglib/CMakeLists.txt
    M lib/vector/diglib/CMakeLists.txt
    M lib/vector/diglib/allocation.c
    A lib/vector/rtree/tests/lib_vector_rtree_ctypes_test.py
    M locale/CMakeLists.txt
    M locale/po/grasslibs_ar.po
    M locale/po/grasslibs_bn.po
    M locale/po/grasslibs_cs.po
    M locale/po/grasslibs_de.po
    M locale/po/grasslibs_el.po
    M locale/po/grasslibs_es.po
    M locale/po/grasslibs_fi.po
    M locale/po/grasslibs_fr.po
    M locale/po/grasslibs_hi.po
    M locale/po/grasslibs_hu.po
    M locale/po/grasslibs_id_ID.po
    M locale/po/grasslibs_it.po
    M locale/po/grasslibs_ja.po
    M locale/po/grasslibs_ko.po
    M locale/po/grasslibs_lv.po
    M locale/po/grasslibs_ml.po
    M locale/po/grasslibs_pl.po
    M locale/po/grasslibs_pt.po
    M locale/po/grasslibs_pt_BR.po
    M locale/po/grasslibs_ro.po
    M locale/po/grasslibs_ru.po
    M locale/po/grasslibs_si.po
    M locale/po/grasslibs_sl.po
    M locale/po/grasslibs_sv.po
    M locale/po/grasslibs_ta.po
    M locale/po/grasslibs_th.po
    M locale/po/grasslibs_tr.po
    M locale/po/grasslibs_uk.po
    M locale/po/grasslibs_vi.po
    M locale/po/grasslibs_zh.po
    A locale/po/grasslibs_zh_Hant.po
    M locale/po/grassmods_ar.po
    M locale/po/grassmods_bn.po
    M locale/po/grassmods_cs.po
    M locale/po/grassmods_de.po
    M locale/po/grassmods_el.po
    M locale/po/grassmods_es.po
    M locale/po/grassmods_fi.po
    M locale/po/grassmods_fr.po
    M locale/po/grassmods_hi.po
    M locale/po/grassmods_hu.po
    M locale/po/grassmods_id_ID.po
    M locale/po/grassmods_it.po
    M locale/po/grassmods_ja.po
    M locale/po/grassmods_ko.po
    M locale/po/grassmods_lv.po
    M locale/po/grassmods_ml.po
    M locale/po/grassmods_pl.po
    M locale/po/grassmods_pt.po
    M locale/po/grassmods_pt_BR.po
    M locale/po/grassmods_ro.po
    M locale/po/grassmods_ru.po
    M locale/po/grassmods_si.po
    M locale/po/grassmods_sl.po
    M locale/po/grassmods_sv.po
    M locale/po/grassmods_ta.po
    M locale/po/grassmods_th.po
    M locale/po/grassmods_tr.po
    M locale/po/grassmods_uk.po
    M locale/po/grassmods_vi.po
    M locale/po/grassmods_zh.po
    A locale/po/grassmods_zh_Hant.po
    M locale/po/grasswxpy_ar.po
    M locale/po/grasswxpy_bn.po
    M locale/po/grasswxpy_cs.po
    M locale/po/grasswxpy_de.po
    M locale/po/grasswxpy_el.po
    M locale/po/grasswxpy_es.po
    M locale/po/grasswxpy_fi.po
    M locale/po/grasswxpy_fr.po
    M locale/po/grasswxpy_hi.po
    M locale/po/grasswxpy_hu.po
    M locale/po/grasswxpy_id_ID.po
    M locale/po/grasswxpy_it.po
    M locale/po/grasswxpy_ja.po
    M locale/po/grasswxpy_ko.po
    M locale/po/grasswxpy_lv.po
    M locale/po/grasswxpy_ml.po
    M locale/po/grasswxpy_pl.po
    M locale/po/grasswxpy_pt.po
    M locale/po/grasswxpy_pt_BR.po
    M locale/po/grasswxpy_ro.po
    M locale/po/grasswxpy_ru.po
    M locale/po/grasswxpy_si.po
    M locale/po/grasswxpy_sl.po
    M locale/po/grasswxpy_sv.po
    M locale/po/grasswxpy_ta.po
    M locale/po/grasswxpy_th.po
    M locale/po/grasswxpy_tr.po
    M locale/po/grasswxpy_uk.po
    M locale/po/grasswxpy_vi.po
    M locale/po/grasswxpy_zh.po
    A locale/po/grasswxpy_zh_Hant.po
    M locale/tbx/grassglossary_ar.tbx
    M locale/tbx/grassglossary_bn.tbx
    M locale/tbx/grassglossary_cs.tbx
    M locale/tbx/grassglossary_de.tbx
    M locale/tbx/grassglossary_el.tbx
    M locale/tbx/grassglossary_es.tbx
    M locale/tbx/grassglossary_fi.tbx
    M locale/tbx/grassglossary_fr.tbx
    M locale/tbx/grassglossary_hi.tbx
    M locale/tbx/grassglossary_hu.tbx
    M locale/tbx/grassglossary_id.tbx
    M locale/tbx/grassglossary_it.tbx
    M locale/tbx/grassglossary_ja.tbx
    M locale/tbx/grassglossary_ko.tbx
    M locale/tbx/grassglossary_lv.tbx
    M locale/tbx/grassglossary_ml.tbx
    M locale/tbx/grassglossary_pl.tbx
    M locale/tbx/grassglossary_pt.tbx
    M locale/tbx/grassglossary_pt_BR.tbx
    M locale/tbx/grassglossary_ro.tbx
    M locale/tbx/grassglossary_ru.tbx
    M locale/tbx/grassglossary_si.tbx
    M locale/tbx/grassglossary_sl.tbx
    M locale/tbx/grassglossary_sv.tbx
    M locale/tbx/grassglossary_ta.tbx
    M locale/tbx/grassglossary_th.tbx
    M locale/tbx/grassglossary_tr.tbx
    M locale/tbx/grassglossary_uk.tbx
    M locale/tbx/grassglossary_vi.tbx
    M locale/tbx/grassglossary_zh_Hans.tbx
    A locale/tbx/grassglossary_zh_Hant.tbx
    M locale/templates/grasslibs.pot
    M locale/templates/grassmods.pot
    M locale/templates/grasswxpy.pot
    M man/CMakeLists.txt
    M man/Makefile
    M man/build.py
    A man/build_manpages.py
    M man/build_rest.py
    M man/mkdocs/docs/development_intro.md
    M man/mkdocs/mkdocs.yml
    A man/mkdocs/overrides/main.html
    M man/mkdocs/requirements.txt
    M misc/CMakeLists.txt
    M ps/CMakeLists.txt
    M pyproject.toml
    M python/grass/CMakeLists.txt
    M python/grass/app/cli.py
    M python/grass/app/tests/grass_app_cli_test.py
    M python/grass/docs/Makefile
    M python/grass/docs/_templates/layout.html.template
    M python/grass/docs/conf.py
    M python/grass/docs/src/gunittest_running_tests.rst
    M python/grass/docs/src/gunittest_testing.rst
    M python/grass/docs/src/index.rst
    M python/grass/docs/src/pygrass_gis.rst
    M python/grass/docs/src/pygrass_index.rst
    M python/grass/docs/src/pygrass_messages.rst
    M python/grass/docs/src/pygrass_modules.rst
    M python/grass/docs/src/pygrass_raster.rst
    M python/grass/docs/src/pygrass_vector.rst
    M python/grass/docs/src/script_intro.rst
    M python/grass/docs/src/temporal_framework.rst
    M python/grass/grassdb/data.py
    M python/grass/grassdb/manage.py
    M python/grass/gunittest/case.py
    M python/grass/gunittest/loader.py
    M python/grass/gunittest/multirunner.py
    M python/grass/gunittest/reporters.py
    M python/grass/gunittest/runner.py
    M python/grass/imaging/images2avi.py
    M python/grass/pydispatch/dispatcher.py
    R python/grass/pygrass/CMakeLists.txt
    M python/grass/pygrass/modules/grid/grid.py
    M python/grass/pygrass/modules/interface/flag.py
    M python/grass/pygrass/modules/interface/module.py
    M python/grass/pygrass/modules/interface/parameter.py
    M python/grass/pygrass/modules/interface/read.py
    M python/grass/pygrass/raster/abstract.py
    M python/grass/pygrass/raster/category.py
    M python/grass/pygrass/rpc/base.py
    M python/grass/pygrass/vector/geometry.py
    M python/grass/pygrass/vector/table.py
    M python/grass/script/__init__.py
    M python/grass/script/core.py
    M python/grass/script/db.py
    M python/grass/script/raster.py
    M python/grass/script/setup.py
    M python/grass/script/task.py
    A python/grass/script/tests/grass_script_create_mapset_test.py
    M python/grass/script/tests/grass_script_raster_region_test.py
    M python/grass/script/utils.py
    M python/grass/script/vector.py
    M python/grass/semantic_label/reader.py
    M python/grass/temporal/Makefile
    M python/grass/temporal/__init__.py
    M python/grass/temporal/abstract_space_time_dataset.py
    M python/grass/temporal/c_libraries_interface.py
    M python/grass/temporal/core.py
    M python/grass/temporal/gui_support.py
    M python/grass/temporal/list_stds.py
    M python/grass/temporal/metadata.py
    M python/grass/temporal/register.py
    M python/grass/temporal/space_time_datasets.py
    M python/grass/temporal/stds_import.py
    A python/grass/temporal/tests/grass_temporal_core_init_skip_db_test.py
    A python/grass/temporal/tests/grass_temporal_datetime_math_test.py
    A python/grass/temporal/tests/grass_temporal_granularity_test.py
    A python/grass/temporal/tests/grass_temporal_gui_support_test.py
    A python/grass/temporal/tests/grass_temporal_map_metadata_test.py
    A python/grass/temporal/tests/grass_temporal_spatial_extent_test.py
    A python/grass/temporal/tests/grass_temporal_topology_test.py
    R python/grass/temporal/unit_tests.py
    M python/grass/tools/session_tools.py
    M python/grass/utils/download.py
    A python/grass/utils/tests/grass_utils_download_test.py
    M python/libgrass_interface_generator/CMakeLists.txt
    M python/libgrass_interface_generator/libgrass__init__.py
    M raster/CMakeLists.txt
    M raster/r.coin/make_coin.c
    M raster/r.coin/tests/test_coin.py
    M raster/r.colors.out/CMakeLists.txt
    M raster/r.colors/CMakeLists.txt
    A raster/r.cross/tests/test_r_cross.py
    R raster/r.cross/testsuite/test_cross.py
    M raster/r.geomorphon/Makefile
    A raster/r.geomorphon/benchmark/benchmark_r_geomorphon.py
    M raster/r.geomorphon/local_proto.h
    M raster/r.geomorphon/main.c
    M raster/r.geomorphon/memory.c
    M raster/r.geomorphon/pattern.c
    M raster/r.geomorphon/r.geomorphon.md
    A raster/r.geomorphon/tests/conftest.py
    A raster/r.geomorphon/tests/r_geomorphon_test.py
    R raster/r.geomorphon/testsuite/test_r_geom.py
    M raster/r.in.gdal/main.c
    M raster/r.in.pdal/info.cpp
    M raster/r.in.pdal/info.h
    M raster/r.in.pdal/main.cpp
    M raster/r.in.pdal/projection.c
    M raster/r.in.pdal/r.in.pdal.html
    M raster/r.in.pdal/r.in.pdal.md
    A raster/r.in.pdal/testsuite/data/points_3358.las
    A raster/r.in.pdal/testsuite/data/points_6346.las
    A raster/r.in.pdal/testsuite/test_r_in_pdal_extent.py
    M raster/r.li/CMakeLists.txt
    M raster/r.mapcalc/CMakeLists.txt
    A raster/r.mapcalc/tests/r_mapcalc_rand_seed_test.py
    M raster/r.mapcalc/testsuite/test_r_mapcalc.py
    M raster/r.mapcalc/testsuite/test_r_mapcalc_parallel.py
    A raster/r.null/tests/r_null_test.py
    R raster/r.null/testsuite/test_r_null.py
    M raster/r.out.vtk/writeascii.c
    M raster/r.param.scale/Makefile
    A raster/r.param.scale/benchmark/benchmark_r_param_scale_nprocs.py
    M raster/r.param.scale/close_down.c
    M raster/r.param.scale/find_normal.c
    M raster/r.param.scale/interface.c
    M raster/r.param.scale/main.c
    M raster/r.param.scale/open_files.c
    M raster/r.param.scale/param.h
    M raster/r.param.scale/process.c
    M raster/r.param.scale/r.param.scale.md
    M raster/r.param.scale/tests/r_param_scale_test.py
    A raster/r.proj/tests/conftest.py
    A raster/r.proj/tests/r_proj_methods_test.py
    A raster/r.proj/tests/r_proj_output_test.py
    R raster/r.proj/testsuite/test_rproj.py
    M raster/r.resamp.stats/Makefile
    A raster/r.resamp.stats/benchmark/benchmark_r_resamp_stats_nprocs.py
    M raster/r.resamp.stats/main.c
    M raster/r.resamp.stats/r.resamp.stats.html
    M raster/r.resamp.stats/r.resamp.stats.md
    A raster/r.resamp.stats/testsuite/test_r_resamp_stats.py
    M raster/r.sim/CMakeLists.txt
    A raster/r.sim/r.sim.water/r.sim.water.ipynb
    M raster/r.sim/r.sim.water/testsuite/data/depth_complex.pack
    A raster/r.sim/r.sim.water/testsuite/data/depth_infil.pack
    M raster/r.sim/r.sim.water/testsuite/data/discharge_complex.pack
    M raster/r.sim/r.sim.water/testsuite/test_r_sim_water.py
    M raster/r.sim/simlib/hydro.c
    M raster/r.sim/simlib/input.c
    M raster/r.spread/CMakeLists.txt
    M raster/r.stats/stats.c
    M raster/r.sunmask/solpos00.c
    A raster/r.timestamp/tests/conftest.py
    A raster/r.timestamp/tests/r_timestamp_test.py
    M raster/r.to.rast3elev/main.c
    M raster/r.univar/CMakeLists.txt
    M raster/r.viewshed/grass.cpp
    M raster/r.watershed/CMakeLists.txt
    M raster/r.watershed/ram/init_vars.c
    M raster/r.watershed/seg/init_vars.c
    M raster3d/CMakeLists.txt
    M raster3d/r3.flow/CMakeLists.txt
    M raster3d/r3.in.v5d/main.c
    M raster3d/r3.out.v5d/main.c
    M raster3d/r3.out.vtk/writeVTKData.c
    M scripts/CMakeLists.txt
    M scripts/Makefile
    M scripts/d.correlate/d.correlate.py
    A scripts/d.correlate/tests/d_correlate_test.py
    M scripts/g.download.project/g.download.project.html
    M scripts/g.download.project/g.download.project.md
    M scripts/g.extension/g.extension.py
    M scripts/g.extension/testsuite/data/sample_modules/r.plus.example/CMakeLists.txt
    M scripts/g.extension/testsuite/test_addons_download.py
    M scripts/g.extension/testsuite/test_addons_modules.py
    M scripts/i.spectral/i.spectral.py
    A scripts/i.spectral/tests/i_spectral_test.py
    M scripts/r.in.srtm/r.in.srtm.py
    M scripts/r.in.wms/wms_cap_parsers.py
    M scripts/r.reclass.area/r.reclass.area.html
    M scripts/r.reclass.area/r.reclass.area.md
    M scripts/r.reclass.area/r.reclass.area.py
    M scripts/r.reclass.area/testsuite/test_r_reclass_area.py
    M scripts/r.reclass.area/testsuite/testrra.py
    M scripts/r.semantic.label/r.semantic.label.py
    A scripts/r.semantic.label/tests/r_semantic_label_test.py
    M scripts/r.unpack/r.unpack.py
    A scripts/v.geometry/Makefile
    A scripts/v.geometry/tests/conftest.py
    A scripts/v.geometry/tests/v_geometry_test.py
    A scripts/v.geometry/v.geometry.html
    A scripts/v.geometry/v.geometry.md
    A scripts/v.geometry/v.geometry.py
    M scripts/v.unpack/v.unpack.py
    M temporal/CMakeLists.txt
    M temporal/t.connect/main.c
    M temporal/t.connect/t.connect.html
    M temporal/t.connect/t.connect.md
    M temporal/t.connect/tests/conftest.py
    M temporal/t.connect/tests/test_t_connect.py
    A temporal/t.info/tests/conftest.py
    A temporal/t.info/tests/test_t_info_backend.py
    A temporal/t.info/tests/test_t_info_str3ds.py
    A temporal/t.info/tests/test_t_info_strds.py
    A temporal/t.info/tests/test_t_info_stvds.py
    R temporal/t.info/testsuite/test.t.info.sh
    M temporal/t.list/t.list.md
    M temporal/t.list/t.list.py
    M temporal/t.list/tests/conftest.py
    M temporal/t.list/tests/test_t_list.py
    M temporal/t.rast.import/t.rast.import.py
    R temporal/t.rast.import/test.t.rast.import.relative.sh
    R temporal/t.rast.import/test.t.rast.import.relative.with.semantic.label.sh
    R temporal/t.rast.import/test.t.rast.import.sh
    R temporal/t.rast.import/test.t.rast.import_locations.sh
    A temporal/t.rast.import/tests/conftest.py
    A temporal/t.rast.import/tests/data/precip_2000.tar.bzip2
    A temporal/t.rast.import/tests/t_rast_import_test.py
    R temporal/t.rast.import/testsuite/data/precip_2000.tar.bzip2
    R temporal/t.rast.import/testsuite/test_temporal_rast_import.py
    M temporal/t.rast.list/t.rast.list.py
    M temporal/t.rast.list/tests/t_rast_list_test.py
    M temporal/t.rast3d.univar/t.rast3d.univar.py
    M temporal/t.rast3d.univar/testsuite/test_t_rast3d_univar.py
    M temporal/t.register/t.register.html
    M temporal/t.register/t.register.md
    R temporal/t.register/test.t.register.raster.file.reltime.sh
    A temporal/t.register/tests/conftest.py
    A temporal/t.register/tests/t_register_file_test.py
    M temporal/t.vect.db.select/t.vect.db.select.md
    M temporal/t.vect.db.select/t.vect.db.select.py
    M temporal/t.vect.db.select/tests/t_vect_db_select_test.py
    A temporal/t.vect.import/tests/conftest.py
    A temporal/t.vect.import/tests/t_vect_import_test.py
    R temporal/t.vect.import/testsuite/test.t.vect.import.sh
    M temporal/t.vect.list/tests/t_vect_list_test.py
    M testsuite/README.md
    M utils/CMakeLists.txt
    M utils/Makefile
    A utils/find_missing_toolboxes.py
    A utils/g.md2man/Makefile
    A utils/g.md2man/g.md2man.py
    A utils/g.md2man/gmd.py
    A utils/g.md2man/tests/g_md2man_test.py
    M utils/merge_sitemaps.py
    M utils/mkdocs.py
    M utils/mkhtml.py
    A utils/test_merge_sitemaps.py
    M vector/CMakeLists.txt
    M vector/Makefile
    M vector/v.class/main.c
    M vector/v.class/tests/test_v_class.py
    M vector/v.lrs/CMakeLists.txt
    A vector/v.ppa/Makefile
    A vector/v.ppa/doc_figures.py
    A vector/v.ppa/f_function.c
    A vector/v.ppa/g_function.c
    A vector/v.ppa/k_function.c
    A vector/v.ppa/local_proto.h
    A vector/v.ppa/main.c
    A vector/v.ppa/result.c
    A vector/v.ppa/tests/conftest.py
    A vector/v.ppa/tests/v_ppa_test.py
    A vector/v.ppa/v.ppa.html
    A vector/v.ppa/v.ppa.md
    A vector/v.ppa/v_ppa_f.png
    A vector/v.ppa/v_ppa_g.png
    A vector/v.ppa/v_ppa_k.png
    A vector/v.ppa/v_ppa_l.png
    A vector/v.ppa/v_ppa_patterns.png
    M vector/v.proj/main.c
    A vector/v.proj/tests/conftest.py
    A vector/v.proj/tests/v_proj_test.py
    A vector/v.proj/tests/v_proj_wind_override_test.py
    M vector/v.vol.rst/user3.c
    M visualization/ximgview/color.c

  Log Message:
  -----------
  Merge branch 'main' into renovate/main-ubuntu-26.x


Compare: https://github.com/OSGeo/grass/compare/d812a037bfd6...b7785d3a9d8d

To unsubscribe from these emails, change your notification settings at https://github.com/OSGeo/grass/settings/notifications


More information about the grass-commit mailing list