Repository navigation
Remove social runtime surfaces (ORB-233) - #787
Merged
Merged
Conversation
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes Reviewed the complete social-runtime removal, its surviving application paths, and compatibility with the orbit-ui-mobile consumer.
- Runtime removal: Deletes social controllers, profile actions, handlers, validators, graph/feed services, and their registrations and OpenAPI operations.
- Compatibility and storage: Retains profile response shapes, persisted social data, export/reset handling, and historical achievement definitions while returning neutral social profile values.
- Core behavior: Removes feed emission from gamification and streak processing, preserves push delivery, and stops generating handles during signup.
- Agent access: Removes the social capability and advertised scope without invalidating existing API keys that also grant surviving scopes.
- Verification: All 341 focused tests passed, covering removed routes, profile compatibility, signup, gamification, stored scopes, data export/reset, and EF model continuity. Cross-repository tracing found no current runtime consumer failure from the neutral profile values; the full test suite and live fleet rollout were not independently rerun or verified.
gpt-6.1-sol | 𝕏
The record is never built after the social removal; it stays only so the profile response schema keeps its shape for old clients until #685, and the committed OpenAPI snapshot holds that shape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes Reviewed b493869b against the previously reviewed 29635505, with the full PR diff as context.
- Excluded the compatibility record from coverage: Added a file-specific SonarCloud coverage exclusion for
PublicProfileSettings.cs, which contains only the retained response-shape record. The change leaves runtime behavior, contracts, general analysis exclusions, and build/test commands unchanged.
Verification was static; tests and live SonarCloud analysis were not rerun for this coverage-only change.
gpt-6.1-sol | 𝕏
|
thomasluizon
added a commit
that referenced
this pull request
Oct 19, 2026
…EADME (#746) (#790) * Remove social runtime surfaces (ORB-233) (#787) * Remove social runtime surfaces (ORB-233) * Finish social signup assertions and reference cleanup * ci: exclude the retained public profile shape from coverage The record is never built after the social removal; it stays only so the profile response schema keeps its shape for old clients until #685, and the committed OpenAPI snapshot holds that shape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 7c79309) * docs: point the grounding mode switch at the Render database (#789) Production data lives on Render Postgres; the Supabase project is deleted. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 3330b8c) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.




Removes the social API runtime for ORB-233. Closes thomasluizon/orbit-tickets#239.
The branch started from the merged removal patterns in API PRs #779 and #783. This follows the final work-order instructions: retain schema, installed-client fields, historical badges, and user-owned data for their later release barriers.
Changes and approach
FriendsController,PublicProfileController, all 30 files underOrbit.Application/Social, the three social profile commands/actions and validators, public-profile queries/builders, social repository readers, and their registrations/tests.social.manage), one advertised scope (manage_social), nine rate policies, and both feed-emission call sites. Tree inspection found zero social chat tools, MCP tools, pay gates, background jobs, or health entries to remove. Existing notification privacy handling remains necessary for stored messages.GamificationService, remove the feed dependency fromUserStreakService, and remove the feed-only milestone constant. Habit logging, streak computation, XP, achievement awards and push delivery retain their existing behavior.dotnet build. Every surviving route definition is structurally identical.ProfileResponseretains its property names, types and required set; only compatibility documentation and social deprecation markers change.Compatibility and retained data
ProfileResponse.handle(string?) returns null,socialOptIn(bool) returns false, andpublicProfile(PublicProfileSettings?) returns null.PublicProfileSettingsretainsenabled,slug,shareUrl,showStreak,showLevel,showAchievements, andshowTopHabitswith their existing types; its record moves intoProfile/Modelswith its original namespace. The contraction belongs to thomasluizon/orbit-tickets#685 after the carrying client release andMinSupportedVersiongate.The five entity types, tables, DbSets, mappings, indexes and seven
Usersproperties remain:Handle,SocialOptIn,PublicProfileSlug,PublicProfileShowStreak,PublicProfileShowLevel,PublicProfileShowAchievements,PublicProfileShowTopHabits.DomainConstants.HandleMaxLengthremains because the mapping uses it. The retained types areFriendship,Cheer,BlockedUser,Report, andFriendFeedEvent; they support schema mapping, data export/reset, and tests for persisted data. Their enums and domain guards also remain. No migration or snapshot changes are included; the existing pending-model-change assertion passes.Social rows may still be owned by users.
ExportUserDataQuery, its five exported social collections, andAccountResetRepositorykeep handling them. This PR does not claim to close the table-dependent defect in ORB-97 (thomasluizon/orbit-tickets#103); its subject remains until the later table drop.The four retired definitions
first_cheer,first_friend,squad_goals, andcheerleaderstay resolvable withIsRetired: true, preserving earned badges and XP. Their translations andAchievementCategory.Socialremain needed.show_off,year_in_review, referral and milestone sharing remain available.IContentModerationService,ContentModerationService, and the HTTP-client DI registration survive. The interface has a URL-linked WHY note for ORB-11 (thomasluizon/orbit-tickets#17), and its registration test resolves the real implementation.Rollback of this code removal can reuse the preserved schema and rows. The later drop in thomasluizon/orbit-tickets#1555 is destructive: its rollback recreates schema, not erased data.
Stored scope validation
ManageSocialis deleted. Stored scopes are accepted without checkingAgentScopes.All; the only use of that set is the new-key validator inCreateApiKeyValidator.ApiKeyAuthenticationHandlertransfers the stored list directly:AgentOperationExecutor.GetGrantedScopesreturns API-key scopes unchanged:AgentPolicyEvaluatorchecks the requested capability's scope:OAuth issues
AgentScopes.ClaudeDefaultScopes, which did not containmanage_social. The regression test creates a real API key with bothmanage_socialandread_habits, authenticates it through the production handler, and proves the surviving scope still reaches claims. No existing token data is rewritten. The removed scope has no catalog capability to grant. This change introduces no new external response-field reads.Test evidence
Before removal, unchanged infrastructure tests passed:
Observed: exit 0, 67 passed, zero skipped. After strengthening
SocialDeprecationTeststo require absent routes/controllers/capabilities and compatible fields without deprecation, this command failed before implementation:Observed: exit 1, 35 failed and 13 passed because the runtime routes/controllers and deprecation markers still existed. The same cases pass after removal.
The new profile test also failed before implementation:
Observed: exit 1; the serialized
handlewas a string rather than null. After implementation it passes, including checks that stored legacy values remain intact. Focused application tests passed 177 cases; focused infrastructure tests passed 121 cases. Signup follow-up tests passed 103 infrastructure and 67 gamification cases.Final verification on the committed branch:
dotnet build Orbit.slnxdotnet test tests/Orbit.Domain.Testsdotnet test tests/Orbit.Application.Testsdotnet test tests/Orbit.Infrastructure.Testsdotnet test tests/Orbit.Analyzers.TestsAll 9,631 tests pass. The warning-free expectation is not met by the existing package graph and unchanged files: NU1608 package constraints, Firebase
Message.Token, API-versioning diagnostics, the retired ad-reward action tests, and an existing captured constructor parameter. No warning points at changed code. These warnings were not suppressed or addressed outside this removal's scope.Local convention checks pass: timeless prose, dash ban, suppression allowlist, diff whitespace, no new pragma/SuppressMessage, and URL-linked bare-comment inspection. Browser/server and live-database checks were not run under this work order; removed routes are checked by controller reflection and both generated contracts. Schema continuity is checked by the existing EF model test.
Reference sweep
Files-only case-insensitive sweep across
src/andtests/, excluding unchanged migration history and generated contracts (checked separately). MediatRHandle(...)methods are excluded; method-group references and generic uses of report/friendly remain incidental matches. Survivors are preserved storage/export/reset, historical badge definitions/translations, compatibility DTOs and their tests, referral copy, notification privacy, and unrelated reporting/handler terminology.Removed runtime-symbol sweep:
Observed: no output, exit 1 (no matches).
Assumptions
src/Orbit.Application/Profile/Models/PublicProfileSettings.csfrom SonarCloud coverage: after the removal nothing builds the record, it holds no logic, and the committedopenapi.jsonsnapshot plus the OpenAPI Breaking-Change Gate hold its shape; Carry main fixes into redesign main (#746) #685 deletes the record and this exclusion together (rejected alternative: a test that only constructs the record to read its getters).PublicProfileSettingsin its original namespace when separating its compatibility record from the deleted command (rejected alternative: deleting or changing the response type).Manual steps
maindeploys nothing. The owner must approve the production API release. In GitHub Actions, run Release API (.github/workflows/release.yml) frommainwith inputsenvironment=productionandbranch=main. A successful Verify API health and live commit step proves the carrying commit is live.tests/Orbit.Infrastructure.Tests/Persistence/RollingMigrations.md.