high priority low complexity frontend pending frontend specialist Tier 1

Acceptance Criteria

MentorActivitySummaryPanel accepts a required `VoidCallback? onTap` parameter; when non-null, wraps the card root in an InkWell with that callback
When onTap is null the card renders without InkWell and no tap ripple is shown
Semantics widget wraps the entire card with a label such as 'Activity summary: {n} total activities' and a hint 'Tap to view full activity log'
All decorative count bars / progress indicators are wrapped in ExcludeSemantics so screen readers skip them
Card background, text, and each type-breakdown row all pass WCAG 2.2 AA contrast ratio (โ‰ฅ4.5:1 for normal text, โ‰ฅ3:1 for large text) measured against design tokens
InkWell splash respects the card's border radius so the ripple does not bleed outside the card boundary
The widget renders identically when onTap is null (read-only display on screens that don't navigate)
No hardcoded color values are introduced; all colors reference design tokens

Technical Requirements

frameworks
Flutter
flutter_test
data models
MentorActivitySummary
performance requirements
Widget rebuild triggered only when activity data changes, not on every parent rebuild
InkWell splash animation completes within 300 ms
security requirements
onTap callback must not expose raw mentor IDs in navigation arguments without proper access-control check at the destination screen
ui components
InkWell
Semantics
ExcludeSemantics
MentorActivitySummaryPanel
Design token color references (AppColors / ThemeData)

Execution Context

Execution Tier
Tier 1

Tier 1 - 540 tasks

Can start after Tier 0 completes

Implementation Notes

Wrap the outermost Card/Container of MentorActivitySummaryPanel in a Semantics widget first, then nest the InkWell inside that Semantics node (Semantics โ†’ InkWell โ†’ card content). This ordering ensures the semantic label is announced before the interactive hint. Use `Material(type: MaterialType.transparency)` as the InkWell's ancestor if the card has a custom background, to prevent ink from painting over the card color. For contrast validation during development, use the Flutter DevTools accessibility panel or write a helper that parses Color objects and computes relative luminance per WCAG 2.1 ยง1.4.3.

Design tokens are the single source of truth โ€” never introduce literal hex values.

Testing Requirements

Widget tests (flutter_test): (1) render with onTap=null โ€” verify no InkWell in widget tree; (2) render with onTap callback โ€” verify InkWell present and tap triggers callback exactly once; (3) pump SemanticsController and assert label contains total activity count and hint text; (4) verify ExcludeSemantics wraps each decorative bar; (5) programmatic contrast check: extract foreground/background colors from rendered widget and assert ratio โ‰ฅ4.5:1 using a contrast-ratio utility. All tests run in both light and dark theme via ThemeData injection.

Epic Risks (2)
medium impact medium prob dependency

The org labels system may not yet have label keys defined for peer mentor detail screen terminology (role labels, section headings), requiring additions to the label key registry that must be coordinated with the admin configuration team.

Mitigation & Contingency

Mitigation: Audit existing label keys in the terminology system before starting OrgLabelsProvider integration. Submit required new label keys for admin configuration in parallel with component implementation.

Contingency: If label keys are not available at integration time, use hardcoded English fallbacks with a clear TODO for admin configuration, ensuring the widget renders correctly while keys are being provisioned.

high impact low prob technical

The design token semantic colors (warning, error surface) may not meet WCAG 2.2 AA 4.5:1 contrast ratio when rendered on the app's background surface tokens, requiring design system changes that affect the entire app.

Mitigation & Contingency

Mitigation: Run contrast ratio validation on the token palette during Epic 1 design token implementation. Flag any failing pairs to the design system owner before building UI components that depend on them.

Contingency: If tokens fail contrast requirements, define supplementary high-contrast override tokens specific to alert and badge contexts that meet AA without modifying the global palette.