Skip to content

[comp] Production Deploy#3001

Merged
tofikwest merged 54 commits into
releasefrom
main
Jun 3, 2026
Merged

[comp] Production Deploy#3001
tofikwest merged 54 commits into
releasefrom
main

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

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

Expose AWS, GCP, and Azure services as evidence integrations mapped to tasks, add a per‑service page linking checks to the tasks they satisfy, hide tasks not added to the org, align service‑card evidence counts with org tasks, refresh OAuth tokens during checks, and enrich evidence details across all outcomes.

  • New Features

    • 24 cloud checks (AWS 8, Azure 11, GCP 5) mapped to evidence tasks and tagged per service.
    • API returns per‑service mappedTasks on IntegrationProviderResponse.services.
    • New per‑service page with Cloud Tests status (RBAC‑gated) and evidence task links; service cards link to it and show task counts that reflect tasks present in the org (fallback to total mapped when org tasks are unknown).
    • Hide evidence tasks not added to the org; shared EvidenceTaskRow, loadIntegrationPageData, and task‑template mapping with clear loading/error states.
  • Bug Fixes

    • Fail‑closed on unreadable data across checks; emit “could not verify” instead of silent passes.
    • Correctness: IPv6 (::/0), port‑range parsing, CloudTrail logging status, Aurora cluster backups/encryption, KMS rotation eligibility, S3 public access/encryption (bucket + account BPA), Azure/GCP read paths.
    • Hardening: pagination and discovery guardrails, region/project‑scoped resource IDs, and a manifest integrity test ensuring all checks are tagged to real services.
    • Manual “Run” preserves array credential fields (e.g., AWS regions); controllers pass decrypted credentials unchanged; runtime types accept string | string[] (removed the flattener).
    • AWS evidence checks assume customer roles via a two‑hop roleAssumer chain (matches Cloud Tests); requires SECURITY_HUB_ROLE_ASSUMER_ARN.
    • Service card evidence count matches the detail (counts only added tasks; hides when none; falls back to total mapped when templates aren’t loaded).
    • Integration config dropdowns stay clickable and positioned correctly inside the modal via portaled content with pointerEvents: 'auto'.
    • Evidence: every check outcome now includes the determining value (proof/reason) so “View Evidence” is meaningful; Azure diagnostic‑export evidence is gated on enabled log categories to reflect actual exports.
    • OAuth: refresh tokens during check runs and syncs; pass scope and provider tokenParams to refresh/get‑token; guard reserved refresh params; new ensure‑valid‑credentials trigger with a 30‑second timeout to avoid hanging calls.

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

Review in cubic

tofikwest and others added 23 commits June 1, 2026 16:20
…Azure/AWS)

Surface AWS/GCP/Azure cloud-posture services as integration-platform
integrations whose checks satisfy evidence tasks — a separate feature from
Cloud Tests, which is left untouched.

- 24 code-based manifest checks (GCP 5, Azure 11, AWS 8), each mapped to an
  evidence task; AWS checks assume the cross-account IAM role (STS) and use the
  AWS SDK, with the security logic in pure, unit-tested evaluators
- per-service mappedTasks added to both provider API projections
  (buildServiceTaskMappings) + IntegrationProviderResponse.services type
- per-service detail page: Cloud Tests scan toggle on top, "evidence provided"
  map linking to the tasks each service satisfies; cloud detail-page service
  rows navigate to it (status + task count, no inline toggle)

Cloud Tests (apps/api/src/cloud-security + cloud-tests UI) is unchanged.

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

Independently verified all 37 cubic-dev-ai findings (30 real, 7 false
positives) and fixed the 30 real ones. Highlights:

- False pass / missed exposure: Azure SQL minimalTlsVersion 'None'; GCP firewall
  evaluating only the first TCP tuple; IPv6 (::/0) missed by AWS EC2 + GCP VPC +
  Azure NSG; Azure NSG port-range parsing; Azure SQL firewall-read errors no
  longer coerced to a clean pass; Azure storage/key-vault honor
  publicNetworkAccess=Disabled; AWS S3 unions account-level Block Public Access;
  AWS KMS only evaluates rotation-eligible (symmetric/AWS_KMS) keys; Azure Entra
  detects dataActions wildcards + permission-based privileged roles; Azure
  monitor requires enabled log categories and fails on unreadable alerts.
