Repository navigation
Maintenance release: tooling, CI, documentation and dependency updates; no changes to app behaviour.
Added
docs/index and architecture decision records: an ADR template and ADRs 0001–0010 documenting existing decisions (state management and navigation, the wall-clock-anchored timer, persistence, pure calculation logic, SPM-only iOS/macOS, GPL-3.0-or-later, release automation, branching and merge policy, supply-chain pinning). The PR template and CONTRIBUTING ask for an ADR when a significant decision is made.- Community files:
CODEOWNERS, a pull request template with a Definition of Done, bug report / feature request / translation issue forms (blank issues disabled; security reports go to private vulnerability reporting),CONTRIBUTING.mdandCODE_OF_CONDUCT.md(Contributor Covenant 2.1), aligned with the sibling Tideline and FoxGrid projects. .github/dependabot.yml: weekly updates for pub (minor/patch grouped), GitHub Actions (workflows and the localsetup-flutteraction) and Gradle, monthly for the Bundler/fastlane gems. The Flutter version pinned inFLUTTER_VERSIONis not covered and must still be bumped by hand.- CI workflow (
.github/workflows/ci.yml) running on every pull request and push tomain: dependency resolution with--enforce-lockfile, a generated-code freshness check (tool/check_generated.sh:build_runner+flutter gen-l10nmust leave no diff), a formatting check of hand-written Dart files (tool/check_format.sh),flutter analyze --fatal-infos --fatal-warnings, andflutter test. - Local composite action
.github/actions/setup-flutterthat installs a pinned Flutter release (3.47.7) with SDK and pub caches, shared with the sibling Tideline project's setup.
Fixed
- Release workflow: Ruby is now pinned to 3.3.6 via
.ruby-version(read bysetup-ruby); the Android and iOS jobs failed atbundle installbecauseexcon 1.7.2requires Ruby ≥ 3.3 and 3.2 was hard-coded.
Changed
CLAUDE.mdrewritten in the structure used by Tideline: Workflow, Architecture rules, i18n rules, code style, Versioning, Documentation with a docs map, supply-chain rules, a Definition of Done and a command list. Reasons now live indocs/adr/; it also records the squash-merge branching flow, the SPM-only rule and the four-language ARB rule.- Branching model: the long-lived
devbranch is retired. Work happens on short-lived branches that are squash-merged intomain(merge commits and rebase merges are disabled, branches are deleted on merge). CodeQL now runs on pull requests intomainonly. Documented inCLAUDE.md. - Dependency updates (Dependabot group, regenerated code committed):
drift2.34.4 → 2.35.2,drift_dev2.34.0 → 2.35.1,flutter_riverpod3.3.2 → 3.4.3,riverpod_annotation4.0.3 → 4.0.7,riverpod_generator4.0.4 → 4.0.9,freezed3.2.6-dev.1 → 4.0.1 (stable; generated*.freezed.dartreformatted),mockito5.6.4 → 5.8.1,flutter_local_notifications22.3.0 → 22.3.2,package_info_plus10.2.1 → 10.2.2,shared_preferences2.5.5 → 2.5.6,sqlite33.5.2 → 3.7.1,timezone0.11.1 → 0.11.2,url_launcher6.3.2 → 6.3.3. - Release automation consolidated into a single
.github/workflows/release.yml, started by pushing avX.Y.Ztag. It checks the tag against thepubspec.yamlversion and theCHANGELOG.mdsection, then builds and publishes web (GitHub Pages), Android (Play Store internal track) and iOS (TestFlight), and finally creates the GitHub release with the CHANGELOG section as notes. Running it manually (Run workflow) is a dry run unless the new publish checkbox is ticked on a tag: it builds everything, publishes nothing, and never waits for approval (fastlane skips uploads whenDRY_RUN=true). On tag runs the store jobs use theproductionenvironment, so a required reviewer there gates each release. Process and secrets: newdocs/release.md. scripts/renamed totool/(bump_version.sh,take_screenshots.sh), matching the sibling projects.bump_version.shnow prints the PR-then-tag steps.- All GitHub Actions in every workflow are now pinned to full commit SHAs (with the version in a trailing comment), so a moved tag cannot change what runs.
actions/checkoutmoves from v4 to v7.0.1 to match CI. - Deploy, CodeQL and screenshot workflows install Flutter through the local
setup-flutteraction at the pinned version (FLUTTER_VERSIONin each workflow'senv, currently 3.47.7) instead ofsubosito/flutter-actionon the movingstablechannel. When bumping Flutter, update that value in all workflows. - Reformatted
test/shared/widgets/app_width_constraint_test.dart, the only hand-written file that was notdart formatclean.
Removed
- Unused
cupertino_iconsdependency (nothing in the app referencedCupertinoIcons; the app's Cupertino widgets and colors come from Flutter's owncupertino.dart). bump-version.yml,create-release-tag.yml,deploy-web.yml,deploy-ios.ymlanddeploy-android.yml, replaced byrelease.yml. The auto-tag workflow is gone because a tag pushed withGITHUB_TOKENnever started the deploy workflows (they were being run by hand); tag releases yourself as described indocs/release.md.
Security
- Bumped
fastlanefrom 2.237.0 to 2.241.0, which lifts itsrubyzippin and lets the transitiverubyzipgem move from 2.4.1 to 3.7.0, fixing a path traversal vulnerability (Dependabot alert #14, high severity, patched in 3.4.0).fastlaneonly runs in CI/local release tooling, not in the shipped app. Other gems inGemfile.lock(e.g.aws-sdk-*) were updated transitively.