Skip to content

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 09 Jun 17:48
· 8 commits to main since this release

Changelog

All notable changes to DriveWorks Project Compare are documented in this file.
The format loosely follows Keep a Changelog,
and the project uses Semantic Versioning.

1.0.3 - 2026-06-09

Fixed

  • Search and status filters no longer hide matches inside grouped sections.
    In Forms, Specification Macros, Documents, and Calculation/Lookup tables, a
    search term (or a status filter) that matched a row was hidden whenever the
    term wasn't also in the section's header. Group headers now follow their rows:
    a group shows whenever any of its rows is visible.
  • Reports open reliably on Windows. Auto-open built the file:// URL by
    string concatenation, which produced a malformed URL on Windows (drive
    letters / backslashes) and left spaces unescaped. It now uses Path.as_uri().
  • .driveprojx temp-directory cleanup now drains its tracking list, so repeated
    comparisons in the GUI don't re-attempt deletion of already-removed folders.
  • Lookup tables with duplicate column-header names are now diffed per
    column. Columns were keyed by header name, so repeated names collapsed to the
    last one and could miss a change or attribute it to the wrong column; columns
    are now matched positionally.

Removed

  • The Special Variables section. It added noise without signal for project
    comparison, so it is no longer parsed or shown.
  • The Flip Direction button. The report already shows additions and removals
    side by side, so flipping only relabeled and recolored — while being a
    recurring source of subtle display bugs. Removed in favor of re-running with
    the projects swapped when the other framing is needed.

Added

  • Loading a project with multiple/nested specifications now prints a notice
    that their contents are merged into one view (identically named items across
    specifications can overwrite each other), instead of merging silently.
  • A pytest test suite (tests/) covering the comparison layer, parsers
    (including the real-world TDM designMaster variable format, cross-file
    category-GUID resolution, spec-macro property binding, and the .driveprojx
    zip-slip guard), report rendering, the CLI entry point, and the update check,
    with a regression test for every bug fixed in 1.0.1, 1.0.2, and the items above.
  • A Tests GitHub Actions workflow that runs pytest on every push and pull
    request (Python 3.10 and 3.12); release builds now run the tests first.

1.0.2 - 2026-06-09

Added

  • Variables table now shows a Category column (resolved category name).

Fixed

  • Document Type changes are now detected — a type-only change previously
    showed as Unchanged.
  • Documents now show a rule-level breakdown (which rule changed and how)
    instead of only a rule count.
  • Component Tasks now show a rule-level breakdown under each modified task.
  • Variables and Constants now also compare store name and comment (shown as
    muted sub-notes); Calculation Tables now compare row count.

Changed

  • Each report section renders independently — one section hitting unexpected
    data degrades to a placeholder instead of failing the whole report.
  • A malformed (non-numeric) calculation-table RowIndex is ignored rather than
    aborting the parse.
  • .driveprojx extraction guards against path traversal (zip slip).
  • GUI: extracted temp dirs are cleaned up after each comparison, and the
    launch-time update check no longer errors if the window is closed first.
  • Removed the unused CalcTableCell model.

1.0.1 - 2026-06-09

Added

  • A free, fail-silent update check. On launch (GUI) and after a CLI run, the app
    queries the GitHub Releases API and shows a "newer version available" notice
    linking to the download page. It only notifies — it never downloads or
    installs — and is silent when offline.

Fixed

  • Flip Direction no longer corrupts the summary cards. It was swapping the
    card labels instead of the counts, leaving a green card labelled "Removed".
    It now swaps the Added/Removed counts and keeps labels and colors fixed.
  • Inline diffs are now token-level instead of word-level. Because DriveWorks
    formulas rarely contain spaces, any change used to re-highlight the entire
    formula; now only the changed token (number, identifier, operator) lights up.
  • Flip Direction is now consistent for lookup-table grids — per-cell and
    per-column highlight classes swap, and "New"/"Old" column badges flip too.
  • Duplicate task / component-task names no longer collapse. Specification
    macro tasks (keyed by title + type) and component tasks (keyed by name +
    component) now disambiguate repeats so a change in a same-named task is not
    silently dropped.
  • No more no-op "Modified" rows. Navigation steps and form/control
    properties that differ only in a non-displayed field (e.g. the IsStatic flag
    with an unchanged value) are now treated as unchanged.
  • Status filtering no longer orphans grouped rows. A group's identity row
    (control/task/column name) stays visible whenever any of its child rows pass
    the filter.
  • Removed em dashes from the report (the "unchanged" status marker).

1.0.0 - 2026-05-15

First public release. Compares two DriveWorks projects and generates a
self-contained HTML diff report.

Added

  • Direct .driveprojx support, files are auto-extracted to a temp directory.
  • Recursive scanning, all project.xml, designMaster.xml, componentTasks.xml,
    and .tdm files in nested folders are picked up.
  • Sections covered in the report:
    • Variables (with resolved category names)
    • Constants
    • Special Variables
    • Calculation Tables, including row-level rules
    • Component Tasks
    • Documents
    • Lookup Tables, rendered as cell-highlighted grids
    • Data Tables
    • Specification Macros, per-task and per-property
    • Navigation Steps
    • Forms, form-level rules plus per-control property formulas
  • Hierarchical diff rendering. Forms, Macros, and Calculation Tables emit
    grouped rows where the parent identifier (control, task, column) appears
    once per group, with a visual separator between groups.
  • Interactive HTML report:
    • Sticky filter bar with status filters, search, flip-direction, and toggles
      for "Show unchanged sections" and "Show unchanged lookup rows".
    • Sticky per-form and per-table sub-headers stay pinned while you scroll.
    • Auto-collapsed sections for empty diffs, click to expand.
  • Three launch modes:
    • CLI, python -m dw_compare ...
    • GUI, python -m dw_compare --gui or double-click run_compare.command
      on macOS
    • Auto-detect, run with no args inside a folder containing two projects
  • Tkinter GUI with file and folder pickers, live log pane, and a
    background worker so the window stays responsive.
  • Help menu with Documentation link and an About dialog.
  • --version flag on the CLI.
  • Self-contained HTML output suitable for sharing by email or hosting on
    an internal share.