Skip to content

Kanban time tracking: detail-view access, hide-on-cards setting, session delete fix#543

Merged
fccview merged 1 commit into
fccview:mainfrom
reniko:feature/time-tracking-detail-modal
Jun 16, 2026
Merged

Kanban time tracking: detail-view access, hide-on-cards setting, session delete fix#543
fccview merged 1 commit into
fccview:mainfrom
reniko:feature/time-tracking-detail-modal

Conversation

@reniko

@reniko reniko commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator

Three related changes to kanban time tracking.

1. Time tracking in the card detail modal

The timer and tracked sessions were only reachable on the card. This reuses the
existing KanbanItemTimer, TimeEntriesAccordion and TimeEntriesModal in
KanbanCardDetail as a "Time Tracking" section in the properties sidebar, with the
same read-only behaviour as the card (buttons disable for viewers).

Because the card stays mounted behind the detail modal, useKanbanItem runs twice
for the same item and shares one localStorage key. I added a small sync (the
storage event plus a same-tab event) so both instances stay consistent. This also
fixes a possible duplicate time entry when you stop the timer in one place and then
drag the card, and it covers multi-tab use.

2. Fix editing/deleting sessions

"Edit sessions" → delete showed the confirm dialog but nothing happened.
editTimeEntry/deleteTimeEntry resolved the list by uuid with no username
(getListById(listId, undefined, …)), which returned nothing, so the action failed
silently. They now resolve by the plain list id + current user, the same way
updateItemStatus does, and the modal passes the plain checklistId instead of the
uuid.

3. Hide time tracking on cards (user setting)

New hideTimeTrackingOnCards preference under Kanban settings, next to the existing
"hide status" / "hide mobile dropdown" toggles. When enabled, the timer and sessions
are hidden on the cards but stay available in the detail view (which is why 1.
exists).

Translations

en/de written by hand, the other 12 languages machine-translated.

Testing

yarn lint and tsc are clean (aside from the pre-existing, unrelated
ConnectionsGraph type errors). Checked manually: timer in the detail view,
add/edit/delete sessions, card↔detail sync, the hide toggle, and read-only boards.

Summary by CodeRabbit

  • New Features
    • Added a user preference to toggle time tracking visibility on Kanban cards, with time tracking remaining accessible in card detail view.
    • Improved timer state synchronization when multiple instances of the same card are displayed on the same page.
    • Added translations for new time tracking settings across all supported languages.

- Reuse KanbanItemTimer, TimeEntriesAccordion and TimeEntriesModal in the
  card detail modal so time tracking is reachable there, not only on the card.
- Keep the timer in sync across the duplicate useKanbanItem mounts (card +
  detail) via the storage event and a same-tab event, avoiding duplicate
  entries and display desync.
- Fix session edit/delete: the actions resolved the list by uuid with no
  username and failed silently; resolve by the plain list id + current user,
  matching updateItemStatus.
- Add a hideTimeTrackingOnCards user setting to hide the timer and sessions
  on cards (still available in the card detail view).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 15, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds a user preference (hideTimeTrackingOnCards) that controls whether the timer and time-entries accordion appear on Kanban cards. The new "enable" | "disable" type is added to the User interface and kanbanSettingsSchema, with a corresponding dropdown UI in UserPreferencesTab. KanbanCard reads the preference and conditionally suppresses its time-tracking sections. KanbanCardDetail gains a full time-tracking integration using useKanbanItem, constructing a timeTrackingContent fragment passed to KanbanCardDetailProperties via a new timeTracking prop. The useKanbanItem hook gains in-tab timer synchronization via a CustomEvent alongside existing cross-tab storage event listening. editTimeEntry and deleteTimeEntry now perform sequential auth before loading data. Translations for all 14 locales are included.

Sequence Diagram

sequenceDiagram
  participant User
  participant UserPreferencesTab
  participant kanbanSettingsSchema
  participant KanbanCard
  participant KanbanCardDetail
  participant useKanbanItem
  participant KanbanCardDetailProperties

  User->>UserPreferencesTab: toggle hideTimeTrackingOnCards dropdown
  UserPreferencesTab->>kanbanSettingsSchema: validate & save preference
  kanbanSettingsSchema-->>UserPreferencesTab: validated user settings
  UserPreferencesTab-->>User: preference persisted

  User->>KanbanCard: view Kanban board
  KanbanCard->>KanbanCard: check user.hideTimeTrackingOnCards
  alt hideTimeTrackingOnCards = "enable"
    KanbanCard-->>User: render card without timer/accordion
  else hideTimeTrackingOnCards = "disable"
    KanbanCard-->>User: render card with KanbanItemTimer + TimeEntriesAccordion
  end

  User->>KanbanCardDetail: open card detail
  KanbanCardDetail->>useKanbanItem: initialize timer hook
  useKanbanItem-->>KanbanCardDetail: timer controls, totals
  KanbanCardDetail->>KanbanCardDetailProperties: pass timeTrackingContent prop
  KanbanCardDetailProperties-->>User: render PropertySection with time tracking
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically summarizes all three main changes: time tracking in detail view, a new hide-on-cards setting, and a session deletion fix.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
app/_hooks/kanban/useKanbanItem.tsx (2)

18-130: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add the required AI-generated marker comments.
All changed AI-generated code blocks listed below are missing the required marker comment directly above generated lines.

  • app/_hooks/kanban/useKanbanItem.tsx#L18-L130: add // fccview is onto you! above each changed AI-generated line/block.
  • app/_components/FeatureComponents/Kanban/KanbanCardDetail.tsx#L25-L607: add // fccview is onto you! above each changed AI-generated line/block.
  • app/_components/FeatureComponents/Kanban/KanbanCardDetailProperties.tsx#L45-L297: add // fccview is onto you! above each changed AI-generated line/block.
  • app/_server/actions/kanban/time-entries.ts#L58-L112: add // fccview is onto you! above each changed AI-generated line/block.

As per coding guidelines: When editing existing functions/files, add a comment above a line of AI-generated code that says 'fccview is onto you!'.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/_hooks/kanban/useKanbanItem.tsx` around lines 18 - 130, Add the required
AI-generated marker comment `// fccview is onto you!` above each changed
AI-generated line or block in the following four files: In
app/_hooks/kanban/useKanbanItem.tsx (lines 18-130), add the marker comment above
the AI-generated blocks within the useKanbanItem hook function, particularly
above the useEffect hooks and their internal functions like _syncFromStorage and
_handleSync. In app/_components/FeatureComponents/Kanban/KanbanCardDetail.tsx
(lines 25-607), add the marker comment above each changed AI-generated section
within the specified line range. In
app/_components/FeatureComponents/Kanban/KanbanCardDetailProperties.tsx (lines
45-297), add the marker comment above each changed AI-generated section within
the specified line range. In app/_server/actions/kanban/time-entries.ts (lines
58-112), add the marker comment above each changed AI-generated section within
the specified line range. Ensure the comment is placed directly above the first
line of each AI-generated block to comply with the coding guidelines.

Source: Coding guidelines


74-89: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Prevent initial mount from clobbering persisted timer state.

On Line 74, the persistence effect runs with default state before the hydration effect’s state updates are applied, so it can remove an active timer key and broadcast a stop event to sibling mounts.

