github cloudposse/atmos v1.229.0-rc.2

pre-release3 hours ago
chore(deps): add 14-day cooldown for Renovate updates @osterman (#3135) ## what
  • Add a repo-wide minimumReleaseAge: "14 days" cooldown to renovate.json.

why

  • Renovate was opening dependency-update PRs (e.g. floci/floci and floci/floci-az Docker digest bumps) the moment a new release/digest was published, with no waiting period.
  • A cooldown lets a freshly published artifact prove itself before Atmos proposes pulling it in, reducing the chance of adopting a digest/version that's pulled or patched shortly after release.
  • 14 days matches the cooldown.default-days: 14 already set for every ecosystem in .github/dependabot.yml, so cooldown policy is consistent regardless of which bot opens the PR.
  • Applying it repo-wide (not scoped to Docker only) covers Go modules, GitHub Actions, and npm updates the same way.

references

  • N/A

Summary by CodeRabbit

  • Chores
    • Dependency updates now wait at least 14 days after release before being considered.
feat(website): add download/share to blog post cast embeds @osterman (#3126) ## what
  • Added a CastEmbed component (website/src/components/CastEmbed/) that wraps CastPlayer with the existing CastShareLink and CastProDownload controls, on by default.
  • Added a siteCastPath() helper to CastProArtifact/url.mjs (with a unit test) that resolves a cast's public src to its committed website/static/... path, replacing an inline convention previously duplicated only in the file-browser example pages.
  • Retrofitted all 38 existing blog posts under website/blog/ from bare <CastPlayer> to <CastEmbed>, so every previously published changelog post's cast embed also gets Download/Share.
  • Updated the changelog, atmos-asciicast, and pull-request skills to reference CastEmbed (with opt-out guidance via download={false}/share={false}) instead of bare CastPlayer for future blog posts.

why

  • Blog/changelog posts embedded casts with only play/pause and a scrubber — there was no way to download a rendered GIF/MP4/SVG/WEBM or share the cast, even though that capability (CastProDownload/CastShareLink) already existed and was wired into the examples-gallery pages.
  • Centralizing the player+download+share composition in one CastEmbed component avoids every blog post (and future skill guidance) re-deriving the owner/repo/gitRef/path wiring by hand.

references

  • N/A

Summary by CodeRabbit

  • New Features

    • Added enhanced cast embeds with optional Download and Share controls.
    • Controls are enabled by default for supported casts and can be individually hidden.
    • Download options support configurable formats and expiration settings.
    • Added cast previews to changelog timeline entries, linking recordings to their related posts.
  • Documentation

    • Updated blog posts and authoring guidance to use enhanced cast embeds.
    • Existing recordings retain their sources, titles, and playback settings while gaining the new controls.
ci: add sticky cross-workflow timing summary @osterman (#3125) ## what
  • Add a default-branch workflow_run coordinator for every workflow that can run on an open pull request.
  • Add a bundled TypeScript action that waits for the latest runs and jobs for the current PR head to finish, then creates or updates one hidden-marker sticky comment.
  • Report PR wall-clock time, aggregate runner time, per-workflow totals, and the ten longest jobs, including matrix expansions.

why

  • Make the complete CI critical path visible in one place instead of inspecting workflows individually.
  • Distinguish elapsed PR latency from additive runner consumption so sharding and cache changes can be evaluated with the right metric.

references

Summary by CodeRabbit

  • New Features

    • Added automated CI timing summaries to pull requests.
    • Posts or updates a sticky comment showing wall-clock duration, aggregate runner time, workflow and job counts, and individual workflow results.
    • Includes workflows associated with the pull request, including checks triggered by events beyond standard pull-request workflows.
    • Publishes results only after selected workflows and jobs finish.
  • Documentation

    • Added documentation covering timing metrics, reporting behavior, and development workflow.
ci: shard race detector tests across hosted runners @osterman (#3123) ## what
  • Split the non-acceptance race suite across four hosted-runner jobs using a seeded, precomputed package matrix.
  • Generalize the matrix output helpers for typed include rows and add coverage for shard planning and deterministic shuffling.

why

  • Reduce the race check's critical-path runtime and oversized-runner usage while preserving full package coverage.
  • Vary package assignments between workflow runs so consistently slow package clusters do not remain pinned to one shard.

references

  • N/A

Summary by CodeRabbit

  • Performance

    • Race tests now run across four parallel shards, reducing the CI timeout from 75 to 30 minutes.
    • Test packages are distributed deterministically for more consistent execution times.
  • Reliability

    • Added validation for missing or invalid test-shard configuration.
    • Improved cleanup and timeout handling for cancelled integration tests.
  • Maintenance

    • Improved test-matrix generation and validation.
    • Added dedicated caching for race-test planning to improve repeated workflow runs.
feat(helm): add runtime value overrides and values output @osterman (#3094) ## what
  • Add Helm-compatible ephemeral -f/--values and --set* overrides to native Helm render, diff, and apply commands.
  • Add atmos helm values <component> -s <stack> to print final masked values as formatted YAML.
  • Document the commands and test parsing, precedence, rendering, and value inspection.

why

  • Let operators inspect, preview, and deploy identical runtime values without editing Atmos stack configuration.

references

  • N/A

Summary by CodeRabbit

  • New Features

    • Added atmos helm values to display fully resolved chart values as masked YAML.
    • Added repeatable Helm-compatible runtime overrides for rendering, diffing, inspecting values, and deploying charts.
    • Supported overrides include values files and --set, --set-string, --set-file, --set-json, and --set-literal.
    • Runtime overrides apply only to the current command and do not modify configuration.
  • Bug Fixes

    • Improved Helm output formatting and chart path display in deployment status messages.
  • Documentation

    • Added command examples, flag references, precedence details, and guidance on invocation-only overrides.
fix(ci): cap concurrent subprocess launches in acceptance test orchestration @osterman (#3116) ## what
  • Adds a small package-level semaphore (maxConcurrentSubprocesses = 4) in internal/ci/acceptance/command.go that caps how many real subprocesses (go build/go test -c/go test/precompiled *.test.exe) commandRunner.run/.output may have in flight at once, across every commandRunner instance.
  • Refactors testfixture_test.go's buildFixtureTestBinary to route its go test -c compile through commandRunner.output instead of a bare exec.Command, so it shares the same cap.

why

  • PR #3115 was added to the merge queue twice and bounced both times for reasons unrelated to its own diff. The first bounce (windows, shard 3/10) failed with a Go runtime fatal error: found pointer to free object (runtime: marked free object in span) during a concurrent os/exec process launch triggered from this package's own acceptance-test suite.
  • This package's test suite runs ~90 t.Parallel() subtests, many of which shell out to the real go toolchain. On a wide CI runner that lets dozens of real go build/go test subprocesses launch fully concurrently — each independently allocating and syscalling heavily — which is the kind of condition known to trigger a long-standing, still-recurring class of Go runtime GC/allocator race on Windows (see golang/go#44900, #45364, #47415, #54247). It's a documented class of upstream Go runtime flakiness under heavy concurrent allocation+syscall pressure, not a bug in the specific command being run.
  • Capping actual subprocess launches (while leaving the surrounding Go test logic free to run in parallel) removes the trigger condition without giving up test parallelism where it doesn't involve a real subprocess. Verified locally: go test ./internal/ci/acceptance/... -v still passes in full (~15s, no deadlocks) with the cap in place.

references

  • N/A

Summary by CodeRabbit

  • Bug Fixes

    • Improved reliability of Windows acceptance tests by limiting concurrent subprocess launches.
    • Applied the same concurrency control when building test fixtures.
    • Improved error handling when subprocess capacity cannot be acquired.
  • Tests

    • Added coverage for subprocess slot-acquisition failures across supported platforms.
  • Documentation

    • Documented the Windows acceptance-test concurrency fix, validation results, and follow-up status.
fix(docs): use localhost redis URL in sops-secrets demo cast @osterman (#3120) ## what
  • The sops-secrets example's secret-lifecycle screengrab demoed atmos secret set REDIS_URL=redis://prod:6379 --stack=dev --component=api.
  • Changed the demoed value to redis://localhost:6379, matching the fixture component's own default (redis_url: !secret REDIS_URL | default "redis://localhost:6379").
  • Regenerated the committed cast (website/static/casts/examples/sops-secrets/secret-lifecycle.cast) via atmos --chdir=demo/casts casts generate examples sops-secrets secret-lifecycle, which re-runs its own validation step.

why

  • The dev stack demo was setting an obviously production-looking Redis URL (redis://prod:6379), which is confusing/embarrassing in published docs and contradicts the stack it's demoing against.
  • Using redis://localhost:6379 keeps the demo internally consistent with the fixture's real default for the dev stack.

references

  • N/A

Summary by CodeRabbit

  • Documentation
    • Updated the SOPS secrets lifecycle example to use a local Redis connection.
    • Refreshed the terminal recording with updated OpenTofu version output and timing information.
    • Removed workspace-switch messages from the recorded deployment and output commands.
    • Cleaned up trailing whitespace in displayed secret listings.

🚀 Enhancements

fix: describe/error/prompt DX bugs found while field-testing aws/cloudformation @osterman (#3106) ## What

Four general, cross-cutting bug fixes:

  1. errors/formatter.go — short (2-line) error callouts rendered with a jarring two-tone background instead of a smooth gradient (pure gradient-endpoint colors with no interpolation).
  2. cmd/describe_component.godescribe component couldn't prompt for a missing --stack; it used Cobra's native MarkPersistentFlagRequired, which hard-fails before the interactive-prompt code ever runs.
  3. cmd/terraform/shared/prompt.go / pkg/flags/standard.go — the missing-stack prompt's component-filter was hardcoded to components["terraform"] (so any non-terraform component always matched zero stacks and fell back to an unfiltered, org-wide list), and the flag prompt ran before the positional-arg prompt, so the filter never saw the component name even when one had already been typed.
  4. pkg/provenance/data_transform.gofilterEmptySections treated "no per-key provenance recorded" as "this section is empty," silently dropping any top-level section populated as a plain value rather than merged key-by-key (reproduces for any component type, e.g. a terraform component's settings/hooks).

Why

Found via a real-AWS field-test pass on the (currently unmerged) aws/cloudformation feature stack. All four bugs are general Atmos behavior unrelated to CloudFormation itself, so they ship here independently rather than waiting on that stack to merge.

References

  • docs/fixes/2026-09-09-error-callout-gradient-two-tone.md
  • docs/fixes/2026-09-09-missing-stack-prompt-not-firing.md
  • docs/fixes/2026-09-09-cfn-describe-component-missing-fields.md

Summary by CodeRabbit

  • New Features

    • Interactive prompts now help resolve missing stack values when running describe component.
    • Stack suggestions now include components from all supported component types, not only Terraform.
    • Interactive prompts resolve required positional arguments before dependent flag suggestions.
  • Bug Fixes

    • Provenance output now preserves non-empty CloudFormation component fields.
    • Short error callouts now use smoother gradients, while longer callouts retain full gradient coloring.
    • Interactive mode is enabled by default in eligible terminal sessions.
fix(helm): carry `create_namespace` through the stack processor @aknysh (#3134) ## what
  • Fix the native-Helm create_namespace setting (added in #3034) being silently dropped by the stack processor, so create_namespace: false had no effect.
  • The stack processor carries only a fixed whitelist of native-Helm fields into the resolved component config, and create_namespace was not on it — so the key was stripped before it reached the Helm executor. atmos describe stacks --sections create_namespace returned {}, and the default of true always won.
  • Add create_namespace to the per-component whitelist (helmComponentSectionKeys) and the stack-level helm: defaults whitelist (helmLifecycleSectionKeys), plus a HelmCreateNamespaceSectionName constant, regression + precedence tests, and a fix doc.

why

  • create_namespace: false validated fine (the JSON schema already accepted it) but was invisible in the resolved config and never reached helm apply. The JSON schema and the stack processor's runtime whitelist are two independent lists; #3034 updated the schema but not the whitelist — hence "validates fine, shows up nowhere."
  • Without the fix, an identity scoped to a single, pre-existing namespace still forced a namespace create (Helm issues the create request before the already-exists check applies), which fails with a 403 — exactly the case create_namespace: false was meant to solve. Reported by a customer on Atmos 1.228.0.
  • Backward compatible: the default remains true; only components that explicitly set create_namespace: false change behavior.

Root cause

PR #3034 wired the reader side of the toggle — resolveCreateNamespace / boolFieldDefault in pkg/component/helm/values.go, the CreateNamespace field on chartSpec, the install-action plumbing in pkg/component/helm/client.go, and the JSON schemas — but never wired it through the stack processor. extractHelmComponentSection (internal/exec/stack_processor_process_stacks_helpers_extraction.go) copies only keys in helmComponentSectionKeys; any unrecognized key (including create_namespace) was dropped before the resolved section reached buildChartSpec, so the reader fell back to its true default.

Fix

  • pkg/config/const.go: add HelmCreateNamespaceSectionName = "create_namespace".
  • internal/exec/stack_processor_process_stacks_helpers_extraction.go:
    • add cfg.HelmCreateNamespaceSectionName to helmComponentSectionKeys (core fix — per-component, flows through base-component inheritance and into the final component config);
    • add it to helmLifecycleSectionKeys so it can also be set once as a stack-level helm: default and apply to every Helm component.
  • internal/exec/stack_processor_process_stacks_helpers_test.go: TestExtractHelmComponentSectionCreateNamespace.
  • internal/exec/stack_processor_merge_test.go: TestMergeComponentConfigurations_CreateNamespacePrecedence.
  • docs/fixes/2026-09-11-helm-create-namespace-stack-processor-drop.md: fix record.

Precedence (this PR)

Where Precedence Use case
component field (helmComponentSectionKeys) wins per-release opt-out
stack-level helm: default (helmLifecycleSectionKeys) weaker — a component can override it convenience default across components

Testing

The concern was to prove create_namespace reaches the Helm SDK install action end-to-end (native Helm uses action.Install, not the helm binary), not just that it survives the whitelist. Every link was traced and verified.

# Stage Carries create_namespace? How verified
1 Stack manifest YAML JSON schema accepts it (#3034)
2 Stack processor extractHelmComponentSection (fix) new unit test; added to helmComponentSectionKeys
3 Merge → flatten into component map (stack_processor_merge.go) comp[key]=value over finalComponentHelm; TestMergeComponentConfigurations_CreateNamespacePrecedence
4 Resolved stacks map (read by describe stacks) ran the built binary — see below
5 processComponentConfiginfo.ComponentSection utils.go:310 copies the whole component map wholesale (no helm sub-filter)
6 Template + YAML-function round-trips round-trip type is AtmosSectionMapType = map[string]any (generic map — no typed-struct drop)
7 buildChartSpec / resolveCreateNamespace reads it TestBuildChartSpec_CreateNamespacePropagates (default-true and explicit-false)
8 newInstallClient: client.CreateNamespace = spec.CreateNamespace TestNewInstallClient_WiresCreateNamespace
9 Helm SDK install action honors it TestApplyRelease_CreateNamespaceControlsNamespaceCreate (recording kube client asserts namespace create only fires when true)

Two traps specifically ruled out:

  • Typed-struct drop: schema.Helm (the struct) is only the global components.helm: type defaults (base_path, plugins, repositories…). The per-component section travels as map[string]any and is never unmarshaled through a typed struct that would silence unknown keys. The template/YAML re-conversions use map[string]any.
  • Second whitelist: describe stacks uses its own extractDescribeComponentSections, but that only pulls named sub-sections; it passes top-level scalar keys through (proof: namespace, also not in that struct, already appears in output).

Empirical run (built from this branch, against a copy of examples/helm with create_namespace: false added to the demo component):

$ atmos describe stacks -s dev --components demo --component-types helm --sections create_namespace
dev:
  components:
    helm:
      demo:
        create_namespace: false     # ← was {} before the fix

That output comes from the same resolved component map the executor feeds to buildChartSpec; steps 7–9 carry it the rest of the way to client.CreateNamespace = false.

Automated tests + coverage (all pass):

  • go test ./internal/exec/ -run TestExtractHelmComponentSectionCreateNamespace — fails on the pre-fix whitelist (reproduces the drop), passes after the fix.
  • go test ./internal/exec/ -run TestMergeComponentConfigurations_CreateNamespacePrecedence — component value wins over stack default; stack default applies when the component is unset.
  • Coverage of the changed functions: extractHelmComponentSection, extractHelmLifecycleSection, extractHelmOverrideSection 100%; mergeComponentConfigurations 97.6%.
  • go test ./internal/exec/ -run 'Helm', plus the full ./internal/exec/ suite; go test ./pkg/component/helm/... ./pkg/config/....
  • go build ./...; gofumpt clean.

references

  • Fixes the field added in #3034 (Add create_namespace setting to native Helm components).
  • Docs: Helm components
  • Fix record: docs/fixes/2026-09-11-helm-create-namespace-stack-processor-drop.md

Summary by CodeRabbit

Summary by CodeRabbit

  • Bug Fixes

    • Helm’s create_namespace setting is now preserved during stack processing.
    • Component-level values take precedence over stack-level defaults.
    • Explicit true and false values flow through correctly; omitted values retain existing defaults.
    • The setting remains unsupported in Helm overrides.
  • Tests

    • Added regression coverage for extraction, lifecycle defaults, precedence, and unset values.
  • Documentation

    • Added documentation covering the issue, supported behavior, validation steps, and known limitations.
fix(ui): output-only plans no longer reported as NO CHANGES in --ui @osterman (#3121) ## what
  • The streaming terraform UI (--ui) now treats output-only plan diffs as real changes instead of reporting NO CHANGES.
  • Added DependencyTree.HasOutputChanges()/OutputChangeCount() (from plan.OutputChanges) and ResourceTracker.HasOutputChanges() (from the streamed outputs message's per-output action).
  • Wired both into the three "no changes" gates in pkg/terraform/ui/executor.go (showPlanTree, showTwoPhasePlanTree, executeWithPlanFile) and into the streaming completion summary in model_render.go.
  • RenderChangeSummaryBadges gained an OUTPUTS CHANGED badge and no longer renders NO CHANGES when only outputs changed.

why

  • atmos terraform apply <component> -s <stack> --ui silently skipped the confirmation prompt and the apply entirely when the only diff in the plan was an output value, so the new output never reached state (exit code 0, no error).
  • atmos terraform plan --ui hid the output diff completely, and atmos terraform deploy --ui (auto-approve) applied the change correctly but printed a misleading ... completed (no changes) summary.
  • All four call sites derived "has changes" purely from resource add/change/remove counts and never consulted tfjson.Plan.OutputChanges or the streamed output action field, even though that data was already being parsed and stored.
  • Added regression tests for each of the four affected code paths (tree_test.go, executor_test.go, model_test.go, resource_test.go), written first to confirm the gap before implementing the fix, per the repo's bug-fixing workflow.

references

Summary by CodeRabbit

  • Bug Fixes
    • Terraform plans that change only output values are now correctly recognized as changes.
    • Output-only changes display an “OUTPUTS CHANGED” badge instead of “NO CHANGES.”
    • Plans with both resource and output changes now show both types in the change summary.
    • Output-only changes proceed through confirmation and apply workflows correctly.
    • Completed applies with output-only changes are no longer reported as having no changes.
    • Packer variable files now resolve correctly when executing Packer commands.
fix(pro): report full logical component name in Atmos Pro uploads @goruha (#3111) ## What

Fixes two places where Atmos Pro uploads report a truncated component name for nested (path-style, slash-containing) logical component names — e.g. foo/bar/baz is reported as baz:

  1. Instance-status upload (--upload-status): uploadStatus in internal/exec/pro.go now sends info.ComponentFromArg (the full logical name) instead of info.Component (the truncated working-directory leaf).
  2. Multi-component execution record: terraformNodeHooks.recordExecResult in cmd/terraform/utils.go now passes info.ComponentFromArg into buildTerraformExecData for each per-node entry, instead of the truncated leaf.

The internal name-splitting logic that produces the truncated leaf (internal/exec/utils.go, ProcessStacks) is untouched — it's still required for Terraform working-directory resolution (components/terraform/<prefix>/<leaf>/).

Why

The original issue's proposed fix targeted only recordExecResult, but code review established that call site only fires for multi-component runs (--affected/--all/--components/--query). The issue's own repro — a single-component atmos terraform plan "foo/bar/baz" -s <stack> --upload-status — is actually caused by uploadStatus, a separate call site the original proposal didn't touch. Both are fixed here so the exact repro and the broader bug class are both resolved.

Because other identity channels (stack locks, affected-component uploads, single-component execution records) already report the full logical name, this mismatch caused Atmos Pro's approvals-page "previous plan" lookup to fail with "No previous plan found for this component" for any nested component, even though the plan ran and uploaded successfully.

A related but distinct issue — path-style CLI arguments (atmos terraform plan ./components/terraform/vpc) reporting the raw filesystem path instead of the resolved logical name in single-component execution records — was identified during review and deliberately scoped out to keep this fix minimal. Tracked in #3110.

References

  • Closes #3102
  • Follow-up: #3110
  • Full spec-kit trail: specs/003-fix-upload-component-name/ (spec, plan, research, data-model, contracts, quickstart, tasks)

Test plan

  • New regression test TestUploadStatusReportsFullComponentName (nested + flat cases) in internal/exec/pro_test.go
  • New regression test TestRecordExecResult_ReportsFullComponentNameForNestedComponent in cmd/terraform/utils_exec_metadata_test.go
  • New regression-guard test TestTerraformExecMetadataParserFunc_ReportsFullComponentNameForNestedComponent confirming the already-correct single-component parser path is unaffected
  • Both new tests confirmed failing before the fix, passing after
  • All pre-existing tests in internal/exec and cmd/terraform pass unmodified
  • Full pact consumer-contract suite (go test -tags pact ./pkg/pro/...) passes unmodified — no fixtures assumed the truncated value
  • internal/exec/utils.go (working-directory split logic) has zero diff
  • go build ./..., atmos lint --changed, atmos test, and full tests/ package all pass

Summary by CodeRabbit

  • Bug Fixes

    • Atmos Pro uploads now preserve full logical component names, including nested names such as foo/bar/baz, instead of reporting only the final segment.
    • Execution metadata and instance-status uploads now use consistent component identity information.
    • Flat component names continue to be reported unchanged.
  • Documentation

    • Added specifications and implementation guidance covering component identity, upload behavior, validation, and regression coverage.
fix(website): cast download polls render status as JSON, waits up to 30m @osterman (#3115) ## what
  • Rewrote the Atmos Pro cast-download polling flow (CastProArtifact/useCastArtifact.ts) to poll the render-status endpoint with Accept: application/json instead of the raw artifact URL, and to treat only a genuine 200 response as "ready" — never response.ok on any 2xx.
  • Extracted the polling state machine into a new framework-agnostic module, CastProArtifact/polling.mjs, with a companion polling.test.mjs covering the queued→rendering→ready path, an immediate-ready response, terminal errors, the slowdown threshold, the wait ceiling, a hung fetch, and cancellation.
  • Raised the total wait budget from a hard 60s to 30 minutes, polling every 3s and slowing to every 10s past 13 minutes elapsed, with a "still rendering, try again later" message instead of a false failure at the ceiling.
  • Updated CastProDownload to show "Queued…"/"Rendering… m:ss" (with a "taking longer than usual" hint) and an optional progress bar, and updated CastProArtifact/README.md to document the render service's actual JSON/200/202/500 contract and the new polling cadence.

why

  • Downloading a cast that hadn't finished rendering yet redirected the reader to a blank page reading "Cast artifact is not ready yet." instead of keeping them on the page.
  • The old polling logic asked for the raw artifact and accepted any 2xx as "ready," so a still-rendering response could be misread as done; separately, its 60s wait cap was far below real render times (casts can take several minutes, with queueing up to ~30 minutes worst case), so even correctly-detected renders gave up too early.

references

  • N/A

Summary by CodeRabbit

  • New Features

    • Added clearer rendering status updates with queued and processing phases, elapsed time, progress stages, and visual progress indicators.
    • Added immediate readiness detection and automatic navigation to artifact downloads.
    • Rendering checks poll every 3 seconds, slow after 13 minutes, and stop after 30 minutes.
    • Added support for legacy artifact responses and clearer network, rendering, and terminal error messages.
    • Improved progress-bar accessibility with status announcements and percentage information.
  • Documentation

    • Updated service documentation covering polling responses, artifact metadata, errors, and download behavior.
fix: terraform --all bootstrap, list-command lazy eval, init/UI polish @osterman (#3095) ## what
  • atmos terraform apply --all no longer aborts before the scheduler runs anything, on a fresh environment where a dependent component's !terraform.state/!terraform.output reference points at a component that hasn't been applied yet (e.g. audit-trail reading kms's key_arn before kms has run). This does not skip or fake the value: the preflight's unresolved placeholder is discarded and never reaches Terraform. Each component still independently re-describes and re-resolves its own vars from scratch immediately before its own plan/apply — by which point, in a correctly-ordered dependency graph, kms has already applied and !terraform.state reads the real value.
  • atmos list stacks/list components/list instances now skip evaluating Go templates (atmos.Component, atmos.GomplateDatasource) and YAML functions (!terraform.state, !terraform.output, !store) for stack/component sections that no displayed column actually reads. Previously every value was resolved eagerly regardless of the requested columns, which produced a spurious "N value(s) could not be determined and are shown as (computed)" warning for values that were never shown, and could take 30s–6+ minutes on stacks that use !terraform.output/atmos.Component in vars — even though list stacks only ever displays stack names by default. Closes #3068.
  • The atmos init "Select a template" picker now sizes its columns to the real terminal width instead of hard-coded widths, so long descriptions truncate cleanly at a word boundary instead of splitting mid-word onto a stray line.
  • Under --ui, the after-init providers lock step (triggered by an active registry/plugin cache) now streams through the same init spinner as terraform init/plan/apply, instead of dumping raw provider-fetch/checksum output into the middle of the fancy UI.
  • Wrapped continuation lines of bullet and ordered markdown lists (rendered in the terminal, e.g. a scaffold README shown by atmos init) are now indented to align under the item's own text instead of falling flush with the bullet/number.

why

  • The --all preflight only exists to build the dependency graph and validate config before the scheduler starts — it's built purely from static dependencies/settings.depends_on, never from resolved vars. But it previously resolved !terraform.state/!terraform.output for every component strictly, so an unprovisioned dependency (normal and expected on a fresh AWS landing-zone environment: kmsaudit-trail/baseline/monitoring) aborted the entire run before a single component was applied. Since the preflight's resolved value for this one recoverable error class is never used for anything but graph construction — and every node re-resolves its own vars fresh, for real, immediately before its own apply — degrading (not failing on) this specific error class during preflight (reusing the existing --error-mode=warn machinery) is safe and unblocks the documented apply --all bootstrap flow. Other error classes (e.g. a missing !secret) are unaffected and still fail the preflight as before.
  • The describe-stacks pipeline behind list stacks/list components/list instances resolved every section of every component before column projection ever happened, regardless of whether any column would display the result. A new opt-in evaluation-scope filter (evalSections, deliberately separate from the existing output-only sections filter used by describe stacks --sections=X, so that command's behavior is untouched) is derived from the resolved column set and threaded through both the Go-template render pass and YAML-function resolution, falling back to full eager evaluation whenever the column templates can't be statically proven safe to skip.
  • The template picker's fixed column widths didn't account for actual terminal width or content length, producing broken wrapping on normal-size terminals.
  • The providers lock hook ran through a raw shell call that bypassed the streaming TUI entirely, so its output leaked raw into an otherwise fully---ui-rendered run.
  • Glamour renders an entire markdown list into one shared buffer, word-wraps it as a single blob, and applies one uniform block-level margin to every resulting line, with no concept of a hanging indent for wrapped continuation lines.

references

🤖 Automatic Updates

chore(deps): update dependency posthog-js to v1.418.1 @[renovate[bot]](https://github.com/apps/renovate) (#2954) This PR contains the following updates:
Package Change Age Confidence
posthog-js (source) 1.409.51.418.1 age confidence

Release Notes

PostHog/posthog-js (posthog-js)

v1.418.1

Compare Source

1.418.1

Patch Changes
  • #​4549 0599fe0 Thanks @​ablaszkiewicz! - Recognise Firefox and Safari extension frames when filtering extension exceptions, and stop counting Safari's masked webkit-masked-url:// frames as in-app code.
    (2026-08-18)
  • Updated dependencies [0599fe0]:

v1.418.0

Compare Source

1.418.0

Minor Changes
  • #​4496 1ade666 Thanks @​marandaneto! - Add cookieWinsOnConflict to keep shared cross-subdomain identity and session state ahead of stale per-origin localStorage, deprecate __preview_cookie_wins_on_conflict, and enable the new behavior for the 2026-08-29 defaults.
    (2026-08-18)
Patch Changes

v1.417.4

Compare Source

1.417.4

Patch Changes
  • #​4509 8d74821 Thanks @​ksvat! - Take a full snapshot when session recording wakes from idle if DOM mutations were dropped while idle, so replay no longer shows duplicated or overlapping DOM after an idle period.
    (2026-08-17)

v1.417.3

Compare Source

1.417.3

Patch Changes

v1.417.2

Compare Source

1.417.2

Patch Changes
  • #​4413 7b61aa4 Thanks @​posthog! - Fix error tracking coercion reporting the wrong exception type for non-Error objects (e.g. TypeError, ReferenceError) that are thrown by browser extensions or other cross-realm code. Previously these always reported as type Error, burying the real type in the message string. Also fixed a local isError helper shadowing the more robust cross-realm-aware implementation, which caused some errors thrown from iframes or extension isolated worlds to be misclassified.
    (2026-08-17)
  • Updated dependencies [7b61aa4]:

v1.417.1

Compare Source

1.417.1

Patch Changes
  • #​4521 0a0206f Thanks @​marandaneto! - Normalize capture timestamp overrides to equivalent UTC ISO strings in the browser and Node.js SDKs and shared core.
    (2026-08-14)

  • #​4523 6230b5b Thanks @​marandaneto! - Prevent swallowed rrweb observer initialization errors from breaking session replay teardown and subsequent recorder restarts.
    (2026-08-14)

  • #​4503 eb05237 Thanks @​pauldambra! - fix(dead-clicks): treat visibility and focus changes as liveness signals, not dead-click evidence

    The dead-click detector treated a visibilitychange as evidence a click was dead: it measured Math.abs(clickTimestamp - lastVisibilityChange) and, once that exceeded the threshold, timed the click out as dead. Because it only recorded the tab becoming visible, any click in a session where the tab had ever been backgrounded (median gap ~1 minute) was flagged.

    A visibility or focus change near a click is the opposite — a sign the click did something (it woke/focused the tab, opened a new tab, or opened a new window/popup) — so these signals now only ever suppress a dead click, never cause one:

    • Visibility changes are recorded in both directions (a click that opens a new tab sends the current tab to hidden), and a window focus/blur observer is added, since a click that opens a new window/popup may leave the tab visible and only surface as the current window losing focus.
    • A click within a wake-up/interaction window (1s, wide enough for a real "tab back, then click" gesture) of any such change is suppressed.
    • The visibility signal no longer feeds the dead-marking path at all. $dead_click_visibility_changed_timeout stays in the payload (always false) for shape compatibility, and a new $dead_click_focus_changed_delay_ms is emitted for observability.
    • Visibility/focus changes are now recorded onto each queued candidate the instant they fire (like scroll), instead of being read from a single shared timestamp when the click is checked ~1s later. A click that hides or blurs the tab (opening a new tab/window) suspends that check while the tab is backgrounded; by the time it resumes the tab has usually returned, and the shared timestamp would have been overwritten by that later transition — losing the click-correlated one and wrongly flagging the click dead. Stamping the candidate as the event fires makes delayed hide→show and blur→focus sequences suppress correctly. (2026-08-14)
  • Updated dependencies [0a0206f, eb05237]:

v1.417.0

Compare Source

1.417.0

Minor Changes
  • #​4485 8bc63c3 Thanks @​dustinbyrne! - Default external dependency loading to versioned asset paths with automatic fallback to legacy paths, and add a strict_script_versioning: 'fallback' mode.
    (2026-08-13)
Patch Changes

v1.416.1

Compare Source

1.416.1

Patch Changes
  • #​4443 b2c6830 Thanks @​arnohillen! - Harden the session replay stylesheet inlining budget (inlineStylesheetBudgetRules):

    • The default budget (10,000 rules) moves from the recorder chunk into posthog-js session recording options, so npm-pinned or cached bundles keep their configured override (including 0 to disable) and direct rrweb.record() consumers keep unbounded inlining unless they opt in.
    • Deferred inlining is bounded inside a sheet: a resumable cursor stringifies 200 rules per idle slice and emits a sheet's _cssText atomically, so monolithic sheets no longer produce one long task and partial CSS never reaches the wire.
    • Deferred sheets are flushed synchronously when recording stops and on pagehide; residual failure modes are counted via $sdk_debug_replay_deferred_stylesheets_failed / _abandoned.
    • CSSOM-only styles (insertRule output, adoptedStyleSheets) no longer charge the budget, since deferring <link> sheets buys those pages nothing.
    • Telemetry fixes: full-snapshot duration wraps the whole synchronous task, deferred counts are cumulative per session, new gauges cover non-deferrable rules and idle stringification cost, and duration samples straddling tab suspension are discarded ($sdk_debug_replay_discarded_duration_samples). (2026-08-13)
  • Updated dependencies [c9086de, b2c6830]:

v1.416.0

Compare Source

1.416.0

Minor Changes
  • #​4495 e4b9947 Thanks @​marandaneto! - feat(browser): add rewriteRequestPath to customize API, feature flag, and asset paths for reverse proxies
    (2026-08-12)

  • #​4493 e34ebf9 Thanks @​marandaneto! - Add reset options for applying bootstrapped identity, feature flag, and session values after posthog.reset() while preserving the legacy boolean argument.
    (2026-08-12)

Patch Changes

v1.415.7

Compare Source

1.415.7

Patch Changes
  • #​4318 847d963 Thanks @​dustinbyrne! - Migrate browser feature flags to the shared extension lifecycle while preserving the public feature flag facade, persistence compatibility, request behavior, and event enrichment.
    (2026-08-12)

v1.415.6

Compare Source

1.415.6

Patch Changes
  • #​4500 d773405 Thanks @​ksvat! - Fix session recording starting from arbitrarily old persisted configs.

    Recording configs persisted by SDK versions before 1.347.2 carry no cache_timestamp. The core freshness check treated these undated configs as always fresh, so the recorder started immediately under their settings. A device whose stored config predated a customer's config change kept recording under the old triggers, sample rate, and masking settings indefinitely.

    The core now treats undated persisted configs as stale. Recording waits for a fresh remote config before it starts, the same path every dated config older than one hour already takes. The lazy recorder bundle is unchanged: it still accepts undated configs, because old cores that load the latest bundle cannot recover from a rejected config (INC-749). (2026-08-11)

v1.415.5

Compare Source

1.415.5

Patch Changes
  • #​4497 d62e42e Thanks @​hpouillot! - Fix a Chrome renderer crash (grey "Aw, Snap" tab) that could occur when closing an in-app survey.

    The survey close path wrapped the survey container's DOM removal in document.startViewTransition. Removing the element inside the transition callback left the captured snapshot pointing at a removed node, which on heavy SPAs triggered a Chromium renderer crash and took down the whole tab.

    The close path now only animates a fade-out inside the transition and lets React tear the container down once the transition settles. It also guards against overlapping transitions (a second close while one is animating) and always settles the popup state if the transition is skipped or interrupted, so the survey can never be left visible with a stale reference. (2026-08-11)

v1.415.4

Compare Source

1.415.4

Patch Changes

v1.415.3

Compare Source

1.415.3

Patch Changes
  • #​4488 23db844 Thanks @​TueHaulund! - fix(replay): never ship a buffer swapped in by a re-entrant session rotation mid-flush
    (2026-08-11)

  • #​4474 e06bf52 Thanks @​dependabot! - dependencies updates: - Updated dependency dompurify@^3.4.13 ↗︎ (from ^3.4.12, in dependencies) (2026-08-11)

  • #​4435 1cbbe6a Thanks @​arnohillen! - fix(replay): stop dropping adopted stylesheets that arrive before the host's shadow root is attached. When the recorder's full snapshot races a web component's hydration, the AdoptedStyleSheet event can be recorded before the mutation that attaches the host's shadow root. The replayer silently dropped those styles for the rest of the page view, so components styled via shadowRoot.adoptedStyleSheets (Stencil, Lit) rendered completely unstyled. The replayer now constructs the stylesheet even when the shadow root does not exist yet and keeps retrying adoption until it is attached.
    (2026-08-11)

v1.415.2

Compare Source

1.415.2

Patch Changes

v1.415.1

Compare Source

1.415.1

Patch Changes

v1.415.0

Compare Source

1.415.0

Minor Changes
  • #​4436 80f15a3 Thanks @​jakesciotto! - feat(surveys): optional intro screen shown before the first question

    Surveys can now display an intro screen before question 1, configured via the new
    displayIntroScreen, introScreenHeader, introScreenDescription,
    introScreenDescriptionContentType, and introScreenButtonText appearance fields.
    The intro is dismissed with a button and records no response, does not affect
    completion or partial-response metrics, does not re-fire "survey shown", and is
    skipped when a survey is resumed with answers in progress. Intro copy is
    translatable like the thank-you message. renderSurveysPreview accepts
    previewPageIndex: -1 (exported as INTRO_SCREEN_PREVIEW_INDEX) to preview the
    intro screen. (2026-08-10)

Patch Changes

v1.414.0

Compare Source

1.414.0

Minor Changes
  • #​4330 5bd8b83 Thanks @​darkopia! - Add posthog.conversations.getUnavailableReason() to expose why the conversations API is unavailable (bundle blocked/failed to load, disabled in project, remote config pending/failed, still initializing, …) instead of collapsing every case into isAvailable() === false. Lets callers that fall back to another channel record the specific cause. ConversationsUnavailableReason is exported from the package entry points, so consumers can name the type.
    (2026-08-07)

v1.413.3

Compare Source

1.413.3

Patch Changes
  • #​4414 1b88c2f Thanks @​marandaneto! - Clear properties registered for a session when the PostHog session rotates.
    (2026-08-06)

  • #​4374 b39b577 Thanks @​dustinbyrne! - Persist in-place object and array mutations when properties are re-registered.
    (2026-08-06)

  • #​4434 75fb719 Thanks @​arnohillen! - Make the session replay attribute masking options mutually exclusive: when both maskAllElementAttributes and maskAttributeFn are set, the coarse option wins and the callback is ignored (with a console warning), so a callback can no longer accidentally unmask what maskAllElementAttributes hides.
    (2026-08-06)

  • Updated dependencies [64ba193, 75fb719]:

v1.413.2

Compare Source

1.413.2

Patch Changes
  • #​4425 ee7fab0 Thanks @​posthog! - Fix a benign network failure (e.g. TypeError: Failed to fetch) in the async native-gzip request path surfacing as an unhandled promise rejection, which exception autocapture would otherwise pick up
    (2026-08-05)

v1.413.1

Compare Source

1.413.1

Patch Changes
  • #​4390 1160403 Thanks @​posthog! - Contain and log recorder-owned callback failures while preserving exceptions from patched native host APIs. Keep recording mutations from adopted cross-realm nodes.
    (2026-08-05)

  • #​4286 d108d66 Thanks @​posthog! - fix(replay): preserve privacy masking for initial network metadata

    Initial navigation and performance-timing entries are now passed through maskCapturedNetworkRequestFn, including when they have no method. URL rewrites are respected. When the callback returns nullish for an initial entry, replay-required timing metadata is retained without its URL, headers, or body so method-gated callbacks do not drop the metadata or expose deliberately filtered customer data. Derived server-timing entries are also suppressed when this strict fallback is used. Enforced PostHog filtering and payload cleaning still run first. (2026-08-05)

  • Updated dependencies [d108d66]:

v1.413.0

Compare Source

1.413.0

Minor Changes
  • #​4376 2da12b8 Thanks @​posthog! - Add attribute-level masking to session replay: maskAttributeFn provides per-attribute control over the final serialized value, while maskAllElementAttributes masks all source DOM string attributes (including rendering attributes and synthesized form values) at the cost of replay fidelity.
    (2026-08-05)
Patch Changes

v1.412.2

Compare Source

1.412.2

Patch Changes
  • #​4417 3acadfe Thanks @​marandaneto! - fix(replay): discard held interaction-less recordings when a background document unloads without ever becoming visible
    (2026-08-05)

v1.412.1

Compare Source

1.412.1

Patch Changes

v1.412.0

Compare Source

v1.411.0

Compare Source

1.411.0

Minor Changes
  • #​4266 43d1850 Thanks @​posthog! - feat: add opt-in capture_performance.__preview_web_vitals_soft_navs to fix inflated web vitals on single-page apps

    Client-side route changes in SPAs previously left web vitals (LCP especially) accumulating against the original hard-navigation timestamp, inflating the top tail of Core Web Vitals. Setting capture_performance: { __preview_web_vitals_soft_navs: true } now scopes metrics to the browser's Soft Navigation entries so each route change starts a fresh measurement window. It's a preview option because it relies on Chrome's experimental Soft Navigation Detection API and loads pinned stable web-vitals 6.x callbacks; when disabled (the default), the existing web-vitals 5.x behavior remains unchanged. (2026-08-04)

Patch Changes
  • #​4287 d3c4538 Thanks @​posthog! - Keep $referring_domain and canonical utm_*/campaign parameters on minimal $feature_flag_called events. Previously the minimal allowlist stripped every campaign parameter, so a flag-called event landing first in a session could set the session's UTM attribution and channel type to NULL in web analytics.
    (2026-08-04)
  • Updated dependencies [d3c4538, 43d1850]:

v1.410.10

Compare Source

1.410.10

Patch Changes
  • #​4271 3d4e2fd Thanks @​felipeatom! - Fix inline surveys rendering an empty container when a stale persisted question index (left over from a prior completion) points past the last question. When the persisted index is out of range the whole in-progress record is now discarded and the survey starts fresh, instead of clamping the index while keeping the equally-stale responses and visited indices. Restored visited indices are also filtered to valid questions so the Back button can never navigate to a non-existent question and re-empty the container.
    (2026-08-04)

  • #​4412 5f2b78a Thanks @​TueHaulund! - fix(replay): hold fresh interaction-less session recordings until there is evidence someone cares

    A tab that loads but never sees any user interaction (prefetched pages, background tabs, in-app browser preloads) no longer ships a billable recording while it sits untouched. Like rotation-born sessions, a fresh recording epoch is held until there is evidence someone cares about it: a user interaction, an event trigger match, or an explicit override (posthog.startSessionRecording(...)) releases the hold and ships the buffer on the normal flush cadence, so released recordings are playable from the session's start. A clean unload also ships a fresh-start hold, so passive visits (reading, watching a video) are still captured exactly as before; rotation-born holds are discarded on unload as before. A held buffer that reaches the size cap is dropped to bound memory, and a later release takes a fresh full snapshot so the recording resumes playable. (2026-08-04)

  • #​4410 064874a Thanks @​ioannisj! - Fix held rotation-born session replay buffers not flushing when a V2 event trigger matches
    (2026-08-04)

  • #​4343 83a9b67 Thanks @​arnohillen! - Session replay no longer freezes the page re-encoding base64 images that are already small. When canvas recording is enabled, every <img> with a data: URL was synchronously redrawn and re-encoded through canvas.toDataURL during full snapshots and attribute mutations. The encode cost scales with pixel dimensions, not payload size, so a page of base64 lazy-load placeholders (measured: 18 images of 4096x3072 at ~33KB each) blocked the main thread for 7+ seconds to produce outputs that were larger than the inputs. Recompression now skips data URLs under 100KB (where it cannot save meaningful payload), keeps the original when the re-encoded output is not smaller, and memoizes by input so repeated snapshots and src-swapping mutations never pay for the same image twice. Genuinely large base64 images are still recompressed as before.
    (2026-08-04)

  • #​4339 f865818 Thanks @​posthog! - Report privacy-aware dropped-event count, page and session context in the client rate limit warning
    (2026-08-04)

  • Updated dependencies [f865818]:

v1.410.9

Compare Source

1.410.9

Patch Changes
  • #​4314 feb9e2a Thanks @​posthog! - fix: warn when reset() silently opts the user back out

    reset() clears stored consent along with the rest of the user's state. With opt_out_capturing_by_default, this returns the instance to the opted-out default, so calling reset() after opt_in_capturing() would stop capturing without warning. It now logs a warning when that happens and documents the required ordering. (2026-08-04)

  • #​4288 877418e Thanks @​posthog! - Fix event-triggered survey popup delays resetting on every page navigation. The popup delay now resumes from when the trigger fired (persisted for the session) instead of restarting a fresh countdown on each page load, so a survey configured with an event/action trigger and a popup delay no longer gets lost when the user navigates before the delay elapses.
    (2026-08-04)

  • Updated dependencies [feb9e2a]:

v1.410.8

Compare Source

1.410.8

Patch Changes
  • #​4402 a31bd1e Thanks @​NVolcz! - Publish TypeScript declarations for browser extension entrypoints under their public dist paths.
    (2026-08-04)

v1.410.7

Compare Source

1.410.7

Patch Changes
  • #​4400 9811a43 Thanks @​marandaneto! - Avoid promoting handled transport failures to error logs in surveys, product tours, remote config, conversations, and logs while preserving error severity for HTTP and unexpected failures.
    (2026-08-04)

v1.410.6

Compare Source

1.410.6

Patch Changes
  • #​4407 6d5e314 Thanks @​ioannisj! - Fix session replay shipping one billable recording per session rotation for tabs the user never interacts with. A session born from an idle rotation now holds its buffer until the first user interaction, then ships a recording playable from the session's start; without interaction nothing is sent — a further rotation, stop, opt-out, or page unload discards the held data instead of shipping it. An event trigger match (for example record-on-exception) also releases the hold, since it is explicit intent to record the session.
    (2026-08-03)

v1.410.5

Compare Source

1.410.5
Patch Changes
  • #​4273 8ec3499 Thanks @​felipeatom! - Fix selector-widget surveys being abruptly removed while open when their trigger element is unmounted from the DOM (e.g. a dropdown or menu that hosts the trigger closes). The survey is now kept in place while open and only torn down once the user has closed it. Also fixes a related leak where, if the selector resolved to a different element while the survey was open, the old element's click listener was never removed and kept dispatching the show-widget event for the lifetime of the page.
    (2026-08-03)

v1.410.4

Compare Source

v1.410.3

Compare Source

1.410.3

Patch Changes
  • #​4399 662fb4c Thanks @​christiaan-ph! - Conversations widget: bullet and numbered lists in a support reply now keep their markers on host pages with an aggressive CSS reset (for example Tailwind preflight's ol, ul { list-style: none }). The widget renders into the host page's DOM, so the list style is now set inline on <ul>, <ol>, and <li> rather than left to the page's own styles.
    (2026-08-03)

v1.410.2

Compare Source

v1.410.1

Compare Source

1.410.1

Patch Changes

v1.410.0

Compare Source

1.410.0

Minor Changes
  • #​4125 fde7145 Thanks @​DerGeraetK! - Add session_recording.sampling to disable or throttle mousemove capture (and optionally mouseInteraction) in session replay. Canvas recording now merges its canvas sampling with user-provided sampling instead of overwriting it.
    (2026-08-03)
Patch Changes

v1.409.6

Compare Source

1.409.6

Patch Changes
  • #​4299 8a7bb3f Thanks @​posthog! - Mark our bundles as third-party code in the source maps we publish (the x_google_ignoreList extension). Browser devtools now attribute console.* messages to the code that called them instead of to posthog-js's console wrapper, which previously showed every message as coming from logs.ts when captureConsoleLogs or session replay's enable_recording_console_log was enabled.
    (2026-08-03)
  • Updated dependencies [7c3a9af]:

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

chore(deps): update floci/floci-gcp docker digest to 102db65 @[renovate[bot]](https://github.com/apps/renovate) (#2691) This PR contains the following updates:
Package Type Update Change
floci/floci-gcp service digest a6420f3102db65

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

chore(deps): update floci/floci-az docker digest to 5e403a7 @[renovate[bot]](https://github.com/apps/renovate) (#2648) This PR contains the following updates:
Package Type Update Change
floci/floci-az service digest 1e514c55e403a7

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

chore(deps): update floci/floci docker digest to d2ecc80 @[renovate[bot]](https://github.com/apps/renovate) (#2606) This PR contains the following updates:
Package Type Update Change
floci/floci service digest c88ec20d2ecc80

[!WARNING]
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

fix(deps): update module github.com/getsops/sops/v3 to v3.13.3 @[renovate[bot]](https://github.com/apps/renovate) (#3085) This PR contains the following updates:
Package Change Age Confidence
github.com/getsops/sops/v3 v3.13.1v3.13.3 age confidence

Release Notes

getsops/sops (github.com/getsops/sops/v3)

v3.13.3

Compare Source

Installation

To install sops, download one of the pre-built binaries provided for your platform from the artifacts attached to this release.

For instance, if you are using Linux on an AMD64 architecture:

# Download the binary
curl -LO https://github.com/getsops/sops/releases/download/v3.13.3/sops-v3.13.3.linux.amd64

# Move the binary in to your PATH
mv sops-v3.13.3.linux.amd64 /usr/local/bin/sops

# Make the binary executable
chmod +x /usr/local/bin/sops
Verify checksums file signature

The checksums file provided within the artifacts attached to this release is signed using Cosign with GitHub OIDC. To validate the signature of this file, run the following commands:

# Download the checksums file, certificate and signature
curl -LO https://github.com/getsops/sops/releases/download/v3.13.3/sops-v3.13.3.checksums.txt
curl -LO https://github.com/getsops/sops/releases/download/v3.13.3/sops-v3.13.3.checksums.sigstore.json

# Verify the checksums file
cosign verify-blob sops-v3.13.3.checksums.txt \
  --bundle sops-v3.13.3.checksums.sigstore.json \
  --certificate-identity-regexp=https://github.com/getsops \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com
Verify binary integrity

To verify the integrity of the downloaded binary, you can utilize the checksums file after having validated its signature:

# Verify the binary using the checksums file
sha256sum -c sops-v3.13.3.checksums.txt --ignore-missing
Verify artifact provenance

The SLSA provenance of the binaries, packages, and SBOMs can be found within the artifacts associated with this release. It is presented through an in-toto link metadata file named sops-v3.13.3.intoto.jsonl. To verify the provenance of an artifact, you can utilize the slsa-verifier tool:

# Download the metadata file
curl -LO  https://github.com/getsops/sops/releases/download/v3.13.3/sops-v3.13.3.intoto.jsonl

# Verify the provenance of the artifact
slsa-verifier verify-artifact <artifact> \
  --provenance-path sops-v3.13.3.intoto.jsonl \
  --source-uri github.com/getsops/sops \
  --source-tag v3.13.3

Container Images

The sops binaries are also available as container images, based on Debian (slim) and Alpine Linux. The Debian-based container images include any dependencies which may be required to make use of certain key services, such as GnuPG, AWS KMS, Azure Key Vault, and Google Cloud KMS. The Alpine-based container images are smaller in size, but do not include these dependencies.

These container images are available for the following architectures: linux/amd64 and linux/arm64.

GitHub Container Registry
  • ghcr.io/getsops/sops:v3.13.3
  • ghcr.io/getsops/sops:v3.13.3-alpine
Quay.io
  • quay.io/getsops/sops:v3.13.3
  • quay.io/getsops/sops:v3.13.3-alpine
Verify container image signature

The container images are signed using Cosign with GitHub OIDC. To validate the signature of an image, run the following command:

cosign verify ghcr.io/getsops/sops:v3.13.3 \
  --certificate-identity-regexp=https://github.com/getsops \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \
  -o text
Verify container image provenance

The container images include SLSA provenance attestations. For more information around the verification of this, please refer to the slsa-verifier documentation.

Software Bill of Materials

The Software Bill of Materials (SBOM) for each binary is accessible within the artifacts enclosed with this release. It is presented as an SPDX JSON file, formatted as <binary>.spdx.sbom.json.

What's Changed

New Contributors

Full Changelog: getsops/sops@v3.13.2...v3.13.3

v3.13.2

Compare Source

Installation

To install sops, download one of the pre-built binaries provided for your platform from the artifacts attached to this release.

For instance, if you are using Linux on an AMD64 architecture:

# Download the binary
curl -LO https://github.com/getsops/sops/releases/download/v3.13.2/sops-v3.13.2.linux.amd64

# Move the binary in to your PATH
mv sops-v3.13.2.linux.amd64 /usr/local/bin/sops

# Make the binary executable
chmod +x /usr/local/bin/sops
Verify checksums file signature

The checksums file provided within the artifacts attached to this release is signed using Cosign with GitHub OIDC. To validate the signature of this file, run the following commands:

# Download the checksums file, certificate and signature
curl -LO https://github.com/getsops/sops/releases/download/v3.13.2/sops-v3.13.2.checksums.txt
curl -LO https://github.com/getsops/sops/releases/download/v3.13.2/sops-v3.13.2.checksums.sigstore.json

# Verify the checksums file
cosign verify-blob sops-v3.13.2.checksums.txt \
  --bundle sops-v3.13.2.checksums.sigstore.json \
  --certificate-identity-regexp=https://github.com/getsops \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com
Verify binary integrity

To verify the integrity of the downloaded binary, you can utilize the checksums file after having validated its signature:

# Verify the binary using the checksums file
sha256sum -c sops-v3.13.2.checksums.txt --ignore-missing
Verify artifact provenance

The SLSA provenance of the binaries, packages, and SBOMs can be found within the artifacts associated with this release. It is presented through an in-toto link metadata file named sops-v3.13.2.intoto.jsonl. To verify the provenance of an artifact, you can utilize the slsa-verifier tool:

# Download the metadata file
curl -LO  https://github.com/getsops/sops/releases/download/v3.13.2/sops-v3.13.2.intoto.jsonl

# Verify the provenance of the artifact
slsa-verifier verify-artifact <artifact> \
  --provenance-path sops-v3.13.2.intoto.jsonl \
  --source-uri github.com/getsops/sops \
  --source-tag v3.13.2

Container Images

The sops binaries are also available as container images, based on Debian (slim) and Alpine Linux. The Debian-based container images include any dependencies which may be required to make use of certain key services, such as GnuPG, AWS KMS, Azure Key Vault, and Google Cloud KMS. The Alpine-based container images are smaller in size, but do not include these dependencies.

These container images are available for the following architectures: linux/amd64 and linux/arm64.

GitHub Container Registry
  • ghcr.io/getsops/sops:v3.13.2
  • ghcr.io/getsops/sops:v3.13.2-alpine
Quay.io
  • quay.io/getsops/sops:v3.13.2
  • quay.io/getsops/sops:v3.13.2-alpine
Verify container image signature

The container images are signed using Cosign with GitHub OIDC. To validate the signature of an image, run the following command:

cosign verify ghcr.io/getsops/sops:v3.13.2 \
  --certificate-identity-regexp=https://github.com/getsops \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \
  -o text
Verify container image provenance

The container images include SLSA provenance attestations. For more information around the verification of this, please refer to the slsa-verifier documentation.

Software Bill of Materials

The Software Bill of Materials (SBOM) for each binary is accessible within the artifacts enclosed with this release. It is presented as an SPDX JSON file, formatted as <binary>.spdx.sbom.json.

What's Changed

New Contributors

Full Changelog: getsops/sops@v3.13.1...v3.13.2


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

chore(deps): update terraform local to v2.9.1 @[renovate[bot]](https://github.com/apps/renovate) (#3118) This PR contains the following updates:
Package Type Update Change
local (source) required_provider patch 2.9.02.9.1

Release Notes

hashicorp/terraform-provider-local (local)

v2.9.1

Compare Source

NOTES:

  • Upgrade the Go toolchain to 1.26.8. (#​526)

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

chore(deps): update ghcr.io/charmbracelet/vhs:latest docker digest to b1afb4f @[renovate[bot]](https://github.com/apps/renovate) (#3089) This PR contains the following updates:
Package Type Update Change
ghcr.io/charmbracelet/vhs final digest 9d5fc3db1afb4f

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

fix(deps): update module github.com/go-git/go-billy/v5 to v5.9.1 @[renovate[bot]](https://github.com/apps/renovate) (#3090) This PR contains the following updates:
Package Change Age Confidence
github.com/go-git/go-billy/v5 v5.9.0v5.9.1 age confidence

Release Notes

go-git/go-billy (github.com/go-git/go-billy/v5)

v5.9.1

Compare Source

What's Changed

Full Changelog: go-git/go-billy@v5.9.0...v5.9.1


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Don't miss a new atmos release

NewReleases is sending notifications on new releases.