Skip to content

feat: port app to Uno Platform and move CI/CD to GitHub Actions - #5

Merged
kazo0 merged 20 commits into
masterfrom
feature/uno-port
Jul 25, 2026
Merged

feat: port app to Uno Platform and move CI/CD to GitHub Actions#5
kazo0 merged 20 commits into
masterfrom
feature/uno-port

Conversation

@kazo0

@kazo0 kazo0 commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Ports Daily Reflection from Xamarin.Forms to Uno Platform (WinUI-based), and replaces the Azure Pipelines build with GitHub Actions.

The app keeps its store identity (com.kazo0.dailyreflection) so existing installs upgrade in place rather than appearing as a new listing.

Port

  • Head project — the separate DailyReflection.Android / DailyReflection.iOS heads collapse into a single multi-targeted DailyReflection.Uno.csproj (net10.0-desktop, -android, -ios). Platform-specific code moves to Platforms/ and partial PlatformServices/*.{Android,iOS,Windows,Desktop}.cs.
  • MVUXViewModels/ are replaced by feed/state Models/ (DailyReflectionModel, SettingsModel, SobrietyTimeModel); the MVVM messenger types drop out in favour of MVUX state.
  • Navigation — Uno.Extensions.Navigation regions replace the Xamarin AppShell, with MainPage hosting a Toolkit TabBar.
  • Custom renderers removed — the Xamarin date/time picker renderers are gone; pickers are now plain XAML plus converters.
  • ServicesSettingsService / ShareService / NotificationService / VersionTrackingService split into interfaces in DailyReflection.Services with per-platform implementations in the head. Adds StartupMigrationRunner for the Xamarin→Uno settings migration.
  • SolutionDailyReflection.slnDailyReflection.slnx; adds global.json (Uno.Sdk 6.6.29) and central package management under DailyReflection/.

CI/CD

Replaces azure-pipelines.yml with two workflows:

  • ci.yml — PR/master gate. Unit tests, desktop (Skia), unsigned Android, and iOS simulator builds. No secrets required.
  • release.yml — triggered by pushes to release/**. Builds signed Android/iOS/desktop packages, then parks at a production environment approval gate before publishing to Google Play, App Store Connect, and a GitHub release (which pushes the version tag). workflow_dispatch inputs allow a dry run against a Play test track with the App Store review submission skipped.

Versioning moves to Nerdbank.GitVersioning (version.json), which derives ApplicationVersion / ApplicationDisplayVersion from git height. The computed Android versionCode (67108866 for 4.0.x) stays above the shipped Xamarin app's 34.

docs/RELEASE-SETUP.md documents the one-time credential, environment, and branch-protection setup the repo owner must do before the first release.

Fixes folded in

  • SQLite advisory NU1903 (GHSA-2m69-gcr7-jv3q / CVE-2025-6965) — sqlite-net-pcl pulled vulnerable lib.e_sqlite3 2.1.2 transitively; pinned to the patched 3.50.3 / bundle 3.0.4.
  • Android targetSdkVersion 33 → 36 — clears Google Play's API 35+ requirement for updates. minSdkVersion stays 21.
  • Picker regressions against the Xamarin original, iOS settings import, and runtime issues found on Android/desktop device runs.

Verification

Run locally on this branch:

Check Result
DailyReflection.Presentation.Tests (Release) 24 passed, 0 failed
DailyReflection.Services.Tests (Release) 28 passed, 0 failed
DailyReflection.Uno.csproj -f net10.0-desktop -c Release Build succeeded, 0 warnings

Android and iOS heads were not built locally — those are covered by the Build Android (unsigned) and Build iOS (simulator) CI jobs, which run here for the first time.

One known non-blocking warning: CS8604 (possible null argument) in AutomationConstantsCoverageTests.cs:30.

Before merging

CI has never run in this repo, so the four check names don't exist yet and can't be added to branch protection in advance. Suggested order: let CI go green on this PR → add Unit tests, Build desktop (Skia), Build Android (unsigned), Build iOS (simulator) as required status checks on master → merge.

Not in this PR

No release credentials are configured yet (no secrets, no variables, no production environment). Those gate release.yml only, not this merge — see docs/RELEASE-SETUP.md §1–3 before cutting release/v4.0.

🤖 Generated with Claude Code

kazo0 and others added 13 commits July 23, 2026 00:45
Replace the Xamarin.Forms app with the Uno Platform single-project head
(migrated from DailyReflection-ports, excluding the MAUI and Avalonia
heads) and update the shared projects to the ported versions.

- DailyReflection/: Uno single project (Android, iOS, Desktop/Skia)
- Core/Data/Presentation/Services: ported implementations
- Replace DailyReflection.sln with DailyReflection.slnx
- specs/: numbered design specs for the port
- docs/: ANALYSIS.md and ios-launch-experience.md
- prompt.md: original porting brief
- CLAUDE.md: adapted to the Uno-only layout of this branch
- DailyReflection-uno.slnf: solution filter for Uno head + shared projects
- Reflection page date picker: pass the picked date into
  GetDailyReflectionCommand instead of setting Date and re-fetching
  with null, which reset the view to today (selecting a past date
  never worked).
- Settings notification-time row: show a TimePickerFlyout on tap
  (previously a collapsed inline TimePicker was made visible, which
  never opened a flyout) and initialize it to the saved time.
- Settings sober-date picker: initialize Date to the saved date before
  opening the calendar flyout.
- ApplicationId flipped back to com.kazo0.dailyreflection so the Uno
  binary upgrades the existing Xamarin app in place; version bumped to
  4.0 (35) to exceed the current 3.4 (34) store release (spec 011 §E).
- MigrateOldPreferences() now imports the legacy values from the real
  platform stores left behind by the Xamarin app instead of
  round-tripping LocalSettings: Android reads the default and
  DR_Settings SharedPreferences, iOS reads the standard defaults and
  the DR_Settings NSUserDefaults suite (spec 001). With build 35 the
  existing StartupMigrationRunner predicate fires on first launch after
  upgrade, imports all five preference keys, and re-schedules the daily
  notification.
- Resolution recorded in specs/001, specs/011, and README.md.
NSUserDefaults.ObjectForKey is not public in the .NET iOS bindings;
use the string indexer instead. Caught by building the net10.0-ios
target — all three targets (android, ios, desktop) now compile clean.
- Reflection tab rendered blank on all platforms: DailyReflectionPage
  is the default route, so it is created during NavigateAsync in
  App.OnLaunched — before App.Host is assigned — and its constructor's
  App.GetService<T>() call threw, leaving the region empty. The page
  now attaches its VM lazily on first Loaded (DataContextChanged when
  the navigator supplies one, otherwise the service locator once Host
  exists); PageBase gains an OnBeforeActivate hook and tolerates a
  null ActiveViewModel.
- Reflection text leaked raw HTML: the DB wraps Reading content in
  <p class="textitalic"> (plus span/sup/a/table tags) which the
  deliberately-minimal parser preserved verbatim. HtmlInlineParser now
  treats <p> as a paragraph break (collapsing runs, trimming edges)
  and strips unsupported tags while keeping inner text.
- Settings CalendarDatePicker MaxDate binding failed at runtime
  (DateTime -> DateTimeOffset conversion unsupported by Uno's binding
  engine); MaxDate and Date are now set in code-behind before the
  calendar opens.
- Notification-time row used IsEnabled on a Grid, which does not exist
  in WinUI/Uno; replaced with IsHitTestVisible (the Tapped guard still
  enforces the Android-always-tappable rule).

Verified on the Android emulator (Pixel 9 Pro XL, API 36) and the
Skia desktop build: reflection page renders with chrome, time and
date pickers open initialized to saved values, all three targets
compile, 27 + 23 tests pass.
- Migrated DailyReflectionPage and SettingsPage from MAUI to WinUI/Uno Platform.
- Replaced PageBase inheritance with direct Page inheritance.
- Updated XAML to utilize Uno Toolkit components for navigation and layout.
- Removed unnecessary code-behind for ViewModel activation and property bindings.
- Implemented two-way bindings for settings and reflection data.
- Enhanced error handling and loading indicators using FeedView.
- Updated global.json to use Uno.Sdk version 6.6.29.
Uno.Sdk 6.6.29's Hosting feature pulls Microsoft.Extensions.Logging.Console
10.0.10, which requires Configuration.Binder >= 10.0.10; the 10.0.2 CPM pins
fail any clean restore with NU1605 (masked locally by cached restores).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Aa78QCQKu3byUH6Xo5raQF
Replace the stale Xamarin-era azure-pipelines.yml with two workflows:

- ci.yml: PR/master merge gate (unit tests, desktop build, unsigned
  Android build, iOS simulator build).
- release.yml: any push to release/* builds signed .aab/.apk, signed
  .ipa, and self-contained desktop zips, then waits on the production
  environment approval before uploading to Google Play, uploading and
  submitting to App Store Connect (fastlane deliver), and creating a
  GitHub release that pushes the vX.Y.Z tag. workflow_dispatch inputs
  allow dry runs (Play test track, skip review submission).

Versions come from Nerdbank.GitVersioning (version.json at the repo
root; cut release branches with `nbgv prepare-release`). NBGV's built-in
mobile targets map the computed version onto ApplicationVersion /
ApplicationDisplayVersion (Android versionCode = major<<24 | minor<<16 |
height, i.e. >= 67108864 for 4.x, always above the Xamarin app's 34).

Declare ITSAppUsesNonExemptEncryption=false so automated App Store
Connect uploads do not stall on the Missing Compliance prompt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Aa78QCQKu3byUH6Xo5raQF
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Aa78QCQKu3byUH6Xo5raQF
Two independent fixes plus the doc reconciliation they imply.

SQLite (GHSA-2m69-gcr7-jv3q / CVE-2025-6965): sqlite-net-pcl pulls
lib.e_sqlite3 2.1.2 transitively via bundle_green, which is inside the
vulnerable <= 2.1.11 range. Pin bundle_e_sqlite3 3.0.4 + lib.e_sqlite3
3.50.3 in both the head and DailyReflection.Data; 3.50.x is a shim over
SourceGear.sqlite3, which ships the patched native SQLite. lib.e_sqlite3
must be pinned directly because the 3.x bundle no longer references it,
so green's 2.1.2 would otherwise win. On the mobile TFMs the .android /
.ios packages are pinned to 2.1.12 with ExcludeAssets="all" — version
pin only, contributing no files, so the native binary still comes from
SourceGear. Verified: a forced restore across all TFMs emits no NU1903
and the vulnerable 2.1.2 is absent from the graph entirely.

Android targetSdk 21/33 -> 21/36: matches the .NET 10 Android build SDK
(silences XA1006) and clears Google Play's requirement that updates
target API 35+, which docs/RELEASE-SETUP.md called out as a release
blocker. minSdk stays 21. Verified: Android release build is clean and
the generated manifest reads minSdkVersion=21 targetSdkVersion=36 with
NBGV's versionCode 67108866, above the shipped Xamarin app's 34.

Docs updated to match: the stale "fixed at 33" csproj comment, the
now-resolved RELEASE-SETUP blocker, and supersession notes on spec 009
(targetSdk) and spec 011 (hardcoded ApplicationVersion, removed when
Nerdbank.GitVersioning landed).

Also fixes the .vscode launch config, which named a preLaunchTask
("Uno: android | Debug | android-x64") that no longer exists.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GhNe28zDm5naMj8SnYS2we
Copilot AI review requested due to automatic review settings July 25, 2026 02:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports Daily Reflection to an Uno Platform single-project head (WinUI-based, multi-targeting Android/iOS/Desktop) and modernizes the solution/tooling around that port (MVUX models, Uno.Extensions.Navigation regions, versioning, and CI migration away from Azure Pipelines).

Changes:

  • Introduces a new DailyReflection.Uno.csproj head with Uno.Toolkit + Uno.Extensions.Navigation + MVUX, replacing the Xamarin.Forms heads and Shell-based navigation.
  • Reworks settings/notifications/share/version-tracking into service interfaces + per-platform implementations, and adds a version-gated StartupMigrationRunner for upgrade-in-place behavior.
  • Adds Nerdbank.GitVersioning (version.json) + Uno SDK pinning (global.json) and removes the Azure Pipelines definition in favor of GitHub Actions (per PR description).

Reviewed changes

Copilot reviewed 207 out of 270 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
version.json Adds Nerdbank.GitVersioning configuration for 4.0-alpha and release branch refs.
README.md Documents the Uno port and upgrade-in-place behavior.
prompt.md Adds migration brief/reference prompt content (repo docs).
global.json Pins Uno.Sdk version via MSBuild SDK resolution.
docs/ios-launch-experience.md Documents iOS minimum version, splash, plist substitution, and orientation decisions.
DailyReflection/Views/MainPage.xaml New Uno TabBar shell using region-based navigation.
DailyReflection/Views/MainPage.xaml.cs Code-behind stub for the main tab host page.
DailyReflection/Views/DailyReflectionPage.xaml.cs Code-behind for reflection date picking (writes MVUX state).
DailyReflection/Views/SobrietyTimePage.xaml.cs Code-behind stub for sober time page.
DailyReflection/Views/SettingsPage.xaml.cs Code-behind for settings flyouts and picker interactions (writes MVUX state).
DailyReflection/Styles/Styles.xaml Adds WinUI ResourceDictionary styles including implicit Page/TextBlock styles.
DailyReflection/Styles/ColorPaletteOverride.xaml Overrides Uno Material palette to preserve legacy branding.
DailyReflection/ReadMe.md Uno template “Getting Started” readme (project-local).
DailyReflection/Properties/launchSettings.json Adds launch profiles for desktop and WSL2.
DailyReflection/PlatformServices/VersionTrackingService.cs Implements LocalSettings-backed VersionTracking surface.
DailyReflection/PlatformServices/VersionTrackingService.Android.cs Android version/build lookup via PackageManager.
DailyReflection/PlatformServices/VersionTrackingService.iOS.cs iOS version/build lookup via NSBundle InfoDictionary.
DailyReflection/PlatformServices/VersionTrackingService.Desktop.cs Desktop fallback to assembly metadata by returning null native version/build.
DailyReflection/PlatformServices/ShareService.cs Implements sharing via DataTransferManager, with clipboard fallback on unsupported platforms.
DailyReflection/PlatformServices/SettingsService.cs Implements settings storage in ApplicationData.LocalSettings + migration hook.
DailyReflection/PlatformServices/SettingsService.Android.cs Mirrors writes to SharedPreferences and imports legacy Android prefs on upgrade.
DailyReflection/PlatformServices/SettingsService.iOS.cs Imports legacy iOS NSUserDefaults settings from standard + suite stores.
DailyReflection/PlatformServices/NotificationService.cs Desktop notification scheduling implementation (non-Android/iOS).
DailyReflection/PlatformServices/NotificationService.Windows.cs Windows-specific toast/logging implementation hook.
DailyReflection/Platforms/iOS/Main.iOS.cs iOS entry point using UnoPlatformHostBuilder.
DailyReflection/Platforms/iOS/Info.plist New iOS plist aligned with Uno build substitutions and orientation rules.
DailyReflection/Platforms/iOS/Entitlements.plist Normalizes entitlements plist formatting.
DailyReflection/Platforms/iOS/PrivacyInfo.xcprivacy Adds Apple privacy manifest (accessed API reasons).
DailyReflection/Platforms/iOS/Media.xcassets/LaunchImages.launchimage/Contents.json Carries launch image asset catalog content (legacy).
DailyReflection/Platforms/Desktop/Program.cs Desktop entry point hosting X11/FrameBuffer/macOS/win32 via Uno host builder.
DailyReflection/Platforms/Android/MainActivity.Android.cs Android activity entry point with AndroidX splashscreen install.
DailyReflection/Platforms/Android/Main.Android.cs Android Application class for Uno NativeApplication setup.
DailyReflection/Platforms/Android/AndroidManifest.xml Defines Android SDK levels and required permissions (incl. boot + notifications).
DailyReflection/Platforms/Android/environment.conf Adds Mono GC parameters (Android).
DailyReflection/Platforms/Android/BroadcastReceivers/WakeUpAlarmReceiver.cs Reschedules alarms on boot / exact-alarm permission state changes.
DailyReflection/Platforms/Android/Resources/AboutResources.txt Updates Android resources guidance text.
DailyReflection/Platforms/Android/Resources/values/Styles.xml Adds Android theme + splash style definitions.
DailyReflection/Platforms/Android/Resources/values/Strings.xml Adds Android ApplicationName string resource.
DailyReflection/Platforms/Android/Resources/drawable/notif_icon.png Adds notification icon asset.
DailyReflection/Platforms/Android/Assets/AboutAssets.txt Updates Android assets guidance text.
DailyReflection/Package.appxmanifest Adds Windows packaging manifest (full trust capability, dependencies).
DailyReflection/app.manifest Adds Windows DPI awareness settings for unpackaged app scenarios.
DailyReflection/App.xaml Adds Uno MaterialToolkitTheme + app resource dictionaries and converters.
DailyReflection/appsettings.json Adds embedded config with DatabaseFileName and logging defaults.
DailyReflection/Assets/SharedAssets.md Documents Uno asset conventions for the shared project.
DailyReflection/Assets/Icons/icon.svg Adds app icon SVG source.
DailyReflection/GlobalUsings.cs Adds head-project global usings and an activation alias.
DailyReflection/Extensions/StringExtensions.cs Adds StripHtml helper using GeneratedRegex in the head project.
DailyReflection/Directory.Build.props Enables implicit usings/nullable + central package mgmt + NBGV reference for head.
DailyReflection/Directory.Build.targets Adds (empty) targets file placeholder for head directory.
DailyReflection/Directory.Packages.props Centralizes package versions (sqlite pins, NBGV, config packages).
DailyReflection/DependencyInjection/Dependencies.cs Registers platform services and StartupMigrationRunner in DI.
DailyReflection/Converters/BoolToVisibilityConverter.cs Adds bool→Visibility converter for WinUI bindings.
DailyReflection/Converters/DateFormatConverter.cs Adds configurable DateTime formatting converter for classic bindings.
DailyReflection/Converters/DateSetToVisibilityConverter.cs Adds DateTime-set check → Visibility converter.
DailyReflection/Converters/HtmlEx.cs Adds attached property to render inline HTML into TextBlock.Inlines.
DailyReflection/Converters/IntToBoolConverter.cs Adds int→Visibility/bool converter for WinUI bindings.
DailyReflection/Converters/IsDisplayPreferenceToBoolConverter.cs Adds enum match → Visibility converter with XAML-parsed preference.
DailyReflection/Converters/NullToBoolConverter.cs Adds null check converter supporting Visibility targets.
DailyReflection/Converters/PluralityConverter.cs Adds pluralization converter for numeric values.
DailyReflection/Converters/SoberTimeDisplayEnumConverter.cs Adds enum→display string converter for sober time preference.
DailyReflection/Converters/TimePickerLabelEnabledConverter.cs Restores Xamarin behavior for time row tappability on Android vs others.
DailyReflection.slnx Replaces solution with .slnx including new projects and test projects.
DailyReflection.Services/Notification/INotificationService.cs Adds IsSupported to notification service contract and modernizes namespace.
DailyReflection.Services/Settings/ISettingsService.cs Splits settings interface into its own file-scoped namespace.
DailyReflection.Services/Share/IShareService.cs Splits share interface into its own file-scoped namespace.
DailyReflection.Services/Startup/StartupMigrationRunner.cs Ports Xamarin startup migrations (settings import + DB refresh) behind version gates.
DailyReflection.Services/VersionTracking/IVersionTrackingService.cs Adds VersionTracking abstraction for startup migrations.
DailyReflection.Services/DependencyInjection/Dependencies.cs Simplifies service DI: keeps data + daily reflection service registration.
DailyReflection.Services/DailyReflection/DailyReflectionService.cs Moves IDailyReflectionService to file scope and modernizes formatting.
DailyReflection.Services/DailyReflection.Services.csproj Retargets services project to net10.0 with nullable enabled.
DailyReflection.Services.Tests/AutomationConstantsCoverageTests.cs Adds lint test ensuring automation IDs are referenced in Uno view XAML.
DailyReflection.Services.Tests/ServiceTestBase.cs Fixes nullable initialization for ServiceUnderTest.
DailyReflection.Services.Tests/DailyReflection/DailyReflectionServiceTests.cs Updates to nullable-safe fields and modern NUnit assertions.
DailyReflection.Services.Tests/DailyReflection.Services.Tests.csproj Retargets tests to net10.0 and updates test package versions.
DailyReflection.Presentation/Models/DailyReflectionModel.cs Adds MVUX model for reflections (Date state → reflection feed, Share command).
DailyReflection.Presentation/Models/SobrietyTimeModel.cs Adds MVUX model projecting sober time feeds from SettingsModel state.
DailyReflection.Presentation/DependencyInjection/Dependencies.cs Registers MVUX models + generated bindables as singletons to preserve shared state.
DailyReflection.Presentation/Extensions/StringExtensions.cs Modernizes StripHtml helper to file-scoped namespace.
DailyReflection.Presentation/Extensions/ReflectionExtenisons.cs Modernizes reflection display-string helper formatting (keeps behavior).
DailyReflection.Presentation/DailyReflection.Presentation.csproj Retargets to net10.0 and adds Uno.Extensions.Reactive packages.
DailyReflection.Presentation.Tests/Models/ModelTestBase.cs Adds MVUX-oriented test base with Eventually polling helper.
DailyReflection.Presentation.Tests/Models/DailyReflectionModelTests.cs Adds MVUX model tests for reflection loading and share behavior.
DailyReflection.Presentation.Tests/Models/SobrietyTimeModelTests.cs Adds MVUX sober time model tests (projection + recompute behavior).
DailyReflection.Presentation.Tests/ShareClosureCaptureTests.cs Adds concurrency test for share closure-capture pattern.
DailyReflection.Presentation.Tests/DailyReflection.Presentation.Tests.csproj Retargets tests to net10.0 and updates test package versions.
DailyReflection.Data/Databases/DailyReflectionDatabase.cs Modernizes DB abstraction + implementation and keeps embedded DB extraction logic.
DailyReflection.Data/DependencyInjection/Dependencies.cs Updates DI extension to file-scoped namespace style.
DailyReflection.Data/Models/Reflection.cs Modernizes Reflection model declaration style (table/PK metadata preserved).
DailyReflection.Data/Models/SoberTimeDisplayPreference.cs Modernizes enum declaration style.
DailyReflection.Data/DailyReflection.Data.csproj Retargets data project to net10.0 and pins SQLite packages for security advisory fix.
DailyReflection.Core/Extensions/ServiceCollectionExtensions.cs Modernizes DI helper extension to file-scoped namespace style.
DailyReflection.Core/Extensions/StringExtensions.cs Modernizes StripHtml helper to file-scoped namespace style.
DailyReflection.Core/Constants/AutomationConstants.cs Adds/adjusts automation ID constants used by Uno views and lint test.
DailyReflection.Core/Constants/ConfigurationConstants.cs Modernizes constants style (file-scoped namespace).
DailyReflection.Core/Constants/PreferenceConstants.cs Modernizes constants style (file-scoped namespace).
DailyReflection.Core/Constants/VersionConstants.cs Modernizes constants style and adds VersionNumber constant.
DailyReflection.Core/DailyReflection.Core.csproj Retargets core project to net10.0, enables nullable, updates extensions package versions.
CLAUDE.md Adds pointer doc directing agents to AGENTS.md.
azure-pipelines.yml Removes Azure Pipelines CI definition.
.mcp.json Adds MCP server configuration (UnoApp devserver + UnoDocs).
.vscode/tasks.json Adds VS Code tasks for desktop build/publish.
.vscode/launch.json Adds VS Code launch configs for Uno desktop/mobile debugging.
.vscode/settings.json Adds file nesting and file association settings.
.vscode/extensions.json Adds Uno VS Code extension recommendation.
.run/DailyReflection.Uno.run.xml Adds Rider/IDEA run configs for desktop target.
Comments suppressed due to low confidence (1)

DailyReflection/Platforms/iOS/PrivacyInfo.xcprivacy:41

  • The privacy manifest needs to close the NSPrivacyAccessedAPITypes array and the root dict before ; otherwise the plist remains invalid.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .vscode/extensions.json
Comment thread DailyReflection/Platforms/iOS/PrivacyInfo.xcprivacy
Comment thread DailyReflection/PlatformServices/NotificationService.cs
Comment thread DailyReflection/Platforms/Android/BroadcastReceivers/WakeUpAlarmReceiver.cs Outdated
Comment thread README.md Outdated
kazo0 and others added 7 commits July 24, 2026 23:20
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Enables /steve-ops backport <branch> and /steve-ops prepare-release as PR
comments. Calls the reusable workflow in the private kazo0/steve-ops repo.

Must live on the default branch — GitHub always runs issue_comment
workflows from there, which is also what stops a PR branch from altering
what the bot does.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QuvnD4UizJeQGJSe4ME6rK
@kazo0
kazo0 merged commit e39b7fc into master Jul 25, 2026
4 of 8 checks passed
@kazo0
kazo0 deleted the feature/uno-port branch July 25, 2026 13:45
@kazo0

kazo0 commented Jul 25, 2026

Copy link
Copy Markdown
Owner Author

/steve-ops help

@kazo0

kazo0 commented Jul 25, 2026

Copy link
Copy Markdown
Owner Author

/steve-ops-bot help

@kazo0

kazo0 commented Jul 25, 2026

Copy link
Copy Markdown
Owner Author

/steve-ops help

@steve-ops-bot

steve-ops-bot Bot commented Jul 25, 2026

Copy link
Copy Markdown

steve-ops — comment commands on a pull request.

Command Where What it does
/steve-ops backport <branch> merged PR Cherry-picks this PR's commits onto <branch> and opens a PR. Conflicts are committed as-is so you get a branch to fix.
/steve-ops backport <branch> open PR Queued (👀). Runs automatically the moment the PR merges.
/steve-ops prepare-release [args] any PR Runs nbgv prepare-release on the default branch, pushes the new release branch, and opens a PR for the version bump. Extra args pass through to nbgv (e.g. --versionIncrement minor).
/steve-ops help any PR This message.

Only repository owners, members, and collaborators can run commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants