Skip to content

[comp] Production Deploy#2572

Merged
Marfuen merged 5 commits intoreleasefrom
main
Apr 16, 2026
Merged

[comp] Production Deploy#2572
Marfuen merged 5 commits intoreleasefrom
main

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions bot commented Apr 16, 2026

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

Improve custom domain verification by trusting Vercel as the source of truth and surfacing misconfiguration plus the exact recommended CNAME in the UI. Add People‑scope findings across the app with scoped creation/listing, notifications, and deep links that sync with the People page ?tab=.

  • New Features

    • People‑scoped findings: create via scope, list with ?scope=, and notify org owners/admins; titles/links prefer scope and deep‑link to /people?tab=….
    • New People Findings panels on People, Tasks, Devices, and Org Chart; People tabs now sync with ?tab=.
    • Domain verification uses Vercel /config and /verify; status returns misconfigured + cnameTarget; DNS check returns vercelMisconfigured + recommendedCNAME; UI shows Vercel’s exact CNAME, warns when misconfigured, and disables copy when unknown.
    • Evidence uploads: choose meeting type before uploading; Select renders correctly inside the dialog.
  • Bug Fixes

    • Prevent de‑verifying working domains by treating Vercel outages as transient and only persisting definitive failures; trust Vercel’s misconfigured flag regardless of DNS record type.
    • Fixed People page routing and findings links (?tab=), and improved CNAME detection with Vercel fallback patterns.

Written for commit 3f4faf2. Summary will update on new commits.

@vercel
Copy link
Copy Markdown

vercel bot commented Apr 16, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
app (staging) Ready Ready Preview, Comment Apr 16, 2026 7:57pm
comp-framework-editor Canceled Canceled Apr 16, 2026 7:57pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
portal (staging) Skipped Skipped Apr 16, 2026 7:57pm

Request Review

github-actions bot and others added 2 commits April 16, 2026 15:28
* feat(db): add scope column to Finding table

* feat(app): create finding with new scope

* feat(app): add Findings section on People tab

* feat(app): add Findings on People/Tasks tab

* fix(docs): update doc

* feat(app): add Findings on People/Devices tab

* feat(app): add Findings on People/Chart tab

* fix(app): update finding title on Findings overview

* feat(app): sync people page tabs with URL hashes

* fix(api): correct finding notifications for People scope findings

* fix(api): resolve scope finding notification recipients to owners/admins

* fix(api): align finding notification deep links with context title precedence

* fix(app): preserve #finding- hash on People page tab sync

* fix(app): fix finding redirect issue on FindingsOverview

* fix(app): fix hash cleanup issue on PeopleFindingsList

* fix(api): fix people page url with tab

* fix(app): use tab param on people page instead of hash

* fix(app): remove hash-related code from PeopleFindingsList

* fix(app): minor change - remove empty line

* fix(app): remove Findings on People tabs and add new Findings tab on People

* fix(app): add Scope select on 'Create Finding' sheet

* fix(api): add hasScope param to findings api endpoint

* fix(app): show all people-scope findings on People

* fix(api): update deep link for people findings on finding notifier

* fix(app): update deep link for people findings on overview

* fix(app): remove unused line

* fix(app): add scope filter on People Findings UI

* fix(db): update folder of add_finding script

* fix(app): empty commit

* fix(app): update test mock labels to match actual implementation values

* fix(app): sync people tabs with search params

* fix(api): include finding scope in deletion audit log

* fix(app): pluralize 'require action' for open findings count

* fix(api): remove hasScope param from findings endpoint

* fix(app): adding findings section on People page tabs

* fix(api): update test payload in finding-notifier service

---------

Co-authored-by: chasprowebdev <chasgarciaprowebdev@gmail.com>
Co-authored-by: Mariano Fuentes <marfuen98@gmail.com>
Co-authored-by: Lewis Carhart <lewis@trycomp.ai>
Co-authored-by: Tofik Hasanov <72318342+tofikwest@users.noreply.github.com>
Co-authored-by: chasprowebdev <chasgarciaprowebdev@gmail.com>
Co-authored-by: chasprowebdev <70908289+chasprowebdev@users.noreply.github.com>
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 10 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="apps/app/src/app/(app)/[orgId]/trust/portal-settings/components/TrustPortalDomain.tsx">

<violation number="1" location="apps/app/src/app/(app)/[orgId]/trust/portal-settings/components/TrustPortalDomain.tsx:97">
P2: `domainStatusLoading` cannot distinguish between "still loading" and "errored" — both leave `domainStatus` as `undefined`. After a failed request the user permanently sees "Loading from Vercel…" instead of the "Unavailable" fallback.