- Robustness: pagination for GCP storage/vpc/cloud-sql lists; GCP IAM pass
  scoped to direct project bindings; GCP Cloud SQL replicas skipped; discovery
  errors surfaced via ctx.warn; AWS S3 followRegionRedirects; root-key wording;
  per-service toggle gated on manageable services; task-fetch error state; a
  shared task-template helper (dedup).

Adds @aws-sdk/client-s3-control. +7 regression tests (146 package tests pass).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ings' into worktree-cloud-posture-task-mappings
Verified all 10 follow-up findings and fixed them:
- AWS CloudTrail: require GetTrailStatus.IsLogging (a multi-region+validated
  trail can be stopped → was a false pass)
- AWS S3 encryption: distinguish "no encryption configured" from read errors;
  indeterminate buckets are excluded instead of failed
- Azure ARM pagination: validate nextLink stays on the ARM host before
  following (don't send the bearer token to an unexpected host)
- GCP IAM: evaluate inherited folder/org bindings (ancestry walk); only emit a
  pass when the full hierarchy was readable and clean
- GCP Cloud SQL SSL: sslMode takes precedence over legacy requireSsl
- Azure NSG: only flag SSH/RDP/DB on TCP/any-protocol rules
- AWS region parsing rejects blank strings; IAM no-policy detection broadened
- ServiceCard shows "Always scanned" (not "Scanning off") for baseline services
- ServiceDetailView validates the URL connectionId against the provider's
  connections before using it

+ regression tests. 149 package tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…IPv6 wording

- AWS KMS: wrap DescribeKey in try/catch so one unreadable key is skipped
  instead of aborting the entire rotation scan
- AWS RDS: skip Aurora instances in the backups check — Aurora backups are
  cluster-level and the instance BackupRetentionPeriod is unreliable, so
  coercing it to 0 was a false "backups disabled" finding
- GCP VPC: failure description + remediation now reference the actual open
  public range(s) (0.0.0.0/0 and/or ::/0) instead of hardcoded IPv4

+ regression tests (Aurora skip). 149 package tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Backend checks — apply cross-cutting correctness patterns uniformly:
- error-reads-never-silent-pass: Azure monitor/sql now FAIL (not silently
  pass) when diagnostic-settings, SQL auditing, or firewall reads error;
  s3 BPA read errors mark public-access indeterminate instead of "missing";
  entra-id emits "could not verify" when role definitions can't be resolved.
- per-project resilience (GCP): cloud-sql-backups/ssl, storage, vpc, iam
  wrap each project in try/catch so one project's API error no longer aborts
  the whole check; project-scoped resourceIds (`${projectId}/${name}`) so
  same-named resources across projects don't collide.
- AWS Aurora evaluated at CLUSTER level (DescribeDBClusters) for encryption
  and backups; Aurora instances excluded from instance-level checks (no more
  false failures).
- protocol gating: EC2/Azure-NSG only flag SSH/RDP/DB on TCP/any-protocol;
  all-ports detection now matches explicit full ranges (0-65535), not just '*'.
- CloudTrail scans all selected regions (dedupe by ARN) and treats an
  unreadable GetTrailStatus as unknown, not a false "not logging" failure.
- GCP storage: drop the publicAccessPrevention='inherited' false-positive
  (org policy may enforce it); keep uniform-bucket-level-access signal.
- VPC firewall check honestly scopes itself to VPC rules (records
  firewallPoliciesEvaluated:false) rather than over-claiming.
- input hygiene: trim Azure subscription_id; sanitize GCP project_ids with
  fallback to discovery; warn on pagination page-cap truncation.
- entra-id: permission-based privileged-role classification (role-name set is
  fallback only); broader wildcard-action detection; resolve cross-scope role
  definitions so privileged principals aren't undercounted.

Frontend:
- scan-status no longer shows "Always scanned" before live data loads or on
  fetch error — shows Checking…/Status unavailable; baseline (non-manageable)
  services never render as "scanning off".
- surface connection-fetch errors instead of swallowing them as an empty list.
- shared EvidenceTaskRow + loadIntegrationPageData remove the duplicated row
  markup and data-loading between the provider and per-service pages.

Tests: +6 regressions (RDS cluster evaluators, NSG all-ports range, UDP not
flagged as SSH, CloudTrail unknown-status, GCP PAP-inherited). 156 pass.

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

Proactive hardening from an adversarial audit of every cloud check file —
applies the same patterns cubic established (per-item resilience, fail-closed
on unverified reads, scoped resourceIds, no silent truncation) to the files it
hadn't deep-reviewed, so they don't surface as the next review round:

- AWS EC2 + RDS: wrap each region in try/catch so one opted-out / restricted /
  throttled region no longer aborts the whole scan (matches the GCP per-project
  fix). RDS instance/cluster resourceIds are now region-scoped
  (`${region}/${id}`) — RDS identifiers are user-chosen and only unique per
  region, so same-named DBs across regions previously collided.
- AWS CloudTrail: an otherwise-compliant trail whose GetTrailStatus can't be
  read now emits a "could not verify" failure instead of nothing — consistent
  with the error-reads-never-silent-pass rule applied to Azure monitor/sql/
  entra-id; an unverified control must not be recorded as satisfied.
- GCP project auto-discovery: paginate via nextPageToken (bounded, warns at the
  cap) instead of evaluating only the first 50 projects and silently dropping
  the rest, which would yield false "all clean" evidence for unscanned projects.

Audit confirmed the remaining candidates were already handled (gcpListItems
paginates + warns; Azure SSE is always-on; diagnosticSettings don't paginate;
NSG loop has no per-item I/O). Tests: +1 discovery-pagination regression, +1
cloudtrail unverified-status regression updated. 157 pass.

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

- GCP Cloud Storage public-access: uniform bucket-level access alone does NOT
  prevent public access — a bucket is public if its IAM policy grants
  allUsers/allAuthenticatedUsers. Now reads each bucket's IAM policy:
  publicAccessPrevention 'enforced' passes definitively (no IAM read); a public
  IAM member fails (high); an unreadable policy fails "could not verify" (never
  a silent pass); UBLA-disabled remains a medium finding (object ACLs can't be
  verified from the bucket policy). Keeps the round-4 fix of not failing on
  publicAccessPrevention 'inherited' alone.
- AWS EC2 + RDS: a per-region read failure was logged but swallowed, so a total
  (or partial) read failure could end with no findings — a silent clean run.
  Now each failed region is surfaced as a medium "could not verify" failure
  (EC2 inline; RDS via failUnverifiedRegions over both instance and cluster
  scans), consistent with the error-reads-never-silent-pass rule. session.regions
  is the customer-configured region set, so this only fires on genuine failures.

Tests: +3 storage regressions (allUsers→fail high, PAP-enforced→pass without IAM
read, IAM-read-error→could-not-verify); discovery test updated for per-bucket
resourceId. 160 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ings' into worktree-cloud-posture-task-mappings
… of 5)

