Skip to content

[comp] Production Deploy#2795

Merged
Marfuen merged 6 commits intoreleasefrom
main
May 8, 2026
Merged

[comp] Production Deploy#2795
Marfuen merged 6 commits intoreleasefrom
main

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot commented May 7, 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

Adds PIPEDA and CCPA as first‑class frameworks, enables owner‑only device removal from the Devices tab, moves the policy acknowledgment digest to a weekly, batched email flow, and requires justification when marking evidence tasks as not relevant. Also updates the device security task seed to require a 15‑minute screen lock across platforms. (Aligns with Linear CS-343 and CS-333.)

  • New Features

    • Trust & frameworks: DB adds pipeda/ccpa booleans and pipeda_status/ccpa_status; API/portal accept and return these; UI shows new badges and portal toggles with certificate upload/preview.
    • Devices: New DELETE /v1/devices/:id (204) with owner check and 403/404 handling; Devices tab adds “Remove Device” menu with confirm, optimistic removal, and disabled state for non‑owners.
    • Email: New internal POST /v1/internal/email/send-batch and Trigger send-batch-email task using Resend batch API; policy acknowledgment digest pre‑renders HTML, groups by org, sends one batch per org weekly (Tuesdays 14:00 UTC), and includes per‑email unsubscribe headers.
    • Tasks: Adds Task.notRelevantJustification; bulk status update accepts notRelevantJustification and sets/clears it when moving to/from not_relevant; UI adds a justification dialog (and banner on task detail) for evidence tasks and supports bulk/single updates. OpenAPI updated.
  • Migration

    • Run prisma migrate deploy to apply new columns and enum values.
    • No breaking changes; new frameworks default to disabled with started status; justification is optional and only stored for not_relevant tasks.

Written for commit 2876232. Summary will update on new commits.

github-actions Bot and others added 2 commits May 7, 2026 16:25
CS-343 [New Framework] - PIPEDA, CS-333 [New Framework] - CCPA
@vercel
Copy link
Copy Markdown

vercel Bot commented May 7, 2026

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

Project Deployment Actions Updated (UTC)
app (staging) Ready Ready Preview, Comment May 8, 2026 9:22am
comp-framework-editor (staging) Ready Ready Preview, Comment May 8, 2026 9:22am
portal (staging) Ready Ready Preview, Comment May 8, 2026 9:22am

Request Review

Copy link
Copy Markdown
Contributor

@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 12 files

Confidence score: 4/5

  • This PR looks safe to merge with minimal risk; the reported issue is a localized JSX/SVG attribute naming cleanup rather than a functional logic defect.
  • The main concern is in apps/app/src/app/(app)/[orgId]/trust/portal-settings/components/logos.tsx: using kebab-case SVG props like stroke-width/stop-color can trigger React invalid DOM property warnings and reduce consistency/maintainability.
  • Because the issue is limited in scope (single component) and does not indicate a clear runtime break, the overall merge risk stays low.
  • Pay close attention to apps/app/src/app/(app)/[orgId]/trust/portal-settings/components/logos.tsx - update SVG props to camelCase (strokeWidth, stopColor) to avoid JSX/React property warnings.
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/logos.tsx">

<violation number="1" location="apps/app/src/app/(app)/[orgId]/trust/portal-settings/components/logos.tsx:962">
P2: Use camelCase SVG prop names in JSX (`strokeWidth`, `stopColor`) instead of kebab-case attributes.</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.

d="M2 108.258V3C2 2.44772 2.44772 2 3 2H113C113.552 2 114 2.44772 114 3V108.258C114 108.58 113.845 108.882 113.583 109.07L58.5834 148.581C58.2348 148.831 57.7652 148.831 57.4166 148.581L2.41657 109.07C2.15505 108.882 2 108.58 2 108.258Z"
fill="white"
stroke="url(#paint0_linear_92_63)"
stroke-width="4"
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot May 7, 2026

Choose a reason for hiding this comment

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

P2: Use camelCase SVG prop names in JSX (strokeWidth, stopColor) instead of kebab-case attributes.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/app/src/app/(app)/[orgId]/trust/portal-settings/components/logos.tsx, line 962:

<comment>Use camelCase SVG prop names in JSX (`strokeWidth`, `stopColor`) instead of kebab-case attributes.</comment>

<file context>
@@ -945,3 +945,201 @@ export const SOC3InProgress = (props: React.SVGProps<SVGSVGElement>) => (
+      d="M2 108.258V3C2 2.44772 2.44772 2 3 2H113C113.552 2 114 2.44772 114 3V108.258C114 108.58 113.845 108.882 113.583 109.07L58.5834 148.581C58.2348 148.831 57.7652 148.831 57.4166 148.581L2.41657 109.07C2.15505 108.882 2 108.58 2 108.258Z"
+      fill="white"
+      stroke="url(#paint0_linear_92_63)"
+      stroke-width="4"
+    />
+    <path
</file context>
Suggested change
stroke-width="4"
strokeWidth="4"
Fix with Cubic

* feat(app): add 'Remove Device' menu on Devices tab

* feat(api): define DELETE endpoint to remove single device agent

* feat(app): integrate remove-device endpoint on Devices tab

* fix(api): set permission to remove-device-agent endpoint

* fix(app): use people action hook for agent device removal

---------

Co-authored-by: chasprowebdev <chasgarciaprowebdev@gmail.com>
Co-authored-by: chasprowebdev <70908289+chasprowebdev@users.noreply.github.com>
…2797)

The device agent already enforces 15 minutes across macOS, Linux, and
Windows — the seed description still said 5 minutes for macOS.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…kly (#2796)

* chore(trigger): change policy acknowledgment digest from daily to weekly

Reduces email frequency for policy signature reminders from daily to
weekly (Mondays at 14:00 UTC) to avoid notification fatigue.

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

* chore(trigger): run policy acknowledgment digest on Tuesdays

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

* feat(email): use Resend batch API for policy acknowledgment digest

Adds a new `send-batch-email` Trigger.dev task that calls
`resend.batch.send()` (up to 100 emails per API call) with permissive
validation for partial-failure reporting.

- New API endpoint `POST /v1/internal/email/send-batch`
- New `sendBatchEmailViaApi` helper for app-side Trigger tasks
- Digest task now renders HTML upfront, groups by org, and sends
  one batch request per org instead of one HTTP call per recipient
- Unsubscribe headers included per-email in the batch payload

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

* fix(email): address batch email edge cases from review

- Guard against missing FROM address env vars (throw early instead of
  sending empty string)
- Fix totalSent metric: data.data only contains successes, so don't
  decrement for permissive-mode errors
- Wrap per-recipient render() in try/catch so one bad template doesn't
  abort the entire digest run
- Validate `to` field as email address in batch DTO

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

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel vercel Bot temporarily deployed to staging – portal May 8, 2026 09:17 Inactive
…evant (#2798)

Adds a required justification flow when marking evidence tasks as "not
relevant" so auditors can review why a task was excluded. Shows a
confirmation dialog with a textarea, stores the reason on the task, and
displays a banner on the task detail page.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@claudfuen
Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.47.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