v1.0.6
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.6 - 2026-06-09
Changed
- The log pane is hidden by default and toggled from View ▸ Show Log.
The window is compact unless you open the log. - A status line shows the full output path (wrapped, so it's all visible)
and live progress — "Report will be saved to: …", "Comparing…", and a green
"Report saved to: …" or red failure notice when it finishes. With the log
hidden, a failed comparison also raises a dialog so it can't be missed. - File pickers scroll to show the end of long paths (the filename stays in view).
1.0.5 - 2026-06-09
Fixed
- The app's version metadata now matches the running app. The build read the
version by scanning__init__.py, which only re-exports it, so the macOS
bundle's version silently fell back to a default (Get Info showed1.0.0
while About showed the real version). The build now reads_version.py, and
the Windows.exegets a proper version resource in its file properties too.
Changed
- The project picker only accepts
.driveprojxfiles. The Folder… option
was removed (DriveWorks projects are stored as.driveprojx, not loose
folders), and the file dialog shows a singleDriveWorks project (*.driveprojx)
filter with no "All files" fallback. - Help → How to Use now opens concise in-app usage instructions instead of
launching the GitHub repository in a browser. - The "Save report as…" dialog no longer shows a file-type chooser; the report
is always HTML and keeps the.htmlextension.
1.0.4 - 2026-06-09
Fixed
- The GUI no longer crashes with "Read-only file system" when launched from a
double-clicked app (macOS and Windows). The default report path was the
relativedw_comparison.html, which resolved against the process working
directory — which can be read-only for a double-clicked app (/on macOS via
Finder;C:\Windows\System32orProgram Fileson Windows) — so clicking
Compare with the default output failed. The default is now an absolute path in
your Downloads (or home) folder, shown in full, and any bare filename you
enter is anchored there rather than the working directory.
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 usesPath.as_uri(). .driveprojxtemp-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 TDMdesignMastervariable 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. .driveprojxextraction 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
CalcTableCellmodel.
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
.driveprojxsupport, files are auto-extracted to a temp directory. - Recursive scanning, all
project.xml,designMaster.xml,componentTasks.xml,
and.tdmfiles 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.
- Sticky filter bar with status filters, search, flip-direction, and toggles
- Three launch modes:
- CLI,
python -m dw_compare ... - GUI,
python -m dw_compare --guior double-clickrun_compare.command
on macOS - Auto-detect, run with no args inside a folder containing two projects
- CLI,
- 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.
--versionflag on the CLI.- Self-contained HTML output suitable for sharing by email or hosting on
an internal share.