Repository navigation
Carry main into redesign/main: deprecations, notification counts, owed cancellations and the Play renewal notice (#746) - #778
Merged
thomasluizon merged 6 commits intoOct 19, 2026
Conversation
(cherry picked from commit f8abd02)
(cherry picked from commit 572b8de)
(cherry picked from commit f5df366)
* 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)
|
There was a problem hiding this comment.
✅ 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.
gpt-6.1-sol | 𝕏
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




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.
f8abd02073f10131409cf1ab4c2a9f716dfa10ef(#771)ef1c06b2572b8dee434b7565c36cdeaa883cfc03a485dcc8(#772)9c1c07359c414c7c615a9dae92eedb76dee0536724e0f7aa(#773)6bc9b51ef5df366ae33b44c19e843bd2db927b64a7a26734(#774)ee28972ac369535a2035d96f782fb16f1bbb1aeb8a7f8912(#775)77768f1fProactiveEngineSchedulerServiceand add the owed-cancellation worker in both modes.96023f9a492a82682d7dc716d541e12693050d7a(#776)6586a167Conflict 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 migrationstests/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 against63b88c15found exactly 36 additions ofdeprecated: trueper document: 33 operations and three profile properties. Every other value, including the redesign v1/v2 contracts, is identical.Migration evidence
Kept
20261019091925_AddOwedSubscriptionCancellations.csand its Designer byte-for-byte from main, with the original timestamp. It follows20261019011031_ContractHabitLogSlipin the combined ordering. There is no unresolved migration ordering question.From
src/Orbit.Api, regenerated the snapshot withdotnet ef migrations add CarrySnapshotGeneration --project ../Orbit.Infrastructure --startup-project . --no-buildusingOrbitDbContextFactory. 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-buildexited 0 and printed: "No changes have been made to the model since the last migration." The combined-snapshot assertion inFeatureFlagAccountsMigrationTestsalso passes. No live database was used.Test evidence
On final commit
6586a167, bothenv -u LANG dotnet build Orbit.slnx --verbosity quietandLC_ALL=en_US.UTF-8 dotnet build Orbit.slnx --verbosity quietexited 0 with zero errors. Existing dependency warnings remain. Both full-suite commands,env -u LANG dotnet test --no-build --verbosity quietandLC_ALL=en_US.UTF-8 dotnet test --no-build --verbosity quiet, exited 0:Focused carry verification, all exit 0:
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), andORBIT_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 againstorigin/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
Manual steps
release.yml) on workflow refmain, withenvironment=stagingandbranch=redesign/main. Startup applies20261019091925_AddOwedSubscriptionCancellations. Prove completion using the workflow's staging health/live-commit checks athttps://api-staging.useorbit.org/healthand verify the staging database indexIX_OwedSubscriptionCancellations_Provider_ProviderIdentifier. No new variable, secret, manual migration or backfill is required.