Skip to content

Carry main into redesign/main: deprecations, notification counts, owed cancellations and the Play renewal notice (#746) - #778

Merged
thomasluizon merged 6 commits into
redesign/mainfrom
thomasluizon/ticket-746-carry-main-oct19b
Oct 19, 2026
Merged

thomasluizon merged 6 commits into
redesign/mainfrom
thomasluizon/ticket-746-carry-main-oct19b

Conversation

@thomasluizon

Copy link
Copy Markdown
Owner

Carries the six requested main commits onto redesign/main, preserving the redesign API, proactive engine, Notion integration and migration history. This changes behavior only by carrying those commits. Every carry uses git cherry-pick -x; no branch was rebased or force pushed.

Refs thomasluizon/orbit-tickets#746
Refs thomasluizon/orbit-tickets#235
Refs thomasluizon/orbit-tickets#218
Refs thomasluizon/orbit-tickets#239
Refs thomasluizon/orbit-tickets#1551
Refs thomasluizon/orbit-tickets#1549
Refs thomasluizon/orbit-tickets#1548

Carried commits

Before each pick, checked the relevant source and tests for the requested behavior. None of the six changes was already carried; no commit was skipped.

Main commit Carry commit Resolution
f8abd02073f10131409cf1ab4c2a9f716dfa10ef (#771) ef1c06b2 Clean pick. Retained redesign profile fields and Notion tool registration while adding AI memory operation/property deprecations, the schema transformer and all tests.
572b8dee434b7565c36cdeaa883cfc03a485dcc8 (#772) 9c1c0735 Clean pick. Added challenge/accountability deprecation attributes and document tests without removing routes or behavior tests.
9c414c7c615a9dae92eedb76dee0536724e0f7aa (#773) 6bc9b51e Clean pick. Added social route and required profile-property deprecations while retaining both social test sets and every redesign profile field.
f5df366ae33b44c19e843bd2db927b64a7a26734 (#774) ee28972a Clean pick. Carried the shared inbox visibility predicate, filtered counts/paging and all regression/translation tests.
c369535a2035d96f782fb16f1bbb1aeb8a7f8912 (#775) 77768f1f Resolved the two paths below. Carried the durable cancellation ledger, domain guards, validator, worker, erasure handling, migration, documentation and tests. Scheduler auto-merges retain ProactiveEngineSchedulerService and add the owed-cancellation worker in both modes.
96023f9a492a82682d7dc716d541e12693050d7a (#776) 6586a167 Clean pick. Carried both sign-in paths, account reactivation ownership cleanup, queued provider verification before the localized renewal notice, DI changes and all tests.

Conflict resolutions by redesign commit

Notion integration, #732 (5d9ff03e)

  • src/Orbit.Infrastructure/Migrations/OrbitDbContextModelSnapshot.cs: the incoming ledger entity conflicted with the redesign Notion entities at the same insertion point. Regenerated the snapshot from the combined runtime model using EF scaffolding and the design-time factory, rather than merging generated C# by hand. The resulting diff adds only the 38-line owed-cancellation entity; all Notion, issued-block and proactive schema remains.

Earlier carry and redesign migration compatibility, #768 (63b88c15), retaining #732 migrations

  • tests/Orbit.Infrastructure.Tests/Persistence/FeatureFlagAccountsMigrationTests.cs: kept the redesign migration ordering, user-column filtering, foreign-key and slip-contract assertions. Added main's exact ledger column, no-user-foreign-key and two-index assertions, scoped to the new table so redesign tables do not invalidate main's fixed total assumptions. Appended the original ledger migration to the combined ordering assertion. No behavior assertion from either branch was discarded.

No other path conflicted. Both OpenAPI documents were regenerated after the final pick with dotnet build Orbit.slnx; neither was hand merged. A recursive comparison against 63b88c15 found exactly 36 additions of deprecated: true per document: 33 operations and three profile properties. Every other value, including the redesign v1/v2 contracts, is identical.

Migration evidence

Kept 20261019091925_AddOwedSubscriptionCancellations.cs and its Designer byte-for-byte from main, with the original timestamp. It follows 20261019011031_ContractHabitLogSlip in the combined ordering. There is no unresolved migration ordering question.

From src/Orbit.Api, regenerated the snapshot with dotnet ef migrations add CarrySnapshotGeneration --project ../Orbit.Infrastructure --startup-project . --no-build using OrbitDbContextFactory. Removed the two temporary scaffold files after confirming their operations exactly match the carried migration; no duplicate migration is committed.

dotnet ef migrations has-pending-model-changes --project ../Orbit.Infrastructure --startup-project . --no-build exited 0 and printed: "No changes have been made to the model since the last migration." The combined-snapshot assertion in FeatureFlagAccountsMigrationTests also passes. No live database was used.

Test evidence

On final commit 6586a167, both env -u LANG dotnet build Orbit.slnx --verbosity quiet and LC_ALL=en_US.UTF-8 dotnet build Orbit.slnx --verbosity quiet exited 0 with zero errors. Existing dependency warnings remain. Both full-suite commands, env -u LANG dotnet test --no-build --verbosity quiet and LC_ALL=en_US.UTF-8 dotnet test --no-build --verbosity quiet, exited 0:

Project LANG unset LC_ALL=en_US.UTF-8 Failed Skipped
Domain 778 778 0 0
Application 5758 5758 0 0
Infrastructure 3945 3945 0 0
Analyzers 32 32 0 0
Total 10513 10513 0 0

Focused carry verification, all exit 0:

  • AI memory and existing controller behavior: 53 cases; combined deprecations and controller behavior after regeneration: 128 cases.
  • Inbox query and existing mark-all/delete-all behavior: 22 cases.
  • Erasure, owed cancellations, billing, scheduler and migration checks: 158 infrastructure, 51 application and eight domain cases.
  • Reactivation, sign-in controllers, first-login races and deletion persistence: 168 infrastructure, 58 application and 22 domain cases.

An intermediate deprecation run used generated documents from the preceding carry and failed two social-property checks. Rebuilding the combined carries regenerated both documents and passed all 128 focused cases. This PR carries existing regression tests; no additional defect fix or new regression test was introduced beyond the required migration-test conflict adaptation.

The required standalone project runs also exited 0: dotnet test tests/Orbit.Domain.Tests --no-build --verbosity quiet (778), dotnet test tests/Orbit.Application.Tests --no-build --verbosity quiet (5758), and ORBIT_MIGRATION_GUARD_BASE=origin/redesign/main dotnet test tests/Orbit.Infrastructure.Tests --no-build --verbosity quiet (3945). The last run exercised the migration guard against the actual PR base and recorded deployment barriers.

git diff --check, dash checks over all changed paths, timeless checks against origin/redesign/main, root allowlist and suppression allowlist all exited 0. The conflict-resolution commit passed every pre-commit hook. The only added bare comment is main's URL-linked explanation for the shared notification-prefix predicate. No server, browser, live database, mutation testing or CI polling was used.

External interface evidence

No new external response field, flag or provider API is introduced by this carry. The schema transformer is unchanged from main #771; its external metadata verification and real generated-document evidence are recorded in #771. The social contract verification is recorded in #773. The carried notification query translation uses the installed Npgsql provider, and the tests read the actual regenerated documents. Provider behavior and fixtures are carried unchanged from #775 and #776.

Assumptions

  • Scoped main's ledger table/index assertions to that table while preserving redesign assertions, rather than copying main's fixed global counts and final-seven migration list, which omit redesign-only schema and migrations.

Manual steps

  • fix: retain owed cancellations after account erasure #775, adapted to staging: after integration and owner release authorization, open GitHub Actions > Release API (release.yml) on workflow ref main, with environment=staging and branch=redesign/main. Startup applies 20261019091925_AddOwedSubscriptionCancellations. Prove completion using the workflow's staging health/live-commit checks at https://api-staging.useorbit.org/health and verify the staging database index IX_OwedSubscriptionCancellations_Provider_ProviderIdentifier. No new variable, secret, manual migration or backfill is required.
  • ORB-233: Deprecate social API (part 1, deprecation) #773: its Manual steps section names no action for the deprecation carry; the normal staging API release above publishes both regenerated contracts.
  • fix: notify returning Play subscribers about renewal #776: its Manual steps section requires only normal API deployment; use the same staging release above. No additional configuration, secrets, console settings, migration or backfill is required.

thomasluizon and others added 6 commits October 19, 2026 08:11
* fix: retain provider cancellation obligations after account erasure

* fix: preserve erasure for accounts without billing obligations

* fix: claim owed cancellations before provider calls

* fix: alert owed cancellation exhaustion only after a failed attempt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit c369535)
* fix: explain Play renewal recovery on account reactivation

* test: register reactivation service in sign-in retry fixture

* fix: verify Play renewal before reactivation notice

(cherry picked from commit 96023f9)
@sonarqubecloud

Copy link
Copy Markdown

@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 Reviewed all six carried commits against redesign/main, including their interaction with the retained redesign functionality.

  • Contract deprecations: AI memory, challenge/accountability, and social routes and profile fields remain available, with deprecation metadata in both OpenAPI versions.
  • Inbox visibility: Notification paging and counts share the retired-URL filter, matching the mobile repository's shared policy.
  • Durable cancellations: Provider cancellation obligations survive account erasure with independent retries, backoff, exhaustion alerts, and worker registration in both scheduler modes.
  • Play reactivation: Both sign-in paths clear deletion ownership and queue a provider-verified, localized renewal notice with replay deduplication.
  • Migration compatibility: Reviewed the ledger migration, combined redesign snapshot, and conflict-adapted schema assertions. Focused verification passed 451 tests with no failures or skips; the full suite was not rerun.

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

@thomasluizon
thomasluizon merged commit cc34646 into redesign/main Oct 19, 2026
24 checks passed
@thomasluizon
thomasluizon deleted the thomasluizon/ticket-746-carry-main-oct19b branch October 19, 2026 11:47
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