feat: moderation UI wrappers (Stage 3) + slice-1 audit gap tests #54
No reviewers
Labels
No labels
auth
bug
composer
correctness
database
durability
enhancement
feeds
interactions
notifications
performance
reliability
safety
security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
starsetbyte/peregrine!54
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/moderation-ui-wrappers"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stage 3 of the moderation foundation (plan:
docs/superpowers/plans/2026-07-05-moderation-ui-wrappers.md, in-tree on this branch's session — roadmap ondocs/moderation-foundation). Stacked on #53 — retarget tomainafter #53 merges.Zero user-visible behavior change. 11 commits, 13 new files, no existing file modified. Nothing consumes these components yet; Stage 4 wires them into timeline/thread/profile/quotes/search/notifications.
What's here
ui/common/moderation/:ContentCover,MediaCover,HiddenPostRow,LabelBadge,LabelsBottomSheet,PostOverflowMenu, pureModerationCopy(no raw-DID leaks, tested),ModerationPreviewscoil3/.clip(/graphicsLayer/.blur(; media/content composed only behind the reveal gate; sheet hoisting locked out ofPostCardModerationResolverNotificationTest(6 tests),SchemaV10ContractTest(locks the v10 schema delta + migration SQL)Verification
./gradlew test: 329 unit tests, 0 failures (23 new)assembleDebug: successlint: only the 2 pre-existing NewApi errors inAtProtoOAuthClient.kt(untouched here, predate this branch)Role.Buttonon LabelBadge, trailing newline)Notes for Stage 4 wiring (do not lose)
LabelBadge/LabelsBottomSheettakeList<LabelCause>(unstable type): callers must pass aremember(post.uri)-ed list or the header recomposes every passmodifierapplies to the cover branch only; apply layout modifiers to the inner content, not the wrapperHiddenPostRowdoes no internal noOverride check — callers gate eligibilityLabelsBottomSheetuses default sheet state (houseRepostBottomSheetpasses one explicitly) — reconcile when wiringSchemaV10ContractTestlocks column names/affinities, not SQL DEFAULT clauses (Room identity-hash catches type drift at runtime)🤖 Generated with Claude Code
https://claude.ai/code/session_011FJZABQvMnCr3mqbk7KG9M
starsetbyte referenced this pull request2026-07-05 13:40:10 +00:00