Reviewed the 5 findings from cubic's review of the merge commit; fixed the 4
genuine ones (the 5th is a deliberate design choice, see below):

- GCP project auto-discovery (P1): dropped the org/parent filter. A `parent.id`
  filter without `parent.type` is ambiguous AND silently excludes folder-nested
  projects — both drop projects that should be scanned. Now lists every active
  accessible project (lifecycleState:ACTIVE), paginated; users scope via
  project_ids. Removes the org-search round-trip entirely.
- AWS S3 (P2): indeterminate buckets (encryption / Block-Public-Access read
  failed) were filtered out, so an all-unreadable account passed with no
  findings. Both evaluators now emit a medium "could not verify" per
  indeterminate bucket instead of dropping it — consistent with the
  error-reads-never-silent-pass rule used for EC2/RDS/CloudTrail.
- Azure subscription auto-detect (P2): no longer falls back to the first
  subscription regardless of state (could be Disabled/PastDue → failing calls);
  selects an Enabled subscription or returns null so the check no-ops cleanly.
- ServiceCard (P2): URL-encode the dynamic path/query segments of the service
  detail link.

Deferred (P3): the AWS STS assume-role "duplication" — the cited helper
(aws/helpers/aws-client.ts) is pre-existing, used by no check, and returns
pre-built service clients with a legacy access-key branch; the per-region
checks intentionally use their own raw-credential helper. Coupling them would
be worse, and independent copies are the agreed design.

