v1.229.0-rc.2
Pre-releasechore(deps): add 14-day cooldown for Renovate updates Erik Osterman (Cloud Posse) (@osterman) (#3135)
## what- Add a repo-wide
minimumReleaseAge: "14 days"cooldown torenovate.json.
why
- Renovate was opening dependency-update PRs (e.g.
floci/flociandfloci/floci-azDocker 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: 14already 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 Erik Osterman (Cloud Posse) (@osterman) (#3126)
## what- Added a
CastEmbedcomponent (website/src/components/CastEmbed/) that wrapsCastPlayerwith the existingCastShareLinkandCastProDownloadcontrols, on by default. - Added a
siteCastPath()helper toCastProArtifact/url.mjs(with a unit test) that resolves a cast's publicsrcto its committedwebsite/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, andpull-requestskills to referenceCastEmbed(with opt-out guidance viadownload={false}/share={false}) instead of bareCastPlayerfor 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
CastEmbedcomponent 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 Erik Osterman (Cloud Posse) (@osterman) (#3125)
## what- Add a default-branch
workflow_runcoordinator 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
- Follow-up to #3123
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 Erik Osterman (Cloud Posse) (@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 Erik Osterman (Cloud Posse) (@osterman) (#3094)
## what- Add Helm-compatible ephemeral
-f/--valuesand--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 valuesto 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.
- Added
-
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 Erik Osterman (Cloud Posse) (@osterman) (#3116)
## what- Adds a small package-level semaphore (
maxConcurrentSubprocesses = 4) ininternal/ci/acceptance/command.gothat caps how many real subprocesses (go build/go test -c/go test/precompiled*.test.exe)commandRunner.run/.outputmay have in flight at once, across everycommandRunnerinstance. - Refactors
testfixture_test.go'sbuildFixtureTestBinaryto route itsgo test -ccompile throughcommandRunner.outputinstead of a bareexec.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 concurrentos/execprocess 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 realgotoolchain. On a wide CI runner that lets dozens of realgo build/go testsubprocesses 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/... -vstill 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 Erik Osterman (Cloud Posse) (@osterman) (#3120)
## what- The
sops-secretsexample'ssecret-lifecyclescreengrab demoedatmos 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) viaatmos --chdir=demo/casts casts generate examples sops-secrets secret-lifecycle, which re-runs its own validation step.
why
- The
devstack 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:6379keeps the demo internally consistent with the fixture's real default for thedevstack.
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 Erik Osterman (Cloud Posse) (@osterman) (#3106)
## WhatFour general, cross-cutting bug fixes:
- 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).
- cmd/describe_component.go —
describe componentcouldn't prompt for a missing--stack; it used Cobra's nativeMarkPersistentFlagRequired, which hard-fails before the interactive-prompt code ever runs. - 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. - pkg/provenance/data_transform.go —
filterEmptySectionstreated "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'ssettings/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.mddocs/fixes/2026-09-09-missing-stack-prompt-not-firing.mddocs/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.
- Interactive prompts now help resolve missing stack values when running
-
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 Andriy Knysh (@aknysh) (#3134)
## what- Fix the native-Helm
create_namespacesetting (added in #3034) being silently dropped by the stack processor, socreate_namespace: falsehad no effect. - The stack processor carries only a fixed whitelist of native-Helm fields into the resolved component config, and
create_namespacewas not on it — so the key was stripped before it reached the Helm executor.atmos describe stacks --sections create_namespacereturned{}, and the default oftruealways won. - Add
create_namespaceto the per-component whitelist (helmComponentSectionKeys) and the stack-levelhelm:defaults whitelist (helmLifecycleSectionKeys), plus aHelmCreateNamespaceSectionNameconstant, regression + precedence tests, and a fix doc.
why
create_namespace: falsevalidated fine (the JSON schema already accepted it) but was invisible in the resolved config and never reachedhelm 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 casecreate_namespace: falsewas meant to solve. Reported by a customer on Atmos 1.228.0. - Backward compatible: the default remains
true; only components that explicitly setcreate_namespace: falsechange 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: addHelmCreateNamespaceSectionName = "create_namespace".internal/exec/stack_processor_process_stacks_helpers_extraction.go:- add
cfg.HelmCreateNamespaceSectionNametohelmComponentSectionKeys(core fix — per-component, flows through base-component inheritance and into the final component config); - add it to
helmLifecycleSectionKeysso it can also be set once as a stack-levelhelm:default and apply to every Helm component.
- add
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 | processComponentConfig → info.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 globalcomponents.helm:type defaults (base_path, plugins, repositories…). The per-component section travels asmap[string]anyand is never unmarshaled through a typed struct that would silence unknown keys. The template/YAML re-conversions usemap[string]any. - Second whitelist:
describe stacksuses its ownextractDescribeComponentSections, 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,extractHelmOverrideSection100%;mergeComponentConfigurations97.6%. go test ./internal/exec/ -run 'Helm', plus the full./internal/exec/suite;go test ./pkg/component/helm/... ./pkg/config/....go build ./...;gofumptclean.
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_namespacesetting is now preserved during stack processing. - Component-level values take precedence over stack-level defaults.
- Explicit
trueandfalsevalues flow through correctly; omitted values retain existing defaults. - The setting remains unsupported in Helm overrides.
- Helm’s
-
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 Erik Osterman (Cloud Posse) (@osterman) (#3121)
## what- The streaming terraform UI (
--ui) now treats output-only plan diffs as real changes instead of reportingNO CHANGES. - Added
DependencyTree.HasOutputChanges()/OutputChangeCount()(fromplan.OutputChanges) andResourceTracker.HasOutputChanges()(from the streamedoutputsmessage's per-outputaction). - Wired both into the three "no changes" gates in
pkg/terraform/ui/executor.go(showPlanTree,showTwoPhasePlanTree,executeWithPlanFile) and into the streaming completion summary inmodel_render.go. RenderChangeSummaryBadgesgained anOUTPUTS CHANGEDbadge and no longer rendersNO CHANGESwhen only outputs changed.
why
atmos terraform apply <component> -s <stack> --uisilently 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 --uihid the output diff completely, andatmos 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.OutputChangesor the streamed outputactionfield, 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
- Closes #3114
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 Igor Rodionov (@goruha) (#3111)
## WhatFixes 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:
- Instance-status upload (
--upload-status):uploadStatusininternal/exec/pro.gonow sendsinfo.ComponentFromArg(the full logical name) instead ofinfo.Component(the truncated working-directory leaf). - Multi-component execution record:
terraformNodeHooks.recordExecResultincmd/terraform/utils.gonow passesinfo.ComponentFromArgintobuildTerraformExecDatafor 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) ininternal/exec/pro_test.go - New regression test
TestRecordExecResult_ReportsFullComponentNameForNestedComponentincmd/terraform/utils_exec_metadata_test.go - New regression-guard test
TestTerraformExecMetadataParserFunc_ReportsFullComponentNameForNestedComponentconfirming 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/execandcmd/terraformpass unmodified - Full
pactconsumer-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 fulltests/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.
- Atmos Pro uploads now preserve full logical component names, including nested names such as
-
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 Erik Osterman (Cloud Posse) (@osterman) (#3115)
## what- Rewrote the Atmos Pro cast-download polling flow (
CastProArtifact/useCastArtifact.ts) to poll the render-status endpoint withAccept: application/jsoninstead of the raw artifact URL, and to treat only a genuine200response as "ready" — neverresponse.okon any 2xx. - Extracted the polling state machine into a new framework-agnostic module,
CastProArtifact/polling.mjs, with a companionpolling.test.mjscovering 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
CastProDownloadto show "Queued…"/"Rendering… m:ss" (with a "taking longer than usual" hint) and an optional progress bar, and updatedCastProArtifact/README.mdto 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 Erik Osterman (Cloud Posse) (@osterman) (#3095)
## whatatmos terraform apply --allno longer aborts before the scheduler runs anything, on a fresh environment where a dependent component's!terraform.state/!terraform.outputreference points at a component that hasn't been applied yet (e.g.audit-trailreadingkms'skey_arnbeforekmshas 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,kmshas already applied and!terraform.statereads the real value.atmos list stacks/list components/list instancesnow 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.Componentinvars— even thoughlist stacksonly 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-initproviders lockstep (triggered by an active registry/plugin cache) now streams through the same init spinner asterraform 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
--allpreflight only exists to build the dependency graph and validate config before the scheduler starts — it's built purely from staticdependencies/settings.depends_on, never from resolved vars. But it previously resolved!terraform.state/!terraform.outputfor every component strictly, so an unprovisioned dependency (normal and expected on a fresh AWS landing-zone environment:kms→audit-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=warnmachinery) is safe and unblocks the documentedapply --allbootstrap 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 instancesresolved 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-onlysectionsfilter used bydescribe 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 lockhook 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
- Closes #3068
🤖 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.5 → 1.418.1 |
Release Notes
PostHog/posthog-js (posthog-js)
v1.418.1
1.418.1
Patch Changes
- #4549
0599fe0Thanks @ablaszkiewicz! - Recognise Firefox and Safari extension frames when filtering extension exceptions, and stop counting Safari's maskedwebkit-masked-url://frames as in-app code.
(2026-08-18) - Updated dependencies [
0599fe0]:- @posthog/core@1.48.3
v1.418.0
1.418.0
Minor Changes
- #4496
1ade666Thanks @marandaneto! - AddcookieWinsOnConflictto 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 the2026-08-29defaults.
(2026-08-18)
Patch Changes
- Updated dependencies [
1ade666]:- @posthog/types@1.405.0
v1.417.4
1.417.4
Patch Changes
- #4509
8d74821Thanks @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
1.417.3
Patch Changes
- #4540
ce8fc13Thanks @marandaneto! - Restore exception autocapture compatibility for posthog-js clients through version 1.141.0.
(2026-08-17)
v1.417.2
1.417.2
Patch Changes
- #4413
7b61aa4Thanks @posthog! - Fix error tracking coercion reporting the wrong exception type for non-Errorobjects (e.g.TypeError,ReferenceError) that are thrown by browser extensions or other cross-realm code. Previously these always reported as typeError, burying the real type in the message string. Also fixed a localisErrorhelper 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]:- @posthog/core@1.48.2
v1.417.1
1.417.1
Patch Changes
-
#4521
0a0206fThanks @marandaneto! - Normalize capture timestamp overrides to equivalent UTC ISO strings in the browser and Node.js SDKs and shared core.
(2026-08-14) -
#4523
6230b5bThanks @marandaneto! - Prevent swallowed rrweb observer initialization errors from breaking session replay teardown and subsequent recorder restarts.
(2026-08-14) -
#4503
eb05237Thanks @pauldambra! - fix(dead-clicks): treat visibility and focus changes as liveness signals, not dead-click evidenceThe dead-click detector treated a
visibilitychangeas evidence a click was dead: it measuredMath.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 windowfocus/blurobserver 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_timeoutstays in the payload (always false) for shape compatibility, and a new$dead_click_focus_changed_delay_msis 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)
- Visibility changes are recorded in both directions (a click that opens a new tab sends the current tab to
-
Updated dependencies [
0a0206f,eb05237]:- @posthog/core@1.48.1
- @posthog/types@1.404.1
v1.417.0
1.417.0
Minor Changes
- #4485
8bc63c3Thanks @dustinbyrne! - Default external dependency loading to versioned asset paths with automatic fallback to legacy paths, and add astrict_script_versioning: 'fallback'mode.
(2026-08-13)
Patch Changes
- Updated dependencies [
8bc63c3]:- @posthog/types@1.404.0
v1.416.1
1.416.1
Patch Changes
-
#4443
b2c6830Thanks @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
0to disable) and directrrweb.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
_cssTextatomically, 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 (
insertRuleoutput,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)
- 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
-
Updated dependencies [
c9086de,b2c6830]:- @posthog/core@1.48.0
- @posthog/types@1.403.1
v1.416.0
1.416.0
Minor Changes
-
#4495
e4b9947Thanks @marandaneto! - feat(browser): addrewriteRequestPathto customize API, feature flag, and asset paths for reverse proxies
(2026-08-12) -
#4493
e34ebf9Thanks @marandaneto! - Add reset options for applying bootstrapped identity, feature flag, and session values afterposthog.reset()while preserving the legacy boolean argument.
(2026-08-12)
Patch Changes
- Updated dependencies [
e4b9947,e34ebf9]:- @posthog/types@1.403.0
v1.415.7
1.415.7
Patch Changes
- #4318
847d963Thanks @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
1.415.6
Patch Changes
-
#4500
d773405Thanks @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
1.415.5
Patch Changes
-
#4497
d62e42eThanks @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
1.415.4
Patch Changes
- #4494
deb6bb0Thanks @marandaneto! - fix(types): accept current and legacy Segment Analytics SDK types in the Segment integration config
(2026-08-11) - Updated dependencies [
deb6bb0]:- @posthog/types@1.402.3
v1.415.3
1.415.3
Patch Changes
-
#4488
23db844Thanks @TueHaulund! - fix(replay): never ship a buffer swapped in by a re-entrant session rotation mid-flush
(2026-08-11) -
#4474
e06bf52Thanks @dependabot! - dependencies updates: - Updated dependencydompurify@^3.4.13↗︎ (from^3.4.12, independencies) (2026-08-11) -
#4435
1cbbe6aThanks @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 viashadowRoot.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
1.415.2
Patch Changes
- #4316
f999394Thanks @dustinbyrne! - Support removing multiple persisted properties in one operation.
(2026-08-11) - Updated dependencies [
f999394]:- @posthog/browser-common@0.5.0
v1.415.1
1.415.1
Patch Changes
- #4477
6f9adf8Thanks @TueHaulund! - fix(replay): don't open a recording that holds only idle lifecycle markers
(2026-08-10)
v1.415.0
1.415.0
Minor Changes
-
#4436
80f15a3Thanks @jakesciotto! - feat(surveys): optional intro screen shown before the first questionSurveys can now display an intro screen before question 1, configured via the new
displayIntroScreen,introScreenHeader,introScreenDescription,
introScreenDescriptionContentType, andintroScreenButtonTextappearance 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.renderSurveysPreviewaccepts
previewPageIndex: -1(exported asINTRO_SCREEN_PREVIEW_INDEX) to preview the
intro screen. (2026-08-10)
Patch Changes
- Updated dependencies [
80f15a3]:- @posthog/core@1.47.0
v1.414.0
1.414.0
Minor Changes
- #4330
5bd8b83Thanks @darkopia! - Addposthog.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 intoisAvailable() === false. Lets callers that fall back to another channel record the specific cause.ConversationsUnavailableReasonis exported from the package entry points, so consumers can name the type.
(2026-08-07)
v1.413.3
1.413.3
Patch Changes
-
#4414
1b88c2fThanks @marandaneto! - Clear properties registered for a session when the PostHog session rotates.
(2026-08-06) -
#4374
b39b577Thanks @dustinbyrne! - Persist in-place object and array mutations when properties are re-registered.
(2026-08-06) -
#4434
75fb719Thanks @arnohillen! - Make the session replay attribute masking options mutually exclusive: when bothmaskAllElementAttributesandmaskAttributeFnare set, the coarse option wins and the callback is ignored (with a console warning), so a callback can no longer accidentally unmask whatmaskAllElementAttributeshides.
(2026-08-06) -
Updated dependencies [
64ba193,75fb719]:- @posthog/core@1.46.9
- @posthog/types@1.402.2
v1.413.2
1.413.2
Patch Changes
- #4425
ee7fab0Thanks @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
1.413.1
Patch Changes
-
#4390
1160403Thanks @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
d108d66Thanks @posthog! - fix(replay): preserve privacy masking for initial network metadataInitial 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]:- @posthog/types@1.402.1
v1.413.0
1.413.0
Minor Changes
- #4376
2da12b8Thanks @posthog! - Add attribute-level masking to session replay:maskAttributeFnprovides per-attribute control over the final serialized value, whilemaskAllElementAttributesmasks all source DOM string attributes (including rendering attributes and synthesized form values) at the cost of replay fidelity.
(2026-08-05)
Patch Changes
- #4376
2da12b8Thanks @posthog! - fix(replay): discard held interaction-less recordings when a background document unloads without ever becoming visible
(2026-08-05) - Updated dependencies [
2da12b8]:- @posthog/types@1.402.0
- @posthog/browser-common@0.4.0
v1.412.2
1.412.2
Patch Changes
- #4417
3acadfeThanks @marandaneto! - fix(replay): discard held interaction-less recordings when a background document unloads without ever becoming visible
(2026-08-05)
v1.412.1
1.412.1
Patch Changes
- #4404
a348fb3Thanks @dependabot! - Update PostCSS to include upstream security fixes.
(2026-08-05)
v1.412.0
v1.411.0
1.411.0
Minor Changes
-
#4266
43d1850Thanks @posthog! - feat: add opt-incapture_performance.__preview_web_vitals_soft_navsto fix inflated web vitals on single-page appsClient-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
d3c4538Thanks @posthog! - Keep$referring_domainand canonicalutm_*/campaign parameters on minimal$feature_flag_calledevents. 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]:- @posthog/core@1.46.7
- @posthog/types@1.401.0
v1.410.10
1.410.10
Patch Changes
-
#4271
3d4e2fdThanks @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
5f2b78aThanks @TueHaulund! - fix(replay): hold fresh interaction-less session recordings until there is evidence someone caresA 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
064874aThanks @ioannisj! - Fix held rotation-born session replay buffers not flushing when a V2 event trigger matches
(2026-08-04) -
#4343
83a9b67Thanks @arnohillen! - Session replay no longer freezes the page re-encoding base64 images that are already small. When canvas recording is enabled, every<img>with adata:URL was synchronously redrawn and re-encoded throughcanvas.toDataURLduring 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
f865818Thanks @posthog! - Report privacy-aware dropped-event count, page and session context in the client rate limit warning
(2026-08-04) -
Updated dependencies [
f865818]:- @posthog/types@1.400.2
v1.410.9
1.410.9
Patch Changes
-
#4314
feb9e2aThanks @posthog! - fix: warn whenreset()silently opts the user back outreset()clears stored consent along with the rest of the user's state. Withopt_out_capturing_by_default, this returns the instance to the opted-out default, so callingreset()afteropt_in_capturing()would stop capturing without warning. It now logs a warning when that happens and documents the required ordering. (2026-08-04) -
#4288
877418eThanks @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]:- @posthog/types@1.400.1
v1.410.8
1.410.8
Patch Changes
- #4402
a31bd1eThanks @NVolcz! - Publish TypeScript declarations for browser extension entrypoints under their publicdistpaths.
(2026-08-04)
v1.410.7
1.410.7
Patch Changes
- #4400
9811a43Thanks @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
1.410.6
Patch Changes
- #4407
6d5e314Thanks @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
1.410.5
Patch Changes
- #4273
8ec3499Thanks @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
v1.410.3
1.410.3
Patch Changes
- #4399
662fb4cThanks @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'sol, 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
v1.410.1
1.410.1
Patch Changes
- #4386
0854095Thanks @marandaneto! - Prevent the inline canvas recording worker from requesting an unusable source map from its blob URL.
(2026-08-03) - Updated dependencies [
eb0a793]:- @posthog/core@1.46.3
v1.410.0
1.410.0
Minor Changes
- #4125
fde7145Thanks @DerGeraetK! - Addsession_recording.samplingto 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
- #4387
10ef759Thanks @NVolcz! - Share extension bundle types between the slim and slim no-external entrypoints.
(2026-08-03) - Updated dependencies [
fde7145]:- @posthog/types@1.400.0
v1.409.6
1.409.6
Patch Changes
- #4299
8a7bb3fThanks @posthog! - Mark our bundles as third-party code in the source maps we publish (thex_google_ignoreListextension). Browser devtools now attributeconsole.*messages to the code that called them instead of to posthog-js's console wrapper, which previously showed every message as coming fromlogs.tswhencaptureConsoleLogsor session replay'senable_recording_console_logwas enabled.
(2026-08-03) - Updated dependencies [
7c3a9af]:- @posthog/core@1.46.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 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 | a6420f3 → 102db65 |
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 | 1e514c5 → 5e403a7 |
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 | c88ec20 → d2ecc80 |
[!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.1 → v3.13.3 |
Release Notes
getsops/sops (github.com/getsops/sops/v3)
v3.13.3
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/sopsVerify 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.comVerify 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-missingVerify 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.3Container 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.3ghcr.io/getsops/sops:v3.13.3-alpine
Quay.io
quay.io/getsops/sops:v3.13.3quay.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 textVerify 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
- Add ini to supported input/output type descriptions by @TheKhanj in #2239
- build(deps): Bump the go group with 10 updates by @dependabot[bot] in #2242
- build(deps): Bump the ci group with 6 updates by @dependabot[bot] in #2241
- fix: include decrypted sequence comments in the MAC (fixes #2243) by @cbcoutinho in #2245
- build(deps): Bump the go group with 14 updates by @dependabot[bot] in #2251
- build(deps): Bump the ci group with 2 updates by @dependabot[bot] in #2250
- build(deps): Bump the go group with 11 updates by @dependabot[bot] in #2261
- build(deps): Bump the ci group with 3 updates by @dependabot[bot] in #2260
- build(deps): Bump the rust group in /functional-tests with 3 updates by @dependabot[bot] in #2259
- Update dependencies with 'go get -t -u ./...' by @felixfontein in #2248
- Completion scripts: remove leading newline by @felixfontein in #2253
- Release 3.13.3 by @felixfontein in #2249
New Contributors
- @TheKhanj made their first contribution in #2239
- @cbcoutinho made their first contribution in #2245
Full Changelog: getsops/sops@v3.13.2...v3.13.3
v3.13.2
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/sopsVerify 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.comVerify 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-missingVerify 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.2Container 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.2ghcr.io/getsops/sops:v3.13.2-alpine
Quay.io
quay.io/getsops/sops:v3.13.2quay.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 textVerify 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
- build(deps): Bump the go group with 3 updates by @dependabot[bot] in #2185
- build(deps): Bump github/codeql-action from 4.35.4 to 4.35.5 in the ci group by @dependabot[bot] in #2184
- build(deps): Bump the go group with 11 updates by @dependabot[bot] in #2193
- build(deps): Bump the ci group with 4 updates by @dependabot[bot] in #2192
- build(deps): Bump serde_json from 1.0.149 to 1.0.150 in /functional-tests in the rust group by @dependabot[bot] in #2191
- build(deps): Bump the go group with 11 updates by @dependabot[bot] in #2197
- build(deps): Bump docker/setup-qemu-action from 4.0.0 to 4.1.0 in the ci group by @dependabot[bot] in #2196
- test: unset all age env vars in make test target by @arpitjain099 in #2208
- build(deps): Bump the go group with 10 updates by @dependabot[bot] in #2212
- build(deps): Bump the ci group with 2 updates by @dependabot[bot] in #2211
- build(deps): Bump the go group with 15 updates by @dependabot[bot] in #2218
- build(deps): Bump alpine from 3.23 to 3.24 in /.release in the docker group by @dependabot[bot] in #2217
- fix: handle pointers when serializing context by @tlercher in #2219
- docs: fix typo in exec-file --filename help text by @s3onghyun in #2221
- JSON store: preserve large integers that fit into int64 by @s3onghyun in #2222
- Fix panic when expecting an encrypted string, but a non-string is encountered by @felixfontein in #2227
- Fix INI store no longer double-encoding newlines by @felixfontein in #2189
- exec-file/exec-env: reset supplementary groups when changing user by @felixfontein in #2194
- build(deps): Bump the go group with 6 updates by @dependabot[bot] in #2229
- build(deps): Bump actions/checkout from 6.0.3 to 7.0.0 in the ci group by @dependabot[bot] in #2228
- Fix issue when changing user in exec subcommands by @sabre1041 in #2230
- Shorten .md lines by @felixfontein in #2206
- Update all Go dependencies with
go get -t -u ./...by @felixfontein in #2231 - build(deps): Bump github.com/opencontainers/runc from 1.2.8 to 1.3.6 by @dependabot[bot] in #2233
- build(deps): Bump the ci group with 2 updates by @dependabot[bot] in #2236
- Release 3.13.2 by @felixfontein in #2232
New Contributors
- @arpitjain099 made their first contribution in #2208
- @tlercher made their first contribution in #2219
- @s3onghyun made their first contribution in #2221
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.0 → 2.9.1 |
Release Notes
hashicorp/terraform-provider-local (local)
v2.9.1
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 | 9d5fc3d → b1afb4f |
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.0 → v5.9.1 |
Release Notes
go-git/go-billy (github.com/go-git/go-billy/v5)
v5.9.1
What's Changed
- build: Update module golang.org/x/net to v0.55.0 [SECURITY] (releases/v5.x) by @go-git-renovate[bot] in #216
- build: Update module golang.org/x/text to v0.39.0 [SECURITY] (releases/v5.x) by @go-git-renovate[bot] in #230
- build: Update module golang.org/x/net to v0.56.0 [SECURITY] (releases/v5.x) by @go-git-renovate[bot] in #229
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.