All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- CI/CD & Release Process
- Rewrite
release.yml— branch-aware versioning, GitHub Environments (development/production), auto-commit VERSION file, prerelease flag for develop releases - Move
fmt-lint.shfrom.github/scripts/toscripts/(local dev tools separated from CI scripts) - Add
.github/pull_request_template.mdwith checklist - Add
CODEOWNERSfile - Update
ROADMAP.mdtag format references (vX.Y.Zinstead ofrelease/vX.Y.Z) - Commit
Package.resolved(was gitignored; required by Xcode Cloud) - Rename app display name from "Charstack" to "Charflow" (
CFBundleDisplayName) - Update README and docs to use "Charflow" as the product name
- Rewrite
- Backlog & Day Rollover (Phase 1 Week 3)
BacklogView+BacklogViewModel— dedicated backlog tab with tasks grouped by date ("Today", "Yesterday", "This Week", "Older")BacklogDateGroupenum — categorizes backlog tasks by relative date with display names and SF SymbolsTaskService.fetchGroupedBacklogTasks()— grouped query returning backlog tasks organized by date categoryEmptyStateViewshared component — reusable empty state with icon, title, and optional subtitleTaskEditSheetextracted toShared/Components/— shared between RegionFocusView and BacklogViewTabViewnavigation with Today and Backlog tabsAppCoordinator.Tabenum — manages tab selection stateScenePhaseobserver inRootView— triggers day rollover when app returns from background- Last rollover date tracking to avoid redundant rollover calls within the same day
- Move-to-region action from backlog with bucket selection and 1-3-5 constraint validation
- BacklogDateGroupTests (7 tests) — date grouping, sorting, display names, system images
- TaskServiceTests — 3 new grouped backlog tests (grouping, empty, exclusion)
-
TodayViewnow shows only active regions (Morning, Afternoon, Evening) — backlog is its own tab -
TodayViewModelno longer fetches backlog tasks (separated to BacklogViewModel) -
RegionFocusViewuses sharedEmptyStateViewinstead of inline empty state -
TodayViewuses sharedEmptyStateViewfor empty day message -
AppCoordinatorupdated withTabenum andselectedTabstate for TabView support -
RootViewrestructured from single NavigationStack to TabView with per-tab NavigationStacks -
Unit test count: 86 tests (up from previous count), all passing
-
UI Layer (Phase 1 Week 2)
TodayView+TodayViewModel— main dashboard with four region cards, daily progress bar, rollover bannerRegionCardcomponent — region summary with icon, must-do title, bucket fill counts, progress barRegionFocusView+RegionFocusViewModel— single-region task list grouped by bucket (Must/Comp/Misc)TaskRowcomponent — checkbox, title, notes preview, bucket badge, swipe actions (complete/delete), context menuQuickAddBarcomponent — inline task creation with title field, bucket picker, and add buttonTaskEditSheet— modal sheet for editing task title and notesAppCoordinator— lightweight NavigationStack coordinator with type-safeRouteenumRootView— root view wiring NavigationStack, coordinator, and destination mappingThemesystem — centralized colors (semantic + region/bucket), typography, spacing, and corner radius constantsPreviewData— in-memory container factory with sample tasks for SwiftUI previews- Navigation: Today → RegionFocus (tap region card), back navigation, context menu "Move to..." with sub-menus
- Empty states for regions with no tasks and days with no planned tasks
- Accessibility: labels, hints, combined elements, VoiceOver-friendly descriptions throughout
- SwiftUI previews for all components (RegionCard, TaskRow, TodayView, RegionFocusView, QuickAddBar)
-
release.yml— added missing-destinationand code signing flags to archive step -
Data Layer (Phase 1 Week 1)
CharstackTaskSwiftData model — CloudKit-safe (no unique constraints, all defaults)Regionenum (Morning, Afternoon, Evening, Backlog) with display names, SF Symbols, and sort orderingTaskBucketenum (Must, Complementary, Misc, None) with 1-3-5 max countsTaskStatusenum (Todo, InProgress, Done, Deferred) with lifecycle semanticsModelContainerSetup— production (on-disk) and testing (in-memory) container factoriesTaskService— full CRUD, 1-3-5 constraint enforcement, day rollover, capacity queriesDate+Extensions— startOfDay, endOfDay, isSameDay, addingDays, isBeforeToday- SwiftData wired into
CharstackApp.swiftentry point
-
Unit Tests (38 tests, all passing)
RegionTests— all cases, display names, sort order, constraintsTaskBucketTests— max counts, 1-3-5 total, constrained bucketsTaskStatusTests— lifecycle flags, bucket limit semanticsCharstackTaskTests— initialization, accessors, completion, deferral, overdue logicTaskServiceTests— CRUD, 1-3-5 enforcement per region/day, move, toggle, rollover, idempotencyDateExtensionsTests— all date helper methods
-
Initial project structure with SwiftUI and MVVM architecture
-
Documentation files:
- Requirements specification
- Architecture documentation
- Project roadmap
-
.gitignoreconfiguration for Xcode projects -
LICENSEfile (MIT License) -
README.mdwith project overview and setup instructions -
GitHub workflow templates for CI/CD and project management
-
App Store compliance requirements (account deletion, Sign in with Apple, privacy policy)
-
CloudKit-first cloud sync strategy documented in architecture