You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Responsive clock panel. The analog clock now scales to the space it has
and the surrounding column scrolls when needed, so the clock and the text
beneath it never overlap or truncate on small (13") laptop screens, including
on Linux and macOS where fonts render larger.
Sequential note numbering. Notes are always presented as a contiguous
1, 2, 3 … sequence. Deleting a note renumbers the rest, and any historical
gaps left by earlier deletions are repaired automatically.
Region-aware public holidays. The country whose public holidays appear is
now an explicit choice, surfaced both as a top-bar selector (beside the
language selector) and in settings. It defaults to "Auto", which derives the
region from the selected timezone, then falls back to the locale, then to a
sensible default. The holiday region is deliberately decoupled from the
interface language: changing language only re-translates holiday names, never
changes which country's holidays are shown.
Countries shown in their own language. The country selector now lists each
country by its native name (its endonym) such as Deutschland, 日本, 中国 and
Catalunya, rather than by an English or interface-language label. The displayed
name no longer changes with the chosen language, so a country always reads the
same way wherever you are. Each country has a single primary native name;
Catalonia keeps its Catalan name and observances and is shown under the shared
Spanish flag.
International observances. Beyond official public holidays, the calendar
now shows widely-marked cultural observances (Father's Day, Mother's Day,
Valentine's Day, Halloween, carnival days, name days and more) for every
supported country. They are clearly distinguished from public holidays and are
never treated as days off, so working-day calculations stay correct. Dates
that move from year to year (those tied to Easter, including the Eastern
Orthodox calendar where appropriate, and "nth weekday of the month" rules) are
computed rather than hard-coded. Every date was independently verified before
inclusion.
Visual identity. A dedicated application icon is used throughout: on the
main window's front page, in the About dialog (previously a placeholder glyph)
and as the window and taskbar icon. The About dialog was also tidied to plain,
emoji-free text with no duplicated headings, and the application name no longer
carries a decorative icon in the title.
Instant splash screen. The startup splash (application name, author and
version) now appears immediately on launch rather than just before the main
window, and stays visible while the app initialises.
Crisp digital clock. The small clock indicator beside the digital time is
no longer clipped.
Packaging and distribution
Consistent per-platform installers. A per-user graphical installer for
Windows, a signed (optionally notarized) disk image for macOS, and a Flatpak
for Linux, all following one shared structure and identity.
Installer matched to the application. The Windows installer now wears
Calendifier's own colour scheme (its blue accent, neutral surfaces and the
app's status colours) instead of a palette carried over from an earlier
project, so installing the app looks like part of the app.
Rebuilt Linux Flatpak build. The Flatpak build was rebuilt from scratch
around the application's real entry point and runtime dependencies, replacing
an older script that had grown large and unreliable. It produces a Flatpak
bundle ready to install.
Single source of truth for versioning. One version value drives the
runtime, the packaging metadata and the documentation, which is stamped to
match at build time. No release number is duplicated by hand.
One master icon, every format. All icon assets (multiple raster sizes, the
Windows multi-resolution icon, the macOS icon and a scalable variant) are
generated from a single master image.
Reliability
Fixed a packaged-build startup failure. Windowed (no-console) packaged
builds previously failed to launch because early start-up output had nowhere
to go; output streams are now made safe before anything writes to them.
Warning-free at the source. Deprecated platform calls and deprecated
third-party arguments were replaced with their supported equivalents rather
than suppressed, so the application and its test run emit no warnings. Two
missing interface labels that produced start-up translation warnings were
added.
Quieter console. Routine runs now print only warnings and errors to the
console while the full detail continues to go to the application log file.
Console verbosity can be raised with an environment variable when diagnosing.
A stray start-up character and very noisy per-event log lines were removed.
Engineering quality
Enforced coverage. A 100% test-coverage gate covers the core logic
surface. Tests use real objects and real inputs only (no mocking) and avoid
fragile constructs. Tests that drive the graphical toolkit are kept in a
separate suite that is intentionally outside the primary gate, so the gate
stays fast and stable.
Coverage gate robust to how it is run. The gate now always measures the
same fixed set of core modules however the test command is invoked, so it can
no longer be accidentally widened (and made to look like a failure) by an
extra coverage flag on the command line.
Environment-independent tests. A locale-detection test that used to depend
on the developer's shell settings now sets its own environment, so the gate
produces the same result on every machine rather than passing or failing by
accident.
Developer and testing guides. Dedicated guides now describe how to set up
a development environment and build for each platform, and how the coverage
gate works and how to extend it.
Module-size discipline. A structural test keeps source modules within a
line limit so logic stays decomposed. Genuine data tables are exempt, and the
set of pre-existing oversized modules is tracked so it can only shrink over
time, never grow.
Uniform style and linting. The whole codebase is formatting- and
lint-clean under the project's configured tools.