Skip to content

Release v0.1.3

Choose a tag to compare

@github-actions github-actions released this 07 Aug 20:42
· 29 commits to main since this release

[0.1.3] - 2026-08-07

⚠️ Breaking Changes

  • Document postgres named-volume breaking change and migration

The postgres container now mounts a named volume
(zerf_postgres_db_data) at /data/db. Existing deployments must copy their
PostgreSQL data directory from the previous anonymous volume into
zerf_postgres_db_data before upgrading, or the database will start empty.
See docs/UPGRADING.md.

Added

  • Render independent leave-account columns in the team report
  • Queue outbound email delivery with retry and a circuit breaker
  • Add manual "Back up now" trigger, fix Upload now placement
  • Couple leave-account access to entitlement and tile visibility
  • Include comment in the new absence request email
  • Align dashboard card and assistant relevance
  • Provisional manual sends, an exclusion list, and a status card
  • Use auto-growing textarea for recipient addresses
  • Auto-select absence categories, support multiple recipients
  • Show single entry edits individually, full detail for weeks
  • Email a monthly payroll report to the tax office
  • Record week approvals as one audit event per week
  • Deep-link from pending approvals and show entry comments
  • Support recurring manual holidays
  • Bundle backups into a single zip archive
  • Larger desktop typography via rem root font-size
  • Larger typography, centered page width cap, CSS modularization
  • Remove the 14-hour per-day cap
  • Central delivery facade and opt-in admin error alerts
  • Add System Log page and paginate the Audit Log
  • Require a valid share URL to enable backup upload
  • Add null-safe name comparison and update sorting logic in TeamUsers
  • Implement role-based avatar colors and sorting in user lists
  • Group the combined timesheet PDF export by role
  • Color avatars by role and group rosters by role
  • Zero leave days on assistant role selection, restore on switch back
  • Hide irrelevant fields for assistant role instead of disabling them
  • Add Playwright e2e suite with backup/restore verification
  • Self-load holidays for out-of-range years in request dialog
  • Capture pg_tde keyring with each backup for physical recovery
  • Replace wrapping settings tabs with mobile dropdown
  • Send email notification on admin password reset
  • Enable team lead assistant management by default
  • Preserve time data when disabling time tracking, add missing i18n
  • Restore lz4 compression on audit_log via migration 029
  • Add 10-year hard-coded retention for audit_log
  • Add user archiving and restore
  • Allow team leads to create and manage assistant users
  • Sort users alphabetically in all list views
  • Wire base annual_leave_days through user create/update
  • Per-employee category enable/disable
  • Persistent backup scheduling, count-based retention, and admin system-error notifications
  • Interval in days, run daily at 4am UTC
  • Redesign monthly PDF export as per-employee queue
  • Rename Nextcloud Upload tab to Nextcloud Backups
  • Nextcloud upload for DB backups and monthly timesheet PDFs
  • Add per-user submission auto-approval, make all auto-approvals silent
  • Per-option info icons in the AbsenceCategoryDialog
  • Make absence categories fully configurable
  • Extend automatic break deduction to two configurable tiers
  • Implement automatic break deduction
  • Add optional hire date for accurate leave-entitlement proration
  • Generate timesheet export PDFs in the backend

Changed

  • Simplify SMTP sending with a guarded send wrapper and timeout
  • Remove redundant leave-accounts card from Account page
  • Shrink shipped images and keep build cache off the layer graph
  • Simplify TeamReport component by removing leave account handling and updating test fixtures
  • Update team report response type and simplify absence record handling in tests
  • Update workday handling to support flexible scheduling and improve documentation
  • Move upload button to shared actions bar
  • Remove product name from email copy and harden restore selection
  • Simplify payroll and backup copy
  • Drop the "Sonstige Abwesenheit" catch-all category
  • Unify Reports page into Employee/Team tabs with shared toolbar
  • Centralize generated copy
  • Use query_scalar for the category active check
  • Remove system-error alert emails, keep in-app only
  • Remove redundant upload failure notification logic and update documentation
  • Move allow-team-lead-manage-assistants setting to Users page
  • Reorganize FlextimeSection layout and improve responsive design
  • Update development workflow guidelines in AGENTS.md
  • Update archived users section to match merged Users page
  • Unify 'member' terminology to 'user'
  • Merge archived users into Users settings page
  • Centralize post-auth data loading in one shared loader
  • Remove UPGRADING.md
  • Reflect current state (self-contained backup image, postgres caps)
  • Correct data-at-rest encryption docs and add recovery/migration guidance
  • Document postgres named-volume breaking change and migration
  • Replace user deactivation with archiving
  • Unify Admin and Team Settings into a single Settings menu item
  • Sync user-guide table of contents and fix duplicate table row
  • Fix several user-guide.md inaccuracies found during a full audit
  • Collapse cost flags into cost_type enum; drop team_visible
  • Remove jurisdiction references from break deduction comments
  • Extract inline styles to CSS utility classes