Destructure `error` (or `isLoading`) from `useDomain` and use that to set the loading flag accurately.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 24 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="apps/api/src/findings/finding-notifier.service.spec.ts">

<violation number="1" location="apps/api/src/findings/finding-notifier.service.spec.ts:227">
P2: Expect the devices tab for `FindingScope.people_devices`; `?tab=people` is the wrong URL.</violation>

<violation number="2" location="apps/api/src/findings/finding-notifier.service.spec.ts:248">
P2: Expect the People tab for `FindingScope.people`; this assertion uses the wrong tab.</violation>
</file>

<file name="apps/app/src/app/(app)/[orgId]/people/all/components/PeopleFindingsList.test.tsx">

<violation number="1" location="apps/app/src/app/(app)/[orgId]/people/all/components/PeopleFindingsList.test.tsx:18">
P1: Move the shared fakes used by these `vi.mock` factories into `vi.hoisted` (or define them inside the factories); hoisted `vi.mock` cannot close over these top-level variables.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review, or fix all with cubic.

Comment thread apps/api/src/findings/finding-notifier.service.spec.ts
Comment thread apps/api/src/findings/finding-notifier.service.spec.ts
…ation

* fix(trust-portal): trust Vercel verdict for custom domain DNS verification

The custom-domain DNS check was marking a domain as verified based on our own
regex matching of the CNAME target, ignoring Vercel's own verdict. This let
users add a CNAME pointing to the legacy `cname.vercel-dns.com` (or any
`*.vercel-dns*.com` target) and see a green check in our UI even when
Vercel's project required a unique dedicated target and rejected the domain
as "Invalid Configuration".

The UI also fell back to displaying `cname.vercel-dns.com` as the recommended
CNAME whenever Vercel's `/v6/domains/{d}/config` call failed, effectively
guessing a value Vercel no longer accepts for new projects.

Changes:
- Extract a pure `decideDomainVerification` + `deriveCnameVerified` module
  with 16 unit tests covering same-account, cross-account, config-failure,
  and Vercel-not-configured scenarios.
- `checkDnsRecords` now fetches `/v6/domains/{d}/config` in parallel with
  the status call and uses `configuredBy === 'CNAME' && !misconfigured` as
  the CNAME verdict. DNS regex is only a fallback when Vercel is unreachable.
- Return `vercelMisconfigured` and `recommendedCNAME` from the check-dns
  endpoint so the UI can show Vercel's view and the exact expected target.
- `getDomainStatus` DTO gains a `misconfigured` field.
- Remove `DEFAULT_CNAME_TARGET` guess from the frontend. When the target is
  not yet known the UI now shows "Loading from Vercel…" and disables the
  copy button rather than prompting the user to copy a stale default.
- Add a warning alert when Vercel reports the domain as still misconfigured,
  showing the exact recommended CNAME value.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(trust-portal): never de-verify a working domain on transient Vercel errors

`decideDomainVerification` now distinguishes confident failures (DNS wrong,
Vercel explicitly reports misconfigured=true) from transient ones (Vercel
API unreachable, no verdict available). `checkDnsRecords` only writes
`domainVerified=false` on confident failures, preserving the prior
verification state when the failure is transient.

Prevents a temporary Vercel outage from silently breaking a customer's
already-working custom domain.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(trust-portal): trust Vercel's misconfigured flag regardless of DNS record type

Previously required `configuredBy === 'CNAME' && !misconfigured` to accept a
domain as verified. That filter blocked apex domains (which need A records)
and any other valid Vercel-accepted configuration (ALIAS, A, etc.) even
when Vercel itself reported the domain as working.

Vercel hosts these domains, so if Vercel says `misconfigured: false` the
domain is reachable — the DNS method used to get there doesn't matter.

Rename `deriveCnameVerified` → `deriveDnsVerified` to reflect that the
function now tracks "DNS points at Vercel correctly" rather than "a CNAME
specifically was used".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(trust-portal): correctly distinguish loading from errored domain status

`!!initialDomain && !domainStatus` was true for both SWR states — the
initial fetch AND a failed request — so a failed Vercel status request left
the UI stuck on "Loading from Vercel…" forever instead of surfacing the
"Unavailable — refresh to retry" fallback.

Use SWR's `isLoading` flag directly so the loading message only shows
during the actual initial fetch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Mariano Fuentes <marfuen98@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel vercel bot temporarily deployed to staging – portal April 16, 2026 19:49 Inactive
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0 issues found across 1 file (changes from recent commits).

Requires human review: Auto-approval blocked by 1 unresolved issue from previous reviews.

@Marfuen Marfuen merged commit bd25f41 into release Apr 16, 2026
12 of 14 checks passed
@claudfuen
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.23.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants