EPIC-3: normalize component ownership - #13463
Open
masvelio wants to merge 20 commits into
Open
Conversation
masvelio
marked this pull request as ready for review
March 13, 2026 16:56
masvelio
requested review from
Rotorsoft,
dillchen,
mzparacha and
timolegros
as code owners
March 13, 2026 16:56
mzparacha
approved these changes
Mar 17, 2026
kurtassad
approved these changes
Mar 19, 2026
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.
Link to Issue
Fixes: #13454
Fixes: #13455
Fixes: #13456
Fixes: #13457
Fixes: #13458
Fixes: #13459
Fixes: #13460
Fixes: #13461
Description of Changes
useCommunityContestsintofeatures/contests/hooks/, extracted shared contest ownership intofeatures/contests/{types,utils}, removed the hook dependency onviews/components/CommunityStake/*, and repointed current consumer surfaces to the feature-owned path.features/notifications/hooks/and repointed bothNotificationSettingsand discussion subscribe toggles away fromviews/pages/NotificationSettings/use*.ViewThreadPageinto a route/data controller plus dedicated shell modules:useViewThreadData.tsViewThreadPageShell.tsxViewThreadPageBody.tsxViewThreadPageSubBody.tsxViewThreadPageComposer.tsxviewThreadPageSidebars.tsxviewThreadPage.contracts.tswith pure helpers for join-banner, gated-banner, and desktop sidebar visibility so the split keeps explicit render contracts.DiscussionsPageinto a route/filter controller plus dedicated shell/feed/composer modules:useDiscussionsData.tsDiscussionsPageShell.tsxDiscussionsPageFeed.tsxDiscussionsPageComposer.tsxDiscussionsPagePrivateTopic.tsxDiscussionsPageGridComponents.tsxdiscussionsPage.contracts.tswith pure helpers for feed mode selection, query enabling, and archive header counts so the split keeps explicit render contracts.ExplorePageinto a route/search/data controller plus dedicated shell/content/modal modules:useExploreData.tsExplorePageShell.tsxExplorePageContent.tsxExplorePageManageCommunityStakeModal.tsxGovernancePageinto a narrow page-state shell plus dedicated governance content modules:useGovernancePageData.tsGovernancePageContent.tsxfeatures/governance/hooks/useInitChainIfNeededpath directly and keeps the governance render tree out of the page entry component.features/communityStake/{hooks,utils}with compatibility exports left in the legacyviews/componentspathsTopics/topicFlow.tssoStakeIntegrationand weighted-voting steps no longer depend on the largeTopics.tsxpage moduleAdminContestsPageintouseAdminContestsPageData.ts,AdminContestsPageContent.tsx,AdminContestsPageList.tsx,AdminContestsPageTypeSelection.tsx, andadminContestsPage.contracts.tsStakeIntegrationintouseStakeIntegrationData.tsandStakeIntegrationContent.tsxHomeDiscoverySections.tsxHomePageManageCommunityStakeModal.tsxCommunityHomePageintouseCommunityHomePageData.tsandCommunityHomePageContent.tsxHomePageandCommunityHomePagethrough the same contest / prediction market / quest / trending-thread composition seam while preserving Community Home specific token and sticky-composer sectionsdocs/plans/.libs/model/test/utils/community-seeder.tsso anonymous seeded community ids stay unique within the test process, which fixes the prediction-market resolution CI failure caused by duplicateCommunities.idvalues.views/pages/NotificationSettings/use*.ts,views/pages/CommunityManagement/Contests/useCommunityContests.ts, and Community stake paths so the rollout stays incremental without changing route/page structure.EPIC-3 Progress
useCommunityContestsViewThreadPageDiscussionsPageExplorePageGovernancePageCommunityManagementsub-pagesTest Plan
ViewThreadPagesplit files, EPIC-3.4DiscussionsPagesplit files, EPIC-3.5ExplorePagesplit files, EPIC-3.6GovernancePagesplit files, EPIC-3.7 CommunityManagement / stake ownership files, and EPIC-3.8 home discovery files.pnpm exec eslint --no-ignore packages/commonwealth/test/unit/epic3/adminContestsPage.contracts.spec.tsandpnpm exec eslint --no-ignore packages/commonwealth/test/component/pages/homePage.integration.spec.tsx packages/commonwealth/test/component/pages/communityHomePage.integration.spec.tsxto verify the new EPIC-3.7 and EPIC-3.8 task-owned specs directly.pnpm lint-diff; it passes with the same ignored-test warnings already present on this branch.pnpm -F commonwealth no-legacy-importsandpnpm -F commonwealth no-stub-imports; both pass onorigin/master...HEADafter the EPIC-3.8 import-guard follow-up.pnpm -F commonwealth check-types; the EPIC-3.8 task-localuseCommunityHomePageData.tstyping issue was fixed, but the repo still exits non-zero because of unrelated existing errors in prediction-market/shared exports, MCP typings, WalletPage types, and the current component-test typings/tooling setup.pnpm -F commonwealth bundle; it still fails on the unrelated repo-wideBinaryVaultAbiexport issue inlibs/evm-protocols/src/event-registry/eventRegistry.ts.pnpm -F commonwealth test-select test/unit/epic3/adminContestsPage.contracts.spec.ts; the suite is blocked by the shared Vitest DB bootstrap / local Postgres trust-auth setup.pnpm -F commonwealth test-component -- --allowOnly=false; the component suite is currently blocked before test execution because Vitest cannot resolve@testing-library/jest-dom/vitestfrompackages/commonwealth/test/component/setup.tsin this environment.pnpm -F commonwealth lint-boundaries; the script resolves the commit-range file list, but the environment cannot loadeslint-plugin-boundaries, so that gate is currently blocked by tooling availability rather than code findings.pnpm exec eslint --no-ignore libs/model/test/utils/community-seeder.ts; it passes, while the correspondinglibs/modelspec remains locally blocked by the same Postgres trust-auth environment issue.Deployment Plan
Other Considerations
index.htmlwas intentionally left out of the PR.