Tests: +1 S3 all-indeterminate regression; encryption test updated. 161 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-error states)

- ServiceDetailView (P2, security): the Cloud Tests scanning toggle had no RBAC
  gate, so a view-only user could flip a setting the API restricts to
  integration:update. Now gated with usePermissions().hasPermission('integration',
  'update') — users without it see a read-only "Scanning on/off" status; the
  toggle handler also early-returns without the permission.
- ServiceDetailView (P2, UX): status showed "Checking…" forever when the
  provider has no active connection (null connectionId was treated as loading).
  Added an explicit "Not connected" state and split loading/error/baseline.
- AWS KMS (P1): the rotation check returned with no findings when rotation
  status was unreadable for all eligible keys — masking a permission gap as a
  clean run. Now each eligible key emits an outcome; unreadable status →
  medium "could not verify". Only no-ops when there are no eligible keys.
- AWS CloudTrail (P1): a failed DescribeTrails in every region produced an
  empty trail list, which evaluated to a false high "No CloudTrail configured".
  Now tracks failed regions and, when no trails were found AND a region failed,
  reports a medium "could not verify" instead of a fabricated finding.

Tests: KMS test updated + all-unreadable regression; +1 KMS regression. 162 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ings' into worktree-cloud-posture-task-mappings
…alse verdict

Adversarial sweep of every check run()/helper against the verified engine
contract (an uncaught throw → status 'error' → task 'failed' [visible]; a run
that emits NO outcomes → task status UNCHANGED [silent/stale]). Fixes the real
silent-pass paths and converts read-error aborts into explicit "could not
verify" findings so a permission/transient failure can never read as compliant:

GCP (the genuine silent passes — per-project catch emitted ctx.warn + skipped,
so an all-projects-failed run left the task stale):
- vpc-open-firewalls, storage-public-access, cloud-sql-backups, cloud-sql-ssl,
  iam-primitive-roles: per-project catch now emits a project-scoped "could not
  verify" ctx.fail instead of warn-and-continue.

AWS:
- New resolveAwsSessionOrFail() wraps STS AssumeRole: an assume-role failure
  now emits "could not assume AWS role" (could-not-verify) instead of aborting;
  wired into all 6 AWS checks.
- Top-level list reads that previously threw uncaught now surface could-not-
  verify: iam GetAccountSummary, kms ListKeys (per region), s3 ListBuckets
  (both checks). kms DescribeKey failures already tracked as unreadable.

Azure:
- New armListAllOrFail() emits "could not verify <resource>" (and returns null)
  when the primary ARM list throws; wired into storage (×3), sql (×3),
  key-vault, network, and entra-id (role assignments + definitions). Each
  caller now guards on null and stops rather than aborting the check.

Tests: +2 GCP regressions (storage/vpc project-read failure → could not verify,
not a silent pass). 164 pass. Build clean.

Pre-existing (NOT changed here — flagged separately, out of this PR's scope):
GcpProjectPicker RBAC gate, ActivitySection/provider.id URL encoding — they
live in pre-existing cloud-tests components this PR does not modify.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- IAM: split evaluateIamAccount into evaluatePasswordPolicy + evaluateAccountSummary.
  run() now emits the password-policy findings BEFORE the account-summary read, so
  a GetAccountSummary failure surfaces "could not verify" without discarding the
  already-obtained password-policy findings (independent evaluations).
- KMS: the "Could not verify KMS keys" finding now reports ListKeys (region) and
  DescribeKey (key) failures distinctly, and the remediation includes kms:ListKeys.
  Previously all entries were attributed to "DescribeKey failed".

Tests: +1 IAM regression (password-policy evaluation stands alone). 165 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…il region, tag per-service checks

Addresses the cubic review of 63dab6d (and the prior d59e4c7 review).

- gcp/iam-primitive-roles: a project whose own getIamPolicy read failed was
  silently skipped (getBindings swallows the throw → null → `continue` with no
  outcome), leaving the RBAC task stale-passing. Now fails closed with a "could
  not verify" finding via a shared helper (reused by the outer per-project
  catch). Real P1 (identified by cubic).
