Skip to content

[comp] Production Deploy#3061

Merged
tofikwest merged 11 commits into
releasefrom
main
Jun 8, 2026
Merged

[comp] Production Deploy#3061
tofikwest merged 11 commits into
releasefrom
main

Conversation

@github-actions

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

Adds TLS 1.2 enforcement checks for Azure MySQL and PostgreSQL Flexible Server, and fixes CloudWatch metric-filter auto-fix by pinning the real CloudTrail log group. Also upgrades remediation models for more reliable auto-fix plans.

  • New Features

    • Added mysqlFlexibleTlsCheck for Microsoft.DBforMySQL/flexibleServers; compliant when require_secure_transport is ON and tls_version permits only TLSv1.2+ (e.g. TLSv1.2,TLSv1.3); mapped to the TLS/HTTPS task and exported in checks/index.ts and azure/index.ts.
    • Added postgresqlFlexibleTlsCheck for Microsoft.DBforPostgreSQL/flexibleServers; compliant when require_secure_transport is ON and ssl_min_protocol_version is TLSv1.2/1.3 or unset; mapped to the TLS/HTTPS task and exported in checks/index.ts and azure/index.ts.
  • Bug Fixes

    • CloudWatch metric-filter auto-fix: surface the real trail log group in evidence (cloudWatchLogGroupName for missing-filter, or the filter’s logGroupName), and force it onto every PutMetricFilterCommand in preview and execute; updated prompt guidance accordingly.
    • PostgreSQL TLS check: treat an unset ssl_min_protocol_version as compliant and surface config read failures as “Could not verify”.
    • Remediation models: upgraded to claude-opus-4-8 (primary) and claude-sonnet-4-6 (fallback) to improve plan reliability.

Written for commit 8ec2cff. Summary will update on new commits.

Review in cubic

github-actions Bot and others added 5 commits June 8, 2026 21:11
A customer (MySQL Flexible Server) saw the "Azure SQL Database — TLS 1.2
enforced" evidence check show "0 passed" while the Storage check showed a
count. The ticket suspected a missing ctx.pass() summary, but the SQL TLS
check already emits ctx.pass() identically to Storage. The real cause is a
coverage gap: the SQL check targets Microsoft.Sql/servers (Azure SQL
Database), and the customer runs Azure Database for MySQL Flexible Server
(Microsoft.DBforMySQL/flexibleServers) — a different resource type — so the
check finds zero servers and no-ops (0 results), while Storage found 2.

Add a MySQL Flexible Server TLS check that targets the correct resource type
and reads TLS enforcement from server parameters (require_secure_transport +
tls_version), since MySQL Flexible Server has no top-level minimalTlsVersion
like Azure SQL. Compliant = require_secure_transport ON and tls_version floor
permits only TLS 1.2+ (handles the comma-separated TLSv1.2,TLSv1.3 set). Maps
to the same TLS/HTTPS evidence task so the customer's databases are verified.
Follows existing conventions: no-op on zero resources, explicit "could not
verify" on a config read failure (no false pass), pass/fail with evidence +
remediation.

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

The same coverage-gap class as the MySQL Flexible Server fix: the Azure
manifest scans Microsoft.Sql/servers and Microsoft.DBforMySQL/flexibleServers
but NOT Microsoft.DBforPostgreSQL/flexibleServers, so a customer running only
PostgreSQL Flexible Server gets 0 servers found → "0 passed" for the TLS task.

Add azure-postgresql-flexible-tls, mapped to the same TLS/HTTPS task. Like
MySQL, TLS lives in server parameters, but PostgreSQL differs: ssl_min_protocol_
version is a SINGLE value (not MySQL's comma-separated tls_version set) and may
be unset by default — PostgreSQL Flexible Server only allows TLS 1.2/1.3 and
denies 1.0/1.1 regardless, so require_secure_transport=ON is the real
determinant and an unset SSL floor is treated as compliant (avoids
false-failing default-secure servers). api-version 2024-08-01 (its own RP/
version train, not MySQL's 2023-12-30).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…as "could not verify"

cubic flagged that a read failure of ssl_min_protocol_version was silently
treated as compliant: readConfigValue returned null for BOTH "value unset" and
"fetch failed", and `?? ''` coalesced both into a pass — masking permission /
transient errors.

Replace it with readConfig() returning a discriminated { ok, value }: a thrown
fetch -> { ok:false } -> explicit "Could not verify" finding; a successful read
with an absent/unset value -> "" -> a legitimate TLS 1.2 floor (PostgreSQL
Flexible Server denies <1.2 regardless) -> compliant. The two outcomes are no
longer conflated. Added a regression test for the ssl-read-failure path.

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

feat(integration-platform): add Azure MySQL + PostgreSQL Flexible Server TLS checks
@vercel

vercel Bot commented Jun 8, 2026

Copy link
Copy Markdown

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 8, 2026 11:21pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
app (staging) Skipped Skipped Jun 8, 2026 11:21pm
portal (staging) Skipped Skipped Jun 8, 2026 11:21pm

Request Review

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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

No issues found across 5 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Re-trigger cubic

tofikwest and others added 4 commits June 8, 2026 18:47
…atch metric-filter auto-fix

Customer (aymenrc) auto-fix kept failing with an AI-generated "could not
determine which CloudTrail log group to attach the metric filter to" across all
CloudWatch CIS metric-filter fixes. Earlier PRs (#3050/#3052/#3054) fixed the
PutMetricFilter param shape and prompt wording, but never the actual blocker:
nothing ever told the fix WHICH log group to use.

The check already calls DescribeTrails and reads CloudWatchLogsLogGroupArn, but
only to compute a boolean — it discarded the log group. The finding evidence was
just { keywords, filterFound:false } and the remediation said the generic "the
CloudTrail log group", so the AI had to guess the name and bailed (canAutoFix:
false), surfacing that message verbatim. The prompt's claim that "the system
will resolve the real one from readSteps" was unbacked — there is no
deterministic resolver, only a flaky second LLM pass.

Fix (adapter, the right layer — zero new AWS calls/IAM):
- Capture the integrated trail's CloudWatchLogsLogGroupArn and derive the bare
  log-group name (logGroupNameFromArn).
- Put the concrete name into the metric-filter-missing finding's remediation
  text + evidence (cloudWatchLogGroupName); for the existing-filter update case,
  use the filter's own logGroupName (from DescribeMetricFilters).
- Point the AI prompt at the evidence field instead of a placeholder.

The "no CloudTrail->CloudWatch integration" prerequisite is unchanged (separate
early-return finding). No customer reconnect — a re-scan regenerates findings
with the log group, then auto-fix works.

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

Belt-and-suspenders for the CloudWatch metric-filter fix. The adapter now puts
the real CloudTrail log group in the finding evidence, but the fix plan is still
AI-generated. Add a deterministic override (applyResolvedMetricFilterLogGroup):
after the plan is finalized, force logGroupName on every PutMetricFilterCommand
step from the finding evidence (cloudWatchLogGroupName for a missing filter,
logGroupName for an existing-filter update), in both the preview and execute
paths. The executed value is now guaranteed correct regardless of what the model
produced. Scoped to PutMetricFilter steps; no-op for other commands or when no
log group was resolved. Extracted to a prisma-free util so it's unit-testable.

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

The auto-fix flow leans heavily on the LLM to emit exact AWS SDK commands as
structured output; newer models follow instructions + schemas more reliably,
which should raise auto-fix success rates across the board. Bump the two
remediation models that were behind:
- MODEL: claude-opus-4-6 -> claude-opus-4-8 (plan generation/refinement/repair)
- FALLBACK_MODEL: claude-sonnet-4-5 -> claude-sonnet-4-6 (manual-steps fallback)

Descriptions intentionally stay on claude-haiku-4-5 (already current, and the
right tier for simple cached explanatory text — Sonnet would add cost + latency
for no clear gain). Typecheck confirms the SDK accepts the new model ids; this
is a config/behavior change, so validate auto-fix output on a few real findings
before relying on it.

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

fix(cloud-security): resolve the real CloudTrail log group for CloudWatch metric-filter auto-fix
@vercel vercel Bot temporarily deployed to staging – portal June 8, 2026 23:13 Inactive
@vercel vercel Bot temporarily deployed to staging – app June 8, 2026 23:13 Inactive
chore(cloud-security): upgrade remediation models to latest (Opus 4.8, Sonnet 4.6)
@vercel vercel Bot temporarily deployed to staging – portal June 8, 2026 23:20 Inactive
@vercel vercel Bot temporarily deployed to staging – app June 8, 2026 23:20 Inactive
@tofikwest tofikwest merged commit 9ebc306 into release Jun 8, 2026
12 checks passed
@claudfuen

Copy link
Copy Markdown
Contributor

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