Skip to content

[comp] Production Deploy#3077

Merged
tofikwest merged 10 commits into
releasefrom
main
Jun 10, 2026
Merged

[comp] Production Deploy#3077
tofikwest merged 10 commits into
releasefrom
main

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

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

Let users pick specific requirements when linking an existing control, and make AWS S3 checks more reliable by routing per-bucket reads to the bucket’s region and surfacing real read errors with accurate remediation.

  • New Features

    • API: POST /framework/:id/link-control/:controlId now accepts optional requirementIds; omit or null to link all (legacy/CLI).
    • UI: “Add Existing Control” adds a requirement picker with search; shows requirements oldest-first.
    • Validation: rejects requirement IDs outside the framework.
  • Bug Fixes

    • AWS S3 checks route reads to each bucket’s region (uses paginated ListBuckets for BucketRegion, with legacy fallback).
    • Findings now include readError and only suggest permission grants on actual AccessDenied; transient errors ask to re-run.
    • Added retries (maxAttempts: 5) and logging; extracted bucket read logic into s3-buckets.ts.

Written for commit 90b3b7f. Summary will update on new commits.

Review in cubic

tofikwest and others added 10 commits June 10, 2026 11:39
…iming missing permissions

A customer's aws-s3-public-access check reported per-bucket 'Could not
verify public access' with a remediation asserting a missing
s3:GetBucketPublicAccessBlock grant — but their CloudTrail showed our
role's calls succeeding. The per-bucket catch swallowed the real error
(likely transient), and the finding fabricated a permissions claim it
never verified, sending the customer on an IAM audit.

- classify read failures (toReadFailure): 403/AccessDenied vs transient
- store the real error in finding evidence (readError) and ctx.log it
- only show the 'Grant s3:...' remediation for actual auth failures;
  transient failures now say to re-run with the error visible
- maxAttempts: 5 on the S3/S3Control clients to ride out transient
  failures during the scheduled-run herd

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… region

Prod data pinned the customer's 6am failures: the 4 unverified buckets
were exactly the ones outside the connection's configured region
(us-east-1 buckets, us-east-2 connection), failing fast and invisible in
CloudTrail — the signature of S3's 301 redirect-follow failing (the
x-amz-bucket-region header on 301 responses is not guaranteed). The same
buckets passed on later re-runs when the redirect worked.

Instead of depending on the redirect: ListBuckets with MaxBuckets (the
paginated form populates BucketRegion) and route each bucket's reads to
a lazily-created client for that region. Legacy unpaginated fallback for
partitions that reject MaxBuckets. Also splits the S3 data-plane into
s3-buckets.ts to stay under the 300-line file cap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nstead of linking all

Adding an existing control to a framework linked it to EVERY requirement in
the framework (e.g. all 149 in NIST SP 800-53), because a control's framework
membership is expressed only through requirement links and linkControl blindly
connected every one. Reported as "149 requirements have been linked!".

- linkControl(frameworkId, controlId, requirementIds?) now links only the
  given requirements (validated to belong to the framework). Omitting
  requirementIds keeps the legacy link-all behavior the CLI documents and
  relies on, so that path is unchanged.
- "Add Existing Control" gains a second step: after choosing a control, pick
  which of the framework's requirements to link it to (>=1). Requirements are
  listed oldest-first so a just-created one sits at the bottom, as reported.
- Extracted the dialog's pure helpers into add-existing-item-helpers.ts to keep
  the file under the 300-line cap and make them unit-testable.
- Tests: framework.service linkControl (selective / legacy / invalid id /
  no-requirements), helper unit tests, and ControlRequirementSelect interaction.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rash

@IsOptional() lets a JSON `{"requirementIds": null}` past validation, and
the === undefined guard missed null, so .filter() would throw. Guard null too
(link-all legacy path) and widen the param type. Caught by cubic review.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ive-control-linking

fix(framework-editor): "Add Existing Control" links selected requirements, not all
… ListBuckets is rejected

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…:trycompai/comp into tofik/aws-s3-check-read-error-visibility
…-visibility

fix(integration-platform): surface real S3 read errors instead of claiming missing permissions
@vercel

vercel Bot commented Jun 10, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
app (staging) Ready Ready Preview, Comment Jun 10, 2026 4:36pm
comp-framework-editor (staging) Ready Ready Preview, Comment Jun 10, 2026 4:36pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
portal (staging) Skipped Skipped Jun 10, 2026 4:36pm

Request Review

@tofikwest tofikwest merged commit 46685e0 into release Jun 10, 2026
12 checks passed
@claudfuen

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.74.5 🎉

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