- aws/cloudtrail: query GetTrailStatus against the trail's home region instead
  of the scan-region client. Hardening — the ARN-based read works cross-region
  per AWS shadow-trail docs (and Prowler), and a failure was already caught as a
  safe "could not verify"; home-region removes the ambiguity. (cubic finding;
  the stated false-failure does not occur, but home-region is unambiguously
  correct.)
- connections per-service task counts: buildServiceTaskMappings groups checks by
  `service` === serviceId, but Vercel/Aikido/Google-Workspace checks were
  untagged, so their service cards showed 0 evidence tasks. Tag those 7 checks
  with their service id (every other multi-service provider already tags its
  checks). Real P2 (identified by cubic).
- Add a manifest-integrity test: every check in a service-defining manifest must
  be tagged with a real service id (prevents this regression recurring), plus a
  GCP regression test for the project-policy read failure.

cubic's page.tsx connectionId finding is a false positive — ServiceDetailView
already validates the URL id against the provider's connections and falls back
to the active connection.

203 package tests pass; tsc build clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ac wildcard scan

Addresses the cubic review of cdde662.

- azure/entra-id (rbacLeastPrivilegeCheck): the wildcard custom-role scan only
  iterated the subscription-scope `definitions` list, so a wildcard CustomRole
  defined at a management-group/resource-group scope and assigned into the
  subscription was missed — the privileged-assignment path already resolves
  those out-of-scope defs (resolvedDefs) but the wildcard path ignored them.
  Worst case: a role whose wildcard is a mid-path/dataActions-only action (not
  high-privilege) is missed by BOTH paths. Now scans the union of `definitions`
  + `resolvedDefs` (deduped by id). Real P2 (identified by cubic).
- Add regression tests: MG-scoped wildcard role flagged; SQL firewall read
  failure fails closed with a medium "Could not read SQL firewall rules" (guards
  the earlier false-pass finding); off-host nextLink is not followed (guards the
  earlier bearer-token-exposure finding).

Verified NOT bugs / dismissed (with evidence):
- gcp/shared.ts empty project_ids: cubic applied the cloud-security convention
  ([]=scan nothing) to integration-platform, where the convention is the
  opposite ("leave empty = check all"); honoring [] here would create the exact
  silent stale-pass the engine contract forbids. Left as-is.
- aws/shared.ts STS "duplication" (P3): the existing createAWSClients helper is
  dead code (no callers), architecturally unfit for reuse, and reusing it would
  regress the engine-contract-compliant error handling. Left as-is.
- page.tsx connectionId, azure sql firewall->[], azure nextLink token exposure,
  ipv6 ::/0 across gcp/aws/azure, azure monitor partial-eval: all already fixed
  in current code (re-verified).

206 package tests pass; tsc build clean.

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

feat(integrations): cloud services (AWS/GCP/Azure) as evidence integrations
@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 3, 2026

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

Project Deployment Actions Updated (UTC)
comp-framework-editor (staging) Ready Ready Preview, Comment Jun 3, 2026 5:38am
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
app (staging) Skipped Skipped Jun 3, 2026 5:38am
portal (staging) Skipped Skipped Jun 3, 2026 5:38am

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.

3 issues found across 51 files

