feat(TRB-048): reconcile priming, positioning, and Compass progress semantics - #65
Merged
Conversation
- Replace signalCounts/coldStartThresholds with behaviorSignalCounts and primingProgress - Add compassState enum (priming | positioned_unrevealed | revealed) to MeResponse - Update web test fixtures in profile, position, and username page tests to new shape - Update position page to pass new prop shape to CompassProgress
- Replace signalCounts/coldStartThresholds with behaviorSignalCounts and primingProgress - Derive compassState from positioned + compass_revealed_at fields - Rename internal COLD_START_THRESHOLDS to PRIMING_THRESHOLDS (likes/follows only) - Update Fastify response schema to match new MeResponse shape - Add compassState branch tests (priming, positioned_unrevealed, revealed)
- Remove posts from computeNextMilestone() ordinary priming lanes - Update likes threshold to 10, follows threshold to 5 - Refactor NextMilestoneResult to expose structured lane progress (current/threshold/remaining) - Add clarifying comments to checkAndTriggerColdStart() for bootstrap context - Update milestone tests to verify likes/follows-only semantics
- Replace three-lane UI (Posts/Engagement/Follows) with two-lane (Likes/Follows) - Remove bottleneck progress calculation and ETA messaging - Update copy to emphasize OR unlock condition - Position page now branches on compassState enum (priming/positioned_unrevealed/revealed) - Extract signal counts from primingProgress contract instead of old shape - Update all tests and maintain accessibility standards
- Remove signalCounts and coldStartThresholds from schema - Add behaviorSignalCounts (posts/likes/shares/follows breakdown) - Add primingProgress (unlockMode, likes, follows with current/threshold) - Add compassState enum (priming, positioned_unrevealed, revealed) - Update both /api/users/me and /api/v1/users/me paths identically
- Change compose 403: Engage with the platform → Like content and follow creators to get started - Change repost 403 in FeedPost: same message update - Change repost 403 in detail page: same message update - Add regression assertions for old misleading copy - Add positive assertions for new priming path guidance
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.
Summary
This PR implements TRB-048 by aligning onboarding priming guidance,
/users/mecontract shape, Compass state handling, and posting/reposting gate messaging with Spec 25 option 1.What changed
MeResponsecontract inpackages/shared:behaviorSignalCountsprimingProgress(likes/follows withunlockMode: 'any')compassState(priming | positioned_unrevealed | revealed)signalCountsandcoldStartThresholdsGET /api/v1/users/meresponse + schema to return new fields and derivecompassState.posts >= 3 || engagement >= 10 || follows >= 5) with clarifying comments.compassState.docs-site/api-reference/openapi.jsonto match updated/users/mecontract.Why
The app previously mixed priming, broader positioning inputs, and Compass reveal state. This PR separates those concerns so product copy, UI behavior, and API contracts are internally consistent with existing posting/reposting gates.
Validation
Changed areas
apps/api/src/routes/users.tsapps/api/src/services/positioning/milestone.tsapps/api/src/services/events/ingest.tsapps/web/src/components/features/onboarding/CompassProgress.tsxapps/web/src/app/(dashboard)/profile/position/page.tsxapps/web/src/components/features/feed/{ComposeSheet,FeedPost}.tsxapps/web/src/app/(dashboard)/feed/[postId]/page.tsxpackages/shared/src/types/user.tsdocs-site/api-reference/openapi.json