Skip to content

Calendifier v1.7.0

Latest

Choose a tag to compare

@oernster oernster released this 30 Jun 08:21

Release Notes

Experience

  • 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.