Confidence score: 2/5

  • There is a high-confidence security concern in packages/integration-platform/src/manifests/azure/checks/shared.ts: armListAll validates nextLink but not the initial url, which can weaken SSRF/token-leakage protections on the first fetch.
  • packages/integration-platform/src/manifests/aws/checks/s3.ts has concrete user-impact risk: account-level S3 BPA read failures may be reported as high-severity bucket failures instead of an unverified state, which can mislead operators.
  • apps/app/src/app/(app)/[orgId]/integrations/[slug]/page.tsx drops tasksErrored, so task-load errors can appear as “Not added,” reducing UI accuracy during failures.
  • Pay close attention to packages/integration-platform/src/manifests/azure/checks/shared.ts, packages/integration-platform/src/manifests/aws/checks/s3.ts, apps/app/src/app/(app)/[orgId]/integrations/[slug]/page.tsx - security validation parity, failure-state classification, and error-state rendering need verification before merge.
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]/integrations/[slug]/page.tsx">

<violation number="1" location="apps/app/src/app/(app)/[orgId]/integrations/[slug]/page.tsx:18">
P2: Provider detail page drops `tasksErrored`, causing task-load failures to be misreported as “Not added.”</violation>
</file>

<file name="packages/integration-platform/src/manifests/azure/checks/shared.ts">

<violation number="1" location="packages/integration-platform/src/manifests/azure/checks/shared.ts:46">
P1: Initial `url` in `armListAll` is not validated as an ARM URL before the first fetch, while `nextLink` is. The same SSRF/token-leakage protection should apply to the initial request.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

let nextUrl: string | undefined = url;
let pages = 0;
while (nextUrl && pages < 50) {
const data: { value?: T[]; nextLink?: string } = await ctx.fetch(nextUrl);
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Jun 3, 2026

Choose a reason for hiding this comment

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

P1: Initial url in armListAll is not validated as an ARM URL before the first fetch, while nextLink is. The same SSRF/token-leakage protection should apply to the initial request.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/integration-platform/src/manifests/azure/checks/shared.ts, line 46:

<comment>Initial `url` in `armListAll` is not validated as an ARM URL before the first fetch, while `nextLink` is. The same SSRF/token-leakage protection should apply to the initial request.</comment>

<file context>
@@ -0,0 +1,96 @@
+  let nextUrl: string | undefined = url;
+  let pages = 0;
+  while (nextUrl && pages < 50) {
+    const data: { value?: T[]; nextLink?: string } = await ctx.fetch(nextUrl);
+    if (Array.isArray(data.value)) out.push(...data.value);
+    nextUrl = data.nextLink;
</file context>
Fix with cubic

Comment thread packages/integration-platform/src/manifests/aws/checks/s3.ts
serverApi.get<ConnectionListItemResponse[]>('/v1/integrations/connections'),
serverApi.get<TaskApiResponse>('/v1/tasks'),
]);
const { provider, providerErrored, connections, taskTemplates } =
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Jun 3, 2026

Choose a reason for hiding this comment

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

P2: Provider detail page drops tasksErrored, causing task-load failures to be misreported as “Not added.”

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]/integrations/[slug]/page.tsx, line 18:

<comment>Provider detail page drops `tasksErrored`, causing task-load failures to be misreported as “Not added.”</comment>

<file context>
@@ -28,28 +15,13 @@ export default async function ProviderDetailPage({ params, searchParams }: PageP
-    serverApi.get<ConnectionListItemResponse[]>('/v1/integrations/connections'),
-    serverApi.get<TaskApiResponse>('/v1/tasks'),
-  ]);
+  const { provider, providerErrored, connections, taskTemplates } =
+    await loadIntegrationPageData(slug, { sortTasks: true });
 
</file context>
Fix with cubic

tofikwest and others added 2 commits June 2, 2026 23:39
… not portal={false}

portal={false} fixed the insta-close but mis-positioned the popup to the
bottom-right corner: rendering inline put its `position: fixed` inside the Radix
DialogContent, which is centered with a CSS transform — and a transformed
ancestor becomes the containing block for fixed descendants.

Root mechanism: Radix's dismissable-layer sets `body { pointer-events: none }`
for modal dialogs. The DS Select popup portals to body, inherits none, so its
mouseup passes through and base-ui cancels the open ("insta-closes").

