Skip to content

Pro status badge on CI PR comments; promote settings.pro to top-level pro - #2883

Open
Erik Osterman (Cloud Posse) (osterman) wants to merge 7 commits into
mainfrom
osterman/pro-toggle-badge-settings-migration
Open

Pro status badge on CI PR comments; promote settings.pro to top-level pro#2883
Erik Osterman (Cloud Posse) (osterman) wants to merge 7 commits into
mainfrom
osterman/pro-toggle-badge-settings-migration

Conversation

@osterman

@osterman Erik Osterman (Cloud Posse) (osterman) commented Aug 6, 2026

Copy link
Copy Markdown
Member

what

  • Native CI's plan/apply/test PR comments now show a Pro status badge in the same row as the other result badges: green PRO-ENABLED (linking to the Atmos Pro dashboard) or silver PRO-DISABLED (linking to atmos-pro.com), plus a footer line stating whether Atmos Pro is enabled for that component.
  • settings.pro is promoted to a top-level pro: key in atmos.yaml (CLI connection config: base_url/token/workspace_id/github_oidc/git_sts/etc., a sibling of auth:/docs:/ci:), and to a top-level pro: component section in stack manifests (drift detection + GitHub-event workflow dispatch, a sibling of vars:/metadata:/settings:) — the first typed (schema-validated) component section in the codebase.
  • settings.pro keeps working everywhere as a deprecated alias: each field falls back independently in atmos.yaml, and an explicit top-level pro: block takes whole-block precedence over settings.pro: at the component level. A deprecation notice is logged whenever the legacy path is read.
  • Full stack-processor plumbing for the new pro: component section: extraction, deep-merge (global/type-default/base-component/component/overrides), base-component (metadata.component) inheritance, describe component and describe affected --upload/list instances --upload payloads, and both the CLI-config and stack-manifest JSON schemas.
  • Fixed two related gaps found along the way: describe component's output filter was silently dropping the new pro: section, and describe affected --upload/dependents payloads weren't carrying it forward to Atmos Pro.
  • Updated docs (cli/configuration/settings/pro, pro/pro, auth, mcp, list-instances, stacks/components) and the atmos-pro/atmos-modernization Claude skills to the new top-level pro: form.

why

  • atmos pro is a top-level CLI command group, but its configuration was nested three levels deep under settings.pro in two unrelated places (global CLI connection config vs. per-component drift/workflow-dispatch config) that only coincidentally shared a name — hard to discover, hard to search for, and invisible in CI output.
  • Native CI plan/apply comments showed detailed resource changes but gave no indication of whether Atmos Pro was even tracking the component, so reviewers had to go dig through stack config to find out.

references

Summary by CodeRabbit

  • New Features

    • Added top-level pro: configuration for Atmos Pro settings across configuration files and stack manifests.
    • Added Pro settings for component, override, inheritance, and tool-specific scopes.
    • Added Atmos Pro status badges and enabled/disabled notices to Native CI Terraform comments.
    • Added drift detection and workflow dispatch configuration options.
  • Bug Fixes

    • Preserved Pro settings through stack processing, affected-stack output, inheritance, and uploads.
  • Documentation

    • Updated guides with migration, precedence, and configuration examples.
  • Compatibility

    • Retained settings.pro as a deprecated alias with precedence and fallback support.

Adds a Pro status badge (green/enabled, silver/disabled) to Native CI's
plan/apply/test PR comments, linking to the Atmos Pro dashboard or
atmos-pro.com. Promotes settings.pro to a top-level pro: key in both
atmos.yaml (CLI connection config) and stack manifests (drift
detection/workflow dispatch, now a typed component section alongside
vars:/metadata:/settings:), with settings.pro kept as a fully backward
compatible deprecated alias (new value wins field-by-field / whole-block
when both are set).

- pkg/pro/enabled.go: shared ResolveSection/EffectiveEnabledState logic
  used by pkg/list (upload/counts), pkg/ci (PR badge), consistent with
  drift dispatch semantics.
- pkg/schema, pkg/config, internal/exec/stack_processor_*: new
  AtmosConfiguration.Pro field + ComponentProSettings typed component
  section, full stack-processor whitelist plumbing (extraction, merge,
  overrides, base-component inheritance), manifest/config JSON schema
  updates, and describe/upload plumbing so pro: survives describe
  component and describe affected --upload payloads.
- Docs and .claude/skills/atmos-pro, atmos-modernization updated to the
  new top-level pro: form.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The complete fixture's vendor.lock.yaml was mutated as a side effect of
running the CLI acceptance test suite (a vendor pull test writes to the
real fixture lock file); unrelated to the pro: config changes in this
branch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds the changelog post for the CI PR-comment Pro badge and the
settings.pro -> top-level pro promotion, and links the shipped milestone
into the CI/CD Simplification roadmap initiative.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@atmos-pro

atmos-pro Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Tip

Atmos Pro  

No affected stacks workflow was detected for this pull request.
If this is expected, no action is needed.
Learn More. Ask AI.

@mergify

mergify Bot commented Aug 6, 2026

Copy link
Copy Markdown

Important

Cloud Posse Engineering Team Review Required

This pull request modifies files that require Cloud Posse's review. Please be patient, and a core maintainer will review your changes.

To expedite this process, reach out to us on Slack in the #pr-reviews channel.

@mergify mergify Bot added the needs-cloudposse Needs Cloud Posse assistance label Aug 6, 2026
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues found.

Scanned Files

None

@mergify
mergify Bot temporarily deployed to screengrabs August 6, 2026 00:07 Inactive
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Resource Changes Found for bucket in test

Atmos CI

createpro

Plan: 4 to add, 0 to change, 0 to destroy.
To reproduce this locally, run:

atmos terraform plan bucket -s test

Create

+ aws_s3_bucket.checkov_target
+ aws_s3_bucket.this
+ aws_s3_bucket.trivy_target
+ aws_s3_bucket_public_access_block.trivy_target
Terraform Plan Summary
  # aws_s3_bucket.checkov_target will be created
  + resource "aws_s3_bucket" "checkov_target" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "atmos-native-ci-e2e-checkov-test"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags_all                    = (known after apply)
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

  # aws_s3_bucket.this will be created
  + resource "aws_s3_bucket" "this" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "atmos-native-ci-e2e-test"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags                        = {
          + "AtmosFixture" = "native-ci-e2e"
          + "Stage"        = "test"
        }
      + tags_all                    = {
          + "AtmosFixture" = "native-ci-e2e"
          + "Stage"        = "test"
        }
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

  # aws_s3_bucket.trivy_target will be created
  + resource "aws_s3_bucket" "trivy_target" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "atmos-native-ci-e2e-trivy-test"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags_all                    = (known after apply)
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

  # aws_s3_bucket_public_access_block.trivy_target will be created
  + resource "aws_s3_bucket_public_access_block" "trivy_target" {
      + block_public_acls       = true
      + block_public_policy     = true
      + bucket                  = (known after apply)
      + id                      = (known after apply)
      + ignore_public_acls      = true
      + restrict_public_buckets = true
    }

Plan: 4 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + bucket_name = "atmos-native-ci-e2e-test"

Atmos Pro is disabled.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a90adf22-cd07-416d-a4c8-184b6cfcbe61

📥 Commits

Reviewing files that changed from the base of the PR and between c6ab441 and 9b956f0.

📒 Files selected for processing (11)
  • internal/exec/stack_processor_process_stacks_helpers_extraction.go
  • internal/exec/stack_processor_process_stacks_test.go
  • pkg/config/load_test.go
  • tests/cli_test.go
  • tests/snapshots/TestCLICommands_atmos_--chdir_config_isolation.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_-f_yaml.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_imports.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_configuration.stdout.golden
  • tests/snapshots/TestCLICommands_indentation.stdout.golden
  • tests/snapshots/TestCLICommands_secrets-masking_describe_config.stdout.golden
💤 Files with no reviewable changes (7)
  • tests/snapshots/TestCLICommands_atmos_describe_config.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_--chdir_config_isolation.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_-f_yaml.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_configuration.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_imports.stdout.golden
  • tests/snapshots/TestCLICommands_indentation.stdout.golden
  • tests/snapshots/TestCLICommands_secrets-masking_describe_config.stdout.golden
🚧 Files skipped from review as they are similar to previous changes (3)
  • internal/exec/stack_processor_process_stacks_helpers_extraction.go
  • internal/exec/stack_processor_process_stacks_test.go
  • pkg/config/load_test.go

📝 Walkthrough

Walkthrough

The PR moves Atmos Pro configuration to top-level pro, retains settings.pro as a deprecated alias, propagates component-level settings, updates upload behavior, and adds Pro status badges to Terraform Native CI comments.

Changes

Atmos Pro configuration

Layer / File(s) Summary
Configuration contracts and resolution
pkg/config/..., pkg/schema/..., pkg/pro/..., pkg/datafetcher/schema/..., errors/errors.go
Top-level pro types, schemas, environment bindings, fallback resolution, effective-state helpers, and validation errors were added.
Stack and component propagation
internal/exec/...
Global, stack, component, override, and inherited pro sections are validated, merged, copied, and passed through processing.
Runtime consumers and uploads
pkg/list/..., pkg/pro/..., cmd/..., pkg/telemetry/...
Runtime consumers now read top-level Pro settings. Instance uploads preserve resolved Pro data and effective enablement states.
Native CI Pro badges
pkg/ci/plugins/terraform/...
Terraform plan, apply, and test comments show enabled or disabled Pro badges and footer messages.
Documentation and fixtures
agent-skills/..., website/..., tests/...
Documentation, skills, schemas, snapshots, and tests describe top-level pro, deprecated fallback behavior, precedence, and badges.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested reviewers: aknysh

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 78.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes both main changes: Pro status badges on CI PR comments and promotion of settings.pro to top-level pro.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch osterman/pro-toggle-badge-settings-migration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 7

🧹 Nitpick comments (1)
pkg/ci/plugins/terraform/plugin_test.go (1)

83-154: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use a table-driven test.

The five cases repeat setup and assertions. Put the component sections and expected ProEnabled value in test cases. Use one subtest loop.

As per coding guidelines, use table-driven tests for multiple scenarios.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/ci/plugins/terraform/plugin_test.go` around lines 83 - 154, Refactor
TestPlugin_BuildTemplateContext_ProEnabled into a table-driven test with one
subtest loop. Define each scenario’s ComponentSection, ComponentSettingsSection,
ComponentMetadataSection, and expected ProEnabled value in the test cases, while
retaining the shared ConfigAndStacksInfo setup, buildTemplateContext call, error
check, type assertion, and assertion behavior.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@agent-skills/skills/atmos-modernization/SKILL.md`:
- Around line 29-31: Update the migration table entries for CLI connection and
per-component configuration so `settings.pro` and `settings.pro.*` are marked as
deprecated aliases, while the corresponding top-level `pro:` forms are
identified as the preferred replacements. Preserve the existing configuration
details and behavior descriptions.

In `@agent-skills/skills/atmos-pro/SKILL.md`:
- Around line 158-160: Update the atmos.yaml configuration guidance in the
pro/settings.pro section to describe per-field fallback: top-level pro fields
override matching settings.pro fields, while unset top-level fields inherit
their values from settings.pro. Remove the inaccurate claim that the top-level
block wins outright or is never merged.

In `@internal/exec/stack_processor_process_stacks.go`:
- Around line 1375-1387: Update the pro-merging logic in the component
processing flow to deep-merge nested values, preserving stack-global entries
alongside component-local overrides. Replace the manual top-level copy loops
around componentMap[cfg.ProSectionName] with m.Merge(atmosConfig,
[]map[string]any{globalProSection, componentLocalPro}), using the existing local
pro map and retaining the current assignment when the merged result is
non-empty.

In `@pkg/ci/plugins/terraform/template_test.go`:
- Around line 418-502: Add a disabled-Pro test case alongside the existing
test-template scenario in the test matrix, using test command context and a
suitable TestResult. Assert that the rendered output contains
PRO-DISABLED-silver, https://atmos-pro.com, and the disabled footer, while
excluding PRO-ENABLED, the enabled footer, and /dashboard.

In `@pkg/config/load_test.go`:
- Around line 1951-2034: Expand TestLoadConfig_ProSettingsBackwardCompat and
TestResolveProSettings to cover Endpoint, GithubOIDC, MaxPayloadBytes,
GitHubHeadRef, and GitSTS, verifying legacy fallback and top-level pro
precedence per field. Add configuration-loading cases for each Pro field
confirming ATMOS_PRO_* environment values override both pro.* and settings.pro.*
sources, including all relevant loading paths.

In `@tests/snapshots/TestCLICommands_atmos_auth_validate_--verbose.stderr.golden`:
- Around line 2-16: Update the top-level CLI configuration-loading boundary
around resolveProSettings so the settings.pro deprecation warning is emitted at
most once per invocation, even when configuration is resolved repeatedly.
Preserve the warning content and ensure repeated calls do not log duplicates.

In `@website/docs/cli/configuration/settings/pro.mdx`:
- Around line 138-154: Update the `git_config_mode` and `revoke_on_exit`
descriptions under `pro.git_sts` to state that per-integration overrides belong
in the `github/sts` integration `spec`, not in an identity spec. Preserve the
documented global defaults and override behavior while correcting both
references.

---

Nitpick comments:
In `@pkg/ci/plugins/terraform/plugin_test.go`:
- Around line 83-154: Refactor TestPlugin_BuildTemplateContext_ProEnabled into a
table-driven test with one subtest loop. Define each scenario’s
ComponentSection, ComponentSettingsSection, ComponentMetadataSection, and
expected ProEnabled value in the test cases, while retaining the shared
ConfigAndStacksInfo setup, buildTemplateContext call, error check, type
assertion, and assertion behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: d6f7a390-30be-429a-961b-7a23b456364c

📥 Commits

Reviewing files that changed from the base of the PR and between d2b8e81 and d2c8718.

📒 Files selected for processing (89)
  • agent-skills/skills/atmos-modernization/SKILL.md
  • agent-skills/skills/atmos-pro/SKILL.md
  • cmd/auth/exec.go
  • cmd/mcp/client/messages.go
  • cmd/mcp/client/messages_test.go
  • errors/errors.go
  • internal/exec/describe_affected_test.go
  • internal/exec/describe_affected_upload.go
  • internal/exec/describe_affected_utils_2.go
  • internal/exec/describe_component.go
  • internal/exec/describe_dependents.go
  • internal/exec/stack_processor_cache.go
  • internal/exec/stack_processor_merge.go
  • internal/exec/stack_processor_process_stacks.go
  • internal/exec/stack_processor_process_stacks_helpers.go
  • internal/exec/stack_processor_process_stacks_helpers_extraction.go
  • internal/exec/stack_processor_process_stacks_helpers_inheritance.go
  • internal/exec/stack_processor_process_stacks_helpers_overrides.go
  • internal/exec/stack_processor_utils.go
  • pkg/ci/plugins/terraform/context.go
  • pkg/ci/plugins/terraform/plugin.go
  • pkg/ci/plugins/terraform/plugin_test.go
  • pkg/ci/plugins/terraform/template_test.go
  • pkg/ci/plugins/terraform/templates/apply.md
  • pkg/ci/plugins/terraform/templates/plan.md
  • pkg/ci/plugins/terraform/templates/test.md
  • pkg/ci/plugins/terraform/testdata/golden/apply_failure.md
  • pkg/ci/plugins/terraform/testdata/golden/apply_success.md
  • pkg/ci/plugins/terraform/testdata/golden/apply_with_outputs.md
  • pkg/ci/plugins/terraform/testdata/golden/plan_creates_only.md
  • pkg/ci/plugins/terraform/testdata/golden/plan_destroys_warning.md
  • pkg/ci/plugins/terraform/testdata/golden/plan_failure.md
  • pkg/ci/plugins/terraform/testdata/golden/plan_no_changes.md
  • pkg/ci/plugins/terraform/testdata/golden/plan_no_changes_with_changed_result.md
  • pkg/ci/plugins/terraform/testdata/golden/plan_with_warnings.md
  • pkg/config/const.go
  • pkg/config/load.go
  • pkg/config/load_config_args.go
  • pkg/config/load_test.go
  • pkg/datafetcher/schema/atmos/config/1.0.json
  • pkg/datafetcher/schema/atmos/manifest/1.0.json
  • pkg/datafetcher/schema_section_coverage_test.go
  • pkg/list/list_instances.go
  • pkg/list/list_instances_cmd_test.go
  • pkg/list/list_instances_pro_test.go
  • pkg/pro/api_client.go
  • pkg/pro/api_client_test.go
  • pkg/pro/commit.go
  • pkg/pro/commit_test.go
  • pkg/pro/enabled.go
  • pkg/pro/enabled_test.go
  • pkg/pro/interface_test.go
  • pkg/schema/instance.go
  • pkg/schema/pro.go
  • pkg/schema/schema.go
  • pkg/telemetry/utils.go
  • tests/fixtures/schemas/atmos/atmos-manifest/1.0/atmos-manifest.json
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Config_File.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Config_File.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Environment_Variable.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Environment_Variable.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_log_file_in_env_should_be_priortized_over_config.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_log_file_in_flag_should_be_priortized_over_env_and_config.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_env_should_be_priortized_over_config.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_env_should_be_priortized_over_config.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_flag_should_be_priortized_over_env_and_config.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_flag_should_be_priortized_over_env_and_config.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_--chdir_config_isolation.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_auth_validate_--verbose.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_-f_yaml.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_imports.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_imports.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_configuration.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_describe_configuration.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_component_using_SSH.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_using_SSH.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_with_custom_detector_and_handling_credentials_leakage.stderr.golden
  • tests/snapshots/TestCLICommands_echo_info_runs_with_verbose_flag.stderr.golden
  • tests/snapshots/TestCLICommands_indentation.stdout.golden
  • tests/snapshots/TestCLICommands_secrets-masking_describe_config.stdout.golden
  • website/blog/2026-08-05-pro-badge-and-top-level-config.mdx
  • website/docs/cli/commands/list/list-instances.mdx
  • website/docs/cli/configuration/auth/index.mdx
  • website/docs/cli/configuration/settings/pro.mdx
  • website/docs/mcp/mcp.mdx
  • website/docs/pro/pro.mdx
  • website/docs/stacks/components/index.mdx
  • website/src/data/roadmap.js
💤 Files with no reviewable changes (4)
  • tests/snapshots/TestCLICommands_Valid_log_level_in_flag_should_be_priortized_over_env_and_config.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Config_File.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Environment_Variable.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_env_should_be_priortized_over_config.stdout.golden

Comment on lines +29 to +31
| `cloudposse/github-action-atmos-terraform-drift-*` | `pro.drift_detection` plus `atmos terraform plan --upload-status` |
| `settings.pro` in `atmos.yaml` (CLI connection config: `base_url`/`token`/`workspace_id`/etc.) | Top-level `pro:` in `atmos.yaml` (deprecated alias, still works) |
| `settings.pro.*` per component/stack (`enabled`/`drift_detection`/`pull_request`/`release`/`merge_group`) | Top-level `pro:` component section, a sibling of `vars:`/`metadata:`/`settings:` (deprecated alias, still works) |

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Attach the deprecation label to settings.pro.

The table currently labels the new top-level pro: forms as deprecated. settings.pro is the deprecated alias. Mark top-level pro: as the preferred replacement.

Proposed wording
-| `settings.pro` in `atmos.yaml` | Top-level `pro:` in `atmos.yaml` (deprecated alias, still works) |
-| `settings.pro.*` per component/stack | Top-level `pro:` component section (deprecated alias, still works) |
+| `settings.pro` in `atmos.yaml` | Top-level `pro:` in `atmos.yaml` (`settings.pro` remains supported as a deprecated alias) |
+| `settings.pro.*` per component/stack | Top-level `pro:` component section (`settings.pro` remains supported as a deprecated alias) |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@agent-skills/skills/atmos-modernization/SKILL.md` around lines 29 - 31,
Update the migration table entries for CLI connection and per-component
configuration so `settings.pro` and `settings.pro.*` are marked as deprecated
aliases, while the corresponding top-level `pro:` forms are identified as the
preferred replacements. Preserve the existing configuration details and behavior
descriptions.

Comment thread agent-skills/skills/atmos-pro/SKILL.md Outdated
Comment thread internal/exec/stack_processor_process_stacks.go Outdated
Comment thread pkg/ci/plugins/terraform/template_test.go
Comment thread pkg/config/load_test.go
Comment thread tests/snapshots/TestCLICommands_atmos_auth_validate_--verbose.stderr.golden Outdated
Comment thread website/docs/cli/configuration/settings/pro.mdx Outdated
@codecov

codecov Bot commented Aug 6, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 70.40000% with 74 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.75%. Comparing base (d2b8e81) to head (155c0de).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
internal/exec/stack_processor_process_stacks.go 40.29% 26 Missing and 14 partials ⚠️
internal/exec/stack_processor_merge.go 60.00% 3 Missing and 3 partials ⚠️
internal/exec/stack_processor_utils.go 33.33% 4 Missing and 2 partials ⚠️
...ack_processor_process_stacks_helpers_extraction.go 0.00% 4 Missing and 1 partial ⚠️
...tack_processor_process_stacks_helpers_overrides.go 16.66% 4 Missing and 1 partial ⚠️
internal/exec/describe_affected_utils_2.go 25.00% 2 Missing and 1 partial ⚠️
pkg/list/list_instances.go 84.21% 1 Missing and 2 partials ⚠️
internal/exec/describe_dependents.go 0.00% 1 Missing and 1 partial ⚠️
internal/exec/stack_processor_cache.go 33.33% 1 Missing and 1 partial ⚠️
pkg/pro/api_client.go 75.00% 2 Missing ⚠️

❌ Your patch check has failed because the patch coverage (70.40%) is below the target coverage (85.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #2883      +/-   ##
==========================================
- Coverage   82.76%   82.75%   -0.02%     
==========================================
  Files        1861     1862       +1     
  Lines      180438   180650     +212     
==========================================
+ Hits       149342   149497     +155     
- Misses      23309    23339      +30     
- Partials     7787     7814      +27     
Flag Coverage Δ
unittests 82.75% <70.40%> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
cmd/auth/exec.go 70.73% <100.00%> (ø)
cmd/mcp/client/messages.go 87.50% <100.00%> (ø)
errors/errors.go 100.00% <ø> (ø)
internal/exec/describe_affected_upload.go 100.00% <100.00%> (ø)
internal/exec/describe_component.go 88.52% <100.00%> (+0.03%) ⬆️
...nal/exec/stack_processor_process_stacks_helpers.go 86.66% <ø> (ø)
...ck_processor_process_stacks_helpers_inheritance.go 96.25% <100.00%> (+0.04%) ⬆️
pkg/ci/plugins/terraform/context.go 100.00% <ø> (ø)
pkg/ci/plugins/terraform/plugin.go 97.03% <100.00%> (+0.18%) ⬆️
pkg/config/load.go 87.83% <100.00%> (+0.37%) ⬆️
... and 15 more

... and 11 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

- Deep-merge pro: for custom component types (container/emulator), matching
  the built-in types' m.Merge pattern instead of a shallow top-level-key
  copy that let a component-local pro.pull_request with one activity wipe
  out other globally-configured activities under the same key.
- Dedupe the 'settings.pro is deprecated' debug notice to once per process
  instead of once per LoadConfig call (which fires repeatedly per CLI
  invocation), regenerating the golden snapshots that captured the noise.
- Fix skill/doc wording: attach "deprecated alias" to settings.pro instead
  of the new pro: form; correct git_sts.git_config_mode/revoke_on_exit
  override location (github/sts integration spec, not an identity spec);
  split the atmos-pro skill's precedence note into its two real behaviors
  (per-field fallback for atmos.yaml, whole-block precedence for
  stack/component pro:).
- Expand pro.go migration test coverage to every ProSettings field and add
  an ATMOS_PRO_* env-var precedence test; add a disabled-Pro test case for
  the CI "test" template scenario.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
internal/exec/stack_processor_process_stacks.go (1)

945-956: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Keep Helm in the built-in component set.

ProcessStackConfig processes Helm before the custom-component loop. builtInTypes omits cfg.HelmComponentType, so that loop overwrites allComponents["helm"].

The replacement path merges only globalProSection. It discards globalAndHelmPro, so settings under helm.pro do not reach Helm components. Add Helm to builtInTypes and add a Helm-specific regression test.

Proposed fix
 builtInTypes := map[string]bool{
 	cfg.TerraformComponentType:  true,
 	cfg.HelmfileComponentType:   true,
 	cfg.PackerComponentType:     true,
 	cfg.AnsibleComponentType:    true,
 	cfg.KubernetesComponentType: true,
+	cfg.HelmComponentType:       true,
 }

Also applies to: 1281-1281

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/exec/stack_processor_process_stacks.go` around lines 945 - 956,
Update ProcessStackConfig and its built-in component classification to include
cfg.HelmComponentType in builtInTypes, preventing the custom-component loop from
overwriting the processed Helm entry. Ensure the Helm replacement path uses
globalAndHelmPro rather than only globalProSection so helm.pro settings reach
Helm components, and add a regression test covering both behaviors.
agent-skills/skills/atmos-pro/SKILL.md (1)

17-23: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the precedence summary consistent.

Lines 20-21 say that a top-level pro: block always wins. Lines 158-161 define per-field fallback for atmos.yaml. These statements conflict. Document per-field fallback for atmos.yaml, and reserve whole-block precedence for component/stack configuration.

Suggested wording
- `settings.pro` is a **deprecated alias** for both — Atmos still reads it, but an explicit top-level `pro:` block always wins over `settings.pro:` when both are set.
+ `settings.pro` is a **deprecated alias** for both — Atmos still reads it. In `atmos.yaml`, each top-level `pro.<field>` overrides the matching `settings.pro.<field>`, while unset fields fall back to `settings.pro`. For component/stack configuration, an explicit top-level `pro:` block takes precedence as a whole.

Also applies to: 158-165

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@agent-skills/skills/atmos-pro/SKILL.md` around lines 17 - 23, Update the
precedence guidance in the top-level CLI configuration section and the per-field
fallback description near the per-component/stack configuration section. For
atmos.yaml, document that explicitly set fields in the top-level pro: block
override corresponding settings.pro fields while unspecified fields fall back to
settings.pro; reserve whole-block precedence, where the top-level pro: block
replaces settings.pro entirely, for component/stack configuration.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@agent-skills/skills/atmos-pro/SKILL.md`:
- Around line 17-23: Update the precedence guidance in the top-level CLI
configuration section and the per-field fallback description near the
per-component/stack configuration section. For atmos.yaml, document that
explicitly set fields in the top-level pro: block override corresponding
settings.pro fields while unspecified fields fall back to settings.pro; reserve
whole-block precedence, where the top-level pro: block replaces settings.pro
entirely, for component/stack configuration.

In `@internal/exec/stack_processor_process_stacks.go`:
- Around line 945-956: Update ProcessStackConfig and its built-in component
classification to include cfg.HelmComponentType in builtInTypes, preventing the
custom-component loop from overwriting the processed Helm entry. Ensure the Helm
replacement path uses globalAndHelmPro rather than only globalProSection so
helm.pro settings reach Helm components, and add a regression test covering both
behaviors.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c77820f0-fa43-42ea-8552-eab1d95967e0

📥 Commits

Reviewing files that changed from the base of the PR and between d2c8718 and 155c0de.

📒 Files selected for processing (21)
  • agent-skills/skills/atmos-modernization/SKILL.md
  • agent-skills/skills/atmos-pro/SKILL.md
  • internal/exec/stack_processor_process_stacks.go
  • internal/exec/stack_processor_process_stacks_test.go
  • pkg/ci/plugins/terraform/template_test.go
  • pkg/config/load.go
  • pkg/config/load_test.go
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Config_File.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Environment_Variable.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_log_file_in_env_should_be_priortized_over_config.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_log_file_in_flag_should_be_priortized_over_env_and_config.stdout.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_env_should_be_priortized_over_config.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_flag_should_be_priortized_over_env_and_config.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_auth_validate_--verbose.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_imports.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_describe_configuration.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_component_using_SSH.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_using_SSH.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_with_custom_detector_and_handling_credentials_leakage.stderr.golden
  • tests/snapshots/TestCLICommands_echo_info_runs_with_verbose_flag.stderr.golden
  • website/docs/cli/configuration/settings/pro.mdx
💤 Files with no reviewable changes (13)
  • tests/snapshots/TestCLICommands_Valid_log_level_in_flag_should_be_priortized_over_env_and_config.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Environment_Variable.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_using_SSH.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_component_using_SSH.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_log_file_in_env_should_be_priortized_over_config.stdout.golden
  • tests/snapshots/TestCLICommands_atmos_describe_config_imports.stderr.golden
  • tests/snapshots/TestCLICommands_echo_info_runs_with_verbose_flag.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_log_level_in_env_should_be_priortized_over_config.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_Log_Level_in_Config_File.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_auth_validate_--verbose.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_describe_configuration.stderr.golden
  • tests/snapshots/TestCLICommands_atmos_vendor_pull_with_custom_detector_and_handling_credentials_leakage.stderr.golden
  • tests/snapshots/TestCLICommands_Valid_log_file_in_flag_should_be_priortized_over_env_and_config.stdout.golden
🚧 Files skipped from review as they are similar to previous changes (3)
  • agent-skills/skills/atmos-modernization/SKILL.md
  • pkg/config/load_test.go
  • pkg/ci/plugins/terraform/template_test.go

…85%+

Adds tests for the coverage gaps Codecov flagged on this PR's patch
(pkg/config, internal/exec stack processing, pkg/list, pkg/schema), plus
two accompanying production fixes found while writing them: load.go's
pro.base_url/endpoint defaults no longer get treated as user-authored
legacy config, and a malformed/typo'd component-level `pro:` section now
warns instead of aborting processing of sibling components (matching how
pro.ResolveSection already tolerates it downstream). Diff coverage is now
~89% (up from 66.39%).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🧹 Nitpick comments (2)
pkg/schema/pro_decode_test.go (1)

11-80: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Make the decoder coverage table-driven and complete.

TestDecodeComponentPro_FullShape does not cover Release or MergeGroup, although both are supported by ComponentProSettings.

Use table-driven cases for the decode scenarios. Add populated input and assertions for both missing dispatch fields.

As per coding guidelines, new feature tests must be comprehensive and table-driven.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/schema/pro_decode_test.go` around lines 11 - 80, Refactor the
DecodeComponentPro tests into table-driven cases covering nil, empty, invalid,
partial, unknown-field, and full configurations. Expand the full-shape input and
assertions in TestDecodeComponentPro_FullShape’s replacement to populate and
verify both supported Release and MergeGroup settings, including their dispatch
fields, while preserving existing coverage for Enabled, DriftDetection, and
PullRequest.

Source: Coding guidelines

pkg/schema/pro_decode.go (1)

10-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use one error identity for invalid component pro configuration.

errors/errors.go:479 already defines ErrInvalidComponentPro. Reusing it keeps errors.Is consistent across schema decoding and stack processing.

  • pkg/schema/pro_decode.go#L10-L13: remove ErrInvalidComponentProConfig and wrap ErrInvalidComponentPro after verifying no import cycle exists.
  • pkg/schema/pro_decode_test.go#L23-L28: assert errors.Is(err, errUtils.ErrInvalidComponentPro).
  • pkg/schema/pro_decode_test.go#L62-L66: assert errors.Is(err, errUtils.ErrInvalidComponentPro).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/schema/pro_decode.go` around lines 10 - 13, Use the existing
errUtils.ErrInvalidComponentPro identity throughout component pro decoding:
remove ErrInvalidComponentProConfig from pkg/schema/pro_decode.go and wrap
errUtils.ErrInvalidComponentPro after confirming no import cycle. Update
pkg/schema/pro_decode_test.go lines 23-28 and 62-66 to assert errors.Is(err,
errUtils.ErrInvalidComponentPro).

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/exec/stack_processor_process_stacks_helpers_extraction.go`:
- Around line 61-76: Update the ComponentPro handling in the stack-processing
helper so result.ComponentPro is assigned only when schema.DecodeComponentPro
succeeds; leave it unset when validation rejects an unrecognized field such as
“enable”. Keep the validation warning non-fatal so sibling components continue
processing, and add a regression test covering this typo and confirming Pro is
not enabled from the invalid map.

---

Nitpick comments:
In `@pkg/schema/pro_decode_test.go`:
- Around line 11-80: Refactor the DecodeComponentPro tests into table-driven
cases covering nil, empty, invalid, partial, unknown-field, and full
configurations. Expand the full-shape input and assertions in
TestDecodeComponentPro_FullShape’s replacement to populate and verify both
supported Release and MergeGroup settings, including their dispatch fields,
while preserving existing coverage for Enabled, DriftDetection, and PullRequest.

In `@pkg/schema/pro_decode.go`:
- Around line 10-13: Use the existing errUtils.ErrInvalidComponentPro identity
throughout component pro decoding: remove ErrInvalidComponentProConfig from
pkg/schema/pro_decode.go and wrap errUtils.ErrInvalidComponentPro after
confirming no import cycle. Update pkg/schema/pro_decode_test.go lines 23-28 and
62-66 to assert errors.Is(err, errUtils.ErrInvalidComponentPro).
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: dc2ded76-d8b6-4bf6-8c85-34bf3798f38c

📥 Commits

Reviewing files that changed from the base of the PR and between 155c0de and c6ab441.

📒 Files selected for processing (14)
  • internal/exec/describe_affected_utils_2_test.go
  • internal/exec/describe_dependents_test.go
  • internal/exec/stack_processor_process_stacks_helpers_extraction.go
  • internal/exec/stack_processor_process_stacks_helpers_test.go
  • internal/exec/stack_processor_process_stacks_test.go
  • internal/exec/stack_processor_utils_test.go
  • pkg/config/load.go
  • pkg/config/load_test.go
  • pkg/config/testdata/default-config-snapshot.yaml
  • pkg/list/list_instances_comprehensive_test.go
  • pkg/list/list_instances_upload_test.go
  • pkg/schema/pro_decode.go
  • pkg/schema/pro_decode_test.go
  • pkg/telemetry/utils_test.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • pkg/config/load.go

Comment thread internal/exec/stack_processor_process_stacks_helpers_extraction.go
…ro golden snapshots

CI's Acceptance Tests job was failing on two fronts:

- TestLoadConfig_ProDefaultsDoNotLeakIntoLegacySettings compared
  Settings.Pro against a zero value, but GitHub Actions sets GITHUB_HEAD_REF
  on every pull_request run, which pkg/config binds into
  Settings.Pro.GitHubHeadRef -- passing locally (unset) and failing only in
  CI. tests/cli_test.go's TestMain already unsets other CI-ambient vars
  (GITHUB_ACTIONS, ATMOS_CHDIR) for the same reason; GITHUB_HEAD_REF joins
  that list, and the pkg/config unit test isolates it directly via t.Setenv.

- 20 CLI golden snapshots still expected settings.pro.base_url/endpoint to
  be populated and the 'settings.pro' deprecation notice to fire
  unconditionally -- both stale from before this branch's earlier fix that
  moved pro.base_url/pro.endpoint defaults off the deprecated settings.pro
  path. Regenerated via -regenerate-snapshots; every change is a pure
  deletion of the now-obsolete lines.

Also confirmed pkg/scheduler/adapters' TestExecuteTerraformConcurrentHooksUseNodeWriters
failure in the same CI run is an unrelated pre-existing flake (passes 5/5
locally; no commit on this branch touches pkg/scheduler) -- left untouched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CodeRabbit review (PR #2883, discussion_r3729413928): extractComponentSections
assigned result.ComponentPro before schema.DecodeComponentPro validated it, so
a typo'd pro: {enable: false} (meant "enabled") still flowed downstream as the
raw map. pro.ResolveSection ignores unrecognized keys, so the typo silently
resolved to Pro's default-enabled behavior -- the opposite of what the user
wrote. Now the raw map is only assigned after decoding succeeds; the warning
stays non-fatal so sibling components still process. Updated
TestProcessStackConfig_ProSectionUnknownKeyDoesNotBlockProcessing to assert
the pro: section is absent (not silently enabling Pro) rather than passed
through unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

minor New features that do not break anything needs-cloudposse Needs Cloud Posse assistance size/l Large size PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant