Conversation
Replace the collapsed single progress bar + wrapped gray text with a vertical list: fractional requirements (policies, training) show a count + mini bar; binary requirements (HIPAA, device, background) show a Done/Missing badge. Colors use design-system Text/Badge variants (success/warning/muted, accent/secondary). Extracted the rendering into TaskRequirements.tsx to keep MemberRow focused. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Universal per-employee 2FA sourcing from any integration bound to the 2FA evidence task (taskMapping === TASK_TEMPLATES.twoFactorAuth), covering codebase + dynamic integrations via the shared registry. - Organization.twoFactorSource column + migration - CheckRunRepository.findLatestUserResultsByConnectionAndCheck: full per-user results from the latest real (non-inconclusive) run, org-scoped - TwoFactorSourceController: GET/POST two-factor-source, available-2fa-sources (registry filtered by 2FA taskMapping), two-factor-statuses (per-email enabled/missing from the latest run; absence resolves to Not provided client-side) - All endpoints @RequirePermission-gated (integration read/update); 22 tests Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ck results Extract a feature-agnostic, read-only service that returns ANY integration check's per-resource results in a stable envelope. Interpretation stays in the feature — the service never types/interprets evidence (raw JSON). The 2FA controller becomes consumer #1 and gets thinner (delegates all fetching). - CheckResultsService: listSourcesBoundToTask / getLatestResultsByCheck / getLatestResultsForTask; exported from IntegrationPlatformModule - Generalize repo method -> findLatestResultsByConnectionAndCheck (optional resourceType) - TwoFactorSourceController now depends only on the service (+ its own twoFactorSource column) - Agent docs: check-results-service skill + README + apps/api/CLAUDE.md pointer - 29 tests across service/controller/repo Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Frontend for the universal 2FA source: a toolbar selector (clone of the sync-source pattern) picks which connected integration bound to the 2FA evidence task supplies per-user status; the People list joins the latest check-run results to members by email and renders a 2FA row per person as Done / Missing / Not provided (absence never reads as failure). Also: service cleanups (batched connection lookup via ConnectionRepository.findActiveBySlugsAndOrg, typed manifest+check pairs) and hide 0/0 count rows (nothing-to-complete is not-applicable). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…bile New responsive-ui skill: every UI change must work at mobile/tablet/ desktop/large-desktop widths by default, with repo patterns (DS Table overflow-x-auto, toolbar hidden sm:block convention, mobile-first Tailwind) and a done-checklist. Wired into the ui skill and CLAUDE.md so it loads without being asked. Apply it to the 2FA source selector: hidden sm:block, matching the other secondary toolbar controls (the no-wrap toolbar squeezed on phones); the per-member 2FA status stays visible at every width via table scroll. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Explicit precedence: DS rules win where the skills touch. Breakpoint classes go on wrapper divs, never on DS components; DS layout primitives before raw responsive divs; arbitrary pixel values stay an anti-pattern (standard scale first, fixed control widths only when matching an established pattern on that surface, always with a responsive strategy). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The showLoadingRow test only checked a negative condition, so removing the Skeleton would still pass. Add a testid to the loading wrapper and assert it both ways. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…mpai/comp into tofik/people-tasks-column-redesign
…fa-source # Conflicts: # apps/app/src/app/(app)/[orgId]/people/all/components/TaskRequirements.test.tsx
…esign feat(people): redesign TASKS column with per-requirement status rows
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
- Deterministic email dedup in two-factor-statuses: a failing row always wins regardless of result order (compliance-conservative) - use2faSource: isLoading covers both SWR requests; surface fetch errors - Selector waits for both requests before rendering (no placeholder flash) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Row gap halved (gap-1 -> gap-0.5) - Progress bar smaller: h-1 and fixed w-20 instead of stretching flex-1 - Counts get pl-1.5 to match the Badge's inner padding, so counts and Done/Missing badges sit on one vertical line - Container content-sized (w-max) so the column stays compact Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nto tofik/people-2fa-source
The colored count (green done / amber partial / muted none) already carries the state; an 80px bar adds a second encoding of the same fact with barely perceptible differences. Rows are now clean label -> value pairs, keeping counts and badges on one vertical line. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- POST two-factor-source: catch Prisma P2025 from the org update (stale/ deleted org context) and return 404 like the controller's other org lookups, instead of a raw 500 - GET two-factor-statuses: a missing org row now 404s instead of being collapsed into the valid configured:false state Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…wo-factor-source A deleted/stale org has no connections, so the provider check fired first and returned 400 'not connected' instead of the endpoint's 404 contract. Check the org row up front; the P2025 catch now only covers a deletion racing the update. Regression test included. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(people): per-employee 2FA status from a selected integration source
…ping - '2FA source' and 'Sync source' labels above the two selects (a bare 'none'/'Google' select gave users no clue what it configures) - 2FA trigger shows a muted 'None' instead of the raw item value - Toolbar bottom-aligns (items-end) so labeled and unlabeled controls line up - Date chips get whitespace-nowrap so 'Any time' no longer wraps Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The empty state now renders the REAL structure — 'Sync people from' and '2FA status from' as labeled placeholder slots with a dashed Connect row deep-linking to Integrations — so users see exactly what can appear here instead of reading about it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Search + Filters (query) group left; Data sources (view configuration) sits alone on the right — the Linear/Stripe toolbar convention. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
style(people): Sync settings popover + toolbar layout per Linear/Stripe convention
Selects portaled outside their parent popover broke outside-click
dismissal: closing an open select left the popover needing two more
clicks to dismiss. Render SelectContent with portal={false} inside the
Sync settings and Filters popovers so the dismiss layering stays sane.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Items now show the integration logo (matching the sync select and the trigger); the clear option is a muted 'None'; the helper line is short. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
'Sync people from'/'2FA status from' -> 'People'/'2FA status' (the popover is already called Sync settings — key-value rows, no redundancy). Clear option is 'Don't show' (mirrors 'Don't auto-sync'); unset triggers read 'Not syncing'/'Not shown' instead of the technical 'None'. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ortals fix(people): popover dismissal + Sync settings polish
Inline (non-portaled) select dropdowns mis-position inside the popover and stretch the page width on mousedown. Restore the portal; the minor extra-click-to-dismiss quirk returns and needs a proper fix at the design-system layer instead. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ortals improvement(people): restore portaled dropdowns for in-popover selects
The people-sync select (uncontrolled) dismisses cleanly inside the popover; the 2FA select (controlled via SWR-backed value) re-rendered mid-dismissal and ate the popover's next outside click. Mirror the working pattern: no value prop, manual 'Active' marker on the selected item, and no focus-revalidation on the source hooks. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ortals fix(people): 2FA select now dismisses cleanly (match the sync select pattern)
Contributor
|
🎉 This PR is included in version 3.96.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
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.
This is an automated pull request to release the candidate branch into production, which will trigger a deployment.
It was created by the [Production PR] action.
Summary by cubic
Turned People task tracking into real table columns and added per-employee 2FA status from a selected integration. Polished the Sync settings popover with provider logos and clearer labels.
New Features
CheckResultsServiceand the new endpoints.Bug Fixes
Written for commit e7e276e. Summary will update on new commits.