Keep the popup portaled (so it stays anchored to the trigger) and set
`style={{ pointerEvents: 'auto' }}` on it so it's clickable despite the body
lock. Harmless in the DS Sheet consumer (AccountSettingsSheet), which doesn't
lock body pointer-events. Updates the regression test accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…n-position

fix(integrations): anchor config dropdown to its field (follow-up to #3005)
tofikwest and others added 4 commits June 2, 2026 23:53
…k outcomes

The AWS IAM check showed pass/fail rows with no "View Evidence" expander because
several outcomes attached no evidence. The frontend (TaskIntegrationChecks)
already renders "View Evidence" for any outcome with a non-empty evidence
object, so the gap was purely in the checks.

Audited evidence coverage across all checks: GCP, Azure, and AWS s3/ec2/rds/kms
already attach evidence to every outcome. Only iam.ts (5 of 8 outcomes) and one
cloudtrail.ts outcome were missing it.

Attach meaningful evidence:
- iam: "No IAM password policy" -> { passwordPolicyConfigured: false }; root MFA
  enabled/disabled -> { accountMFAEnabled }; root access keys present/absent ->
  { accountAccessKeysPresent }. (Weak/strong password policy already included the
  policy object.)
- cloudtrail: "No CloudTrail configured" -> { trailsFound: 0 }.

Add tests asserting every IAM password-policy and root-summary outcome, plus the
"No CloudTrail configured" outcome, carry non-empty evidence so the UI shows
"View Evidence". 214 package tests pass; build clean.

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

fix(app): keep integration check dropdowns open
tofikwest and others added 6 commits June 3, 2026 00:24
… on every check outcome

Comprehensive evidence-quality pass across all providers. Previously many
outcomes attached only a resource id (e.g. KMS { keyId, region }, Azure passes
with just an account/vault name) — present but THIN: an auditor couldn't see the
value that drove the pass/fail. One Azure monitor fail had empty evidence {}.

Audited every outcome in every check against: evidence must show (1) the
resource/scope AND (2) the value that determined the verdict. Enriched the thin
ones (proof for passes, the offending value for fails):
- AWS: s3 (encrypted, BPA flags), ec2 (offending protocol/cidrs/ports), rds
  (encrypted, backupRetentionDays), kms (rotationEnabled), cloudtrail
  (multiRegion/logging/logValidation per trail).
- GCP: cloud-sql (backupsEnabled, sslMode/requireSsl), storage (publicMembers,
  uniformBucketLevelAccess), iam-primitive-roles (scopesEvaluated, count).
- Azure: entra-id (threshold, principal ids/types, wildcard actions), storage
  (https/tls/public/encryption flags), sql (publicNetworkAccess, reason,
  firewallRuleCount, auditing state), key-vault (softDelete/purge/rbac flags),
  network (exposure/sources/ports/protocol, rules evaluated), monitor
  (configured vs recommended ops, export destinations, settings count).

GCP/Azure/AWS s3/ec2/rds/kms were already 100% present; this makes the CONTENT
meaningful. Build clean; 215 package tests pass (added determining-value
assertions for S3 encryption + KMS rotation; the IAM/CloudTrail evidence
regression tests remain).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…h enabled logs

Addresses the cubic review of #3011. The "Diagnostic log export configured"
evidence flagged exportsToLogAnalytics/Storage/EventHub on destination presence
across all settings, but the pass verdict (hasExport) requires a destination AND
an enabled log category. So a setting with a destination but disabled logs could
make the evidence claim that destination exports when it doesn't — a misleading
pass rationale. Gate each destination flag on the same enabled-logs condition
via a shared hasEnabledLogs helper (also used by hasExport) so the evidence
reflects what actually exports.

Build clean; 215 tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(integration-platform): meaningful "View Evidence" on every check outcome (all providers)
@vercel vercel Bot temporarily deployed to staging – portal June 3, 2026 05:37 Inactive
@vercel vercel Bot temporarily deployed to staging – app June 3, 2026 05:37 Inactive
@tofikwest tofikwest merged commit dde64f0 into release Jun 3, 2026
14 checks passed
@claudfuen
Copy link
Copy Markdown
Contributor

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