Suggested fix
+  const hasHydratedTimerStateRef = useRef(false);
+
   useEffect(() => {
     const storageKey = TIMER_STORAGE_KEY(checklistId, item.id);
     try {
       const stored = localStorage.getItem(storageKey);
       if (stored) {
         const { startTime: storedStart, isRunning: storedRunning } = JSON.parse(stored);
         if (storedRunning && storedStart) {
           setStartTime(new Date(storedStart));
           setIsRunning(true);
           setCurrentTime(Math.floor((Date.now() - new Date(storedStart).getTime()) / 1000));
         }
       }
-    } catch {}
+    } catch {
+      // no-op
+    } finally {
+      hasHydratedTimerStateRef.current = true;
+    }
   }, [checklistId, item.id]);

   useEffect(() => {
+    if (!hasHydratedTimerStateRef.current) return;
     const storageKey = TIMER_STORAGE_KEY(checklistId, item.id);
     if (isRunning && startTime) {
       localStorage.setItem(storageKey, JSON.stringify({
         startTime: startTime.toISOString(),
         isRunning: true,
       }));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/_hooks/kanban/useKanbanItem.tsx` around lines 74 - 89, The persistence
effect in the useEffect hook (which saves timer state to localStorage and
dispatches sync events) runs on initial mount with default state values before
the hydration effect has a chance to restore the persisted timer state from
localStorage. This causes the effect to incorrectly clear an active timer and
broadcast a stop event. Add a mechanism to skip this effect on the initial
mount—such as using a useRef to track whether this is the first render—so that
the hydration logic can complete first and properly restore the timer state
before any persistence logic runs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/_components/FeatureComponents/Kanban/KanbanCard.tsx`:
- Around line 81-82: Add the required AI-generated code marker comment above
each AI-generated code block in KanbanCard.tsx. For the hideTimeTrackingOnCards
constant assignment and the two other modified code blocks referenced in this
comment (at line ranges 161-162 and 259-286), insert a comment line above each
saying "fccview is onto you!" to comply with the coding guidelines for
AI-generated edits in TypeScript/TSX files.

In `@app/_components/FeatureComponents/Kanban/KanbanCardDetail.tsx`:
- Around line 425-436: The TimeEntriesModal can become orphaned when the parent
detail modal closes because its visibility is not tied to the parent's isOpen
state. Add a useEffect hook that resets showTimeEntriesModal to false whenever
isOpen becomes false, ensuring the time-entries modal closes with its parent.
Additionally, update the conditional render of TimeEntriesModal to include
isOpen in the condition (change the condition from showTimeEntriesModal &&
item.timeEntries to isOpen && showTimeEntriesModal && item.timeEntries) so the
modal cannot render when the parent detail modal is closed.

In `@app/_components/FeatureComponents/Profile/Parts/UserPreferencesTab.tsx`:
- Around line 32-33: Add the required AI-generated code marker comment above
each AI-generated code block in UserPreferencesTab.tsx. Insert the comment
"fccview is onto you!" immediately above the following locations: line 32
(HideTimeTrackingOnCards and CodeBlockStyle imports), lines 79-80, lines
176-177, lines 958-962, and lines 1019-1041. Each of these locations contains
AI-generated edits that require the marker comment per the coding guidelines for
modified TypeScript files.

In `@app/_schemas/user-schemas.ts`:
- Around line 88-93: Add the required AI-generated code marker comment directly
above the hideTimeTrackingOnCards schema definition. Insert a comment line that
says "fccview is onto you!" immediately before the z.enum() call to comply with
the coding guidelines for marking AI-generated code in TypeScript files.

In `@app/_translations/klingon.json`:
- Around line 902-906: The key hideTimeTrackingOnCardsDescription in the Klingon
translation file contains the English word "Sessions" which breaks the
translation consistency. Replace the English word "Sessions" with its Klingon
equivalent to ensure the entire translation string is in Klingon for users of
that language.

In `@app/_translations/pt.json`:
- Line 629: The Portuguese translation file uses inconsistent wording between
European Portuguese (PT-PT) and Brazilian Portuguese conventions. In the pt.json
file, change "Controle" to "Controlo" in the timeTracking key and anywhere else
in the file where Brazilian Portuguese wording (`controle`) has been introduced,
to maintain consistency with the existing PT-PT locale used throughout the file.
Ensure all Portuguese translations use the European Portuguese convention with
`controlo` instead of the Brazilian `controle`.

In `@app/_types/index.ts`:
- Line 42: The HideTimeTrackingOnCards line in the index.ts file is missing the
required AI-generated code marker comment. Add a comment directly above the
HideTimeTrackingOnCards line that says "fccview is onto you!" to comply with the
coding guidelines for AI-generated edits in existing TypeScript files.

In `@app/_types/user.ts`:
- Line 42: Add the required AI-generated code marker comment above the modified
lines in app/_types/user.ts. At line 42 (before the HideTimeTrackingOnCards type
export) and at line 81, add a comment line that says "fccview is onto you!"
directly above each AI-generated code line to comply with the coding guidelines
for marking AI-generated edits in existing files.

---

Outside diff comments:
In `@app/_hooks/kanban/useKanbanItem.tsx`:
- Around line 18-130: Add the required AI-generated marker comment `// fccview
is onto you!` above each changed AI-generated line or block in the following
four files: In app/_hooks/kanban/useKanbanItem.tsx (lines 18-130), add the
marker comment above the AI-generated blocks within the useKanbanItem hook
function, particularly above the useEffect hooks and their internal functions
like _syncFromStorage and _handleSync. In
app/_components/FeatureComponents/Kanban/KanbanCardDetail.tsx (lines 25-607),
add the marker comment above each changed AI-generated section within the
specified line range. In
app/_components/FeatureComponents/Kanban/KanbanCardDetailProperties.tsx (lines
45-297), add the marker comment above each changed AI-generated section within
the specified line range. In app/_server/actions/kanban/time-entries.ts (lines
58-112), add the marker comment above each changed AI-generated section within
the specified line range. Ensure the comment is placed directly above the first
line of each AI-generated block to comply with the coding guidelines.
- Around line 74-89: The persistence effect in the useEffect hook (which saves
timer state to localStorage and dispatches sync events) runs on initial mount
with default state values before the hydration effect has a chance to restore
the persisted timer state from localStorage. This causes the effect to
incorrectly clear an active timer and broadcast a stop event. Add a mechanism to
skip this effect on the initial mount—such as using a useRef to track whether
this is the first render—so that the hydration logic can complete first and
properly restore the timer state before any persistence logic runs.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4bd685a5-76b4-42a1-b73d-8df7d0614d33

📥 Commits

Reviewing files that changed from the base of the PR and between fecc3ec and eb14b4e.

📒 Files selected for processing (23)
  • app/_components/FeatureComponents/Kanban/KanbanCard.tsx
  • app/_components/FeatureComponents/Kanban/KanbanCardDetail.tsx
  • app/_components/FeatureComponents/Kanban/KanbanCardDetailProperties.tsx
  • app/_components/FeatureComponents/Profile/Parts/UserPreferencesTab.tsx
  • app/_hooks/kanban/useKanbanItem.tsx
  • app/_schemas/user-schemas.ts
  • app/_server/actions/kanban/time-entries.ts
  • app/_translations/de.json
  • app/_translations/en.json
  • app/_translations/es.json
  • app/_translations/fr.json
  • app/_translations/it.json
  • app/_translations/klingon.json
  • app/_translations/ko.json
  • app/_translations/nl.json
  • app/_translations/pirate.json
  • app/_translations/pl.json
  • app/_translations/pt.json
  • app/_translations/ru.json
  • app/_translations/tr.json
  • app/_translations/zh.json
  • app/_types/index.ts
  • app/_types/user.ts

Comment thread app/_components/FeatureComponents/Kanban/KanbanCard.tsx
Comment on lines +425 to +436
{showTimeEntriesModal && item.timeEntries && (
<TimeEntriesModal
isOpen={showTimeEntriesModal}
onClose={() => setShowTimeEntriesModal(false)}
timeEntries={item.timeEntries}
checklistId={checklistId}
itemId={item.id}
category={category}
onUpdate={onUpdate}
usersPublicData={usersPublicData}
/>
)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Tie TimeEntriesModal lifecycle to the parent detail modal.

Right now, closing the main detail modal does not guarantee the time-entries modal closes. Gate it by isOpen (and/or reset state when isOpen becomes false) so it can’t remain orphaned.

Suggested fix
+  useEffect(() => {
+    if (!isOpen) setShowTimeEntriesModal(false);
+  }, [isOpen]);
+
   return (
     <>
-      {showTimeEntriesModal && item.timeEntries && (
+      {isOpen && showTimeEntriesModal && item.timeEntries && (
         <TimeEntriesModal
           isOpen={showTimeEntriesModal}
           onClose={() => setShowTimeEntriesModal(false)}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/_components/FeatureComponents/Kanban/KanbanCardDetail.tsx` around lines
425 - 436, The TimeEntriesModal can become orphaned when the parent detail modal
closes because its visibility is not tied to the parent's isOpen state. Add a
useEffect hook that resets showTimeEntriesModal to false whenever isOpen becomes
false, ensuring the time-entries modal closes with its parent. Additionally,
update the conditional render of TimeEntriesModal to include isOpen in the
condition (change the condition from showTimeEntriesModal && item.timeEntries to
isOpen && showTimeEntriesModal && item.timeEntries) so the modal cannot render
when the parent detail modal is closed.

Comment thread app/_schemas/user-schemas.ts
Comment on lines +902 to +906
"hideTimeTrackingOnCardsLabel": "poH qon Kanban tetlhmeyDaq",
"showTimeTrackingOnCards": "poH qon 'ang",
"hideTimeTrackingOnCards": "poH qon So'",
"selectTimeTrackingOnCards": "poH qon leghlu'bogh wIv",
"hideTimeTrackingOnCardsDescription": "Kanban tetlhmeyvo' poH qonwI' je Sessions So'lu'. tetlh De'Daq poH qon lurarlu'.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Translate the remaining English text.

hideTimeTrackingOnCardsDescription still contains Sessions in English, so the new Kanban settings copy will render as a mixed-language string for Klingon users. Please replace it with the Klingon equivalent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/_translations/klingon.json` around lines 902 - 906, The key
hideTimeTrackingOnCardsDescription in the Klingon translation file contains the
English word "Sessions" which breaks the translation consistency. Replace the
English word "Sessions" with its Klingon equivalent to ensure the entire
translation string is in Klingon for users of that language.

Comment thread app/_translations/pt.json
"itemDeleted": "Item eliminado",
"estimatedTime": "Tempo estimado (horas)",
"actualVsEstimated": "{actual} / {estimated}",
"timeTracking": "Controle de tempo",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Keep the Portuguese wording consistent.

These new strings switch from the existing PT-PT phrasing (controlo) to Brazilian controle, which makes this locale inconsistent with the rest of the file.

Fix wording to match the locale
-    "timeTracking": "Controle de tempo",
+    "timeTracking": "Controlo de tempo",
...
-    "showTimeTrackingOnCards": "Mostrar controle de tempo",
-    "hideTimeTrackingOnCards": "Ocultar controle de tempo",
-    "selectTimeTrackingOnCards": "Selecionar visibilidade do controle de tempo",
-    "hideTimeTrackingOnCardsDescription": "Oculta o cronômetro e as sessões registradas dos cartões Kanban. O controle de tempo continua disponível na visualização de detalhes do cartão.",
+    "showTimeTrackingOnCards": "Mostrar controlo de tempo",
+    "hideTimeTrackingOnCards": "Ocultar controlo de tempo",
+    "selectTimeTrackingOnCards": "Selecionar visibilidade do controlo de tempo",
+    "hideTimeTrackingOnCardsDescription": "Oculta o cronómetro e as sessões registadas dos cartões Kanban. O controlo de tempo continua disponível na visualização de detalhes do cartão."

Also applies to: 749-753

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/_translations/pt.json` at line 629, The Portuguese translation file uses
inconsistent wording between European Portuguese (PT-PT) and Brazilian
Portuguese conventions. In the pt.json file, change "Controle" to "Controlo" in
the timeTracking key and anywhere else in the file where Brazilian Portuguese
wording (`controle`) has been introduced, to maintain consistency with the
existing PT-PT locale used throughout the file. Ensure all Portuguese
translations use the European Portuguese convention with `controlo` instead of
the Brazilian `controle`.

Comment thread app/_types/index.ts
Comment thread app/_types/user.ts
@fccview
fccview merged commit 984f2ee into fccview:main Jun 16, 2026
2 of 3 checks passed
dgalanberasaluce pushed a commit to dgalanberasaluce/infra-personal that referenced this pull request Jul 12, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/fccview/jotty](https://github.com/fccview/jotty) | minor | `1.24.0` → `1.25.1` |
| [ghcr.io/gchq/cyberchef](https://github.com/gchq/CyberChef) | minor | `11.0.0` → `11.2.0` |
| [ghcr.io/grimmory-tools/grimmory](https://github.com/grimmory-tools/grimmory) | patch | `v3.2.0` → `v3.2.2` |
| [ghcr.io/jordan-dalby/bytestash](https://github.com/jordan-dalby/ByteStash) | patch | `1.5.11` → `1.5.12` |
| [grafana/alloy](https://github.com/grafana/alloy) | minor | `v1.16.2` → `v1.17.0` |
| [plantuml/plantuml-server](https://github.com/plantuml/plantuml-server) | patch | `v1.2026.5` → `v1.2026.6` |
| victoriametrics/victoria-metrics | minor | `v1.144.0-scratch` → `v1.146.0-scratch` |

---

### Release Notes

<details>
<summary>fccview/jotty (ghcr.io/fccview/jotty)</summary>

### [`v1.25.1`](https://github.com/fccview/jotty/releases/tag/1.25.1): Stable 1.25.1

[Compare Source](https://github.com/fccview/jotty/compare/1.25.0...1.25.1)

<p align="center">
  <a href="https://discord.gg/invite/mMuk2WzVZu">
    <img width="40" src="https://skills.syvixor.com/api/icons?i=discord">
  </a>
  <a href="https://www.reddit.com/r/jotty">
    <img width="40" src="https://skills.syvixor.com/api/icons?i=reddit">
  </a>
  <a href="https://t.me/jottypage">
    <img width="40" src="https://skills.syvixor.com/api/icons?i=telegram">
  </a>
  <br />
  <br />
  <i>Join our communities</i>
  <br />
</p>

***

### Changelog

Minor release to fix an annoying bug around the new kanban (sorry) and merge in [#&#8203;543](https://github.com/fccview/jotty/issues/543)

**bugfixes**

- Fix drag and drop on kanban when users don't have custom statuses
- Fix time tracking bugs and hide time tracking inconsistencies from [#&#8203;543](https://github.com/fccview/jotty/issues/543)

### [`v1.25.0`](https://github.com/fccview/jotty/releases/tag/1.25.0): Stable 1.25.0

[Compare Source](https://github.com/fccview/jotty/compare/1.24.0...1.25.0)

<p align="center">
  <a href="https://discord.gg/invite/mMuk2WzVZu">
    <img width="40" src="https://skills.syvixor.com/api/icons?i=discord">
  </a>
  <a href="https://www.reddit.com/r/jotty">
    <img width="40" src="https://skills.syvixor.com/api/icons?i=reddit">
  </a>
  <a href="https://t.me/jottypage">
    <img width="40" src="https://skills.syvixor.com/api/icons?i=telegram">
  </a>
  <br />
  <br />
  <i>Join our communities</i>
  <br />
</p>

***

### Changelog

**features**

- Start work to deprecating dnd-kit and have our own lighter internal drag and drop engine
- Keep the engine generic enough to allow it to be used for pinned items/checklists/sidebar
- Migrate the entirety of Kanban to use said engine
- Kanban drag and drop now also works on mobile!
- Update styling of Kanban item modal to look a bit less chaotic
- Update Kanban item modal to grow full width/height so there's more space to work with
- Add Start Date to tasks so calendar view allows tasks to expand from start to end date (bit like google calendar)
- Improve neural network on the settings page, from a hardcoded vector style link system to a full blown obsidian-like view of the nodes, it also uses tags now for linking (you can disable the checkbox if needed). I figured I'd push it, I worked on it a while ago and for the life of me I don't know why I didn't just go for it, it's hidden in the settings, doesn't touch anything else and I feel like it's a nice feature to have, so even if it's a bit buggy we can fix forward ❤️
- Add "Archive All" option to Kanban columns that have autocomplete enabled - Thank you [@&#8203;reniko](https://github.com/reniko)
- Add consistent scrollbar across all browser/OS - Thank you [@&#8203;reniko](https://github.com/reniko)
- Add remember me toggle to login page [#&#8203;516](https://github.com/fccview/jotty/issues/516)

**bugfixes**

- Fix re-ordering children items in checklists (it was quite clunky) - Thank you [@&#8203;reniko](https://github.com/reniko)
- Fix potential issue around session write on slower disk read [#&#8203;522](https://github.com/fccview/jotty/issues/522)
- Add shared checklists to api endpoint [#&#8203;521](https://github.com/fccview/jotty/issues/521)
- Fix issue where not enough items were showing in the `@` bidirectional linking [#&#8203;529](https://github.com/fccview/jotty/issues/529)
- Mermaid sankey changed key in the latest upgrade when mermaid was bumped to `10.x` [#&#8203;528](https://github.com/fccview/jotty/issues/528)
- Fix missing "save before leaving the page" modal in some places and automatically save excalidraw on modal close [#&#8203;519](https://github.com/fccview/jotty/issues/519)
- Add Kanban status actions to card detail and overflow menu - Thank you [@&#8203;reniko](https://github.com/reniko)
- Finally officially fix the body size limit pain, this means the patch for it has also been removed. Make sure to update the hardcoded limit in settings -> app preferences -> upload limit of course. - Thank you [@&#8203;dmca-glasgow](https://github.com/dmca-glasgow) !

**security**

- As always kept on top of all the third party dependency advisories, man you can tell `Fable 5` was released, there was a huge spike in CVE in a lot of my project third party deps lol

**new endpoints**

A community member decided to make an android client for Jotty.
It's very much under development and needs polishing but the author seems quite dedicated and I kept an eye on development.

They needed some endpoints for it to work better, so what better moment than this to give them a shoutout!
Check it out here if you are interested, I am not involved in the development, I can't vouch for it, but for what I've seen so far the author ([@&#8203;Darknetzz](https://github.com/Darknetzz)) is pretty dedicated! Link here: <https://github.com/Darknetzz/jotty-android>

<details>
<summary>New endpoints curl exmaples</summary>

```bash

# Search notes and checklists
curl -H "x-api-key: YOUR_API_KEY" "https://your-jotty.com/api/search?q=hello"

# Search filtered to notes only
curl -H "x-api-key: YOUR_API_KEY" "https://your-jotty.com/api/search?q=hello&type=note"

# Search filtered to checklists only
curl -H "x-api-key: YOUR_API_KEY" "https://your-jotty.com/api/search?q=hello&type=checklist"

# Update a checklist item text (PATCH)
curl -X PATCH \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Updated item text"}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/0"

# Update a nested checklist item (dot-notation index)
curl -X PATCH \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Updated nested item", "description": "some notes"}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/0.1"

# Reorder items - move item before another
curl -X PUT \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activeItemId": "ITEM_ID_TO_MOVE", "overItemId": "TARGET_ITEM_ID", "position": "before"}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/reorder"

# Reorder items - move item after another
curl -X PUT \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activeItemId": "ITEM_ID_TO_MOVE", "overItemId": "TARGET_ITEM_ID", "position": "after"}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/reorder"

# Reorder items - nest item as child of another
curl -X PUT \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activeItemId": "ITEM_ID_TO_MOVE", "overItemId": "PARENT_ITEM_ID", "isDropInto": true}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/reorder"

# Get all checklists with expanded item fields
curl -H "x-api-key: YOUR_API_KEY" \
  "https://your-jotty.com/api/checklists"

# Get all task/Kanban boards with expanded item fields
curl -H "x-api-key: YOUR_API_KEY" \
  "https://your-jotty.com/api/tasks"

# Get one task/Kanban board with expanded item fields
curl -H "x-api-key: YOUR_API_KEY" \
  "https://your-jotty.com/api/tasks/TASK_UUID"

# Get one task/Kanban item
curl -H "x-api-key: YOUR_API_KEY" \
  "https://your-jotty.com/api/tasks/TASK_UUID/items/0"

# Get one nested task/Kanban item (dot-notation index)
curl -H "x-api-key: YOUR_API_KEY" \
  "https://your-jotty.com/api/tasks/TASK_UUID/items/0.1"

# Update checklist/Kanban item rich fields
curl -X PATCH \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"description": "Additional notes", "priority": "high", "score": 5, "startDate": "2026-06-10", "targetDate": "2026-06-15", "estimatedTime": 2.5}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/0"

# Update checklist/Kanban item text and notes
curl -X PATCH \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Updated item text", "description": "Updated notes"}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/0"

# Update nested checklist/Kanban item rich fields (dot-notation index)
curl -X PATCH \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"priority": "critical", "score": 8, "startDate": "2026-06-13", "targetDate": "2026-06-20"}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/0.1"

# Clear optional checklist/Kanban item fields
curl -X PATCH \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"description": null, "priority": null, "score": null, "startDate": null, "targetDate": null, "estimatedTime": null}' \
  "https://your-jotty.com/api/checklists/LIST_UUID/items/0"
```

</details>

</details>

<details>
<summary>gchq/CyberChef (ghcr.io/gchq/cyberchef)</summary>

### [`v11.2.0`](https://github.com/gchq/CyberChef/blob/HEAD/CHANGELOG.md#1120---2026-06-17)

[Compare Source](https://github.com/gchq/CyberChef/compare/v11.1.0...v11.2.0)

This release includes a security fix (\[[#&#8203;2569](https://github.com/gchq/CyberChef/issues/2569)])

- Security: Chart operation prototype protection \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2569](https://github.com/gchq/CyberChef/issues/2569)]
- Update website references \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2566](https://github.com/gchq/CyberChef/issues/2566)]
- Fix: Add input validation for XOR Checksum blocksize ([#&#8203;2537](https://github.com/gchq/CyberChef/issues/2537)) \[[@&#8203;dweep-js](https://github.com/dweep-js)] | \[[#&#8203;2542](https://github.com/gchq/CyberChef/issues/2542)]
- Fix: Reverse highlights unwind incorrectly \[[@&#8203;kendallgoto](https://github.com/kendallgoto)] \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2022](https://github.com/gchq/CyberChef/issues/2022)]
- Fix Uint8Array concat crash in Parse IPv4 header \[[@&#8203;Zish19](https://github.com/Zish19)] | \[[#&#8203;2409](https://github.com/gchq/CyberChef/issues/2409)]
- Fix typos and documentation errors (bytes→bits, wrong release link, spelling) \[[@&#8203;qa2me](https://github.com/qa2me)] \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2404](https://github.com/gchq/CyberChef/issues/2404)]
- Add integer check for alphabet size \[[@&#8203;heapframe](https://github.com/heapframe)] \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2458](https://github.com/gchq/CyberChef/issues/2458)]
- fix: validate hexdump width upper bound \[[@&#8203;skyswordw](https://github.com/skyswordw)] | \[[#&#8203;2514](https://github.com/gchq/CyberChef/issues/2514)]

### [`v11.1.0`](https://github.com/gchq/CyberChef/blob/HEAD/CHANGELOG.md#1110---2026-06-13)

[Compare Source](https://github.com/gchq/CyberChef/compare/v11.0.0...v11.1.0)

This release includes a security fix (\[[#&#8203;2557](https://github.com/gchq/CyberChef/issues/2557)])

- Security: Add fix, and tests, for Lorem Ipsum DoS issue \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2557](https://github.com/gchq/CyberChef/issues/2557)]
- chore (deps): bump the patch-updates group with 4 updates  | \[[#&#8203;2552](https://github.com/gchq/CyberChef/issues/2552)]
- chore (deps): bump the actions-dependencies group with 2 updates  | \[[#&#8203;2551](https://github.com/gchq/CyberChef/issues/2551)]
- chore (deps): bump the docker-dependencies group with 2 updates  | \[[#&#8203;2550](https://github.com/gchq/CyberChef/issues/2550)]
- chore (deps): bump protobufjs from 8.5.0 to 8.6.2 in the minor-updates group  | \[[#&#8203;2553](https://github.com/gchq/CyberChef/issues/2553)]
- Security Policy Update \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2547](https://github.com/gchq/CyberChef/issues/2547)]
- Fix spurious error messages generated during webpack build \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2545](https://github.com/gchq/CyberChef/issues/2545)]
- chore (deps): bump shell-quote from 1.8.3 to 1.8.4  | \[[#&#8203;2543](https://github.com/gchq/CyberChef/issues/2543)]
- Implementing ROR13 feature \[[@&#8203;Fufu-btw](https://github.com/Fufu-btw)] | \[[#&#8203;2539](https://github.com/gchq/CyberChef/issues/2539)]
- New operation improvements \[[@&#8203;jl5193](https://github.com/jl5193)] \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;1431](https://github.com/gchq/CyberChef/issues/1431)]
- Npm and yarn/major version updates \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2527](https://github.com/gchq/CyberChef/issues/2527)]
- Update README to reflect AES Decrypt changes \[[@&#8203;andreasrtv](https://github.com/andreasrtv)] | \[[#&#8203;2502](https://github.com/gchq/CyberChef/issues/2502)]
- feat: add Escape Smart Characters operation \[[@&#8203;HarelKatz](https://github.com/HarelKatz)] | \[[#&#8203;2391](https://github.com/gchq/CyberChef/issues/2391)]
- feat: Get AES IV from input (QoL) \[[@&#8203;andreasrtv](https://github.com/andreasrtv)] | \[[#&#8203;2471](https://github.com/gchq/CyberChef/issues/2471)]
- fix: validate text encoding options \[[@&#8203;SyedIshmumAhnaf](https://github.com/SyedIshmumAhnaf)] | \[[#&#8203;2497](https://github.com/gchq/CyberChef/issues/2497)]
- chore (deps): bump the minor-updates group with 5 updates \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2500](https://github.com/gchq/CyberChef/issues/2500)]
- chore (deps): bump the patch-updates group with 2 updates  | \[[#&#8203;2499](https://github.com/gchq/CyberChef/issues/2499)]
- chore (deps): bump nginxinc/nginx-unprivileged from `df0e9ed` to `0a1e718` in the docker-dependencies group  | \[[#&#8203;2498](https://github.com/gchq/CyberChef/issues/2498)]
- Add remove ANSI escape codes operation \[[@&#8203;Louis-Ladd](https://github.com/Louis-Ladd)] \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2143](https://github.com/gchq/CyberChef/issues/2143)]
- Fix option ingredients being overwriten \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2341](https://github.com/gchq/CyberChef/issues/2341)]
- chore (deps): bump qs and express  | \[[#&#8203;2478](https://github.com/gchq/CyberChef/issues/2478)]
- chore (deps): bump tmp from 0.2.5 to 0.2.7  | \[[#&#8203;2479](https://github.com/gchq/CyberChef/issues/2479)]
- chore (deps): bump the patch-updates group across 1 directory with 6 updates  | \[[#&#8203;2463](https://github.com/gchq/CyberChef/issues/2463)]
- chore (deps): bump the docker-dependencies group across 1 directory with 2 updates  | \[[#&#8203;2468](https://github.com/gchq/CyberChef/issues/2468)]
- chore (deps): bump terser from 5.46.2 to 5.48.0  | \[[#&#8203;2385](https://github.com/gchq/CyberChef/issues/2385)]
- Make dependabot quieter \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2467](https://github.com/gchq/CyberChef/issues/2467)]
- update sitemap \[[@&#8203;Blank0120](https://github.com/Blank0120)] | \[[#&#8203;2443](https://github.com/gchq/CyberChef/issues/2443)]
- Bump webpack-dev-server to 5.2.4 \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2417](https://github.com/gchq/CyberChef/issues/2417)]
- Fix pgp tests \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2461](https://github.com/gchq/CyberChef/issues/2461)]
- chore (deps): bump the patch-updates group across 1 directory with 4 updates  | \[[#&#8203;2438](https://github.com/gchq/CyberChef/issues/2438)]
- chore (deps): bump docker/setup-buildx-action from 4.0.0 to 4.1.0  | \[[#&#8203;2439](https://github.com/gchq/CyberChef/issues/2439)]
- chore (deps): bump docker/login-action from 4.1.0 to 4.2.0  | \[[#&#8203;2441](https://github.com/gchq/CyberChef/issues/2441)]
- chore (deps): bump docker/metadata-action from 6.0.0 to 6.1.0  | \[[#&#8203;2442](https://github.com/gchq/CyberChef/issues/2442)]
- update bson \[[@&#8203;Blank0120](https://github.com/Blank0120)] \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2425](https://github.com/gchq/CyberChef/issues/2425)]
- chore (deps): bump webpack from 5.106.2 to 5.107.1  | \[[#&#8203;2428](https://github.com/gchq/CyberChef/issues/2428)]
- chore (deps): bump protobufjs from 7.5.8 to 7.6.0  | \[[#&#8203;2429](https://github.com/gchq/CyberChef/issues/2429)]
- chore (deps): bump sql-formatter from 15.7.4 to 15.8.0  | \[[#&#8203;2430](https://github.com/gchq/CyberChef/issues/2430)]
- chore (deps): bump docker/build-push-action from 7.1.0 to 7.2.0  | \[[#&#8203;2431](https://github.com/gchq/CyberChef/issues/2431)]
- Fix flaky `npm run testui` \[[@&#8203;lzandman](https://github.com/lzandman)] | \[[#&#8203;2412](https://github.com/gchq/CyberChef/issues/2412)]
- Include git ref in website download zip name \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2339](https://github.com/gchq/CyberChef/issues/2339)]
- Bump nginxinc/nginx-unprivileged from `808f784` to `b9f7ba1`  | \[[#&#8203;2389](https://github.com/gchq/CyberChef/issues/2389)]
- Series Chart HTML Formatting fix \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2403](https://github.com/gchq/CyberChef/issues/2403)]
- Parse Ethernet Frame HTML formatting fix \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2402](https://github.com/gchq/CyberChef/issues/2402)]
- Parse IPv4 Header HTML formatting fix \[[@&#8203;C85297](https://github.com/C85297)] | \[[#&#8203;2401](https://github.com/gchq/CyberChef/issues/2401)]
- Update chromedriver, and install corresponding chrome in workflows (fixes build) \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2387](https://github.com/gchq/CyberChef/issues/2387)]
- chore (deps): bump [@&#8203;codemirror/view](https://github.com/codemirror/view) from 6.41.1 to 6.43.0  | \[[#&#8203;2384](https://github.com/gchq/CyberChef/issues/2384)]
- chore (deps): bump globals from 17.5.0 to 17.6.0  | \[[#&#8203;2386](https://github.com/gchq/CyberChef/issues/2386)]
- chore (deps): bump the patch-updates group across 1 directory with 3 updates  | \[[#&#8203;2388](https://github.com/gchq/CyberChef/issues/2388)]
- \[StepSecurity] Apply security best practices \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] StepSecurity Bot <bot@stepsecurity.io> | \[[#&#8203;2378](https://github.com/gchq/CyberChef/issues/2378)]
- Build docker container for arm v7 as well \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2379](https://github.com/gchq/CyberChef/issues/2379)]
- chore (deps): bump fast-uri from 3.1.0 to 3.1.2  | \[[#&#8203;2372](https://github.com/gchq/CyberChef/issues/2372)]
- update bcryptjs \[[@&#8203;C85297](https://github.com/C85297)] \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2368](https://github.com/gchq/CyberChef/issues/2368)]
- chore (deps): bump picomatch from 2.3.1 to 2.3.2  | \[[#&#8203;2370](https://github.com/gchq/CyberChef/issues/2370)]
- chore (deps): bump ip-address from 10.1.0 to 10.2.0  | \[[#&#8203;2371](https://github.com/gchq/CyberChef/issues/2371)]
- chore (deps): bump axios from 1.15.0 to 1.16.0  | \[[#&#8203;2369](https://github.com/gchq/CyberChef/issues/2369)]
- feat(operation-wrap): add new Wrap operation to format text at specified line width \[[@&#8203;0xff1ce](https://github.com/0xff1ce)] | \[[#&#8203;1882](https://github.com/gchq/CyberChef/issues/1882)]
- chore (deps): bump the patch-updates group across 1 directory with 5 updates  | \[[#&#8203;2354](https://github.com/gchq/CyberChef/issues/2354)]
- chore (deps): bump docker/login-action from 3 to 4  | \[[#&#8203;2363](https://github.com/gchq/CyberChef/issues/2363)]
- chore (deps): bump docker/setup-buildx-action from 3 to 4  | \[[#&#8203;2364](https://github.com/gchq/CyberChef/issues/2364)]
- chore (deps): bump crazy-max/ghaction-github-pages from 3 to 5  | \[[#&#8203;2365](https://github.com/gchq/CyberChef/issues/2365)]
- chore (deps): bump docker/metadata-action from 4 to 6  | \[[#&#8203;2366](https://github.com/gchq/CyberChef/issues/2366)]
- chore (deps): bump docker/setup-qemu-action from 3 to 4  | \[[#&#8203;2367](https://github.com/gchq/CyberChef/issues/2367)]
- Update dependabot for Node 24. \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2361](https://github.com/gchq/CyberChef/issues/2361)]
- chore (deps): bump uuid from 13.0.0 to 14.0.0  | \[[#&#8203;2332](https://github.com/gchq/CyberChef/issues/2332)]
- chore (deps): bump webpack-bundle-analyzer from 5.2.0 to 5.3.0  | \[[#&#8203;2353](https://github.com/gchq/CyberChef/issues/2353)]
- Fix all zeros after 16384 bytes with Blake3 \[[@&#8203;zachbowden](https://github.com/zachbowden)] \[[@&#8203;GCHQDeveloper581](https://github.com/GCHQDeveloper581)] | \[[#&#8203;2351](https://github.com/gchq/CyberChef/issues/2351)]

</details>

<details>
<summary>grimmory-tools/grimmory (ghcr.io/grimmory-tools/grimmory)</summary>

### [`v3.2.2`](https://github.com/grimmory-tools/grimmory/releases/tag/v3.2.2)

[Compare Source](https://github.com/grimmory-tools/grimmory/compare/v3.2.1...v3.2.2)

This patch release of Grimmory is focused on bug fixes. It fixes folder watcher SQL errors, correctly applies library restrictions to the OPDS shelf catalogs, fixes a bug affecting bookdrop on QNAP devices, ensures non-admin users are assigned at least one library, and more.

#### Changelog

**Full Changelog**: <https://github.com/grimmory-tools/grimmory/compare/v3.2.1...v3.2.2>

##### Bug Fixes

- **bookdrop:** directly copy instead of move between filesystems ([#&#8203;1759](https://github.com/grimmory-tools/grimmory/issues/1759)) ([64ddbe5](https://github.com/grimmory-tools/grimmory/commit/64ddbe550c5b9b44ed92f79dbc2e197c13d653e0))
- **event-processor:** avoid invalid query during watch folder processing ([#&#8203;1803](https://github.com/grimmory-tools/grimmory/issues/1803)) ([6d14043](https://github.com/grimmory-tools/grimmory/commit/6d1404394935cbd8b77833c4d554edc3528b7d52))
- **metadata-refresh:** add audible to metadata refresh ([#&#8203;1779](https://github.com/grimmory-tools/grimmory/issues/1779)) ([e4ebe97](https://github.com/grimmory-tools/grimmory/commit/e4ebe97e20e123c2a9d97b5082469761b9ad5942))
- **opds:** add library restrictions to shelf OPDS catalogs ([#&#8203;1731](https://github.com/grimmory-tools/grimmory/issues/1731)) ([0cc48a8](https://github.com/grimmory-tools/grimmory/commit/0cc48a8d0ce634ed67bbd413519e700b30c55659))
- **user-managment:** non-admin users must be assigned atleast one lib… ([#&#8203;1741](https://github.com/grimmory-tools/grimmory/issues/1741)) ([2b8ac73](https://github.com/grimmory-tools/grimmory/commit/2b8ac7393ee609f7ad41b80ed5a4ee57a3c67893))

##### Refactors

- **ui:** new component library ([#&#8203;1740](https://github.com/grimmory-tools/grimmory/issues/1740)) ([3e5d85b](https://github.com/grimmory-tools/grimmory/commit/3e5d85bfc1359f844d84320e2d1258fd7489d255))

##### Chores

- **deps:** bump [@&#8203;angular/common](https://github.com/angular/common) from 21.2.15 to 21.2.17 ([#&#8203;1756](https://github.com/grimmory-tools/grimmory/issues/1756)) ([1afe9de](https://github.com/grimmory-tools/grimmory/commit/1afe9de0540227a84bc98cf076c67d97c1160978))
- **deps:** bump [@&#8203;angular/compiler](https://github.com/angular/compiler) from 21.2.15 to 21.2.17 ([#&#8203;1757](https://github.com/grimmory-tools/grimmory/issues/1757)) ([467aa1b](https://github.com/grimmory-tools/grimmory/commit/467aa1b4e6aff3a3e340298a5d0b25297cd6a6c5))
- **deps:** bump [@&#8203;angular/core](https://github.com/angular/core) from 21.2.15 to 21.2.17 ([#&#8203;1753](https://github.com/grimmory-tools/grimmory/issues/1753)) ([a738124](https://github.com/grimmory-tools/grimmory/commit/a738124f25e908df01a37cbf87677cf2819882a9))
- **deps:** bump [@&#8203;angular/service-worker](https://github.com/angular/service-worker) from 21.2.15 to 21.2.17 ([#&#8203;1755](https://github.com/grimmory-tools/grimmory/issues/1755)) ([70a0b51](https://github.com/grimmory-tools/grimmory/commit/70a0b516ac71da2588ae68f852930970dc9a0ffe))
- **deps:** bump EnricoMi/publish-unit-test-result-action from 2.23.0 to 2.24.0 ([#&#8203;1767](https://github.com/grimmory-tools/grimmory/issues/1767)) ([6711aba](https://github.com/grimmory-tools/grimmory/commit/6711aba1d1ccc7a13941ebce8254ff4cdb736963))
- **deps:** bump pnpm/action-setup from 6.0.8 to 6.0.9 ([#&#8203;1766](https://github.com/grimmory-tools/grimmory/issues/1766)) ([008f8fe](https://github.com/grimmory-tools/grimmory/commit/008f8fef76f403c88d55cfb26ed7723781583a51))
- **deps:** bump semantic-release from 25.0.3 to 25.0.5 in the release-tooling group across 1 directory ([#&#8203;1769](https://github.com/grimmory-tools/grimmory/issues/1769)) ([7729c76](https://github.com/grimmory-tools/grimmory/commit/7729c769d3592e13a37d7baedc3d2029842e78de))
- **deps:** bump taiki-e/install-action from 2.81.5 to 2.81.11 ([#&#8203;1768](https://github.com/grimmory-tools/grimmory/issues/1768)) ([dee01c4](https://github.com/grimmory-tools/grimmory/commit/dee01c473563ac5d9a45fbab3a47febc0381644e))
- **deps:** bump the frontend group across 1 directory with 24 updates ([#&#8203;1771](https://github.com/grimmory-tools/grimmory/issues/1771)) ([692c2ea](https://github.com/grimmory-tools/grimmory/commit/692c2eabfb2964a1721a5be417016f5d1227e990))
- **deps:** bump the gradle-dependencies group across 1 directory with 5 updates ([#&#8203;1770](https://github.com/grimmory-tools/grimmory/issues/1770)) ([2f3e3be](https://github.com/grimmory-tools/grimmory/commit/2f3e3be866f62b696206f839aedb55c55a008eee))
- **helm:** add extra env to deployment ([#&#8203;1661](https://github.com/grimmory-tools/grimmory/issues/1661)) ([bd5c920](https://github.com/grimmory-tools/grimmory/commit/bd5c9203733ee5f4d80d87fdf73e807e5a6dbc5f))
- **i18n:** update translations from Weblate ([#&#8203;1748](https://github.com/grimmory-tools/grimmory/issues/1748)) ([763d732](https://github.com/grimmory-tools/grimmory/commit/763d732331f8bc13305f342e120424f69d0a19dd))
- **pdf-reader:** drop redundant pdf in-memory caching ([#&#8203;1754](https://github.com/grimmory-tools/grimmory/issues/1754)) ([8da867d](https://github.com/grimmory-tools/grimmory/commit/8da867d1acb1edcd7af9915f17c69383f9437ea2))

#### Contributors

We'd like to thank the contributors for this release for taking the time to make Grimmory better.

Including but not limited to: [@&#8203;geneliu](https://github.com/geneliu) [@&#8203;imnotjames](https://github.com/imnotjames) [@&#8203;idriss-mechkene](https://github.com/idriss-mechkene) [@&#8203;alexhb1](https://github.com/alexhb1)

#### New Contributors

- [@&#8203;geneliu](https://github.com/geneliu) made their first contribution in [#&#8203;1661](https://github.com/grimmory-tools/grimmory/pull/1661)
- [@&#8203;idriss-mechkene](https://github.com/idriss-mechkene) made their first contribution in [#&#8203;1741](https://github.com/grimmory-tools/grimmory/pull/1741)

### [`v3.2.1`](https://github.com/grimmory-tools/grimmory/releases/tag/v3.2.1)

[Compare Source](https://github.com/grimmory-tools/grimmory/compare/v3.2.0...v3.2.1)

This release of Grimmory is focused on bug fixes. It fixes content restrictions applied to the book's page endpoint, drops the Blackbird library to prevent JSON serialization errors, fixes public shelves not showing up for books, fixes bidirectional KOReader sync in some cases, and improves reactivity across the UI. Furthermore, there are performance improvements in the book ingest pipeline and reductions in memory usage due to file downloads.

#### Changelog

**Full Changelog**: <https://github.com/grimmory-tools/grimmory/compare/v3.2.0...v3.2.1>

##### Bug Fixes

- **api:** fix content restrictions for `api/v1/books/page` ([#&#8203;1706](https://github.com/grimmory-tools/grimmory/issues/1706)) ([a93bc5f](https://github.com/grimmory-tools/grimmory/commit/a93bc5f2848b4ab80fdc88e63d4356f4fc960f3e))
- **book-details:** fall back from invalid book detail tabs ([#&#8203;1685](https://github.com/grimmory-tools/grimmory/issues/1685)) ([46f4457](https://github.com/grimmory-tools/grimmory/commit/46f4457feea42b913670d79efed826c66d66657a))
- **download:** stream book downloads instead of buffering in browser ([#&#8203;1718](https://github.com/grimmory-tools/grimmory/issues/1718)) ([7f38de8](https://github.com/grimmory-tools/grimmory/commit/7f38de817bed76d198a9790b34fabf0620c34af7))
- drop blackbird to avoid serialization failure states ([#&#8203;1513](https://github.com/grimmory-tools/grimmory/issues/1513)) ([65f3f85](https://github.com/grimmory-tools/grimmory/commit/65f3f85a9b76fe591d23121592124991bfdf29ea))
- handle multiple book files with the same checksum ([#&#8203;1724](https://github.com/grimmory-tools/grimmory/issues/1724)) ([0cc918f](https://github.com/grimmory-tools/grimmory/commit/0cc918f0ace85142f11e91982c3e8b15fcc826af))
- **helm:** add startup probe to helm chart ([#&#8203;1712](https://github.com/grimmory-tools/grimmory/issues/1712)) ([f13538a](https://github.com/grimmory-tools/grimmory/commit/f13538a8be4bd0fc51e7ec1235c98fd6f2e48e99))
- **koreader:** fix bidirectional progress sync ([#&#8203;1687](https://github.com/grimmory-tools/grimmory/issues/1687)) ([590bd9e](https://github.com/grimmory-tools/grimmory/commit/590bd9eea53be68ef37888df5241629fa3a632bb))
- library stats showing 0KB due to incorrect fileSizeKb field path ([#&#8203;1436](https://github.com/grimmory-tools/grimmory/issues/1436)) ([f3dacb9](https://github.com/grimmory-tools/grimmory/commit/f3dacb99b28aca1ef72214a4d7dc002f163a422f))
- **login:** fix oidc login button on light mode ([#&#8203;1682](https://github.com/grimmory-tools/grimmory/issues/1682)) ([d1298af](https://github.com/grimmory-tools/grimmory/commit/d1298afc452afd51c5ea129e461afb5c210f65f9))
- **metadata:** extract epub titles per spec with regards to ordering ([#&#8203;1637](https://github.com/grimmory-tools/grimmory/issues/1637)) ([d775011](https://github.com/grimmory-tools/grimmory/commit/d77501125fa7b1d3d85e86e44478ff5e5cbccd93))
- **reader:** switch header/footer hover zones from static heights to dynamic ([#&#8203;1716](https://github.com/grimmory-tools/grimmory/issues/1716)) ([a44197e](https://github.com/grimmory-tools/grimmory/commit/a44197e8cea02a44a645726e3bdd18defde70b86))
- **shelf:** fix public shelf book visibility ([#&#8203;1735](https://github.com/grimmory-tools/grimmory/issues/1735)) ([48eefc0](https://github.com/grimmory-tools/grimmory/commit/48eefc03c2f6f5548b8c2a5497fee63f80d1a829))
- **ui:** convert device settings state to signals ([#&#8203;1635](https://github.com/grimmory-tools/grimmory/issues/1635)) ([f6661fe](https://github.com/grimmory-tools/grimmory/commit/f6661fec0b5660bb4d792142cedf7ed6a4ff7da6))
- **ui:** no libraries assigned label ([#&#8203;1736](https://github.com/grimmory-tools/grimmory/issues/1736)) ([0625095](https://github.com/grimmory-tools/grimmory/commit/0625095e1a0050b55ecce7ca6423c090397dbabf))
- **ui:** use signals for OIDC settings ([#&#8203;1737](https://github.com/grimmory-tools/grimmory/issues/1737)) ([d5f652f](https://github.com/grimmory-tools/grimmory/commit/d5f652f8fa5466d45a13433eee0897a9c24c64c8))
- **ui:** use signals for user management to improve reactivity ([#&#8203;1726](https://github.com/grimmory-tools/grimmory/issues/1726)) ([f2b7cdc](https://github.com/grimmory-tools/grimmory/commit/f2b7cdc3528426818759479170341bdcc59a853b))

##### Performance

- **db:** add missing `book_file` indices for ingestion lookups ([#&#8203;1729](https://github.com/grimmory-tools/grimmory/issues/1729)) ([a86dfb2](https://github.com/grimmory-tools/grimmory/commit/a86dfb23dda03b69b3e223e48fd1b6fc5c0b24f5))
- **download:** stream all book downloads via `StreamingResponseBody` ([#&#8203;1722](https://github.com/grimmory-tools/grimmory/issues/1722)) ([798767c](https://github.com/grimmory-tools/grimmory/commit/798767c08283a454ae03543c4f59e8049a25da21))

##### Chores

- **deps:** bump docker/metadata-action from 6.0.0 to 6.1.0 ([#&#8203;1650](https://github.com/grimmory-tools/grimmory/issues/1650)) ([abe1258](https://github.com/grimmory-tools/grimmory/commit/abe1258e9d91693f7fe4a07a4a60a59dbe3c84b2))
- **deps:** bump docker/setup-buildx-action from 4.0.0 to 4.1.0 ([#&#8203;1648](https://github.com/grimmory-tools/grimmory/issues/1648)) ([851fa40](https://github.com/grimmory-tools/grimmory/commit/851fa40c984f667fb1b894c6afcc29e2f4792b11))
- **deps:** bump github/codeql-action from 4.36.1 to 4.36.2 ([#&#8203;1651](https://github.com/grimmory-tools/grimmory/issues/1651)) ([8a06943](https://github.com/grimmory-tools/grimmory/commit/8a06943b3eed86abf7801e84fa140075cfea8a2e))
- **deps:** bump hono from 4.12.18 to 4.12.23 in /frontend ([#&#8203;1642](https://github.com/grimmory-tools/grimmory/issues/1642)) ([43b3c5d](https://github.com/grimmory-tools/grimmory/commit/43b3c5d130ec3ebce514e0d55bff340eaf4e9ad3))
- **deps:** bump taiki-e/install-action from 2.77.6 to 2.81.5 ([#&#8203;1649](https://github.com/grimmory-tools/grimmory/issues/1649)) ([436d04c](https://github.com/grimmory-tools/grimmory/commit/436d04c5acc837b28511d71a0b11ef76f1fe2efd))
- **deps:** bump the gradle-dependencies group across 1 directory with 4 updates ([#&#8203;1646](https://github.com/grimmory-tools/grimmory/issues/1646)) ([d6a88a3](https://github.com/grimmory-tools/grimmory/commit/d6a88a32f6f1687a4d53951bfac34a6f0afbbff5))
- **deps:** bump the npm-dependencies group in /frontend with 25 updates ([#&#8203;1647](https://github.com/grimmory-tools/grimmory/issues/1647)) ([1ffbd54](https://github.com/grimmory-tools/grimmory/commit/1ffbd543e9938321592f9945d691284b0a557165))
- **i18n:** update translations from Weblate ([#&#8203;1644](https://github.com/grimmory-tools/grimmory/issues/1644)) ([11febb9](https://github.com/grimmory-tools/grimmory/commit/11febb9d40336596feedece540507f7d61371d90))
- **i18n:** update translations from Weblate ([#&#8203;1665](https://github.com/grimmory-tools/grimmory/issues/1665)) ([2675c4a](https://github.com/grimmory-tools/grimmory/commit/2675c4a04ac418138bb911e7b88650a98a87ccbe))
- **i18n:** update translations from Weblate ([#&#8203;1678](https://github.com/grimmory-tools/grimmory/issues/1678)) ([1037757](https://github.com/grimmory-tools/grimmory/commit/103775710be9da26bc4bcdfa4ed926083e400b9f))
- **i18n:** update translations from Weblate ([#&#8203;1679](https://github.com/grimmory-tools/grimmory/issues/1679)) ([1b64f13](https://github.com/grimmory-tools/grimmory/commit/1b64f13033045c7869ed12c2ffc296d0d0bdbc3d))
- **i18n:** update translations from Weblate ([#&#8203;1686](https://github.com/grimmory-tools/grimmory/issues/1686)) ([6b28d14](https://github.com/grimmory-tools/grimmory/commit/6b28d14ba2f98e39e943e236aa541d99c9555383))
- **repo:** migrate from yarn to pnpm ([#&#8203;1598](https://github.com/grimmory-tools/grimmory/issues/1598)) ([e83a143](https://github.com/grimmory-tools/grimmory/commit/e83a143c36e9890ffb22e5e937d0a21e423aec06))
- **ui:** add warning for goodreads metadata provider ([#&#8203;1732](https://github.com/grimmory-tools/grimmory/issues/1732)) ([b25a3f5](https://github.com/grimmory-tools/grimmory/commit/b25a3f5b87e5e91a960e3e1f9ef50938adc3a9d6))
- **ui:** normalise text size and spacing ([#&#8203;1656](https://github.com/grimmory-tools/grimmory/issues/1656)) ([349f046](https://github.com/grimmory-tools/grimmory/commit/349f04606265d40613ce4cdba9f54b9c8c3d6215))

##### Documentation

- document Weblate translation workflows ([#&#8203;1643](https://github.com/grimmory-tools/grimmory/issues/1643)) ([d929cd2](https://github.com/grimmory-tools/grimmory/commit/d929cd2df649a61a888c37d306739dc4425156c3))
- update README badges for consistency ([#&#8203;1645](https://github.com/grimmory-tools/grimmory/issues/1645)) ([7129d3c](https://github.com/grimmory-tools/grimmory/commit/7129d3cf82e10ec07e6a6b0a665edc3b3c5dcae0))

#### Contributors

We'd like to thank the contributors for this release for taking the time to make Grimmory better.

Including but not limited to: [@&#8203;zachyale](https://github.com/zachyale) [@&#8203;alexhb1](https://github.com/alexhb1) [@&#8203;DeeWooo](https://github.com/DeeWooo) [@&#8203;imnotjames](https://github.com/imnotjames) [@&#8203;raphkun](https://github.com/raphkun)

#### New Contributors

- [@&#8203;DeeWooo](https://github.com/DeeWooo) made their first contribution in [#&#8203;1436](https://github.com/grimmory-tools/grimmory/pull/1436)
- [@&#8203;raphkun](https://github.com/raphkun) made their first contribution in [#&#8203;1726](https://github.com/grimmory-tools/grimmory/pull/1726)

</details>

<details>
<summary>jordan-dalby/ByteStash (ghcr.io/jordan-dalby/bytestash)</summary>

### [`v1.5.12`](https://github.com/jordan-dalby/ByteStash/releases/tag/v1.5.12)

[Compare Source](https://github.com/jordan-dalby/ByteStash/compare/v1.5.11...v1.5.12)

#### What's Changed

- Added basepath to OpenInNewTab handler by [@&#8203;gatherfetch](https://github.com/gatherfetch) in [#&#8203;326](https://github.com/jordan-dalby/ByteStash/pull/326)
- \[feat] Add mermaid diagram rendering support by [@&#8203;jospaquim](https://github.com/jospaquim) in [#&#8203;328](https://github.com/jordan-dalby/ByteStash/pull/328)
- feat(i18n): add comprehensive Spanish (es-ES) localization by [@&#8203;jospaquim](https://github.com/jospaquim) in [#&#8203;329](https://github.com/jordan-dalby/ByteStash/pull/329)
- feat(i18n): add comprehensive Japanese (ja-JP) localization by [@&#8203;yudukiak](https://github.com/yudukiak) in [#&#8203;331](https://github.com/jordan-dalby/ByteStash/pull/331)
- feat(ui): add native github-flavored markdown tables with typography styling by [@&#8203;jospaquim](https://github.com/jospaquim) in [#&#8203;330](https://github.com/jordan-dalby/ByteStash/pull/330)
- \[chore] changed version number to 1.5.12 to prepare for upcoming release by [@&#8203;jordan-dalby](https://github.com/jordan-dalby) in [#&#8203;332](https://github.com/jordan-dalby/ByteStash/pull/332)
- feat: editor and viewer UI overhaul with VS Code styling and native icons by [@&#8203;jospaquim](https://github.com/jospaquim) in [#&#8203;333](https://github.com/jordan-dalby/ByteStash/pull/333)
- feat(i18n): add comprehensive sChinese (zh-CN) localization by [@&#8203;xjndfdfe](https://github.com/xjndfdfe) in [#&#8203;335](https://github.com/jordan-dalby/ByteStash/pull/335)
- feat(client): implement code wrapper export to image like carbon by [@&#8203;jospaquim](https://github.com/jospaquim) in [#&#8203;337](https://github.com/jordan-dalby/ByteStash/pull/337)
- feat(i18n): add comprehensive Italian (it) localization by [@&#8203;albyalex96](https://github.com/albyalex96) in [#&#8203;340](https://github.com/jordan-dalby/ByteStash/pull/340)
- \[fix] OIDC logout and login error for Google SSO by [@&#8203;dannyyy](https://github.com/dannyyy) in [#&#8203;343](https://github.com/jordan-dalby/ByteStash/pull/343)
- fix: allow snippet API key authentication by [@&#8203;SirEdvin](https://github.com/SirEdvin) in [#&#8203;347](https://github.com/jordan-dalby/ByteStash/pull/347)
- Feature: Add a dev environment for ByteStash using containerization and nvm. by [@&#8203;MahakSangwan](https://github.com/MahakSangwan) in [#&#8203;350](https://github.com/jordan-dalby/ByteStash/pull/350)
- Add remote MCP endpoint for AI clients (Claude, OpenAI, Perplexity) by [@&#8203;juliuszfedyk-ai](https://github.com/juliuszfedyk-ai) in [#&#8203;351](https://github.com/jordan-dalby/ByteStash/pull/351)
- \[bug] updated swagger.yml to reflect new API routes by [@&#8203;jordan-dalby](https://github.com/jordan-dalby) in [#&#8203;353](https://github.com/jordan-dalby/ByteStash/pull/353)

#### New Contributors

- [@&#8203;gatherfetch](https://github.com/gatherfetch) made their first contribution in [#&#8203;326](https://github.com/jordan-dalby/ByteStash/pull/326)
- [@&#8203;jospaquim](https://github.com/jospaquim) made their first contribution in [#&#8203;328](https://github.com/jordan-dalby/ByteStash/pull/328)
- [@&#8203;yudukiak](https://github.com/yudukiak) made their first contribution in [#&#8203;331](https://github.com/jordan-dalby/ByteStash/pull/331)
- [@&#8203;xjndfdfe](https://github.com/xjndfdfe) made their first contribution in [#&#8203;335](https://github.com/jordan-dalby/ByteStash/pull/335)
- [@&#8203;albyalex96](https://github.com/albyalex96) made their first contribution in [#&#8203;340](https://github.com/jordan-dalby/ByteStash/pull/340)
- [@&#8203;dannyyy](https://github.com/dannyyy) made their first contribution in [#&#8203;343](https://github.com/jordan-dalby/ByteStash/pull/343)
- [@&#8203;SirEdvin](https://github.com/SirEdvin) made their first contribution in [#&#8203;347](https://github.com/jordan-dalby/ByteStash/pull/347)
- [@&#8203;MahakSangwan](https://github.com/MahakSangwan) made their first contribution in [#&#8203;350](https://github.com/jordan-dalby/ByteStash/pull/350)
- [@&#8203;juliuszfedyk-ai](https://github.com/juliuszfedyk-ai) made their first contribution in [#&#8203;351](https://github.com/jordan-dalby/ByteStash/pull/351)

**Full Changelog**: <https://github.com/jordan-dalby/ByteStash/compare/v1.5.11...v1.5.12>

</details>

<details>
<summary>grafana/alloy (grafana/alloy)</summary>

### [`v1.17.0`](https://github.com/grafana/alloy/releases/tag/v1.17.0)

[Compare Source](https://github.com/grafana/alloy/compare/v1.16.3...v1.17.0)

##### Features 🌟

- Add gql subcommand ([#&#8203;6242](https://github.com/grafana/alloy/issues/6242)) ([ec09c43](https://github.com/grafana/alloy/commit/ec09c439407e61757bd2c626f86ada17dba9b262)) ([@&#8203;jharvey10](https://github.com/jharvey10))
- **database\_observability.mysql:** Add database\_observability\_wait\_event\_seconds\_total counter ([#&#8203;6106](https://github.com/grafana/alloy/issues/6106)) ([602b0b5](https://github.com/grafana/alloy/commit/602b0b54bc65290862920f5a6cd0a5ac949c092d)) ([@&#8203;gaantunes](https://github.com/gaantunes))
- **database\_observability.mysql:** Refactor bulk table metadata collection ([#&#8203;6222](https://github.com/grafana/alloy/issues/6222)) ([e8d441b](https://github.com/grafana/alloy/commit/e8d441bb7f3f582627bf364f6e4529d32db0f177)) ([@&#8203;cristiangreco](https://github.com/cristiangreco))
- **database\_observability.mysql:** Refactor schema\_details logging strategy ([#&#8203;6239](https://github.com/grafana/alloy/issues/6239)) ([fd51530](https://github.com/grafana/alloy/commit/fd5153020f1561433a868e8a51ddc9f76b23f506)) ([@&#8203;cristiangreco](https://github.com/cristiangreco))
- **database\_observability.postgres:** Add `exclude_current_user` top-level setting ([#&#8203;6187](https://github.com/grafana/alloy/issues/6187)) ([f019b5e](https://github.com/grafana/alloy/commit/f019b5e6c60c10485db48fec9eeb2f932f191068)) ([@&#8203;cristiangreco](https://github.com/cristiangreco), [@&#8203;matthewnolf](https://github.com/matthewnolf))
- **database\_observability.postgres:** Improve monitoring user privileges check ([#&#8203;6177](https://github.com/grafana/alloy/issues/6177)) ([96b50d1](https://github.com/grafana/alloy/commit/96b50d1cc734fa5cffbc6cf68fcd832b754fd92d)) ([@&#8203;cristiangreco](https://github.com/cristiangreco))
- **database\_observability.postgres:** Make health\_check respect user/database exclusions settings ([#&#8203;6144](https://github.com/grafana/alloy/issues/6144)) ([b4ee0a7](https://github.com/grafana/alloy/commit/b4ee0a77cec0ed8fd7ce3d8cd2ad8e886acfea09)) ([@&#8203;cristiangreco](https://github.com/cristiangreco))
- **database\_observability.postgres:** Throttle schema details create\_statement logs ([#&#8203;6260](https://github.com/grafana/alloy/issues/6260)) ([fcb3d3e](https://github.com/grafana/alloy/commit/fcb3d3ef3cc390424def01a7e7f62d8ce6cfb32d)) ([@&#8203;cristiangreco](https://github.com/cristiangreco))
- **database\_observability:** Add wait\_event\_v2 op with pre-classified wait\_event\_type ([#&#8203;6105](https://github.com/grafana/alloy/issues/6105)) ([f7a1ebd](https://github.com/grafana/alloy/commit/f7a1ebd769e04924adad69f2e082ce92c85b5977)) ([@&#8203;gaantunes](https://github.com/gaantunes))
- **database\_observability:** Always extract traceparent in MySQL query\_samples collector ([#&#8203;6081](https://github.com/grafana/alloy/issues/6081)) ([bf2b436](https://github.com/grafana/alloy/commit/bf2b436f55fa9cf0eb7c2c2400c4c646b8a8ecb8)) ([@&#8203;fridgepoet](https://github.com/fridgepoet))
- **database\_observability:** Always extract traceparent in Postgres query\_samples collector ([#&#8203;6411](https://github.com/grafana/alloy/issues/6411)) ([74d595a](https://github.com/grafana/alloy/commit/74d595ab2ce8f7ccc86f558ad512eb75a40f4cfc)) ([@&#8203;fridgepoet](https://github.com/fridgepoet))
- **database\_observability:** Set query\_sample, wait\_event timestamps at query start for MySQL ([#&#8203;6291](https://github.com/grafana/alloy/issues/6291)) ([a47de00](https://github.com/grafana/alloy/commit/a47de00d07475f2fdc54249e021fc39f2a4281df)) ([@&#8203;fridgepoet](https://github.com/fridgepoet))
- **database\_observability:** Set timestamp query\_sample at query start for Postgres ([#&#8203;6393](https://github.com/grafana/alloy/issues/6393)) ([62d8ecc](https://github.com/grafana/alloy/commit/62d8ecc299cb976e33d5dd340cafe9e675d5d547)) ([@&#8203;fridgepoet](https://github.com/fridgepoet))
- **database\_observability:** Update wait\_event\_v2 to a 6-bucket taxonomy and surface Mysql nested events ([#&#8203;6143](https://github.com/grafana/alloy/issues/6143)) ([3df9542](https://github.com/grafana/alloy/commit/3df95423c5609b484c79dcd212fcc3e44b194857)) ([@&#8203;gaantunes](https://github.com/gaantunes), [@&#8203;cristiangreco](https://github.com/cristiangreco))
- **faro.receiver:** Support gzip-compressed request bodies ([#&#8203;6195](https://github.com/grafana/alloy/issues/6195)) ([4fa44d2](https://github.com/grafana/alloy/commit/4fa44d2e014392a9a3278e958f14467188514622)) ([@&#8203;d0ugal](https://github.com/d0ugal))
- GraphQL server ([#&#8203;5580](https://github.com/grafana/alloy/issues/5580)) ([5a2562f](https://github.com/grafana/alloy/commit/5a2562f1093e13c7d9f03e9e0f708ef4143707af)) ([@&#8203;jharvey10](https://github.com/jharvey10))
- **helm:** Support externally-managed HPAs via controller.autoscaling.horizontal.externalHPA ([#&#8203;6311](https://github.com/grafana/alloy/issues/6311)) ([a1e61c7](https://github.com/grafana/alloy/commit/a1e61c7abc7c0840be9bc29b96ea208fe43be115)) ([@&#8203;jmichalek132](https://github.com/jmichalek132))
- Integration tests for aws firehose and cloudflare logpull ([#&#8203;6089](https://github.com/grafana/alloy/issues/6089)) ([f55f780](https://github.com/grafana/alloy/commit/f55f78039189186e6e77d3bdb8cfd2fb3480fe41)) ([@&#8203;x1unix](https://github.com/x1unix))
- Integration tests for loki.source.azure\_event\_hubs ([#&#8203;6113](https://github.com/grafana/alloy/issues/6113)) ([8e40165](https://github.com/grafana/alloy/commit/8e4016506250063be863ff35eeeda348b912295c)) ([@&#8203;x1unix](https://github.com/x1unix))
- Integration tests for loki.source.gcplog ([#&#8203;6161](https://github.com/grafana/alloy/issues/6161)) ([feceb8d](https://github.com/grafana/alloy/commit/feceb8d20d4aa0e7366c7c5c6cc35255af7d18f8)) ([@&#8203;x1unix](https://github.com/x1unix))
- **loki.process:** Add regex field to logfmt and json stages ([#&#8203;4941](https://github.com/grafana/alloy/issues/4941)) ([cfbabda](https://github.com/grafana/alloy/commit/cfbabda3eb9ffd4ece693e23baed38c8ee46ea0d)) ([@&#8203;timonegk](https://github.com/timonegk))
- **loki.rules.kubernetes:** Add external\_labels support ([#&#8203;6320](https://github.com/grafana/alloy/issues/6320)) ([9166a61](https://github.com/grafana/alloy/commit/9166a61d408538e4f4aceeda0b8638069513484a)) ([@&#8203;gianvetter](https://github.com/gianvetter))
- **loki.source.heroku:** Drop github.com/heroku/x package ([#&#8203;6064](https://github.com/grafana/alloy/issues/6064)) ([3382721](https://github.com/grafana/alloy/commit/3382721d7a44647cfcd2e86ce1d82f8d282f7854)) ([@&#8203;x1unix](https://github.com/x1unix))
- Migrate from Docker to Moby ([#&#8203;6167](https://github.com/grafana/alloy/issues/6167)) ([1e2bbf9](https://github.com/grafana/alloy/commit/1e2bbf9d8d73f34c7ccec651a5c41a2b6718dacc)) ([@&#8203;x1unix](https://github.com/x1unix))
- **mimir.rules.kubernetes, loki.rules.kubernetes:** Add configurable `mimir_namespace_separator` and `loki_namespace_separator` arguments to allow using a URL-safe separator ([#&#8203;5961](https://github.com/grafana/alloy/issues/5961)) ([7dba4f1](https://github.com/grafana/alloy/commit/7dba4f196f06c9813c1ef9c4de6002076b6f6738)) ([@&#8203;QuentinBisson](https://github.com/QuentinBisson), [@&#8203;clayton-cornell](https://github.com/clayton-cornell))
- **otelcol.exporter.prometheus:** Config option to prevent stripping `service.*` attributes ([#&#8203;6434](https://github.com/grafana/alloy/issues/6434)) ([c229b3c](https://github.com/grafana/alloy/commit/c229b3c64c512b69263a2e0ec329d6e3e12cde6f)) ([@&#8203;jcreixell](https://github.com/jcreixell))
- **otelcol.exporter.prometheus:** Convert classic histograms to NHCB ([#&#8203;6281](https://github.com/grafana/alloy/issues/6281)) ([46f4fb6](https://github.com/grafana/alloy/commit/46f4fb61e57f8e05110a21bfafc063a8ac6ec443)) ([@&#8203;madaraszg-tulip](https://github.com/madaraszg-tulip))
- **otelcol:** Add Nginx receiver ([#&#8203;6141](https://github.com/grafana/alloy/issues/6141)) ([fa8d520](https://github.com/grafana/alloy/commit/fa8d520297301f5d14cf83fde96818efa19587cd)) ([@&#8203;henworth](https://github.com/henworth), [@&#8203;clayton-cornell](https://github.com/clayton-cornell), [@&#8203;blewis12](https://github.com/blewis12))
- **prometheus.enrich:** Support multi-label matching ([#&#8203;5822](https://github.com/grafana/alloy/issues/5822)) ([04a1aba](https://github.com/grafana/alloy/commit/04a1aba1fcbac25bbe1ecc5e86cafdcdd5eff6b9)) ([@&#8203;dtrejod](https://github.com/dtrejod))
- **prometheus.relabel:** Add opt-in TTL cache mode ([#&#8203;6169](https://github.com/grafana/alloy/issues/6169)) ([40632c3](https://github.com/grafana/alloy/commit/40632c33aef80490f3735a767f2c193c8bfa4b62)) ([@&#8203;kgeckhart](https://github.com/kgeckhart))
- **telemetry:** Add graph connection metrics ([#&#8203;6243](https://github.com/grafana/alloy/issues/6243)) ([4f3bbbe](https://github.com/grafana/alloy/commit/4f3bbbefd67d4ba5f7291d713a9a6d52ea20dde6)) ([@&#8203;theSuess](https://github.com/theSuess))
- **telemetry:** Add pyroscope\_forwarded\_entries\_total metric ([#&#8203;6244](https://github.com/grafana/alloy/issues/6244)) ([65ad64c](https://github.com/grafana/alloy/commit/65ad64c22e7bf9524e3e83823817cf3386dbe9a2)) ([@&#8203;theSuess](https://github.com/theSuess))
- Update to Beyla 3.9.7 ([#&#8203;6175](https://github.com/grafana/alloy/issues/6175)) ([4015bd9](https://github.com/grafana/alloy/commit/4015bd95f58d5f3375af93d20fb75f1fdd17b90a)) ([@&#8203;rafaelroquetto](https://github.com/rafaelroquetto))
- Update to Beyla 3.9.8 ([#&#8203;6189](https://github.com/grafana/alloy/issues/6189)) ([6fffa30](https://github.com/grafana/alloy/commit/6fffa30c273fa3c9a6870174b552c1be2934d9a8)) ([@&#8203;skl](https://github.com/skl))

##### Bug Fixes 🐛

- Address Critical CVE's From Scanner ([#&#8203;6232](https://github.com/grafana/alloy/issues/6232)) ([e713e7a](https://github.com/grafana/alloy/commit/e713e7ada335ec3800c66dd9913ee34c7dbee493)) ([@&#8203;blewis12](https://github.com/blewis12))
- **alloycli:** Use filepath.Base for CLI Use name to fix shell completions ([#&#8203;6217](https://github.com/grafana/alloy/issues/6217)) ([17cfd01](https://github.com/grafana/alloy/commit/17cfd01f03379e7e9d265932451c6f2b584da781)) ([@&#8203;IngmarStein](https://github.com/IngmarStein))
- **cluster:** Fix nodes failing to join the cluster when TLS is enabled ([#&#8203;6437](https://github.com/grafana/alloy/issues/6437)) ([efbad6d](https://github.com/grafana/alloy/commit/efbad6de6cdd67732bfa41ea1fe6191be0ee5b91)) ([@&#8203;kgeckhart](https://github.com/kgeckhart))
- **database\_observability.mysql:** Exclude system schemas from MySQL health check ([#&#8203;6116](https://github.com/grafana/alloy/issues/6116)) ([fcae6f4](https://github.com/grafana/alloy/commit/fcae6f4beff1d582c7e3ac0708256ef12ab10302)) ([@&#8203;matthewnolf](https://github.com/matthewnolf))
- **database\_observability.postgres:** Count error logs when log\_timezone is non-UTC ([#&#8203;6274](https://github.com/grafana/alloy/issues/6274)) ([2eaa769](https://github.com/grafana/alloy/commit/2eaa76967e0932869843b39a17021bfc69ed2eda)) ([@&#8203;gaantunes](https://github.com/gaantunes), [@&#8203;cristiangreco](https://github.com/cristiangreco))
- **database\_observability.postgres:** Do not retain query text in `explain_plans` collector ([#&#8203;6461](https://github.com/grafana/alloy/issues/6461)) ([4c06a64](https://github.com/grafana/alloy/commit/4c06a64254aacabab5af377908df9c9f07323de7)) ([@&#8203;cristiangreco](https://github.com/cristiangreco))
- **database\_observability:** Exclude more explain plan output keywords ([#&#8203;6145](https://github.com/grafana/alloy/issues/6145)) ([3ff6c14](https://github.com/grafana/alloy/commit/3ff6c1489882139822427e4232e9b186db0043e9)) ([@&#8203;cristiangreco](https://github.com/cristiangreco))
- **deb:** Restart Alloy only on upgrade in postinst script ([#&#8203;6094](https://github.com/grafana/alloy/issues/6094)) ([8c15cb3](https://github.com/grafana/alloy/commit/8c15cb358b7d8e5ff159e633a5b5ae867e3c2e94)) ([@&#8203;guoard](https://github.com/guoard), [@&#8203;jharvey10](https://github.com/jharvey10))
- **deps:** Pin dependencies ([#&#8203;6376](https://github.com/grafana/alloy/issues/6376)) ([79323b5](https://github.com/grafana/alloy/commit/79323b5685acda5fc538b3a18ccc1906b14218e2))
- **deps:** Update dependencies for catchpoint, databricks, and snowflake exporters ([#&#8203;6188](https://github.com/grafana/alloy/issues/6188)) ([c1b740c](https://github.com/grafana/alloy/commit/c1b740cd7fc7d2b521304ee15c9c9f61d0d5ceb0)) ([@&#8203;Dasomeone](https://github.com/Dasomeone))
- **deps:** Update module go.opentelemetry.io/obi to v0.8.0 \[SECURITY] ([#&#8203;6091](https://github.com/grafana/alloy/issues/6091)) ([05c14af](https://github.com/grafana/alloy/commit/05c14af450000f11a367d5f62fd5e9334a49f160))
- **documentation:** Fix documentation for loki.rules.kubernetes ([#&#8203;6088](https://github.com/grafana/alloy/issues/6088)) ([61f2b8a](https://github.com/grafana/alloy/commit/61f2b8a09e7705714553662de4dfc7a33a8536bb)) ([@&#8203;timonegk](https://github.com/timonegk), [@&#8203;clayton-cornell](https://github.com/clayton-cornell))
- Enforce Singleton For Running Alloy Extension Instances ([#&#8203;5763](https://github.com/grafana/alloy/issues/5763)) ([83da6f0](https://github.com/grafana/alloy/commit/83da6f0cd3604a8b4306e5ddecd685db54d38361)) ([@&#8203;blewis12](https://github.com/blewis12), [@&#8203;clayton-cornell](https://github.com/clayton-cornell))
- **faro:** Abort on context cancelation ([#&#8203;6104](https://github.com/grafana/alloy/issues/6104)) ([bf733a6](https://github.com/grafana/alloy/commit/bf733a6d549b4cd9320a9b19a2940a74fd15dfad)) ([@&#8203;kalleep](https://github.com/kalleep))
- Fix bug that caused 'logging' block's 'write\_to' to be used after config update even if not set ([#&#8203;6264](https://github.com/grafana/alloy/issues/6264)) ([cba7243](https://github.com/grafana/alloy/commit/cba72437c9f34ce8658a4bf49dbbea1b1207db3f)) ([@&#8203;ptodev](https://github.com/ptodev))
- **graphql:** Update cli flags for consistency ([#&#8203;6441](https://github.com/grafana/alloy/issues/6441)) ([7749d4f](https://github.com/grafana/alloy/commit/7749d4f3f5f259e0352e029189691f6385d859d0)) ([@&#8203;jharvey10](https://github.com/jharvey10))
- **helm:** Honor alloy.configMap.key in templates/configmap.yaml ([#&#8203;6312](https://github.com/grafana/alloy/issues/6312)) ([415af2c](https://github.com/grafana/alloy/commit/415af2cb369dea327389c81832a6f7e4e241d2b2)) ([@&#8203;jmichalek132](https://github.com/jmichalek132), [@&#8203;kalleep](https://github.com/kalleep))
- **integration-tests:** Forward GO\_TAGS to k8s integration tests ([#&#8203;6220](https://github.com/grafana/alloy/issues/6220)) ([b00f79c](https://github.com/grafana/alloy/commit/b00f79c6f58b54806465685f11f7999d10bad964)) ([@&#8203;thampiotr](https://github.com/thampiotr))
- **logging:** Fix startup deadlock when components log before logging config is evaluated ([#&#8203;6112](https://github.com/grafana/alloy/issues/6112)) ([6cdce9e](https://github.com/grafana/alloy/commit/6cdce9ed9c225f0e4addef3300e9fb11df6e41b6)) ([@&#8203;kgeckhart](https://github.com/kgeckhart))
- **loki.process:** Make limit stage shutdown cancelable ([#&#8203;6215](https://github.com/grafana/alloy/issues/6215)) ([20717b5](https://github.com/grafana/alloy/commit/20717b56d17ac6fe487c4c3f665d2262c2afbde8)) ([@&#8203;boinger](https://github.com/boinger))
- **loki.process:** New `action_on_duplicate_timestamp` config attribute to fudge identical log timestamps ([#&#8203;5615](https://github.com/grafana/alloy/issues/5615)) ([7d56f50](https://github.com/grafana/alloy/commit/7d56f50fc860b7c417c8733e58000a7f6c297666)) ([@&#8203;boussaffawalid](https://github.com/boussaffawalid))
- **loki.process:** No longer mutate rules in stage.truncate causing every config update to reload pipeline when this stage is used ([#&#8203;6271](https://github.com/grafana/alloy/issues/6271)) ([b52a4d8](https://github.com/grafana/alloy/commit/b52a4d887b6cbeb06a9cd50426745e6ea4d1c48b)) ([@&#8203;kalleep](https://github.com/kalleep))
- **loki.process:** Potential deadlock on update with stage and receiver changes ([#&#8203;6270](https://github.com/grafana/alloy/issues/6270)) ([cb22e82](https://github.com/grafana/alloy/commit/cb22e82ce74f5727a8d8d0a5b743ff6a0033ba55)) ([@&#8203;kalleep](https://github.com/kalleep))
- **loki.process:** Wrap NewPipeline error correctly in match stage ([#&#8203;6216](https://github.com/grafana/alloy/issues/6216)) ([f3af2dd](https://github.com/grafana/alloy/commit/f3af2ddba71b17707c12529851c0c713746a9754)) ([@&#8203;boinger](https://github.com/boinger))
- **loki.rules.kubernetes:** Add timeout to ruler sync calls ([26170d4](https://github.com/grafana/alloy/commit/26170d4d8fcb8b03dfda5dbff11fdf307496b96b)) ([@&#8203;QuentinBisson](https://github.com/QuentinBisson))
- **loki.source.syslog:** Fix goroutine leak in UDP listener ([#&#8203;6231](https://github.com/grafana/alloy/issues/6231)) ([268b260](https://github.com/grafana/alloy/commit/268b260fbb0c693fe6efbf275b41379fb000e5a2)) ([@&#8203;x1unix](https://github.com/x1unix))
- **loki:** Clone structured metadata so we can perform fan-out correctly ([#&#8203;6138](https://github.com/grafana/alloy/issues/6138)) ([473244d](https://github.com/grafana/alloy/commit/473244daec6de6a6d29284b4e49bdd0456b338da)) ([@&#8203;kalleep](https://github.com/kalleep))
- **oracledb\_exporter:** Support CGO\_ENABLED=0 cross-compilation ([#&#8203;6168](https://github.com/grafana/alloy/issues/6168)) ([63ab53d](https://github.com/grafana/alloy/commit/63ab53d8b477a0403ce24dbd759572707bd3fef2)) ([@&#8203;korniltsev-grafanista](https://github.com/korniltsev-grafanista))
- **otelcol.exporter.awss3:** Add missing `unique_key_func_name` attribute ([#&#8203;6184](https://github.com/grafana/alloy/issues/6184)) ([9ad2b44](https://github.com/grafana/alloy/commit/9ad2b4419620e8c4aa69dd63a166af6fb4e4d7ac)) ([@&#8203;kalleep](https://github.com/kalleep))
- **prometheus.exporter.oracledb:** Fix issue with custom metrics not appearing when more than one instance of prometheus.exporter.oracledb is used ([#&#8203;6228](https://github.com/grafana/alloy/issues/6228)) ([57de4f4](https://github.com/grafana/alloy/commit/57de4f4aab2c2cc4602f1c63a8f9989f0ed1143e)) ([@&#8203;ptodev](https://github.com/ptodev))
- **prometheus.operator.\*:** Pass ScrapeNativeHistograms to ScrapeOptions ([#&#8203;6356](https://github.com/grafana/alloy/issues/6356)) ([a44fced](https://github.com/grafana/alloy/commit/a44fced4a7cfdeb663c90cec469a3fdf47e73fe6)) ([@&#8203;sberz](https://github.com/sberz))
- **remotewrite:** Use blocking send with timeout in test server ([#&#8203;6208](https://github.com/grafana/alloy/issues/6208)) ([a279088](https://github.com/grafana/alloy/commit/a2790882c9df8ca4228491719947912a6c4e97b9)) ([@&#8203;kgeckhart](https://github.com/kgeckhart))
- **security:** Update module github.com/jackc/pgx/v5 to v5.9.2 \[SECURITY] ([#&#8203;6326](https://github.com/grafana/alloy/issues/6326)) ([bf3ff2e](https://github.com/grafana/alloy/commit/bf3ff2e22273e5ee22031dff7b2495bc7441b868))
- **security:** Update x/crypto and x/net for CVEs ([#&#8203;6336](https://github.com/grafana/alloy/issues/6336)) ([4c7b93b](https://github.com/grafana/alloy/commit/4c7b93b9fd3c27cd519a1841654b34e1091c856b)) ([@&#8203;thampiotr](https://github.com/thampiotr))
- **ui:** Reduce UI dependencies ([#&#8203;6349](https://github.com/grafana/alloy/issues/6349)) ([85e12ba](https://github.com/grafana/alloy/commit/85e12ba42faa7331bb03156e2f1873f977bf2dae)) ([@&#8203;jharvey10](https://github.com/jharvey10))
- **ui:** Update dependency minor versions ([#&#8203;6288](https://github.com/grafana/alloy/issues/6288)) ([52a28d2](https://github.com/grafana/alloy/commit/52a28d2306e0b379436721f7ca2ec98ef32c1d31)) ([@&#8203;jharvey10](https://github.com/jharvey10))
- Update go to v1.26.4 ([#&#8203;6418](https://github.com/grafana/alloy/issues/6418)) ([51fb7d2](https://github.com/grafana/alloy/commit/51fb7d21eb9c2c328ad60f5ed3aae0c828672cde)) ([@&#8203;kalleep](https://github.com/kalleep))
- **validation:** Improve type checking of ast.LiteralExpr ([#&#8203;5916](https://github.com/grafana/alloy/issues/5916)) ([d0a1177](https://github.com/grafana/alloy/commit/d0a11773cd22ffd32e7c9e06d8f23256c44f0dcf)) ([@&#8203;kalleep](https://github.com/kalleep))

#### Upgrading

Read the [release notes] for specific instructions on upgrading from older versions:

[release notes]: https://grafana.com/docs/alloy/v1.17/release-notes/

#### Installation

Refer to our [installation guide] for how to install Grafana Alloy.

[installation guide]: https://grafana.com/docs/alloy/v1.17/get-started/install/

### [`v1.16.3`](https://github.com/grafana/alloy/releases/tag/v1.16.3)

[Compare Source](https://github.com/grafana/alloy/compare/v1.16.2...v1.16.3)

##### Bug Fixes 🐛

- **cluster:** Fix nodes failing to join the cluster when TLS is enabled \[backport] ([#&#8203;6438](https://github.com/grafana/alloy/issues/6438)) ([4920e69](https://github.com/grafana/alloy/commit/4920e698823c8d574bb10334dfe5edec574aa255)) ([@&#8203;kgeckhart](https://github.com/kgeckhart))

#### Upgrading

Read the [release notes] for specific instructions on upgrading from older versions:

[release notes]: https://grafana.com/docs/alloy/v1.16/release-notes/

#### Installation

Refer to our [installation guide] for how to install Grafana Alloy.

[installation guide]: https://grafana.com/docs/alloy/v1.16/get-started/install/

</details>

<details>
<summary>plantuml/plantuml-server (plantuml/plantuml-server)</summary>

### [`v1.2026.6`](https://github.com/plantuml/plantuml-server/compare/v1.2026.5...v1.2026.6)

[Compare Source](https://github.com/plantuml/plantuml-server/compare/v1.2026.5...v1.2026.6)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My43My4yIiwidXBkYXRlZEluVmVyIjoiNDMuNzMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsicmVub3ZhdGUiXX0=-->

Reviewed-on: https://forgejo.internal/forgejo_admin/infra-personal/pulls/104
Co-authored-by: Renovate Bot <renovatebot@forgejo.internal>
Co-committed-by: Renovate Bot <renovatebot@forgejo.internal>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants