Tide — Project Status
July 18, 2026
Tide — Project Status
Tide is a macOS + iOS SwiftUI net worth tracker: an editable list of accounts, balances logged by hand, and a total tracked over time with expressive-but-honest visuals. No bank connections, no forecasting.
Status at a glance
A theming and overview-visualisation branch is complete and has passed a full whole-branch review, with all review findings fixed. It is not yet merged — the owner's merge gate requires visual confirmation against real data, which is outstanding. 187 automated tests pass across four pure packages and both platforms build.
Current phase
Phase: Theming & overview charts — feature branch complete, post-review, awaiting the owner's visual sign-off before merge to main.
Latest verified checkpoint: Whole-branch review returned READY WITH FIXES; every Critical and Important finding was fixed and re-verified (commit fix: address final whole-branch review).
Recently completed
- New pure package
TideTheme: colour maths, a 21-theme catalog, and account-type band assignment.[verified]- 35 tests pass via
swift test. Contains no SwiftData and no SwiftUI, which is what makes it testable on the current toolchain.
- 35 tests pass via
- Accessibility guarantees run as executable tests, so an inaccessible theme fails the build rather than reaching a user.
[verified]- Gates cover WCAG AA text contrast, colourblind separation (Machado-Oliveira-Fernandes simulation, gated on min(protan, deutan)), diverging-pair separation, and band uniqueness — parameterised across all 21 themes.
- Overview accounts are sorted; previously they rendered in undefined, rebuild-unstable order.
[verified]- Pure comparator in the domain package with 9 tests. Assets group before liabilities in every order, unobserved balances sort last rather than being treated as zero, and the sort is stable.
- Theme picker with a System option that follows the OS appearance, synced across devices.
[verified]- System is the default, so the app looks native until a theme is chosen. Sync uses iCloud key-value storage rather than the app database — no schema change and therefore no migration risk to account data.
- Account-type colours drive both the account bars and the composition view.
[verified]- 12 of 21 themes carry bands derived from their own accents; the remaining 9 use a shared validated palette because their palettes are too harmonious to separate 8 categories.
- Overview shows a net worth trend line plus a composition strip broken down by account type.
[verified]- Replaced an earlier stacked-area chart. Recorded reversal: a stacked area needs a value for every band at every date, and the project's honesty rule forbids inventing unobserved values — so an account added part-way through drew a cliff. The strip reads a single snapshot, so adding an account only changes proportions.
- Carried-forward balances are visually distinguished from observed ones in the composition strip.
[verified]- Carried segments render dimmed AND carry a text label, because dimming alone would be a colour-only signal.
- In-app licence acknowledgements for the upstream open-source colour palettes.
[verified]- All upstream palettes used are MIT-licensed; reproducing the copyright lines and permission notice is a licence obligation before release.
In progress
- Merge of the theming/charts branch into the main line.
[observed]- Branch is complete, reviewed, and fix-verified. Held at the owner's explicit gate pending visual confirmation.
Remaining work / roadmap
- Owner visual confirmation of the composition strip against real account data.
[planned]- Raised to a gate because sample data has already missed one real defect this cycle — see blockers.
- One upstream theme remains excluded: its accent colours cannot reach the required contrast on its own near-white surface.
[observed]- Can be added once a darkened colour is chosen that passes the existing gates.
- Asset-band separation is gated on slot order only, a weaker guarantee than the liability gate.
[observed]- Five categories all-pairs is a bar no palette in the catalog clears. Accepted because every surface labels each segment, so identity never rests on colour alone. Documented in the test itself.
- Deferred minor findings from review remain open (test-coverage gaps and cosmetic items).
[observed]- Triaged as non-blocking during the whole-branch review; tracked in the branch's execution ledger.
- Mac App Store deploy steps remain outstanding: production push entitlement and CloudKit schema deployment to production.
[planned]
Blockers, decisions, human gates
- HUMAN GATE — no merge to the main line until the owner confirms the overview visually against real data.
[user-reported]- Set by the owner, who confirmed the visual check counts as one of the required checks. Automated tests and green builds alone do not satisfy it.
- Sample-data verification is necessary but demonstrably not sufficient.
[verified]- The seeded sample data has every account present from the first snapshot, so it structurally cannot exercise accounts added later. A real-data case surfaced a band that rendered nothing at all; the sample data had shown the same code as correct throughout.
- Automated tests cannot cover the database layer or UI on the current toolchain.
[verified]- Any database-container operation aborts the whole test run, so a passing line with zero executed tests is a false green. Pure packages carry the real coverage; database writers and UI are verified by inspection and screenshots.
Verification evidence
- 187 automated tests pass across four pure packages.
[verified]- Domain 108, formatting 37, theming 35, store 7 — each run fresh this session via
swift test.
- Domain 108, formatting 37, theming 35, store 7 — each run fresh this session via
- Both platform builds succeed from the command line.
[verified]- macOS and iOS Simulator destinations, after project regeneration.
- Data safety confirmed by independent review of the full branch diff.
[verified]- No database-layer files touched, no schema change, no migration. The pinned cloud container entitlement survived three project regenerations and was re-checked afterwards.
- Overview, theme picker, and composition strip confirmed by screenshots of a running signed build.
[verified] - A correction was made to this project's own analysis during the cycle and is recorded rather than quietly fixed.
[verified]- An earlier root-cause attribution for two rejected themes was wrong: the deciding factor was a threshold definition, not the colour-vision model. Both the reference document and the execution ledger were corrected.
Project documents
- Project guidance:
CLAUDE.md - Colour theme reference (palettes, licences, validation):
docs/reference/color-themes.md - Implementation plan (with superseded sections marked):
docs/superpowers/plans/2026-07-19-theming-and-overview-charts.md - Execution ledger (per-task reviews, deviations, reversals):
.superpowers/sdd/progress.md
Freshness & provenance
- Last updated: 2026-07-19 19:07 UTC.
- Evidence gathered from a working tree with no uncommitted changes, on the feature branch, immediately after the whole-branch review fixes were committed.
- Test counts and build results are from commands run in this session, not from documentation.
- The implementation plan carries explicit SUPERSEDED markers where the shipped code deliberately diverges from it; the plan is a historical record, not a description of current behaviour.
- Nothing here is merged to the main line yet.
- Evidence labels:
[verified]fresh commands/reviewed commits ·[observed]in code/git, not runtime-validated ·[user-reported]confirmed by owner, not independently verified ·[planned]spec'd, not built ·[stale]docs conflict with current state.