Skip to content

Carry main fixes into redesign main (#746) - #711

Merged
thomasluizon merged 5 commits into
redesign/mainfrom
chore/ticket-746-carry-api-copy
Oct 12, 2026
Merged

thomasluizon merged 5 commits into
redesign/mainfrom
chore/ticket-746-carry-api-copy

Conversation

@thomasluizon

@thomasluizon thomasluizon commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Carries the four ordered main commits into redesign/main with source trailers. Keeps the redesign's deliberate wording, notification behavior, OAuth rendering assertions, and reminder cache while bringing over the dependency updates, remaining reviewed API copy, reminder singular form, and staging access changes. No commits were skipped in full; before each carry, its trailer was absent and its patch did not reverse-apply to the branch.

Refs thomasluizon/orbit-tickets#746

Carried commits

Main source Carry Resolution
b23a35de (#707) 41aa162c Clean carry in .github/workflows/pullfrog.yml and .github/workflows/test.yml; retains the redesign workflow around the updated action pins.
53338bc5 (#708) c414c089 Clean carry in src/Orbit.Api/Orbit.Api.csproj and src/Orbit.Infrastructure/Orbit.Infrastructure.csproj; updates all six packages and retains redesign dependencies.
d69b1347 (#709) 8537e83b Carries copy and corresponding tests in Api, Application, and Infrastructure. The conflicts below retain deliberate redesign changes.
f4c2ce95 (#710) bcc3cbdb Clean carry in both staging access scripts, both staging access workflows, infra/README.md, infra/example.tfvars, and the staging database root's main.tf and variables.tf.

Conflicted paths by prior change

All twelve conflicts came from d69b1347. Paths resolved to existing content remain documented here even when they produce no final diff.

Transactional email and notification redesign, 23396af4 (#532)

  • src/Orbit.Infrastructure/Email/EmailCopy.cs: retains the redesign welcome intro and heading, account deletion warning, API key explanation, and waitlist intro. The welcome subjects already match main's new values. No final diff.
  • src/Orbit.Infrastructure/Services/AiSlipAlertMessageService.cs: retains the redesign prompt, shared voice rules, and separate early/day-only fallback copy; main's old title examples and usual-time fallback are absent from this design. No final diff.
  • tests/Orbit.Infrastructure.Tests/Services/AiSlipAlertMessageServiceGenerationTests.cs: retains all early/day-only fallback assertions and extra cases. No final diff.
  • tests/Orbit.Infrastructure.Tests/Services/AiSlipAlertMessageServiceTests.cs: retains the Portuguese assertion for the redesign fallback. No final diff.
  • tests/Orbit.Infrastructure.Tests/Email/EmailMessageComposerTests.cs: carries exact welcome subject assertions while retaining the redesign palette assertion introduced through 180e9dc7 (Carry release, SES, S3 and database name fixes into redesign main (#746) #635).

Proactive notification length and count, 912cf6e7 (#693), following #532

  • src/Orbit.Infrastructure/Services/AiProactiveCheckinMessageService.cs: retains counted fallbacks, the 60 text-element limit, and the string-returning title helper. No final diff.
  • tests/Orbit.Infrastructure.Tests/Services/AiProactiveCheckinMessageServiceGenerationTests.cs: retains counted fallbacks, single-habit tests, and the tests preventing promises of automatic logging. No final diff.

Gamification notifications, e8309fda (#654)

  • src/Orbit.Application/Gamification/Services/GamificationService.cs: carries all five achievement translation changes while retaining the deliberate level name sentence and Progress notification/push URLs.

Notification punctuation carry, 16d2de9a (#680)

  • src/Orbit.Application/Referrals/Commands/CheckReferralCompletionCommand.cs: carries the reviewed invoice and welcome bodies; retains the already matching coupon titles, coupon bodies, and sentence case.
  • src/Orbit.Application/Social/Commands/SendCheerCommand.cs: carries main's reviewed Portuguese wording. The earlier redesign carry only removed punctuation from the old phrase; English already matches.
  • tests/Orbit.Application.Tests/Social/SendCheerCommandTests.cs was not a merge conflict, but required follow-up commit 7a47130f to align its redesign-only Portuguese expectation with the carried phrase. All persistence and push assertions remain.

Reminder cache and probe carries, 77c168fe (#607) and 13507b96 (#610)

  • src/Orbit.Infrastructure/Services/ReminderSchedulerService.cs: retains the cached schedule reads and probe; omits the obsolete projection declarations that main only reformatted. Carries the singular English minute fix. The corresponding reminder theory applies cleanly.

OAuth page redesign, f039e1a6 (#665)

  • tests/Orbit.Infrastructure.Tests/Controllers/OAuthControllerTests.cs: retains ReadRenderedError and the redesigned alert script assertion, updating the expected Portuguese wording. The controller copy and remaining localized cases apply cleanly.

Assumptions

Test evidence

  • Final solution verification with LANG unset: env -u LANG dotnet build Orbit.slnx exited 0 with zero errors; env -u LANG dotnet test Orbit.slnx exited 0 with 9,428 passed, zero failed or skipped.
  • Final solution verification with LC_ALL=en_US.UTF-8: LC_ALL=en_US.UTF-8 dotnet build Orbit.slnx exited 0 with zero errors; LC_ALL=en_US.UTF-8 dotnet test Orbit.slnx exited 0 with 9,428 passed, zero failed or skipped. Existing package compatibility and deprecated API warnings remain.
  • Before the copy carry, env -u LANG dotnet test Orbit.slnx --no-build --filter 'FullyQualifiedName~ReminderSchedulerServiceTests|FullyQualifiedName~EmailMessageComposerTests|FullyQualifiedName~OAuthControllerTests|FullyQualifiedName~ProcessUserChatCommandHandlerTests|FullyQualifiedName~CalendarSyncServiceTests' exited 0: 306 tests passed, including the unchanged reminder test that only exercised 15 minutes.
  • Applied only main's strengthened ReminderSchedulerServiceTests before carrying production code. env -u LANG dotnet test tests/Orbit.Infrastructure.Tests --no-restore --filter FullyQualifiedName~FormatReminderText_Minutes_English exited 1: the one-minute case expected Due in 1 minute and received Due in 1 minutes; the 15-minute case passed. Restored the temporary test edit and carried the source commit with its test.
  • After the copy carry, the focused solution run covering reminder, email, OAuth, chat, calendar auto-sync, push, AI fallback, period close, and gamification tests exited 0: 523 passed, including both minute cases.
  • Before the staging access carry, bash .github/scripts/test-staging-postgres-access.sh exited 0 with the defect present; the old assertions expected operator drift to fail. Saved the old helper with git show HEAD:.github/scripts/staging-postgres-access.sh and the carried test with git show f4c2ce95:.github/scripts/test-staging-postgres-access.sh. running the carried test against the old helper (SCRIPT_UNDER_TEST=<old helper copy> bash <carried test copy>) exited 1 on reconciliation with Staging database operator allow list differs from the configured addresses.
  • After the staging access carry, bash .github/scripts/test-staging-postgres-access.sh exited 0, covering live operators, runner cleanup, partial opens, and operator refresh. The four carried infrastructure Node test files passed all 34 tests.
  • The first full LANG-unset test run exited 1: only SendCheerCommandTests.CleanNote_PersistsCheerAndPushesRecipient failed because its redesign-only Portuguese expectation still used the old phrase. Updated that expected phrase to main's carried copy while retaining all persistence and delivery assertions. env -u LANG dotnet test tests/Orbit.Application.Tests --no-build --filter FullyQualifiedName~SendCheerCommandTests then exited 0 with all 11 tests passing.
  • Shell syntax, ShellCheck with SC2016 excluded for intentional literal GitHub expressions, recursive Terraform format, and git diff --check passed. Actionlint passed with its existing queue schema limitation excluded. Commit hooks ran normally.

Model and contract

No entity, migration, DTO, route, or response shape changes. No migration ordering question. dotnet ef migrations has-pending-model-changes --project src/Orbit.Infrastructure --startup-project src/Orbit.Api --no-build exited 0 and reported no model changes. The solution build ran the OpenAPI generator; src/Orbit.Api/openapi.json has no diff.

External interface evidence

PR #636 records live Render GET/PATCH probes proving GET /v1/postgres/{id} returns ipAllowList entries with cidrBlock and description, verifies fresh GETs after updates, and proves ipify's plain IPv4 response. This carry reads those same fields, sends {ipAllowList: [...]}, ignores the PATCH response body, and uses synthetic addresses with the verified names in tests. PR #710 records additional Render schema introspection and installed provider schema evidence for render_postgres.ip_allow_list. No live infrastructure mutation was performed for this carry.

Manual steps

  • When local staging access is needed after a public address change or database replacement, obtain RENDER_API_KEY from Render > Account Settings > API Keys and set STAGING_POSTGRES_ID from the staging Terraform output. Between staging workflows, run the README's operator-mac command. Verify the current /32 in Render > staging Postgres > Networking and a successful local psql connection with its Connections screen details. The workflow variable cleanup and main reconciliation dispatch belong to source PR Preserve live staging Postgres operator access #710; this redesign carry does not dispatch them.

thomasluizon and others added 5 commits October 12, 2026 17:38
Bumps the github-actions group with 2 updates: [pullfrog/pullfrog](https://github.com/pullfrog/pullfrog) and [oasdiff/oasdiff-action/breaking](https://github.com/oasdiff/oasdiff-action).

Updates `pullfrog/pullfrog` from 0.1.84 to 0.1.95
- [Release notes](https://github.com/pullfrog/pullfrog/releases)
- [Commits](pullfrog/pullfrog@99c5e78...ed80001)

Updates `oasdiff/oasdiff-action/breaking` from 0.1.17 to 0.1.18
- [Release notes](https://github.com/oasdiff/oasdiff-action/releases)
- [Commits](oasdiff/oasdiff-action@5e81b5c...b9325c9)

---
updated-dependencies:
- dependency-name: pullfrog/pullfrog
  dependency-version: 0.1.95
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: oasdiff/oasdiff-action/breaking
  dependency-version: 0.1.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit b23a35d)
Bumps AWSSDK.S3 from 4.0.103.4 to 4.0.104.1
Bumps AWSSDK.SimpleEmailV2 from 4.0.105.1 to 4.0.106.1
Bumps Google.Apis.AndroidPublisher.v3 from 1.76.0.4277 to 1.77.0.4284
Bumps Google.Apis.Calendar.v3 from 1.75.0.4206 to 1.77.0.4285
Bumps Scalar.AspNetCore from 2.17.10 to 2.17.13
Bumps Sentry.AspNetCore from 6.11.1 to 6.12.0

---
updated-dependencies:
- dependency-name: AWSSDK.S3
  dependency-version: 4.0.104.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: AWSSDK.SimpleEmailV2
  dependency-version: 4.0.106.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Google.Apis.AndroidPublisher.v3
  dependency-version: 1.77.0.4284
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: Google.Apis.Calendar.v3
  dependency-version: 1.77.0.4285
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: Scalar.AspNetCore
  dependency-version: 2.17.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: nuget-minor-patch
- dependency-name: Sentry.AspNetCore
  dependency-version: 6.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
(cherry picked from commit 53338bc)
* fix: apply reviewed API copy for ticket 1370

* test: align chat and OAuth assertions with reviewed copy

(cherry picked from commit d69b134)

# Conflicts:
#	src/Orbit.Application/Gamification/Services/GamificationService.cs
#	src/Orbit.Application/Referrals/Commands/CheckReferralCompletionCommand.cs
#	src/Orbit.Application/Social/Commands/SendCheerCommand.cs
#	src/Orbit.Infrastructure/Email/EmailCopy.cs
#	src/Orbit.Infrastructure/Services/AiProactiveCheckinMessageService.cs
#	src/Orbit.Infrastructure/Services/AiSlipAlertMessageService.cs
#	src/Orbit.Infrastructure/Services/ReminderSchedulerService.cs
#	tests/Orbit.Infrastructure.Tests/Controllers/OAuthControllerTests.cs
#	tests/Orbit.Infrastructure.Tests/Email/EmailMessageComposerTests.cs
#	tests/Orbit.Infrastructure.Tests/Services/AiProactiveCheckinMessageServiceGenerationTests.cs
#	tests/Orbit.Infrastructure.Tests/Services/AiSlipAlertMessageServiceGenerationTests.cs
#	tests/Orbit.Infrastructure.Tests/Services/AiSlipAlertMessageServiceTests.cs
* fix: preserve live staging Postgres operator access

* fix: manage staging Postgres access outside Terraform

(cherry picked from commit f4c2ce9)

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes Compared all 33 changed files against redesign/main, including the carry conflict resolutions and their effects on the existing redesign behavior.

  • Dependencies and tooling: Updates two GitHub Action pins and six NuGet packages while retaining the redesign configuration.
  • Copy and reminders: Carries notification, OAuth, chat, and achievement wording, fixes singular English reminder minutes, and updates corresponding assertions without changing DTOs or routes.
  • Staging access: Preserves live operator allow-list entries, removes tagged runner entries even without a marker, adds verified operator-mac access refresh, and makes Terraform manage the staging allow list only at creation.
  • Verification: The staging-access regression suite, 34 infrastructure Node tests, and 533 focused .NET tests passed; CI Build, Unit Tests, and OpenAPI checks are green. Render interface evidence was checked in the cited source PRs; no live infrastructure mutation was performed.

Pullfrog  | View workflow run | Using gpt-6.1-sol | 𝕏

@sonarqubecloud

Copy link
Copy Markdown

@thomasluizon
thomasluizon merged commit 0bed2af into redesign/main Oct 12, 2026
31 checks passed
@thomasluizon
thomasluizon deleted the chore/ticket-746-carry-api-copy branch October 12, 2026 20:59
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.

1 participant