28.08.2026 Release

This release improves plant search and scraper data. It also fixes map editor bugs and updates CI.

Highlights

  • Added informational icons on selected attributes to plant search results #2832 (Lea Birringer)

Landing Page

  • Embedded language-specific teaser video from Nextcloud on the landing page #2850. (Johannes Garz)

Important Changes for Developers

  • Reduced dependency between scraper steps #2089. (Christoph Schreiner)

Meetings

  • Meeting Agenda&Notes for 20.07.2026 9:00 (Markus Raab, Mo)
  • Meeting Agenda&Notes for 27.07.2026 9:00 (Markus Raab, Patrick Grassl)
  • Meeting Agenda&Notes for 03.08.2026 9:00 (Markus Raab, Elia Wenty)
  • Added meeting notes for scraper team meeting on 21.07.2026 (Christoph Schreiner)
  • Meeting Agenda&Notes for 10.08.2026 9:00 (Markus Raab, Lea Birringer)
  • Meeting Agenda&Notes for 17.08.2026 9:00 (Markus Raab, Moritz Muth)

Compatibility

Migrations

  • MIGRATION: Added database constraints for plant unique names (Christoph Schreiner)
  • Migration for supporting ambivalent temporal relations in temporal effect enum #1975 (Lea Birringer)
  • Migration for adding Reinsaat URL to plants #2849 (Vseslav Levchenko)
  • Migration for changing plant attributes functions, warning and edible*parts from text to enum arrays #2832 *(Lea Birringer)_
  • Migration: Expanded upon database constraint for hybrid unique names #2803 (Lea Birringer)

Scraper Data

  • Load manual genus to family mapping from csv instead of hardcoding it #1738 (Lea Birringer)
  • Added manual plant addition to scraper #2610 (Vseslav Levchenko)
  • Added heatmap for Copy&Paste of plantings #2080 (Lea Birringer)
  • Improved scraper logging #2067 (Vseslav Levchenko)
  • Fixed leftover scraper logging inconsistencies, renamed data_issue logging level to discrepancy #2806, #2802 (Vseslav Levchenko)
  • Added unit tests & code branch comparison to scraper #1423 (Vseslav Levchenko)
  • Added support for ambivalent temporal relations to scraper #1975 (Lea Birringer)
  • Moved text capitalization of common names from frontend to scraper and separated German and English capitalization rules #2431 (Lea Birringer)
  • Added warning logging level #2821 (Vseslav Levchenko)
  • Made scraper insert Reinsaat URL into database #2849 (Vseslav Levchenko)
  • Added plant amount logging for hierarchy and override steps #2827 (Vseslav Levchenko)
  • Added different cultivation methods & winter harvest boolean to scraper #2828 (Vseslav Levchenko)
  • Added plant description from Reinsaat to scraper #2828 (Vseslav Levchenko)
  • Updated from machine_cultivation_possible to professional/market/home gardener variety attribute #2828 (Vseslav Levchenko)
  • Fixed Reinsaat fetching bug #2853 (Vseslav Levchenko)
  • Include temporal genus/family relationships #1931 (Lea Birringer)
  • Fix temporal relations being treated as bidirectional #1931 (Lea Birringer)
  • Changed insertion of strings into the database to arrays of enums for plant attributes functions, warning and edible*parts #2832 *(Lea Birringer)_
  • Fixed conversion of null values to 0 for attribute "spread" #2667 (Lea Birringer)

Frontend

  • Show map link destinations on hover #1880 (Ines Schnabl)
  • Fixed area of plantings being created displaced, off-screen or duplicated when drawn starting on top of an existing planting or plant #2269 (Elia Wenty)
  • Show plant family in left sidebar if no other common criteria is found for plant name #1992 (Vseslav Levchenko)
  • Show lowest common hierarchy level for plant name #1992 (Vseslav Levchenko)
  • Fixed negative, zero or empty values for planting length/width not being rejected and instead breaking the map, and fixed the input not being marked invalid when this happened #2771 (Elia Wenty)
  • Changed text string display of plant attributes functions, warning and edible*parts to enum representation #2832 *(Lea Birringer)_
  • Added German translations for plant attributes functions, warning and edible*parts #2832 *(Lea Birringer)_
  • Adjusted plant width getter for area plantings to default to default value instead of min value #2667 (Lea Birringer)

Bug Fixes

  • Fixed displayed number of plantings of same type in status panel not updating when placing a plant #2799 (Lea Birringer)
  • Fixed heatmap flickering bug #2840 (Vseslav Levchenko)
  • Fixed middle mouse button placing copied elements while in pasting mode #2714 (Lea Birringer)

Development

  • Update of React/Konva resulting in node modules needing to change with "rm -rf node modules" and reinstalled with "npm ci" #2317 (Ines Schnabl)

Libraries

  • Update and migrate TanStack Query from version 4 to 5 1723 (Ben Schlegel, Ines Schnabl and Johannes Garz)
  • Update node.js to v26. Developers need to upgrade their local Node.js installation to v26.5.0 and npm to v11.17.0 #2011 (Ines Schnabl)
  • Updated react-shepherd from 7.0.4 to 7.0.6 #2847. (Elia Wenty)
  • Added react-shepherd to the Vitest server.deps.inline list in vite.config.ts #2847. (Elia Wenty)

Backend

  • Added error ratio calculation to the fill & error ratio script; updated backend/src/model/entity.rs with the new error ratios #2764 (Vseslav Levchenko)
  • Added enums for plant attribute functions, warning and edible*parts #2832 *(Lea Birringer)_

Features

  • Added support for ambivalent temporal relationships to heatmap #1975 (Lea Birringer)

Bug Fixes

  • Added secondary ordering criterion (by rank) for plant search results so that the highest rank of the same similarity score is the first result #2644 (Lea Birringer)

Libraries

  • Replaced vulnerable rsa crate with sad-rsa to mitigate timing side-channel vulnerability #2616. (Johannes Garz)

Tools

Build System

  • Fixed and refactored the .env files in .docker #2763 (Johannes Garz)

CI

  • Include Permaplant node cleanup, cleanup fixes and minor cleanup improvements #2649 (Patrick Grassl)
  • Make Jenkinsfiles environment aware #2766 (Patrick Grassl)
  • Improve state transition #2475 (Patrick Grassl)
  • Restore database state upon e2e test failure #2820 (Patrick Grassl)
  • Improve cleanup #2796 (Patrick Grassl)
  • Improved Jenkins Docker handling by improving reuse of build images within a pipeline run, preventing concurrent duplicate builds with node specific locks and labeling containers for reliable cleanup. #2796 (Patrick Grassl)
  • Implement npm dependency caching #2691 (Patrick Grassl)
  • Implement node selection policy and update node labels #2689 (Patrick Grassl)
  • Improve cleanup node selection #2689 (Patrick Grassl)

Documentation

  • Added lint rules for control flow and events#2071 (Ines Schnabl)
  • Mobile July release testing #2767 (Moritz Muth)
  • Add pipeline terminology to glossary #2752 (Patrick Grassl)
  • Moved benchmarks into tools #2148 (Ines Schnabl)
  • Added glossary entries #2755 (Ines Schnabl)
  • Added style lint #2701 (Ines Schnabl)
  • Added use case documentation for plant attribute upward propagation #1 (Vseslav Levchenko)
  • Added research docu for plant attribute propagation #2677 (Vseslav Levchenko)
  • Added decision on why plant traits are denormalized #2513 (Christoph Schreiner)
  • Added spatial indexing for the plant layer #2218 (Ines Schnabl)
  • Moved Ines to inactive on the landing page #2793 (Ines Schnabl)
  • Organized frontend guidelines #2792 (Ines Schnabl)
  • Improve line length eslint rule #2014 (Ines Schnabl)
  • Added no-magic-number rule #2014 (Ines Schnabl)
  • Added decision for frontend code quality tooling: use eslint-plugin-sonarjs instead of SonarQube/SonarCloud #2562 (Moritz Adelsberger)
  • Updated React from 18.3.1 to 19.2.8, React DOM from 18.3.1 to 19.2.8, Konva from 9.3.14 to 10.3.0, react-konva from 18.2.10 to 19.2.5, react-konva-utils from 1.0.6 to 2.0.0, react-shepherd from 4.2.0 to 7.0.4, Shepherd.js from 11.2.0 to 15.2.2, and Storybook from 8.2.7 to 8.6.18 #2317 (Ines Schnabl)
  • Added viewport culling to drawing layer #2784 (Ines Schnabl)
  • Added heuristic for the spatial indexing on the planting layer #2798 (Ines Schnabl)
  • Added decision on which approach to use for formalization of plant attributes #2819 (Lea Birringer)
  • Add CI/CD guidelines and code review checklist #2583 (Patrick Grassl)
  • Update node labels and add node policy reference #2689 (Patrick Grassl)
  • Update manual test cases for gherkin syntax guidelines #2631 (Christoph Kraus)

Tests

Manual Tests

  • Updated decision status of updating manual tests according to scraper data to 'Problem Clear' #2182 (Vseslav Levchenko)
  • Updated decision status of updating manual tests according to scraper data to 'Solutions Clear' #2182 (Vseslav Levchenko)
  • Updated decision status of updating manual tests according to scraper data #2182 (Vseslav Levchenko)
  • Add manual tests for showing the number of plants in an area planting #2667 (Lea Birringer)

E2E

  • Added e2e tests for changing the size of a planting area and rejecting non-positive width values #2771 (Elia Wenty)
  • Fixed reselecting a planting area after reload clicking its visual center, which moves when the area is resized since it is anchored at its top-left corner instead #2771 (Elia Wenty)

Statistics

  • 1129 commits from 19 contributors are included in this release.

Changes Affecting Guided Tour

  • Updated the guided tour library (react-shepherd/shepherd.js) to patch a stack exhaustion advisory in its internal deepmerge-ts dependency #2847. (Elia Wenty)

Dependencies

  • Updated frontend and backend dependencies to address security advisories found during release preparation !2450. (Paul Bachinger)
  • build(deps): replaced framer-motion with motion 12.19.1 !2405 (Renovate Bot)
  • build(deps): update debian digest from 9bb8a36 to 38a76d0 (Renovate Bot)
  • build(deps): update serde from 1.0.228 to 1.0.229 !2383 (Renovate Bot)