Dependencies

  • Refresh Cargo.lock via cargo update

Fixed

  • Retry queue-entry deletes after confirmed email delivery
  • Grant assistant category access before setting leave-account entitlement
  • Wait for the category list to load before clicking Add
  • Default new categories to the end of the sort order
  • Update leave-account card selector after tile redesign
  • Build docker images sequentially to avoid CI build races
  • Use numeric --chmod for static asset COPY
  • Compute automatic break deduction against the day's total, not per block
  • Keep "Back up now" responsive during failure backoff
  • Translate absence category, align hours table, drop absence total
  • Add padding and fix alignment on leave account cards
  • Add missing translations for team report vacation columns
  • Pre-pull postgres image with retry for integration tests
  • Enhance TeamReport table with wrapping-optimized headers and add corresponding test
  • Restore the custom date and time pickers on touch devices
  • Stop Safari collapsing the dialog body to its padding
  • Use native mobile time input fallback
  • Remove unused payroll report notice from AdminPayrollReport
  • Make payroll send status non-blocking
  • Harden dialog interaction handling
  • Complete entry dialog edge-case hardening
  • Harden entry dialog rendering and fallback behavior
  • Harden time entry dialog browser compatibility
  • Tile must require approval even when hours aren't reported
  • Show hours with two decimal places
  • Correct the dashboard card's sent state and colour split
  • Prevent approval queue card headers from overflowing on mobile
  • Match the established 'selected day' phrasing in the Send now hint
  • Clarify the Send now hint now that it doesn't skip the scheduled delivery
  • A manual send no longer replaces the scheduled delivery
  • Only mark categories unpaid explicitly, not by cost_type
  • Validate backup selection explicitly
  • Fix label overflow and upload actions layout
  • Land team leads on the leftmost tab, sort team users list
  • Fix payroll report category list translation and layout
  • Require full approval and pre-start correctness on the Nextcloud export too
  • Correct the flextime claim for no-cost absence days
  • Describe absence cost types from the employee's perspective
  • Restore shared input style and equal widths for flextime date pickers
  • Guard category-picker save against races and dropped edits
  • Remove sick-like qualifier from auto-approve label
  • Correct German case agreement in no-cost help text
  • Fix light-theme color-scheme so inputs stay light when OS is dark
  • Clarify no-cost absence category label and help text
  • Fix date picker input theme and flextime section overflow
  • Wrap dialog footer buttons onto multiple rows
  • Count pending weeks, not time-entry rows, in approval reminders
  • Make metadata cp best-effort in direct dump.enc path
  • Fix three logic errors in restore.sh
  • Preserve line breaks in notification body text
  • Remove redundant table-wrap on approval queue cards
  • Remove PasswordCredential API calls interfering with password managers
  • Translate error notification and report-upload alert text
  • Make absence dates weekend/holiday-safe, fix renamed audit-log selector
  • Require review for start-date reexports
  • Preserve timesheet export integrity
  • Remove orphaned test and unused import after notification removal
  • Improve handling of unexportable timesheet entries and enhance notification details
  • Update user-roster selector after settings card was added above list
  • Update assistant-setting test to use Users page
  • Resolve rejected entry lifecycle traps
  • Harden timesheet PDF export requeue
  • Hold report export for pending absences
  • Tighten export readiness checks
  • Close export and workflow edge cases
  • Four correctness defects in PDF, archive, weekly-status, and absence behavior
  • Harden reopen and reminder workflows
  • Remove -i from docker exec where no host stdin is needed
  • Correct backfill logic and add unit tests
  • Resolve 7 audit findings across submission, export, and reopen workflows
  • Correct phantom-year guard and update tests for pessimistic sourcing
  • Correct vacation/absence logic holes and backup/restore defects
  • Adjust bell position and sidebar width for improved layout
  • Scope team settings to assigned approvers
  • Enable allow_team_lead_manage_assistants before team lead tests
  • Harden backup restore flow
  • Restore PDF total break-adjustment and add archiving cancellation_pending test
  • Close archived-user leaks in reopen requests and approval reminders, unblock absence cancellation
  • Resolve remaining timesheet workflow issues
  • Resolve audit findings in absence calendar, archiving, holiday idempotency, and report totals
  • Restrict restore dialog approver picker to leads and admins
  • Exclude non-tracking users from combined PDF
  • Auto-reopen unapproved submitted weeks
  • Route approval reminder clicks to the dashboard
  • Adjust Team Settings placement for better role distinction
  • Make auto-break threshold exclusive, matching ArbZG §4
  • Decode nullable user_id as Option to handle deleted users
  • Update submission obligation logic for non-assistants and zero-weekly-hours users
  • Check admin authorization before validating holiday name
  • Log category and holiday create/update/delete
  • Fix oversized upload-now button and add distinct highlight style
  • Wait for week-approval toast to clear before absence approval
  • Apply consistent scrollbar styling to dialogs and panels
  • Prevent settings race from overwriting zeroed leave days for assistant
  • Clear pending approval entries for all approvers once an item is decided
  • Add WinAnsiEncoding and move Tf inside BT block
  • Replace printpdf with pdf-writer to remove lopdf vulnerability
  • Label request-dialog duration as workdays, not calendar days
  • Correct field spacing in entry and member dialogs
  • Reload absence categories and earliest start date after first-login password change
  • Block upload SSRF, validate holiday country, enforce CI audits
  • Make the pg_tde keyring sidecar capture work (0644 ciphertext)
  • Stream the dump into the container instead of docker cp
  • Make volume-extracted copies readable by the non-root host user
  • Bake backup.sh into the backup image instead of bind-mounting
  • Restrict postgres container to a minimal capability set
  • Stream pg_dump into openssl to remove the /tmp tmpfs ceiling
  • Preserve pg_tde extension during restore to prevent data loss
  • Add overflow-x: auto to desktop settings tabs
  • Remove mobile menu X button, fix SMTP status for team lead user creation
  • Pass smtpEnabled to TempPasswordDialog in AdminUsers password reset
  • Allow admins with must_change_password to reset other users' passwords
  • Explicitly mount postgres PGDATA as named volume to prevent data loss
  • Close pending queue items when disabling time tracking
  • Filter time entries by start_date in list_for_user, update tracks_time test
  • Update stale comment and refresh user state on tab visibility
  • Import ImageExt trait for with_tag on testcontainers Postgres
  • Use postgres:17 testcontainer to support lz4 and drop DO-block workaround
  • Correct two errors found during review
  • Drop lz4 COMPRESSION from migration 028
  • Correct two errors found during review
  • Address storage leaks and resource waste from audit
  • Correct test password length (EmpDel -> 12 chars)
  • Extend test passwords to meet 12-char minimum
  • Add archived_at to report repository User queries
  • Correct archive logic errors found during review
  • Let team leads reactivate assistants, remove their delete capability
  • Update TeamSettings test for alphabetical sort order
  • Sort users alphabetically in team and category reports
  • Include annual_leave_days in report user-select queries
  • Complete user category selection flow
  • Align start/hire date fields when hire date clear button appears
  • Restore pinned=TRUE on re-alert in notify_admins_backup_error
  • Correct backup interval field min/placeholder; fix user-guide
  • Retry tomorrow on failure instead of waiting the full interval
  • Make MKCOL non-fatal; bulk INSERT for queue population
  • Rename PDF to Stundenzettel_Vorname_Nachname and move Upload now button
  • Add missing allow_submission_without_approval column to timesheet query
  • Renumber upload_settings migration from 020 to 021
  • Resolve compilation errors and bats test failures
  • Include auto_approved in the empty-ids submit response
  • Strip debug logging from production builds (#52)
  • Top-align logo inside sidebar-logo-icon
  • Unify checkbox/radio look and spacing in AbsenceCategoryDialog
  • Translate absence category names, shorten add buttons, tidy mobile layout
  • Address 3 logic errors in configurable-categories surface integration
  • Tighten calendar comment privacy and document validate_flextime_balance
  • Seed absenceCategories store in Time.test.js setup
  • Address 6 logic errors in configurable absence categories audit
  • Remove unused absence_cat_id helper from integration tests
  • Update integration tests for B7/B8 absence category cost-type guards
  • Add missing team_visible field to AbsenceCategory test helper
  • Populate absenceCategories store in tests and update user guide
  • Resolve logic errors in configurable absence categories (B1-B9)
  • Remove time-entry conflict check from update_absence
  • Correct 5 logic bugs in flextime_reduction handling
  • Correct store teardown on logout, workday preview count, and test pool stability
  • Suppress spurious category error on forced password change login
  • Alternate timesheet PDF row shading per drawn row, not per day
  • Resolve pre-existing clippy lints in services and integration tests