Reviewed range: c59e3e3^..65cef24, covering merge commit c59e3e3 through 65cef24 inclusive.
Current branch/head reviewed: version-3.0.3-tr at 65cef24c6d6f9ee9c31222efe5f4aa947a2569fd.
This range is mainly a SwiftUI UI cleanup and consistency set. It adds destructive roles to delete confirmation buttons, removes a duplicated first-task creation view, converts add/edit task fields to grouped forms, moves sheet actions into toolbar placements, updates add-profile/task toolbar buttons to icon-only controls, moves the About sheet close action out of AboutView, hides the inspector tab label, and bumps CURRENT_PROJECT_VERSION from 197 to 200.
No rsync execution, storage, parsing, scheduling model, or process pipeline logic was changed. The largest behavioral change is in the first-task workflow: instead of rendering the deleted AddFirstTask view, the app now opens the shared Add Task sheet when the active profile has no configurations.
| Commit | Date | Author | Details |
|---|---|---|---|
c59e3e37 |
2026-07-08 | timreichen | Merged PR #137, adding role: .destructive to delete buttons. |
744d2a91 |
2026-07-08 | timreichen | Merged PR #141, replacing AddFirstTask with the shared Add Task sheet. |
ffae3f9a |
2026-07-08 | timreichen | Merged PR #140, moving the About sheet close button outside AboutView. |
1d0a8b82 |
2026-07-08 | timreichen | Merged PR #139, updating the Add Profile toolbar button. |
a81da0df |
2026-07-08 | timreichen | Merged PR #138, moving sheet buttons into ToolbarItems. |
85e47d0c |
2026-07-08 | timreichen | Bumped Xcode project build number from 197 to 200. |
6110ddbd |
2026-07-08 | timreichen | Refactored Add Task UI: deleted helper views, converted content to grouped Form, replaced custom fixed-width fields with standard TextFields, and moved sheet actions into toolbar items. |
0b1033aa |
2026-07-08 | timreichen | Follow-up task form update, mainly grouped form styling and field label cleanup. |
7f33d821 |
2026-07-08 | timreichen | Merged PR #142, using grouped form style for task fields. |
0b1da0f1 |
2026-07-08 | timreichen | Hid the inspector tab picker label. |
65cef24c |
2026-07-08 | timreichen | Merged PR #143, removing the visible inspector tab label. |
The raw ancestry for the range also includes the PR branch commits 8e720a1c, bc3b2cc1, ea6799b4, 38acc560, and 64528c4d, which are the side-branch commits merged by the PR merge commits above.
- Delete confirmation dialogs now mark delete actions as destructive in task lists, schedule lists, and snapshot lists.
- The first-task experience now uses the same Add Task sheet as the regular add-task workflow.
- Add Task and Add Profile sheets now place Add/Cancel controls in SwiftUI toolbar confirmation/cancellation placements.
- Add Task fields now use a grouped
Formlayout with standard SwiftUITextFields. - Task action and trailing-slash pickers now use
.menupicker style. - The Add Profile toolbar button now uses a plus icon with an accessibility/help label.
- The Add Task toolbar button now uses a plus icon in the status toolbar placement.
- The About sheet close button is now owned by
RsyncUIAppthrough the sheet toolbar. - The inspector segmented picker label is hidden.
- The project build number was bumped from
197to200.
- Removed
AddFirstTask.swift. - Removed
AddTaskContentView.swift. - Removed
AddTaskSectionHeader.swift. - Removed the close button and
dismissdependency fromAboutView.
Files changed:
RsyncUI/Views/Configurations/ListofTasksAddView.swiftRsyncUI/Views/Configurations/ListofTasksMainView.swiftRsyncUI/Views/ScheduleView/CalendarMonthView.swiftRsyncUI/Views/Snapshots/SnapshotListView.swift
The delete buttons inside confirmation dialogs now use Button("Delete", role: .destructive). This is a presentation/semantics improvement and should not alter the underlying delete calls.
Files changed:
RsyncUI/Views/InspectorViews/AddFirstTask.swiftRsyncUI/Views/InspectorViews/EditTabView.swiftRsyncUI/Views/InspectorViews/InspectorView.swift
AddFirstTask was deleted. EditTabView now always shows ListofTasksAddView and an always-present inspector, while .task(id: rsyncUIdata.configurations) opens the Add Task sheet when configurations are nil or empty.
This reduces duplicated add-task logic and routes first-task creation through AddTaskView.addTaskSheetView.
Files changed:
RsyncUI/Views/InspectorViews/Add/AddTaskView.swiftRsyncUI/Views/InspectorViews/Add/extensionAddTaskView.swiftRsyncUI/Views/InspectorViews/Add/extensionAddTaskView+FormFields.swiftRsyncUI/Views/InspectorViews/Add/extensionAddTaskView+ViewBuilders.swiftRsyncUI/Views/InspectorViews/Add/OpencatalogView.swift
The old custom wrapper views were replaced with an inline grouped Form. The sheet body now has the same core fields as the edit inspector: task type, trailing slash, synchronize ID, folders, and remote fields.
Important behavior retained:
handleSubmit()still advances focus and submits add/update on return.showAddPopoverstill resets form state when opening.addConfig()still validates throughObservableAddConfigurations.addConfig.validateAndUpdate()still updates throughObservableAddConfigurations.updateConfig.- Duplicate checking still runs after a successful add when enabled.
Main visual changes:
- Standard
TextFieldreplacesEditValueSchemefor most Add Task fields. - Fixed field widths were removed.
- Section headers are now standard
Section("...")labels. - Browse button sizing is now left to
.buttonStyle(.bordered).
Files changed:
RsyncUI/Main/RsyncUIApp.swiftRsyncUI/Views/Profiles/ProfileView.swiftRsyncUI/Views/Settings/AboutView.swiftRsyncUI/Views/InspectorViews/Add/extensionAddTaskView+ViewBuilders.swift
The Add Task, Add Profile, and About sheet actions are now represented as toolbar items with .confirmationAction and .cancellationAction placements where appropriate. The About close action is controlled by showabout in RsyncUIApp.
File changed:
RsyncUI/Views/InspectorViews/InspectorView.swift
The segmented inspector picker now has .labelsHidden(), removing the visible picker label while preserving the segments.
No blocking bugs were found in this range.
AboutView.openChangelog() still opens the changelog URL, but the previous dismiss() call was removed from the Changelog button when dismiss was removed from AboutView.
Current code: RsyncUI/Views/Settings/AboutView.swift, lines 61-67.
This is not necessarily wrong. It may be intentional because the sheet now has a toolbar Close button. It is a behavior change users may notice: after opening the changelog, the About sheet remains open.
Risk level: low.
EditTabView now opens the Add Task sheet when configurations are empty, while keeping the list and inspector visible.
Current code: RsyncUI/Views/InspectorViews/EditTabView.swift, lines 28-38.
If the user cancels the Add Task sheet on an empty profile, they remain on an empty task list with the inspector visible. This is probably acceptable, but it is a UX behavior change from the dedicated AddFirstTask view.
Risk level: low to medium.
Most Add Task fields changed from EditValueScheme(400, ...) to plain TextField(...) inside a grouped Form.
Current code: RsyncUI/Views/InspectorViews/Add/extensionAddTaskView+FormFields.swift, lines 13-146.
This is idiomatic SwiftUI and compiled successfully, but visual layout should be manually checked on the supported macOS versions because field widths and red validation borders may render differently inside grouped forms.
Risk level: low to medium.
Add/Cancel buttons were moved into toolbar placements. The code compiles, but toolbar placement and visibility in macOS sheets can be sensitive to window/sheet style.
Files to verify:
RsyncUI/Views/InspectorViews/Add/extensionAddTaskView+ViewBuilders.swiftRsyncUI/Views/Profiles/ProfileView.swiftRsyncUI/Main/RsyncUIApp.swift
Risk level: low.
Overall merge risk into main: low to medium.
Reasons the risk is low:
- The changes are almost entirely SwiftUI presentation changes.
- No rsync execution pipeline, storage actors, JSON formats, process streaming, parser, or schedule model logic changed.
- The shared Add Task workflow removes duplicated code instead of adding a second path.
- Delete changes are limited to SwiftUI button roles.
- The project builds and the test suite passes.
Reasons it is not zero:
- The first-task workflow changed behavior.
- Add Task fields changed layout and control types.
- Sheet controls moved into toolbars, which should be visually checked on macOS.
- Existing tests are primarily model/business-logic tests, not UI workflow tests.
Command run:
xcodebuild test -project RsyncUI.xcodeproj -scheme RsyncUI -destination 'platform=macOS'Result:
- Build succeeded.
- Test run succeeded.
- 56 Swift Testing tests passed across 9 suites.
Additional check:
git diff --check c59e3e3^..65cef24Result:
- No whitespace or patch formatting problems reported.
- Open a profile with no tasks. Confirm the Add Task sheet appears automatically.
- Cancel the Add Task sheet on an empty profile. Confirm the remaining UI state is acceptable.
- Add a synchronize task, a snapshot task, and a syncremote task from the new sheet.
- Edit an existing task and confirm fields populate correctly.
- Verify red validation borders still appear for incomplete local/remote and remote user/server pairs.
- Confirm Add/Cancel toolbar buttons are visible and work in Add Task and Add Profile sheets.
- Open About, open Changelog, and decide whether the About sheet should remain open or close.
- Delete one and multiple tasks, schedules, and snapshots; confirm destructive button styling appears and delete behavior is unchanged.
This range is acceptable to merge after a short manual UI smoke test pass. The automated test signal is good, and the code changes are scoped to UI presentation and first-task workflow consolidation. The main thing to verify manually is not data correctness but macOS sheet and form behavior.