[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/318714670","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/318714670/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/318714670/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.218.0-rc.1","id":318714670,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4S_zMu","tag_name":"v1.218.0-rc.1","target_commitish":"main","name":"v1.218.0-rc.1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-05-06T03:00:56Z","updated_at":"2026-05-07T01:50:06Z","published_at":"2026-05-07T01:50:06Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000344","id":414000344,"node_id":"RA_kwDOEW4XoM4YrSTY","name":"atmos_1.218.0-rc.1_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":211847472,"digest":"sha256:da6c9ac5e5bdb566ac7d9841cc5d615b0355881f74f6b3761d955f44f9fc6b13","download_count":1,"created_at":"2026-05-07T01:49:05Z","updated_at":"2026-05-07T01:49:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000226","id":414000226,"node_id":"RA_kwDOEW4XoM4YrSRi","name":"atmos_1.218.0-rc.1_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":198637090,"digest":"sha256:ff0009b94dd62aaeec2ca41c301af08c3c82406df2b58ec1fa07fe3291ac60d1","download_count":1,"created_at":"2026-05-07T01:48:49Z","updated_at":"2026-05-07T01:48:58Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000224","id":414000224,"node_id":"RA_kwDOEW4XoM4YrSRg","name":"atmos_1.218.0-rc.1_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":206205100,"digest":"sha256:8ccf761858f815060b0dd45c2aa8907a4ff1048210ee2f8378902a04cf1bb402","download_count":1,"created_at":"2026-05-07T01:48:49Z","updated_at":"2026-05-07T01:48:57Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000361","id":414000361,"node_id":"RA_kwDOEW4XoM4YrSTp","name":"atmos_1.218.0-rc.1_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191561900,"digest":"sha256:6acbde03ef832810d54938c5e73ed95ee6da7ee409695a50d9692b69bbfbe352","download_count":1,"created_at":"2026-05-07T01:49:06Z","updated_at":"2026-05-07T01:49:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000225","id":414000225,"node_id":"RA_kwDOEW4XoM4YrSRh","name":"atmos_1.218.0-rc.1_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192561314,"digest":"sha256:8c2530ca6085e35cb67428e8efdb11add295388efd58c2fdc348a16f2b7c7803","download_count":1,"created_at":"2026-05-07T01:48:49Z","updated_at":"2026-05-07T01:48:58Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000270","id":414000270,"node_id":"RA_kwDOEW4XoM4YrSSO","name":"atmos_1.218.0-rc.1_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207007906,"digest":"sha256:3e350be44fcc0b0171395daaa169173e4739ab819f0982d903178c480a255036","download_count":38,"created_at":"2026-05-07T01:48:57Z","updated_at":"2026-05-07T01:49:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000277","id":414000277,"node_id":"RA_kwDOEW4XoM4YrSSV","name":"atmos_1.218.0-rc.1_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192676002,"digest":"sha256:b2c2f51c4388065a91c758e6ff3911529eea95db78d6cc3a24b6cfcd9082fb5c","download_count":1,"created_at":"2026-05-07T01:48:58Z","updated_at":"2026-05-07T01:49:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000286","id":414000286,"node_id":"RA_kwDOEW4XoM4YrSSe","name":"atmos_1.218.0-rc.1_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192282786,"digest":"sha256:927990be82e802689d4bdcd2a448c72fa99dbeb4d1b0cc7d941f84a81b86a8ca","download_count":1,"created_at":"2026-05-07T01:48:58Z","updated_at":"2026-05-07T01:49:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000389","id":414000389,"node_id":"RA_kwDOEW4XoM4YrSUF","name":"atmos_1.218.0-rc.1_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:b2ca507b5fe4755a902edaca52d25ce782f6d85fd5f54db4fdfe3ea60e9fcdbf","download_count":1,"created_at":"2026-05-07T01:49:07Z","updated_at":"2026-05-07T01:49:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000274","id":414000274,"node_id":"RA_kwDOEW4XoM4YrSSS","name":"atmos_1.218.0-rc.1_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":196706304,"digest":"sha256:1569857038671d2dda29f4abef95c567176d6596f87a1ef7329d9aa798c53243","download_count":1,"created_at":"2026-05-07T01:48:58Z","updated_at":"2026-05-07T01:49:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000229","id":414000229,"node_id":"RA_kwDOEW4XoM4YrSRl","name":"atmos_1.218.0-rc.1_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":210573824,"digest":"sha256:54e202e049974e759161f82aba5e45f76aca64f146cee8d7d4e1ec11b70fc3b9","download_count":1,"created_at":"2026-05-07T01:48:49Z","updated_at":"2026-05-07T01:48:57Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/414000367","id":414000367,"node_id":"RA_kwDOEW4XoM4YrSTv","name":"atmos_1.218.0-rc.1_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193616384,"digest":"sha256:9df0c822b0de27edcdb426831c50ed759284ad12bb7a16fb038e46de844e3950","download_count":1,"created_at":"2026-05-07T01:49:06Z","updated_at":"2026-05-07T01:49:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.1/atmos_1.218.0-rc.1_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.218.0-rc.1","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.218.0-rc.1","body":"## 🚀 Enhancements\n\n<details>\n  <summary>fix(pro): friendlier 4xx error rendering and propagate hints to users @osterman (#2386)</summary>\n## what\n\n- Surface the Atmos Pro server's user-facing 4xx fields (`errorMessage`, `errorTag`, `data.validationErrors[]`) directly to the CLI user instead of opaque `HTTP 500: API response error: API request failed with status N` noise.\n- Render `data.validationErrors[]` as a bullet list under the headline (with dedupe of trailing server-side concatenations like `\"failed: A; B\"`).\n- Add a 400 hint linking to `settings.pro.*` docs and a drift-detection-specific hint (selected by `errorTag == DriftDetectionValidationError` or substring match on the message).\n- Drop the redundant `HTTP <code>:` prefix in `APIError.Error()` for 4xx so output reads `UploadInstances: <server message>` instead of `UploadInstances: HTTP 400: API response error: <server message>`.\n- Preserve `trace_id` on all statuses (including 4xx) so support can correlate user-reported issues.\n- Tolerate both `errorMessage` (current) and legacy `error` field on responses; new `EffectiveErrorMessage()` prefers the former.\n- Replace `errors.Join(sentinel, cause)` with a small `wrapErr` helper using the existing `errUtils.Build(...).WithCause(...)` pattern. Stdlib `errors.Join` and `fmt.Errorf(\"%w: %w\", ...)` both produce multi-errors that hide cockroach hint annotations from `GetAllHints`, which is why the existing 401/403/404/5xx hints never actually rendered to users.\n- Retry behavior unchanged: 4xx remains non-retryable, 401 still refreshes the OIDC token, 5xx still backs off.\n\n## why\n\n- Real user pain: running `atmos list instances --upload` against a misconfigured stack produced `UploadInstances: HTTP 500: API response error: API request failed with status 500 (trace_id: ...)` four times in a row. The server actually returned a clean validation message describing the missing drift-detection workflows, but the CLI couldn't surface it (DTO field-name mismatch + lost hints).\n- The atmos-pro server now correctly returns 4xx (not 500) with structured `errorMessage` and `data.validationErrors[]` for user-error conditions; this PR is the CLI side of that contract.\n- Hints attached via `errUtils.Build(...).WithHint(...)` were silently dropped at the outermost wrap layer because `errors.Join` doesn't expose its children to `cockroachErrors.GetAllHints`. Users never saw the lightbulb hints the 401/403/404/5xx code paths were already emitting; this PR makes them visible.\n\n## references\n\nN/A\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Richer API error parsing that surfaces structured messages, validation bullets, and drift-detection guidance.\n  * Unified error-wrapping semantics that preserve original error hints and improve retry exhaustion reporting.\n\n* **Bug Fixes**\n  * Cleaner 4xx error text (removed redundant HTTP prefix) while preserving trace IDs.\n  * 400 responses are not retried and now surface clearer, deduplicated validation bullets.\n  * More consistent error handling and ensured response bodies are closed on error.\n\n* **Tests**\n  * Expanded tests covering error rendering, drift-detection cases, retry behavior, and response-body/redirect edge cases.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/317571367","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/317571367/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/317571367/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.218.0-rc.0","id":317571367,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4S7cEn","tag_name":"v1.218.0-rc.0","target_commitish":"main","name":"v1.218.0-rc.0","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-05-04T23:31:22Z","updated_at":"2026-05-05T01:44:34Z","published_at":"2026-05-05T01:44:34Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302127","id":412302127,"node_id":"RA_kwDOEW4XoM4Ykzsv","name":"atmos_1.218.0-rc.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":211863792,"digest":"sha256:40e864ce40f55bb34aba66c2471e2cf288deb7259a601d437e4207b604fdc0bf","download_count":1,"created_at":"2026-05-05T01:43:23Z","updated_at":"2026-05-05T01:43:31Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302245","id":412302245,"node_id":"RA_kwDOEW4XoM4Ykzul","name":"atmos_1.218.0-rc.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":198653522,"digest":"sha256:766a56d7ef59043c5adbb4872d324d23b69ccc3b5e4a1db417f77f22122ad5d7","download_count":1,"created_at":"2026-05-05T01:43:36Z","updated_at":"2026-05-05T01:43:43Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302205","id":412302205,"node_id":"RA_kwDOEW4XoM4Ykzt9","name":"atmos_1.218.0-rc.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":206225580,"digest":"sha256:52a884f8c08e50c5621f17699fd2dc322a34792bd6d756916ddcf173221a0704","download_count":1,"created_at":"2026-05-05T01:43:32Z","updated_at":"2026-05-05T01:43:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302124","id":412302124,"node_id":"RA_kwDOEW4XoM4Ykzss","name":"atmos_1.218.0-rc.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191561900,"digest":"sha256:554cc5800b14c98160e88c95dbf0d7562e848b9571f37f5b3034d092ec902bf3","download_count":1,"created_at":"2026-05-05T01:43:23Z","updated_at":"2026-05-05T01:43:30Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302188","id":412302188,"node_id":"RA_kwDOEW4XoM4Ykzts","name":"atmos_1.218.0-rc.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192581794,"digest":"sha256:f1f63285af8c0be83f24f0248f9c829eb3e4dc7c7a547ccba365a3b591d2e129","download_count":1,"created_at":"2026-05-05T01:43:30Z","updated_at":"2026-05-05T01:43:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302196","id":412302196,"node_id":"RA_kwDOEW4XoM4Ykzt0","name":"atmos_1.218.0-rc.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207032482,"digest":"sha256:8ee35bded1c29511fcbecafaa8dfaa5c86de61dfe62c94e4f877e2d0e783c2a6","download_count":24,"created_at":"2026-05-05T01:43:31Z","updated_at":"2026-05-05T01:43:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302125","id":412302125,"node_id":"RA_kwDOEW4XoM4Ykzst","name":"atmos_1.218.0-rc.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192676002,"digest":"sha256:752a6bdd11fabc046ccfcaf81bfbbd3121256086ebbb7f5ca550f10c70318dee","download_count":1,"created_at":"2026-05-05T01:43:23Z","updated_at":"2026-05-05T01:43:30Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302248","id":412302248,"node_id":"RA_kwDOEW4XoM4Ykzuo","name":"atmos_1.218.0-rc.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192282786,"digest":"sha256:8067eacea2cb5606ff8d3957d2c95550f8fe9fc26d6b1ffae01beba9e3796681","download_count":1,"created_at":"2026-05-05T01:43:37Z","updated_at":"2026-05-05T01:43:43Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302271","id":412302271,"node_id":"RA_kwDOEW4XoM4Ykzu_","name":"atmos_1.218.0-rc.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:2b7d0a3b14a4537d61445af0622b6051675abf6a60e303c549a8f8616ccb3264","download_count":1,"created_at":"2026-05-05T01:43:38Z","updated_at":"2026-05-05T01:43:39Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302243","id":412302243,"node_id":"RA_kwDOEW4XoM4Ykzuj","name":"atmos_1.218.0-rc.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":196727808,"digest":"sha256:5e22e5b89e4f189547b0d75619d1946e7b0ed3c395c2881e55a498fef1899fb5","download_count":1,"created_at":"2026-05-05T01:43:36Z","updated_at":"2026-05-05T01:43:42Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302185","id":412302185,"node_id":"RA_kwDOEW4XoM4Ykztp","name":"atmos_1.218.0-rc.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":210595328,"digest":"sha256:49a2af99f200ba06f825dbb30b1595782b6c1284c310d8e55cb0bca5a5b88a3d","download_count":1,"created_at":"2026-05-05T01:43:30Z","updated_at":"2026-05-05T01:43:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412302126","id":412302126,"node_id":"RA_kwDOEW4XoM4Ykzsu","name":"atmos_1.218.0-rc.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193635328,"digest":"sha256:0722cfb86c4fde654880ee4ba6d9e1afb25ddf232d51b4b04372617f031ce5a1","download_count":1,"created_at":"2026-05-05T01:43:23Z","updated_at":"2026-05-05T01:43:29Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.218.0-rc.0/atmos_1.218.0-rc.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.218.0-rc.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.218.0-rc.0","body":"* No changes\n"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/317557839","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/317557839/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/317557839/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.217.0","id":317557839,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4S7YxP","tag_name":"v1.217.0","target_commitish":"main","name":"v1.217.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-05-04T23:31:22Z","updated_at":"2026-05-05T01:00:22Z","published_at":"2026-05-05T01:00:01Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275037","id":412275037,"node_id":"RA_kwDOEW4XoM4YktFd","name":"atmos_1.217.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":211863792,"digest":"sha256:e03f3236a7f9a236df5f3f3b565e2a759c67792dfda2ebdaf54bb3e860d9b2e7","download_count":10,"created_at":"2026-05-05T00:54:28Z","updated_at":"2026-05-05T00:54:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412274934","id":412274934,"node_id":"RA_kwDOEW4XoM4YktD2","name":"atmos_1.217.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":198653522,"digest":"sha256:2bc889ab43dd347aeda21a2714ae6fb5d59dbb50c7535838e2f54c3fa3e639f0","download_count":43,"created_at":"2026-05-05T00:54:20Z","updated_at":"2026-05-05T00:54:28Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412274932","id":412274932,"node_id":"RA_kwDOEW4XoM4YktD0","name":"atmos_1.217.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":206225580,"digest":"sha256:3c7b8c97a855b0ea1a84571986335e404f8182f1d45e6fcbd9fda1f0a316d617","download_count":3,"created_at":"2026-05-05T00:54:20Z","updated_at":"2026-05-05T00:54:27Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275010","id":412275010,"node_id":"RA_kwDOEW4XoM4YktFC","name":"atmos_1.217.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191561900,"digest":"sha256:f530fb2f6ee20e60371295f35dffc811f06fcf9a27a5950233662b55358b69c2","download_count":3,"created_at":"2026-05-05T00:54:27Z","updated_at":"2026-05-05T00:54:33Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275091","id":412275091,"node_id":"RA_kwDOEW4XoM4YktGT","name":"atmos_1.217.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192581794,"digest":"sha256:9cfc6eec845b49f83d22f83bed7aa30d26ce6442b60c7c971cfbfba492f5f211","download_count":4,"created_at":"2026-05-05T00:54:35Z","updated_at":"2026-05-05T00:54:40Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412274933","id":412274933,"node_id":"RA_kwDOEW4XoM4YktD1","name":"atmos_1.217.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207032482,"digest":"sha256:c75e0ffa076b0e6d6ba7ff33d270fa60fc2a3bff845f6a6f19a7c480e2aa6e3e","download_count":9469,"created_at":"2026-05-05T00:54:20Z","updated_at":"2026-05-05T00:54:27Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412274935","id":412274935,"node_id":"RA_kwDOEW4XoM4YktD3","name":"atmos_1.217.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192676002,"digest":"sha256:b2f3fc1e6e2b68ee8840975c2e305739ccb15ba4561863e9316770789bd64929","download_count":3,"created_at":"2026-05-05T00:54:20Z","updated_at":"2026-05-05T00:54:26Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275078","id":412275078,"node_id":"RA_kwDOEW4XoM4YktGG","name":"atmos_1.217.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192282786,"digest":"sha256:25fb9943760542dc58d35cba4e3e29853ebc244d8b748c84fdf9e25bf0976de9","download_count":1273,"created_at":"2026-05-05T00:54:33Z","updated_at":"2026-05-05T00:54:39Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275096","id":412275096,"node_id":"RA_kwDOEW4XoM4YktGY","name":"atmos_1.217.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1030,"digest":"sha256:1f71c7a3d76bf329058b0232c7b31bcfd25e5570bf7766deccd2f64182711def","download_count":112,"created_at":"2026-05-05T00:54:36Z","updated_at":"2026-05-05T00:54:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275017","id":412275017,"node_id":"RA_kwDOEW4XoM4YktFJ","name":"atmos_1.217.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":196727808,"digest":"sha256:d27641f187215cc5b31eb5d2910a63402a1fd67f4743d92404bcb24b5a4e7e30","download_count":10,"created_at":"2026-05-05T00:54:27Z","updated_at":"2026-05-05T00:54:33Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275018","id":412275018,"node_id":"RA_kwDOEW4XoM4YktFK","name":"atmos_1.217.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":210595328,"digest":"sha256:a690513fddb94f791c84e60d34e23b86115d04091c640d13be7649c90b847182","download_count":22,"created_at":"2026-05-05T00:54:27Z","updated_at":"2026-05-05T00:54:35Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/412275081","id":412275081,"node_id":"RA_kwDOEW4XoM4YktGJ","name":"atmos_1.217.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193635328,"digest":"sha256:1e78dc6324c04a670f8169d13d25bf1f393c64c07176177d856d06607f80f9ec","download_count":6,"created_at":"2026-05-05T00:54:34Z","updated_at":"2026-05-05T00:54:40Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0/atmos_1.217.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.217.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.217.0","body":"<details>\r\n  <summary>docs(roadmap): curate featured; drop internal-refactor changelog posts @osterman (#2384)</summary>\r\n\r\n## what\r\n\r\n- Cap `featured[]` in `website/src/data/roadmap.js` at **6** curated strategic initiatives. Drop `devcontainer`, `workflows`, `instance-status-upload`, and `chunked-stack-uploads`. Final 6: `atmos-ai`, `cloud-auth`, `native-ci`, `pro-commit`, `source-provisioning`, `toolchain`.\r\n- Add equivalent milestones to the `ci-cd` initiative for the two demoted Atmos Pro items so their changelogs stay reachable from the roadmap. Recalc `ci-cd.progress` 89 → 92.\r\n- Delete three internal-only refactor blog posts and their corresponding `quality` initiative milestones: `process-args-flags-refactor`, `refactoring-executeterraform-for-testability`, `describe-stacks-complexity-reduction`. Recalc `quality.progress` 86 → 75.\r\n- Update `.claude/agents/roadmap.md` with two new rules: (1) `featured[]` is manually curated, max 6, edited only when the user explicitly asks; (2) internal-only refactors with no user-visible change do not get changelog posts. Adds matching schema docs and quality-check items.\r\n\r\n## why\r\n\r\n- The featured section had drifted into a per-release announcement feed — every minor Atmos Pro plumbing improvement (chunked uploads, instance status, etc.) was rendering at the top of `/roadmap` next to transformative initiatives like Atmos AI and Cloud Auth. That diluted its meaning.\r\n- The roadmap maintainer agent had no documented rule for `featured[]`, so it was being modified on every release. Codifying \"max 6, opt-in only\" stops the drift at the source.\r\n- Internal refactor posts (cyclomatic complexity reductions, function decomposition) are engineering wins but produce zero user-visible change. They belong in PR descriptions and `git log`, not the user-facing changelog.\r\n\r\n## references\r\n\r\n- No issue tracker reference.\r\n- `no-release` — content/data only; no Go code, no user-visible CLI behavior change. Removing already-published changelog entries that should not have been published.\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Documentation**\r\n  * Removed three technical blog posts documenting internal refactors\r\n  * Clarified roadmap maintenance guidance: changelog should omit internal-only refactors; featured entries are curated with a hard cap of 6 and should not be modified unless explicitly requested\r\n\r\n* **Chores**\r\n  * Reorganized featured initiatives and adjusted roadmap milestone tracking\r\n  * Updated CI/CD progress to 92% and Quality progress to 75%\r\n  * Updated NOTICE with concrete upstream license URLs\r\n\r\n* **Quality**\r\n  * Added checks to prevent improper featured changes and to omit internal refactors from the changelog\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>docs: document the component `provision:` block (provision.backend, provision.workdir) @osterman (#2378)</summary>\r\n\r\n## what\r\n\r\n- Add a new stack-config schema page at `website/docs/stacks/components/provision.mdx` that documents the entire `provision:` block as a coherent feature, with sections for `provision.backend.enabled` (terraform-only), `provision.workdir.enabled` (all four toolchains), toolchain defaults, component-level overrides, and global defaults via `settings.provision.workdir.{enabled,ttl}` in `atmos.yaml`.\r\n- Add a `:::tip` callout to `website/docs/stacks/components/terraform/backend.mdx` clarifying that `backend:` (where state is stored) is distinct from `provision.backend:` (auto-create that location).\r\n- Cross-link `website/docs/components/terraform/backend-provisioning.mdx` to the new schema page so the conceptual deep-dive points at the schema reference.\r\n\r\n## why\r\n\r\n- The `provision:` block (with `provision.backend.enabled` and `provision.workdir.enabled`) is functional and used in fixtures, but had no dedicated documentation page in *Stack Configuration*. The only references were a CLI command page (`atmos terraform workdir`), a passing mention in `cli/configuration/components/terraform.mdx`, and the backend-provisioning conceptual page — none of which document the schema directly.\r\n- Closes a discoverability gap: a user reviewing the components sidebar saw entries for `*.metadata`, `ansible`, `helmfile`, `packer`, `terraform/backend` and noticed `provision` was missing entirely.\r\n- The added `:::tip` on the backend page resolves long-standing confusion between the `backend:` block (state location) and the `provision.backend:` block (whether to bootstrap that location).\r\n\r\n## references\r\n\r\n- Schema source: `pkg/schema/schema.go:402-414` (`ProvisionWorkdirSettings`), `pkg/provisioner/workdir/types.go:57-61` (`WorkdirConfig`), `pkg/provisioner/backend_hook.go:111-125` (`provision.backend.enabled`).\r\n- Canonical fixture: `tests/fixtures/scenarios/workdir/stacks/catalog/workdir-defaults.yaml`.\r\n- Verified with `cd website && npm run build` (zero broken links; new page registered as the 544th content route).\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Added `list:` CLI configuration for customizable `components`, `instances`, and `stacks` output\r\n  * Added global `settings.provision` and `provision.workdir` docs for workdir defaults/TTL\r\n\r\n* **Documentation**\r\n  * Added component provisioning docs (backend + workdir) and relocated backend provisioning links/site redirects\r\n  * Added telemetry configuration page with privacy guarantees\r\n  * Expanded VCS token injection docs; Bitbucket username standardized to `BITBUCKET_USERNAME`\r\n\r\n* **Chores**\r\n  * Updated NOTICE license URL entries to `Unknown`\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>docs: refresh CI page with native CI workflows; deprecate legacy GH Actions @osterman (#2373)</summary>\r\n\r\n## what\r\n\r\n- Move six legacy Cloud Posse GitHub Action docs (`affected-stacks`, `atmos-terraform-plan/apply`, drift detection/remediation, and the index) from `website/docs/integrations/github-actions/` to `website/docs/deprecated/github-actions/`, with `:::warning Deprecated` banners on each page pointing readers to `/ci`.\r\n- Rebuild `website/docs/ci/ci.mdx` around the two reference repos `cloudposse-examples/atmos-native-ci` and `cloudposse-examples/atmos-native-ci-advanced` — concrete excerpts for deploy-on-PR, deploy-on-merge, preview cleanup, and an `atmos describe affected --format=matrix` fan-out, plus a discreet pointer to the deprecated content.\r\n- Add client-redirects from all six legacy `/integrations/github-actions/*` URLs to `/ci`, add a collapsed \"Deprecated\" sub-category at the bottom of the **Resources** sidebar, keep `setup-atmos` and `component-updater` in the (now smaller) GitHub Actions sidebar entry, and repoint cross-links across docs, two blog posts, and the roadmap.\r\n\r\n## why\r\n\r\n- Atmos now ships native CI integration (job summaries, output variables, status checks, planfile storage) directly in the CLI, so `atmos terraform plan/apply/deploy` already produces the artifacts the wrapper actions used to provide — the legacy actions are no longer the recommended path for new projects.\r\n- The previous structure buried native CI behind a single page while giving the legacy actions a first-class sidebar section, conflicting with the recommendation in the legacy index page itself; this PR aligns navigation with the recommended path and makes the deprecated material reachable but de-emphasized.\r\n\r\n## references\r\n\r\n- [`cloudposse-examples/atmos-native-ci`](https://github.com/cloudposse-examples/atmos-native-ci) — basic example workflows excerpted in the new `/ci` page\r\n- [`cloudposse-examples/atmos-native-ci-advanced`](https://github.com/cloudposse-examples/atmos-native-ci-advanced) — matrix workflow excerpted in the new `/ci` page\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * describe affected --format=matrix now auto-writes matrix output to $GITHUB_OUTPUT in CI when enabled (explicit --output-file still wins); workflow examples updated.\r\n\r\n* **Documentation**\r\n  * Added a comprehensive \"Native CI for GitHub Actions\" guide, updated many docs and blog posts to use native CI wording, and published a blog post about the matrix auto-output behavior.\r\n  * Marked legacy GitHub Actions wrapper actions/pages as deprecated with warning guidance.\r\n\r\n* **Chores**\r\n  * Added legacy URL redirects and a new \"Deprecated\" docs section.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat(list): --process-templates and --process-functions flags; fix list instances --upload auth @aknysh (#2363)</summary>\r\n\r\n## what\r\n\r\n- Added `--process-templates` and `--process-functions` CLI flags (and `ATMOS_PROCESS_TEMPLATES` / `ATMOS_PROCESS_FUNCTIONS` env vars) to every `atmos list` subcommand that processes stack manifests: `list instances`, `list components`, `list metadata`, `list sources`, `list stacks`. Defaults are `true`, matching `atmos describe affected` / `atmos describe stacks` / `atmos describe component`.\r\n- Clarified the flag descriptions that used to conflate YAML functions with Go template functions. `--process-templates` toggles Go templates (including `atmos.Component(...)`); `--process-functions` toggles YAML functions (`!terraform.state`, `!terraform.output`, `!store`, `!aws.*`, …).\r\n- Fixed the underlying `atmos list instances --upload` hang in CI: per-component auth resolution in `internal/exec/describe_stacks_component_processor.go` was gated on `processYamlFunctions` only, so the template-only path (`atmos.Component(...)` inside Go templates) ran `terraform init` with an empty `AuthContext` against remote backends and failed with `No valid credential sources found`. Guard now fires when either templates or YAML functions will run.\r\n- Refactored the per-component auth resolver for testability: extracted `shouldResolvePerComponentAuth(...)` predicate, `resolveComponentAuthManager(...)` method, and an injectable `componentAuthManagerResolver` field on `describeStacksProcessor` so the decision can be exercised without running real OIDC/STS.\r\n- Threaded the two flags through `InstancesCommandOptions` / `MetadataOptions` in `pkg/list/` and through both the matrix-format and tree-format branches of `list_instances.go`, so every output path of the same invocation honors the same flag values.\r\n- Added three layers of regression coverage for each command that just got the flags (parser wiring, options struct, flag propagation to `ExecuteDescribeStacks`) plus a dedicated auth-guard regression suite (`TestShouldResolvePerComponentAuth`, `TestResolveComponentAuthManager` 6-row table, `TestResolveComponentAuthManager_ResolverErrorFallsBackToParent`).\r\n- Documented the two flags on every affected `atmos list` command page, added a blog post announcing the feature, and added a shipped milestone to the Discoverability & List Commands roadmap initiative.\r\n- Bumped Go modules to latest where compatible (aws-sdk-go-v2/service/s3 → 1.100.0, smithy-go → 1.25.1, anthropic-sdk-go → 1.38.0, hashicorp/terraform-exec → 0.25.1, posthog-go → 1.12.1, k8s.io/client-go → 0.36.0, plus many transitive indirects). Three transitive pins remain, now documented inline in `go.mod`: `sentry-go v0.45.1` (cockroachdb/errors v1.12.0 still references the removed `Extra` field), `gocloud.dev v0.41.0` (gomplate/v3 s3blob uses removed `ConfigProvider`), `hairyhenderson/go-fsimpl v0.3.1` (transitive via the gocloud.dev pin).\r\n\r\n## why\r\n\r\n- `atmos list instances --upload` was broken in CI for any repo whose component sections call `atmos.Component(...)` inside Go templates with a stack-level default identity — the exact shape used by the Atmos Pro release workflow. Users reported the command failing with `No valid credential sources found` while `atmos describe affected --upload` in the same workflow succeeded.\r\n- Root cause: `atmos.Component(...)` is a **Go template function**, not a YAML function. The processor's per-component auth resolver assumed YAML functions were the only consumer of `info.AuthContext` and gated itself on `processYamlFunctions`. The template path reads the same `AuthContext` and shells out to `terraform init` + `terraform output`, so disabling per-component auth broke template-only invocations.\r\n- Users expected `atmos list` flags to line up with `atmos describe` flags. They didn't: only `list affected`, `list settings`, and `list values` had the two knobs. A user workflow actually relied on `--process-functions` on `list instances` (where it didn't exist), which produced an `unknown flag` error and a confusing escape hatch. Adding the two flags everywhere the command processes stacks closes that gap.\r\n- The flag rollout intentionally defaults both flags to `true` for parity. Users who run `atmos list` locally without `tofu` / `terraform` on `$PATH` can opt out with `--process-functions=false` or `ATMOS_PROCESS_FUNCTIONS=false`; the auth-guard fix above ensures the `true, true` default works end-to-end in CI.\r\n- Module update was due. The three remaining pins are annotated so the next `go get -u ./...` pass doesn't trip over them blindly.\r\n\r\n## references\r\n\r\n- Fix design doc: \\`docs/fixes/2026-04-24-list-instances-per-component-auth.md\\`\r\n- Blog post: \\`website/blog/2026-04-24-list-process-flags.mdx\\`\r\n- Roadmap milestone: \\`website/src/data/roadmap.js\\` (Discoverability & List Commands initiative)\r\n- Previous related fix: \\`docs/fixes/2026-04-08-atmos-auth-identity-resolution-fixes.md\\` (Category A vs B caller split that this change builds on)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Added --process-templates and --process-functions flags to list subcommands to control Go template vs YAML function processing (both default to enabled).\r\n\r\n* **Bug Fixes**\r\n  * Restored per-component authentication resolution when templates are processed, fixing upload failures in CI.\r\n\r\n* **Documentation**\r\n  * Updated CLI docs, added a blog post and roadmap entry describing the new flags and examples.\r\n\r\n* **Tests**\r\n  * Extensive new and updated unit/integration tests covering flag parsing, behavior permutations, and regressions.\r\n\r\n* **Chores**\r\n  * Updated NOTICE/license references, added missing license entries, bumped dependencies and example default version to 1.217.0.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>Document CI statuses configuration options @goruha (#2362)</summary>\r\n\r\n## what\r\n* Document CI statuses configuration options\r\n\r\n## why\r\n* Improve documentation\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Documentation**\r\n  * Added docs and example configuration for new CI post-commit status summary options: component, add, change, and destroy (flags default to true in the example).\r\n  * Clarified required permissions to enable these status checks (GitHub checks: write or a commit-status-scoped API token for GitLab).\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n\r\n## 🚀 Enhancements\r\n\r\n<details>\r\n  <summary>fix(jit): honor metadata.component subpath for JIT source-provisioned components @zack-is-cool (#2371)</summary>\r\n\r\n## What\r\n\r\nJIT-provisioned components can now point at a submodule inside a cloned upstream repo via `metadata.component`, the same way non-JIT components already can. **Every JIT-capable code path is covered** — `terraform plan/apply`, `terraform generate varfile`, `terraform shell`, `helmfile`, `packer`, and `ansible` — and the resolver now lives in `pkg/component/` rather than being curve-fitted to Terraform inside `internal/exec/`.\r\n\r\nBefore this PR, `metadata.component: modules/iam-policy` was silently ignored on the JIT/workdir code path — atmos cloned the repo to `.workdir/<type>/<stack>-<component>/` and ran the underlying tool against that root, so generated files (`backend.tf.json`, varfile, `.terraform/`, helmfile state, packer cache, ansible inventory) all landed at the repo root instead of at `.workdir/<type>/<stack>-<component>/modules/iam-policy/`. The tools then either failed with confusing errors or silently ran against the wrong directory (e.g. a repo root with no `.tf` files).\r\n\r\nFixes #2364.\r\n\r\n## Why this matters\r\n\r\nSome upstream repos organize modules under `modules/<name>/` rather than at the repo root (e.g. `terraform-aws-modules/terraform-aws-iam`). For JIT to be useful against those repos, atmos needs to clone the whole repo into a workdir (so relative parent-path references like `../../shared-vars.tf` resolve) and then run the tool against a specific submodule inside it. Non-JIT components already support this via `metadata.component`; this PR brings JIT/non-JIT parity for that capability and applies it uniformly across every executor.\r\n\r\n## What changed (revised after maintainer review)\r\n\r\nThis PR was originally scoped to Terraform with helpers in `internal/exec/`. Maintainer feedback on the first review was clear: the helpers belong in `pkg/`, and the same fix should apply to Helmfile/Packer/Ansible — not be curve-fitted to Terraform.\r\n\r\nBoth items are addressed in this revision.\r\n\r\n### New package: `pkg/component/`\r\n\r\nHelpers extracted into a single component-type-parameterized package, used by all four executors:\r\n\r\n```go\r\npackage component\r\n\r\n// Pure path logic (no I/O outside stat).\r\nfunc ResolveWorkdirSubpath(metadataSubpath, workdirRoot string) (string, error)\r\n\r\n// In-place mutation of WorkdirPathKey, idempotent via private sentinel.\r\nfunc ApplyWorkdirSubpathToSection(info *schema.ConfigAndStacksInfo) (string, error)\r\n\r\n// Post-ProcessStacks resolver: BuildPath(componentType) + Resolve.\r\nfunc BuildAndResolveWorkdirPath(\r\n    atmosConfig *schema.AtmosConfiguration,\r\n    info *schema.ConfigAndStacksInfo,\r\n    componentType string,\r\n) (string, bool, error)\r\n\r\n// Full orchestrator: existence check → AutoProvisionSource → Apply → re-check.\r\n// componentType is one of cfg.{Terraform,Helmfile,Packer,Ansible}ComponentType.\r\nfunc ProvisionAndResolveComponentPath(\r\n    ctx context.Context,\r\n    atmosConfig *schema.AtmosConfiguration,\r\n    info *schema.ConfigAndStacksInfo,\r\n    componentType, fallbackComponentPath string,\r\n) (string, bool, error)\r\n```\r\n\r\n### All five executor entry points collapse to one call\r\n\r\n| Entry point | Before | After |\r\n|---|---|---|\r\n| `internal/exec/terraform_execute_helpers.go` (plan/apply/etc.) | `provisionComponentSource(...)` (terraform-only helper) | `component.ProvisionAndResolveComponentPath(ctx, ..., cfg.TerraformComponentType, ...)` |\r\n| `internal/exec/terraform_generate_varfile.go` | `tryJITProvision(...)` + private `checkDirectoryExists` (terraform-only reimpl, subpath bolted on) | `component.ProvisionAndResolveComponentPath(ctx, ..., cfg.TerraformComponentType, ...)` |\r\n| `internal/exec/helmfile.go` (prev. lines 121-155) | 35 lines of inline existence check + `provSource.AutoProvisionSource` + raw `WorkdirPathKey` lookup (subpath ignored) | `component.ProvisionAndResolveComponentPath(ctx, ..., cfg.HelmfileComponentType, ...)` |\r\n| `internal/exec/packer.go` (prev. lines 121-155) | Same pattern as helmfile (subpath ignored) | `component.ProvisionAndResolveComponentPath(ctx, ..., cfg.PackerComponentType, ...)` |\r\n| `pkg/component/ansible/executor.go` (prev. lines 380-429) | Same pattern as helmfile/packer (subpath ignored) | `component.ProvisionAndResolveComponentPath(ctx, ..., cfg.AnsibleComponentType, ...)` |\r\n\r\nHelmfile, Packer, Ansible, and `terraform generate varfile` silently inherited the same #2364 bug; this PR fixes them at the same time as Terraform plan/apply, with zero curve-fitting. `terraform shell` and the post-`ProcessStacks` resolvers (`terraform plan-diff`, `terraform verify-plan`) call `component.ApplyWorkdirSubpathToSection` and `component.BuildAndResolveWorkdirPath` respectively for the same reason.\r\n\r\n### Adjacent behavior change: JIT runs whenever `source.uri` is set\r\n\r\nBefore this PR, helmfile/packer/ansible/`terraform generate varfile` only invoked `AutoProvisionSource` when the local fallback component dir was missing. Ansible and `terraform generate varfile` additionally short-circuited the moment that dir existed, never running JIT. After the refactor, all five entry points (terraform plan/apply, terraform generate varfile, helmfile, packer, ansible) take the same path: when `source.uri` is declared, the source provisioner runs unconditionally, and only the YAML's `source.uri` decides whether JIT is in play.\r\n\r\nThis is safe under steady-state operation because `AutoProvisionSource` already self-debounces via two cache layers — `invocationDoneKey` (no-ops a second call within the same command lifecycle) and `needsProvisioning` (skips re-provisioning when the version, URI, and freshness pin all match) — both in `pkg/provisioner/source/provision_hook.go`. Net effect for users: every JIT-capable entry point now honors `source.uri` the same way terraform plan/apply always has, and the previously preferred lazy-skip-on-stale-local-dir path is gone.\r\n\r\n### Post-ProcessStacks resolvers also use the shared helper\r\n\r\n`internal/exec/terraform_plan_diff.go` and `internal/exec/terraform_verify_plan.go` previously called the terraform-private `resolveWorkdirComponentPath`; both now call `component.BuildAndResolveWorkdirPath(atmosConfig, info, cfg.TerraformComponentType)`.\r\n\r\n### Existence-gated subpath join (the disambiguation)\r\n\r\n`metadata.component` has two valid uses for JIT components — a real subdirectory inside the cloned repo, or an inheritance/identity pointer to an abstract base. The fix consults the filesystem rather than guessing from the string. After clone, either the joined subdirectory exists (case 1, apply the join) or it doesn't (case 2, leave the workdir root alone). String-shape heuristics (e.g. checking for `/`) are unreliable; the filesystem already encodes the right answer after `git clone`.\r\n\r\nAn unexported `workdirSubpathAppliedKey` constant + private `subpathAppliedMarker` struct type (both in `pkg/component/`) guard against double-joining if the orchestrator is invoked twice against the same `info.ComponentSection` map. YAML deserialization can't produce this type, so a stack manifest containing `_workdir_subpath_applied: <anything>` cannot bypass the join. The constant lives in `pkg/component/` rather than `pkg/provisioner/workdir/` because read/write access is confined to this package — keeping the protocol single-sourced next to the only code that uses it.\r\n\r\n### Error sentinel precision\r\n\r\nThree sentinels carry distinct meaning across the orchestrator and its callers:\r\n\r\n- `errUtils.ErrProvisionerFailed` — `AutoProvisionSource` (the JIT hook) failed.\r\n- `errUtils.ErrWorkdirProvision` — path resolution / stat / abs-subpath rejection failure on the workdir path.\r\n- `errUtils.ErrInvalidComponent` — stat failure on the local component directory (the no-source fallback path).\r\n\r\nTwo related fixes during review:\r\n\r\n1. The first revision wrapped `AutoProvisionSource` failures with `ErrWorkdirProvision`, which conflicted with the established pattern in `pkg/provisioner/registry.go`, `internal/exec/terraform_shell.go`, and the (now-removed) ansible executor — all of which used `ErrProvisionerFailed`. Bringing ansible's existing semantics back.\r\n2. The orchestrator's `componentDirExists` helper used to wrap every stat failure with `ErrWorkdirProvision`, including the `!HasSource` branch where the path is a local component directory, not a workdir. It now takes a sentinel parameter so the wrap matches the actual classification.\r\n3. `terraform_shell.go` no longer re-wraps an already-wrapped `ErrWorkdirProvision` with `ErrProvisionerFailed`; the original sentinel survives in the chain so `errors.Is` triage works correctly.\r\n\r\n## Design notes\r\n\r\n**`..` in `metadata.component` is allowed.** Many upstream Terraform modules reference shared files via relative parent paths (`../../shared-vars.tf`) and need the full repo on disk with the working directory at a subdirectory. Restricting to strict subpaths would break those layouts. Atmos's threat model assumes a trusted operator running atmos against their own stack configs — `metadata.component` is YAML-author-controlled, on par with `!exec`, `!template`, and `!terraform.state`, all of which can read or invoke arbitrary host resources. The godoc on `ResolveWorkdirSubpath` spells this out for future readers.\r\n\r\n**Absolute `metadata.component` is rejected.** An absolute value violates the documented contract (`metadata.component` is a relative subpath inside the workdir). `filepath.Join` would silently coerce it into a child of the workdir root on Unix and apply drive-letter semantics on Windows — coercing it would mask author error. Rejected up-front with a wrapped `ErrWorkdirProvision`.\r\n\r\n**Same-name inheritance is a no-op.** When `metadata.component` equals the component instance name (e.g. a component named `vpc` with `metadata.component: vpc`), atmos already clears the field during stack processing, so `info.BaseComponentPath` is empty and `filepath.Join` is never called.\r\n\r\n**Trade-off: typos fall through.** A typo in `metadata.component` (e.g. `modules/iam-polic` when the user meant `modules/iam-policy`) silently falls back to the workdir root rather than failing fast. This matches pre-PR behavior for invalid subpaths and is logged at debug level for traceability. A future enhancement could surface a warning when the join falls back, distinguishing typos from intentional inheritance-pointer use.\r\n\r\n## What is *not* changed\r\n\r\nThe orchestrator short-circuits at `!provSource.HasSource(...)`, so non-source components never reach the new code. Behavior of each non-JIT shape:\r\n\r\n| Component shape | Effect |\r\n|---|---|\r\n| Plain local (no source, no workdir) | Zero change — the orchestrator returns the fallback path immediately. |\r\n| Workdir-only + `metadata.component` | Zero functional change — workdir-only copies local files to the workdir *root*, so the candidate `<workdirRoot>/<subpath>` doesn't exist on disk; the resolver returns `exists=false` and the original `componentPath` is preserved. |\r\n| Workdir-only without `metadata.component` | Small related fix in `plan-diff` and `verify-plan` only: these two commands now resolve to the provisioned workdir root (where state actually lives) instead of falling back to the local component path. Live execution paths were already correct. |\r\n\r\nOther deferred scope:\r\n\r\n- **`atmos terraform generate planfile`** — this command builds `componentPath` directly from `atmosConfig.TerraformDirAbsolutePath + info.FinalComponent` and never invokes JIT provisioning. As a result, `generate planfile` does not support JIT components today (with or without a `metadata.component` subpath) — a pre-existing limitation, not a regression introduced by this PR. Wiring up JIT provisioning there is out of scope.\r\n\r\n## Tests\r\n\r\n**Unit** (`pkg/component/workdir_path_test.go`):\r\n\r\n| Test | Covers |\r\n|------|--------|\r\n| `TestResolveWorkdirSubpath_JoinedPathExists` | Joined path is used when the subpath is a directory on disk |\r\n| `TestResolveWorkdirSubpath_JoinedPathMissingFallsBack` | Falls back to the workdir root when the subpath does not exist (inheritance-pointer case) |\r\n| `TestResolveWorkdirSubpath_EmptySubpathReturnsRoot` | Empty `metadata.component` short-circuits to the root |\r\n| `TestResolveWorkdirSubpath_AllowsParentSegment` | `..` resolves naturally — codifies the design decision |\r\n| `TestResolveWorkdirSubpath_RejectsAbsolutePath` | Absolute subpath wraps `ErrWorkdirProvision` |\r\n| `TestResolveWorkdirSubpath_RejectsAbsolutePathOutsideWorkdir` | Absolute path outside the workdir is also rejected |\r\n| `TestResolveWorkdirSubpath_RegularFileAtCandidate` | Wraps `ErrWorkdirProvision` when the candidate exists but is not a directory |\r\n| `TestApplyWorkdirSubpathToSection_JoinsSubpath` | Mutates `WorkdirPathKey` to the joined subpath and sets the typed sentinel |\r\n| `TestApplyWorkdirSubpathToSection_InheritancePointerPreservesRoot` | **Regression guard**: when the subpath does not exist, `WorkdirPathKey` stays at the workdir root |\r\n| `TestApplyWorkdirSubpathToSection_NoWorkdirPathKey` | No-op when `WorkdirPathKey` is absent |\r\n| `TestApplyWorkdirSubpathToSection_EmptyWorkdirPath` | No-op when `WorkdirPathKey` is the empty string |\r\n| `TestApplyWorkdirSubpathToSection_DoubleCallAppliesOnce` | Idempotent across repeat calls (init then plan) |\r\n| `TestApplyWorkdirSubpathToSection_SentinelGatesDoubleJoin` | Negative-path: deleting the sentinel re-enables the join, proving the sentinel is the gate |\r\n| `TestApplyWorkdirSubpathToSection_UserYAMLCannotForgeSentinel` | YAML-author values (`bool`, `string`, `int`, `map`) cannot impersonate the typed sentinel |\r\n| `TestBuildAndResolveWorkdirPath_ExistingDir` | Returns `(joined-path, true, nil)` when the workdir subpath exists |\r\n| `TestBuildAndResolveWorkdirPath_AllComponentTypes` | **Component-type parity**: terraform/helmfile/packer/ansible all resolve under `.workdir/<componentType>/` |\r\n| `TestBuildAndResolveWorkdirPath_AllComponentTypesWithSubpath` | **Component-type parity**: all four honor `metadata.component` subpath join (issue #2364 across executors) |\r\n| `TestBuildAndResolveWorkdirPath_InheritancePointerFallsBack` | Returns `(workdir-root, true, nil)` when the workdir root exists but the subpath doesn't |\r\n| `TestBuildAndResolveWorkdirPath_NonExistentDir` | Returns `(candidate, false, nil)` when the workdir is not provisioned yet |\r\n| `TestBuildAndResolveWorkdirPath_RegularFileAtCandidate` | Wraps `ErrWorkdirProvision` when the candidate exists but is not a directory |\r\n| `TestBuildAndResolveWorkdirPath_StatErrorPropagates` | Wraps `ErrWorkdirProvision` for non-`ENOENT` stat failures (EACCES) |\r\n| `TestProvisionAndResolveComponentPath_NoSourceReturnsFallback` | Orchestrator short-circuits cleanly when no source declared |\r\n| `TestProvisionAndResolveComponentPath_NoSourceMissingDir` | Reports `exists=false` correctly when fallback dir is absent |\r\n\r\n**Integration** (`tests/cli_source_provisioner_workdir_test.go`):\r\n\r\n| Test | Drives | Asserts |\r\n|------|--------|---------|\r\n| `TestJITSource_MetadataComponentSubpath` | `atmos terraform generate varfile null-label-exports -s dev` | Generated `*.terraform.tfvars.json` lands at `<workdir>/exports/`, **not** the workdir root. Reverting the fix moves the varfile and fails this assertion. |\r\n| `TestJITSource_MetadataComponentSubpath_TerraformShell` | `atmos terraform shell null-label-exports -s dev --dry-run` | Captures the dry-run banner from stderr and asserts both the printed `Working directory` and `Component path` include the `metadata.component` subpath. Reverting the fix prints the bare workdir root and fails this assertion. |\r\n\r\nBoth use `github.com/cloudposse/terraform-null-label@0.25.0` with `metadata.component: exports` and skip gracefully on offline runners (no GitHub access or no `git` binary) via the existing precondition helpers.\r\n\r\n## References\r\n\r\n- Issue: #2364\r\n\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Workdir-aware component resolution: metadata.component subpaths are applied when resolving JIT-provisioned components so modules can live under workdir subdirectories (e.g., exports/).\r\n\r\n* **Bug Fixes**\r\n  * Consolidated and standardized component provisioning/resolution with improved validation and clearer error propagation across executors.\r\n\r\n* **Tests**\r\n  * Added end-to-end and unit tests covering workdir subpath behavior, provisioning, and error cases.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>test(describe-affected): accept all three valid Source values in TestResolveBase_PullRequest_Closed @aknysh (#2388)</summary>\r\n\r\n## what\r\n\r\nFix a CI-blocking test bug in \\`pkg/ci/providers/github/base_test.go\\` introduced silently by PR #2380.\r\n\r\n\\`TestResolveBase_PullRequest_Closed\\` passes on PR runs (where \\`merge-base\\` or \\`HEAD~1\\` is reachable) but fails on post-merge runs to \\`main\\` (where only the documented \\`event.pull_request.base.sha\\` fallback is available):\r\n\r\n- https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358101\r\n- https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358088\r\n\r\n## why\r\n\r\nThe assertion\r\n\r\n\\`\\`\\`go\r\nassert.Contains(t, res.Source, \\\"merge-base\\\", \\\"HEAD~1\\\")\r\n\\`\\`\\`\r\n\r\nhas a silent bug: testify treats the 4th positional argument to \\`assert.Contains\\` as the failure *message*, not an alternate value to match. So the test only ever checked for \\`\\\"merge-base\\\"\\`, and quietly passed on PR runs (where \\`merge-base\\` or \\`HEAD~1\\` was reachable) while failing on post-merge runs to \\`main\\` (where the GitHub Actions checkout depth and missing \\`origin/<base>\\` fetch leave only the third documented fallback, \\`event.pull_request.base.sha\\`).\r\n\r\n\\`ResolveBase()\\`'s closed-PR fallback chain in \\`pkg/ci/providers/github/base.go\\` documents three valid Sources:\r\n\r\n1. \\`\\\"merge-base(HEAD, origin/<target>)\\\"\\`\r\n2. \\`\\\"HEAD~1 (merged PR, merge-base unavailable)\\\"\\`\r\n3. \\`\\\"event.pull_request.base.sha\\\"\\`\r\n\r\nReplace the broken \\`Contains\\`-with-msg call with an explicit OR over the three substrings. The fix matches the test's own existing comment (\\\"merge-base and HEAD~1 may or may not work; either way we get a valid resolution\\\") -- the bug was that the assertion didn't actually check for \\\"either way.\\\"\r\n\r\n**No production code change** -- \\`ResolveBase()\\` already implements all three fallback paths correctly.\r\n\r\n## references\r\n\r\n- Failing CI runs on \\`main\\` (post-merge of #2380):\r\n  - https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358101\r\n  - https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358088\r\n- Originating PR: #2380 (the resolver itself is correct; only the test's assertion was wrong).\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(ci): use terraform exit code as the source of truth for CI status @osterman (#2382)</summary>\r\n\r\n## what\r\n\r\n- Make the **terraform exit code** the authoritative signal for success/failure (and, for `terraform plan` with `-detailed-exitcode`, for change detection) in the CI summary path. Text parsing of stdout/stderr is downgraded to *enrichment only* — it still extracts resource counts, output values, and error message bodies, but no longer drives the binary `HasErrors` / `HasChanges` decisions.\r\n- Plumb the exit code through `cmd/terraform/utils.go` → `pkg/hooks RunCIHooks` → `pkg/ci ExecuteOptions` → `plugin.HookContext` so the plugin handler has a clean signal independent of output format.\r\n- Rewrite `parseOutputWithError` (`pkg/ci/plugins/terraform/handlers.go`) so that:\r\n  - `apply`/`deploy`: `HasErrors = (exitCode != 0)`\r\n  - `plan`: `HasErrors = (exitCode == 1)`; `exitCode == 2` also implies `HasChanges`\r\n  - other commands: `HasErrors = (exitCode != 0)`\r\n  - exit-code success discards spurious \"Error:\" matches from text; exit-code failure still falls back to `CommandError.Error()` for the body if text parsing didn't find one.\r\n- Wire the enriched `*plugin.OutputResult` from `parseOutputWithError` through `writeSummary` and `buildTemplateContext` (it had been silently dropped — `writeSummary` had `_ *plugin.OutputResult` as its second arg, and `buildTemplateContext` re-parsed `ctx.Output` from scratch). `buildTemplateContext` keeps a `nil`-fallback so legacy callers continue to work.\r\n- Refactor `RunCIHooks` to take a `*RunCIHooksOptions` struct (per the repo's options pattern) since the parameter list grew past the linter's max-args limit.\r\n- Add tests covering all the new branches: exit-code-only failure rendering, exit-code 2 → `HasChanges` for plan, apply exit 0 with stray `Error:` in output → no error, plus the original failure-summary tests for plan/apply/deploy.\r\n\r\n## why\r\n\r\n- Reported regression: `atmos terraform deploy <component> -s <stack> --upload-status` failing at the **authentication step** (before terraform itself ran, exit code 1) still produced a job summary that read `## No Changes Applied for eks/karpenter-node-pool in e98d-gov-use1-dss` with a `NO CHANGE` badge. The check run was correctly marked failed, but the summary contradicted it.\r\n- Root cause was architectural: the CI summary path used text parsing as the *primary* source of truth for failure/change state. The auth-failure stderr did not match `ExtractErrors`'s `^Error:` regex (it's emitted as `**Error:**` in markdown form), and `writeSummary` silently dropped the already-enriched `OutputResult`, so the apply template fell through to the no-changes branch. Anything that fails before terraform runs — auth, OOM, signal kill, network — would have hit the same bug.\r\n- Terraform exit codes are well-defined and stable (`apply`: 0 = success / non-zero = error; `plan -detailed-exitcode`: 0/1/2). Using them as the authoritative signal makes the hook robust against output-format drift between Terraform and OpenTofu, and against any pre-terraform failure that produces no parseable output. `errUtils.GetExitCode` already unwraps `exec.ExitError`, `ExecError`, `exitCoder`, and `WorkflowStepError`, so the existing error chains carry it through without further plumbing.\r\n\r\n## references\r\n\r\n- Affected handlers: `pkg/ci/plugins/terraform/handlers.go` (`parseOutputWithError`, `writeSummary`).\r\n- Affected helper: `pkg/ci/plugins/terraform/plugin.go` (`buildTemplateContext`).\r\n- Plumbing: `pkg/ci/internal/plugin/types.go`, `pkg/ci/executor.go`, `pkg/hooks/hooks.go`, `cmd/terraform/utils.go`.\r\n- Templates (unchanged): `pkg/ci/plugins/terraform/templates/{apply,plan}.md` already had `{{ if .Result.HasErrors }}` branches; they just weren't being reached.\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n## Release Notes\r\n\r\n* **Bug Fixes**\r\n  * Improved error detection and failure reporting by treating command exit codes as the authoritative indicator of success/failure, fixing edge cases where errors occur before terraform produces output.\r\n  * Enhanced CI/check-run status accuracy for `plan` and `apply` operations, properly handling plan changes and command execution failures.\r\n\r\n* **Tests**\r\n  * Added comprehensive test coverage for exit code handling, error state reconciliation, and CI hook execution workflows.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(auth): preserve AWS SDK error in assume-role / web-identity / assume-root failures @aknysh (#2385)</summary>\r\n\r\n## what\r\n\r\n- Adds `WithCause(err)` at the three STS error sites in\r\n  `pkg/auth/identities/aws/`:\r\n  - `assume_role.go` — standard `AssumeRole` path.\r\n  - `assume_role.go` — `AssumeRoleWithWebIdentity` (OIDC) path.\r\n  - `assume_root.go` — `AssumeRoot` (centralized root access) path.\r\n- Adds regression tests in `pkg/auth/identities/aws/assume_sdk_error_test.go`\r\n  that point STS at a local `httptest.Server` returning AWS-style XML\r\n  error envelopes (via the existing `aws.resolver.url` mechanism). Each\r\n  test asserts the sentinel is preserved (`errors.Is(err,\r\n  ErrAuthenticationFailed)`), the AWS error code and message are\r\n  reachable in `err.Error()`, and the SDK error is also reachable\r\n  through `errors.As(err, &smithy.APIError)`.\r\n- Adds `docs/fixes/2026-05-01-assume-role-error-swallows-aws-cause.md`\r\n  documenting the issue and fix.\r\n\r\n## why\r\n\r\n- The three error sites built an enriched error with\r\n  `errUtils.Build(ErrAuthenticationFailed).WithExplanation(...).WithHint(...).Err()`\r\n  but never threaded the underlying SDK `err` into the chain. Operators\r\n  saw only `authentication failed: identity=<name> step=<n>:\r\n  authentication failed` with no AWS context.\r\n- That made it impossible to tell, without re-running under\r\n  `ATMOS_LOGS_LEVEL=Debug`, whether the failure was `AccessDenied`,\r\n  `NoSuchEntity`, `InvalidIdentityToken`, `ExpiredTokenException`,\r\n  `MalformedPolicyDocumentException`, throttling, etc. Each has a\r\n  different remediation; the hint list (\"verify the role ARN\", \"check\r\n  the trust policy\", ...) effectively enumerated every plausible cause\r\n  because the actual one had been dropped.\r\n- The error builder already exposes `WithCause(err)` for exactly this\r\n  case (`errors/builder.go:104-167`). It chains the cause via\r\n  `fmt.Errorf(\"%w: %w\", sentinel, cause)`, preserves the sentinel for\r\n  `errors.Is` checks, and merges any hints/safe details the cause\r\n  already carried. The canonical pattern is already used at\r\n  `pkg/auth/identities/aws/webflow_token.go:88-97`. The three assume\r\n  sites just hadn't adopted it yet.\r\n- After the fix, the same failure renders with the AWS-side reason\r\n  inline:\r\n  `authentication failed: identity=<name> step=<n>: authentication failed: operation error STS: AssumeRoleWithWebIdentity, https response error StatusCode: 403, RequestID: ..., api error AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity`\r\n  — which makes the trust-policy / token / role-ARN problems\r\n  diagnosable from the first run.\r\n- Verified by reverting just the three `WithCause(err)` lines and\r\n  confirming the new tests fail; restoring the fix turns them green\r\n  again. Full `pkg/auth/...` test suite (~25 packages) passes.\r\n\r\n## references\r\n\r\n- `docs/fixes/2026-05-01-assume-role-error-swallows-aws-cause.md` —\r\n  full root-cause writeup, code paths, and rationale (added in this\r\n  PR).\r\n- `errors/builder.go:104-167` — `WithCause` / `WithCausef` helpers\r\n  used by the fix.\r\n- `pkg/auth/identities/aws/webflow_token.go:88-97` — canonical\r\n  pattern referenced as the model for these three sites.\r\n- `pkg/auth/manager_chain.go:570` — chain wrapper that already\r\n  expected the leaf to thread the cause via the trailing `%w`; this\r\n  PR makes the leaf actually do so.\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Preserve and surface underlying AWS STS error details in authentication failures while retaining existing sentinel behavior.\r\n\r\n* **Tests**\r\n  * Added regression tests that verify sentinel preservation, inclusion of AWS error text, and access to typed SDK errors across multiple STS error scenarios.\r\n\r\n* **Documentation**\r\n  * Added a doc with before/after examples and end-to-end test descriptions for the error-handling change.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(describe-affected): resolve PR base via merge-base with shallow-clone self-heal @osterman (#2380)</summary>\r\n\r\n## what\r\n\r\nFix `atmos describe affected` reporting many more affected components\r\nthan the PR actually modified, specifically when the PR is **out of\r\ndate with the target branch**.\r\n\r\n- `pkg/git/merge_base.go` adds `MergeBaseWithAutoFetch` that runs a\r\n  targeted `git fetch origin <target>` (and optionally one\r\n  `--deepen=200`) when `MergeBase` can't resolve. Bounded retries.\r\n- `pkg/ci/providers/github/base.go:resolvePRBase` keeps merge-base as\r\n  the primary strategy and drops the buggy last-resort path that\r\n  returned `refs/remotes/origin/<target>` (which downstream resolved\r\n  to the *current tip* of the target branch, producing the\r\n  false-positives). New last-resort is `event.pull_request.base.sha`,\r\n  which is frozen at the last PR sync and never points to the\r\n  current tip.\r\n- `ExecuteDescribeAffectedWithTargetRefCheckout` accepts a new\r\n  `targetBranch` parameter and self-heals via `git fetch` when\r\n  worktree creation hits a missing target commit.\r\n- Adds `pkg/git/fetch.go` (`FetchRef`, `DeepenFetch`) lifted from\r\n  PR #2285. New `TargetBranch` field on `BaseResolution` and\r\n  `DescribeAffectedCmdArgs`.\r\n\r\n## why\r\n\r\nA customer reported that `atmos describe affected` on an out-of-date\r\nPR listed components the PR did not touch. The root cause was a\r\nfallback path documented as \"handles this gracefully\" in the PRD\r\nthat, in practice, silently produced wrong results when the local\r\nrepo was a shallow checkout (the `actions/checkout@v4` default).\r\nWalkthrough and rationale are in\r\n[`docs/fixes/2026-04-30-describe-affected-out-of-date-pr.md`](./docs/fixes/2026-04-30-describe-affected-out-of-date-pr.md).\r\n\r\nThe user's suggestion — using `pull_request.merge_commit_sha` as\r\nthe base — would also work and is documented as a considered\r\nalternative in the fixes doc. We chose merge-base + auto-fetch\r\nbecause it preserves the existing PRD architecture, doesn't require\r\nfetching `M`'s parent separately, and works naturally with\r\n`actions/checkout@v4`'s default merge-ref checkout.\r\n\r\n## supersedes #2285\r\n\r\nPR #2285 proposed promoting `pull_request.base.sha` to the *primary*\r\nstrategy. This PR keeps merge-base as primary (gold standard) and\r\nuses `base.sha` only as a fallback that replaces the buggy\r\nref-tip path. The fetch helpers and signature plumbing are lifted\r\nfrom #2285; credit to the original work.\r\n\r\n## tests\r\n\r\n- `pkg/git/merge_base_test.go`: new\r\n  `TestMergeBaseWithAutoFetch_RecoversFromMissingRef` builds an\r\n  origin/clone pair, deletes `origin/main` to simulate a shallow\r\n  CI checkout, and asserts the recovered SHA is the fork point —\r\n  not the current main tip.\r\n- `pkg/ci/providers/github/base_test.go`:\r\n  `TestResolveBase_PullRequest_OutOfDate_FallsBackToPayloadSHA`\r\n  reproduces the customer scenario at unit-test level.\r\n- `internal/exec/describe_affected_test.go:TestResolveBaseFromCI`\r\n  hardened to require `describe.SHA` is populated and\r\n  `describe.Ref` empty — guards against any future regression that\r\n  re-introduces the ref-tip fallback.\r\n\r\n## references\r\n\r\n- supersedes #2285\r\n- closes the customer-reported regression introduced in #2241\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * More reliable PR base resolution in CI: auto-fetch + one-step deepen for shallow checkouts, targeted ref retry when refs are missing, and safer fallback to event payload base SHA to reduce false positives.\r\n* **New Features**\r\n  * Merge-base recovery with targeted fetch/deepen, worktree retry on missing commits, and explicit propagation of PR target branch for CI resolutions.\r\n* **Documentation**\r\n  * Updated CI/base-resolution docs and troubleshooting note for out-of-date PRs.\r\n* **Tests**\r\n  * New and expanded unit/integration tests covering recovery, fetch/deepen, and fallback paths.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: authbridge resolver reads auth context from manager's stackInfo, not caller's @MrZablah (#2379)</summary>\r\n\r\n## what\r\n                                                                                                                                                         \r\n  - Fix !store.get failing with \"AWS auth context not available\" when a store backend is configured with an identity: field\r\n  - authbridge.Resolver now reads the post-authentication AWS/Azure/GCP context from the auth manager's own internal stackInfo (via GetStackInfo())      \r\n  instead of the caller's stackInfo                                                                                                                      \r\n  - Add regression test TestResolveAWSAuthContext_PointerMismatch that directly reproduces the pointer mismatch scenario                                 \r\n                                                                                                                                                         \r\n  ## why             \r\n                                                                                                                                                         \r\n  - pkg/auth.createAuthManagerInstance allocates its own *schema.ConfigAndStacksInfo for the auth manager — a different pointer than the info passed by  \r\n  the terraform executor to authbridge.NewResolver\r\n  - After AuthManager.Authenticate() succeeds, PostAuthenticate writes credential file paths and profile info into the manager's own                     \r\n  stackInfo.AuthContext.AWS, never the caller's info                                                                                                     \r\n  - The resolver was checking r.stackInfo.AuthContext.AWS (the caller's pointer, always nil) instead of r.authManager.GetStackInfo().AuthContext.AWS (the\r\n   manager's pointer, populated by auth)                                                                                                                 \r\n  - Result: every !store.get call with an identity: configured would succeed at authentication but then immediately fail with \"AWS auth context not\r\n  available\"                                                                                                                                             \r\n                  \r\n  references                                                                                                                                             \r\n                  \r\n  - closes #2377\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Fixed auth context resolution so cloud-specific authentication is sourced from the auth manager rather than resolver-held data.\r\n\r\n* **Chores**\r\n  * Pinned Go toolchain to 1.26.2.\r\n\r\n* **Tests**\r\n  * Updated resolver tests to model manager-owned stack info separately and added a regression test for pointer-mismatch behavior.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>test: increase test coverage in pkg/flags, pkg/filesystem, pkg/http, and pkg/function @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2173)</summary>\r\n- [x] Explore all affected files\r\n- [x] internal/exec/stack_processor_utils_test.go: Convert hardcoded path strings to filepath.Join (both test functions)\r\n- [x] pkg/filesystem/export_test.go: Add trailing period to inline comment on line 35\r\n- [x] Build & test verification\r\n\r\n<!-- START COPILOT CODING AGENT TIPS -->\r\n---\r\n\r\n💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey).\r\n\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Bounded, configurable glob-pattern cache (TTL, max entries, empty-result toggle) with runtime metrics exposed via /debug/vars\r\n  * Safer GitHub auth handling with host allowlisting and Authorization stripping on cross-host redirects\r\n* **Bug Fixes**\r\n  * Consistent non-nil empty-slice result for glob no-matches and improved cache correctness\r\n* **Documentation**\r\n  * Added changelog and minimum Go toolchain guidance (go.mod → Go 1.26+)\r\n* **Tests**\r\n  * Large suite of new tests across globbing, atomic writes, flags, and HTTP client\r\n* **Chores**\r\n  * New test-race Makefile target (race detector + shuffled execution)\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(output): stop after-* hooks from corrupting backend.tf.json when backend uses !terraform.state @zack-is-cool (#2358)</summary>\r\n\r\n## Summary\r\n\r\nFixes #2356. The `after-terraform-apply` store hook path regenerated\r\n`backend.tf.json` / `providers_override.tf.json` from un-rendered\r\ncomponent sections when the backend referenced `!terraform.state`,\r\noverwriting a correctly-rendered file with literal YAML-function strings:\r\n\r\n```diff\r\n-        \"bucket\": \"atmos-tfstate-dev\",\r\n-        \"dynamodb_table\": \"atmos-tfstate-lock-dev\",\r\n+        \"bucket\": \"!terraform.state tfstate-backend dev s3_bucket_id\",\r\n+        \"dynamodb_table\": \"!terraform.state tfstate-backend dev dynamodb_table_name\",\r\n```\r\n\r\nThe hook then failed its `tofu output` call with:\r\n\r\n```\r\nError: Backend initialization required: please run \"tofu init\"\r\nReason: Backend configuration block has changed\r\n```\r\n\r\n## Why\r\n\r\nRegression introduced in v1.216.0 by #2309 (commit `3c0e748ce`) +\r\nfollow-up commit `c7ef142a9` (*\"fix: skip-init should skip yaml function\r\nevaluation\"*). `c7ef142a9` added a guard disabling YAML-function\r\nevaluation when `SkipInit && authManager == nil` to avoid failing on\r\nauth-requiring functions in the post-hook context. The guard is overly\r\nbroad — it also disables evaluation of non-auth functions like\r\n`!terraform.state` — so sections returned from `DescribeComponent` retain\r\nliteral YAML-function strings. `execute()` then extracts `config.Backend`\r\nfrom those sections and writes them to disk via `GenerateBackendIfNeeded`.\r\n\r\n## Fix\r\n\r\nThread `processYamlFunctions bool` through `execute()` in\r\n`pkg/terraform/output/executor.go` and guard the artifact-regeneration\r\nblock (Step 4 / Step 5) behind it. When YAML functions were not\r\nevaluated upstream, `execute()` must not regenerate artifacts from the\r\nun-rendered sections. The backend file on disk from the init/apply phase\r\nis already correct; leaving it alone is always safe. Output reading\r\n(`tofu output`) still works via the on-disk state.\r\n\r\nMinimal, localized diff — four commits:\r\n\r\n1. `refactor(output): inject BackendGenerator and thread processYamlFunctions through execute()` — pure DI plumbing, no behavior change.\r\n2. `fix(output): skip artifact regeneration when YAML functions were not processed` — the actual guard.\r\n3. `test(output): assert backend-generator calls match processYamlFunctions in SkipInit tests` — locks in the invariant in four existing SkipInit tests.\r\n4. `test(output): regression test for #2356 backend.tf.json corruption` — byte-identical integration assertion.\r\n\r\n## Test plan\r\n\r\n- [x] New unit test `TestExecutor_Execute_SkipsArtifactRegen_WhenYamlFunctionsNotProcessed` (demonstrably red before the guard, green after).\r\n- [x] Four existing SkipInit tests strengthened with zero-call expectations on the backend-generator mock.\r\n- [x] Inverse assertion in `TestExecutor_GetAllOutputs_SkipInit_WithAuthManager_ProcessesYamlFunctions`: `GenerateBackendIfNeeded` + `GenerateProvidersIfNeeded` called exactly once when auth is present.\r\n- [x] Integration regression test `TestExecutor_Regression_Issue2356_BackendFileUnchangedInSkipInitPath`: writes a rendered `backend.tf.json`, drives `GetOutputWithOptions(SkipInit=true, authManager=nil)`, asserts the file is byte-identical. Fails without the guard; passes with it.\r\n- [x] `go test ./pkg/terraform/output/... -count=1` green.\r\n- [x] `make lint` / `./custom-gcl run --new-from-rev=origin/main` clean (one `dupl` warning on the new test vs the existing SkipInit test is suppressed with `//nolint:dupl` + justification — they test contrasting invariants at the same call site; extracting shared scaffolding would obscure the red/green comparison).\r\n- [x] Manual end-to-end via LocalStack + Redis repro (`ignore/issues/post-apply-hook-backend-racecondition/repro.sh` in the branch, referenced from #2356). Exits 0 with `FIX VERIFIED` on this branch; backend file byte-diff is empty after the after-apply hook.\r\n- [ ] CI full suite — opening this PR runs it.\r\n\r\n## Follow-up\r\n\r\nThe `processYamlFunctions = false` guard in `GetOutputWithOptions` /\r\n`fetchAndCacheOutputs` is the deeper design issue — auth availability\r\nshould not gate evaluation of non-auth YAML functions. Tracked in #2357.\r\nThis PR is the minimal regression fix for v1.216.x.\r\n\r\n## Release\r\n\r\n- `fix:` conventional commit → patch release (v1.216.1).\r\n- No schema changes, no user-facing config changes.\r\n- No roadmap update (regression fix, not a feature).\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Backend and provider override files are regenerated only when YAML functions are processed, preventing unnecessary rewrites.\r\n  * Fixed a case where skip-initialization could overwrite already-rendered backend/provider files, preserving existing configurations.\r\n\r\n* **Tests**\r\n  * Added regression tests to ensure backend/provider files remain unchanged in the skip-initialization path and to validate correct conditional regeneration behavior.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\n\n  ## Associated Pull Requests\n  - #2371\n\n  ##  Deployment Status\n  To view the Atmos Pro deployment status of this release, see #2390.\n  \n<!-- [event-id]: wfte_XWLvu7Nc8nrtwXxnx7pzWy3p7Jg -->","mentions_count":5},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/316971810","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/316971810/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/316971810/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.217.0-rc.5","id":316971810,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4S5Jsi","tag_name":"v1.217.0-rc.5","target_commitish":"main","name":"v1.217.0-rc.5","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-05-03T19:13:42Z","updated_at":"2026-05-04T01:54:46Z","published_at":"2026-05-04T01:54:46Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460507","id":411460507,"node_id":"RA_kwDOEW4XoM4YhmOb","name":"atmos_1.217.0-rc.5_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":211855536,"digest":"sha256:796e45065fbc86d252c88956f2184c22fc960da0f8c88309711214c1bf56dcbb","download_count":3,"created_at":"2026-05-04T01:53:42Z","updated_at":"2026-05-04T01:53:49Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460390","id":411460390,"node_id":"RA_kwDOEW4XoM4YhmMm","name":"atmos_1.217.0-rc.5_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":198653474,"digest":"sha256:9191bfdde7c59e4582253530509ae72aaed5228b0b7701eab90075b63b6f7c23","download_count":3,"created_at":"2026-05-04T01:53:35Z","updated_at":"2026-05-04T01:53:42Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460393","id":411460393,"node_id":"RA_kwDOEW4XoM4YhmMp","name":"atmos_1.217.0-rc.5_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":206217388,"digest":"sha256:cf324ad8549add0329dc2b3acd82b289147d3c1a342622e589521eee40988a8e","download_count":3,"created_at":"2026-05-04T01:53:35Z","updated_at":"2026-05-04T01:53:43Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460579","id":411460579,"node_id":"RA_kwDOEW4XoM4YhmPj","name":"atmos_1.217.0-rc.5_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191561900,"digest":"sha256:e911ff604f0abb9b1d553e14e8ed8cfc1a67d3a40c26e4c4f5dff7f7c5737a64","download_count":3,"created_at":"2026-05-04T01:53:48Z","updated_at":"2026-05-04T01:53:55Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460511","id":411460511,"node_id":"RA_kwDOEW4XoM4YhmOf","name":"atmos_1.217.0-rc.5_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192573602,"digest":"sha256:908a83d67478862175a5beb9bc5e030f41a4497062bc22f691143ea697601be0","download_count":3,"created_at":"2026-05-04T01:53:42Z","updated_at":"2026-05-04T01:53:48Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460573","id":411460573,"node_id":"RA_kwDOEW4XoM4YhmPd","name":"atmos_1.217.0-rc.5_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207024290,"digest":"sha256:0782edef8a8950b6bb87f9530b98f15ce369d5edca615e0f19951af24d386246","download_count":24,"created_at":"2026-05-04T01:53:47Z","updated_at":"2026-05-04T01:53:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460479","id":411460479,"node_id":"RA_kwDOEW4XoM4YhmN_","name":"atmos_1.217.0-rc.5_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192676002,"digest":"sha256:8fbe0a9a57367ca7684dda7b4011d6b887d1eb8843e392322292481a1161da30","download_count":3,"created_at":"2026-05-04T01:53:41Z","updated_at":"2026-05-04T01:53:47Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460391","id":411460391,"node_id":"RA_kwDOEW4XoM4YhmMn","name":"atmos_1.217.0-rc.5_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192282786,"digest":"sha256:6a361777d49449984a5691f618e7e87c27680e26dcdb589799878d94e42224a2","download_count":3,"created_at":"2026-05-04T01:53:35Z","updated_at":"2026-05-04T01:53:41Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460590","id":411460590,"node_id":"RA_kwDOEW4XoM4YhmPu","name":"atmos_1.217.0-rc.5_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:7edbf5c497194b2d17ea3831b2cf7b03d091b79c181dc54c3c8c99b9daddeb18","download_count":2,"created_at":"2026-05-04T01:53:50Z","updated_at":"2026-05-04T01:53:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460392","id":411460392,"node_id":"RA_kwDOEW4XoM4YhmMo","name":"atmos_1.217.0-rc.5_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":196719616,"digest":"sha256:84c7c462be09641135123877100b94c00daef2cc1d68442e2782e41d1dfc7141","download_count":3,"created_at":"2026-05-04T01:53:35Z","updated_at":"2026-05-04T01:53:41Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460523","id":411460523,"node_id":"RA_kwDOEW4XoM4YhmOr","name":"atmos_1.217.0-rc.5_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":210587136,"digest":"sha256:712caca8d53a74266e77ae55d46d904586e5e1cf31e82b4fe7599e80c417af48","download_count":3,"created_at":"2026-05-04T01:53:43Z","updated_at":"2026-05-04T01:53:48Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/411460585","id":411460585,"node_id":"RA_kwDOEW4XoM4YhmPp","name":"atmos_1.217.0-rc.5_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193628672,"digest":"sha256:c013314341e5b10cf9ee71bde2f4dfbc0777ded5e345e3e0d233bc99b24f5c16","download_count":3,"created_at":"2026-05-04T01:53:49Z","updated_at":"2026-05-04T01:53:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.5/atmos_1.217.0-rc.5_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.217.0-rc.5","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.217.0-rc.5","body":"## 🚀 Enhancements\n\n<details>\n  <summary>test(describe-affected): accept all three valid Source values in TestResolveBase_PullRequest_Closed @aknysh (#2388)</summary>\n## what\n\nFix a CI-blocking test bug in \\`pkg/ci/providers/github/base_test.go\\` introduced silently by PR #2380.\n\n\\`TestResolveBase_PullRequest_Closed\\` passes on PR runs (where \\`merge-base\\` or \\`HEAD~1\\` is reachable) but fails on post-merge runs to \\`main\\` (where only the documented \\`event.pull_request.base.sha\\` fallback is available):\n\n- https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358101\n- https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358088\n\n## why\n\nThe assertion\n\n\\`\\`\\`go\nassert.Contains(t, res.Source, \\\"merge-base\\\", \\\"HEAD~1\\\")\n\\`\\`\\`\n\nhas a silent bug: testify treats the 4th positional argument to \\`assert.Contains\\` as the failure *message*, not an alternate value to match. So the test only ever checked for \\`\\\"merge-base\\\"\\`, and quietly passed on PR runs (where \\`merge-base\\` or \\`HEAD~1\\` was reachable) while failing on post-merge runs to \\`main\\` (where the GitHub Actions checkout depth and missing \\`origin/<base>\\` fetch leave only the third documented fallback, \\`event.pull_request.base.sha\\`).\n\n\\`ResolveBase()\\`'s closed-PR fallback chain in \\`pkg/ci/providers/github/base.go\\` documents three valid Sources:\n\n1. \\`\\\"merge-base(HEAD, origin/<target>)\\\"\\`\n2. \\`\\\"HEAD~1 (merged PR, merge-base unavailable)\\\"\\`\n3. \\`\\\"event.pull_request.base.sha\\\"\\`\n\nReplace the broken \\`Contains\\`-with-msg call with an explicit OR over the three substrings. The fix matches the test's own existing comment (\\\"merge-base and HEAD~1 may or may not work; either way we get a valid resolution\\\") -- the bug was that the assertion didn't actually check for \\\"either way.\\\"\n\n**No production code change** -- \\`ResolveBase()\\` already implements all three fallback paths correctly.\n\n## references\n\n- Failing CI runs on \\`main\\` (post-merge of #2380):\n  - https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358101\n  - https://github.com/cloudposse/atmos/actions/runs/25254046463/job/74053358088\n- Originating PR: #2380 (the resolver itself is correct; only the test's assertion was wrong).\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/316788326","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/316788326/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/316788326/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.217.0-rc.4","id":316788326,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4S4c5m","tag_name":"v1.217.0-rc.4","target_commitish":"main","name":"v1.217.0-rc.4","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-05-03T00:27:15Z","updated_at":"2026-05-03T01:55:13Z","published_at":"2026-05-03T01:55:13Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857329","id":410857329,"node_id":"RA_kwDOEW4XoM4YfS9x","name":"atmos_1.217.0-rc.4_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":211855536,"digest":"sha256:1f3e68ec39387e7e7061f68a456591f93860416b79b9444bb3c311f483ecb7f8","download_count":2,"created_at":"2026-05-03T01:54:14Z","updated_at":"2026-05-03T01:54:21Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857253","id":410857253,"node_id":"RA_kwDOEW4XoM4YfS8l","name":"atmos_1.217.0-rc.4_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":198653474,"digest":"sha256:a4ab95281f6711acdc6506c46e98fd1ad0f0db00a818a0e51cd42bca8b26ae9a","download_count":2,"created_at":"2026-05-03T01:54:00Z","updated_at":"2026-05-03T01:54:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857254","id":410857254,"node_id":"RA_kwDOEW4XoM4YfS8m","name":"atmos_1.217.0-rc.4_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":206217388,"digest":"sha256:8203ad97072d68f9837e6fea6a18b76ca9b1caefab2d292cfce7dafedd652af5","download_count":2,"created_at":"2026-05-03T01:54:00Z","updated_at":"2026-05-03T01:54:08Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857255","id":410857255,"node_id":"RA_kwDOEW4XoM4YfS8n","name":"atmos_1.217.0-rc.4_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191561900,"digest":"sha256:2ddf90c771e3fd40544e7944816dd1dfe289c2d5ea738ac5600c06e4f2a74017","download_count":2,"created_at":"2026-05-03T01:54:00Z","updated_at":"2026-05-03T01:54:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857294","id":410857294,"node_id":"RA_kwDOEW4XoM4YfS9O","name":"atmos_1.217.0-rc.4_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192573602,"digest":"sha256:0d176a1ead9e67321d34168d756424aee89341195156128277186fbc9348e52d","download_count":2,"created_at":"2026-05-03T01:54:07Z","updated_at":"2026-05-03T01:54:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857333","id":410857333,"node_id":"RA_kwDOEW4XoM4YfS91","name":"atmos_1.217.0-rc.4_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207024290,"digest":"sha256:7281d606b28d4e53acf71b5ad9a80a5fc5133d01a68d635aadf5212b332f8247","download_count":10,"created_at":"2026-05-03T01:54:15Z","updated_at":"2026-05-03T01:54:22Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857300","id":410857300,"node_id":"RA_kwDOEW4XoM4YfS9U","name":"atmos_1.217.0-rc.4_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192676002,"digest":"sha256:9e5bc9c0cd859c6f8ec32ef50d4738dcdede1796e626f529a176f904f269d18e","download_count":2,"created_at":"2026-05-03T01:54:08Z","updated_at":"2026-05-03T01:54:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857251","id":410857251,"node_id":"RA_kwDOEW4XoM4YfS8j","name":"atmos_1.217.0-rc.4_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192282786,"digest":"sha256:43ce5880cfe2a2c4238ea815dda7e8a0276c73da2af1d0219d1afba24254f536","download_count":2,"created_at":"2026-05-03T01:54:00Z","updated_at":"2026-05-03T01:54:08Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857342","id":410857342,"node_id":"RA_kwDOEW4XoM4YfS9-","name":"atmos_1.217.0-rc.4_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:0b88be80a1616a7682c400f405d90215e9b937e0bf242f616a1db5ed27317e8e","download_count":3,"created_at":"2026-05-03T01:54:16Z","updated_at":"2026-05-03T01:54:16Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857315","id":410857315,"node_id":"RA_kwDOEW4XoM4YfS9j","name":"atmos_1.217.0-rc.4_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":196719616,"digest":"sha256:1a1c0fe494c42be47bd5dad5db51da280aad74b69a37b6fb57fad2364e73cd7f","download_count":2,"created_at":"2026-05-03T01:54:12Z","updated_at":"2026-05-03T01:54:19Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857299","id":410857299,"node_id":"RA_kwDOEW4XoM4YfS9T","name":"atmos_1.217.0-rc.4_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":210587136,"digest":"sha256:7322113ba61d3e740badd1b11ce5326fa6ee8f580189ccb17f69efdcc7a8a0ea","download_count":2,"created_at":"2026-05-03T01:54:08Z","updated_at":"2026-05-03T01:54:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410857301","id":410857301,"node_id":"RA_kwDOEW4XoM4YfS9V","name":"atmos_1.217.0-rc.4_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193628672,"digest":"sha256:47683e9ee4e3e788bfda9b9c0d2630e3a0afc982335d036ccb7b0a0aa679b7ca","download_count":2,"created_at":"2026-05-03T01:54:08Z","updated_at":"2026-05-03T01:54:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.4/atmos_1.217.0-rc.4_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.217.0-rc.4","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.217.0-rc.4","body":"<details>\n  <summary>docs(roadmap): curate featured; drop internal-refactor changelog posts @osterman (#2384)</summary>\n## what\n\n- Cap `featured[]` in `website/src/data/roadmap.js` at **6** curated strategic initiatives. Drop `devcontainer`, `workflows`, `instance-status-upload`, and `chunked-stack-uploads`. Final 6: `atmos-ai`, `cloud-auth`, `native-ci`, `pro-commit`, `source-provisioning`, `toolchain`.\n- Add equivalent milestones to the `ci-cd` initiative for the two demoted Atmos Pro items so their changelogs stay reachable from the roadmap. Recalc `ci-cd.progress` 89 → 92.\n- Delete three internal-only refactor blog posts and their corresponding `quality` initiative milestones: `process-args-flags-refactor`, `refactoring-executeterraform-for-testability`, `describe-stacks-complexity-reduction`. Recalc `quality.progress` 86 → 75.\n- Update `.claude/agents/roadmap.md` with two new rules: (1) `featured[]` is manually curated, max 6, edited only when the user explicitly asks; (2) internal-only refactors with no user-visible change do not get changelog posts. Adds matching schema docs and quality-check items.\n\n## why\n\n- The featured section had drifted into a per-release announcement feed — every minor Atmos Pro plumbing improvement (chunked uploads, instance status, etc.) was rendering at the top of `/roadmap` next to transformative initiatives like Atmos AI and Cloud Auth. That diluted its meaning.\n- The roadmap maintainer agent had no documented rule for `featured[]`, so it was being modified on every release. Codifying \"max 6, opt-in only\" stops the drift at the source.\n- Internal refactor posts (cyclomatic complexity reductions, function decomposition) are engineering wins but produce zero user-visible change. They belong in PR descriptions and `git log`, not the user-facing changelog.\n\n## references\n\n- No issue tracker reference.\n- `no-release` — content/data only; no Go code, no user-visible CLI behavior change. Removing already-published changelog entries that should not have been published.\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Documentation**\n  * Removed three technical blog posts documenting internal refactors\n  * Clarified roadmap maintenance guidance: changelog should omit internal-only refactors; featured entries are curated with a hard cap of 6 and should not be modified unless explicitly requested\n\n* **Chores**\n  * Reorganized featured initiatives and adjusted roadmap milestone tracking\n  * Updated CI/CD progress to 92% and Quality progress to 75%\n  * Updated NOTICE with concrete upstream license URLs\n\n* **Quality**\n  * Added checks to prevent improper featured changes and to omit internal refactors from the changelog\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix(ci): use terraform exit code as the source of truth for CI status @osterman (#2382)</summary>\n## what\n\n- Make the **terraform exit code** the authoritative signal for success/failure (and, for `terraform plan` with `-detailed-exitcode`, for change detection) in the CI summary path. Text parsing of stdout/stderr is downgraded to *enrichment only* — it still extracts resource counts, output values, and error message bodies, but no longer drives the binary `HasErrors` / `HasChanges` decisions.\n- Plumb the exit code through `cmd/terraform/utils.go` → `pkg/hooks RunCIHooks` → `pkg/ci ExecuteOptions` → `plugin.HookContext` so the plugin handler has a clean signal independent of output format.\n- Rewrite `parseOutputWithError` (`pkg/ci/plugins/terraform/handlers.go`) so that:\n  - `apply`/`deploy`: `HasErrors = (exitCode != 0)`\n  - `plan`: `HasErrors = (exitCode == 1)`; `exitCode == 2` also implies `HasChanges`\n  - other commands: `HasErrors = (exitCode != 0)`\n  - exit-code success discards spurious \"Error:\" matches from text; exit-code failure still falls back to `CommandError.Error()` for the body if text parsing didn't find one.\n- Wire the enriched `*plugin.OutputResult` from `parseOutputWithError` through `writeSummary` and `buildTemplateContext` (it had been silently dropped — `writeSummary` had `_ *plugin.OutputResult` as its second arg, and `buildTemplateContext` re-parsed `ctx.Output` from scratch). `buildTemplateContext` keeps a `nil`-fallback so legacy callers continue to work.\n- Refactor `RunCIHooks` to take a `*RunCIHooksOptions` struct (per the repo's options pattern) since the parameter list grew past the linter's max-args limit.\n- Add tests covering all the new branches: exit-code-only failure rendering, exit-code 2 → `HasChanges` for plan, apply exit 0 with stray `Error:` in output → no error, plus the original failure-summary tests for plan/apply/deploy.\n\n## why\n\n- Reported regression: `atmos terraform deploy <component> -s <stack> --upload-status` failing at the **authentication step** (before terraform itself ran, exit code 1) still produced a job summary that read `## No Changes Applied for eks/karpenter-node-pool in e98d-gov-use1-dss` with a `NO CHANGE` badge. The check run was correctly marked failed, but the summary contradicted it.\n- Root cause was architectural: the CI summary path used text parsing as the *primary* source of truth for failure/change state. The auth-failure stderr did not match `ExtractErrors`'s `^Error:` regex (it's emitted as `**Error:**` in markdown form), and `writeSummary` silently dropped the already-enriched `OutputResult`, so the apply template fell through to the no-changes branch. Anything that fails before terraform runs — auth, OOM, signal kill, network — would have hit the same bug.\n- Terraform exit codes are well-defined and stable (`apply`: 0 = success / non-zero = error; `plan -detailed-exitcode`: 0/1/2). Using them as the authoritative signal makes the hook robust against output-format drift between Terraform and OpenTofu, and against any pre-terraform failure that produces no parseable output. `errUtils.GetExitCode` already unwraps `exec.ExitError`, `ExecError`, `exitCoder`, and `WorkflowStepError`, so the existing error chains carry it through without further plumbing.\n\n## references\n\n- Affected handlers: `pkg/ci/plugins/terraform/handlers.go` (`parseOutputWithError`, `writeSummary`).\n- Affected helper: `pkg/ci/plugins/terraform/plugin.go` (`buildTemplateContext`).\n- Plumbing: `pkg/ci/internal/plugin/types.go`, `pkg/ci/executor.go`, `pkg/hooks/hooks.go`, `cmd/terraform/utils.go`.\n- Templates (unchanged): `pkg/ci/plugins/terraform/templates/{apply,plan}.md` already had `{{ if .Result.HasErrors }}` branches; they just weren't being reached.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n## Release Notes\n\n* **Bug Fixes**\n  * Improved error detection and failure reporting by treating command exit codes as the authoritative indicator of success/failure, fixing edge cases where errors occur before terraform produces output.\n  * Enhanced CI/check-run status accuracy for `plan` and `apply` operations, properly handling plan changes and command execution failures.\n\n* **Tests**\n  * Added comprehensive test coverage for exit code handling, error state reconciliation, and CI hook execution workflows.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix(auth): preserve AWS SDK error in assume-role / web-identity / assume-root failures @aknysh (#2385)</summary>\n## what\n\n- Adds `WithCause(err)` at the three STS error sites in\n  `pkg/auth/identities/aws/`:\n  - `assume_role.go` — standard `AssumeRole` path.\n  - `assume_role.go` — `AssumeRoleWithWebIdentity` (OIDC) path.\n  - `assume_root.go` — `AssumeRoot` (centralized root access) path.\n- Adds regression tests in `pkg/auth/identities/aws/assume_sdk_error_test.go`\n  that point STS at a local `httptest.Server` returning AWS-style XML\n  error envelopes (via the existing `aws.resolver.url` mechanism). Each\n  test asserts the sentinel is preserved (`errors.Is(err,\n  ErrAuthenticationFailed)`), the AWS error code and message are\n  reachable in `err.Error()`, and the SDK error is also reachable\n  through `errors.As(err, &smithy.APIError)`.\n- Adds `docs/fixes/2026-05-01-assume-role-error-swallows-aws-cause.md`\n  documenting the issue and fix.\n\n## why\n\n- The three error sites built an enriched error with\n  `errUtils.Build(ErrAuthenticationFailed).WithExplanation(...).WithHint(...).Err()`\n  but never threaded the underlying SDK `err` into the chain. Operators\n  saw only `authentication failed: identity=<name> step=<n>:\n  authentication failed` with no AWS context.\n- That made it impossible to tell, without re-running under\n  `ATMOS_LOGS_LEVEL=Debug`, whether the failure was `AccessDenied`,\n  `NoSuchEntity`, `InvalidIdentityToken`, `ExpiredTokenException`,\n  `MalformedPolicyDocumentException`, throttling, etc. Each has a\n  different remediation; the hint list (\"verify the role ARN\", \"check\n  the trust policy\", ...) effectively enumerated every plausible cause\n  because the actual one had been dropped.\n- The error builder already exposes `WithCause(err)` for exactly this\n  case (`errors/builder.go:104-167`). It chains the cause via\n  `fmt.Errorf(\"%w: %w\", sentinel, cause)`, preserves the sentinel for\n  `errors.Is` checks, and merges any hints/safe details the cause\n  already carried. The canonical pattern is already used at\n  `pkg/auth/identities/aws/webflow_token.go:88-97`. The three assume\n  sites just hadn't adopted it yet.\n- After the fix, the same failure renders with the AWS-side reason\n  inline:\n  `authentication failed: identity=<name> step=<n>: authentication failed: operation error STS: AssumeRoleWithWebIdentity, https response error StatusCode: 403, RequestID: ..., api error AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity`\n  — which makes the trust-policy / token / role-ARN problems\n  diagnosable from the first run.\n- Verified by reverting just the three `WithCause(err)` lines and\n  confirming the new tests fail; restoring the fix turns them green\n  again. Full `pkg/auth/...` test suite (~25 packages) passes.\n\n## references\n\n- `docs/fixes/2026-05-01-assume-role-error-swallows-aws-cause.md` —\n  full root-cause writeup, code paths, and rationale (added in this\n  PR).\n- `errors/builder.go:104-167` — `WithCause` / `WithCausef` helpers\n  used by the fix.\n- `pkg/auth/identities/aws/webflow_token.go:88-97` — canonical\n  pattern referenced as the model for these three sites.\n- `pkg/auth/manager_chain.go:570` — chain wrapper that already\n  expected the leaf to thread the cause via the trailing `%w`; this\n  PR makes the leaf actually do so.\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Preserve and surface underlying AWS STS error details in authentication failures while retaining existing sentinel behavior.\n\n* **Tests**\n  * Added regression tests that verify sentinel preservation, inclusion of AWS error text, and access to typed SDK errors across multiple STS error scenarios.\n\n* **Documentation**\n  * Added a doc with before/after examples and end-to-end test descriptions for the error-handling change.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":2},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/316588343","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/316588343/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/316588343/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.217.0-rc.3","id":316588343,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4S3sE3","tag_name":"v1.217.0-rc.3","target_commitish":"main","name":"v1.217.0-rc.3","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-05-01T05:29:36Z","updated_at":"2026-05-02T01:45:09Z","published_at":"2026-05-02T01:45:09Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250747","id":410250747,"node_id":"RA_kwDOEW4XoM4Yc-37","name":"atmos_1.217.0-rc.3_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":211855520,"digest":"sha256:f3dd6e1df37bbddf43eada7a9a8d37b15cef23092006fc99e69bbfecab36a45b","download_count":1,"created_at":"2026-05-02T01:44:13Z","updated_at":"2026-05-02T01:44:20Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250688","id":410250688,"node_id":"RA_kwDOEW4XoM4Yc-3A","name":"atmos_1.217.0-rc.3_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":198653458,"digest":"sha256:739ec0ae560d3435df7bda1d391fff38cf70810772fd5fe72b3151a97f2cc7e6","download_count":1,"created_at":"2026-05-02T01:44:05Z","updated_at":"2026-05-02T01:44:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250680","id":410250680,"node_id":"RA_kwDOEW4XoM4Yc-24","name":"atmos_1.217.0-rc.3_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":206217388,"digest":"sha256:5b948d021da27ac89f9f7a849e380faaff517ab0f1004eeee3e8308646d54bc3","download_count":1,"created_at":"2026-05-02T01:44:04Z","updated_at":"2026-05-02T01:44:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250622","id":410250622,"node_id":"RA_kwDOEW4XoM4Yc-1-","name":"atmos_1.217.0-rc.3_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191561900,"digest":"sha256:1ec879773e603ef6aaa58fb6b90255b8702be9f4be1dc0f93fc6cb7eab8cdcb6","download_count":1,"created_at":"2026-05-02T01:43:56Z","updated_at":"2026-05-02T01:44:04Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250748","id":410250748,"node_id":"RA_kwDOEW4XoM4Yc-38","name":"atmos_1.217.0-rc.3_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192573602,"digest":"sha256:23c5e799497aee1db67181e45f8ba02d07f54e49426d1d3eeb67b7b993710c38","download_count":1,"created_at":"2026-05-02T01:44:13Z","updated_at":"2026-05-02T01:44:20Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250624","id":410250624,"node_id":"RA_kwDOEW4XoM4Yc-2A","name":"atmos_1.217.0-rc.3_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207020194,"digest":"sha256:3be7ad7311d5282d6251072c879d6228f65bf1e4b6c59f6b74b649d605b73083","download_count":5,"created_at":"2026-05-02T01:43:56Z","updated_at":"2026-05-02T01:44:04Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250621","id":410250621,"node_id":"RA_kwDOEW4XoM4Yc-19","name":"atmos_1.217.0-rc.3_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192676002,"digest":"sha256:aa8f8169d5e2b627edeb516ba5c1be03e2862d667ed83a8560c8c5056287e846","download_count":1,"created_at":"2026-05-02T01:43:56Z","updated_at":"2026-05-02T01:44:04Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250620","id":410250620,"node_id":"RA_kwDOEW4XoM4Yc-18","name":"atmos_1.217.0-rc.3_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192282786,"digest":"sha256:01c2b64ef06a8957a958292fbc34ca45c85cbafeb8878c53d0993530297483de","download_count":1,"created_at":"2026-05-02T01:43:56Z","updated_at":"2026-05-02T01:44:04Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250768","id":410250768,"node_id":"RA_kwDOEW4XoM4Yc-4Q","name":"atmos_1.217.0-rc.3_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:27a251ae95262177fd7ba95c2dd1c0b8b51c3a91da34dcc2ce6906c49cfcbe89","download_count":1,"created_at":"2026-05-02T01:44:17Z","updated_at":"2026-05-02T01:44:17Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250698","id":410250698,"node_id":"RA_kwDOEW4XoM4Yc-3K","name":"atmos_1.217.0-rc.3_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":196719104,"digest":"sha256:08ab95b3d30ed53c46c4a22cd7298315d90dbabdfcc54d9f5d8436229e9287f5","download_count":1,"created_at":"2026-05-02T01:44:05Z","updated_at":"2026-05-02T01:44:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250697","id":410250697,"node_id":"RA_kwDOEW4XoM4Yc-3J","name":"atmos_1.217.0-rc.3_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":210585600,"digest":"sha256:7013358544dde85b8ca725da3e2fcd58c2ac800bb5faba512ad88549b3928db9","download_count":1,"created_at":"2026-05-02T01:44:05Z","updated_at":"2026-05-02T01:44:16Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/410250742","id":410250742,"node_id":"RA_kwDOEW4XoM4Yc-32","name":"atmos_1.217.0-rc.3_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193627648,"digest":"sha256:9a535ab5e48f25d38ef50c4622def34830fdfb0e453397e77cb6094203eca65e","download_count":1,"created_at":"2026-05-02T01:44:12Z","updated_at":"2026-05-02T01:44:18Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.3/atmos_1.217.0-rc.3_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.217.0-rc.3","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.217.0-rc.3","body":"<details>\n  <summary>docs: document the component `provision:` block (provision.backend, provision.workdir) @osterman (#2378)</summary>\n## what\n\n- Add a new stack-config schema page at `website/docs/stacks/components/provision.mdx` that documents the entire `provision:` block as a coherent feature, with sections for `provision.backend.enabled` (terraform-only), `provision.workdir.enabled` (all four toolchains), toolchain defaults, component-level overrides, and global defaults via `settings.provision.workdir.{enabled,ttl}` in `atmos.yaml`.\n- Add a `:::tip` callout to `website/docs/stacks/components/terraform/backend.mdx` clarifying that `backend:` (where state is stored) is distinct from `provision.backend:` (auto-create that location).\n- Cross-link `website/docs/components/terraform/backend-provisioning.mdx` to the new schema page so the conceptual deep-dive points at the schema reference.\n\n## why\n\n- The `provision:` block (with `provision.backend.enabled` and `provision.workdir.enabled`) is functional and used in fixtures, but had no dedicated documentation page in *Stack Configuration*. The only references were a CLI command page (`atmos terraform workdir`), a passing mention in `cli/configuration/components/terraform.mdx`, and the backend-provisioning conceptual page — none of which document the schema directly.\n- Closes a discoverability gap: a user reviewing the components sidebar saw entries for `*.metadata`, `ansible`, `helmfile`, `packer`, `terraform/backend` and noticed `provision` was missing entirely.\n- The added `:::tip` on the backend page resolves long-standing confusion between the `backend:` block (state location) and the `provision.backend:` block (whether to bootstrap that location).\n\n## references\n\n- Schema source: `pkg/schema/schema.go:402-414` (`ProvisionWorkdirSettings`), `pkg/provisioner/workdir/types.go:57-61` (`WorkdirConfig`), `pkg/provisioner/backend_hook.go:111-125` (`provision.backend.enabled`).\n- Canonical fixture: `tests/fixtures/scenarios/workdir/stacks/catalog/workdir-defaults.yaml`.\n- Verified with `cd website && npm run build` (zero broken links; new page registered as the 544th content route).\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added `list:` CLI configuration for customizable `components`, `instances`, and `stacks` output\n  * Added global `settings.provision` and `provision.workdir` docs for workdir defaults/TTL\n\n* **Documentation**\n  * Added component provisioning docs (backend + workdir) and relocated backend provisioning links/site redirects\n  * Added telemetry configuration page with privacy guarantees\n  * Expanded VCS token injection docs; Bitbucket username standardized to `BITBUCKET_USERNAME`\n\n* **Chores**\n  * Updated NOTICE license URL entries to `Unknown`\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>docs: refresh CI page with native CI workflows; deprecate legacy GH Actions @osterman (#2373)</summary>\n## what\n\n- Move six legacy Cloud Posse GitHub Action docs (`affected-stacks`, `atmos-terraform-plan/apply`, drift detection/remediation, and the index) from `website/docs/integrations/github-actions/` to `website/docs/deprecated/github-actions/`, with `:::warning Deprecated` banners on each page pointing readers to `/ci`.\n- Rebuild `website/docs/ci/ci.mdx` around the two reference repos `cloudposse-examples/atmos-native-ci` and `cloudposse-examples/atmos-native-ci-advanced` — concrete excerpts for deploy-on-PR, deploy-on-merge, preview cleanup, and an `atmos describe affected --format=matrix` fan-out, plus a discreet pointer to the deprecated content.\n- Add client-redirects from all six legacy `/integrations/github-actions/*` URLs to `/ci`, add a collapsed \"Deprecated\" sub-category at the bottom of the **Resources** sidebar, keep `setup-atmos` and `component-updater` in the (now smaller) GitHub Actions sidebar entry, and repoint cross-links across docs, two blog posts, and the roadmap.\n\n## why\n\n- Atmos now ships native CI integration (job summaries, output variables, status checks, planfile storage) directly in the CLI, so `atmos terraform plan/apply/deploy` already produces the artifacts the wrapper actions used to provide — the legacy actions are no longer the recommended path for new projects.\n- The previous structure buried native CI behind a single page while giving the legacy actions a first-class sidebar section, conflicting with the recommendation in the legacy index page itself; this PR aligns navigation with the recommended path and makes the deprecated material reachable but de-emphasized.\n\n## references\n\n- [`cloudposse-examples/atmos-native-ci`](https://github.com/cloudposse-examples/atmos-native-ci) — basic example workflows excerpted in the new `/ci` page\n- [`cloudposse-examples/atmos-native-ci-advanced`](https://github.com/cloudposse-examples/atmos-native-ci-advanced) — matrix workflow excerpted in the new `/ci` page\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * describe affected --format=matrix now auto-writes matrix output to $GITHUB_OUTPUT in CI when enabled (explicit --output-file still wins); workflow examples updated.\n\n* **Documentation**\n  * Added a comprehensive \"Native CI for GitHub Actions\" guide, updated many docs and blog posts to use native CI wording, and published a blog post about the matrix auto-output behavior.\n  * Marked legacy GitHub Actions wrapper actions/pages as deprecated with warning guidance.\n\n* **Chores**\n  * Added legacy URL redirects and a new \"Deprecated\" docs section.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix(describe-affected): resolve PR base via merge-base with shallow-clone self-heal @osterman (#2380)</summary>\n## what\n\nFix `atmos describe affected` reporting many more affected components\nthan the PR actually modified, specifically when the PR is **out of\ndate with the target branch**.\n\n- `pkg/git/merge_base.go` adds `MergeBaseWithAutoFetch` that runs a\n  targeted `git fetch origin <target>` (and optionally one\n  `--deepen=200`) when `MergeBase` can't resolve. Bounded retries.\n- `pkg/ci/providers/github/base.go:resolvePRBase` keeps merge-base as\n  the primary strategy and drops the buggy last-resort path that\n  returned `refs/remotes/origin/<target>` (which downstream resolved\n  to the *current tip* of the target branch, producing the\n  false-positives). New last-resort is `event.pull_request.base.sha`,\n  which is frozen at the last PR sync and never points to the\n  current tip.\n- `ExecuteDescribeAffectedWithTargetRefCheckout` accepts a new\n  `targetBranch` parameter and self-heals via `git fetch` when\n  worktree creation hits a missing target commit.\n- Adds `pkg/git/fetch.go` (`FetchRef`, `DeepenFetch`) lifted from\n  PR #2285. New `TargetBranch` field on `BaseResolution` and\n  `DescribeAffectedCmdArgs`.\n\n## why\n\nA customer reported that `atmos describe affected` on an out-of-date\nPR listed components the PR did not touch. The root cause was a\nfallback path documented as \"handles this gracefully\" in the PRD\nthat, in practice, silently produced wrong results when the local\nrepo was a shallow checkout (the `actions/checkout@v4` default).\nWalkthrough and rationale are in\n[`docs/fixes/2026-04-30-describe-affected-out-of-date-pr.md`](./docs/fixes/2026-04-30-describe-affected-out-of-date-pr.md).\n\nThe user's suggestion — using `pull_request.merge_commit_sha` as\nthe base — would also work and is documented as a considered\nalternative in the fixes doc. We chose merge-base + auto-fetch\nbecause it preserves the existing PRD architecture, doesn't require\nfetching `M`'s parent separately, and works naturally with\n`actions/checkout@v4`'s default merge-ref checkout.\n\n## supersedes #2285\n\nPR #2285 proposed promoting `pull_request.base.sha` to the *primary*\nstrategy. This PR keeps merge-base as primary (gold standard) and\nuses `base.sha` only as a fallback that replaces the buggy\nref-tip path. The fetch helpers and signature plumbing are lifted\nfrom #2285; credit to the original work.\n\n## tests\n\n- `pkg/git/merge_base_test.go`: new\n  `TestMergeBaseWithAutoFetch_RecoversFromMissingRef` builds an\n  origin/clone pair, deletes `origin/main` to simulate a shallow\n  CI checkout, and asserts the recovered SHA is the fork point —\n  not the current main tip.\n- `pkg/ci/providers/github/base_test.go`:\n  `TestResolveBase_PullRequest_OutOfDate_FallsBackToPayloadSHA`\n  reproduces the customer scenario at unit-test level.\n- `internal/exec/describe_affected_test.go:TestResolveBaseFromCI`\n  hardened to require `describe.SHA` is populated and\n  `describe.Ref` empty — guards against any future regression that\n  re-introduces the ref-tip fallback.\n\n## references\n\n- supersedes #2285\n- closes the customer-reported regression introduced in #2241\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * More reliable PR base resolution in CI: auto-fetch + one-step deepen for shallow checkouts, targeted ref retry when refs are missing, and safer fallback to event payload base SHA to reduce false positives.\n* **New Features**\n  * Merge-base recovery with targeted fetch/deepen, worktree retry on missing commits, and explicit propagation of PR target branch for CI resolutions.\n* **Documentation**\n  * Updated CI/base-resolution docs and troubleshooting note for out-of-date PRs.\n* **Tests**\n  * New and expanded unit/integration tests covering recovery, fetch/deepen, and fallback paths.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix: authbridge resolver reads auth context from manager's stackInfo, not caller's @MrZablah (#2379)</summary>\nwhat\r\n                                                                                                                                                         \r\n  - Fix !store.get failing with \"AWS auth context not available\" when a store backend is configured with an identity: field\r\n  - authbridge.Resolver now reads the post-authentication AWS/Azure/GCP context from the auth manager's own internal stackInfo (via GetStackInfo())      \r\n  instead of the caller's stackInfo                                                                                                                      \r\n  - Add regression test TestResolveAWSAuthContext_PointerMismatch that directly reproduces the pointer mismatch scenario                                 \r\n                                                                                                                                                         \r\n  why             \r\n                                                                                                                                                         \r\n  - pkg/auth.createAuthManagerInstance allocates its own *schema.ConfigAndStacksInfo for the auth manager — a different pointer than the info passed by  \r\n  the terraform executor to authbridge.NewResolver\r\n  - After AuthManager.Authenticate() succeeds, PostAuthenticate writes credential file paths and profile info into the manager's own                     \r\n  stackInfo.AuthContext.AWS, never the caller's info                                                                                                     \r\n  - The resolver was checking r.stackInfo.AuthContext.AWS (the caller's pointer, always nil) instead of r.authManager.GetStackInfo().AuthContext.AWS (the\r\n   manager's pointer, populated by auth)                                                                                                                 \r\n  - Result: every !store.get call with an identity: configured would succeed at authentication but then immediately fail with \"AWS auth context not\r\n  available\"                                                                                                                                             \r\n                  \r\n  references                                                                                                                                             \r\n                  \r\n  - closes #2377\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Fixed auth context resolution so cloud-specific authentication is sourced from the auth manager rather than resolver-held data.\n\n* **Chores**\n  * Pinned Go toolchain to 1.26.2.\n\n* **Tests**\n  * Updated resolver tests to model manager-owned stack info separately and added a regression test for pointer-mismatch behavior.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":2},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/314335791","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/314335791/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/314335791/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.217.0-rc.2","id":314335791,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SvGIv","tag_name":"v1.217.0-rc.2","target_commitish":"main","name":"v1.217.0-rc.2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-27T17:16:06Z","updated_at":"2026-04-28T01:50:03Z","published_at":"2026-04-28T01:50:03Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023363","id":407023363,"node_id":"RA_kwDOEW4XoM4YQq8D","name":"atmos_1.217.0-rc.2_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":211838928,"digest":"sha256:c92b5cdb6abd62658c39e4420826e80c8163b2126ec58f3c0f2ee137ac3f6ee9","download_count":1,"created_at":"2026-04-28T01:47:42Z","updated_at":"2026-04-28T01:48:43Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023422","id":407023422,"node_id":"RA_kwDOEW4XoM4YQq8-","name":"atmos_1.217.0-rc.2_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":198636738,"digest":"sha256:1ac89a5309f8daa5fe8c5023eb799cbf8161fb325704d83354fd60679333cdc6","download_count":2,"created_at":"2026-04-28T01:47:55Z","updated_at":"2026-04-28T01:49:01Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023405","id":407023405,"node_id":"RA_kwDOEW4XoM4YQq8t","name":"atmos_1.217.0-rc.2_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":206205100,"digest":"sha256:dfddae444e40fb66c88aa8cf68cedaea88543d983e22796f5c8e01aa7d2c5042","download_count":1,"created_at":"2026-04-28T01:47:50Z","updated_at":"2026-04-28T01:48:56Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023361","id":407023361,"node_id":"RA_kwDOEW4XoM4YQq8B","name":"atmos_1.217.0-rc.2_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191496364,"digest":"sha256:b8bba7c5e65b6af7e0c7e6c2416a05477f2c9776af6c8bc442b82cf227007247","download_count":1,"created_at":"2026-04-28T01:47:42Z","updated_at":"2026-04-28T01:47:48Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023398","id":407023398,"node_id":"RA_kwDOEW4XoM4YQq8m","name":"atmos_1.217.0-rc.2_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192561314,"digest":"sha256:b98e625a8a57064df278720491ea8d637fc960da203ccc0cef4a2a58139442fc","download_count":1,"created_at":"2026-04-28T01:47:49Z","updated_at":"2026-04-28T01:47:55Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023364","id":407023364,"node_id":"RA_kwDOEW4XoM4YQq8E","name":"atmos_1.217.0-rc.2_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207007906,"digest":"sha256:6593a5f7d599ab29b67ac681b44ceba0123c24d7aaa5f9f256118beec3d2243d","download_count":49,"created_at":"2026-04-28T01:47:42Z","updated_at":"2026-04-28T01:47:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023457","id":407023457,"node_id":"RA_kwDOEW4XoM4YQq9h","name":"atmos_1.217.0-rc.2_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192676002,"digest":"sha256:902dc957eb2df55a25fe89c69238c4b6f8cded7f77ba32ea16715e3a2df79ab1","download_count":1,"created_at":"2026-04-28T01:48:01Z","updated_at":"2026-04-28T01:48:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023395","id":407023395,"node_id":"RA_kwDOEW4XoM4YQq8j","name":"atmos_1.217.0-rc.2_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":192282786,"digest":"sha256:b206a9e91ba8eef3219b818be7c144f82b774fe55ec88a02c79c320d96370929","download_count":1,"created_at":"2026-04-28T01:47:49Z","updated_at":"2026-04-28T01:47:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023587","id":407023587,"node_id":"RA_kwDOEW4XoM4YQq_j","name":"atmos_1.217.0-rc.2_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:68e90592e7444c213305072dfa382f2128070b51dd94d658d09f5cba59ceae12","download_count":1,"created_at":"2026-04-28T01:48:14Z","updated_at":"2026-04-28T01:48:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023527","id":407023527,"node_id":"RA_kwDOEW4XoM4YQq-n","name":"atmos_1.217.0-rc.2_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":196705280,"digest":"sha256:31948c53f3314ef79f71d14588e5aff4c381ad4d2418b927ca04af0beedc7f0f","download_count":1,"created_at":"2026-04-28T01:48:07Z","updated_at":"2026-04-28T01:48:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023420","id":407023420,"node_id":"RA_kwDOEW4XoM4YQq88","name":"atmos_1.217.0-rc.2_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":210571776,"digest":"sha256:cdff39fec0c9565e1a58e9cfc78d82fc3569d17ae6f69fa403260be1c88a30a8","download_count":1,"created_at":"2026-04-28T01:47:54Z","updated_at":"2026-04-28T01:48:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/407023362","id":407023362,"node_id":"RA_kwDOEW4XoM4YQq8C","name":"atmos_1.217.0-rc.2_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193616384,"digest":"sha256:663ede270d6995ecee47e24bb66ed6964b076d70d77fc6ac6da37fecd18cd716","download_count":1,"created_at":"2026-04-28T01:47:42Z","updated_at":"2026-04-28T01:47:49Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.2/atmos_1.217.0-rc.2_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.217.0-rc.2","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.217.0-rc.2","body":"<details>\n  <summary>feat(list): --process-templates and --process-functions flags; fix list instances --upload auth @aknysh (#2363)</summary>\n## what\n\n- Added `--process-templates` and `--process-functions` CLI flags (and `ATMOS_PROCESS_TEMPLATES` / `ATMOS_PROCESS_FUNCTIONS` env vars) to every `atmos list` subcommand that processes stack manifests: `list instances`, `list components`, `list metadata`, `list sources`, `list stacks`. Defaults are `true`, matching `atmos describe affected` / `atmos describe stacks` / `atmos describe component`.\n- Clarified the flag descriptions that used to conflate YAML functions with Go template functions. `--process-templates` toggles Go templates (including `atmos.Component(...)`); `--process-functions` toggles YAML functions (`!terraform.state`, `!terraform.output`, `!store`, `!aws.*`, …).\n- Fixed the underlying `atmos list instances --upload` hang in CI: per-component auth resolution in `internal/exec/describe_stacks_component_processor.go` was gated on `processYamlFunctions` only, so the template-only path (`atmos.Component(...)` inside Go templates) ran `terraform init` with an empty `AuthContext` against remote backends and failed with `No valid credential sources found`. Guard now fires when either templates or YAML functions will run.\n- Refactored the per-component auth resolver for testability: extracted `shouldResolvePerComponentAuth(...)` predicate, `resolveComponentAuthManager(...)` method, and an injectable `componentAuthManagerResolver` field on `describeStacksProcessor` so the decision can be exercised without running real OIDC/STS.\n- Threaded the two flags through `InstancesCommandOptions` / `MetadataOptions` in `pkg/list/` and through both the matrix-format and tree-format branches of `list_instances.go`, so every output path of the same invocation honors the same flag values.\n- Added three layers of regression coverage for each command that just got the flags (parser wiring, options struct, flag propagation to `ExecuteDescribeStacks`) plus a dedicated auth-guard regression suite (`TestShouldResolvePerComponentAuth`, `TestResolveComponentAuthManager` 6-row table, `TestResolveComponentAuthManager_ResolverErrorFallsBackToParent`).\n- Documented the two flags on every affected `atmos list` command page, added a blog post announcing the feature, and added a shipped milestone to the Discoverability & List Commands roadmap initiative.\n- Bumped Go modules to latest where compatible (aws-sdk-go-v2/service/s3 → 1.100.0, smithy-go → 1.25.1, anthropic-sdk-go → 1.38.0, hashicorp/terraform-exec → 0.25.1, posthog-go → 1.12.1, k8s.io/client-go → 0.36.0, plus many transitive indirects). Three transitive pins remain, now documented inline in `go.mod`: `sentry-go v0.45.1` (cockroachdb/errors v1.12.0 still references the removed `Extra` field), `gocloud.dev v0.41.0` (gomplate/v3 s3blob uses removed `ConfigProvider`), `hairyhenderson/go-fsimpl v0.3.1` (transitive via the gocloud.dev pin).\n\n## why\n\n- `atmos list instances --upload` was broken in CI for any repo whose component sections call `atmos.Component(...)` inside Go templates with a stack-level default identity — the exact shape used by the Atmos Pro release workflow. Users reported the command failing with `No valid credential sources found` while `atmos describe affected --upload` in the same workflow succeeded.\n- Root cause: `atmos.Component(...)` is a **Go template function**, not a YAML function. The processor's per-component auth resolver assumed YAML functions were the only consumer of `info.AuthContext` and gated itself on `processYamlFunctions`. The template path reads the same `AuthContext` and shells out to `terraform init` + `terraform output`, so disabling per-component auth broke template-only invocations.\n- Users expected `atmos list` flags to line up with `atmos describe` flags. They didn't: only `list affected`, `list settings`, and `list values` had the two knobs. A user workflow actually relied on `--process-functions` on `list instances` (where it didn't exist), which produced an `unknown flag` error and a confusing escape hatch. Adding the two flags everywhere the command processes stacks closes that gap.\n- The flag rollout intentionally defaults both flags to `true` for parity. Users who run `atmos list` locally without `tofu` / `terraform` on `$PATH` can opt out with `--process-functions=false` or `ATMOS_PROCESS_FUNCTIONS=false`; the auth-guard fix above ensures the `true, true` default works end-to-end in CI.\n- Module update was due. The three remaining pins are annotated so the next `go get -u ./...` pass doesn't trip over them blindly.\n\n## references\n\n- Fix design doc: \\`docs/fixes/2026-04-24-list-instances-per-component-auth.md\\`\n- Blog post: \\`website/blog/2026-04-24-list-process-flags.mdx\\`\n- Roadmap milestone: \\`website/src/data/roadmap.js\\` (Discoverability & List Commands initiative)\n- Previous related fix: \\`docs/fixes/2026-04-08-atmos-auth-identity-resolution-fixes.md\\` (Category A vs B caller split that this change builds on)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added --process-templates and --process-functions flags to list subcommands to control Go template vs YAML function processing (both default to enabled).\n\n* **Bug Fixes**\n  * Restored per-component authentication resolution when templates are processed, fixing upload failures in CI.\n\n* **Documentation**\n  * Updated CLI docs, added a blog post and roadmap entry describing the new flags and examples.\n\n* **Tests**\n  * Extensive new and updated unit/integration tests covering flag parsing, behavior permutations, and regressions.\n\n* **Chores**\n  * Updated NOTICE/license references, added missing license entries, bumped dependencies and example default version to 1.217.0.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>Document CI statuses configuration options @goruha (#2362)</summary>\n## what\r\n* Document CI statuses configuration options\r\n\r\n## why\r\n* Improve documentation\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Documentation**\n  * Added docs and example configuration for new CI post-commit status summary options: component, add, change, and destroy (flags default to true in the example).\n  * Clarified required permissions to enable these status checks (GitHub checks: write or a commit-status-scoped API token for GitLab).\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>test: increase test coverage in pkg/flags, pkg/filesystem, pkg/http, and pkg/function @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2173)</summary>\n- [x] Explore all affected files\n- [x] internal/exec/stack_processor_utils_test.go: Convert hardcoded path strings to filepath.Join (both test functions)\n- [x] pkg/filesystem/export_test.go: Add trailing period to inline comment on line 35\n- [x] Build & test verification\n\n<!-- START COPILOT CODING AGENT TIPS -->\n---\n\n💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey).\n\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Bounded, configurable glob-pattern cache (TTL, max entries, empty-result toggle) with runtime metrics exposed via /debug/vars\n  * Safer GitHub auth handling with host allowlisting and Authorization stripping on cross-host redirects\n* **Bug Fixes**\n  * Consistent non-nil empty-slice result for glob no-matches and improved cache correctness\n* **Documentation**\n  * Added changelog and minimum Go toolchain guidance (go.mod → Go 1.26+)\n* **Tests**\n  * Large suite of new tests across globbing, atomic writes, flags, and HTTP client\n* **Chores**\n  * New test-race Makefile target (race detector + shuffled execution)\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":2},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/313009159","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/313009159/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/313009159/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.217.0-rc.1","id":313009159,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SqCQH","tag_name":"v1.217.0-rc.1","target_commitish":"main","name":"v1.217.0-rc.1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-23T06:25:30Z","updated_at":"2026-04-24T01:45:15Z","published_at":"2026-04-24T01:45:15Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960417","id":403960417,"node_id":"RA_kwDOEW4XoM4YE_Jh","name":"atmos_1.217.0-rc.1_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":210307376,"digest":"sha256:854451d6a02965490b8b549fe2017a43d769cf61e72099785e728b8abc8595cc","download_count":1,"created_at":"2026-04-24T01:44:08Z","updated_at":"2026-04-24T01:44:17Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960491","id":403960491,"node_id":"RA_kwDOEW4XoM4YE_Kr","name":"atmos_1.217.0-rc.1_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":197196418,"digest":"sha256:a821bf8c8d4812f954771a2f3c8f04d09b90dd73f05e4f1e666f355ce9983924","download_count":1,"created_at":"2026-04-24T01:44:16Z","updated_at":"2026-04-24T01:44:21Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960488","id":403960488,"node_id":"RA_kwDOEW4XoM4YE_Ko","name":"atmos_1.217.0-rc.1_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":204701868,"digest":"sha256:3a963ae01f774a6b78d79a73ae398b1218c82097947c0fd6c6c37a5b4c744805","download_count":1,"created_at":"2026-04-24T01:44:15Z","updated_at":"2026-04-24T01:44:22Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960526","id":403960526,"node_id":"RA_kwDOEW4XoM4YE_LO","name":"atmos_1.217.0-rc.1_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190185644,"digest":"sha256:6177775dc460e763f41b0547087d2da1b55fbe4769c5a8d20979a027fc5091cd","download_count":1,"created_at":"2026-04-24T01:44:22Z","updated_at":"2026-04-24T01:44:27Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960416","id":403960416,"node_id":"RA_kwDOEW4XoM4YE_Jg","name":"atmos_1.217.0-rc.1_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191127714,"digest":"sha256:1a0421beb5da51ca00bcbaf9e9f633648cee5a78a5027fa8825012c8578445eb","download_count":1,"created_at":"2026-04-24T01:44:08Z","updated_at":"2026-04-24T01:44:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960530","id":403960530,"node_id":"RA_kwDOEW4XoM4YE_LS","name":"atmos_1.217.0-rc.1_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":205508770,"digest":"sha256:115c9547d904ca11db8e9d1b0f46f266b01bbc048d7f989dae52d5a57536b36f","download_count":40,"created_at":"2026-04-24T01:44:23Z","updated_at":"2026-04-24T01:44:29Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960487","id":403960487,"node_id":"RA_kwDOEW4XoM4YE_Kn","name":"atmos_1.217.0-rc.1_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191299746,"digest":"sha256:91828aa277e986aff9a40512cde1f95565c250b167d3edab4dfb37d40de227a2","download_count":1,"created_at":"2026-04-24T01:44:15Z","updated_at":"2026-04-24T01:44:22Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960495","id":403960495,"node_id":"RA_kwDOEW4XoM4YE_Kv","name":"atmos_1.217.0-rc.1_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190840994,"digest":"sha256:7e2e4a99e60280626af6b76dbec8e4c2bc68abc82e513cdb67fd2aeb97d37286","download_count":1,"created_at":"2026-04-24T01:44:17Z","updated_at":"2026-04-24T01:44:23Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960534","id":403960534,"node_id":"RA_kwDOEW4XoM4YE_LW","name":"atmos_1.217.0-rc.1_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:00f2c28106bd9895cbadfff7b54bbf4d0eddbf628aa1db3acdb6c4e699fe510c","download_count":1,"created_at":"2026-04-24T01:44:23Z","updated_at":"2026-04-24T01:44:23Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960529","id":403960529,"node_id":"RA_kwDOEW4XoM4YE_LR","name":"atmos_1.217.0-rc.1_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":195240960,"digest":"sha256:09a7e013860bf6b16367bd4296c3d42de46338d12557f6f710c9d6258b4e8f59","download_count":1,"created_at":"2026-04-24T01:44:22Z","updated_at":"2026-04-24T01:44:28Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960419","id":403960419,"node_id":"RA_kwDOEW4XoM4YE_Jj","name":"atmos_1.217.0-rc.1_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":209040384,"digest":"sha256:975ee36a83f8f9fd9c55e3b62f5affd5e4fee8a73ea8e8b288294e3dd05a734a","download_count":1,"created_at":"2026-04-24T01:44:08Z","updated_at":"2026-04-24T01:44:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/403960418","id":403960418,"node_id":"RA_kwDOEW4XoM4YE_Ji","name":"atmos_1.217.0-rc.1_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":192190976,"digest":"sha256:5f6bfdd38484ec0ddb95d4f9f0d7c88b79302f93ca2a695af8f564d1e2ebbbe0","download_count":1,"created_at":"2026-04-24T01:44:08Z","updated_at":"2026-04-24T01:44:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.1/atmos_1.217.0-rc.1_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.217.0-rc.1","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.217.0-rc.1","body":"## 🚀 Enhancements\n\n<details>\n  <summary>fix(output): stop after-* hooks from corrupting backend.tf.json when backend uses !terraform.state @zack-is-cool (#2358)</summary>\n## Summary\n\nFixes #2356. The `after-terraform-apply` store hook path regenerated\n`backend.tf.json` / `providers_override.tf.json` from un-rendered\ncomponent sections when the backend referenced `!terraform.state`,\noverwriting a correctly-rendered file with literal YAML-function strings:\n\n```diff\n-        \"bucket\": \"atmos-tfstate-dev\",\n-        \"dynamodb_table\": \"atmos-tfstate-lock-dev\",\n+        \"bucket\": \"!terraform.state tfstate-backend dev s3_bucket_id\",\n+        \"dynamodb_table\": \"!terraform.state tfstate-backend dev dynamodb_table_name\",\n```\n\nThe hook then failed its `tofu output` call with:\n\n```\nError: Backend initialization required: please run \"tofu init\"\nReason: Backend configuration block has changed\n```\n\n## Why\n\nRegression introduced in v1.216.0 by #2309 (commit `3c0e748ce`) +\nfollow-up commit `c7ef142a9` (*\"fix: skip-init should skip yaml function\nevaluation\"*). `c7ef142a9` added a guard disabling YAML-function\nevaluation when `SkipInit && authManager == nil` to avoid failing on\nauth-requiring functions in the post-hook context. The guard is overly\nbroad — it also disables evaluation of non-auth functions like\n`!terraform.state` — so sections returned from `DescribeComponent` retain\nliteral YAML-function strings. `execute()` then extracts `config.Backend`\nfrom those sections and writes them to disk via `GenerateBackendIfNeeded`.\n\n## Fix\n\nThread `processYamlFunctions bool` through `execute()` in\n`pkg/terraform/output/executor.go` and guard the artifact-regeneration\nblock (Step 4 / Step 5) behind it. When YAML functions were not\nevaluated upstream, `execute()` must not regenerate artifacts from the\nun-rendered sections. The backend file on disk from the init/apply phase\nis already correct; leaving it alone is always safe. Output reading\n(`tofu output`) still works via the on-disk state.\n\nMinimal, localized diff — four commits:\n\n1. `refactor(output): inject BackendGenerator and thread processYamlFunctions through execute()` — pure DI plumbing, no behavior change.\n2. `fix(output): skip artifact regeneration when YAML functions were not processed` — the actual guard.\n3. `test(output): assert backend-generator calls match processYamlFunctions in SkipInit tests` — locks in the invariant in four existing SkipInit tests.\n4. `test(output): regression test for #2356 backend.tf.json corruption` — byte-identical integration assertion.\n\n## Test plan\n\n- [x] New unit test `TestExecutor_Execute_SkipsArtifactRegen_WhenYamlFunctionsNotProcessed` (demonstrably red before the guard, green after).\n- [x] Four existing SkipInit tests strengthened with zero-call expectations on the backend-generator mock.\n- [x] Inverse assertion in `TestExecutor_GetAllOutputs_SkipInit_WithAuthManager_ProcessesYamlFunctions`: `GenerateBackendIfNeeded` + `GenerateProvidersIfNeeded` called exactly once when auth is present.\n- [x] Integration regression test `TestExecutor_Regression_Issue2356_BackendFileUnchangedInSkipInitPath`: writes a rendered `backend.tf.json`, drives `GetOutputWithOptions(SkipInit=true, authManager=nil)`, asserts the file is byte-identical. Fails without the guard; passes with it.\n- [x] `go test ./pkg/terraform/output/... -count=1` green.\n- [x] `make lint` / `./custom-gcl run --new-from-rev=origin/main` clean (one `dupl` warning on the new test vs the existing SkipInit test is suppressed with `//nolint:dupl` + justification — they test contrasting invariants at the same call site; extracting shared scaffolding would obscure the red/green comparison).\n- [x] Manual end-to-end via LocalStack + Redis repro (`ignore/issues/post-apply-hook-backend-racecondition/repro.sh` in the branch, referenced from #2356). Exits 0 with `FIX VERIFIED` on this branch; backend file byte-diff is empty after the after-apply hook.\n- [ ] CI full suite — opening this PR runs it.\n\n## Follow-up\n\nThe `processYamlFunctions = false` guard in `GetOutputWithOptions` /\n`fetchAndCacheOutputs` is the deeper design issue — auth availability\nshould not gate evaluation of non-auth YAML functions. Tracked in #2357.\nThis PR is the minimal regression fix for v1.216.x.\n\n## Release\n\n- `fix:` conventional commit → patch release (v1.216.1).\n- No schema changes, no user-facing config changes.\n- No roadmap update (regression fix, not a feature).\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Backend and provider override files are regenerated only when YAML functions are processed, preventing unnecessary rewrites.\n  * Fixed a case where skip-initialization could overwrite already-rendered backend/provider files, preserving existing configurations.\n\n* **Tests**\n  * Added regression tests to ensure backend/provider files remain unchanged in the skip-initialization path and to validate correct conditional regeneration behavior.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/312002780","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/312002780/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/312002780/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.217.0-rc.0","id":312002780,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SmMjc","tag_name":"v1.217.0-rc.0","target_commitish":"main","name":"v1.217.0-rc.0","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-21T02:45:40Z","updated_at":"2026-04-22T01:42:57Z","published_at":"2026-04-22T01:42:57Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054163","id":402054163,"node_id":"RA_kwDOEW4XoM4X9twT","name":"atmos_1.217.0-rc.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":210307200,"digest":"sha256:21fd0e37ebc01262a4ae542433bce231200fffedede53963d166a0c3c5d6b436","download_count":3,"created_at":"2026-04-22T01:41:46Z","updated_at":"2026-04-22T01:41:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054164","id":402054164,"node_id":"RA_kwDOEW4XoM4X9twU","name":"atmos_1.217.0-rc.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":197196226,"digest":"sha256:60eee2e00dbc066efd3bdf4d4de435622176ffc14edec1e0e61e15ae3468dd08","download_count":3,"created_at":"2026-04-22T01:41:46Z","updated_at":"2026-04-22T01:41:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054246","id":402054246,"node_id":"RA_kwDOEW4XoM4X9txm","name":"atmos_1.217.0-rc.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":204697772,"digest":"sha256:76772203673cc2620b0817ce6bd4b28ac2fcbe9d94cc3e684fb7c193d90d0444","download_count":3,"created_at":"2026-04-22T01:41:59Z","updated_at":"2026-04-22T01:42:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054263","id":402054263,"node_id":"RA_kwDOEW4XoM4X9tx3","name":"atmos_1.217.0-rc.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190185644,"digest":"sha256:81824e258f5e707613ea9f4a83619ad345d255a7894bc5bde7dc6a338ee275cd","download_count":3,"created_at":"2026-04-22T01:42:00Z","updated_at":"2026-04-22T01:42:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054257","id":402054257,"node_id":"RA_kwDOEW4XoM4X9txx","name":"atmos_1.217.0-rc.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191127714,"digest":"sha256:ab3778a8bdecd324736b4025c01a656134cadfdc2102caeb98d861ecbf1aa188","download_count":3,"created_at":"2026-04-22T01:42:00Z","updated_at":"2026-04-22T01:42:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054165","id":402054165,"node_id":"RA_kwDOEW4XoM4X9twV","name":"atmos_1.217.0-rc.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":205504674,"digest":"sha256:e225cc1c13074572c93c985567758ef64026b4e8f0ab759c23a3eaebd222ddc9","download_count":30,"created_at":"2026-04-22T01:41:46Z","updated_at":"2026-04-22T01:41:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054209","id":402054209,"node_id":"RA_kwDOEW4XoM4X9txB","name":"atmos_1.217.0-rc.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191299746,"digest":"sha256:9da788894dc7cf4e36040c20e669b90bbc458a2c4bfcf985a2b7d949fa82f14e","download_count":3,"created_at":"2026-04-22T01:41:54Z","updated_at":"2026-04-22T01:41:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054218","id":402054218,"node_id":"RA_kwDOEW4XoM4X9txK","name":"atmos_1.217.0-rc.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190840994,"digest":"sha256:b66198a3f556ffe93b908c973235e59c28da50816ee73eba3f79196bf8eadd63","download_count":3,"created_at":"2026-04-22T01:41:54Z","updated_at":"2026-04-22T01:42:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054266","id":402054266,"node_id":"RA_kwDOEW4XoM4X9tx6","name":"atmos_1.217.0-rc.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:d6670a391ad4373d79b7b5689f1d1d8807a8dd77b0961e8cb659207ff1140a26","download_count":3,"created_at":"2026-04-22T01:42:00Z","updated_at":"2026-04-22T01:42:01Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054203","id":402054203,"node_id":"RA_kwDOEW4XoM4X9tw7","name":"atmos_1.217.0-rc.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":195239424,"digest":"sha256:3bf6bbd19bf215e99db25f914b1b306af052e99c4f4eb3638b947f854624d4ad","download_count":3,"created_at":"2026-04-22T01:41:53Z","updated_at":"2026-04-22T01:42:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054166","id":402054166,"node_id":"RA_kwDOEW4XoM4X9twW","name":"atmos_1.217.0-rc.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":209039360,"digest":"sha256:5e17c9bb3613c4d263a7241347b34f217208c7a7f171e40ca40947f536668967","download_count":3,"created_at":"2026-04-22T01:41:46Z","updated_at":"2026-04-22T01:41:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/402054205","id":402054205,"node_id":"RA_kwDOEW4XoM4X9tw9","name":"atmos_1.217.0-rc.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":192188928,"digest":"sha256:b39ac7cec0156b4365b12ec2f3c32ee02e2c943e6cc159474011583e0c458ea9","download_count":3,"created_at":"2026-04-22T01:41:53Z","updated_at":"2026-04-22T01:41:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.217.0-rc.0/atmos_1.217.0-rc.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.217.0-rc.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.217.0-rc.0","body":"* No changes\n"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/311513459","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/311513459/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/311513459/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.216.0","id":311513459,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SkVFz","tag_name":"v1.216.0","target_commitish":"main","name":"v1.216.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-04-21T02:45:40Z","updated_at":"2026-04-21T04:00:39Z","published_at":"2026-04-21T04:00:23Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401252049","id":401252049,"node_id":"RA_kwDOEW4XoM4X6p7R","name":"atmos_1.216.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":210307200,"digest":"sha256:3ce44d7ac166e8f7732e2e83204d240c223150ad2d1f151cab8c905de0d4fa6c","download_count":9,"created_at":"2026-04-21T03:48:51Z","updated_at":"2026-04-21T03:48:57Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251920","id":401251920,"node_id":"RA_kwDOEW4XoM4X6p5Q","name":"atmos_1.216.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":197196226,"digest":"sha256:3bec8e91b030c3a9ac32bced57f0a5f4097e984795b38794d9ab81c758092a24","download_count":54,"created_at":"2026-04-21T03:48:38Z","updated_at":"2026-04-21T03:48:45Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401252066","id":401252066,"node_id":"RA_kwDOEW4XoM4X6p7i","name":"atmos_1.216.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":204697772,"digest":"sha256:05ed374382466d12720e30216b391f6d35847ee864f4ec58d2b023892a6904e2","download_count":0,"created_at":"2026-04-21T03:48:53Z","updated_at":"2026-04-21T03:48:58Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251990","id":401251990,"node_id":"RA_kwDOEW4XoM4X6p6W","name":"atmos_1.216.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190185644,"digest":"sha256:d720de06ac818b4645546111f7abb3790b34acfe04b7e279ac22d5398e20a39a","download_count":0,"created_at":"2026-04-21T03:48:46Z","updated_at":"2026-04-21T03:48:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251921","id":401251921,"node_id":"RA_kwDOEW4XoM4X6p5R","name":"atmos_1.216.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191127714,"digest":"sha256:c964952e1be9607c8cd1a73dce54ccbd0810363f751e74b4bbffd0d5a9efa40d","download_count":0,"created_at":"2026-04-21T03:48:38Z","updated_at":"2026-04-21T03:48:46Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251984","id":401251984,"node_id":"RA_kwDOEW4XoM4X6p6Q","name":"atmos_1.216.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":205504674,"digest":"sha256:99dee1887b72081dbdb66ae93beafb997ee751b3905618956497edbde1ba1104","download_count":12964,"created_at":"2026-04-21T03:48:45Z","updated_at":"2026-04-21T03:48:52Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251923","id":401251923,"node_id":"RA_kwDOEW4XoM4X6p5T","name":"atmos_1.216.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191299746,"digest":"sha256:accc57eca0c98617a694ca30ec3bddb99a46d4eec324c0a8129726cd4bf0cf9f","download_count":0,"created_at":"2026-04-21T03:48:38Z","updated_at":"2026-04-21T03:48:47Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401252087","id":401252087,"node_id":"RA_kwDOEW4XoM4X6p73","name":"atmos_1.216.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190840994,"digest":"sha256:bde404451c4667b488d62d45510be8c6df3de7d703ab9bf777e0f601b9f33f52","download_count":2193,"created_at":"2026-04-21T03:48:53Z","updated_at":"2026-04-21T03:48:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401252094","id":401252094,"node_id":"RA_kwDOEW4XoM4X6p7-","name":"atmos_1.216.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1030,"digest":"sha256:3f662df8de062a45524f63b2f0222af6354bc09087e3aaee6e6443a55aa71b5f","download_count":192,"created_at":"2026-04-21T03:48:54Z","updated_at":"2026-04-21T03:48:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251919","id":401251919,"node_id":"RA_kwDOEW4XoM4X6p5P","name":"atmos_1.216.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":195239424,"digest":"sha256:844384a0fae8589d6e22ac564212296781cf2a8acefa1a590ae721d6de932586","download_count":16,"created_at":"2026-04-21T03:48:38Z","updated_at":"2026-04-21T03:48:45Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251983","id":401251983,"node_id":"RA_kwDOEW4XoM4X6p6P","name":"atmos_1.216.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":209039360,"digest":"sha256:01f55a1522044ad6a50ac6038c9889c4f2ae49db847d2df3a54ffe84485fe43e","download_count":61,"created_at":"2026-04-21T03:48:45Z","updated_at":"2026-04-21T03:48:51Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401251997","id":401251997,"node_id":"RA_kwDOEW4XoM4X6p6d","name":"atmos_1.216.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":192188928,"digest":"sha256:21223c4958553f4126f5053b2b160e3c7f5d958302fa0d5bce040c71a6f08547","download_count":3,"created_at":"2026-04-21T03:48:47Z","updated_at":"2026-04-21T03:48:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0/atmos_1.216.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.216.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.216.0","body":"<details>\r\n  <summary>feat(auth): interactive profile suggestion + profiles.default @osterman (#2333)</summary>\r\n\r\n## what\r\n\r\n- Add **interactive profile suggestion** for two scenarios where the loaded `atmos.yaml` lacks the auth config the user is asking for:\r\n  - **Identity-specific:** `atmos … --identity foo` when `foo` isn't defined in the base config but exists in one or more profiles.\r\n  - **Identity-agnostic:** `atmos auth login/exec/shell/env/console/whoami` when the base config has no `auth.identities` / `auth.providers` at all but at least one profile does.\r\n- Interactive terminals get a themed `huh` prompt (yes/no for a single match, select list for multiple). Picking a profile re-execs Atmos with `--profile <picked>` prepended to the original argv.\r\n- Non-interactive terminals (CI, pipes) get the original error enriched with hints naming the candidate profile(s) and the exact `--profile <name>` flag to re-run.\r\n- Add `profiles.default` config field — implicit default profile loaded when `--profile` and `ATMOS_PROFILE` are unset; explicit selection always wins; nested defaults are ignored to prevent recursion.\r\n- Loop guard `ATMOS_PROFILE_FALLBACK=1` prevents infinite re-prompt cycles when the picked profile also fails to resolve the identity.\r\n- Ctrl+C / Esc abort the prompt cleanly with a single `User aborted.` message instead of cascading identity-not-found / authentication-failed errors.\r\n- Prompt titles use `ui.FormatInline()` so backticks render as styled inline code, matching the rest of Atmos.\r\n- New `cfg.ProfilesWithIdentity()` and `cfg.ProfilesWithAuthConfig()` helpers (scoped Viper, no global state pollution) to discover candidate profiles.\r\n- New `AuthManager.MaybeOfferAnyProfileFallback()` interface method called by every relevant auth command before returning the terminal \"no identity\" error.\r\n\r\n## why\r\n\r\n- Profile-based repos (e.g. `cloudposse/infra-live` patterns) put all `auth.identities` / `auth.providers` inside `profiles/<name>/atmos.yaml` and leave the root `atmos.yaml` minimal. Running `atmos auth login` there errored with `no providers available` and no actionable next step — users had to read source / docs to discover they needed `--profile`.\r\n- The fix turns a dead-end error into a one-keystroke recovery in interactive sessions and a copy-pasteable command in CI logs.\r\n- `profiles.default` lets teams pin a sensible profile (e.g. `developer`) without forcing every shell to export `ATMOS_PROFILE`, while keeping explicit overrides authoritative.\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/interactive-profile-suggestion.md`\r\n- Blog: `website/blog/2026-04-16-interactive-profile-suggestion.mdx`\r\n- Docs: `website/docs/cli/configuration/profiles.mdx`\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * profiles.default in atmos.yaml (precedence: --profile → ATMOS_PROFILE → profiles.default). Interactive profile suggestion to re-run with --profile when identities or auth config are missing; non‑TTY flows provide enriched rerun hints. Re-exec depth guard and portable re-exec helpers for safer re-run behavior.\r\n\r\n* **Bug Fixes**\r\n  * Clearer, more actionable error messages and improved fallback routing when identities or auth config are absent.\r\n\r\n* **Documentation**\r\n  * Added PRD, CLI docs, and blog post describing the behavior.\r\n\r\n* **Tests**\r\n  * Extensive unit/integration tests covering fallback flows, profile discovery, re-exec, and helpers.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: Add missing doc redirects for old core-concepts URLs @osterman (#2287)</summary>\r\n\r\n## what\r\n\r\n- Adds 25 new client-side redirects for old `/core-concepts/` URLs that are still indexed by Google and cached by LLMs, causing 404 errors\r\n- Fixes 2 existing redirects that had invalid trailing slashes on `/vendor/component-manifest/` targets (was causing Docusaurus build validation errors)\r\n\r\n**New redirect categories:**\r\n- 4 screenshot-confirmed 404s (vendoring, component-management, provisioning, schemas)\r\n- 7 project section redirects (`/core-concepts/projects/*` → `/projects/` and `/cli/configuration/`)\r\n- 7 stacks sub-pages (define-components, settings, components, backend, vars, env, providers)\r\n- 2 share-data / remote-state redirects\r\n- 2 vendor sub-pages (component-manifest, vendor-manifest)\r\n- 1 describe page redirect\r\n- 2 component sub-pages (packer, ansible)\r\n\r\n## why\r\n\r\n- Old `/core-concepts/` URLs are still indexed by Google and widely cached in LLM training data\r\n- LLMs frequently generate links to these old URLs when helping users with Atmos, leading to broken links and poor developer experience\r\n- Each broken URL was verified by live-fetching the page and confirming a 404 response\r\n- Each redirect target was cross-referenced against `llms.txt` to ensure validity\r\n\r\n## references\r\n\r\n- Verified via `site:atmos.tools/core-concepts` Google searches\r\n- All redirect targets validated against the Docusaurus build (`npm run build` passes)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Fixed numerous broken documentation links and improved navigation by adding and updating redirect rules across Projects, Stacks, Components, Vendor, and related pages (including removal of trailing-slash redirect mismatches) so users are directed to correct docs URLs.\r\n\r\n* **Chores**\r\n  * Updated CI workflow runner constraints to refine automated job scheduling.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat(list): add matrix output format to list instances command @johncblandii (#2322)</summary>\r\n\r\n## what\r\n\r\n- Add `--format=matrix` support to `atmos list instances`, producing GitHub Actions-compatible matrix JSON identical to `atmos describe affected --format=matrix`\r\n- Add `--output-file` flag for writing results in `key=value` format (for `$GITHUB_OUTPUT`)\r\n- Extract shared matrix types and output logic into `pkg/matrix/` for DRY reuse across both `describe affected` and `list instances`\r\n\r\n## why\r\n\r\n- CI/CD pipelines need matrix output from `list instances` to drive parallel GitHub Actions jobs, just like `describe affected` already supports\r\n- Sharing the matrix output logic between commands avoids duplication and ensures consistent output format\r\n- The `--output-file` flag enables direct integration with GitHub Actions `$GITHUB_OUTPUT` without shell redirection\r\n\r\n## references\r\n\r\n- Output format matches `atmos describe affected --format=matrix` exactly:\r\n  ```json\r\n  {\"include\":[{\"stack\":\"...\",\"component\":\"...\",\"component_path\":\"...\",\"component_type\":\"...\"}]}\r\n  ```\r\n- When using `--output-file`, writes `matrix=<json>` and `affected_count=<N>` lines\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Added --format=matrix to emit GitHub Actions–compatible matrix JSON\r\n  * Added --output-file / -o to write matrix results as key=value (for $GITHUB_OUTPUT); only supported with --format=matrix\r\n  * Matrix entries include stack, component, component_path, and component_type\r\n  * --format=matrix disallows --upload and triggers CI-friendly output behavior\r\n\r\n* **Tests**\r\n  * Added coverage for matrix format, output-file flag, and file/stdout writing\r\n\r\n* **Documentation**\r\n  * Added docs, blog post, and roadmap entry for matrix support\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>chore: Update Atmos Pro workflow to use v1.215.0 container image @osterman (#2323)</summary>\r\n\r\n## what\r\n\r\n- Updated the Atmos Pro CI workflow container image from `1.214.0` to `1.215.0`\r\n- Removed the \"Build atmos from source\" step that compiled a dev binary via `go build`\r\n- Changed `atmos docs generate readme` and `atmos pro commit` to use the container's pre-installed `atmos` binary instead of `/tmp/atmos-dev`\r\n\r\n## why\r\n\r\n- Atmos v1.215.0 ships with the `pro commit` command built-in, so building from source is no longer necessary\r\n- Simplifies the CI workflow and reduces build time by eliminating the Go compilation step\r\n\r\n## references\r\n\r\n- #2298 (`atmos pro commit` feature)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n* **Chores**\r\n  * Updated GitHub Actions workflow to use atmos container image version 1.215.0 (upgraded from 1.214.0).\r\n  * Streamlined workflow execution by removing the local build step and invoking atmos directly from the container image.\r\n\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n\r\n## 🚀 Enhancements\r\n\r\n<details>\r\n  <summary>Fix multi-region provider aliases generating incorrect Terraform JSON format @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2210)</summary>\r\n\r\nWhen configuring providers with dot-notation aliases (e.g., `aws.use1`), the generated `providers_override.tf.json` emitted invalid structure — separate top-level keys instead of the array-of-objects format Terraform's JSON syntax requires for multiple provider instances.\r\n\r\n## Changes\r\n\r\n- **`pkg/terraform/output/backend.go`**: Added exported `ProcessProviderAliases` that detects dot-notation provider keys, groups all configurations for the same provider type into an array (base config first, aliases sorted), and leaves non-aliased providers unchanged\r\n- **`internal/exec/utils.go`**: Updated `generateComponentProviderOverrides` to delegate to `tfoutput.ProcessProviderAliases`, eliminating duplicated logic\r\n\r\n## Example\r\n\r\nGiven stack config:\r\n```yaml\r\nproviders:\r\n  aws:\r\n    region: us-east-2\r\n  aws.use1:\r\n    region: us-east-1\r\n    alias: use1\r\n```\r\n\r\n**Before:**\r\n```json\r\n{ \"provider\": { \"aws\": { \"region\": \"us-east-2\" }, \"aws.use1\": { \"alias\": \"use1\", \"region\": \"us-east-1\" } } }\r\n```\r\n\r\n**After:**\r\n```json\r\n{\r\n  \"provider\": {\r\n    \"aws\": [\r\n      { \"region\": \"us-east-2\" },\r\n      { \"alias\": \"use1\", \"region\": \"us-east-1\" }\r\n    ]\r\n  }\r\n}\r\n```\r\n\r\n<!-- START COPILOT ORIGINAL PROMPT -->\r\n\r\n\r\n\r\n<details>\r\n\r\n<summary>Original prompt</summary>\r\n\r\n> \r\n> ----\r\n> \r\n> *This section details on the original issue you should resolve*\r\n> \r\n> <issue_title>Multi-Region with Provider Aliases example is not working</issue_title>\r\n> <issue_description>### Describe the Bug\r\n> \r\n> https://atmos.tools/stacks/providers#multi-region-with-provider-aliases, this example is not working, the actual generated file is different from the example. \r\n> \r\n> ### Expected Behavior\r\n> \r\n> The generated file is the same as the example.\r\n> \r\n> ### Steps to Reproduce\r\n> \r\n> With the following atmos component config:\r\n> \r\n> ```\r\n> components:\r\n>   terraform:\r\n>     eip:\r\n>       providers:\r\n>         aws:\r\n>           region: us-east-2\r\n>         aws.use1:\r\n>           region: us-east-1\r\n>           alias: use1\r\n>       metadata:\r\n>         component: eip\r\n> ```\r\n> \r\n> Run atmos command and check the output of providers_override.tf.json\r\n> \r\n> ### Screenshots\r\n> \r\n> The content of the generated providers_override.tf.json\r\n> \r\n> ```\r\n> {\r\n>   \"provider\": {\r\n>     \"aws\": {\r\n>       \"region\": \"us-east-2\"\r\n>     },\r\n>     \"aws.use1\": {\r\n>       \"alias\": \"use1\",\r\n>       \"region\": \"us-east-1\"\r\n>     }\r\n>   }\r\n> }\r\n> ```\r\n> \r\n> Would expect it to be :\r\n> \r\n> ```\r\n> {\r\n>   \"provider\": {\r\n>     \"aws\": [\r\n>       {\r\n>         \"region\": \"us-east-2\"\r\n>       },\r\n>       {\r\n>         \"alias\": \"use1\",\r\n>         \"region\": \"us-east-1\"\r\n>       }\r\n>     ]\r\n>   }\r\n> }\r\n> ```\r\n> \r\n> ### Environment\r\n> \r\n> - OS: OSX\r\n> - Version: 1.209.0\r\n> - Terraform version: v1.14.7\r\n> \r\n> ### Additional Context\r\n> \r\n> _No response_</issue_description>\r\n> \r\n> ## Comments on the Issue (you are @copilot in this section)\r\n> \r\n> <comments>\r\n> </comments>\r\n> \r\n\r\n\r\n</details>\r\n\r\n\r\n\r\n<!-- START COPILOT CODING AGENT SUFFIX -->\r\n\r\n- Fixes cloudposse/atmos#2208\r\n\r\n<!-- START COPILOT CODING AGENT TIPS -->\r\n---\r\n\r\n🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. [Learn more about Advanced Security.](https://gh.io/cca-advanced-security)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Added support for provider aliases—both explicit and auto-derived from dot-notation provider keys (e.g., `aws.use1`).\r\n  * Providers are now properly grouped into arrays in generated Terraform provider override files.\r\n\r\n* **Tests**\r\n  * Added integration tests for provider alias scenarios.\r\n\r\n* **Documentation**\r\n  * Updated provider documentation to clarify alias auto-derivation behavior.\r\n\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(list): gate `list instances --upload` on `settings.pro.enabled` @osterman (#2330)</summary>\r\n\r\n## what\r\n\r\n- Change `atmos list instances --upload` to filter instances by `settings.pro.enabled == true` (strict boolean) instead of `settings.pro.drift_detection.enabled == true`.\r\n- Rename `isProDriftDetectionEnabled` → `isProEnabled` and simplify the check to a single lookup on `settings.pro.enabled`; `drift_detection.enabled` is no longer consulted.\r\n- Update all unit, integration, comprehensive, cmd, and benchmark tests to the new fixture shape; add an explicit case proving `pro.enabled: true` with `drift_detection.enabled: false` is now **enabled**.\r\n- Update `website/docs/cli/commands/list/list-instances.mdx` to document the filter criterion under `--upload`, in the examples section, and in the `:::tip` block (noting it must be a boolean, not the string `\"true\"`).\r\n\r\n## why\r\n\r\n- Users with `settings.pro.enabled: true` configured on their components were hitting `No Atmos Pro-enabled instances found; nothing to upload.` even when Pro was clearly enabled, because the filter required the narrower `drift_detection.enabled` sub-key.\r\n- `settings.pro.enabled` is the correct top-level enablement flag for Pro; drift detection is one feature among several and shouldn't gate the whole upload.\r\n- The docs previously described `--upload` without specifying what made an instance eligible, so the failure mode was invisible to users.\r\n\r\n## Behavior change (callout)\r\n\r\nComponents that previously qualified via **only** `settings.pro.drift_detection.enabled: true` (without `pro.enabled: true`) will now be **excluded** from `--upload`. Users in that shape must add `settings.pro.enabled: true`.\r\n\r\n## references\r\n\r\n- `--upload` was introduced in #2322\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Pro detection simplified: only an explicit boolean settings.pro.enabled=true marks an instance as Pro; missing/non-boolean values are treated as disabled.\r\n  * Upload behavior: all collected instances are uploaded; post-upload summary shows total uploaded plus enabled/disabled and drift-enabled counts.\r\n  * Improved Pro authentication hints for GitHub Actions and workspace ID.\r\n\r\n* **Documentation**\r\n  * CLI docs updated to reflect new upload semantics, payload shape, and the \"No instances found; nothing to upload.\" message.\r\n\r\n* **Tests**\r\n  * Tests updated/added to cover the new Pro flag shape, counting, and upload behavior.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>Fix: Identity names with dots incorrectly parsed by Viper @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2129)</summary>\r\n- [x] Initial plan for fixing identity names with dots\r\n- [x] Add `fixAuthIdentities()` to re-parse identities from raw YAML\r\n- [x] Extract shared decode hooks into `getAtmosDecodeHookFunc()`\r\n- [x] Apply fix in `LoadConfig()` and `loadConfigFromCLIArgs()`\r\n- [x] Add test case `TestIdentityNamesWithDots`\r\n- [x] Use atmosConfig in perf.Track for consistency\r\n- [x] Remove debug log message that caused test snapshot failures\r\n- [x] Add error handling test cases to increase coverage to 84.6%\r\n\r\n<!-- START COPILOT ORIGINAL PROMPT -->\r\n\r\n\r\n\r\n<details>\r\n\r\n<summary>Original prompt</summary>\r\n\r\n> \r\n> ----\r\n> \r\n> *This section details on the original issue you should resolve*\r\n> \r\n> <issue_title>Zero-Configuration AWS SSO Identity Management: identity containing dots break it.</issue_title>\r\n> <issue_description>### Describe the Bug\r\n> \r\n> Testing \r\n> ```yaml\r\n> auth:\r\n>   providers:\r\n>     sso-prod:\r\n>       kind: aws/iam-identity-center\r\n>       start_url: https://my-org.awsapps.com/start\r\n>       region: us-east-1\r\n>       auto_provision_identities: true  # One line to enable\r\n> ``` \r\n> I do get a list of identities in `~/.cache/atmos/auth/sso-prod/provisioned-identities.yaml`.\r\n> \r\n> Some of them contains dots, e.g.\r\n> \r\n> ```yaml\r\n>         product.usa/ReadOnlyAccess: # <=== The \".\" here breaks it\r\n>             kind: aws/permission-set\r\n>             provider: sso-prod\r\n>             via:\r\n>                 provider: sso-prod\r\n>             principal:\r\n>                 account:\r\n>                     id: \"000000000000\"\r\n>                     name: product.usa\r\n>                 name: ReadOnlyAccess\r\n> ```\r\n> Which atmos does not support:\r\n> \r\n> ```shell\r\n> $ atmos auth list\r\n>    Initialize Identities \r\n> \r\n>    Error: invalid identity kind\r\n>   \r\n>   ## Explanation\r\n> \r\n>    unsupported identity kind:\r\n> \r\n>    Initialize Identities \r\n> \r\n>    Error: failed to initialize identities: invalid identity config: identity=product: invalid identity kind: unsupported identity kind:\r\n> \r\n>    Error \r\n> \r\n>    Error: invalid auth config: failed to create auth manager: failed to initialize identities: invalid identity config: identity=product: invalid identity kind: unsupported identity kind:\r\n> ```\r\n> \r\n> ### Expected Behavior\r\n> \r\n> it works :-)\r\n> \r\n> ### Steps to Reproduce\r\n> \r\n> Cf .bug description\r\n> \r\n> ### Screenshots\r\n> \r\n> _No response_\r\n> \r\n> ### Environment\r\n> \r\n> atmos 1.207.0\r\n> \r\n> ### Additional Context\r\n> \r\n> _No response_</issue_description>\r\n> \r\n> ## Comments on the Issue (you are @copilot in this section)\r\n> \r\n> <comments>\r\n> </comments>\r\n> \r\n\r\n\r\n</details>\r\n\r\n\r\n\r\n<!-- START COPILOT CODING AGENT SUFFIX -->\r\n\r\n- Fixes cloudposse/atmos#2128\r\n\r\n<!-- START COPILOT CODING AGENT TIPS -->\r\n---\r\n\r\n✨ Let Copilot coding agent [set things up for you](https://github.com/cloudposse/atmos/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.\r\n\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(toolchain): resolve aliases in `toolchain exec` / `toolchain which` lookups @osterman (#2332)</summary>\r\n\r\n## what\r\n\r\n- Route `findBinaryPath` (used by `atmos toolchain exec` and `atmos toolchain which`) through the existing alias-aware `LookupToolVersion` helper instead of a raw `toolVersions.Tools[name]` map lookup.\r\n- Derive `owner` / `repo` from the resolved canonical key so the computed install path matches what the write side persisted.\r\n- Add a regression test that reproduces the bug: `.tool-versions` storing `helm/helm 3.20.2` + an alias `helm → helm/helm` now resolves via `WhichExec(\"helm\")`.\r\n\r\n## why\r\n\r\n- Symptom: `atmos toolchain install helm@3.20.2` succeeds, but `atmos toolchain exec -- helm …` then errors with `tool 'helm' not configured in .tool-versions` and tries to re-install.\r\n- Root cause: the write side already canonicalizes via the resolver (`wouldCreateDuplicate` → `aliasConflictsWithFullName`), so entries land under the `owner/repo` key. The read side did a raw map lookup with no resolver, so an alias query missed the canonical entry — the classic write/read asymmetry.\r\n- Fix keeps the read side symmetric with the write side by reusing the helper that already exists for exactly this purpose.\r\n\r\n## references\r\n\r\n- Out of scope, tracked separately: `RunInstall` persisting the literal string `latest` to `.tool-versions` when installing without an explicit version, and wiring `pkg/toolchain/filemanager` / `pkg/toolchain/lockfile` into install/uninstall/set/exec.\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Fixed tool alias resolution to correctly locate binary paths when requesting tools by their registered alias names instead of canonical identifiers. The system now properly maps aliases to their resolved canonical entries before checking availability.\r\n\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: resolve JIT workdir path for !terraform.state, !terraform.output, and atmos.Component @zack-is-cool (#2328)</summary>\r\n\r\n## What\r\n\r\nBug fix PR. Makes `!terraform.state`, `!terraform.output`, and `atmos.Component` work correctly for JIT workdir components (`provision.workdir.enabled: true`). All three were silently broken in ways that only surfaced at runtime.\r\n\r\n**Four fixes:**\r\n\r\n1. **`!terraform.state` path resolution** — resolves state path from `.workdir/terraform/<stack>-<component>/` instead of the static source directory JIT components never write state to.\r\n2. **`!terraform.output` / `atmos.Component` auto-provision** — provisions the JIT workdir before `terraform init` so output references work on any machine, not just ones with a pre-existing workdir from a prior apply.\r\n3. **Source-provisioned JIT workdir support** — Fix 2 only handled local-copy provisioning. For `source.uri` components, `!terraform.output` now hydrates from the source URI before init. Also fixes `extractComponentName` fallback and a go-getter `FileGetter` dst-must-not-exist invariant.\r\n4. **Provisioner output interleaving** — `ui.ClearLine()` before status writes prevents the bubbletea spinner from leaving leading whitespace on provisioner messages.\r\n\r\n**Correctness & security fixes:**\r\n\r\n- **TOCTOU race** — `sync.Map.Load`+`Store` replaced with `LoadOrStore` inside the singleflight closure, eliminating the window where two goroutines could both enter `Provision`.\r\n- **Context cancellation** — switched to `singleflight.DoChan` + `select` so waiters with cancelled contexts exit immediately. Added `context.WithoutCancel` so leader cancellation doesn't abort shared provisioning work.\r\n- **Path traversal guard** — `extractComponentPath` verifies the derived workdir path stays within `filepath.Abs(basePath)` before returning it; escaping paths fall back to `componentPath`. Mirrors the existing guard in `terraform_backend_local.go`.\r\n- **Actionable error hint** — `ErrWorkdirProvision` now includes the full YAML path and env var to disable auto-provisioning.\r\n- **`loadConfigFromCLIArgs` env var bug** — `setEnv(v)` was missing on the `--config`/`--config-path` code path, silently ignoring all `ATMOS_*` overrides when config was loaded from CLI args.\r\n- **Documentation** — `auto_provision_workdir_for_outputs` and `ATMOS_COMPONENTS_TERRAFORM_AUTO_PROVISION_WORKDIR_FOR_OUTPUTS` added to the config/env var reference docs.\r\n\r\n---\r\n\r\n## Why\r\n\r\nJIT workdir components write their Terraform files to `.workdir/terraform/<stack>-<component>/` via a `before.terraform.init` hook — but that hook only fires during direct `atmos terraform` commands, not YAML function evaluation. Three distinct silent failures resulted:\r\n\r\n- **`!terraform.state`** looked in the source directory where JIT components have no state — unconditional failure.\r\n- **`!terraform.output`** computed the correct workdir path but never populated the directory before calling `terraform init` — fails with \"no such file or directory\" on any cold machine.\r\n- **`!terraform.output` + `source.uri`** — even with Fix 2, `ProvisionWorkdir` only copies local files. Source-provisioned components need `AutoProvisionSource` first, which only fires in the hook system the output executor never reaches.\r\n\r\n---\r\n\r\n## Note on Fix 3 (source.uri components)\r\n\r\n`!terraform.output` against a source-provisioned component with a cold workdir will fetch from `source.uri` — the same credentials already needed for `atmos terraform apply`. The fetch is cached per `(stack, component)` pair per process.\r\n\r\nSet `auto_provision_workdir_for_outputs: false` (or `ATMOS_COMPONENTS_TERRAFORM_AUTO_PROVISION_WORKDIR_FOR_OUTPUTS=false`) to disable Fixes 2 and 3.\r\n\r\nFor state-only reads, prefer `!terraform.state` — no init, no source fetch, no terraform binary required.\r\n\r\n---\r\n\r\n## Migration\r\n\r\nNo breaking changes. Previously-failing commands now work.\r\n\r\n```yaml\r\n# Before (runs terraform init + output on every eval):\r\nvpc_id: '{{ (atmos.Component \"vpc\" .stack).outputs.vpc_id }}'\r\n\r\n# After (reads state file directly, no init):\r\nvpc_id: !terraform.state vpc {{ .stack }} vpc_id\r\n```\r\n\r\nResolves #2167\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Auto-provision JIT working directories before Terraform output evaluation (configurable, enabled by default).\r\n  * Template/YAML functions can resolve state/outputs from JIT-provisioned and source-backed components.\r\n\r\n* **Security / Bug Fixes**\r\n  * Containment checks to prevent path traversal outside configured base path.\r\n  * Safer fallbacks and debug logging when workdir/state resolution fails.\r\n\r\n* **Documentation**\r\n  * Docs and env var added for the new auto-provision setting.\r\n\r\n* **Tests**\r\n  * Extensive unit/integration tests covering JIT provisioning, resolution, caching, concurrency, and inheritance.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(auth): crash on standalone `ambient` identity; add global panic handler @aknysh (#2334)</summary>\r\n\r\n## what\r\n\r\n- Fix a hard `SIGSEGV` when Atmos authenticates a standalone **`ambient`** identity (`kind: ambient`). Every `atmos auth login` / `atmos auth whoami` / `atmos terraform ...` against such an identity crashed the process with a Go stack trace.\r\n- Add a process-wide panic handler (`pkg/panics`) so any future uncaught panic renders a short, actionable crash message via `pkg/ui` instead of a raw Go goroutine dump, while preserving the full stack trace in a crash-report file for bug reports.\r\n- Update `github.com/mikefarah/yq/v4` (4.52.5 → 4.53.2) and migrate Atmos's yq logger setup to the new slog-based API.\r\n\r\n### 1. Ambient identity crash (primary fix)\r\n\r\nBackground: the generic `ambient` identity kind (`docs/prd/ambient-identity.md`) is a cloud-agnostic passthrough — `Authenticate()` returns `(nil, nil)` by design because credentials are resolved by the cloud SDK at subprocess runtime (IRSA / IMDS / ECS task role / environment), not by Atmos.\r\n\r\nBug: the auth manager forwarded those nil credentials straight to `buildWhoamiInfo`, which unconditionally invoked a method on the credential interface, producing a nil-interface dereference on the main goroutine.\r\n\r\nScope: standalone generic `ambient` identities. The AWS-specific `aws/ambient` was **not** affected because its `Authenticate()` resolves via the AWS SDK default chain and always returns real credentials.\r\n\r\nFix: `buildWhoamiInfo` now short-circuits safely when `creds == nil` and still returns a populated `WhoamiInfo` (realm, provider, identity, environment, timestamp). Environment is populated unconditionally so `atmos auth whoami` continues to report the expected surface for pure-passthrough ambient identities. Keystore cache, reference handle, `BuildWhoamiInfo`, and `GetExpiration` branches are skipped — there is nothing to cache for an identity that does not own credentials.\r\n\r\nTests:\r\n- `TestManager_buildWhoamiInfo_NilCredentials` — unit coverage of the nil-creds branch. Before the fix, this test panicked at `manager_whoami.go:25`.\r\n- `TestManager_Authenticate_Ambient_Standalone` — end-to-end via real `NewAuthManager` + `Authenticate()`. Before the fix, this path panicked in the same location through `manager.go:294`.\r\n\r\nBoth pass post-fix alongside the existing whoami tests.\r\n\r\nFull write-up: [`docs/fixes/2026-04-17-ambient-identity-nil-credentials.md`](docs/fixes/2026-04-17-ambient-identity-nil-credentials.md).\r\n\r\n### 2. Global panic handler\r\n\r\nMotivation: the `ambient` crash surfaced as a wall of Go runtime output that was useless to end users. Any future bug of the same shape would produce the same bad experience. The handler is defensive infrastructure, not a workaround for the ambient fix — both ship together so a regression cannot reintroduce a raw crash.\r\n\r\nBehavior:\r\n- One deferred `panics.Recover(&exitCode)` at the top of `main.run()` covers every code path reachable synchronously from `cmd.Execute()` — every command, the `internal/exec/` pipeline, `pkg/auth/`, `pkg/stack/`, etc. Installed **before** `defer cmd.Cleanup()` so Cleanup runs normally on clean exit and Recover also catches anything that escapes Cleanup itself.\r\n- User-facing output uses `pkg/ui` exclusively (per CLAUDE.md I/O/UI rules): red ✗ `Atmos crashed unexpectedly` headline, Markdown-rendered body with panic summary, version, OS/arch, Go build toolchain, command-line, crash-report path, and an issue-tracker link.\r\n- Full stack is shown inline only when `ATMOS_LOGS_LEVEL=Debug` or `=Trace` (case-insensitive). Otherwise it is written to a `0o600` crash report at `$TMPDIR/atmos-crash-<UTC>-<pid>.txt` whose path appears in the friendly message.\r\n- The panic is wrapped via `cockroachdb/errors.WithStack` and forwarded to `errUtils.CaptureError`, so Sentry (when configured) gets a proper event with breadcrumbs through the existing error pipeline.\r\n- Exit code 1 matches the existing error-exit convention — no CI/pre-commit behavior change.\r\n\r\nTests: 14 unit cases covering string / `error` / `runtime.Error` panic values, debug-mode on/off, crash-file write success and graceful failure, option defaults, env-gate matrix (canonical / lower / upper / whitespace / non-debug levels), and `Recover` with nil and non-nil exit-code pointers.\r\n\r\nManual verification: injected a nil-pointer dereference into the `version` command, ran `./build/atmos version` in both default and `ATMOS_LOGS_LEVEL=Debug` modes. Exact output is reproduced in the fix doc for PR/release-note reuse.\r\n\r\nFull write-up: [`docs/fixes/2026-04-17-global-panic-handler.md`](docs/fixes/2026-04-17-global-panic-handler.md).\r\n\r\n### 3. yq bump + logger API migration\r\n\r\n`github.com/mikefarah/yq/v4` is bumped from **4.52.5 → 4.53.2**. The 4.53 line replaces yqlib's internal logger — previously built on `op/go-logging.v1` — with one built on Go's standard `log/slog`. The old `yqlib.GetLogger().SetBackend(backend logging.Backend)` entry point is gone; the new API exposes `SetLevel(slog.Level)` and `SetSlogger(*slog.Logger)`.\r\n\r\nAtmos's `pkg/utils/yq_utils.go` used `SetBackend` with a no-op `logBackend` struct to silence yq's internal chatter unless `Logs.Level == Trace`. Without migration, `atmos` fails to build against the new yq with `logger.SetBackend undefined`.\r\n\r\nMigration:\r\n- Removed the `logBackend` type and its four methods (`Log`, `GetLevel`, `SetLevel`, `IsEnabledFor`) along with the `gopkg.in/op/go-logging.v1` import.\r\n- Rewrote `configureYqLogger` to install an `io.Discard` slog handler via `yqlib.GetLogger().SetSlogger(...)` when the Atmos log level is not Trace. Semantics are preserved: yq's internal diagnostics are suppressed by default and only surface at Trace level.\r\n- Deleted `TestLogBackend` from `pkg/utils/yq_utils_test.go` (tested a type that no longer exists). `TestConfigureYqLogger` and all `EvaluateYqExpression` tests still pass.\r\n\r\nNo behavior change for end users: templates and YAML-function calls that route through yq produce the same output with the same suppression of yq's internal logs.\r\n\r\n### Also\r\n\r\n- Bump `ATMOS_VERSION=1.216.0` in `examples/quick-start-advanced/Dockerfile` and two test fixtures that referenced the old version.\r\n\r\n## why\r\n\r\n- **Ambient identity crash is a complete blocker.** Any user running `atmos auth login` against a generic `ambient` identity — the canonical pattern for IRSA / IMDS / ECS task roles / cloud-agnostic passthrough — hits a hard SIGSEGV on every invocation. There is no workaround short of not using the identity kind, which defeats the reason the kind exists.\r\n- **The panic handler is defensive UX.** Cloud-credential code paths are full of nil-interface boundaries; the ambient crash is proof that a similar bug could slip in again. Intercepting panics at the main-goroutine entry point turns any future incident of the same shape into a crisp bug-report loop (one friendly line + one file path to attach) instead of a wall of goroutine output, with the full stack one env var away for contributors.\r\n- **The yq bump is required to stay on a maintained yqlib.** 4.53 is the current minor line; staying on 4.52 leaves us one release behind on upstream fixes and drifts further from the slog-based logger API that the rest of the Go ecosystem is converging on. The migration is a one-file change with identical user-visible behavior.\r\n\r\n## references\r\n\r\n- [`docs/fixes/2026-04-17-ambient-identity-nil-credentials.md`](docs/fixes/2026-04-17-ambient-identity-nil-credentials.md) — ambient crash fix: root cause, scope, tests, and why the fix belongs at the manager layer rather than synthesizing a credential stub in the identity.\r\n- [`docs/fixes/2026-04-17-global-panic-handler.md`](docs/fixes/2026-04-17-global-panic-handler.md) — panic handler design, sample output (default + debug mode + crash report), test matrix, and follow-up items.\r\n- [`docs/prd/ambient-identity.md`](docs/prd/ambient-identity.md) — the ambient-identity PRD. The `(nil, nil)` return contract from `ambient.Authenticate()` is intentional for the generic kind; the bug was the manager failing to honor it.\r\n- [`.claude/agents/tui-expert.md`](.claude/agents/tui-expert.md) — `pkg/ui` output-channel rules the panic handler follows (stderr UI channel via `ui.Error` / `ui.MarkdownMessage`; never `fmt.Fprintf(os.Stderr, ...)`).\r\n- [`github.com/mikefarah/yq` v4.53.0 release notes](https://github.com/mikefarah/yq/releases/tag/v4.53.0) — upstream changelog for the logger migration.\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Global panic recovery with user-friendly crash reports and automatic crash-file generation.\r\n\r\n* **Bug Fixes**\r\n  * Prevented crash when authenticating with generic ambient identities that return nil credentials; authentication now returns stable identity info without panicking.\r\n\r\n* **Documentation**\r\n  * Added detailed fix write-ups for panic recovery and nil-credential behavior.\r\n\r\n* **Tests**\r\n  * Added unit and integration tests covering panic handling and nil-credential authentication paths.\r\n\r\n* **Chores**\r\n  * Updated dependencies, bumped example default version to 1.216.0, adjusted logger handling, and refreshed NOTICE entries.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: respect workdir path for generate: writes and hook-triggered terraform @zack-is-cool (#2309)</summary>\r\n\r\n## Summary\r\n\r\nFixes a cluster of bugs in `provision.workdir.enabled: true` mode covering file generation, hook dispatch, store hook correctness, and repeated-apply terraform init prompts.\r\n\r\n---\r\n\r\n**Bug 1 – `generate:` writes to base component directory instead of workdir**\r\n\r\n`resolveAndProvisionComponentPath` called `autoGenerateComponentFiles` before `provisionComponentSource`. Generated files (e.g. `locals_override.tf`) were written to `components/terraform/<component>/` instead of the JIT workdir.\r\n\r\nFix: swap call order — provision source first, then generate into the returned (workdir) path.\r\n\r\n---\r\n\r\n**Bug 2 – hooks and output executor used base component directory**\r\n\r\n`extractComponentPath` always returned the base component directory because `_workdir_path` is a runtime key absent from freshly-described sections. Hooks calling `terraform output` would fail with _\"no such file or directory\"_ when trying to write `backend.tf.json` to a path that doesn't exist.\r\n\r\nFix: check `provision.workdir.enabled` in sections and rebuild the deterministic workdir path via `workdir.BuildPath`.\r\n\r\n---\r\n\r\n**Bug 3 – hooks fired on every event regardless of `events:` list**\r\n\r\n`RunAll` had no event matching — all hooks ran regardless of their `events:` list. YAML uses hyphens (`after-terraform-apply`) but Go `HookEvent` constants use dots (`after.terraform.apply`).\r\n\r\nFix: added `MatchesEvent()` with hyphen→dot normalisation. Hooks with no `events:` field match all events to preserve backward compatibility with configs written before event filtering existed.\r\n\r\n---\r\n\r\n**Bug 4 – store hook used wrong output getter and wrong error sentinels**\r\n\r\nThe store hook always used `GetOutput` (which runs `terraform init`) regardless of when it fires. Running init after apply with a closed stdin triggers state-migration prompts. Additionally, errors used `ErrNilTerraformOutput` for both retrieval failures and missing keys, and included no context about which hook or event caused the failure.\r\n\r\nFix: `RunE` now selects the getter based on the event — `after-` events use `GetOutputSkipInit` (workdir already initialised); `before-` events use `GetOutput` (init may not have run yet). `IsPostExecution()` helper on `HookEvent` encodes the contract. Error messages now include hook name, event, output key, component, and stack. Correct sentinels: `ErrTerraformOutputFailed` for retrieval errors, `ErrTerraformOutputNotFound` for missing keys.\r\n\r\n---\r\n\r\n**Bug 5 – \"Do you want to migrate all workspaces?\" prompt on every apply**\r\n\r\nThis was caused by three interacting problems:\r\n\r\n1. **`-reconfigure` added whenever `WorkdirPathKey` was set** — `WorkdirPathKey` is set for both a preserved workdir (TTL not expired) and a wiped/re-provisioned workdir (TTL=0s or expired). Checking it unconditionally added `-reconfigure` even when `.terraform/` was intact.\r\n\r\n2. **`init_run_reconfigure: true` overriding the preserved-workdir guard** — even after scoping `-reconfigure` to `WorkdirReprovisionedKey`, the global `InitRunReconfigure` flag bypassed the check and always added `-reconfigure`.\r\n\r\n3. **`cleanTerraformWorkspace` deleting `.terraform/environment` for workdir components** — this function was designed for backend-switching on non-workdir components. For workdir components it deleted the active workspace record before every init, causing OpenTofu to see orphaned `terraform.tfstate.d/<workspace>/` directories with no active workspace and prompt for migration.\r\n\r\nWhen combined: `-reconfigure` tells OpenTofu to ignore the saved backend and treat init as fresh. A fresh-init with existing workspace state dirs triggers the migration prompt even when the backend is unchanged.\r\n\r\nFix (three parts):\r\n- Introduce `WorkdirReprovisionedKey` (`_workdir_reprovisioned`), set only by `vendorToTarget` (source wiped) or `SyncDir` with file changes (workdir synced). This is the correct signal that `.terraform/` was actually cleared.\r\n- For workdir components with a **preserved** workdir, ignore `InitRunReconfigure` — the backend is always generated deterministically from the same stack config and never changes between runs. `-reconfigure` is only added when `WorkdirReprovisionedKey` is set or the subcommand is `workspace`.\r\n- Skip `cleanTerraformWorkspace` for workdir-enabled components — the backend is consistent, so there is no reason to clear the workspace record.\r\n\r\n---\r\n\r\n## Tested end-to-end\r\n\r\nFull producer → store → consumer pipeline:\r\n\r\n1. `null-label` applies with JIT workdir + `generate:` override\r\n2. `after-terraform-apply` hook reads `.id` output and writes it to Redis (no init re-run, no migration prompt)\r\n3. `consumer` reads the value via `!store local/redis null-label label_id`, injects it into its own `generate:` template, applies successfully\r\n4. Repeated applies do not prompt for workspace migration, with or without `init_run_reconfigure: true` and with or without `ttl: \"0s\"`\r\n\r\nReproduction\r\nThis worked successfully for the deployment that I was initially having this issue with. Local reproduction below.\r\n\r\n```\r\ncat << 'SCRIPT' > repro.sh\r\n#!/usr/bin/env bash\r\n# ============================================================\r\n# ATMOS REPRO: generate: writes orphaned override to base\r\n#              component directory; hook-triggered terraform fails;\r\n#              consumer reads store value into JIT workdir generate:\r\n#\r\n# Stack name:  demo       (from vars.name + name_template)\r\n# Components:  null-label (producer), consumer (reads from store)\r\n#\r\n# Requires: atmos, tofu, docker\r\n# ============================================================\r\n\r\nset -euo pipefail\r\n\r\nWORKDIR=\"$(mktemp -d -t atmos-repro-XXXXXX)\"\r\necho \"Working in: ${WORKDIR}\"\r\ncd \"${WORKDIR}\"\r\n\r\necho \"== starting redis ==\"\r\ndocker stop atmos-repro-redis 2>/dev/null || true\r\ndocker run -d --rm --name atmos-repro-redis -p 6379:6379 redis:7-alpine\r\ntrap 'docker stop atmos-repro-redis 2>/dev/null || true' EXIT\r\nsleep 1\r\n\r\ncat <<'EOF' > atmos.yaml\r\nbase_path: \".\"\r\n\r\nstores:\r\n  local/redis:\r\n    type: redis\r\n    options:\r\n      url: \"redis://localhost:6379\"\r\n\r\ncomponents:\r\n  terraform:\r\n    base_path: \"components/terraform\"\r\n    command: \"tofu\"\r\n    workspaces_enabled: true\r\n    apply_auto_approve: false\r\n    deploy_run_init: true\r\n    init_run_reconfigure: true\r\n    auto_generate_backend_file: true\r\n    auto_generate_files: true\r\n\r\nstacks:\r\n  name_template: \"{{ .vars.name }}\"\r\n  base_path: \"stacks\"\r\n  included_paths:\r\n    - \"**/*\"\r\nEOF\r\n\r\nmkdir -p stacks\r\n\r\ncleanup() {\r\n  echo \"-- cleanup --\"\r\n  atmos terraform workdir clean --all 2>/dev/null || true\r\n  echo \"-- cleanup done --\"\r\n}\r\n\r\nshow_dirs() {\r\n  local label=\"${1:-}\"\r\n  echo\r\n  if [[ -n \"$label\" ]]; then\r\n    echo \"-- directories: $label --\"\r\n  fi\r\n  echo \"components/terraform/null-label\"\r\n  ls -la components/terraform/null-label/ 2>/dev/null || echo \"(does not exist)\"\r\n  echo \".workdir/terraform/demo-null-label\"\r\n  ls -la .workdir/terraform/demo-null-label/ 2>/dev/null || echo \"(does not exist)\"\r\n  echo \".workdir/terraform/demo-consumer\"\r\n  ls -la .workdir/terraform/demo-consumer/ 2>/dev/null || echo \"(does not exist)\"\r\n}\r\n\r\n# ============================================================\r\n# SCENARIO 1: JIT + generate, no hook.\r\n# Verifies generate: writes to the workdir only (not the base\r\n# component directory), and that apply succeeds.\r\n# ============================================================\r\necho\r\necho \"=================================================\"\r\necho \"SCENARIO 1: init + apply WITHOUT hook (expect success)\"\r\necho \"  - generate: must write only to workdir, not base component dir\"\r\necho \"=================================================\"\r\ncleanup\r\n\r\ncat <<'EOF' > stacks/demo.yaml\r\nvars:\r\n  name: demo\r\n\r\nterraform:\r\n  backend_type: local\r\n\r\ncomponents:\r\n  terraform:\r\n    null-label:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        name: \"demo\"\r\n        enabled: true\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        locals_override.tf: |\r\n          # override file generated by atmos\r\n          locals {\r\n            name = \"THISISANOVERRIDE\"\r\n          }\r\nEOF\r\n\r\necho \"== init ==\"\r\natmos terraform init null-label -s demo\r\n\r\nshow_dirs \"after init\"\r\n\r\necho \"== apply ==\"\r\natmos terraform apply null-label -s demo -- -auto-approve\r\n\r\nshow_dirs \"after apply\"\r\n\r\necho\r\necho \"SCENARIO 1: PASSED\"\r\n\r\n# ============================================================\r\n# SCENARIO 2: JIT + generate + after-apply hook writes to Redis.\r\n# The hook fires after apply, reads terraform output, and stores\r\n# it in Redis. Tests that the hook does not re-run init (which\r\n# would prompt for workspace migration with a closed stdin).\r\n# ============================================================\r\necho\r\necho \"=================================================\"\r\necho \"SCENARIO 2: init + apply WITH after-apply store hook (expect success)\"\r\necho \"  - hook reads .id output and stores it in Redis\"\r\necho \"  - hook must NOT re-run terraform init\"\r\necho \"=================================================\"\r\ncleanup\r\n\r\ncat <<'EOF' > stacks/demo.yaml\r\nvars:\r\n  name: demo\r\n\r\nterraform:\r\n  backend_type: local\r\n\r\ncomponents:\r\n  terraform:\r\n    null-label:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        name: \"demo\"\r\n        enabled: true\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        locals_override.tf: |\r\n          # override file generated by atmos\r\n          locals {\r\n            name = \"THISISANOVERRIDE\"\r\n          }\r\n      hooks:\r\n        store-outputs:\r\n          events:\r\n            - after-terraform-apply\r\n          command: store\r\n          name: local/redis\r\n          outputs:\r\n            label_id: .id\r\nEOF\r\n\r\necho \"== init ==\"\r\natmos terraform init null-label -s demo\r\n\r\necho \"== apply ==\"\r\natmos terraform apply null-label -s demo -- -auto-approve\r\n\r\nshow_dirs \"after apply\"\r\n\r\necho\r\necho \"== verifying Redis contains label_id ==\"\r\nSTORED=$(docker exec atmos-repro-redis redis-cli KEYS \"*label_id*\")\r\nif [[ -z \"$STORED\" ]]; then\r\n  echo \"SCENARIO 2: FAILED — no label_id key found in Redis\"\r\n  exit 1\r\nfi\r\necho \"Redis keys: $STORED\"\r\necho\r\necho \"SCENARIO 2: PASSED\"\r\n\r\n# ============================================================\r\n# SCENARIO 3: Consumer reads label_id from Redis via !store,\r\n# injects it into a generate: template inside its own JIT workdir.\r\n# Tests the full producer → store → consumer pipeline.\r\n# ============================================================\r\necho\r\necho \"=================================================\"\r\necho \"SCENARIO 3: consumer reads store value into JIT workdir generate:\"\r\necho \"  - consumer.vars.label_id: !store local/redis null-label label_id\"\r\necho \"  - generate: uses {{ .vars.label_id }} in a locals override\"\r\necho \"  - both components use JIT workdir with ttl: 0s\"\r\necho \"=================================================\"\r\n\r\ncat <<'EOF' > stacks/demo.yaml\r\nvars:\r\n  name: demo\r\n\r\nterraform:\r\n  backend_type: local\r\n\r\ncomponents:\r\n  terraform:\r\n    null-label:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        name: \"demo\"\r\n        enabled: true\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        locals_override.tf: |\r\n          # override file generated by atmos\r\n          locals {\r\n            name = \"THISISANOVERRIDE\"\r\n          }\r\n      hooks:\r\n        store-outputs:\r\n          events:\r\n            - after-terraform-apply\r\n          command: store\r\n          name: local/redis\r\n          outputs:\r\n            label_id: .id\r\n\r\n    consumer:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        enabled: true\r\n        label_id: !store local/redis null-label label_id\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        name_override.tf: |\r\n          # override file generated by atmos — value comes from Redis via !store\r\n          locals {\r\n            name = \"{{ .vars.label_id }}-derpderpderp\"\r\n          }\r\nEOF\r\n\r\necho \"== apply consumer ==\"\r\natmos terraform apply consumer -s demo -- -auto-approve\r\n\r\nshow_dirs \"after consumer apply\"\r\n\r\necho\r\necho \"== verifying consumer output contains the store value ==\"\r\nCONSUMER_ID=$(atmos terraform output consumer -s demo 2>/dev/null |  grep \"id =\" | head -1)\r\necho \"Consumer id output line: $CONSUMER_ID\"\r\n\r\nif echo \"$CONSUMER_ID\" | grep -q \"derpderpderp\"; then\r\n  echo\r\n  echo \"SCENARIO 3: PASSED — consumer label contains store-derived value\"\r\nelse\r\n  echo\r\n  echo \"SCENARIO 3: FAILED — consumer output does not contain expected suffix\"\r\n  echo \"  Expected 'derpderpderp' in id output\"\r\n  exit 1\r\nfi\r\n\r\necho\r\necho \"=================================================\"\r\necho \"ALL SCENARIOS PASSED\"\r\necho \"Working directory preserved at: ${WORKDIR}\"\r\necho \"=================================================\"\r\nSCRIPT\r\nbash repro.sh 2>&1 | tee repro.log\r\n```\r\n\r\n## Test plan\r\n\r\n- [x] `TestHook_MatchesEvent` — hyphen/dot formats, no match, nil/empty events (backward compat), multiple events\r\n- [x] `TestRunAll_EventFiltering` — store called/skipped based on event matching\r\n- [x] `TestExecutor_GetOutputWithOptions_SkipInit` — `terraform init` NOT called when `SkipInit: true`\r\n- [x] `TestBuildInitArgs_ReconfigureWhenWorkdirReprovisioned` — `-reconfigure` added when workdir wiped\r\n- [x] `TestBuildInitArgs_NoReconfigureWhenWorkdirPreserved` — `-reconfigure` NOT added for preserved workdir\r\n- [x] `TestBuildInitArgs_NoReconfigureWhenWorkdirPreserved_InitRunReconfigureIgnored` — global `InitRunReconfigure: true` does not override the preserved-workdir guard\r\n- [x] `TestBuildInitArgs_ReconfigureForNonWorkdir_InitRunReconfigure` — `InitRunReconfigure` still works for non-workdir components\r\n- [x] `TestPrepareInitExecution_SkipsCleanWorkspaceForWorkdir` — `.terraform/environment` preserved for workdir components\r\n- [x] `TestPrepareInitExecution_CleansWorkspaceForNonWorkdir` — `.terraform/environment` still cleaned for non-workdir components\r\n- [x] `TestIsWorkdirEnabled` / `TestExtractComponentPath/workdir_enabled_*` — workdir path resolution\r\n- [x] Full `pkg/hooks`, `pkg/terraform/output`, `internal/exec` test suites pass\r\n\r\nCloses #2308\r\nCloses #2307\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Workdir-aware provisioning that targets JIT workdirs and signals reprovisioning\r\n  * Hook event normalization, post-execution detection, and event-matching/filtering\r\n  * New output APIs including skip-init retrieval and advanced output options\r\n\r\n* **Improvements**\r\n  * Smarter terraform init (-reconfigure) behavior for workdir flows\r\n  * Preserve workspace files for workdir components to avoid unintended deletions\r\n  * More robust output caching and clearer CLI success/error messaging\r\n\r\n* **Tests**\r\n  * Expanded coverage for workdirs, init args, hooks, output paths, and store commands\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: treat missing Atmos config in BASE as empty baseline in `atmos describe affected` @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2296)</summary>\r\n`atmos describe affected` fatally errors with `failed to find import` on greenfield branches (or when the base ref predates Atmos adoption) because `ErrFailedToFindImport` from BASE stack processing was propagated as a hard failure. The correct behavior is to treat an unconfigured BASE as an empty baseline — everything in HEAD is new, therefore everything is affected.\r\n\r\n## Changes\r\n\r\n- **`internal/exec/describe_affected_utils.go`** — `executeDescribeAffected` now handles `ErrFailedToFindImport` alongside `ErrNoStackManifestsFound` in both BASE processing paths:\r\n  - `FindAllStackConfigsInPathsForStack` returning `ErrFailedToFindImport` (stacks directory absent in BASE) → sets `remoteStackConfigFilesAbsolutePaths = []string{}`\r\n  - `ExecuteDescribeStacks` returning `ErrFailedToFindImport` (imports unresolvable in BASE) → sets `remoteStacks = map[string]any{}`\r\n  \r\n  Both cases emit a `WARN` log with actionable context:\r\n  ```\r\n  WARN No Atmos stack manifests found in BASE; treating BASE as empty (all HEAD components will be reported as affected)\r\n       hint=\"This is expected for greenfield branches or when the base branch does not yet use Atmos\"\r\n  ```\r\n\r\n- **`tests/describe_affected_greenfield_test.go`** — Integration test that initializes a bare-minimum git repo (single commit, no Atmos config) as the BASE and asserts all known HEAD components (`component-1`, `component-2` in `prod`/`nonprod`) appear in the affected output without error.\r\n</details>\r\n\n\n  ## Associated Pull Requests\n  - #2333\n\n  ##  Deployment Status\n  To view the Atmos Pro deployment status of this release, see #2342.\n  \n<!-- [event-id]: wfte_46dNQxFCngEtgA5am1atomCUAmmG -->","mentions_count":4},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/311486297","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/311486297/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/311486297/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.216.0-rc.2","id":311486297,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SkOdZ","tag_name":"v1.216.0-rc.2","target_commitish":"main","name":"v1.216.0-rc.2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-20T23:35:05Z","updated_at":"2026-04-21T01:29:13Z","published_at":"2026-04-21T01:29:13Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172953","id":401172953,"node_id":"RA_kwDOEW4XoM4X6WnZ","name":"atmos_1.216.0-rc.2_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":210261968,"digest":"sha256:aae616ee4e5e1d14cb0a6203c52669dfefce6e39df738123f8210e388f193500","download_count":3,"created_at":"2026-04-21T01:28:08Z","updated_at":"2026-04-21T01:28:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172829","id":401172829,"node_id":"RA_kwDOEW4XoM4X6Wld","name":"atmos_1.216.0-rc.2_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":197130018,"digest":"sha256:1b8d1e85beea6f3f0696249a89132ba96dee33b624f57146500e708fb7b83df6","download_count":3,"created_at":"2026-04-21T01:28:01Z","updated_at":"2026-04-21T01:28:08Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401173022","id":401173022,"node_id":"RA_kwDOEW4XoM4X6Woe","name":"atmos_1.216.0-rc.2_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":204652716,"digest":"sha256:37f530bdd0c2e952f9dcfa628ba08709558c2f4de1b47fda017fd05165c837a2","download_count":3,"created_at":"2026-04-21T01:28:15Z","updated_at":"2026-04-21T01:28:22Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172833","id":401172833,"node_id":"RA_kwDOEW4XoM4X6Wlh","name":"atmos_1.216.0-rc.2_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190054572,"digest":"sha256:2bb95249d2e153e7063e11d56192a7a60065c359840050a2580a778ed3039f6a","download_count":3,"created_at":"2026-04-21T01:28:01Z","updated_at":"2026-04-21T01:28:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172832","id":401172832,"node_id":"RA_kwDOEW4XoM4X6Wlg","name":"atmos_1.216.0-rc.2_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191078562,"digest":"sha256:fd4825b1507b6c52a21a13df18cdd769c3eb3b7b8aabd333f05ffbdfccd8a2e8","download_count":3,"created_at":"2026-04-21T01:28:01Z","updated_at":"2026-04-21T01:28:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172949","id":401172949,"node_id":"RA_kwDOEW4XoM4X6WnV","name":"atmos_1.216.0-rc.2_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":205459618,"digest":"sha256:75f7f346eb85819ed73aece44b9918aa594dbd21dfd164573eb41979e80d3036","download_count":3,"created_at":"2026-04-21T01:28:07Z","updated_at":"2026-04-21T01:28:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401173021","id":401173021,"node_id":"RA_kwDOEW4XoM4X6Wod","name":"atmos_1.216.0-rc.2_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":191234210,"digest":"sha256:808d2d8731c559ddb8ac4c5782ac1e0cc6bee0a455b3036b58bad935648531ca","download_count":3,"created_at":"2026-04-21T01:28:15Z","updated_at":"2026-04-21T01:28:21Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172950","id":401172950,"node_id":"RA_kwDOEW4XoM4X6WnW","name":"atmos_1.216.0-rc.2_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":190840994,"digest":"sha256:c11044492e2c1a06aa71304be1896d664904980e1e4c5ff08ac71b1eece3b691","download_count":3,"created_at":"2026-04-21T01:28:07Z","updated_at":"2026-04-21T01:28:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401173025","id":401173025,"node_id":"RA_kwDOEW4XoM4X6Woh","name":"atmos_1.216.0-rc.2_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:032237390808cb13b0a88070bb43b6dae59343256607bb33a82fd00a9201cfbc","download_count":3,"created_at":"2026-04-21T01:28:15Z","updated_at":"2026-04-21T01:28:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172830","id":401172830,"node_id":"RA_kwDOEW4XoM4X6Wle","name":"atmos_1.216.0-rc.2_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":195192832,"digest":"sha256:1ee50b02ac9ccb2e0a3ff223d7fde073eb1da055ca159a13deddd8b6ef405d87","download_count":3,"created_at":"2026-04-21T01:28:01Z","updated_at":"2026-04-21T01:28:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401173024","id":401173024,"node_id":"RA_kwDOEW4XoM4X6Wog","name":"atmos_1.216.0-rc.2_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":208991744,"digest":"sha256:5c5ef4b2140b6c3297952e011cb1c51b7e322dee64053e4a345424c6811d77b9","download_count":3,"created_at":"2026-04-21T01:28:15Z","updated_at":"2026-04-21T01:28:23Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/401172972","id":401172972,"node_id":"RA_kwDOEW4XoM4X6Wns","name":"atmos_1.216.0-rc.2_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":192147456,"digest":"sha256:1c26ed2baddc498f9182b1c9bf7d2c22cc3a245164ba4087d1faa22432913388","download_count":3,"created_at":"2026-04-21T01:28:08Z","updated_at":"2026-04-21T01:28:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.2/atmos_1.216.0-rc.2_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.216.0-rc.2","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.216.0-rc.2","body":"<details>\n  <summary>fix: Add missing doc redirects for old core-concepts URLs @osterman (#2287)</summary>\n## what\n\n- Adds 25 new client-side redirects for old `/core-concepts/` URLs that are still indexed by Google and cached by LLMs, causing 404 errors\n- Fixes 2 existing redirects that had invalid trailing slashes on `/vendor/component-manifest/` targets (was causing Docusaurus build validation errors)\n\n**New redirect categories:**\n- 4 screenshot-confirmed 404s (vendoring, component-management, provisioning, schemas)\n- 7 project section redirects (`/core-concepts/projects/*` → `/projects/` and `/cli/configuration/`)\n- 7 stacks sub-pages (define-components, settings, components, backend, vars, env, providers)\n- 2 share-data / remote-state redirects\n- 2 vendor sub-pages (component-manifest, vendor-manifest)\n- 1 describe page redirect\n- 2 component sub-pages (packer, ansible)\n\n## why\n\n- Old `/core-concepts/` URLs are still indexed by Google and widely cached in LLM training data\n- LLMs frequently generate links to these old URLs when helping users with Atmos, leading to broken links and poor developer experience\n- Each broken URL was verified by live-fetching the page and confirming a 404 response\n- Each redirect target was cross-referenced against `llms.txt` to ensure validity\n\n## references\n\n- Verified via `site:atmos.tools/core-concepts` Google searches\n- All redirect targets validated against the Docusaurus build (`npm run build` passes)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Fixed numerous broken documentation links and improved navigation by adding and updating redirect rules across Projects, Stacks, Components, Vendor, and related pages (including removal of trailing-slash redirect mismatches) so users are directed to correct docs URLs.\n\n* **Chores**\n  * Updated CI workflow runner constraints to refine automated job scheduling.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>Fix multi-region provider aliases generating incorrect Terraform JSON format @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2210)</summary>\nWhen configuring providers with dot-notation aliases (e.g., `aws.use1`), the generated `providers_override.tf.json` emitted invalid structure — separate top-level keys instead of the array-of-objects format Terraform's JSON syntax requires for multiple provider instances.\n\n## Changes\n\n- **`pkg/terraform/output/backend.go`**: Added exported `ProcessProviderAliases` that detects dot-notation provider keys, groups all configurations for the same provider type into an array (base config first, aliases sorted), and leaves non-aliased providers unchanged\n- **`internal/exec/utils.go`**: Updated `generateComponentProviderOverrides` to delegate to `tfoutput.ProcessProviderAliases`, eliminating duplicated logic\n\n## Example\n\nGiven stack config:\n```yaml\nproviders:\n  aws:\n    region: us-east-2\n  aws.use1:\n    region: us-east-1\n    alias: use1\n```\n\n**Before:**\n```json\n{ \"provider\": { \"aws\": { \"region\": \"us-east-2\" }, \"aws.use1\": { \"alias\": \"use1\", \"region\": \"us-east-1\" } } }\n```\n\n**After:**\n```json\n{\n  \"provider\": {\n    \"aws\": [\n      { \"region\": \"us-east-2\" },\n      { \"alias\": \"use1\", \"region\": \"us-east-1\" }\n    ]\n  }\n}\n```\n\n<!-- START COPILOT ORIGINAL PROMPT -->\n\n\n\n<details>\n\n<summary>Original prompt</summary>\n\n> \n> ----\n> \n> *This section details on the original issue you should resolve*\n> \n> <issue_title>Multi-Region with Provider Aliases example is not working</issue_title>\n> <issue_description>### Describe the Bug\n> \n> https://atmos.tools/stacks/providers#multi-region-with-provider-aliases, this example is not working, the actual generated file is different from the example. \n> \n> ### Expected Behavior\n> \n> The generated file is the same as the example.\n> \n> ### Steps to Reproduce\n> \n> With the following atmos component config:\n> \n> ```\n> components:\n>   terraform:\n>     eip:\n>       providers:\n>         aws:\n>           region: us-east-2\n>         aws.use1:\n>           region: us-east-1\n>           alias: use1\n>       metadata:\n>         component: eip\n> ```\n> \n> Run atmos command and check the output of providers_override.tf.json\n> \n> ### Screenshots\n> \n> The content of the generated providers_override.tf.json\n> \n> ```\n> {\n>   \"provider\": {\n>     \"aws\": {\n>       \"region\": \"us-east-2\"\n>     },\n>     \"aws.use1\": {\n>       \"alias\": \"use1\",\n>       \"region\": \"us-east-1\"\n>     }\n>   }\n> }\n> ```\n> \n> Would expect it to be :\n> \n> ```\n> {\n>   \"provider\": {\n>     \"aws\": [\n>       {\n>         \"region\": \"us-east-2\"\n>       },\n>       {\n>         \"alias\": \"use1\",\n>         \"region\": \"us-east-1\"\n>       }\n>     ]\n>   }\n> }\n> ```\n> \n> ### Environment\n> \n> - OS: OSX\n> - Version: 1.209.0\n> - Terraform version: v1.14.7\n> \n> ### Additional Context\n> \n> _No response_</issue_description>\n> \n> ## Comments on the Issue (you are @copilot in this section)\n> \n> <comments>\n> </comments>\n> \n\n\n</details>\n\n\n\n<!-- START COPILOT CODING AGENT SUFFIX -->\n\n- Fixes cloudposse/atmos#2208\n\n<!-- START COPILOT CODING AGENT TIPS -->\n---\n\n🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. [Learn more about Advanced Security.](https://gh.io/cca-advanced-security)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added support for provider aliases—both explicit and auto-derived from dot-notation provider keys (e.g., `aws.use1`).\n  * Providers are now properly grouped into arrays in generated Terraform provider override files.\n\n* **Tests**\n  * Added integration tests for provider alias scenarios.\n\n* **Documentation**\n  * Updated provider documentation to clarify alias auto-derivation behavior.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix(list): gate `list instances --upload` on `settings.pro.enabled` @osterman (#2330)</summary>\n## what\n\n- Change `atmos list instances --upload` to filter instances by `settings.pro.enabled == true` (strict boolean) instead of `settings.pro.drift_detection.enabled == true`.\n- Rename `isProDriftDetectionEnabled` → `isProEnabled` and simplify the check to a single lookup on `settings.pro.enabled`; `drift_detection.enabled` is no longer consulted.\n- Update all unit, integration, comprehensive, cmd, and benchmark tests to the new fixture shape; add an explicit case proving `pro.enabled: true` with `drift_detection.enabled: false` is now **enabled**.\n- Update `website/docs/cli/commands/list/list-instances.mdx` to document the filter criterion under `--upload`, in the examples section, and in the `:::tip` block (noting it must be a boolean, not the string `\"true\"`).\n\n## why\n\n- Users with `settings.pro.enabled: true` configured on their components were hitting `No Atmos Pro-enabled instances found; nothing to upload.` even when Pro was clearly enabled, because the filter required the narrower `drift_detection.enabled` sub-key.\n- `settings.pro.enabled` is the correct top-level enablement flag for Pro; drift detection is one feature among several and shouldn't gate the whole upload.\n- The docs previously described `--upload` without specifying what made an instance eligible, so the failure mode was invisible to users.\n\n## Behavior change (callout)\n\nComponents that previously qualified via **only** `settings.pro.drift_detection.enabled: true` (without `pro.enabled: true`) will now be **excluded** from `--upload`. Users in that shape must add `settings.pro.enabled: true`.\n\n## references\n\n- `--upload` was introduced in #2322\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Pro detection simplified: only an explicit boolean settings.pro.enabled=true marks an instance as Pro; missing/non-boolean values are treated as disabled.\n  * Upload behavior: all collected instances are uploaded; post-upload summary shows total uploaded plus enabled/disabled and drift-enabled counts.\n  * Improved Pro authentication hints for GitHub Actions and workspace ID.\n\n* **Documentation**\n  * CLI docs updated to reflect new upload semantics, payload shape, and the \"No instances found; nothing to upload.\" message.\n\n* **Tests**\n  * Tests updated/added to cover the new Pro flag shape, counting, and upload behavior.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>Fix: Identity names with dots incorrectly parsed by Viper @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2129)</summary>\n- [x] Initial plan for fixing identity names with dots\n- [x] Add `fixAuthIdentities()` to re-parse identities from raw YAML\n- [x] Extract shared decode hooks into `getAtmosDecodeHookFunc()`\n- [x] Apply fix in `LoadConfig()` and `loadConfigFromCLIArgs()`\n- [x] Add test case `TestIdentityNamesWithDots`\n- [x] Use atmosConfig in perf.Track for consistency\n- [x] Remove debug log message that caused test snapshot failures\n- [x] Add error handling test cases to increase coverage to 84.6%\n\n<!-- START COPILOT ORIGINAL PROMPT -->\n\n\n\n<details>\n\n<summary>Original prompt</summary>\n\n> \n> ----\n> \n> *This section details on the original issue you should resolve*\n> \n> <issue_title>Zero-Configuration AWS SSO Identity Management: identity containing dots break it.</issue_title>\n> <issue_description>### Describe the Bug\n> \n> Testing \n> ```yaml\n> auth:\n>   providers:\n>     sso-prod:\n>       kind: aws/iam-identity-center\n>       start_url: https://my-org.awsapps.com/start\n>       region: us-east-1\n>       auto_provision_identities: true  # One line to enable\n> ``` \n> I do get a list of identities in `~/.cache/atmos/auth/sso-prod/provisioned-identities.yaml`.\n> \n> Some of them contains dots, e.g.\n> \n> ```yaml\n>         product.usa/ReadOnlyAccess: # <=== The \".\" here breaks it\n>             kind: aws/permission-set\n>             provider: sso-prod\n>             via:\n>                 provider: sso-prod\n>             principal:\n>                 account:\n>                     id: \"000000000000\"\n>                     name: product.usa\n>                 name: ReadOnlyAccess\n> ```\n> Which atmos does not support:\n> \n> ```shell\n> $ atmos auth list\n>    Initialize Identities \n> \n>    Error: invalid identity kind\n>   \n>   ## Explanation\n> \n>    unsupported identity kind:\n> \n>    Initialize Identities \n> \n>    Error: failed to initialize identities: invalid identity config: identity=product: invalid identity kind: unsupported identity kind:\n> \n>    Error \n> \n>    Error: invalid auth config: failed to create auth manager: failed to initialize identities: invalid identity config: identity=product: invalid identity kind: unsupported identity kind:\n> ```\n> \n> ### Expected Behavior\n> \n> it works :-)\n> \n> ### Steps to Reproduce\n> \n> Cf .bug description\n> \n> ### Screenshots\n> \n> _No response_\n> \n> ### Environment\n> \n> atmos 1.207.0\n> \n> ### Additional Context\n> \n> _No response_</issue_description>\n> \n> ## Comments on the Issue (you are @copilot in this section)\n> \n> <comments>\n> </comments>\n> \n\n\n</details>\n\n\n\n<!-- START COPILOT CODING AGENT SUFFIX -->\n\n- Fixes cloudposse/atmos#2128\n\n<!-- START COPILOT CODING AGENT TIPS -->\n---\n\n✨ Let Copilot coding agent [set things up for you](https://github.com/cloudposse/atmos/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.\n\n</details>\n\n<details>\n  <summary>fix(toolchain): resolve aliases in `toolchain exec` / `toolchain which` lookups @osterman (#2332)</summary>\n## what\n\n- Route `findBinaryPath` (used by `atmos toolchain exec` and `atmos toolchain which`) through the existing alias-aware `LookupToolVersion` helper instead of a raw `toolVersions.Tools[name]` map lookup.\n- Derive `owner` / `repo` from the resolved canonical key so the computed install path matches what the write side persisted.\n- Add a regression test that reproduces the bug: `.tool-versions` storing `helm/helm 3.20.2` + an alias `helm → helm/helm` now resolves via `WhichExec(\"helm\")`.\n\n## why\n\n- Symptom: `atmos toolchain install helm@3.20.2` succeeds, but `atmos toolchain exec -- helm …` then errors with `tool 'helm' not configured in .tool-versions` and tries to re-install.\n- Root cause: the write side already canonicalizes via the resolver (`wouldCreateDuplicate` → `aliasConflictsWithFullName`), so entries land under the `owner/repo` key. The read side did a raw map lookup with no resolver, so an alias query missed the canonical entry — the classic write/read asymmetry.\n- Fix keeps the read side symmetric with the write side by reusing the helper that already exists for exactly this purpose.\n\n## references\n\n- Out of scope, tracked separately: `RunInstall` persisting the literal string `latest` to `.tool-versions` when installing without an explicit version, and wiring `pkg/toolchain/filemanager` / `pkg/toolchain/lockfile` into install/uninstall/set/exec.\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Fixed tool alias resolution to correctly locate binary paths when requesting tools by their registered alias names instead of canonical identifiers. The system now properly maps aliases to their resolved canonical entries before checking availability.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix: resolve JIT workdir path for !terraform.state, !terraform.output, and atmos.Component @zack-is-cool (#2328)</summary>\n## What\n\nBug fix PR. Makes `!terraform.state`, `!terraform.output`, and `atmos.Component` work correctly for JIT workdir components (`provision.workdir.enabled: true`). All three were silently broken in ways that only surfaced at runtime.\n\n**Four fixes:**\n\n1. **`!terraform.state` path resolution** — resolves state path from `.workdir/terraform/<stack>-<component>/` instead of the static source directory JIT components never write state to.\n2. **`!terraform.output` / `atmos.Component` auto-provision** — provisions the JIT workdir before `terraform init` so output references work on any machine, not just ones with a pre-existing workdir from a prior apply.\n3. **Source-provisioned JIT workdir support** — Fix 2 only handled local-copy provisioning. For `source.uri` components, `!terraform.output` now hydrates from the source URI before init. Also fixes `extractComponentName` fallback and a go-getter `FileGetter` dst-must-not-exist invariant.\n4. **Provisioner output interleaving** — `ui.ClearLine()` before status writes prevents the bubbletea spinner from leaving leading whitespace on provisioner messages.\n\n**Correctness & security fixes:**\n\n- **TOCTOU race** — `sync.Map.Load`+`Store` replaced with `LoadOrStore` inside the singleflight closure, eliminating the window where two goroutines could both enter `Provision`.\n- **Context cancellation** — switched to `singleflight.DoChan` + `select` so waiters with cancelled contexts exit immediately. Added `context.WithoutCancel` so leader cancellation doesn't abort shared provisioning work.\n- **Path traversal guard** — `extractComponentPath` verifies the derived workdir path stays within `filepath.Abs(basePath)` before returning it; escaping paths fall back to `componentPath`. Mirrors the existing guard in `terraform_backend_local.go`.\n- **Actionable error hint** — `ErrWorkdirProvision` now includes the full YAML path and env var to disable auto-provisioning.\n- **`loadConfigFromCLIArgs` env var bug** — `setEnv(v)` was missing on the `--config`/`--config-path` code path, silently ignoring all `ATMOS_*` overrides when config was loaded from CLI args.\n- **Documentation** — `auto_provision_workdir_for_outputs` and `ATMOS_COMPONENTS_TERRAFORM_AUTO_PROVISION_WORKDIR_FOR_OUTPUTS` added to the config/env var reference docs.\n\n---\n\n## Why\n\nJIT workdir components write their Terraform files to `.workdir/terraform/<stack>-<component>/` via a `before.terraform.init` hook — but that hook only fires during direct `atmos terraform` commands, not YAML function evaluation. Three distinct silent failures resulted:\n\n- **`!terraform.state`** looked in the source directory where JIT components have no state — unconditional failure.\n- **`!terraform.output`** computed the correct workdir path but never populated the directory before calling `terraform init` — fails with \"no such file or directory\" on any cold machine.\n- **`!terraform.output` + `source.uri`** — even with Fix 2, `ProvisionWorkdir` only copies local files. Source-provisioned components need `AutoProvisionSource` first, which only fires in the hook system the output executor never reaches.\n\n---\n\n## Note on Fix 3 (source.uri components)\n\n`!terraform.output` against a source-provisioned component with a cold workdir will fetch from `source.uri` — the same credentials already needed for `atmos terraform apply`. The fetch is cached per `(stack, component)` pair per process.\n\nSet `auto_provision_workdir_for_outputs: false` (or `ATMOS_COMPONENTS_TERRAFORM_AUTO_PROVISION_WORKDIR_FOR_OUTPUTS=false`) to disable Fixes 2 and 3.\n\nFor state-only reads, prefer `!terraform.state` — no init, no source fetch, no terraform binary required.\n\n---\n\n## Migration\n\nNo breaking changes. Previously-failing commands now work.\n\n```yaml\n# Before (runs terraform init + output on every eval):\nvpc_id: '{{ (atmos.Component \"vpc\" .stack).outputs.vpc_id }}'\n\n# After (reads state file directly, no init):\nvpc_id: !terraform.state vpc {{ .stack }} vpc_id\n```\n\nResolves #2167\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Auto-provision JIT working directories before Terraform output evaluation (configurable, enabled by default).\n  * Template/YAML functions can resolve state/outputs from JIT-provisioned and source-backed components.\n\n* **Security / Bug Fixes**\n  * Containment checks to prevent path traversal outside configured base path.\n  * Safer fallbacks and debug logging when workdir/state resolution fails.\n\n* **Documentation**\n  * Docs and env var added for the new auto-provision setting.\n\n* **Tests**\n  * Extensive unit/integration tests covering JIT provisioning, resolution, caching, concurrency, and inheritance.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix(auth): crash on standalone `ambient` identity; add global panic handler @aknysh (#2334)</summary>\n## what\r\n\r\n- Fix a hard `SIGSEGV` when Atmos authenticates a standalone **`ambient`** identity (`kind: ambient`). Every `atmos auth login` / `atmos auth whoami` / `atmos terraform ...` against such an identity crashed the process with a Go stack trace.\r\n- Add a process-wide panic handler (`pkg/panics`) so any future uncaught panic renders a short, actionable crash message via `pkg/ui` instead of a raw Go goroutine dump, while preserving the full stack trace in a crash-report file for bug reports.\r\n- Update `github.com/mikefarah/yq/v4` (4.52.5 → 4.53.2) and migrate Atmos's yq logger setup to the new slog-based API.\r\n\r\n### 1. Ambient identity crash (primary fix)\r\n\r\nBackground: the generic `ambient` identity kind (`docs/prd/ambient-identity.md`) is a cloud-agnostic passthrough — `Authenticate()` returns `(nil, nil)` by design because credentials are resolved by the cloud SDK at subprocess runtime (IRSA / IMDS / ECS task role / environment), not by Atmos.\r\n\r\nBug: the auth manager forwarded those nil credentials straight to `buildWhoamiInfo`, which unconditionally invoked a method on the credential interface, producing a nil-interface dereference on the main goroutine.\r\n\r\nScope: standalone generic `ambient` identities. The AWS-specific `aws/ambient` was **not** affected because its `Authenticate()` resolves via the AWS SDK default chain and always returns real credentials.\r\n\r\nFix: `buildWhoamiInfo` now short-circuits safely when `creds == nil` and still returns a populated `WhoamiInfo` (realm, provider, identity, environment, timestamp). Environment is populated unconditionally so `atmos auth whoami` continues to report the expected surface for pure-passthrough ambient identities. Keystore cache, reference handle, `BuildWhoamiInfo`, and `GetExpiration` branches are skipped — there is nothing to cache for an identity that does not own credentials.\r\n\r\nTests:\r\n- `TestManager_buildWhoamiInfo_NilCredentials` — unit coverage of the nil-creds branch. Before the fix, this test panicked at `manager_whoami.go:25`.\r\n- `TestManager_Authenticate_Ambient_Standalone` — end-to-end via real `NewAuthManager` + `Authenticate()`. Before the fix, this path panicked in the same location through `manager.go:294`.\r\n\r\nBoth pass post-fix alongside the existing whoami tests.\r\n\r\nFull write-up: [`docs/fixes/2026-04-17-ambient-identity-nil-credentials.md`](docs/fixes/2026-04-17-ambient-identity-nil-credentials.md).\r\n\r\n### 2. Global panic handler\r\n\r\nMotivation: the `ambient` crash surfaced as a wall of Go runtime output that was useless to end users. Any future bug of the same shape would produce the same bad experience. The handler is defensive infrastructure, not a workaround for the ambient fix — both ship together so a regression cannot reintroduce a raw crash.\r\n\r\nBehavior:\r\n- One deferred `panics.Recover(&exitCode)` at the top of `main.run()` covers every code path reachable synchronously from `cmd.Execute()` — every command, the `internal/exec/` pipeline, `pkg/auth/`, `pkg/stack/`, etc. Installed **before** `defer cmd.Cleanup()` so Cleanup runs normally on clean exit and Recover also catches anything that escapes Cleanup itself.\r\n- User-facing output uses `pkg/ui` exclusively (per CLAUDE.md I/O/UI rules): red ✗ `Atmos crashed unexpectedly` headline, Markdown-rendered body with panic summary, version, OS/arch, Go build toolchain, command-line, crash-report path, and an issue-tracker link.\r\n- Full stack is shown inline only when `ATMOS_LOGS_LEVEL=Debug` or `=Trace` (case-insensitive). Otherwise it is written to a `0o600` crash report at `$TMPDIR/atmos-crash-<UTC>-<pid>.txt` whose path appears in the friendly message.\r\n- The panic is wrapped via `cockroachdb/errors.WithStack` and forwarded to `errUtils.CaptureError`, so Sentry (when configured) gets a proper event with breadcrumbs through the existing error pipeline.\r\n- Exit code 1 matches the existing error-exit convention — no CI/pre-commit behavior change.\r\n\r\nOut of scope (tracked as follow-up): panics on spawned goroutines (signal handler, telemetry flushes, async work) — those need their own deferred Recover at each entry point.\r\n\r\nTests: 14 unit cases covering string / `error` / `runtime.Error` panic values, debug-mode on/off, crash-file write success and graceful failure, option defaults, env-gate matrix (canonical / lower / upper / whitespace / non-debug levels), and `Recover` with nil and non-nil exit-code pointers.\r\n\r\nManual verification: injected a nil-pointer dereference into the `version` command, ran `./build/atmos version` in both default and `ATMOS_LOGS_LEVEL=Debug` modes. Exact output is reproduced in the fix doc for PR/release-note reuse.\r\n\r\nFull write-up: [`docs/fixes/2026-04-17-global-panic-handler.md`](docs/fixes/2026-04-17-global-panic-handler.md).\r\n\r\n### 3. yq bump + logger API migration\r\n\r\n`github.com/mikefarah/yq/v4` is bumped from **4.52.5 → 4.53.2**. The 4.53 line replaces yqlib's internal logger — previously built on `op/go-logging.v1` — with one built on Go's standard `log/slog`. The old `yqlib.GetLogger().SetBackend(backend logging.Backend)` entry point is gone; the new API exposes `SetLevel(slog.Level)` and `SetSlogger(*slog.Logger)`.\r\n\r\nAtmos's `pkg/utils/yq_utils.go` used `SetBackend` with a no-op `logBackend` struct to silence yq's internal chatter unless `Logs.Level == Trace`. Without migration, `atmos` fails to build against the new yq with `logger.SetBackend undefined`.\r\n\r\nMigration:\r\n- Removed the `logBackend` type and its four methods (`Log`, `GetLevel`, `SetLevel`, `IsEnabledFor`) along with the `gopkg.in/op/go-logging.v1` import.\r\n- Rewrote `configureYqLogger` to install an `io.Discard` slog handler via `yqlib.GetLogger().SetSlogger(...)` when the Atmos log level is not Trace. Semantics are preserved: yq's internal diagnostics are suppressed by default and only surface at Trace level.\r\n- Deleted `TestLogBackend` from `pkg/utils/yq_utils_test.go` (tested a type that no longer exists). `TestConfigureYqLogger` and all `EvaluateYqExpression` tests still pass.\r\n\r\nNo behavior change for end users: templates and YAML-function calls that route through yq produce the same output with the same suppression of yq's internal logs.\r\n\r\n### Also\r\n\r\n- Bump `ATMOS_VERSION=1.216.0` in `examples/quick-start-advanced/Dockerfile` and two test fixtures that referenced the old version.\r\n\r\n## why\r\n\r\n- **Ambient identity crash is a complete blocker.** Any user running `atmos auth login` against a generic `ambient` identity — the canonical pattern for IRSA / IMDS / ECS task roles / cloud-agnostic passthrough — hits a hard SIGSEGV on every invocation. There is no workaround short of not using the identity kind, which defeats the reason the kind exists.\r\n- **The panic handler is defensive UX.** Cloud-credential code paths are full of nil-interface boundaries; the ambient crash is proof that a similar bug could slip in again. Intercepting panics at the main-goroutine entry point turns any future incident of the same shape into a crisp bug-report loop (one friendly line + one file path to attach) instead of a wall of goroutine output, with the full stack one env var away for contributors.\r\n- **The yq bump is required to stay on a maintained yqlib.** 4.53 is the current minor line; staying on 4.52 leaves us one release behind on upstream fixes and drifts further from the slog-based logger API that the rest of the Go ecosystem is converging on. The migration is a one-file change with identical user-visible behavior.\r\n\r\n## references\r\n\r\n- [`docs/fixes/2026-04-17-ambient-identity-nil-credentials.md`](docs/fixes/2026-04-17-ambient-identity-nil-credentials.md) — ambient crash fix: root cause, scope, tests, and why the fix belongs at the manager layer rather than synthesizing a credential stub in the identity.\r\n- [`docs/fixes/2026-04-17-global-panic-handler.md`](docs/fixes/2026-04-17-global-panic-handler.md) — panic handler design, sample output (default + debug mode + crash report), test matrix, and follow-up items.\r\n- [`docs/prd/ambient-identity.md`](docs/prd/ambient-identity.md) — the ambient-identity PRD. The `(nil, nil)` return contract from `ambient.Authenticate()` is intentional for the generic kind; the bug was the manager failing to honor it.\r\n- [`.claude/agents/tui-expert.md`](.claude/agents/tui-expert.md) — `pkg/ui` output-channel rules the panic handler follows (stderr UI channel via `ui.Error` / `ui.MarkdownMessage`; never `fmt.Fprintf(os.Stderr, ...)`).\r\n- [`github.com/mikefarah/yq` v4.53.0 release notes](https://github.com/mikefarah/yq/releases/tag/v4.53.0) — upstream changelog for the logger migration.\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Global panic recovery with user-friendly crash reports and automatic crash-file generation.\n\n* **Bug Fixes**\n  * Prevented crash when authenticating with generic ambient identities that return nil credentials; authentication now returns stable identity info without panicking.\n\n* **Documentation**\n  * Added detailed fix write-ups for panic recovery and nil-credential behavior.\n\n* **Tests**\n  * Added unit and integration tests covering panic handling and nil-credential authentication paths.\n\n* **Chores**\n  * Updated dependencies, bumped example default version to 1.216.0, adjusted logger handling, and refreshed NOTICE entries.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":3},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/310311041","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/310311041/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/310311041/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.216.0-test.0","id":310311041,"author":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SfviB","tag_name":"v1.216.0-test.0","target_commitish":"prd/pro-summary-upload","name":"v1.216.0-test.0","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-17T10:55:49Z","updated_at":"2026-04-17T11:36:58Z","published_at":"2026-04-17T11:36:58Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560852","id":398560852,"node_id":"RA_kwDOEW4XoM4XwY5U","name":"atmos_1.216.0-test.0_darwin_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":208108992,"digest":"sha256:c599353ed896081a924ed2c0dd3b5a522183da57096a3f71a529614658870378","download_count":4,"created_at":"2026-04-17T11:34:51Z","updated_at":"2026-04-17T11:34:58Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560930","id":398560930,"node_id":"RA_kwDOEW4XoM4XwY6i","name":"atmos_1.216.0-test.0_darwin_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195079922,"digest":"sha256:d04172200289334180372ca0a65c73568a14a761bc1869cf0eedf2ccb6c00bc8","download_count":4,"created_at":"2026-04-17T11:34:59Z","updated_at":"2026-04-17T11:35:04Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560868","id":398560868,"node_id":"RA_kwDOEW4XoM4XwY5k","name":"atmos_1.216.0-test.0_freebsd_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202571948,"digest":"sha256:4c283460a315850d4fb5263ad7e3ce648519b61bd858196d8de814955bd6aacb","download_count":0,"created_at":"2026-04-17T11:34:52Z","updated_at":"2026-04-17T11:34:58Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560727","id":398560727,"node_id":"RA_kwDOEW4XoM4XwY3X","name":"atmos_1.216.0-test.0_freebsd_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188154028,"digest":"sha256:27a29a6967e0e528aa0dc9e748a016bcbc49cd92f66e71ee70e7c299ce697f69","download_count":0,"created_at":"2026-04-17T11:34:44Z","updated_at":"2026-04-17T11:34:51Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560848","id":398560848,"node_id":"RA_kwDOEW4XoM4XwY5Q","name":"atmos_1.216.0-test.0_linux_386","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189161634,"digest":"sha256:c3f93a3412a4c88eba9995913a56f65dd07992f3f266b55e104fb0007de61bc2","download_count":5,"created_at":"2026-04-17T11:34:51Z","updated_at":"2026-04-17T11:34:57Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560724","id":398560724,"node_id":"RA_kwDOEW4XoM4XwY3U","name":"atmos_1.216.0-test.0_linux_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203378850,"digest":"sha256:957efe5ef1e41c5ba87a1ee17f6677d0f657f96aa02e75d332abb67ac0a9cbc0","download_count":185,"created_at":"2026-04-17T11:34:44Z","updated_at":"2026-04-17T11:34:52Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560928","id":398560928,"node_id":"RA_kwDOEW4XoM4XwY6g","name":"atmos_1.216.0-test.0_linux_arm","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189333666,"digest":"sha256:2a30b8832252e78dd786d4aa344a4a54e2639d79ca615fd4e2af03e1dae873c2","download_count":0,"created_at":"2026-04-17T11:34:58Z","updated_at":"2026-04-17T11:35:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560921","id":398560921,"node_id":"RA_kwDOEW4XoM4XwY6Z","name":"atmos_1.216.0-test.0_linux_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188874914,"digest":"sha256:55207df70fd6b44df1d79f548d1a9c49021ad4c9d15a79f03a2e037d15c4ee97","download_count":4,"created_at":"2026-04-17T11:34:57Z","updated_at":"2026-04-17T11:35:02Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560932","id":398560932,"node_id":"RA_kwDOEW4XoM4XwY6k","name":"atmos_1.216.0-test.0_SHA256SUMS","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1107,"digest":"sha256:4910983e34f722b302d3c22581d129605066b3bb9ae87b8ea9e321845978e02b","download_count":0,"created_at":"2026-04-17T11:34:59Z","updated_at":"2026-04-17T11:34:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560725","id":398560725,"node_id":"RA_kwDOEW4XoM4XwY3V","name":"atmos_1.216.0-test.0_windows_386.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193234944,"digest":"sha256:0e0ee09d37099f45a4593aea9fb1982c5c571fd3307e6c666de7d356721e507f","download_count":4,"created_at":"2026-04-17T11:34:44Z","updated_at":"2026-04-17T11:34:51Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560723","id":398560723,"node_id":"RA_kwDOEW4XoM4XwY3T","name":"atmos_1.216.0-test.0_windows_amd64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206863872,"digest":"sha256:28814131160b128cb7723531cc1b93ec118f5bdc701a750774d3cc1d4a7ca408","download_count":4,"created_at":"2026-04-17T11:34:44Z","updated_at":"2026-04-17T11:34:52Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/398560863","id":398560863,"node_id":"RA_kwDOEW4XoM4XwY5f","name":"atmos_1.216.0-test.0_windows_arm64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":190152192,"digest":"sha256:fa1c2334dc6cc9a069e17b1e8cdd6e8f3648f3409ccf1e4acc58f19eb981ba16","download_count":4,"created_at":"2026-04-17T11:34:52Z","updated_at":"2026-04-17T11:34:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-test.0/atmos_1.216.0-test.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.216.0-test.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.216.0-test.0","body":"## 🚀 Feature Preview Release\n\nThis is a **feature preview** based on an open pull request. It is intended for testing artifacts and validating functionality before the feature is merged.\n\n> [!WARNING]\n> This release is temporary and may be removed at any time without notice.\n"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/309120132","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/309120132/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/309120132/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.216.0-rc.1","id":309120132,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SbMyE","tag_name":"v1.216.0-rc.1","target_commitish":"main","name":"v1.216.0-rc.1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-14T02:11:15Z","updated_at":"2026-04-15T01:42:16Z","published_at":"2026-04-15T01:42:16Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650218","id":396650218,"node_id":"RA_kwDOEW4XoM4XpGbq","name":"atmos_1.216.0-rc.1_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":208096608,"digest":"sha256:066d912d9c3f1ae891d34523de38b8ca6c4d09820c1a6b4ef96748bceccf1764","download_count":4,"created_at":"2026-04-15T01:41:13Z","updated_at":"2026-04-15T01:41:19Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650220","id":396650220,"node_id":"RA_kwDOEW4XoM4XpGbs","name":"atmos_1.216.0-rc.1_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195079810,"digest":"sha256:4e8adc970515f20cde7198b5831dd717a7aa14993de16f0cbddd18ed2b9b1938","download_count":6,"created_at":"2026-04-15T01:41:13Z","updated_at":"2026-04-15T01:41:19Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650168","id":396650168,"node_id":"RA_kwDOEW4XoM4XpGa4","name":"atmos_1.216.0-rc.1_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202567852,"digest":"sha256:f831d46a0b0091bddf00856ed670224a6fa4c7f25856faf94773188188e196d8","download_count":3,"created_at":"2026-04-15T01:41:05Z","updated_at":"2026-04-15T01:41:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650170","id":396650170,"node_id":"RA_kwDOEW4XoM4XpGa6","name":"atmos_1.216.0-rc.1_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188154028,"digest":"sha256:554f1154ad1d8d287d70b6d31ab2af325c63c44f1528c6bd6d615ccb4e402b80","download_count":3,"created_at":"2026-04-15T01:41:06Z","updated_at":"2026-04-15T01:41:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650134","id":396650134,"node_id":"RA_kwDOEW4XoM4XpGaW","name":"atmos_1.216.0-rc.1_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189157538,"digest":"sha256:5a0da3b6812e13bdace880077ed393ecea82a20c8e2071152cdb3f2638f0c9aa","download_count":3,"created_at":"2026-04-15T01:40:58Z","updated_at":"2026-04-15T01:41:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650135","id":396650135,"node_id":"RA_kwDOEW4XoM4XpGaX","name":"atmos_1.216.0-rc.1_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203370658,"digest":"sha256:eeba719a0ad4ea48a62369df388c10bb19fac6f5aea53f54477958391422a2b0","download_count":41,"created_at":"2026-04-15T01:40:58Z","updated_at":"2026-04-15T01:41:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650136","id":396650136,"node_id":"RA_kwDOEW4XoM4XpGaY","name":"atmos_1.216.0-rc.1_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189333666,"digest":"sha256:0b530412743ad987c1ab4209d08e6cc6d02d8bd71e76569068cb2bd72636fef9","download_count":3,"created_at":"2026-04-15T01:40:58Z","updated_at":"2026-04-15T01:41:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650137","id":396650137,"node_id":"RA_kwDOEW4XoM4XpGaZ","name":"atmos_1.216.0-rc.1_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188874914,"digest":"sha256:963f9e59352c146aa5df30e9fcae6cfd3ce1a3577a875418c7021ccb36661dc7","download_count":3,"created_at":"2026-04-15T01:40:58Z","updated_at":"2026-04-15T01:41:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650222","id":396650222,"node_id":"RA_kwDOEW4XoM4XpGbu","name":"atmos_1.216.0-rc.1_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:1d8bce11523bd9b99c589be641a29350d0dae345c583a4abc68e9202f46c1e9f","download_count":3,"created_at":"2026-04-15T01:41:14Z","updated_at":"2026-04-15T01:41:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650221","id":396650221,"node_id":"RA_kwDOEW4XoM4XpGbt","name":"atmos_1.216.0-rc.1_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193229824,"digest":"sha256:b31d2b5eb9ae433ff13547c18401065e791430115148c989e29498b296ca5f5d","download_count":3,"created_at":"2026-04-15T01:41:13Z","updated_at":"2026-04-15T01:41:21Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650173","id":396650173,"node_id":"RA_kwDOEW4XoM4XpGa9","name":"atmos_1.216.0-rc.1_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206858240,"digest":"sha256:acef1f0f98e9f0d3a30cf8a0b6fefc311cbe140748432976916a0b7e17a05b19","download_count":4,"created_at":"2026-04-15T01:41:06Z","updated_at":"2026-04-15T01:41:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/396650167","id":396650167,"node_id":"RA_kwDOEW4XoM4XpGa3","name":"atmos_1.216.0-rc.1_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":190146560,"digest":"sha256:5c6dfb0047ab70eac3483eb99b3d5fe4ecb11b53dd1b92d03952c7f332b5aa13","download_count":3,"created_at":"2026-04-15T01:41:05Z","updated_at":"2026-04-15T01:41:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.1/atmos_1.216.0-rc.1_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.216.0-rc.1","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.216.0-rc.1","body":"## 🚀 Enhancements\n\n<details>\n  <summary>fix: respect workdir path for generate: writes and hook-triggered terraform @zack-is-cool (#2309)</summary>\n## Summary\r\n\r\nFixes a cluster of bugs in `provision.workdir.enabled: true` mode covering file generation, hook dispatch, store hook correctness, and repeated-apply terraform init prompts.\r\n\r\n---\r\n\r\n**Bug 1 – `generate:` writes to base component directory instead of workdir**\r\n\r\n`resolveAndProvisionComponentPath` called `autoGenerateComponentFiles` before `provisionComponentSource`. Generated files (e.g. `locals_override.tf`) were written to `components/terraform/<component>/` instead of the JIT workdir.\r\n\r\nFix: swap call order — provision source first, then generate into the returned (workdir) path.\r\n\r\n---\r\n\r\n**Bug 2 – hooks and output executor used base component directory**\r\n\r\n`extractComponentPath` always returned the base component directory because `_workdir_path` is a runtime key absent from freshly-described sections. Hooks calling `terraform output` would fail with _\"no such file or directory\"_ when trying to write `backend.tf.json` to a path that doesn't exist.\r\n\r\nFix: check `provision.workdir.enabled` in sections and rebuild the deterministic workdir path via `workdir.BuildPath`.\r\n\r\n---\r\n\r\n**Bug 3 – hooks fired on every event regardless of `events:` list**\r\n\r\n`RunAll` had no event matching — all hooks ran regardless of their `events:` list. YAML uses hyphens (`after-terraform-apply`) but Go `HookEvent` constants use dots (`after.terraform.apply`).\r\n\r\nFix: added `MatchesEvent()` with hyphen→dot normalisation. Hooks with no `events:` field match all events to preserve backward compatibility with configs written before event filtering existed.\r\n\r\n---\r\n\r\n**Bug 4 – store hook used wrong output getter and wrong error sentinels**\r\n\r\nThe store hook always used `GetOutput` (which runs `terraform init`) regardless of when it fires. Running init after apply with a closed stdin triggers state-migration prompts. Additionally, errors used `ErrNilTerraformOutput` for both retrieval failures and missing keys, and included no context about which hook or event caused the failure.\r\n\r\nFix: `RunE` now selects the getter based on the event — `after-` events use `GetOutputSkipInit` (workdir already initialised); `before-` events use `GetOutput` (init may not have run yet). `IsPostExecution()` helper on `HookEvent` encodes the contract. Error messages now include hook name, event, output key, component, and stack. Correct sentinels: `ErrTerraformOutputFailed` for retrieval errors, `ErrTerraformOutputNotFound` for missing keys.\r\n\r\n---\r\n\r\n**Bug 5 – \"Do you want to migrate all workspaces?\" prompt on every apply**\r\n\r\nThis was caused by three interacting problems:\r\n\r\n1. **`-reconfigure` added whenever `WorkdirPathKey` was set** — `WorkdirPathKey` is set for both a preserved workdir (TTL not expired) and a wiped/re-provisioned workdir (TTL=0s or expired). Checking it unconditionally added `-reconfigure` even when `.terraform/` was intact.\r\n\r\n2. **`init_run_reconfigure: true` overriding the preserved-workdir guard** — even after scoping `-reconfigure` to `WorkdirReprovisionedKey`, the global `InitRunReconfigure` flag bypassed the check and always added `-reconfigure`.\r\n\r\n3. **`cleanTerraformWorkspace` deleting `.terraform/environment` for workdir components** — this function was designed for backend-switching on non-workdir components. For workdir components it deleted the active workspace record before every init, causing OpenTofu to see orphaned `terraform.tfstate.d/<workspace>/` directories with no active workspace and prompt for migration.\r\n\r\nWhen combined: `-reconfigure` tells OpenTofu to ignore the saved backend and treat init as fresh. A fresh-init with existing workspace state dirs triggers the migration prompt even when the backend is unchanged.\r\n\r\nFix (three parts):\r\n- Introduce `WorkdirReprovisionedKey` (`_workdir_reprovisioned`), set only by `vendorToTarget` (source wiped) or `SyncDir` with file changes (workdir synced). This is the correct signal that `.terraform/` was actually cleared.\r\n- For workdir components with a **preserved** workdir, ignore `InitRunReconfigure` — the backend is always generated deterministically from the same stack config and never changes between runs. `-reconfigure` is only added when `WorkdirReprovisionedKey` is set or the subcommand is `workspace`.\r\n- Skip `cleanTerraformWorkspace` for workdir-enabled components — the backend is consistent, so there is no reason to clear the workspace record.\r\n\r\n---\r\n\r\n## Tested end-to-end\r\n\r\nFull producer → store → consumer pipeline:\r\n\r\n1. `null-label` applies with JIT workdir + `generate:` override\r\n2. `after-terraform-apply` hook reads `.id` output and writes it to Redis (no init re-run, no migration prompt)\r\n3. `consumer` reads the value via `!store local/redis null-label label_id`, injects it into its own `generate:` template, applies successfully\r\n4. Repeated applies do not prompt for workspace migration, with or without `init_run_reconfigure: true` and with or without `ttl: \"0s\"`\r\n\r\nReproduction\r\nThis worked successfully for the deployment that I was initially having this issue with. Local reproduction below.\r\n\r\n```\r\ncat << 'SCRIPT' > repro.sh\r\n#!/usr/bin/env bash\r\n# ============================================================\r\n# ATMOS REPRO: generate: writes orphaned override to base\r\n#              component directory; hook-triggered terraform fails;\r\n#              consumer reads store value into JIT workdir generate:\r\n#\r\n# Stack name:  demo       (from vars.name + name_template)\r\n# Components:  null-label (producer), consumer (reads from store)\r\n#\r\n# Requires: atmos, tofu, docker\r\n# ============================================================\r\n\r\nset -euo pipefail\r\n\r\nWORKDIR=\"$(mktemp -d -t atmos-repro-XXXXXX)\"\r\necho \"Working in: ${WORKDIR}\"\r\ncd \"${WORKDIR}\"\r\n\r\necho \"== starting redis ==\"\r\ndocker stop atmos-repro-redis 2>/dev/null || true\r\ndocker run -d --rm --name atmos-repro-redis -p 6379:6379 redis:7-alpine\r\ntrap 'docker stop atmos-repro-redis 2>/dev/null || true' EXIT\r\nsleep 1\r\n\r\ncat <<'EOF' > atmos.yaml\r\nbase_path: \".\"\r\n\r\nstores:\r\n  local/redis:\r\n    type: redis\r\n    options:\r\n      url: \"redis://localhost:6379\"\r\n\r\ncomponents:\r\n  terraform:\r\n    base_path: \"components/terraform\"\r\n    command: \"tofu\"\r\n    workspaces_enabled: true\r\n    apply_auto_approve: false\r\n    deploy_run_init: true\r\n    init_run_reconfigure: true\r\n    auto_generate_backend_file: true\r\n    auto_generate_files: true\r\n\r\nstacks:\r\n  name_template: \"{{ .vars.name }}\"\r\n  base_path: \"stacks\"\r\n  included_paths:\r\n    - \"**/*\"\r\nEOF\r\n\r\nmkdir -p stacks\r\n\r\ncleanup() {\r\n  echo \"-- cleanup --\"\r\n  atmos terraform workdir clean --all 2>/dev/null || true\r\n  echo \"-- cleanup done --\"\r\n}\r\n\r\nshow_dirs() {\r\n  local label=\"${1:-}\"\r\n  echo\r\n  if [[ -n \"$label\" ]]; then\r\n    echo \"-- directories: $label --\"\r\n  fi\r\n  echo \"components/terraform/null-label\"\r\n  ls -la components/terraform/null-label/ 2>/dev/null || echo \"(does not exist)\"\r\n  echo \".workdir/terraform/demo-null-label\"\r\n  ls -la .workdir/terraform/demo-null-label/ 2>/dev/null || echo \"(does not exist)\"\r\n  echo \".workdir/terraform/demo-consumer\"\r\n  ls -la .workdir/terraform/demo-consumer/ 2>/dev/null || echo \"(does not exist)\"\r\n}\r\n\r\n# ============================================================\r\n# SCENARIO 1: JIT + generate, no hook.\r\n# Verifies generate: writes to the workdir only (not the base\r\n# component directory), and that apply succeeds.\r\n# ============================================================\r\necho\r\necho \"=================================================\"\r\necho \"SCENARIO 1: init + apply WITHOUT hook (expect success)\"\r\necho \"  - generate: must write only to workdir, not base component dir\"\r\necho \"=================================================\"\r\ncleanup\r\n\r\ncat <<'EOF' > stacks/demo.yaml\r\nvars:\r\n  name: demo\r\n\r\nterraform:\r\n  backend_type: local\r\n\r\ncomponents:\r\n  terraform:\r\n    null-label:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        name: \"demo\"\r\n        enabled: true\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        locals_override.tf: |\r\n          # override file generated by atmos\r\n          locals {\r\n            name = \"THISISANOVERRIDE\"\r\n          }\r\nEOF\r\n\r\necho \"== init ==\"\r\natmos terraform init null-label -s demo\r\n\r\nshow_dirs \"after init\"\r\n\r\necho \"== apply ==\"\r\natmos terraform apply null-label -s demo -- -auto-approve\r\n\r\nshow_dirs \"after apply\"\r\n\r\necho\r\necho \"SCENARIO 1: PASSED\"\r\n\r\n# ============================================================\r\n# SCENARIO 2: JIT + generate + after-apply hook writes to Redis.\r\n# The hook fires after apply, reads terraform output, and stores\r\n# it in Redis. Tests that the hook does not re-run init (which\r\n# would prompt for workspace migration with a closed stdin).\r\n# ============================================================\r\necho\r\necho \"=================================================\"\r\necho \"SCENARIO 2: init + apply WITH after-apply store hook (expect success)\"\r\necho \"  - hook reads .id output and stores it in Redis\"\r\necho \"  - hook must NOT re-run terraform init\"\r\necho \"=================================================\"\r\ncleanup\r\n\r\ncat <<'EOF' > stacks/demo.yaml\r\nvars:\r\n  name: demo\r\n\r\nterraform:\r\n  backend_type: local\r\n\r\ncomponents:\r\n  terraform:\r\n    null-label:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        name: \"demo\"\r\n        enabled: true\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        locals_override.tf: |\r\n          # override file generated by atmos\r\n          locals {\r\n            name = \"THISISANOVERRIDE\"\r\n          }\r\n      hooks:\r\n        store-outputs:\r\n          events:\r\n            - after-terraform-apply\r\n          command: store\r\n          name: local/redis\r\n          outputs:\r\n            label_id: .id\r\nEOF\r\n\r\necho \"== init ==\"\r\natmos terraform init null-label -s demo\r\n\r\necho \"== apply ==\"\r\natmos terraform apply null-label -s demo -- -auto-approve\r\n\r\nshow_dirs \"after apply\"\r\n\r\necho\r\necho \"== verifying Redis contains label_id ==\"\r\nSTORED=$(docker exec atmos-repro-redis redis-cli KEYS \"*label_id*\")\r\nif [[ -z \"$STORED\" ]]; then\r\n  echo \"SCENARIO 2: FAILED — no label_id key found in Redis\"\r\n  exit 1\r\nfi\r\necho \"Redis keys: $STORED\"\r\necho\r\necho \"SCENARIO 2: PASSED\"\r\n\r\n# ============================================================\r\n# SCENARIO 3: Consumer reads label_id from Redis via !store,\r\n# injects it into a generate: template inside its own JIT workdir.\r\n# Tests the full producer → store → consumer pipeline.\r\n# ============================================================\r\necho\r\necho \"=================================================\"\r\necho \"SCENARIO 3: consumer reads store value into JIT workdir generate:\"\r\necho \"  - consumer.vars.label_id: !store local/redis null-label label_id\"\r\necho \"  - generate: uses {{ .vars.label_id }} in a locals override\"\r\necho \"  - both components use JIT workdir with ttl: 0s\"\r\necho \"=================================================\"\r\n\r\ncat <<'EOF' > stacks/demo.yaml\r\nvars:\r\n  name: demo\r\n\r\nterraform:\r\n  backend_type: local\r\n\r\ncomponents:\r\n  terraform:\r\n    null-label:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        name: \"demo\"\r\n        enabled: true\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        locals_override.tf: |\r\n          # override file generated by atmos\r\n          locals {\r\n            name = \"THISISANOVERRIDE\"\r\n          }\r\n      hooks:\r\n        store-outputs:\r\n          events:\r\n            - after-terraform-apply\r\n          command: store\r\n          name: local/redis\r\n          outputs:\r\n            label_id: .id\r\n\r\n    consumer:\r\n      vars:\r\n        namespace: \"eg\"\r\n        stage: \"test\"\r\n        enabled: true\r\n        label_id: !store local/redis null-label label_id\r\n      source:\r\n        uri: \"git::https://github.com/cloudposse/terraform-null-label.git\"\r\n        version: \"0.25.0\"\r\n        ttl: \"0s\"\r\n      provision:\r\n        workdir:\r\n          enabled: true\r\n      generate:\r\n        name_override.tf: |\r\n          # override file generated by atmos — value comes from Redis via !store\r\n          locals {\r\n            name = \"{{ .vars.label_id }}-derpderpderp\"\r\n          }\r\nEOF\r\n\r\necho \"== apply consumer ==\"\r\natmos terraform apply consumer -s demo -- -auto-approve\r\n\r\nshow_dirs \"after consumer apply\"\r\n\r\necho\r\necho \"== verifying consumer output contains the store value ==\"\r\nCONSUMER_ID=$(atmos terraform output consumer -s demo 2>/dev/null |  grep \"id =\" | head -1)\r\necho \"Consumer id output line: $CONSUMER_ID\"\r\n\r\nif echo \"$CONSUMER_ID\" | grep -q \"derpderpderp\"; then\r\n  echo\r\n  echo \"SCENARIO 3: PASSED — consumer label contains store-derived value\"\r\nelse\r\n  echo\r\n  echo \"SCENARIO 3: FAILED — consumer output does not contain expected suffix\"\r\n  echo \"  Expected 'derpderpderp' in id output\"\r\n  exit 1\r\nfi\r\n\r\necho\r\necho \"=================================================\"\r\necho \"ALL SCENARIOS PASSED\"\r\necho \"Working directory preserved at: ${WORKDIR}\"\r\necho \"=================================================\"\r\nSCRIPT\r\nbash repro.sh 2>&1 | tee repro.log\r\n```\r\n\r\n## Test plan\r\n\r\n- [x] `TestHook_MatchesEvent` — hyphen/dot formats, no match, nil/empty events (backward compat), multiple events\r\n- [x] `TestRunAll_EventFiltering` — store called/skipped based on event matching\r\n- [x] `TestExecutor_GetOutputWithOptions_SkipInit` — `terraform init` NOT called when `SkipInit: true`\r\n- [x] `TestBuildInitArgs_ReconfigureWhenWorkdirReprovisioned` — `-reconfigure` added when workdir wiped\r\n- [x] `TestBuildInitArgs_NoReconfigureWhenWorkdirPreserved` — `-reconfigure` NOT added for preserved workdir\r\n- [x] `TestBuildInitArgs_NoReconfigureWhenWorkdirPreserved_InitRunReconfigureIgnored` — global `InitRunReconfigure: true` does not override the preserved-workdir guard\r\n- [x] `TestBuildInitArgs_ReconfigureForNonWorkdir_InitRunReconfigure` — `InitRunReconfigure` still works for non-workdir components\r\n- [x] `TestPrepareInitExecution_SkipsCleanWorkspaceForWorkdir` — `.terraform/environment` preserved for workdir components\r\n- [x] `TestPrepareInitExecution_CleansWorkspaceForNonWorkdir` — `.terraform/environment` still cleaned for non-workdir components\r\n- [x] `TestIsWorkdirEnabled` / `TestExtractComponentPath/workdir_enabled_*` — workdir path resolution\r\n- [x] Full `pkg/hooks`, `pkg/terraform/output`, `internal/exec` test suites pass\r\n\r\nCloses #2308\r\nCloses #2307\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Workdir-aware provisioning that targets JIT workdirs and signals reprovisioning\n  * Hook event normalization, post-execution detection, and event-matching/filtering\n  * New output APIs including skip-init retrieval and advanced output options\n\n* **Improvements**\n  * Smarter terraform init (-reconfigure) behavior for workdir flows\n  * Preserve workspace files for workdir components to avoid unintended deletions\n  * More robust output caching and clearer CLI success/error messaging\n\n* **Tests**\n  * Expanded coverage for workdirs, init args, hooks, output paths, and store commands\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/308612599","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/308612599/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/308612599/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.216.0-rc.0","id":308612599,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SZQ33","tag_name":"v1.216.0-rc.0","target_commitish":"main","name":"v1.216.0-rc.0","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-14T00:52:28Z","updated_at":"2026-04-14T01:28:49Z","published_at":"2026-04-14T01:28:49Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818182","id":395818182,"node_id":"RA_kwDOEW4XoM4Xl7TG","name":"atmos_1.216.0-rc.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":208088352,"digest":"sha256:24fa818a4886538b854730c878f55d7e1f13a40cc6fbc8f9b9dfa0273c560bca","download_count":1,"created_at":"2026-04-14T01:27:32Z","updated_at":"2026-04-14T01:27:39Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818120","id":395818120,"node_id":"RA_kwDOEW4XoM4Xl7SI","name":"atmos_1.216.0-rc.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195063234,"digest":"sha256:ec9d7f083734071d58d6fdc1018c7b6ab761a96c03ed68f464ce8440d637f772","download_count":1,"created_at":"2026-04-14T01:27:24Z","updated_at":"2026-04-14T01:27:32Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818122","id":395818122,"node_id":"RA_kwDOEW4XoM4Xl7SK","name":"atmos_1.216.0-rc.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202555564,"digest":"sha256:54aac65eae43efa45ee2c8756f074bd154aed4b1256fb92c920fe361c457c005","download_count":1,"created_at":"2026-04-14T01:27:24Z","updated_at":"2026-04-14T01:27:33Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818119","id":395818119,"node_id":"RA_kwDOEW4XoM4Xl7SH","name":"atmos_1.216.0-rc.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188088492,"digest":"sha256:c2f9ff63004cf3fc4628cc0a27920f07a0ec8568c1c1a2c5383a4416e0fd64f0","download_count":1,"created_at":"2026-04-14T01:27:24Z","updated_at":"2026-04-14T01:27:31Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818190","id":395818190,"node_id":"RA_kwDOEW4XoM4Xl7TO","name":"atmos_1.216.0-rc.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189145250,"digest":"sha256:5787e8cf21436305d93785667316e217788f028d1512c558044addbbe947662d","download_count":1,"created_at":"2026-04-14T01:27:34Z","updated_at":"2026-04-14T01:27:39Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818249","id":395818249,"node_id":"RA_kwDOEW4XoM4Xl7UJ","name":"atmos_1.216.0-rc.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203362466,"digest":"sha256:7f7b15b782018de9dd144150670f8fac9e1f1bccf64cb69d42514970c0fef534","download_count":8,"created_at":"2026-04-14T01:27:39Z","updated_at":"2026-04-14T01:27:44Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818216","id":395818216,"node_id":"RA_kwDOEW4XoM4Xl7To","name":"atmos_1.216.0-rc.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189268130,"digest":"sha256:034ed3712a583bd2a69a75901c0d1a03199e11625ffe0173c097f139d94c8a49","download_count":1,"created_at":"2026-04-14T01:27:38Z","updated_at":"2026-04-14T01:27:44Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818213","id":395818213,"node_id":"RA_kwDOEW4XoM4Xl7Tl","name":"atmos_1.216.0-rc.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188874914,"digest":"sha256:3d4ae8720f4e6b3861e885d5e54bda7afdfee5a10930ff6c8712569ccb59b701","download_count":1,"created_at":"2026-04-14T01:27:38Z","updated_at":"2026-04-14T01:27:46Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818252","id":395818252,"node_id":"RA_kwDOEW4XoM4Xl7UM","name":"atmos_1.216.0-rc.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:ecf9852956861e454ef0aad7d0a33516e878e253bd404da7e1c5aaef3e84d938","download_count":1,"created_at":"2026-04-14T01:27:40Z","updated_at":"2026-04-14T01:27:40Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818180","id":395818180,"node_id":"RA_kwDOEW4XoM4Xl7TE","name":"atmos_1.216.0-rc.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193218560,"digest":"sha256:f0c8dca11cb11fa00bfca7e8a14c5f142d79100c5e17a49b40c8d280b4ac61b1","download_count":1,"created_at":"2026-04-14T01:27:32Z","updated_at":"2026-04-14T01:27:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818166","id":395818166,"node_id":"RA_kwDOEW4XoM4Xl7S2","name":"atmos_1.216.0-rc.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206845440,"digest":"sha256:676ddd4569959b9b68b711be114f81addc39472952e7d17cc16fbba5027459d6","download_count":1,"created_at":"2026-04-14T01:27:31Z","updated_at":"2026-04-14T01:27:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395818121","id":395818121,"node_id":"RA_kwDOEW4XoM4Xl7SJ","name":"atmos_1.216.0-rc.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":190136320,"digest":"sha256:8166b7a56d93327e3211352e10de5de938def9c7a1b9bde9db53b72efa2cffd4","download_count":1,"created_at":"2026-04-14T01:27:24Z","updated_at":"2026-04-14T01:27:32Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.216.0-rc.0/atmos_1.216.0-rc.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.216.0-rc.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.216.0-rc.0","body":"<details>\n  <summary>feat(list): add matrix output format to list instances command @johncblandii (#2322)</summary>\n## what\n\n- Add `--format=matrix` support to `atmos list instances`, producing GitHub Actions-compatible matrix JSON identical to `atmos describe affected --format=matrix`\n- Add `--output-file` flag for writing results in `key=value` format (for `$GITHUB_OUTPUT`)\n- Extract shared matrix types and output logic into `pkg/matrix/` for DRY reuse across both `describe affected` and `list instances`\n\n## why\n\n- CI/CD pipelines need matrix output from `list instances` to drive parallel GitHub Actions jobs, just like `describe affected` already supports\n- Sharing the matrix output logic between commands avoids duplication and ensures consistent output format\n- The `--output-file` flag enables direct integration with GitHub Actions `$GITHUB_OUTPUT` without shell redirection\n\n## references\n\n- Output format matches `atmos describe affected --format=matrix` exactly:\n  ```json\n  {\"include\":[{\"stack\":\"...\",\"component\":\"...\",\"component_path\":\"...\",\"component_type\":\"...\"}]}\n  ```\n- When using `--output-file`, writes `matrix=<json>` and `affected_count=<N>` lines\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added --format=matrix to emit GitHub Actions–compatible matrix JSON\n  * Added --output-file / -o to write matrix results as key=value (for $GITHUB_OUTPUT); only supported with --format=matrix\n  * Matrix entries include stack, component, component_path, and component_type\n  * --format=matrix disallows --upload and triggers CI-friendly output behavior\n\n* **Tests**\n  * Added coverage for matrix format, output-file flag, and file/stdout writing\n\n* **Documentation**\n  * Added docs, blog post, and roadmap entry for matrix support\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>chore: Update Atmos Pro workflow to use v1.215.0 container image @osterman (#2323)</summary>\n## what\n\n- Updated the Atmos Pro CI workflow container image from `1.214.0` to `1.215.0`\n- Removed the \"Build atmos from source\" step that compiled a dev binary via `go build`\n- Changed `atmos docs generate readme` and `atmos pro commit` to use the container's pre-installed `atmos` binary instead of `/tmp/atmos-dev`\n\n## why\n\n- Atmos v1.215.0 ships with the `pro commit` command built-in, so building from source is no longer necessary\n- Simplifies the CI workflow and reduces build time by eliminating the Go compilation step\n\n## references\n\n- #2298 (`atmos pro commit` feature)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated GitHub Actions workflow to use atmos container image version 1.215.0 (upgraded from 1.214.0).\n  * Streamlined workflow execution by removing the local build step and invoking atmos directly from the container image.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix: treat missing Atmos config in BASE as empty baseline in `atmos describe affected` @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2296)</summary>\n`atmos describe affected` fatally errors with `failed to find import` on greenfield branches (or when the base ref predates Atmos adoption) because `ErrFailedToFindImport` from BASE stack processing was propagated as a hard failure. The correct behavior is to treat an unconfigured BASE as an empty baseline — everything in HEAD is new, therefore everything is affected.\n\n## Changes\n\n- **`internal/exec/describe_affected_utils.go`** — `executeDescribeAffected` now handles `ErrFailedToFindImport` alongside `ErrNoStackManifestsFound` in both BASE processing paths:\n  - `FindAllStackConfigsInPathsForStack` returning `ErrFailedToFindImport` (stacks directory absent in BASE) → sets `remoteStackConfigFilesAbsolutePaths = []string{}`\n  - `ExecuteDescribeStacks` returning `ErrFailedToFindImport` (imports unresolvable in BASE) → sets `remoteStacks = map[string]any{}`\n  \n  Both cases emit a `WARN` log with actionable context:\n  ```\n  WARN No Atmos stack manifests found in BASE; treating BASE as empty (all HEAD components will be reported as affected)\n       hint=\"This is expected for greenfield branches or when the base branch does not yet use Atmos\"\n  ```\n\n- **`tests/describe_affected_greenfield_test.go`** — Integration test that initializes a bare-minimum git repo (single commit, no Atmos config) as the BASE and asserts all known HEAD components (`component-1`, `component-2` in `prod`/`nonprod`) appear in the affected output without error.\n</details>\n","mentions_count":2},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/308476055","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/308476055/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/308476055/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0","id":308476055,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SYviX","tag_name":"v1.215.0","target_commitish":"main","name":"v1.215.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-04-13T15:52:10Z","updated_at":"2026-04-13T17:50:26Z","published_at":"2026-04-13T17:49:52Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571768","id":395571768,"node_id":"RA_kwDOEW4XoM4Xk_I4","name":"atmos_1.215.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":208076032,"digest":"sha256:cabfbbc70967b3e1ca3cf7ae05b0e065c496d413130382cc7fe629eefb30e0d9","download_count":15,"created_at":"2026-04-13T17:40:58Z","updated_at":"2026-04-13T17:41:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571849","id":395571849,"node_id":"RA_kwDOEW4XoM4Xk_KJ","name":"atmos_1.215.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195063218,"digest":"sha256:58c80df5be7cea73c5d435bfcc666ec24fb841ed6d691cf739545ab50c5f7f77","download_count":85,"created_at":"2026-04-13T17:41:06Z","updated_at":"2026-04-13T17:41:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571765","id":395571765,"node_id":"RA_kwDOEW4XoM4Xk_I1","name":"atmos_1.215.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202543276,"digest":"sha256:8819db3ad428428659944064123065612ce8512162714ec415fe46244e359ecd","download_count":0,"created_at":"2026-04-13T17:40:58Z","updated_at":"2026-04-13T17:41:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571918","id":395571918,"node_id":"RA_kwDOEW4XoM4Xk_LO","name":"atmos_1.215.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188088492,"digest":"sha256:92b8e8a5889aee95056f803266a43c2f9ae7f43e6c321cd36ba3eca9c605636b","download_count":0,"created_at":"2026-04-13T17:41:15Z","updated_at":"2026-04-13T17:41:21Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571913","id":395571913,"node_id":"RA_kwDOEW4XoM4Xk_LJ","name":"atmos_1.215.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189137058,"digest":"sha256:41f3d1648b63c19d70812d39c4adc38f5230b43347eb58240f0189ab2708e4d8","download_count":3,"created_at":"2026-04-13T17:41:14Z","updated_at":"2026-04-13T17:41:20Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571766","id":395571766,"node_id":"RA_kwDOEW4XoM4Xk_I2","name":"atmos_1.215.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203350178,"digest":"sha256:746c07219e7e97538c3a027308b902ee4a586d730b31379985ef00821a5d5d59","download_count":7491,"created_at":"2026-04-13T17:40:58Z","updated_at":"2026-04-13T17:41:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571911","id":395571911,"node_id":"RA_kwDOEW4XoM4Xk_LH","name":"atmos_1.215.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189268130,"digest":"sha256:887081bbc26546cbe6d16ae45434893febc023b3d8d9a01462ac140746d7628a","download_count":0,"created_at":"2026-04-13T17:41:14Z","updated_at":"2026-04-13T17:41:20Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571846","id":395571846,"node_id":"RA_kwDOEW4XoM4Xk_KG","name":"atmos_1.215.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188809378,"digest":"sha256:deb31d8a75607d8b243a5d57f558443a3a13b16c75f2d4dcb12a163da81a89a7","download_count":2607,"created_at":"2026-04-13T17:41:06Z","updated_at":"2026-04-13T17:41:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571925","id":395571925,"node_id":"RA_kwDOEW4XoM4Xk_LV","name":"atmos_1.215.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1030,"digest":"sha256:33fed2096c0c0785fa6ad1b255a6b6fbebc439feca149dbf66171cc22700f08b","download_count":92,"created_at":"2026-04-13T17:41:15Z","updated_at":"2026-04-13T17:41:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571835","id":395571835,"node_id":"RA_kwDOEW4XoM4Xk_J7","name":"atmos_1.215.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193209344,"digest":"sha256:eadefc082dff9be348ddbab504395f2e0dd8e25e3725a5bec0d0b26d2100c26a","download_count":10,"created_at":"2026-04-13T17:41:06Z","updated_at":"2026-04-13T17:41:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571850","id":395571850,"node_id":"RA_kwDOEW4XoM4Xk_KK","name":"atmos_1.215.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206834688,"digest":"sha256:b844a1188cff77b90d7282c9257c9180482320a002030fb07ccf41a35537fb2f","download_count":35,"created_at":"2026-04-13T17:41:06Z","updated_at":"2026-04-13T17:41:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395571767","id":395571767,"node_id":"RA_kwDOEW4XoM4Xk_I3","name":"atmos_1.215.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":190126592,"digest":"sha256:94e4e6156db01a7b8cc9a8d2952154ba2e4de1855686d79982ec95bff8d9dde1","download_count":3,"created_at":"2026-04-13T17:40:58Z","updated_at":"2026-04-13T17:41:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0/atmos_1.215.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0","body":"<details>\r\n  <summary>feat: add `atmos pro commit` for server-side commits via GitHub App @osterman (#2298)</summary>\r\n\r\n## what\r\n\r\n- Add new `atmos pro commit` CLI command that sends changed files to Atmos Pro, which creates commits server-side using its GitHub App installation — ensuring commits trigger CI workflows (unlike `GITHUB_TOKEN` commits)\r\n- Flexible staging control: `--add \"*.tf\"` for patterns, `--all`/`-A` for everything, or commit whatever is already staged\r\n- Built-in infinite loop prevention: automatically detects when running as `atmos-pro[bot]` and exits early\r\n- Client-side validation: path safety (`.github/` rejection, traversal prevention), file size limits (2 MiB), max 200 changed files\r\n- Reuses existing OIDC authentication flow from `pkg/pro/api_client.go`\r\n- Introduces new `atmos-pro` blog tag and retroactively tags 3 existing Atmos Pro changelog entries\r\n- Full CLI docs, blog post announcement, and roadmap entry\r\n\r\n## why\r\n\r\n- Commits made with `GITHUB_TOKEN` in GitHub Actions don't trigger subsequent workflow runs — this is a deliberate GitHub limitation that blocks autofix patterns (e.g., `terraform fmt` + commit)\r\n- Teams previously needed third-party services like autofix.ci to work around this\r\n- Atmos Pro's GitHub App can create commits that trigger CI, and this command provides the CLI interface for that capability\r\n- The workflow never receives a write token — Atmos Pro controls exactly what gets committed\r\n\r\n## references\r\n\r\n- Replaces [autofix.ci](https://autofix.ci/) for autocommit workflows\r\n- Uses existing OIDC auth from `pkg/pro/api_client.go` (`NewAtmosProAPIClientFromEnv`)\r\n- API endpoint: `POST /api/v1/git/commit`\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Added `atmos pro commit` for server-side GitHub commits with staging flags (`--message`, `--comment`, `--add`, `--all`), loop prevention, branch checks, file-size and changed-files safety limits, and stdout commit SHA.\r\n\r\n* **Documentation**\r\n  * New CLI docs, blog post, roadmap entry, and tags with usage, GitHub Actions examples, flags, and safety guidance.\r\n\r\n* **Usability**\r\n  * Improved input validation and clearer user-facing errors for commit and API failures.\r\n\r\n* **Tests**\r\n  * Added unit and integration tests for commit flow, API client, DTO JSON, and validations.\r\n\r\n* **Chores**\r\n  * CI workflow updated to run formatting fixes and invoke `pro commit`.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat: Add terraform.workspace.prefix_separator setting for hierarchical state paths @aknysh (#2313)</summary>\r\n\r\n## what\r\n\r\n- Adds a new `terraform.workspace.prefix_separator` setting in `atmos.yaml` that controls how `/` in component names is handled when Atmos auto-generates backend key prefixes\r\n- Default value `\"-\"` preserves backward compatibility (e.g. `services/consul` → `services-consul`)\r\n- Setting `prefix_separator: \"/\"` preserves directory hierarchy (e.g. `services/consul` stays `services/consul`)\r\n- Applies to all three supported backends: S3 (`workspace_key_prefix`), GCS (`prefix`), and Azure (`key` component)\r\n- Explicitly configured backend keys are never modified — the separator only affects auto-generated values\r\n\r\n## why\r\n\r\n- Teams with large component libraries (hundreds of components) organize them in directory hierarchies like `services/consul`, `platform/eks`, `data/rds`\r\n- With the default `-` separator, the state bucket becomes a flat listing of hundreds of dash-separated prefixes — making it difficult to navigate\r\n- Previously, the only workaround was setting `workspace_key_prefix` explicitly via Go templates in every component, bypassing the cleaner `metadata.name` mechanism\r\n- With `prefix_separator: \"/\"`, the state bucket mirrors the component directory structure, giving users the same hierarchy in both their source tree and their state storage\r\n- The default `\"-\"` ensures no existing configurations are affected — users opt in explicitly\r\n\r\n### Configuration\r\n\r\n```yaml\r\n# atmos.yaml\r\nterraform:\r\n  workspace:\r\n    prefix_separator: \"/\"   # Preserve directory hierarchy in state paths\r\n```\r\n\r\n### Before / After\r\n\r\n| Component | Default (`\"-\"`) | With `prefix_separator: \"/\"` |\r\n|---|---|---|\r\n| `services/consul` | `services-consul/workspace/terraform.tfstate` | `services/consul/workspace/terraform.tfstate` |\r\n| `platform/eks` | `platform-eks/workspace/terraform.tfstate` | `platform/eks/workspace/terraform.tfstate` |\r\n\r\n### Implementation\r\n\r\n- `WorkspaceConfig` struct with `PrefixSeparator` field added to the Terraform schema\r\n- `getWorkspacePrefixSeparator` helper reads the configured separator (defaults to `\"-\"`)\r\n- `applyPrefixSeparator` helper transforms component names — preserves `/` when separator is `\"/\"`, replaces otherwise\r\n- All three backend setter functions (`setS3BackendDefaults`, `setGCSBackendDefaults`, `setAzureBackendKey`) updated to use the configured separator\r\n- All changed functions at 100% test coverage\r\n\r\n### Tests\r\n\r\n- 20+ new unit tests covering all backends, both separators, `metadata.name` with slashes, `baseComponentName`, explicit config passthrough, and end-to-end flow through `processTerraformBackend`\r\n- All pre-existing backend tests continue to pass (backward compatibility verified)\r\n\r\n### Documentation\r\n\r\n- PRD: `docs/prd/terraform-workspace-key-prefix-slash-preservation.md`\r\n- Blog post: `website/blog/2026-04-11-workspace-prefix-separator.mdx`\r\n- Roadmap entry added to the `dx` initiative\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/terraform-workspace-key-prefix-slash-preservation.md` — full analysis, alternatives considered, migration guide\r\n- Blog post: `website/blog/2026-04-11-workspace-prefix-separator.mdx`\r\n- Affected code: `internal/exec/stack_processor_backend.go` — the three setter functions that auto-generate backend key prefixes\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * New configurable components.terraform.workspace.prefix_separator in atmos.yaml (default \"-\") to control Terraform backend key prefix formatting.\r\n\r\n* **Documentation**\r\n  * Added PRD, website doc, and blog post describing the setting and migration guidance; updated roadmap entry.\r\n\r\n* **Tests**\r\n  * Added unit/integration tests and updated CLI snapshots covering separator and backend-key behavior.\r\n\r\n* **Chores**\r\n  * Bumped Google Cloud client versions and updated NOTICE license references; added link-check exclusion.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat: add ATMOS_CI_COMMENTS_ENABLED env var to override ci.comments.enabled @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2300)</summary>\r\n`ci.comments.enabled` could only be controlled via `atmos.yaml`, making it impossible to disable PR/MR comments in specific workflows without maintaining separate config profiles.\r\n\r\n## Changes\r\n\r\n- **`pkg/config/utils.go`**: Parse `ATMOS_CI_COMMENTS_ENABLED` in `processEnvVars()`, overriding `atmosConfig.CI.Comments.Enabled` when set. Follows the same pattern as `ATMOS_VERSION_CHECK_ENABLED`. Invalid values emit a warning and leave the config unchanged.\r\n- **`pkg/config/utils_test.go`**: Tests covering `true`/`false`/`1`/`0` values, unset behavior (YAML value preserved), and invalid input (config unchanged in both directions).\r\n- **`website/docs/cli/configuration/ci/comments.mdx`**: Document the new env var in the config reference and a dedicated Environment Variables section.\r\n- **`website/docs/cli/configuration/ci/index.mdx`**: Add `ATMOS_CI_COMMENTS_ENABLED` to the CI environment variables table.\r\n\r\n## Usage\r\n\r\n```yaml\r\n# atmos.yaml — default enabled for most workflows\r\nci:\r\n  comments:\r\n    enabled: true\r\n```\r\n\r\n```yaml\r\n# GitHub Actions — disable comments in a specific workflow\r\n- name: Plan (no comments)\r\n  env:\r\n    ATMOS_CI_COMMENTS_ENABLED: \"false\"\r\n  run: atmos terraform plan ...\r\n```\r\n\r\nThe env var takes precedence over the YAML value when set; when unset, the YAML value is used unchanged.\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: Add ATMOS_CI_GITHUB_TOKEN for separate CI token override @osterman (#2304)</summary>\r\n\r\n## what\r\n\r\n- Added `ATMOS_CI_GITHUB_TOKEN` environment variable with highest priority in CI token resolution (`ATMOS_CI_GITHUB_TOKEN` > `GITHUB_TOKEN` > `GH_TOKEN`)\r\n- Added actionable error hints when GitHub Status API returns 404 or 403, explaining token permission requirements and suggesting `ATMOS_CI_GITHUB_TOKEN`\r\n- Switched `createCheckRun`/`updateCheckRun` error wrapping from `fmt.Errorf` to the error builder pattern to preserve hint metadata through the error chain\r\n\r\n## why\r\n\r\n- Users running Atmos in GitHub Actions with a GitHub App token (e.g., for Terraform managing GitHub repos) get 404 errors on commit status updates because the App token lacks `statuses: write` permission\r\n- The workflow's default `GITHUB_TOKEN` has the right permission via the `permissions:` block, but there was no way to use a separate token for CI operations vs Terraform\r\n- The raw 404 error gave no guidance on what went wrong or how to fix it — users with `statuses: write` in their workflow were confused why it wasn't working\r\n\r\n## references\r\n\r\n- Follows existing `ATMOS_CI_*` naming convention (`ATMOS_CI_OUTPUT`, `ATMOS_CI_SUMMARY`, `ATMOS_CI_SHA`, etc.)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Added support for a dedicated CI GitHub token (ATMOS_CI_GITHUB_TOKEN) with highest precedence over GITHUB_TOKEN and GH_TOKEN.\r\n\r\n* **Bug Fixes**\r\n  * Improved GitHub API error reporting to include actionable hints for permission/authentication failures (notably 403/404).\r\n\r\n* **Documentation**\r\n  * Published blog post and updated roadmap describing the new CI token and guidance.\r\n\r\n* **Tests**\r\n  * Expanded coverage to validate token precedence and error-hint behavior.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>docs: Fix component-level auth identity selection syntax @osterman (#2301)</summary>\r\n\r\n## what\r\n\r\n- Fixed incorrect `auth.identity: <name>` syntax in the auth documentation to use the actual supported `auth.identities.<name>.default: true` syntax\r\n- Updated both the \"Component-Level Configuration\" and \"Component-Level Identity Selection\" examples in `website/docs/stacks/auth.mdx`\r\n\r\n## why\r\n\r\n- A user reported that component-level identity selection was not working. The root cause was that the documentation showed a non-existent `auth.identity` shorthand syntax.\r\n- The `ComponentAuthConfig` struct in `pkg/schema/schema_auth.go` only supports `identities` (a map), and `hasDefaultIdentity()` in `internal/exec/terraform_nested_auth_helper.go` only checks for identities with `default: true`.\r\n- Users following the docs were writing config that was silently ignored, causing components to run under the default identity instead of the intended one.\r\n\r\n## references\r\n\r\n- Reported by a user in Slack who was trying to use component-level identity selection per https://atmos.tools/stacks/auth#component-level-identity-selection\r\n- Working example syntax confirmed via [cloudposse-examples/atmos-native-ci](https://github.com/cloudposse-examples/atmos-native-ci/blob/main/terraform/stacks/dev.yaml#L10-L14)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n* **Documentation**\r\n  * Updated authentication configuration documentation for component-level settings. The `auth` block structure has been revised to use an `identities` map instead of a single `identity` field. This enables multiple identity configurations per component, with the ability to designate one identity as the default using `default: true`.\r\n\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat: Add OAuth2 PKCE browser-based auth for AWS user/root identities @Benbentwo (#2148)</summary>\r\n\r\n## what\r\n\r\n- Implement OAuth2 PKCE browser-based authentication as a third-tier fallback for `aws/user` identity\r\n- Add interactive browser flow with local callback server and bubbletea spinner\r\n- Add non-interactive mode that displays authorization URL and prompts for manual code entry\r\n- Cache refresh tokens to XDG cache directory for 12-hour session reuse\r\n- Automatically refresh temporary credentials every 15 minutes via refresh token grant\r\n\r\n## why\r\n\r\nAWS recently introduced browser-based OAuth2 authentication for IAM users and root accounts, eliminating the need for static access keys. This implementation provides the same convenient web-based flow that SSO users already enjoy, as a fallback when YAML credentials and keychain credentials are unavailable. Refresh token support enables long-lived 12-hour sessions without requiring browser reopening.\r\n\r\n## references\r\n\r\n- Closes ATMOS-162\r\n- Related: AWS blog post on simplified developer access https://aws.amazon.com/blogs/security/simplified-developer-access-to-aws-with-aws-login/\r\n- PRD: `docs/prd/aws-browser-auth.md`\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Browser-based AWS sign-in fallback (OAuth2 PKCE) enabled by default: automatic browser open with spinner, plain-URL/manual stdin fallback, refresh-token caching (12h), periodic credential refresh, and persisted AWS config/credentials.\r\n\r\n* **Bug Fixes**\r\n  * Clearer user-facing error paths and improved debug logging during webflow and credential resolution failures.\r\n\r\n* **Tests**\r\n  * Extensive test coverage for PKCE, callback/server behavior, token exchange/refresh, caching, UI flows, and error scenarios.\r\n\r\n* **Documentation**\r\n  * Blog post, docs, and roadmap updated; new config option to disable the browser fallback.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat: Add GitHub Actions format to atmos auth env @osterman (#1984)</summary>\r\n\r\n## what\r\n\r\n- Added `--format=github` option to `atmos auth env` command\r\n- Added `--output` flag for explicit file output (appends mode)\r\n- Automatically detects `$GITHUB_ENV` environment variable when using github format\r\n- Supports single-line values as `KEY=value` and multiline values with heredoc syntax\r\n\r\n## why\r\n\r\nThis eliminates the need for complex shell pipelines like `atmos auth env ... | grep \"^export \" | sed 's/^export //' >> $GITHUB_ENV`. Users can now directly output to GitHub Actions `$GITHUB_ENV` file with proper formatting and multiline value handling.\r\n\r\n## references\r\n\r\nCloses issue related to GitHub Actions integration workflow simplification.\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * GitHub Actions format for `atmos auth env`: Export credentials directly to $GITHUB_ENV with `--format=github`\r\n  * New `--output-file` flag to redirect output to a file\r\n  * Automatic $GITHUB_ENV detection when using GitHub format without explicit output file specification\r\n\r\n* **Documentation**\r\n  * Updated CLI help and documentation to reflect new format and flag options\r\n  * Added blog post about GitHub Actions format integration\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>Add environment specification for Homebrew bump action @goruha (#2289)</summary>\r\n\r\n## what\r\n* Add environment specification for Homebrew bump action\r\n\r\n## why\r\n* Reduce secrets visibility \r\n\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n* **Chores**\r\n  * Updated release infrastructure configuration for deployment automation.\r\n\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat: AWS Security & Compliance — finding-to-code mapping with AI remediation @aknysh (#2282)</summary>\r\n\r\n## what\r\n\r\n- Add `atmos aws security analyze` — fetch security findings from AWS Security Hub, map them to Atmos components and stacks via resource tags, and generate structured remediation reports\r\n- Add `atmos aws compliance report` — generate compliance posture reports against industry frameworks (CIS AWS, PCI-DSS, SOC2, HIPAA, NIST) with pass/fail scoring\r\n- Add finding-to-code mapping pipeline with 7 strategies: `finding-tag` (exact), `tag-api` (exact), `context-tags` (high), `account-map` (low), `ecr-repo` (low), `naming-convention` (low), `resource-type` (low)\r\n- Add optional AI-powered remediation via `--ai` flag — multi-turn tool analysis reads component source and stack config, generates root cause analysis, specific code changes, stack YAML changes, deploy commands, risk assessment\r\n- Add AI finding deduplication (same title+component+stack analyzed once) and retry with exponential backoff for transient API errors\r\n- Add 4 output formats: Markdown (terminal), JSON (CI/CD), YAML, CSV\r\n- Add Atmos Auth integration via `identity` config field for targeting Security Hub delegated admin accounts\r\n- Add `--stack`, `--component`, `--severity`, `--source`, `--framework`, `--format`, `--file`, `--max-findings`, `--no-group`, `--region`, `--identity` flags\r\n- Add AI tools: `atmos_list_findings`, `atmos_describe_finding`, `atmos_analyze_finding`, `atmos_compliance_report`\r\n- Add example: `examples/aws-security-compliance/`\r\n- Add Docusaurus docs for all commands and configuration\r\n- Add blog post with production testing results\r\n\r\n## why\r\n\r\nReviewing AWS security findings today requires navigating multiple AWS console pages, cross-referencing resources with Terraform code, and manually figuring out which configuration caused the issue. This is slow, error-prone, and requires deep AWS + Terraform expertise.\r\n\r\nAtmos owns the component-to-stack relationship, so it can trace a security finding on an AWS resource all the way back to the exact Terraform code and stack configuration that created it — and generate a targeted fix.\r\n\r\nThe key differentiator vs AWS MCP security servers: MCP servers return raw findings but have no concept of Atmos stacks, components, or Terraform source code. Our implementation maps findings to IaC and generates specific remediation with deploy commands.\r\n\r\n## See It in Action\r\n\r\nTested against a multi-account AWS organization (11 accounts, Security Hub delegated admin, 500 findings, **97.2% mapped** to Atmos components).\r\n\r\n### 1. Security findings mapped to components\r\n\r\n```\r\n$ atmos aws security analyze --stack plat-use2-dev --component rds/example\r\n\r\nℹ Fetching security findings...\r\nℹ Mapping 500 findings to Atmos components...\r\nℹ Filtered to 4 findings matching stack=\"plat-use2-dev\" component=\"rds/example\"\r\n\r\n# Security Report: plat-use2-dev / rds/example\r\n\r\nFindings: 4 (1 CRITICAL, 3 HIGH)\r\n\r\n## CRITICAL Findings (1)\r\n\r\n### 1. Security groups should not allow unrestricted access to ports with high risk\r\n\r\n| Field          | Value                                                        |\r\n|----------------|--------------------------------------------------------------|\r\n| **Severity**   | CRITICAL                                                     |\r\n| **Source**     | security-hub (aws-foundational-security-best-practices/1.0)  |\r\n| **Resource**   | arn:aws:ec2:us-east-2:***:security-group/sg-***              |\r\n| **Component**  | rds/example                                                  |\r\n| **Stack**      | plat-use2-dev                                                |\r\n| **Confidence** | exact                                                        |\r\n| **Mapped By**  | finding-tag                                                  |\r\n\r\nResource Tags:\r\n• atmos_stack = plat-use2-dev\r\n• atmos_component = rds/example\r\n• terraform_component = rds\r\n• Name = acme-plat-use2-dev-example-postgres-db\r\n• Namespace = acme, Tenant = plat, Environment = use2, Stage = dev\r\n\r\n## Summary\r\n| Severity  | Count | Mapped | Unmapped |\r\n|-----------|-------|--------|----------|\r\n| CRITICAL  | 1     | 1      | 0        |\r\n| HIGH      | 3     | 3      | 0        |\r\n| **Total** | **4** | **4**  | **0**    |\r\n```\r\n\r\n### 2. AI-powered remediation (`--ai`)\r\n\r\n```\r\n$ atmos aws security analyze --stack plat-use2-dev --component rds/example --ai\r\n\r\nℹ Analyzing findings with AI...\r\n\r\n✓ AI analysis complete — Security Analysis: rds/example in plat-use2-dev\r\n\r\n## Findings Breakdown\r\n\r\n### EC2.18: Unrestricted Ingress on Unauthorized Port (HIGH)\r\nPort 5432 (PostgreSQL) is open to 0.0.0.0/0. The likely cause is\r\nallowed_cidr_blocks being set to an overly permissive value.\r\n\r\n### EC2.13: Unrestricted Ingress on Port 22/SSH (HIGH)\r\n⚠️ Port 22 has no business being on an RDS security group. This strongly\r\nsuggests an out-of-band manual change in the AWS Console — drift from IaC.\r\n\r\n## Root Cause (Common Thread)\r\nBoth findings stem from var.allowed_cidr_blocks being set too permissively,\r\ncompounded by possible out-of-band drift.\r\n\r\n## Priority Actions\r\n1. Remove the port-22 inbound rule manually (out-of-band drift)\r\n2. Update catalog/rds/example.yaml:\r\n     allowed_cidr_blocks: []\r\n     publicly_accessible: false\r\n     use_private_subnets: true\r\n3. Add Terraform validation guards:\r\n     validation {\r\n       condition     = !contains(var.allowed_cidr_blocks, \"0.0.0.0/0\")\r\n       error_message = \"allowed_cidr_blocks must not contain 0.0.0.0/0.\"\r\n     }\r\n4. Plan and apply:\r\n     atmos terraform plan rds/example -s plat-use2-dev\r\n     atmos terraform apply rds/example -s plat-use2-dev\r\n\r\n## Risk Assessment\r\n| Finding              | Risk   | Note                                       |\r\n|----------------------|--------|--------------------------------------------|\r\n| EC2.18 (port 5432)   | Medium | Removing rule breaks direct DB connections |\r\n| EC2.13 (port 22/SSH) | Low    | No RDS traffic should depend on SSH        |\r\n```\r\n\r\n### 3. Compliance report\r\n\r\n```\r\n$ atmos aws compliance report\r\n\r\n# Compliance Report: CIS AWS Foundations Benchmark\r\n\r\n## Score: 35/42 Controls Passing (83%)\r\n\r\n### Failing Controls\r\n| Control      | Title                                                                 | Severity |\r\n|--------------|-----------------------------------------------------------------------|----------|\r\n| Config.1     | AWS Config should be enabled with service-linked role                 | CRITICAL |\r\n| EC2.14       | Security groups should not allow ingress from 0.0.0.0/0 to port 3389  | HIGH     |\r\n| EC2.13       | Security groups should not allow ingress from 0.0.0.0/0 to port 22    | HIGH     |\r\n| S3.1         | S3 buckets should have block public access settings enabled           | MEDIUM   |\r\n| EC2.6        | VPC flow logging should be enabled in all VPCs                        | MEDIUM   |\r\n| IAM.17       | Ensure IAM password policy expires passwords within 90 days           | LOW      |\r\n| CloudTrail.7 | Ensure S3 access logging on CloudTrail S3 bucket                      | LOW      |\r\n```\r\n\r\n### 4. Compliance report with AI (`--ai`)\r\n\r\n```\r\n$ atmos aws compliance report --ai\r\n\r\n✓ AI analysis complete — CIS Foundations Benchmark\r\n\r\n## Overall Status: 🟡 83% Compliant (35/42 controls passing)\r\n\r\n## 🚨 Priority Issues (Fix First)\r\n\r\n### CRITICAL\r\n| Control  | Issue                                  | Action                             |\r\n|----------|----------------------------------------|------------------------------------|\r\n| Config.1 | AWS Config not enabled or missing role | Enable in all regions, attach role |\r\n\r\n### HIGH\r\n| Control | Issue                              | Action                                  |\r\n|---------|------------------------------------|-----------------------------------------|\r\n| EC2.14  | RDP (port 3389) open to 0.0.0.0/0 | Restrict to known IP ranges or VPN       |\r\n| EC2.13  | SSH (port 22) open to 0.0.0.0/0   | Use SSM Session Manager instead of SSH   |\r\n\r\n## 🟠 Medium: S3.1 (Block Public Access), EC2.6 (VPC Flow Logs)\r\n## 🟢 Low: IAM.17 (Password policy), CloudTrail.7 (S3 access logging)\r\n\r\n## Next Steps\r\n1. Lock down security groups for ports 22/3389\r\n2. Enable AWS Config — also detects future drift\r\n3. Run `atmos terraform apply` on security-groups, vpc, config components\r\n4. Re-run this report to verify score improves\r\n```\r\n\r\n## New CLI Commands\r\n\r\n### `atmos aws security analyze`\r\n\r\nFetches findings from Security Hub, maps them to Atmos components via resource tags (7 mapping strategies with confidence levels), and renders reports in 4 formats. Post-mapping `--stack` and `--component` filters narrow results after mapping. With `--ai`, the AI reads component source code and stack config via multi-turn tools to generate specific remediation.\r\n\r\n### `atmos aws compliance report`\r\n\r\nQueries Security Hub enabled standards, counts total controls via `ListSecurityControlDefinitions`, and computes pass/fail scores. Supports `--framework` filter for CIS AWS, PCI-DSS, SOC2, HIPAA, NIST. With `--ai`, generates prioritized remediation for each failing control.\r\n\r\n### Configuration\r\n\r\n```yaml\r\naws:\r\n  security:\r\n    enabled: true\r\n    identity: \"security-readonly\"  # Atmos Auth → Security Hub account\r\n    region: \"us-east-2\"            # Aggregation region\r\n    max_findings: 500\r\n    tag_mapping:\r\n      stack_tag: \"atmos:stack\"\r\n      component_tag: \"atmos:component\"\r\n```\r\n\r\n### Example\r\n\r\nSee [`examples/aws-security-compliance/`](https://github.com/cloudposse/atmos/tree/aknysh/atmos-ai-auth-compliance-1/examples/aws-security-compliance) for a complete configuration with auth, tag mapping, AI provider, and all commands.\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/atmos-aws-security-compliance.md`\r\n- Blog: `website/blog/2026-04-03-aws-security-compliance.mdx`\r\n- Example: `examples/aws-security-compliance/`\r\n- Docs: `website/docs/cli/commands/aws/security/`, `website/docs/cli/commands/aws/compliance/`\r\n- Config: `website/docs/cli/configuration/aws/security.mdx`\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n# Release Notes\r\n\r\n* **New Features**\r\n  * AWS Security Hub integration with automatic mapping of findings to Atmos components and stacks\r\n  * Compliance reporting with support for CIS-AWS, PCI-DSS, SOC2, HIPAA, and NIST frameworks\r\n  * AI-powered remediation analysis using `--ai` flag for structured guidance\r\n  * Multiple output formats (Markdown, JSON, YAML, CSV) for security and compliance reports\r\n  * Configuration schema for AWS security settings, tag mapping, and frameworks\r\n\r\n* **Documentation**\r\n  * Added comprehensive guides for `atmos aws security analyze` and `atmos aws compliance report` commands\r\n  * Added AWS configuration documentation for security settings and tag-based component mapping\r\n  * Added blog post and examples demonstrating end-to-end AWS security workflows\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n\r\n## 🚀 Enhancements\r\n\r\n<details>\r\n  <summary>fix: Custom command sharing name with experimental built-in no longer triggers warning @aknysh (#2319)</summary>\r\n\r\n## what\r\n\r\n- Fixed experimental command detection to only match top-level built-in commands, not custom commands that share the same name\r\n- Added `isTopLevelCommand()` helper to verify a command is a direct child of the root command\r\n- Updated `findExperimentalParent()` to require both a registry match **and** top-level position\r\n\r\n## why\r\n\r\n- A user-defined custom command `atmos utils ai` was incorrectly triggering the experimental warning for the built-in `atmos ai` command\r\n- The detection logic in `findExperimentalParent()` walked the command tree and checked `IsCommandExperimental(c.Name())`, which matches on bare name only — so any nested command node named `ai` matched the registered built-in `ai` provider\r\n- The fix ensures registry-based experimental detection only fires when the command is a direct child of root (parent's parent is nil), distinguishing `atmos ai` from `atmos utils ai`\r\n\r\n## references\r\n\r\n- Closes #2315\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Improved experimental command detection so only top-level experimental commands are treated as experimental. This prevents custom or nested commands with the same name from being misclassified, ensuring experimental labels and related behavior appear only for the intended root-level commands.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: Return upload errors instead of silently swallowing them @osterman (#2316)</summary>\r\n\r\n## what\r\n\r\n- `describe affected --upload` and `list instances --upload` now return errors instead of silently swallowing them when the Atmos Pro API client cannot be created or the upload fails\r\n- `describe affected --upload` returns actionable hints guiding users to set `ATMOS_PRO_TOKEN` or `ATMOS_PRO_WORKSPACE_ID`\r\n- All Atmos Pro API requests now include a `User-Agent` header (`atmos/<version> (<os>; <arch>)`) instead of the Go default `Go-http-client/1.1`\r\n\r\n## why\r\n\r\n- Upload failures (misconfigured credentials, wrong workspace ID, server-side access denied) were invisible — the CLI logged a warning but returned success, making it impossible to diagnose issues like \"workspace does not have access to repository\"\r\n- The missing `User-Agent` header made it difficult to identify Atmos CLI traffic in server logs\r\n\r\n## references\r\n\r\n- Server-side error observed: `Workspace does not have access to repository` was logged server-side but never surfaced to the CLI user\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Upload failures now propagate and halt commands instead of being silently skipped.\r\n  * Pro API client creation now returns descriptive errors with authentication/workspace hints.\r\n\r\n* **New Features**\r\n  * Pro API requests include User-Agent headers with version and system info.\r\n\r\n* **Documentation**\r\n  * Added \"Atmos Pro\" doc with setup, OIDC guidance, CLI usage, env vars, and troubleshooting; added to CLI sidebar and navbar.\r\n\r\n* **Tests**\r\n  * Added/updated tests to enforce explicit API client/auth failure handling.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: CI job summary shows NO_CHANGE badge for output-only Terraform changes @osterman (#2306)</summary>\r\n\r\n## what\r\n\r\n- When Terraform plan detects only output changes (exit code 2), the CI job summary now correctly distinguishes this from \"no changes\" and \"resource changes\"\r\n- Added a new blue `OUTPUT_CHANGE` badge for output-only plans/applies, distinct from the gray `NO_CHANGE` badge and the resource-level `CREATE`/`CHANGE`/`REPLACE`/`DESTROY` badges\r\n- Template headings now differentiate: \"Resource Changes Found\" vs \"Output Changes Found\" vs \"No Changes\"\r\n- Plan detail summary shows \"Output values will change. No infrastructure changes.\" for output-only changes\r\n\r\n## why\r\n\r\n- Terraform exits with code 2 when there are changes, including output-only changes (no infrastructure modifications). The existing `HasChanges()` method only checked resource counts, so output-only changes were incorrectly reported as \"NO_CHANGE\" in CI job summaries. This was misleading because Terraform considers these real changes that need to be applied.\r\n- Making the distinction between resource changes and output-only changes explicit helps CI users understand at a glance whether infrastructure will be modified or just state outputs will be updated.\r\n\r\n## references\r\n\r\n- Terraform plan exit codes: 0 = no changes, 1 = error, 2 = changes detected (includes output-only changes)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Detect and report Terraform output-only changes with distinct \"Output Changes Found\" / \"Output Changes Applied\" messaging.\r\n\r\n* **Improvements**\r\n  * Separate resource vs output-only summaries, badges, and details for clearer plan/apply results.\r\n  * Revised workspace handling to prefer selection before creation and improved handling of missing state files on Windows.\r\n  * Added utilities to clear Terraform caches to reduce stale-state issues.\r\n\r\n* **Tests**\r\n  * Added/expanded tests for output-only detection, summaries, workspace behaviors, and cache isolation.\r\n\r\n* **Documentation**\r\n  * Updated templates and fixtures to reflect new messaging.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: Replace symlink strategy with plain directory for SAML browser storage @aknysh (#2312)</summary>\r\n\r\n## what\r\n\r\n- Fixes SAML browser storage state failing to save on Windows — the directory at `~/.aws/saml2aws/` was missing because the previous symlink-based strategy requires privileges most Windows users don't have\r\n- Replaces the symlink-based storage directory strategy with plain directory creation on all platforms — no special privileges required\r\n- Handles legacy symlink migration: detects and removes stale symlinks from previous Atmos versions, preserving any existing `storageState.json` from the symlink target\r\n- Removes ~70 lines of dead symlink code (symlink creation, staging, restore, validation)\r\n- Adds comprehensive cross-platform tests for the new directory-based storage strategy and legacy migration\r\n- Adds fix doc with full end-to-end auth flow analysis explaining the two independent storage systems (AWS credentials vs Playwright browser session state)\r\n\r\n## why\r\n\r\n- **Root cause:** the previous symlink strategy created `~/.aws/saml2aws` as a symlink to an XDG cache directory. On Windows, `os.Symlink` requires Developer Mode or admin privileges — without these, the symlink creation failed silently and the directory was simply absent. The upstream saml2aws library then failed to write `storageState.json` because the parent directory did not exist (\"The system cannot find the path specified\")\r\n- **Impact is browser session reuse only:** `storageState.json` contains Playwright browser session data (cookies for re-authentication). It is NOT part of the AWS credential pipeline — credentials are stored separately in INI files under `~/.config/atmos/aws/{provider}/credentials` using `filepath.Join` (correct on all platforms). Without the fix, users must re-authenticate in the browser every time instead of reusing a saved session\r\n- **The fix creates a plain directory** at the path saml2aws expects using `os.MkdirAll` with `filepath.Join` — works on all platforms, no special privileges required. Legacy symlinks from previous versions are detected and migrated (preserving existing session state)\r\n- **Upstream bug:** saml2aws also constructs the storage path using `fmt.Sprintf` with hardcoded forward slashes instead of `filepath.Join`, producing mixed separators on Windows. Go's `os` package normalizes these internally, so once the directory exists the path resolves correctly\r\n\r\n## references\r\n\r\n- Fix doc: `docs/fixes/2026-04-10-auth-windows-path-issues.md` (full root-cause analysis, auth flow trace, impact assessment)\r\n- Upstream bug: `github.com/versent/saml2aws/v2/pkg/provider/browser/browser.go:118` — uses `fmt.Sprintf` with hardcoded forward slashes instead of `filepath.Join`\r\n- Related: `saml-driver-install` branch / PR #1747 — the branch where the symlink strategy was originally implemented\r\n- Related: `docs/prd/saml-browser-driver-integration.md` — SAML browser driver integration PRD\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Fixed Windows failures saving browser session state during SAML authentication by ensuring a real, platform-correct storage directory and automatic migration of existing setups.\r\n  * Improved cross-platform robustness and preserved existing session state where present.\r\n\r\n* **Documentation**\r\n  * Added a detailed guide describing the issue, root cause, and migration strategy.\r\n\r\n* **Tests**\r\n  * Added cross-platform tests verifying idempotent directory creation, state preservation, and migration behavior.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: Enable automatic Playwright browser driver download for SAML authentication @osterman (#1747)</summary>\r\n\r\n## what\r\n\r\nFixes SAML authentication failing with \"please install the driver (v1.47.2) and browsers first\" error when `download_browser_driver: true` is configured.\r\n\r\n## why\r\n\r\nRoot cause: The `DownloadBrowser` flag was set on saml2aws `IDPAccount` config but NOT on `LoginDetails`, which is what saml2aws actually checks when deciding whether to download drivers.\r\n\r\nAdditionally, the code was using incorrect Playwright cache directory paths (`ms-playwright-go` instead of `ms-playwright`), causing driver detection to fail.\r\n\r\n## Changes\r\n\r\n### Code Changes\r\n- **Set `LoginDetails.DownloadBrowser`** in `createLoginDetails()` to match `shouldDownloadBrowser()` logic\r\n- **Corrected Playwright cache directory paths** from `ms-playwright-go` to `ms-playwright` (actual playwright-go location)\r\n- **Enhanced driver detection** to verify actual browser binaries exist (not just empty version directories)\r\n\r\n### Testing\r\n- Added comprehensive integration test that downloads real Chromium drivers (~140 MB) and validates installation\r\n- Unit tests verify `LoginDetails.DownloadBrowser` is set correctly across all scenarios\r\n- Driver detection tests verify empty directories don't register as valid installations\r\n\r\n### Documentation\r\n- Removed broken manual installation command (`go run playwright install`)\r\n- Added warning about manual installation requiring advanced knowledge of playwright-go internals\r\n- Clarified cache directory locations and why PATH is not required\r\n- Emphasized `download_browser_driver: true` as the recommended approach\r\n\r\n## references\r\n\r\n- Fixes the issue where SAML authentication with `download_browser_driver: true` still fails\r\n- Related to playwright-go embedded library behavior vs standalone playwright CLI tool\r\n- Playwright cache locations: https://playwright.dev/docs/browsers#managing-browser-binaries\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Opt-in automatic Playwright browser driver downloads for AWS SAML auth (download_browser_driver); new browser_type and browser_executable_path config options; improved cross-platform driver detection, XDG-compliant storage with symlink handling; Logrus routed into Atmos logging; new sentinel error for invalid browser executables.\r\n\r\n* **Documentation**\r\n  * Expanded guides for auto-download workflow, custom browser config, platform cache paths, examples, and heavy integration test instructions.\r\n\r\n* **Tests**\r\n  * Added unit and integration tests covering driver detection, download/install flow, storage/symlink behavior, and logging adapter; CI gate to enable integrations.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: Ensure terraform plan-diff processes yaml and skips init properly @jhoward-rula (#2305)</summary>\r\n\r\n## what\r\n\r\n- Fixes a bug where `atmos terraform plan-diff` would not properly process templates, functions, or respect the `--skip-init` flag.\r\n- **Issue #2258**\r\n\r\n## why\r\n\r\n- **Issue #2258**\r\n\r\n## references\r\n\r\n* closes #2258\r\n\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * The `plan-diff` command now accepts additional configuration options for controlling Terraform template processing, function execution, and initialization behavior during plan operations.\r\n\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: Atmos Auth stack-level default identity resolution @aknysh (#2303)</summary>\r\n\r\n## what\r\n\r\n- Fixes three related bugs in Atmos Auth identity resolution without breaking any existing auth functionality.\r\n- **Issue #2293**: Teaches the stack auth scanner to follow `import:` chains recursively, so `auth.identities.<name>.default: true` declared in an imported `_defaults.yaml` is visible to every command — including multi-stack commands like `describe stacks` / `describe affected` / `list affected`.\r\n- **Discussion https://github.com/orgs/cloudposse/discussions/122%7C#122**: Splits the `pkg/auth` entry points into a NO-SCAN variant (for commands with a stack-scoped merged auth config) and a SCAN variant (for multi-stack commands). The split makes the cross-stack default-identity leak structurally impossible for terraform/helmfile/describe-component flows.\r\n- **Issue 3 (component-level default override)**: When a component declares its own `auth.identities.<name>.default: true` and the global `atmos.yaml` also has a different default, the component-level default now wins cleanly instead of producing \"multiple default identities\" prompts.\r\n- Keeps every previous auth fix intact, including the Approach 1 / Approach 2 design, the `allAgree` conflict-detection, the describe-affected AuthManager threading, and the MCP scoped-auth env-override flow.\r\n- Adds two scenario fixtures (using mock AWS identities for CI), three CLI regression test cases, and extensive unit tests covering every new code path.\r\n\r\n## why\r\n\r\n- **Issue #2293 — imported defaults invisible**: when `auth.identities.<name>.default: true` was declared in an imported `_defaults.yaml` (especially one listed under `stacks.excluded_paths`, which is the common reference-architecture layout), the pre-scanner never saw it. Users hit \"No default identity configured\" on commands that should have auto-authenticated. The exec-layer merge path already handled this correctly for terraform/helmfile/describe-component, but multi-stack commands (`describe stacks`, `describe affected`, `list affected`, workflows, `aws security`/`compliance`, MCP scoped auth) all failed.\r\n- **Discussion https://github.com/orgs/cloudposse/discussions/122%7C#122 — single stack default leaks globally**: when a single stack manifest declared `default: true`, that identity silently propagated to every other stack across all tenants. Running `atmos terraform plan eks -s plat-staging` would pick up the `data-staging` default declared in an unrelated stack file. Reported to reproduce against Atmos 1.210, 1.211, and 1.213.\r\n- **Issue 3 — component-level default doesn't override global**: when a component in a stack config declares a different identity as `default: true` than the global `atmos.yaml` default, both defaults survived the exec-layer deep merge in `MergeComponentAuthConfig`. Users were prompted to choose between multiple defaults (interactive) or got errors (CI). This broke the expected Atmos inheritance semantics where more-specific config overrides more-general.\r\n- **No regressions allowed**: an earlier draft removed the pre-scanner entirely. That fixed Issues 1 and 2 for `terraform *` but regressed `describe stacks`, `describe affected`, `list affected`, `list instances`, `aws security`, `aws compliance`, and workflow execution — all of which were documented in `docs/fixes/stack-level-default-auth-identity.md` as intentionally using the pre-scanner (Approach 2). This PR preserves that Approach 2 code path while fixing all three bugs, so no existing user-visible functionality is removed.\r\n\r\n## references\r\n\r\n- closes #2293\r\n- design doc: `docs/fixes/2026-04-08-atmos-auth-identity-resolution-fixes.md` (full caller audit, rejected alternatives, coverage matrix)\r\n- related: `docs/fixes/stack-level-default-auth-identity.md` (Approach 1 / Approach 2 design this PR preserves and extends)\r\n- related: `docs/fixes/2026-02-12-auth-realm-isolation-issues.md` (Issue #2072 `allAgree` conflict-detection preserved unchanged)\r\n- related: `docs/fixes/2026-03-25-describe-affected-auth-identity-not-used.md` (AuthManager threading through describe/list-affected preserved unchanged)\r\n- related: `docs/fixes/2026-04-06-mcp-server-env-not-applied-to-auth-setup.md` (MCP scoped-auth flow now routes through the scan variant)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Identity resolution now discovers defaults from imported stack files, prevents defaults leaking across stacks/commands, and ensures component-level defaults override global defaults.\r\n* **Refactor**\r\n  * Split auth manager flow into SCAN vs NO-SCAN paths and switched relevant commands to the SCAN variant for multi-stack/no-target contexts.\r\n* **Documentation**\r\n  * Added a detailed guide describing the identity-resolution fixes and routing.\r\n* **Tests**\r\n  * Added extensive unit, integration and CLI regression tests plus fixtures covering import-following, isolation, conflicts, and non-leakage.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: MCP server env block not applied to auth setup; consolidate env primitives in pkg/env and pkg/auth @aknysh (#2291)</summary>\r\n\r\n## what\r\n\r\n- **Bug fix:** External MCP servers configured with both `identity:` and an `env:` block containing `ATMOS_*` variables (e.g. `ATMOS_PROFILE`, `ATMOS_CLI_CONFIG_PATH`, `ATMOS_BASE_PATH`) failed auth setup with `identity not found`. The parent's auth manager was built once from `os.Environ()` and never saw the server's `env:` block.\r\n- **Architectural cleanup driven by review feedback:**\r\n  - New foundational primitive `env.SetWithRestore` in `pkg/env` (atmos already has a dedicated env package; four other local save/set/restore variants exist and should consolidate to this in a follow-up).\r\n  - New high-level primitive `auth.CreateAndAuthenticateManagerWithEnvOverrides` in `pkg/auth` that delegates env mutation to `pkg/env` and composes `cfg.InitCliConfig` + `auth.CreateAndAuthenticateManagerWithAtmosConfig`.\r\n  - Thin MCP-specific adapter `mcpclient.ScopedAuthProvider` (~85 lines) that implements a new `PerServerAuthProvider` interface so `WithAuthManager` dispatches per-server.\r\n  - **Canonical Atmos env-var namespace constants** (`AtmosEnvVarNamespace`, `AtmosEnvVarPrefix`) added to `pkg/config/const.go` with build-time invariant tests. Migrated five hardcoded `\\\"ATMOS\\\"` / `\\\"ATMOS_\\\"` literals scattered across `cmd/root.go`, `cmd/auth_validate.go`, `pkg/auth`, and `pkg/ai/agent/codexcli` to use them.\r\n- **Result for users:** any external MCP server can now define `ATMOS_PROFILE` (or any other `ATMOS_*` variable) in its `env:` block and have it influence identity resolution — including configurations that run `atmos mcp start` itself as an external MCP server (the original report).\r\n\r\n## why\r\n\r\n- The auth manager was being constructed once at command startup using the parent's `os.Environ()`. Server `env:` blocks were only applied to the spawned subprocess via `cmd.Env`, so the parent's identity lookup ran against the *default* profile and never saw `ATMOS_PROFILE: managers` (or any other override). The user's only workaround was exporting the variable in the shell before running atmos.\r\n- The bug surfaces most visibly when a user configures `atmos mcp start` itself as an external MCP server (the original report), but it affects **any** external MCP server with both `identity:` and `env: ATMOS_*: ...`.\r\n- The fix lives entirely on the client side. The Atmos MCP server (`cmd/mcp/server`) was already correct: when spawned as a subprocess it inherits the merged env (`os.Environ()` + `env:` block) and `cfg.InitCliConfig` reads `ATMOS_*` from there.\r\n- **Why the architectural cleanup:** review feedback flagged that (a) putting per-command auth factories in `cmd/` is a slippery slope, (b) `pkg/auth` shouldn't re-implement env mutation when `pkg/env` already exists, and (c) defining what counts as an Atmos env variable inside any specific subsystem is the wrong layering. Each round of feedback pushed the primitives down to where they belong, and the result is significantly less code with cleaner layering.\r\n\r\n## layering after this PR\r\n\r\n\\`\\`\\`\r\npkg/config       ← AtmosEnvVarNamespace / AtmosEnvVarPrefix (single source of truth)\r\npkg/env          ← SetWithRestore (foundational env primitive, no policy)\r\n  ↑\r\npkg/auth         ← CreateAndAuthenticateManagerWithEnvOverrides (composes pkg/env + cfg.InitCliConfig + auth)\r\n  ↑\r\npkg/mcp/client   ← ScopedAuthProvider (thin MCP adapter, ~85 lines)\r\n  ↑\r\ncmd/mcp/client,  ← one-line consumers, zero auth-factory code\r\ncmd/ai\r\n\\`\\`\\`\r\n\r\n## test coverage\r\n\r\n100% on every new function:\r\n- \\`pkg/env/restore.go\\` → \\`SetWithRestore\\` (incl. setenv-error branch via injectable hook)\r\n- \\`pkg/auth/manager_env_overrides.go\\` → \\`CreateAndAuthenticateManagerWithEnvOverrides\\` (incl. env-hook error branch via injectable hook), \\`filterAtmosOverrides\\` (table-driven)\r\n- \\`pkg/mcp/client/scoped_auth.go\\` → \\`NewScopedAuthProvider\\`, \\`ForServer\\`, \\`PrepareShellEnvironment\\`\r\n- \\`pkg/mcp/client/session.go\\` → \\`WithAuthManager\\` (incl. per-server dispatch branch)\r\n- \\`cmd/mcp/client/start_options.go\\` → \\`buildAuthOption\\`, \\`mcpServersNeedAuth\\`\r\n- \\`cmd/ai/init.go\\` → \\`resolveAuthProvider\\`\r\n- \\`pkg/config/const_test.go\\` → invariant tests for the canonical constants\r\n\r\n## references\r\n\r\n- closes #2283\r\n- See \\`docs/fixes/2026-04-06-mcp-server-env-not-applied-to-auth-setup.md\\` for full root-cause analysis, the fixed flow diagram, the test plan, and a follow-up consolidation note for the four pre-existing local save/restore env helpers (\\`internal/exec.setEnvVarsWithRestore\\`, \\`pkg/auth/cloud/gcp.PreserveEnvironment/RestoreEnvironment\\`, \\`pkg/telemetry.PreserveCIEnvVars/RestoreCIEnvVars\\`, \\`pkg/auth/identities/aws.setupAWSEnv\\`) that should migrate to \\`env.SetWithRestore\\` in a separate PR.\r\n- Related: \\`docs/fixes/2026-03-25-describe-affected-auth-identity-not-used.md\\` (another auth-context propagation fix in a different code path).\r\n- Related PRD: \\`docs/prd/atmos-mcp-integrations.md\\` (overall MCP client architecture).\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Per-server authentication scoping for MCP so each server can use its own ATMOS env during auth.\r\n  * Canonical ATMOS env namespace/prefix and safer env-override handling during auth setup.\r\n\r\n* **Bug Fixes**\r\n  * MCP server ATMOS env values are now applied during authentication setup.\r\n  * Clearer error mapping when per-server auth is unavailable.\r\n\r\n* **Documentation**\r\n  * Added doc describing the auth env propagation fix and behavior.\r\n\r\n* **Tests**\r\n  * Extensive unit tests for per-server auth, env overrides/restoration, and related flows.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: suppress JSON output for describe affected --upload @osterman (#2284)</summary>\r\n\r\n## what\r\n\r\n- When `--upload` is used with `atmos describe affected`, the full affected stacks JSON is no longer dumped to the console by default\r\n- Pass `--verbose` to see the JSON output, or `--file` to write it to a file\r\n- The upload success message now includes a count of affected components (e.g. \"Uploaded 12 affected component(s) to Atmos Pro\")\r\n\r\n## why\r\n\r\n- The affected stacks JSON payload can be very large and overwhelms the console when the primary intent is just to upload\r\n- Users who need the output can opt in with `--verbose` or `--file`\r\n- The summary count provides useful feedback without the noise\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Suppressed the large \"Affected components and stacks\" console output during uploads unless verbose mode or file output is requested.\r\n  * Improved the upload success message to include the number of affected components uploaded.\r\n\r\n* **Tests**\r\n  * Added unit tests covering upload/output behavior and CI event handling to validate verbose, file-output, and upload scenarios.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: provenance and syntax highlighting respect --no-color and pipe detection @osterman (#2281)</summary>\r\n\r\n## what\r\n\r\n- Provenance output (`describe component --provenance`) now strips ANSI color codes when stdout is piped or redirected, and respects `--no-color`\r\n- Syntax highlighting via `HighlightCodeWithConfig` also properly degrades when stdout is piped\r\n- Provenance output now routes through `data.Write()` instead of `fmt.Print()` for proper I/O channel handling\r\n\r\n## why\r\n\r\n- Provenance rendering used `lipgloss.NewStyle()` unconditionally without checking stdout TTY status, so ANSI escape codes leaked into piped/redirected output\r\n- `HighlightCodeWithConfig` checked `IsTTYSupportForStdout() || IsTTYSupportForStderr()` — since stderr remains a TTY when piping stdout, this always returned true and defeated pipe detection\r\n- `fmt.Print()` bypassed the data channel I/O layer, skipping secret masking\r\n\r\n## references\r\n\r\n- Follows the same stdout-only TTY check pattern used by list commands (`pkg/list/list_values.go`)\r\n- Mirrors `HighlightCodeWithConfig`'s precedence: `NoColor` wins, then `ForceColor`, then stdout TTY detection\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Improvements**\r\n  * More precise color handling for provenance and code highlighting: honors NoColor/ForceColor and now detects stdout TTY only for consistent styling.\r\n  * Provenance rendering disables styling when color is off.\r\n  * Provenance stdout output now flows through the shared output path for more consistent display.\r\n\r\n* **Bug Fixes**\r\n  * Normalized spacing and newline placement around provenance legends and stack headers.\r\n\r\n* **Tests**\r\n  * Updated/added tests and golden snapshots to reflect whitespace, legend formatting, and color/no-color behaviors.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\n\n  ## Associated Pull Requests\n  - #2319\n\n  ##  Deployment Status\n  To view the Atmos Pro deployment status of this release, see #2320.\n  \n<!-- [event-id]: wfte_3ZjcDYFPmVsqh3BayFoAziLhU4gf -->","mentions_count":5},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/308119270","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/308119270/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/308119270/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.8","id":308119270,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SXYbm","tag_name":"v1.215.0-rc.8","target_commitish":"main","name":"v1.215.0-rc.8","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-13T00:04:17Z","updated_at":"2026-04-13T01:29:31Z","published_at":"2026-04-13T01:29:31Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037882","id":395037882,"node_id":"RA_kwDOEW4XoM4Xi8y6","name":"atmos_1.215.0-rc.8_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":208076032,"digest":"sha256:bbf5a19ca549bc242f2acbeede3eb20dd9062a2424e951996577e8d28b749d5b","download_count":0,"created_at":"2026-04-13T01:28:32Z","updated_at":"2026-04-13T01:28:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037827","id":395037827,"node_id":"RA_kwDOEW4XoM4Xi8yD","name":"atmos_1.215.0-rc.8_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195063218,"digest":"sha256:ba8af8730a1b6bc43f3dc03f272edb790604e872111245c6997629d663dfd918","download_count":1,"created_at":"2026-04-13T01:28:25Z","updated_at":"2026-04-13T01:28:32Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037828","id":395037828,"node_id":"RA_kwDOEW4XoM4Xi8yE","name":"atmos_1.215.0-rc.8_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202543276,"digest":"sha256:d23d0e6331b840de2cce7144b44e23310b1bf37f33911aeff51ced7d451750a9","download_count":0,"created_at":"2026-04-13T01:28:25Z","updated_at":"2026-04-13T01:28:31Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037840","id":395037840,"node_id":"RA_kwDOEW4XoM4Xi8yQ","name":"atmos_1.215.0-rc.8_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188088492,"digest":"sha256:dc6235ee70c2deb32d60f7c1055b09946a187fcda246c8a8237d6951c9de8bbf","download_count":0,"created_at":"2026-04-13T01:28:26Z","updated_at":"2026-04-13T01:28:31Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037764","id":395037764,"node_id":"RA_kwDOEW4XoM4Xi8xE","name":"atmos_1.215.0-rc.8_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189137058,"digest":"sha256:34a4935a1b5044420e253f41e09d9eeba114a9cc0f15948c1b06b811e322cf6a","download_count":0,"created_at":"2026-04-13T01:28:18Z","updated_at":"2026-04-13T01:28:24Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037766","id":395037766,"node_id":"RA_kwDOEW4XoM4Xi8xG","name":"atmos_1.215.0-rc.8_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203350178,"digest":"sha256:f9f5cef9599afcfe3f7a64ae262fa9bf4310024d0337af63b0116df15ef0e1a4","download_count":6,"created_at":"2026-04-13T01:28:18Z","updated_at":"2026-04-13T01:28:26Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037763","id":395037763,"node_id":"RA_kwDOEW4XoM4Xi8xD","name":"atmos_1.215.0-rc.8_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189268130,"digest":"sha256:763eb250dd0ae5f14d3edf5f4ad120989c5b24aa0fd98f746d3a8236f2634eb7","download_count":0,"created_at":"2026-04-13T01:28:18Z","updated_at":"2026-04-13T01:28:23Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037822","id":395037822,"node_id":"RA_kwDOEW4XoM4Xi8x-","name":"atmos_1.215.0-rc.8_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188809378,"digest":"sha256:9f0dba37583ac1d35367273c616c0c59f1e2bd69527c528d0fb299bcc50d90ad","download_count":1,"created_at":"2026-04-13T01:28:24Z","updated_at":"2026-04-13T01:28:32Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037887","id":395037887,"node_id":"RA_kwDOEW4XoM4Xi8y_","name":"atmos_1.215.0-rc.8_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:5ecfd6af8fdcda14cb7bcd2b87821d8a1cb14bd0d7419365d998cffff72a8716","download_count":0,"created_at":"2026-04-13T01:28:33Z","updated_at":"2026-04-13T01:28:33Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037874","id":395037874,"node_id":"RA_kwDOEW4XoM4Xi8yy","name":"atmos_1.215.0-rc.8_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193209344,"digest":"sha256:31772f2ed241adf0e4aa0e20b1f4ec9b4ba7c3278d7348860186ad1474555a28","download_count":0,"created_at":"2026-04-13T01:28:31Z","updated_at":"2026-04-13T01:28:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037877","id":395037877,"node_id":"RA_kwDOEW4XoM4Xi8y1","name":"atmos_1.215.0-rc.8_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206834176,"digest":"sha256:34dfc1a1fa19aae7e731371f8b96e33ecd1dc05ba2062a6df26c5efea66e328e","download_count":0,"created_at":"2026-04-13T01:28:31Z","updated_at":"2026-04-13T01:28:37Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/395037765","id":395037765,"node_id":"RA_kwDOEW4XoM4Xi8xF","name":"atmos_1.215.0-rc.8_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":190126592,"digest":"sha256:ce76261879c9fca8cafd5e5e121cd645807828d90026d46b47dc839672fadc05","download_count":0,"created_at":"2026-04-13T01:28:18Z","updated_at":"2026-04-13T01:28:24Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.8/atmos_1.215.0-rc.8_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.8","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.8","body":"<details>\n  <summary>feat: add `atmos pro commit` for server-side commits via GitHub App @osterman (#2298)</summary>\n## what\n\n- Add new `atmos pro commit` CLI command that sends changed files to Atmos Pro, which creates commits server-side using its GitHub App installation — ensuring commits trigger CI workflows (unlike `GITHUB_TOKEN` commits)\n- Flexible staging control: `--add \"*.tf\"` for patterns, `--all`/`-A` for everything, or commit whatever is already staged\n- Built-in infinite loop prevention: automatically detects when running as `atmos-pro[bot]` and exits early\n- Client-side validation: path safety (`.github/` rejection, traversal prevention), file size limits (2 MiB), max 200 changed files\n- Reuses existing OIDC authentication flow from `pkg/pro/api_client.go`\n- Introduces new `atmos-pro` blog tag and retroactively tags 3 existing Atmos Pro changelog entries\n- Full CLI docs, blog post announcement, and roadmap entry\n\n## why\n\n- Commits made with `GITHUB_TOKEN` in GitHub Actions don't trigger subsequent workflow runs — this is a deliberate GitHub limitation that blocks autofix patterns (e.g., `terraform fmt` + commit)\n- Teams previously needed third-party services like autofix.ci to work around this\n- Atmos Pro's GitHub App can create commits that trigger CI, and this command provides the CLI interface for that capability\n- The workflow never receives a write token — Atmos Pro controls exactly what gets committed\n\n## references\n\n- Replaces [autofix.ci](https://autofix.ci/) for autocommit workflows\n- Uses existing OIDC auth from `pkg/pro/api_client.go` (`NewAtmosProAPIClientFromEnv`)\n- API endpoint: `POST /api/v1/git/commit`\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added `atmos pro commit` for server-side GitHub commits with staging flags (`--message`, `--comment`, `--add`, `--all`), loop prevention, branch checks, file-size and changed-files safety limits, and stdout commit SHA.\n\n* **Documentation**\n  * New CLI docs, blog post, roadmap entry, and tags with usage, GitHub Actions examples, flags, and safety guidance.\n\n* **Usability**\n  * Improved input validation and clearer user-facing errors for commit and API failures.\n\n* **Tests**\n  * Added unit and integration tests for commit flow, API client, DTO JSON, and validations.\n\n* **Chores**\n  * CI workflow updated to run formatting fixes and invoke `pro commit`.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>feat: Add terraform.workspace.prefix_separator setting for hierarchical state paths @aknysh (#2313)</summary>\n## what\n\n- Adds a new `terraform.workspace.prefix_separator` setting in `atmos.yaml` that controls how `/` in component names is handled when Atmos auto-generates backend key prefixes\n- Default value `\"-\"` preserves backward compatibility (e.g. `services/consul` → `services-consul`)\n- Setting `prefix_separator: \"/\"` preserves directory hierarchy (e.g. `services/consul` stays `services/consul`)\n- Applies to all three supported backends: S3 (`workspace_key_prefix`), GCS (`prefix`), and Azure (`key` component)\n- Explicitly configured backend keys are never modified — the separator only affects auto-generated values\n\n## why\n\n- Teams with large component libraries (hundreds of components) organize them in directory hierarchies like `services/consul`, `platform/eks`, `data/rds`\n- With the default `-` separator, the state bucket becomes a flat listing of hundreds of dash-separated prefixes — making it difficult to navigate\n- Previously, the only workaround was setting `workspace_key_prefix` explicitly via Go templates in every component, bypassing the cleaner `metadata.name` mechanism\n- With `prefix_separator: \"/\"`, the state bucket mirrors the component directory structure, giving users the same hierarchy in both their source tree and their state storage\n- The default `\"-\"` ensures no existing configurations are affected — users opt in explicitly\n\n### Configuration\n\n```yaml\n# atmos.yaml\nterraform:\n  workspace:\n    prefix_separator: \"/\"   # Preserve directory hierarchy in state paths\n```\n\n### Before / After\n\n| Component | Default (`\"-\"`) | With `prefix_separator: \"/\"` |\n|---|---|---|\n| `services/consul` | `services-consul/workspace/terraform.tfstate` | `services/consul/workspace/terraform.tfstate` |\n| `platform/eks` | `platform-eks/workspace/terraform.tfstate` | `platform/eks/workspace/terraform.tfstate` |\n\n### Implementation\n\n- `WorkspaceConfig` struct with `PrefixSeparator` field added to the Terraform schema\n- `getWorkspacePrefixSeparator` helper reads the configured separator (defaults to `\"-\"`)\n- `applyPrefixSeparator` helper transforms component names — preserves `/` when separator is `\"/\"`, replaces otherwise\n- All three backend setter functions (`setS3BackendDefaults`, `setGCSBackendDefaults`, `setAzureBackendKey`) updated to use the configured separator\n- All changed functions at 100% test coverage\n\n### Tests\n\n- 20+ new unit tests covering all backends, both separators, `metadata.name` with slashes, `baseComponentName`, explicit config passthrough, and end-to-end flow through `processTerraformBackend`\n- All pre-existing backend tests continue to pass (backward compatibility verified)\n\n### Documentation\n\n- PRD: `docs/prd/terraform-workspace-key-prefix-slash-preservation.md`\n- Blog post: `website/blog/2026-04-11-workspace-prefix-separator.mdx`\n- Roadmap entry added to the `dx` initiative\n\n## references\n\n- PRD: `docs/prd/terraform-workspace-key-prefix-slash-preservation.md` — full analysis, alternatives considered, migration guide\n- Blog post: `website/blog/2026-04-11-workspace-prefix-separator.mdx`\n- Affected code: `internal/exec/stack_processor_backend.go` — the three setter functions that auto-generate backend key prefixes\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * New configurable components.terraform.workspace.prefix_separator in atmos.yaml (default \"-\") to control Terraform backend key prefix formatting.\n\n* **Documentation**\n  * Added PRD, website doc, and blog post describing the setting and migration guidance; updated roadmap entry.\n\n* **Tests**\n  * Added unit/integration tests and updated CLI snapshots covering separator and backend-key behavior.\n\n* **Chores**\n  * Bumped Google Cloud client versions and updated NOTICE license references; added link-check exclusion.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix: Return upload errors instead of silently swallowing them @osterman (#2316)</summary>\n## what\n\n- `describe affected --upload` and `list instances --upload` now return errors instead of silently swallowing them when the Atmos Pro API client cannot be created or the upload fails\n- `describe affected --upload` returns actionable hints guiding users to set `ATMOS_PRO_TOKEN` or `ATMOS_PRO_WORKSPACE_ID`\n- All Atmos Pro API requests now include a `User-Agent` header (`atmos/<version> (<os>; <arch>)`) instead of the Go default `Go-http-client/1.1`\n\n## why\n\n- Upload failures (misconfigured credentials, wrong workspace ID, server-side access denied) were invisible — the CLI logged a warning but returned success, making it impossible to diagnose issues like \"workspace does not have access to repository\"\n- The missing `User-Agent` header made it difficult to identify Atmos CLI traffic in server logs\n\n## references\n\n- Server-side error observed: `Workspace does not have access to repository` was logged server-side but never surfaced to the CLI user\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Upload failures now propagate and halt commands instead of being silently skipped.\n  * Pro API client creation now returns descriptive errors with authentication/workspace hints.\n\n* **New Features**\n  * Pro API requests include User-Agent headers with version and system info.\n\n* **Documentation**\n  * Added \"Atmos Pro\" doc with setup, OIDC guidance, CLI usage, env vars, and troubleshooting; added to CLI sidebar and navbar.\n\n* **Tests**\n  * Added/updated tests to enforce explicit API client/auth failure handling.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":2},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/307941169","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/307941169/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/307941169/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.7","id":307941169,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SWs8x","tag_name":"v1.215.0-rc.7","target_commitish":"main","name":"v1.215.0-rc.7","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-11T03:57:39Z","updated_at":"2026-04-12T01:45:23Z","published_at":"2026-04-12T01:45:23Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414847","id":394414847,"node_id":"RA_kwDOEW4XoM4Xgkr_","name":"atmos_1.215.0-rc.7_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207931552,"digest":"sha256:2dc4131c8c519865804365c3b00ae81ffa11e2ebe4a97a1e82f6c5dbb3a7960d","download_count":2,"created_at":"2026-04-12T01:44:14Z","updated_at":"2026-04-12T01:44:22Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414875","id":394414875,"node_id":"RA_kwDOEW4XoM4Xgksb","name":"atmos_1.215.0-rc.7_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194942386,"digest":"sha256:3501353c6e765bb69f86e733e00ed55448f6c0774377079fc38a72a1f8567a3d","download_count":2,"created_at":"2026-04-12T01:44:21Z","updated_at":"2026-04-12T01:44:28Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414816","id":394414816,"node_id":"RA_kwDOEW4XoM4Xgkrg","name":"atmos_1.215.0-rc.7_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202404012,"digest":"sha256:45cf5297ab1fededf9cfc7a4e90998b1972fb1f3e6c62ab0866854744dd6aa3c","download_count":2,"created_at":"2026-04-12T01:44:06Z","updated_at":"2026-04-12T01:44:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414848","id":394414848,"node_id":"RA_kwDOEW4XoM4XgksA","name":"atmos_1.215.0-rc.7_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187957420,"digest":"sha256:6e1ca6d5dff6f9931f3c244f838111945527e32aac51b6e9a5c76449c5f17720","download_count":2,"created_at":"2026-04-12T01:44:14Z","updated_at":"2026-04-12T01:44:21Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414818","id":394414818,"node_id":"RA_kwDOEW4XoM4Xgkri","name":"atmos_1.215.0-rc.7_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188944546,"digest":"sha256:c8a42dd03ed6f8fe847c5cb1bc4e1161a6022b5336de812fbc496d6420b28ffe","download_count":2,"created_at":"2026-04-12T01:44:06Z","updated_at":"2026-04-12T01:44:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414841","id":394414841,"node_id":"RA_kwDOEW4XoM4Xgkr5","name":"atmos_1.215.0-rc.7_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203206818,"digest":"sha256:9a6df37008d7d6ebf7b0f6ec7c3b3f675c5b4f28265d3215b2f9180cfb2fd862","download_count":5,"created_at":"2026-04-12T01:44:13Z","updated_at":"2026-04-12T01:44:20Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414879","id":394414879,"node_id":"RA_kwDOEW4XoM4Xgksf","name":"atmos_1.215.0-rc.7_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189137058,"digest":"sha256:068510993a424786e3657cb16dc244bdd7f867f9509cac5072af379d5c6616b0","download_count":2,"created_at":"2026-04-12T01:44:21Z","updated_at":"2026-04-12T01:44:28Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414845","id":394414845,"node_id":"RA_kwDOEW4XoM4Xgkr9","name":"atmos_1.215.0-rc.7_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188743842,"digest":"sha256:6dbd084e6431471629a5a7d9477c75b4a75351468cc363027432b90197ec9c7e","download_count":2,"created_at":"2026-04-12T01:44:14Z","updated_at":"2026-04-12T01:44:21Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414885","id":394414885,"node_id":"RA_kwDOEW4XoM4Xgksl","name":"atmos_1.215.0-rc.7_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:d561bf823d6e317cb37d4233a3ee63335379ea7822fdfa9f79aec44cab0bb7d4","download_count":2,"created_at":"2026-04-12T01:44:22Z","updated_at":"2026-04-12T01:44:22Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414819","id":394414819,"node_id":"RA_kwDOEW4XoM4Xgkrj","name":"atmos_1.215.0-rc.7_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193011712,"digest":"sha256:8b162b0f3f3f96ad93a7a3716d7c34f6f634a4eb8df442794d5c7f34df33e044","download_count":2,"created_at":"2026-04-12T01:44:06Z","updated_at":"2026-04-12T01:44:14Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414880","id":394414880,"node_id":"RA_kwDOEW4XoM4Xgksg","name":"atmos_1.215.0-rc.7_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206690816,"digest":"sha256:aeb88b0c707440901f3099a2099a5fa1682478a71ffdfe267953162e4c02667a","download_count":2,"created_at":"2026-04-12T01:44:21Z","updated_at":"2026-04-12T01:44:28Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/394414817","id":394414817,"node_id":"RA_kwDOEW4XoM4Xgkrh","name":"atmos_1.215.0-rc.7_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":190001152,"digest":"sha256:b1629bc69e1dcfd0c934a1829960313c525678c844c98507cb7713d3f0514944","download_count":2,"created_at":"2026-04-12T01:44:06Z","updated_at":"2026-04-12T01:44:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.7/atmos_1.215.0-rc.7_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.7","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.7","body":"## 🚀 Enhancements\n\n<details>\n  <summary>fix: CI job summary shows NO_CHANGE badge for output-only Terraform changes @osterman (#2306)</summary>\n## what\n\n- When Terraform plan detects only output changes (exit code 2), the CI job summary now correctly distinguishes this from \"no changes\" and \"resource changes\"\n- Added a new blue `OUTPUT_CHANGE` badge for output-only plans/applies, distinct from the gray `NO_CHANGE` badge and the resource-level `CREATE`/`CHANGE`/`REPLACE`/`DESTROY` badges\n- Template headings now differentiate: \"Resource Changes Found\" vs \"Output Changes Found\" vs \"No Changes\"\n- Plan detail summary shows \"Output values will change. No infrastructure changes.\" for output-only changes\n\n## why\n\n- Terraform exits with code 2 when there are changes, including output-only changes (no infrastructure modifications). The existing `HasChanges()` method only checked resource counts, so output-only changes were incorrectly reported as \"NO_CHANGE\" in CI job summaries. This was misleading because Terraform considers these real changes that need to be applied.\n- Making the distinction between resource changes and output-only changes explicit helps CI users understand at a glance whether infrastructure will be modified or just state outputs will be updated.\n\n## references\n\n- Terraform plan exit codes: 0 = no changes, 1 = error, 2 = changes detected (includes output-only changes)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Detect and report Terraform output-only changes with distinct \"Output Changes Found\" / \"Output Changes Applied\" messaging.\n\n* **Improvements**\n  * Separate resource vs output-only summaries, badges, and details for clearer plan/apply results.\n  * Revised workspace handling to prefer selection before creation and improved handling of missing state files on Windows.\n  * Added utilities to clear Terraform caches to reduce stale-state issues.\n\n* **Tests**\n  * Added/expanded tests for output-only detection, summaries, workspace behaviors, and cache isolation.\n\n* **Documentation**\n  * Updated templates and fixtures to reflect new messaging.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/307780716","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/307780716/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/307780716/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.6","id":307780716,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SWFxs","tag_name":"v1.215.0-rc.6","target_commitish":"main","name":"v1.215.0-rc.6","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-10T22:18:23Z","updated_at":"2026-04-11T01:34:29Z","published_at":"2026-04-11T01:34:29Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739736","id":393739736,"node_id":"RA_kwDOEW4XoM4Xd_3Y","name":"atmos_1.215.0-rc.6_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207931536,"digest":"sha256:b2a331c7c228b21c3961de31227c0f69b4844d1ccdbf29c2b184d671437ec0b3","download_count":1,"created_at":"2026-04-11T01:33:22Z","updated_at":"2026-04-11T01:33:29Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739772","id":393739772,"node_id":"RA_kwDOEW4XoM4Xd_38","name":"atmos_1.215.0-rc.6_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194942370,"digest":"sha256:7d161409a248071e78cdaf9007d876d80cc688f8fcc1f9dc3e24ae5b8333dbd5","download_count":1,"created_at":"2026-04-11T01:33:29Z","updated_at":"2026-04-11T01:33:37Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739768","id":393739768,"node_id":"RA_kwDOEW4XoM4Xd_34","name":"atmos_1.215.0-rc.6_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202404012,"digest":"sha256:ae1785bdb8046967bd4016374cc4cca18a16e7e35a0cec8b1b85d584ece7e73e","download_count":1,"created_at":"2026-04-11T01:33:28Z","updated_at":"2026-04-11T01:33:34Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739774","id":393739774,"node_id":"RA_kwDOEW4XoM4Xd_3-","name":"atmos_1.215.0-rc.6_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187957420,"digest":"sha256:6a805014eb1093727f700628db3e68c7b6a0dccfb8ebd864c22738f55bb50fe6","download_count":1,"created_at":"2026-04-11T01:33:30Z","updated_at":"2026-04-11T01:33:35Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739737","id":393739737,"node_id":"RA_kwDOEW4XoM4Xd_3Z","name":"atmos_1.215.0-rc.6_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188944546,"digest":"sha256:542a1e065e5d755216fecd2d198429ce8a4ff64f491608c80c3cf77d3bf11f6f","download_count":1,"created_at":"2026-04-11T01:33:22Z","updated_at":"2026-04-11T01:33:30Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739735","id":393739735,"node_id":"RA_kwDOEW4XoM4Xd_3X","name":"atmos_1.215.0-rc.6_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203206818,"digest":"sha256:9de7586612413eb40752130403d02eae3c76a6aa64eb2f949f985824bcd5e42d","download_count":8,"created_at":"2026-04-11T01:33:22Z","updated_at":"2026-04-11T01:33:30Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739738","id":393739738,"node_id":"RA_kwDOEW4XoM4Xd_3a","name":"atmos_1.215.0-rc.6_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189137058,"digest":"sha256:fd034275f68c8f0c8c64e997e6e4561c15db8faf04320fd7e743f2a863ca0f7e","download_count":1,"created_at":"2026-04-11T01:33:22Z","updated_at":"2026-04-11T01:33:28Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739820","id":393739820,"node_id":"RA_kwDOEW4XoM4Xd_4s","name":"atmos_1.215.0-rc.6_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188743842,"digest":"sha256:55d0370cf9353fdc90e140384db244cfba5bc9d045b3f82bad35dfba4cf79c49","download_count":1,"created_at":"2026-04-11T01:33:36Z","updated_at":"2026-04-11T01:33:42Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739828","id":393739828,"node_id":"RA_kwDOEW4XoM4Xd_40","name":"atmos_1.215.0-rc.6_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:59067e891226669c4633521ac44f9cc3aecc86f864764b5e9fe13f85eb3aba15","download_count":1,"created_at":"2026-04-11T01:33:38Z","updated_at":"2026-04-11T01:33:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739817","id":393739817,"node_id":"RA_kwDOEW4XoM4Xd_4p","name":"atmos_1.215.0-rc.6_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":193009664,"digest":"sha256:ce68ee70f812e481b4472e17df8fffcbfcf12fd7d2377452a207328508a18539","download_count":1,"created_at":"2026-04-11T01:33:35Z","updated_at":"2026-04-11T01:33:41Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739775","id":393739775,"node_id":"RA_kwDOEW4XoM4Xd_3_","name":"atmos_1.215.0-rc.6_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206688768,"digest":"sha256:05b116fecfb75908559ca2ff015452d7439326e8e1ea29f1373531692999ac1d","download_count":1,"created_at":"2026-04-11T01:33:30Z","updated_at":"2026-04-11T01:33:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/393739824","id":393739824,"node_id":"RA_kwDOEW4XoM4Xd_4w","name":"atmos_1.215.0-rc.6_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":189999104,"digest":"sha256:a6905d4c345155c9c658d980d90475806fd3d32efe20db69997ac34d1b9b9e64","download_count":1,"created_at":"2026-04-11T01:33:38Z","updated_at":"2026-04-11T01:33:42Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.6/atmos_1.215.0-rc.6_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.6","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.6","body":"<details>\n  <summary>feat: add ATMOS_CI_COMMENTS_ENABLED env var to override ci.comments.enabled @[copilot-swe-agent[bot]](https://github.com/apps/copilot-swe-agent) (#2300)</summary>\n`ci.comments.enabled` could only be controlled via `atmos.yaml`, making it impossible to disable PR/MR comments in specific workflows without maintaining separate config profiles.\n\n## Changes\n\n- **`pkg/config/utils.go`**: Parse `ATMOS_CI_COMMENTS_ENABLED` in `processEnvVars()`, overriding `atmosConfig.CI.Comments.Enabled` when set. Follows the same pattern as `ATMOS_VERSION_CHECK_ENABLED`. Invalid values emit a warning and leave the config unchanged.\n- **`pkg/config/utils_test.go`**: Tests covering `true`/`false`/`1`/`0` values, unset behavior (YAML value preserved), and invalid input (config unchanged in both directions).\n- **`website/docs/cli/configuration/ci/comments.mdx`**: Document the new env var in the config reference and a dedicated Environment Variables section.\n- **`website/docs/cli/configuration/ci/index.mdx`**: Add `ATMOS_CI_COMMENTS_ENABLED` to the CI environment variables table.\n\n## Usage\n\n```yaml\n# atmos.yaml — default enabled for most workflows\nci:\n  comments:\n    enabled: true\n```\n\n```yaml\n# GitHub Actions — disable comments in a specific workflow\n- name: Plan (no comments)\n  env:\n    ATMOS_CI_COMMENTS_ENABLED: \"false\"\n  run: atmos terraform plan ...\n```\n\nThe env var takes precedence over the YAML value when set; when unset, the YAML value is used unchanged.\n</details>\n\n<details>\n  <summary>fix: Add ATMOS_CI_GITHUB_TOKEN for separate CI token override @osterman (#2304)</summary>\n## what\n\n- Added `ATMOS_CI_GITHUB_TOKEN` environment variable with highest priority in CI token resolution (`ATMOS_CI_GITHUB_TOKEN` > `GITHUB_TOKEN` > `GH_TOKEN`)\n- Added actionable error hints when GitHub Status API returns 404 or 403, explaining token permission requirements and suggesting `ATMOS_CI_GITHUB_TOKEN`\n- Switched `createCheckRun`/`updateCheckRun` error wrapping from `fmt.Errorf` to the error builder pattern to preserve hint metadata through the error chain\n\n## why\n\n- Users running Atmos in GitHub Actions with a GitHub App token (e.g., for Terraform managing GitHub repos) get 404 errors on commit status updates because the App token lacks `statuses: write` permission\n- The workflow's default `GITHUB_TOKEN` has the right permission via the `permissions:` block, but there was no way to use a separate token for CI operations vs Terraform\n- The raw 404 error gave no guidance on what went wrong or how to fix it — users with `statuses: write` in their workflow were confused why it wasn't working\n\n## references\n\n- Follows existing `ATMOS_CI_*` naming convention (`ATMOS_CI_OUTPUT`, `ATMOS_CI_SUMMARY`, `ATMOS_CI_SHA`, etc.)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added support for a dedicated CI GitHub token (ATMOS_CI_GITHUB_TOKEN) with highest precedence over GITHUB_TOKEN and GH_TOKEN.\n\n* **Bug Fixes**\n  * Improved GitHub API error reporting to include actionable hints for permission/authentication failures (notably 403/404).\n\n* **Documentation**\n  * Published blog post and updated roadmap describing the new CI token and guidance.\n\n* **Tests**\n  * Expanded coverage to validate token precedence and error-hint behavior.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix: Replace symlink strategy with plain directory for SAML browser storage @aknysh (#2312)</summary>\n## what\n\n- Fixes SAML browser storage state failing to save on Windows — the directory at `~/.aws/saml2aws/` was missing because the previous symlink-based strategy requires privileges most Windows users don't have\n- Replaces the symlink-based storage directory strategy with plain directory creation on all platforms — no special privileges required\n- Handles legacy symlink migration: detects and removes stale symlinks from previous Atmos versions, preserving any existing `storageState.json` from the symlink target\n- Removes ~70 lines of dead symlink code (symlink creation, staging, restore, validation)\n- Adds comprehensive cross-platform tests for the new directory-based storage strategy and legacy migration\n- Adds fix doc with full end-to-end auth flow analysis explaining the two independent storage systems (AWS credentials vs Playwright browser session state)\n\n## why\n\n- **Root cause:** the previous symlink strategy created `~/.aws/saml2aws` as a symlink to an XDG cache directory. On Windows, `os.Symlink` requires Developer Mode or admin privileges — without these, the symlink creation failed silently and the directory was simply absent. The upstream saml2aws library then failed to write `storageState.json` because the parent directory did not exist (\"The system cannot find the path specified\")\n- **Impact is browser session reuse only:** `storageState.json` contains Playwright browser session data (cookies for re-authentication). It is NOT part of the AWS credential pipeline — credentials are stored separately in INI files under `~/.config/atmos/aws/{provider}/credentials` using `filepath.Join` (correct on all platforms). Without the fix, users must re-authenticate in the browser every time instead of reusing a saved session\n- **The fix creates a plain directory** at the path saml2aws expects using `os.MkdirAll` with `filepath.Join` — works on all platforms, no special privileges required. Legacy symlinks from previous versions are detected and migrated (preserving existing session state)\n- **Upstream bug:** saml2aws also constructs the storage path using `fmt.Sprintf` with hardcoded forward slashes instead of `filepath.Join`, producing mixed separators on Windows. Go's `os` package normalizes these internally, so once the directory exists the path resolves correctly\n\n## references\n\n- Fix doc: `docs/fixes/2026-04-10-auth-windows-path-issues.md` (full root-cause analysis, auth flow trace, impact assessment)\n- Upstream bug: `github.com/versent/saml2aws/v2/pkg/provider/browser/browser.go:118` — uses `fmt.Sprintf` with hardcoded forward slashes instead of `filepath.Join`\n- Related: `saml-driver-install` branch / PR #1747 — the branch where the symlink strategy was originally implemented\n- Related: `docs/prd/saml-browser-driver-integration.md` — SAML browser driver integration PRD\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Fixed Windows failures saving browser session state during SAML authentication by ensuring a real, platform-correct storage directory and automatic migration of existing setups.\n  * Improved cross-platform robustness and preserved existing session state where present.\n\n* **Documentation**\n  * Added a detailed guide describing the issue, root cause, and migration strategy.\n\n* **Tests**\n  * Added cross-platform tests verifying idempotent directory creation, state preservation, and migration behavior.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix: Enable automatic Playwright browser driver download for SAML authentication @osterman (#1747)</summary>\n## what\n\nFixes SAML authentication failing with \"please install the driver (v1.47.2) and browsers first\" error when `download_browser_driver: true` is configured.\n\n## why\n\nRoot cause: The `DownloadBrowser` flag was set on saml2aws `IDPAccount` config but NOT on `LoginDetails`, which is what saml2aws actually checks when deciding whether to download drivers.\n\nAdditionally, the code was using incorrect Playwright cache directory paths (`ms-playwright-go` instead of `ms-playwright`), causing driver detection to fail.\n\n## Changes\n\n### Code Changes\n- **Set `LoginDetails.DownloadBrowser`** in `createLoginDetails()` to match `shouldDownloadBrowser()` logic\n- **Corrected Playwright cache directory paths** from `ms-playwright-go` to `ms-playwright` (actual playwright-go location)\n- **Enhanced driver detection** to verify actual browser binaries exist (not just empty version directories)\n\n### Testing\n- Added comprehensive integration test that downloads real Chromium drivers (~140 MB) and validates installation\n- Unit tests verify `LoginDetails.DownloadBrowser` is set correctly across all scenarios\n- Driver detection tests verify empty directories don't register as valid installations\n\n### Documentation\n- Removed broken manual installation command (`go run playwright install`)\n- Added warning about manual installation requiring advanced knowledge of playwright-go internals\n- Clarified cache directory locations and why PATH is not required\n- Emphasized `download_browser_driver: true` as the recommended approach\n\n## references\n\n- Fixes the issue where SAML authentication with `download_browser_driver: true` still fails\n- Related to playwright-go embedded library behavior vs standalone playwright CLI tool\n- Playwright cache locations: https://playwright.dev/docs/browsers#managing-browser-binaries\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Opt-in automatic Playwright browser driver downloads for AWS SAML auth (download_browser_driver); new browser_type and browser_executable_path config options; improved cross-platform driver detection, XDG-compliant storage with symlink handling; Logrus routed into Atmos logging; new sentinel error for invalid browser executables.\n\n* **Documentation**\n  * Expanded guides for auto-download workflow, custom browser config, platform cache paths, examples, and heavy integration test instructions.\n\n* **Tests**\n  * Added unit and integration tests covering driver detection, download/install flow, storage/symlink behavior, and logging adapter; CI gate to enable integrations.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":2},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/307348625","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/307348625/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/307348625/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.5","id":307348625,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SUcSR","tag_name":"v1.215.0-rc.5","target_commitish":"main","name":"v1.215.0-rc.5","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-09T21:46:30Z","updated_at":"2026-04-10T01:37:52Z","published_at":"2026-04-10T01:37:52Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877221","id":392877221,"node_id":"RA_kwDOEW4XoM4XatSl","name":"atmos_1.215.0-rc.5_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207910576,"digest":"sha256:fa4bab481db0d28a1b4a5058a6fb0d5c59aebf8956c7e86fbe30fffbaaeedd36","download_count":3,"created_at":"2026-04-10T01:36:47Z","updated_at":"2026-04-10T01:36:55Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877225","id":392877225,"node_id":"RA_kwDOEW4XoM4XatSp","name":"atmos_1.215.0-rc.5_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194925378,"digest":"sha256:870b58e7aa542f1b518928637673163c54428c338a0b665d9976c23609d9faf3","download_count":4,"created_at":"2026-04-10T01:36:47Z","updated_at":"2026-04-10T01:36:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877224","id":392877224,"node_id":"RA_kwDOEW4XoM4XatSo","name":"atmos_1.215.0-rc.5_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202383532,"digest":"sha256:6628d7a13f2a5ab35856540e0cda63d53c5e20ddefaf8b5614dffe297859ffb4","download_count":3,"created_at":"2026-04-10T01:36:47Z","updated_at":"2026-04-10T01:36:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877194","id":392877194,"node_id":"RA_kwDOEW4XoM4XatSK","name":"atmos_1.215.0-rc.5_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187957420,"digest":"sha256:ee54c50c557fc9db4d617d0e8ad36dfa504aac34c345cbc089b5f658516d77a7","download_count":3,"created_at":"2026-04-10T01:36:40Z","updated_at":"2026-04-10T01:36:47Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877274","id":392877274,"node_id":"RA_kwDOEW4XoM4XatTa","name":"atmos_1.215.0-rc.5_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188924066,"digest":"sha256:4a3856737d77db86420dff8b461764e5e120e1c2994d8414015825f7403a8f22","download_count":3,"created_at":"2026-04-10T01:36:54Z","updated_at":"2026-04-10T01:36:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877192","id":392877192,"node_id":"RA_kwDOEW4XoM4XatSI","name":"atmos_1.215.0-rc.5_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203182242,"digest":"sha256:7659ffb7257d14b8da5ee2dfc6f6304bb5db33278f7bab83738d527f29487dd9","download_count":14,"created_at":"2026-04-10T01:36:40Z","updated_at":"2026-04-10T01:36:47Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877195","id":392877195,"node_id":"RA_kwDOEW4XoM4XatSL","name":"atmos_1.215.0-rc.5_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189071522,"digest":"sha256:7fdf4abe0ec59d30b650d49b2668951889493b7f5770438fc5581e62ea7aec04","download_count":3,"created_at":"2026-04-10T01:36:40Z","updated_at":"2026-04-10T01:36:47Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877193","id":392877193,"node_id":"RA_kwDOEW4XoM4XatSJ","name":"atmos_1.215.0-rc.5_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188678306,"digest":"sha256:df8d37586291ce0cbbf56d69560b488abcdbbfd704d367e50a39ee80b5e3ae7b","download_count":3,"created_at":"2026-04-10T01:36:40Z","updated_at":"2026-04-10T01:36:47Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877295","id":392877295,"node_id":"RA_kwDOEW4XoM4XatTv","name":"atmos_1.215.0-rc.5_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:82910892d1cf5b5333236c2429485824c1bc5831aa0e078d3c4c3904df68d4fc","download_count":3,"created_at":"2026-04-10T01:36:56Z","updated_at":"2026-04-10T01:36:56Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877228","id":392877228,"node_id":"RA_kwDOEW4XoM4XatSs","name":"atmos_1.215.0-rc.5_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":192989184,"digest":"sha256:96734ca86bc18c1c6f5e661c3f8b8c2e8b46ead39e77bce90bcda31a9df6a2ce","download_count":3,"created_at":"2026-04-10T01:36:48Z","updated_at":"2026-04-10T01:36:55Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877292","id":392877292,"node_id":"RA_kwDOEW4XoM4XatTs","name":"atmos_1.215.0-rc.5_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206668800,"digest":"sha256:81ac716529ce183ed4911ead3f1ce2f3407f80dcdf4d2abc33546b1378cb4ec2","download_count":3,"created_at":"2026-04-10T01:36:56Z","updated_at":"2026-04-10T01:37:01Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/392877271","id":392877271,"node_id":"RA_kwDOEW4XoM4XatTX","name":"atmos_1.215.0-rc.5_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":189980672,"digest":"sha256:45a921dbb1f19d395dca63f36e811fcac0dd3725d27d33bdfe092abd3a41e086","download_count":3,"created_at":"2026-04-10T01:36:54Z","updated_at":"2026-04-10T01:37:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.5/atmos_1.215.0-rc.5_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.5","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.5","body":"<details>\n  <summary>docs: Fix component-level auth identity selection syntax @osterman (#2301)</summary>\n## what\n\n- Fixed incorrect `auth.identity: <name>` syntax in the auth documentation to use the actual supported `auth.identities.<name>.default: true` syntax\n- Updated both the \"Component-Level Configuration\" and \"Component-Level Identity Selection\" examples in `website/docs/stacks/auth.mdx`\n\n## why\n\n- A user reported that component-level identity selection was not working. The root cause was that the documentation showed a non-existent `auth.identity` shorthand syntax.\n- The `ComponentAuthConfig` struct in `pkg/schema/schema_auth.go` only supports `identities` (a map), and `hasDefaultIdentity()` in `internal/exec/terraform_nested_auth_helper.go` only checks for identities with `default: true`.\n- Users following the docs were writing config that was silently ignored, causing components to run under the default identity instead of the intended one.\n\n## references\n\n- Reported by a user in Slack who was trying to use component-level identity selection per https://atmos.tools/stacks/auth#component-level-identity-selection\n- Working example syntax confirmed via [cloudposse-examples/atmos-native-ci](https://github.com/cloudposse-examples/atmos-native-ci/blob/main/terraform/stacks/dev.yaml#L10-L14)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **Documentation**\n  * Updated authentication configuration documentation for component-level settings. The `auth` block structure has been revised to use an `identities` map instead of a single `identity` field. This enables multiple identity configurations per component, with the ability to designate one identity as the default using `default: true`.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>feat: Add OAuth2 PKCE browser-based auth for AWS user/root identities @Benbentwo (#2148)</summary>\n## what\n\n- Implement OAuth2 PKCE browser-based authentication as a third-tier fallback for `aws/user` identity\n- Add interactive browser flow with local callback server and bubbletea spinner\n- Add non-interactive mode that displays authorization URL and prompts for manual code entry\n- Cache refresh tokens to XDG cache directory for 12-hour session reuse\n- Automatically refresh temporary credentials every 15 minutes via refresh token grant\n\n## why\n\nAWS recently introduced browser-based OAuth2 authentication for IAM users and root accounts, eliminating the need for static access keys. This implementation provides the same convenient web-based flow that SSO users already enjoy, as a fallback when YAML credentials and keychain credentials are unavailable. Refresh token support enables long-lived 12-hour sessions without requiring browser reopening.\n\n## references\n\n- Closes ATMOS-162\n- Related: AWS blog post on simplified developer access https://aws.amazon.com/blogs/security/simplified-developer-access-to-aws-with-aws-login/\n- PRD: `docs/prd/aws-browser-auth.md`\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Browser-based AWS sign-in fallback (OAuth2 PKCE) enabled by default: automatic browser open with spinner, plain-URL/manual stdin fallback, refresh-token caching (12h), periodic credential refresh, and persisted AWS config/credentials.\n\n* **Bug Fixes**\n  * Clearer user-facing error paths and improved debug logging during webflow and credential resolution failures.\n\n* **Tests**\n  * Extensive test coverage for PKCE, callback/server behavior, token exchange/refresh, caching, UI flows, and error scenarios.\n\n* **Documentation**\n  * Blog post, docs, and roadmap updated; new config option to disable the browser fallback.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix: Ensure terraform plan-diff processes yaml and skips init properly @jhoward-rula (#2305)</summary>\n## what\r\n\r\n- Fixes a bug where `atmos terraform plan-diff` would not properly process templates, functions, or respect the `--skip-init` flag.\r\n- **Issue #2258**\r\n\r\n## why\r\n\r\n- **Issue #2258**\r\n\r\n## references\r\n\r\n* closes #2258\r\n\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **New Features**\n  * The `plan-diff` command now accepts additional configuration options for controlling Terraform template processing, function execution, and initialization behavior during plan operations.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix: Atmos Auth stack-level default identity resolution @aknysh (#2303)</summary>\n## what\r\n\r\n- Fixes three related bugs in Atmos Auth identity resolution without breaking any existing auth functionality.\r\n- **Issue #2293**: Teaches the stack auth scanner to follow `import:` chains recursively, so `auth.identities.<name>.default: true` declared in an imported `_defaults.yaml` is visible to every command — including multi-stack commands like `describe stacks` / `describe affected` / `list affected`.\r\n- **Discussion https://github.com/orgs/cloudposse/discussions/122%7C#122**: Splits the `pkg/auth` entry points into a NO-SCAN variant (for commands with a stack-scoped merged auth config) and a SCAN variant (for multi-stack commands). The split makes the cross-stack default-identity leak structurally impossible for terraform/helmfile/describe-component flows.\r\n- **Issue 3 (component-level default override)**: When a component declares its own `auth.identities.<name>.default: true` and the global `atmos.yaml` also has a different default, the component-level default now wins cleanly instead of producing \"multiple default identities\" prompts.\r\n- Keeps every previous auth fix intact, including the Approach 1 / Approach 2 design, the `allAgree` conflict-detection, the describe-affected AuthManager threading, and the MCP scoped-auth env-override flow.\r\n- Adds two scenario fixtures (using mock AWS identities for CI), three CLI regression test cases, and extensive unit tests covering every new code path.\r\n\r\n## why\r\n\r\n- **Issue #2293 — imported defaults invisible**: when `auth.identities.<name>.default: true` was declared in an imported `_defaults.yaml` (especially one listed under `stacks.excluded_paths`, which is the common reference-architecture layout), the pre-scanner never saw it. Users hit \"No default identity configured\" on commands that should have auto-authenticated. The exec-layer merge path already handled this correctly for terraform/helmfile/describe-component, but multi-stack commands (`describe stacks`, `describe affected`, `list affected`, workflows, `aws security`/`compliance`, MCP scoped auth) all failed.\r\n- **Discussion https://github.com/orgs/cloudposse/discussions/122%7C#122 — single stack default leaks globally**: when a single stack manifest declared `default: true`, that identity silently propagated to every other stack across all tenants. Running `atmos terraform plan eks -s plat-staging` would pick up the `data-staging` default declared in an unrelated stack file. Reported to reproduce against Atmos 1.210, 1.211, and 1.213.\r\n- **Issue 3 — component-level default doesn't override global**: when a component in a stack config declares a different identity as `default: true` than the global `atmos.yaml` default, both defaults survived the exec-layer deep merge in `MergeComponentAuthConfig`. Users were prompted to choose between multiple defaults (interactive) or got errors (CI). This broke the expected Atmos inheritance semantics where more-specific config overrides more-general.\r\n- **No regressions allowed**: an earlier draft removed the pre-scanner entirely. That fixed Issues 1 and 2 for `terraform *` but regressed `describe stacks`, `describe affected`, `list affected`, `list instances`, `aws security`, `aws compliance`, and workflow execution — all of which were documented in `docs/fixes/stack-level-default-auth-identity.md` as intentionally using the pre-scanner (Approach 2). This PR preserves that Approach 2 code path while fixing all three bugs, so no existing user-visible functionality is removed.\r\n\r\n## references\r\n\r\n- closes #2293\r\n- design doc: `docs/fixes/2026-04-08-atmos-auth-identity-resolution-fixes.md` (full caller audit, rejected alternatives, coverage matrix)\r\n- related: `docs/fixes/stack-level-default-auth-identity.md` (Approach 1 / Approach 2 design this PR preserves and extends)\r\n- related: `docs/fixes/2026-02-12-auth-realm-isolation-issues.md` (Issue #2072 `allAgree` conflict-detection preserved unchanged)\r\n- related: `docs/fixes/2026-03-25-describe-affected-auth-identity-not-used.md` (AuthManager threading through describe/list-affected preserved unchanged)\r\n- related: `docs/fixes/2026-04-06-mcp-server-env-not-applied-to-auth-setup.md` (MCP scoped-auth flow now routes through the scan variant)\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Identity resolution now discovers defaults from imported stack files, prevents defaults leaking across stacks/commands, and ensures component-level defaults override global defaults.\n* **Refactor**\n  * Split auth manager flow into SCAN vs NO-SCAN paths and switched relevant commands to the SCAN variant for multi-stack/no-target contexts.\n* **Documentation**\n  * Added a detailed guide describing the identity-resolution fixes and routing.\n* **Tests**\n  * Added extensive unit, integration and CLI regression tests plus fixtures covering import-following, isolation, conflicts, and non-leakage.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":4},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/306357689","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/306357689/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/306357689/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.4","id":306357689,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SQqW5","tag_name":"v1.215.0-rc.4","target_commitish":"main","name":"v1.215.0-rc.4","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-08T00:37:43Z","updated_at":"2026-04-08T01:24:31Z","published_at":"2026-04-08T01:24:31Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221545","id":391221545,"node_id":"RA_kwDOEW4XoM4XUZEp","name":"atmos_1.215.0-rc.4_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207818784,"digest":"sha256:e7aafa024d2a53661bc28dcb940f8632c60e8efa0e0180f395cc35c3ad7e7055","download_count":1,"created_at":"2026-04-08T01:23:27Z","updated_at":"2026-04-08T01:23:33Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221611","id":391221611,"node_id":"RA_kwDOEW4XoM4XUZFr","name":"atmos_1.215.0-rc.4_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194824594,"digest":"sha256:3fdcdccad3da8ee2b5a7fcae8993909c5a34b45ff7839518868a03e6f6d226d8","download_count":1,"created_at":"2026-04-08T01:23:32Z","updated_at":"2026-04-08T01:23:38Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221640","id":391221640,"node_id":"RA_kwDOEW4XoM4XUZGI","name":"atmos_1.215.0-rc.4_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202289324,"digest":"sha256:d29ba4c9b543ec5124ecd206fa5ffba6021f8f060b3bf12f0c409be860156f93","download_count":1,"created_at":"2026-04-08T01:23:35Z","updated_at":"2026-04-08T01:23:42Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221454","id":391221454,"node_id":"RA_kwDOEW4XoM4XUZDO","name":"atmos_1.215.0-rc.4_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187826348,"digest":"sha256:1f78c42be7a162feebc812b9f2a4cd8362d7275e3b88897a4a9c2e8b6bebfecf","download_count":1,"created_at":"2026-04-08T01:23:20Z","updated_at":"2026-04-08T01:23:28Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221622","id":391221622,"node_id":"RA_kwDOEW4XoM4XUZF2","name":"atmos_1.215.0-rc.4_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188854434,"digest":"sha256:e1685f718b8a024f9b893e3ddbdea0135f239c012adeab49295965830b9aa393","download_count":1,"created_at":"2026-04-08T01:23:34Z","updated_at":"2026-04-08T01:23:43Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221537","id":391221537,"node_id":"RA_kwDOEW4XoM4XUZEh","name":"atmos_1.215.0-rc.4_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203092130,"digest":"sha256:35d7ffcccba75ceb72491f67a174d3a1c5879ebc92db45e5b31bc4ee2148ed19","download_count":14,"created_at":"2026-04-08T01:23:26Z","updated_at":"2026-04-08T01:23:32Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221451","id":391221451,"node_id":"RA_kwDOEW4XoM4XUZDL","name":"atmos_1.215.0-rc.4_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189071522,"digest":"sha256:7ce51de372e3c0f1c8483a094b74b7a1cab3818897e713e2032ab3ce67f9060a","download_count":1,"created_at":"2026-04-08T01:23:20Z","updated_at":"2026-04-08T01:23:26Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221453","id":391221453,"node_id":"RA_kwDOEW4XoM4XUZDN","name":"atmos_1.215.0-rc.4_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188612770,"digest":"sha256:27f3980efe9149f184a7fc73fd0d1e788b615bf0f86c75d99451f82e73c2f332","download_count":1,"created_at":"2026-04-08T01:23:20Z","updated_at":"2026-04-08T01:23:27Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221656","id":391221656,"node_id":"RA_kwDOEW4XoM4XUZGY","name":"atmos_1.215.0-rc.4_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:6fa2a4913b520a78f96bc2e1b64b76b4202a746b88dc3c67a92619dafba53bde","download_count":1,"created_at":"2026-04-08T01:23:36Z","updated_at":"2026-04-08T01:23:37Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221557","id":391221557,"node_id":"RA_kwDOEW4XoM4XUZE1","name":"atmos_1.215.0-rc.4_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":192914432,"digest":"sha256:ebbd9f3f5faec614c0e906319f735531fd7df20c29f69f25c9a5a26e25f6364c","download_count":1,"created_at":"2026-04-08T01:23:28Z","updated_at":"2026-04-08T01:23:35Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221572","id":391221572,"node_id":"RA_kwDOEW4XoM4XUZFE","name":"atmos_1.215.0-rc.4_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206572032,"digest":"sha256:3fde5de9e6ff9e64f4240dacda3b8b83c80361ad2ea85301ce47c5bea666bf47","download_count":1,"created_at":"2026-04-08T01:23:29Z","updated_at":"2026-04-08T01:23:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/391221452","id":391221452,"node_id":"RA_kwDOEW4XoM4XUZDM","name":"atmos_1.215.0-rc.4_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":189896192,"digest":"sha256:bb2507cbd6ecf8b1dc3754dfa544aa31eaf350ee179846faa15f1a03ebdba73c","download_count":1,"created_at":"2026-04-08T01:23:20Z","updated_at":"2026-04-08T01:23:29Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.4/atmos_1.215.0-rc.4_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.4","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.4","body":"<details>\n  <summary>feat: Add GitHub Actions format to atmos auth env @osterman (#1984)</summary>\n## what\n\n- Added `--format=github` option to `atmos auth env` command\n- Added `--output` flag for explicit file output (appends mode)\n- Automatically detects `$GITHUB_ENV` environment variable when using github format\n- Supports single-line values as `KEY=value` and multiline values with heredoc syntax\n\n## why\n\nThis eliminates the need for complex shell pipelines like `atmos auth env ... | grep \"^export \" | sed 's/^export //' >> $GITHUB_ENV`. Users can now directly output to GitHub Actions `$GITHUB_ENV` file with proper formatting and multiline value handling.\n\n## references\n\nCloses issue related to GitHub Actions integration workflow simplification.\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * GitHub Actions format for `atmos auth env`: Export credentials directly to $GITHUB_ENV with `--format=github`\n  * New `--output-file` flag to redirect output to a file\n  * Automatic $GITHUB_ENV detection when using GitHub format without explicit output file specification\n\n* **Documentation**\n  * Updated CLI help and documentation to reflect new format and flag options\n  * Added blog post about GitHub Actions format integration\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>Add environment specification for Homebrew bump action @goruha (#2289)</summary>\n## what\r\n* Add environment specification for Homebrew bump action\r\n\r\n## why\r\n* Reduce secrets visibility \r\n\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated release infrastructure configuration for deployment automation.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix: MCP server env block not applied to auth setup; consolidate env primitives in pkg/env and pkg/auth @aknysh (#2291)</summary>\n## what\n\n- **Bug fix:** External MCP servers configured with both `identity:` and an `env:` block containing `ATMOS_*` variables (e.g. `ATMOS_PROFILE`, `ATMOS_CLI_CONFIG_PATH`, `ATMOS_BASE_PATH`) failed auth setup with `identity not found`. The parent's auth manager was built once from `os.Environ()` and never saw the server's `env:` block.\n- **Architectural cleanup driven by review feedback:**\n  - New foundational primitive `env.SetWithRestore` in `pkg/env` (atmos already has a dedicated env package; four other local save/set/restore variants exist and should consolidate to this in a follow-up).\n  - New high-level primitive `auth.CreateAndAuthenticateManagerWithEnvOverrides` in `pkg/auth` that delegates env mutation to `pkg/env` and composes `cfg.InitCliConfig` + `auth.CreateAndAuthenticateManagerWithAtmosConfig`.\n  - Thin MCP-specific adapter `mcpclient.ScopedAuthProvider` (~85 lines) that implements a new `PerServerAuthProvider` interface so `WithAuthManager` dispatches per-server.\n  - **Canonical Atmos env-var namespace constants** (`AtmosEnvVarNamespace`, `AtmosEnvVarPrefix`) added to `pkg/config/const.go` with build-time invariant tests. Migrated five hardcoded `\\\"ATMOS\\\"` / `\\\"ATMOS_\\\"` literals scattered across `cmd/root.go`, `cmd/auth_validate.go`, `pkg/auth`, and `pkg/ai/agent/codexcli` to use them.\n- **Result for users:** any external MCP server can now define `ATMOS_PROFILE` (or any other `ATMOS_*` variable) in its `env:` block and have it influence identity resolution — including configurations that run `atmos mcp start` itself as an external MCP server (the original report).\n\n## why\n\n- The auth manager was being constructed once at command startup using the parent's `os.Environ()`. Server `env:` blocks were only applied to the spawned subprocess via `cmd.Env`, so the parent's identity lookup ran against the *default* profile and never saw `ATMOS_PROFILE: managers` (or any other override). The user's only workaround was exporting the variable in the shell before running atmos.\n- The bug surfaces most visibly when a user configures `atmos mcp start` itself as an external MCP server (the original report), but it affects **any** external MCP server with both `identity:` and `env: ATMOS_*: ...`.\n- The fix lives entirely on the client side. The Atmos MCP server (`cmd/mcp/server`) was already correct: when spawned as a subprocess it inherits the merged env (`os.Environ()` + `env:` block) and `cfg.InitCliConfig` reads `ATMOS_*` from there.\n- **Why the architectural cleanup:** review feedback flagged that (a) putting per-command auth factories in `cmd/` is a slippery slope, (b) `pkg/auth` shouldn't re-implement env mutation when `pkg/env` already exists, and (c) defining what counts as an Atmos env variable inside any specific subsystem is the wrong layering. Each round of feedback pushed the primitives down to where they belong, and the result is significantly less code with cleaner layering.\n\n## layering after this PR\n\n\\`\\`\\`\npkg/config       ← AtmosEnvVarNamespace / AtmosEnvVarPrefix (single source of truth)\npkg/env          ← SetWithRestore (foundational env primitive, no policy)\n  ↑\npkg/auth         ← CreateAndAuthenticateManagerWithEnvOverrides (composes pkg/env + cfg.InitCliConfig + auth)\n  ↑\npkg/mcp/client   ← ScopedAuthProvider (thin MCP adapter, ~85 lines)\n  ↑\ncmd/mcp/client,  ← one-line consumers, zero auth-factory code\ncmd/ai\n\\`\\`\\`\n\n## test coverage\n\n100% on every new function:\n- \\`pkg/env/restore.go\\` → \\`SetWithRestore\\` (incl. setenv-error branch via injectable hook)\n- \\`pkg/auth/manager_env_overrides.go\\` → \\`CreateAndAuthenticateManagerWithEnvOverrides\\` (incl. env-hook error branch via injectable hook), \\`filterAtmosOverrides\\` (table-driven)\n- \\`pkg/mcp/client/scoped_auth.go\\` → \\`NewScopedAuthProvider\\`, \\`ForServer\\`, \\`PrepareShellEnvironment\\`\n- \\`pkg/mcp/client/session.go\\` → \\`WithAuthManager\\` (incl. per-server dispatch branch)\n- \\`cmd/mcp/client/start_options.go\\` → \\`buildAuthOption\\`, \\`mcpServersNeedAuth\\`\n- \\`cmd/ai/init.go\\` → \\`resolveAuthProvider\\`\n- \\`pkg/config/const_test.go\\` → invariant tests for the canonical constants\n\n## references\n\n- closes #2283\n- See \\`docs/fixes/2026-04-06-mcp-server-env-not-applied-to-auth-setup.md\\` for full root-cause analysis, the fixed flow diagram, the test plan, and a follow-up consolidation note for the four pre-existing local save/restore env helpers (\\`internal/exec.setEnvVarsWithRestore\\`, \\`pkg/auth/cloud/gcp.PreserveEnvironment/RestoreEnvironment\\`, \\`pkg/telemetry.PreserveCIEnvVars/RestoreCIEnvVars\\`, \\`pkg/auth/identities/aws.setupAWSEnv\\`) that should migrate to \\`env.SetWithRestore\\` in a separate PR.\n- Related: \\`docs/fixes/2026-03-25-describe-affected-auth-identity-not-used.md\\` (another auth-context propagation fix in a different code path).\n- Related PRD: \\`docs/prd/atmos-mcp-integrations.md\\` (overall MCP client architecture).\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Per-server authentication scoping for MCP so each server can use its own ATMOS env during auth.\n  * Canonical ATMOS env namespace/prefix and safer env-override handling during auth setup.\n\n* **Bug Fixes**\n  * MCP server ATMOS env values are now applied during authentication setup.\n  * Clearer error mapping when per-server auth is unavailable.\n\n* **Documentation**\n  * Added doc describing the auth env propagation fix and behavior.\n\n* **Tests**\n  * Extensive unit tests for per-server auth, env overrides/restoration, and related flows.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":3},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/305883337","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/305883337/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/305883337/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.3","id":305883337,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SO2jJ","tag_name":"v1.215.0-rc.3","target_commitish":"main","name":"v1.215.0-rc.3","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-07T00:38:40Z","updated_at":"2026-04-07T01:24:41Z","published_at":"2026-04-07T01:24:41Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440504","id":390440504,"node_id":"RA_kwDOEW4XoM4XRaY4","name":"atmos_1.215.0-rc.3_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":207805824,"digest":"sha256:ecf19ec6fecb61fccac437132403f2f7afc1091b151d31e94740b3bc6f7f964e","download_count":1,"created_at":"2026-04-07T01:23:41Z","updated_at":"2026-04-07T01:23:48Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440493","id":390440493,"node_id":"RA_kwDOEW4XoM4XRaYt","name":"atmos_1.215.0-rc.3_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194823922,"digest":"sha256:a99576ecf69ec97bf42d12415f17185714d516eb3330a9107c5878ce487cc56f","download_count":1,"created_at":"2026-04-07T01:23:39Z","updated_at":"2026-04-07T01:23:45Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440398","id":390440398,"node_id":"RA_kwDOEW4XoM4XRaXO","name":"atmos_1.215.0-rc.3_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":202277036,"digest":"sha256:4aefedad08dec7b4fe94c2eb1339a6ead4f1bf4fdec1f53d80dd5ffa7d41acd2","download_count":1,"created_at":"2026-04-07T01:23:32Z","updated_at":"2026-04-07T01:23:39Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440397","id":390440397,"node_id":"RA_kwDOEW4XoM4XRaXN","name":"atmos_1.215.0-rc.3_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187826348,"digest":"sha256:55da5a670231d114118c16cbc7ef517d0ef30727b8b536d44d91b3ee4e41cfbc","download_count":1,"created_at":"2026-04-07T01:23:32Z","updated_at":"2026-04-07T01:23:41Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440479","id":390440479,"node_id":"RA_kwDOEW4XoM4XRaYf","name":"atmos_1.215.0-rc.3_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188846242,"digest":"sha256:6632d16b3ceaf65fdb603c5e40e72fc5ba5679cefd5f749bfac49ca92de5c7a1","download_count":1,"created_at":"2026-04-07T01:23:38Z","updated_at":"2026-04-07T01:23:44Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440528","id":390440528,"node_id":"RA_kwDOEW4XoM4XRaZQ","name":"atmos_1.215.0-rc.3_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":203083938,"digest":"sha256:b3c91c8ceb7ad71d520b0239070c20f5d4ab55cab83794668e224f9e40981087","download_count":9,"created_at":"2026-04-07T01:23:44Z","updated_at":"2026-04-07T01:23:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440396","id":390440396,"node_id":"RA_kwDOEW4XoM4XRaXM","name":"atmos_1.215.0-rc.3_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":189071522,"digest":"sha256:8a0e8764eca579e799707ab58c0202cb166ed2a5d198416694c00039dfb3a7db","download_count":1,"created_at":"2026-04-07T01:23:32Z","updated_at":"2026-04-07T01:23:37Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440489","id":390440489,"node_id":"RA_kwDOEW4XoM4XRaYp","name":"atmos_1.215.0-rc.3_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":188612770,"digest":"sha256:420f30b4b8236bd2789db7e672ba0ae8bfaf8a2c55bf542bcd30c8dae25be04f","download_count":1,"created_at":"2026-04-07T01:23:39Z","updated_at":"2026-04-07T01:23:45Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440561","id":390440561,"node_id":"RA_kwDOEW4XoM4XRaZx","name":"atmos_1.215.0-rc.3_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:09739c2db146920929cc7b9ddc0dcc8fc40f2ca9fa1e03a9f0fa8687e9068167","download_count":1,"created_at":"2026-04-07T01:23:48Z","updated_at":"2026-04-07T01:23:48Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440536","id":390440536,"node_id":"RA_kwDOEW4XoM4XRaZY","name":"atmos_1.215.0-rc.3_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":192906240,"digest":"sha256:50fbeac27945f7bf861797b976460e98b2d03d0f239997e37c45eb6637d52346","download_count":1,"created_at":"2026-04-07T01:23:45Z","updated_at":"2026-04-07T01:23:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440535","id":390440535,"node_id":"RA_kwDOEW4XoM4XRaZX","name":"atmos_1.215.0-rc.3_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":206560768,"digest":"sha256:209b5d7a701b27a800ecfb72aeb666e630d62f6e87b49b0a48e6cef32fba9f59","download_count":1,"created_at":"2026-04-07T01:23:45Z","updated_at":"2026-04-07T01:23:51Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/390440395","id":390440395,"node_id":"RA_kwDOEW4XoM4XRaXL","name":"atmos_1.215.0-rc.3_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":189884928,"digest":"sha256:20c1b39cd09859ad3c083ac09ebd60abb57780f9acd927e6c488059beae1d32d","download_count":1,"created_at":"2026-04-07T01:23:32Z","updated_at":"2026-04-07T01:23:39Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.3/atmos_1.215.0-rc.3_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.3","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.3","body":"<details>\n  <summary>feat: AWS Security & Compliance — finding-to-code mapping with AI remediation @aknysh (#2282)</summary>\n## what\r\n\r\n- Add `atmos aws security analyze` — fetch security findings from AWS Security Hub, map them to Atmos components and stacks via resource tags, and generate structured remediation reports\r\n- Add `atmos aws compliance report` — generate compliance posture reports against industry frameworks (CIS AWS, PCI-DSS, SOC2, HIPAA, NIST) with pass/fail scoring\r\n- Add finding-to-code mapping pipeline with 7 strategies: `finding-tag` (exact), `tag-api` (exact), `context-tags` (high), `account-map` (low), `ecr-repo` (low), `naming-convention` (low), `resource-type` (low)\r\n- Add optional AI-powered remediation via `--ai` flag — multi-turn tool analysis reads component source and stack config, generates root cause analysis, specific code changes, stack YAML changes, deploy commands, risk assessment\r\n- Add AI finding deduplication (same title+component+stack analyzed once) and retry with exponential backoff for transient API errors\r\n- Add 4 output formats: Markdown (terminal), JSON (CI/CD), YAML, CSV\r\n- Add Atmos Auth integration via `identity` config field for targeting Security Hub delegated admin accounts\r\n- Add `--stack`, `--component`, `--severity`, `--source`, `--framework`, `--format`, `--file`, `--max-findings`, `--no-group`, `--region`, `--identity` flags\r\n- Add AI tools: `atmos_list_findings`, `atmos_describe_finding`, `atmos_analyze_finding`, `atmos_compliance_report`\r\n- Add example: `examples/aws-security-compliance/`\r\n- Add Docusaurus docs for all commands and configuration\r\n- Add blog post with production testing results\r\n\r\n## why\r\n\r\nReviewing AWS security findings today requires navigating multiple AWS console pages, cross-referencing resources with Terraform code, and manually figuring out which configuration caused the issue. This is slow, error-prone, and requires deep AWS + Terraform expertise.\r\n\r\nAtmos owns the component-to-stack relationship, so it can trace a security finding on an AWS resource all the way back to the exact Terraform code and stack configuration that created it — and generate a targeted fix.\r\n\r\nThe key differentiator vs AWS MCP security servers: MCP servers return raw findings but have no concept of Atmos stacks, components, or Terraform source code. Our implementation maps findings to IaC and generates specific remediation with deploy commands.\r\n\r\n## See It in Action\r\n\r\nTested against a multi-account AWS organization (11 accounts, Security Hub delegated admin, 500 findings, **97.2% mapped** to Atmos components).\r\n\r\n### 1. Security findings mapped to components\r\n\r\n```\r\n$ atmos aws security analyze --stack plat-use2-dev --component rds/example\r\n\r\nℹ Fetching security findings...\r\nℹ Mapping 500 findings to Atmos components...\r\nℹ Filtered to 4 findings matching stack=\"plat-use2-dev\" component=\"rds/example\"\r\n\r\n# Security Report: plat-use2-dev / rds/example\r\n\r\nFindings: 4 (1 CRITICAL, 3 HIGH)\r\n\r\n## CRITICAL Findings (1)\r\n\r\n### 1. Security groups should not allow unrestricted access to ports with high risk\r\n\r\n| Field          | Value                                                        |\r\n|----------------|--------------------------------------------------------------|\r\n| **Severity**   | CRITICAL                                                     |\r\n| **Source**     | security-hub (aws-foundational-security-best-practices/1.0)  |\r\n| **Resource**   | arn:aws:ec2:us-east-2:***:security-group/sg-***              |\r\n| **Component**  | rds/example                                                  |\r\n| **Stack**      | plat-use2-dev                                                |\r\n| **Confidence** | exact                                                        |\r\n| **Mapped By**  | finding-tag                                                  |\r\n\r\nResource Tags:\r\n• atmos_stack = plat-use2-dev\r\n• atmos_component = rds/example\r\n• terraform_component = rds\r\n• Name = acme-plat-use2-dev-example-postgres-db\r\n• Namespace = acme, Tenant = plat, Environment = use2, Stage = dev\r\n\r\n## Summary\r\n| Severity  | Count | Mapped | Unmapped |\r\n|-----------|-------|--------|----------|\r\n| CRITICAL  | 1     | 1      | 0        |\r\n| HIGH      | 3     | 3      | 0        |\r\n| **Total** | **4** | **4**  | **0**    |\r\n```\r\n\r\n### 2. AI-powered remediation (`--ai`)\r\n\r\n```\r\n$ atmos aws security analyze --stack plat-use2-dev --component rds/example --ai\r\n\r\nℹ Analyzing findings with AI...\r\n\r\n✓ AI analysis complete — Security Analysis: rds/example in plat-use2-dev\r\n\r\n## Findings Breakdown\r\n\r\n### EC2.18: Unrestricted Ingress on Unauthorized Port (HIGH)\r\nPort 5432 (PostgreSQL) is open to 0.0.0.0/0. The likely cause is\r\nallowed_cidr_blocks being set to an overly permissive value.\r\n\r\n### EC2.13: Unrestricted Ingress on Port 22/SSH (HIGH)\r\n⚠️ Port 22 has no business being on an RDS security group. This strongly\r\nsuggests an out-of-band manual change in the AWS Console — drift from IaC.\r\n\r\n## Root Cause (Common Thread)\r\nBoth findings stem from var.allowed_cidr_blocks being set too permissively,\r\ncompounded by possible out-of-band drift.\r\n\r\n## Priority Actions\r\n1. Remove the port-22 inbound rule manually (out-of-band drift)\r\n2. Update catalog/rds/example.yaml:\r\n     allowed_cidr_blocks: []\r\n     publicly_accessible: false\r\n     use_private_subnets: true\r\n3. Add Terraform validation guards:\r\n     validation {\r\n       condition     = !contains(var.allowed_cidr_blocks, \"0.0.0.0/0\")\r\n       error_message = \"allowed_cidr_blocks must not contain 0.0.0.0/0.\"\r\n     }\r\n4. Plan and apply:\r\n     atmos terraform plan rds/example -s plat-use2-dev\r\n     atmos terraform apply rds/example -s plat-use2-dev\r\n\r\n## Risk Assessment\r\n| Finding              | Risk   | Note                                       |\r\n|----------------------|--------|--------------------------------------------|\r\n| EC2.18 (port 5432)   | Medium | Removing rule breaks direct DB connections |\r\n| EC2.13 (port 22/SSH) | Low    | No RDS traffic should depend on SSH        |\r\n```\r\n\r\n### 3. Compliance report\r\n\r\n```\r\n$ atmos aws compliance report\r\n\r\n# Compliance Report: CIS AWS Foundations Benchmark\r\n\r\n## Score: 35/42 Controls Passing (83%)\r\n\r\n### Failing Controls\r\n| Control      | Title                                                                 | Severity |\r\n|--------------|-----------------------------------------------------------------------|----------|\r\n| Config.1     | AWS Config should be enabled with service-linked role                 | CRITICAL |\r\n| EC2.14       | Security groups should not allow ingress from 0.0.0.0/0 to port 3389  | HIGH     |\r\n| EC2.13       | Security groups should not allow ingress from 0.0.0.0/0 to port 22    | HIGH     |\r\n| S3.1         | S3 buckets should have block public access settings enabled           | MEDIUM   |\r\n| EC2.6        | VPC flow logging should be enabled in all VPCs                        | MEDIUM   |\r\n| IAM.17       | Ensure IAM password policy expires passwords within 90 days           | LOW      |\r\n| CloudTrail.7 | Ensure S3 access logging on CloudTrail S3 bucket                      | LOW      |\r\n```\r\n\r\n### 4. Compliance report with AI (`--ai`)\r\n\r\n```\r\n$ atmos aws compliance report --ai\r\n\r\n✓ AI analysis complete — CIS Foundations Benchmark\r\n\r\n## Overall Status: 🟡 83% Compliant (35/42 controls passing)\r\n\r\n## 🚨 Priority Issues (Fix First)\r\n\r\n### CRITICAL\r\n| Control  | Issue                                  | Action                             |\r\n|----------|----------------------------------------|------------------------------------|\r\n| Config.1 | AWS Config not enabled or missing role | Enable in all regions, attach role |\r\n\r\n### HIGH\r\n| Control | Issue                              | Action                                  |\r\n|---------|------------------------------------|-----------------------------------------|\r\n| EC2.14  | RDP (port 3389) open to 0.0.0.0/0 | Restrict to known IP ranges or VPN       |\r\n| EC2.13  | SSH (port 22) open to 0.0.0.0/0   | Use SSM Session Manager instead of SSH   |\r\n\r\n## 🟠 Medium: S3.1 (Block Public Access), EC2.6 (VPC Flow Logs)\r\n## 🟢 Low: IAM.17 (Password policy), CloudTrail.7 (S3 access logging)\r\n\r\n## Next Steps\r\n1. Lock down security groups for ports 22/3389\r\n2. Enable AWS Config — also detects future drift\r\n3. Run `atmos terraform apply` on security-groups, vpc, config components\r\n4. Re-run this report to verify score improves\r\n```\r\n\r\n## New CLI Commands\r\n\r\n### `atmos aws security analyze`\r\n\r\nFetches findings from Security Hub, maps them to Atmos components via resource tags (7 mapping strategies with confidence levels), and renders reports in 4 formats. Post-mapping `--stack` and `--component` filters narrow results after mapping. With `--ai`, the AI reads component source code and stack config via multi-turn tools to generate specific remediation.\r\n\r\n### `atmos aws compliance report`\r\n\r\nQueries Security Hub enabled standards, counts total controls via `ListSecurityControlDefinitions`, and computes pass/fail scores. Supports `--framework` filter for CIS AWS, PCI-DSS, SOC2, HIPAA, NIST. With `--ai`, generates prioritized remediation for each failing control.\r\n\r\n### Configuration\r\n\r\n```yaml\r\naws:\r\n  security:\r\n    enabled: true\r\n    identity: \"security-readonly\"  # Atmos Auth → Security Hub account\r\n    region: \"us-east-2\"            # Aggregation region\r\n    max_findings: 500\r\n    tag_mapping:\r\n      stack_tag: \"atmos:stack\"\r\n      component_tag: \"atmos:component\"\r\n```\r\n\r\n### Example\r\n\r\nSee [`examples/aws-security-compliance/`](https://github.com/cloudposse/atmos/tree/aknysh/atmos-ai-auth-compliance-1/examples/aws-security-compliance) for a complete configuration with auth, tag mapping, AI provider, and all commands.\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/atmos-aws-security-compliance.md`\r\n- Blog: `website/blog/2026-04-03-aws-security-compliance.mdx`\r\n- Example: `examples/aws-security-compliance/`\r\n- Docs: `website/docs/cli/commands/aws/security/`, `website/docs/cli/commands/aws/compliance/`\r\n- Config: `website/docs/cli/configuration/aws/security.mdx`\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n# Release Notes\n\n* **New Features**\n  * AWS Security Hub integration with automatic mapping of findings to Atmos components and stacks\n  * Compliance reporting with support for CIS-AWS, PCI-DSS, SOC2, HIPAA, and NIST frameworks\n  * AI-powered remediation analysis using `--ai` flag for structured guidance\n  * Multiple output formats (Markdown, JSON, YAML, CSV) for security and compliance reports\n  * Configuration schema for AWS security settings, tag mapping, and frameworks\n\n* **Documentation**\n  * Added comprehensive guides for `atmos aws security analyze` and `atmos aws compliance report` commands\n  * Added AWS configuration documentation for security settings and tag-based component mapping\n  * Added blog post and examples demonstrating end-to-end AWS security workflows\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/305500988","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/305500988/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/305500988/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.2","id":305500988,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SNZM8","tag_name":"v1.215.0-rc.2","target_commitish":"main","name":"v1.215.0-rc.2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-05T02:40:44Z","updated_at":"2026-04-06T01:05:47Z","published_at":"2026-04-06T01:05:47Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637089","id":389637089,"node_id":"RA_kwDOEW4XoM4XOWPh","name":"atmos_1.215.0-rc.2_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199624960,"digest":"sha256:119f7752987a3f6960a0f85c24e108042eed454c0fd9f31378df683e662aac6d","download_count":1,"created_at":"2026-04-06T01:03:54Z","updated_at":"2026-04-06T01:04:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637131","id":389637131,"node_id":"RA_kwDOEW4XoM4XOWQL","name":"atmos_1.215.0-rc.2_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187351090,"digest":"sha256:c0e27d152ed2b75b63a49728b497af817ad20051368a0857a3d4e082adb1601a","download_count":1,"created_at":"2026-04-06T01:04:00Z","updated_at":"2026-04-06T01:04:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637068","id":389637068,"node_id":"RA_kwDOEW4XoM4XOWPM","name":"atmos_1.215.0-rc.2_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194281644,"digest":"sha256:0ef0d35353ecf3dfa4da1ab2936db2b48eb3c0a729b3a4dd0e7244837aad14c9","download_count":1,"created_at":"2026-04-06T01:03:47Z","updated_at":"2026-04-06T01:04:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637087","id":389637087,"node_id":"RA_kwDOEW4XoM4XOWPf","name":"atmos_1.215.0-rc.2_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180617388,"digest":"sha256:5e00a99ab8d135e31fa65d36316cae2b1714b7c7e024c011fd927bdc59270850","download_count":1,"created_at":"2026-04-06T01:03:54Z","updated_at":"2026-04-06T01:03:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637065","id":389637065,"node_id":"RA_kwDOEW4XoM4XOWPJ","name":"atmos_1.215.0-rc.2_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181190818,"digest":"sha256:558fc54bdd2fc1746f0fc84bf76785e28c73048f5a7481b4dd2ca9ca67deb7ba","download_count":1,"created_at":"2026-04-06T01:03:47Z","updated_at":"2026-04-06T01:03:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637066","id":389637066,"node_id":"RA_kwDOEW4XoM4XOWPK","name":"atmos_1.215.0-rc.2_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195088546,"digest":"sha256:4179c63301a45e1b8b4c2a0c7a705da02019a2413a4b05e18233ef58901f90aa","download_count":7,"created_at":"2026-04-06T01:03:47Z","updated_at":"2026-04-06T01:03:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637137","id":389637137,"node_id":"RA_kwDOEW4XoM4XOWQR","name":"atmos_1.215.0-rc.2_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181338274,"digest":"sha256:6ec9df799b7b50e6c96c5d800a68472d442a268ab9a67ec2ff4429d933d68e7e","download_count":1,"created_at":"2026-04-06T01:04:00Z","updated_at":"2026-04-06T01:04:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637069","id":389637069,"node_id":"RA_kwDOEW4XoM4XOWPN","name":"atmos_1.215.0-rc.2_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181403810,"digest":"sha256:1ce40feb7ca84eb9ec491db42d83b2ee1ad72c42d0938b35660de0bbcdb9fe96","download_count":1,"created_at":"2026-04-06T01:03:47Z","updated_at":"2026-04-06T01:03:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637158","id":389637158,"node_id":"RA_kwDOEW4XoM4XOWQm","name":"atmos_1.215.0-rc.2_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:e3e14580ad6971580fcbe45246ee36a8604fb35466d91a5d04e08045f57afc7f","download_count":1,"created_at":"2026-04-06T01:04:06Z","updated_at":"2026-04-06T01:04:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637128","id":389637128,"node_id":"RA_kwDOEW4XoM4XOWQI","name":"atmos_1.215.0-rc.2_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":185003520,"digest":"sha256:0ef29bdad8b45a2f52db59cb288b336b8f1b6929a47def229d074edaccf36c9d","download_count":1,"created_at":"2026-04-06T01:04:00Z","updated_at":"2026-04-06T01:04:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637107","id":389637107,"node_id":"RA_kwDOEW4XoM4XOWPz","name":"atmos_1.215.0-rc.2_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198438912,"digest":"sha256:1a12b79029baf778e3f6af4c7d4a282d6d2006f7efccee28d1feefe82541178d","download_count":3,"created_at":"2026-04-06T01:03:55Z","updated_at":"2026-04-06T01:04:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/389637157","id":389637157,"node_id":"RA_kwDOEW4XoM4XOWQl","name":"atmos_1.215.0-rc.2_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182605824,"digest":"sha256:b6d15384ecb31017af35f6c7155f77f830761bb775f78e37f7aa5f9fed47d923","download_count":1,"created_at":"2026-04-06T01:04:06Z","updated_at":"2026-04-06T01:04:11Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.2/atmos_1.215.0-rc.2_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.2","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.2","body":"## 🚀 Enhancements\n\n<details>\n  <summary>fix: suppress JSON output for describe affected --upload @osterman (#2284)</summary>\n## what\n\n- When `--upload` is used with `atmos describe affected`, the full affected stacks JSON is no longer dumped to the console by default\n- Pass `--verbose` to see the JSON output, or `--file` to write it to a file\n- The upload success message now includes a count of affected components (e.g. \"Uploaded 12 affected component(s) to Atmos Pro\")\n\n## why\n\n- The affected stacks JSON payload can be very large and overwhelms the console when the primary intent is just to upload\n- Users who need the output can opt in with `--verbose` or `--file`\n- The summary count provides useful feedback without the noise\n\n## references\n\nN/A\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Suppressed the large \"Affected components and stacks\" console output during uploads unless verbose mode or file output is requested.\n  * Improved the upload success message to include the number of affected components uploaded.\n\n* **Tests**\n  * Added unit tests covering upload/output behavior and CI event handling to validate verbose, file-output, and upload scenarios.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/305192013","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/305192013/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/305192013/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.1","id":305192013,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SMNxN","tag_name":"v1.215.0-rc.1","target_commitish":"main","name":"v1.215.0-rc.1","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-03T16:24:44Z","updated_at":"2026-04-04T00:58:02Z","published_at":"2026-04-04T00:58:02Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388329962","id":388329962,"node_id":"RA_kwDOEW4XoM4XJXHq","name":"atmos_1.215.0-rc.1_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199624960,"digest":"sha256:0636928ff20afb94059091e61f7b4367c5bd48ca31a5028b13617fa3b3aa4659","download_count":5,"created_at":"2026-04-04T00:56:46Z","updated_at":"2026-04-04T00:56:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330002","id":388330002,"node_id":"RA_kwDOEW4XoM4XJXIS","name":"atmos_1.215.0-rc.1_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187351090,"digest":"sha256:a6536b2ceb4ba1081682b0b4dbd92d28d8e080ef314c2f5e66ac6a765a8951f2","download_count":4,"created_at":"2026-04-04T00:56:53Z","updated_at":"2026-04-04T00:56:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330043","id":388330043,"node_id":"RA_kwDOEW4XoM4XJXI7","name":"atmos_1.215.0-rc.1_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194281644,"digest":"sha256:87f7bf45f4191ea97ee18faee68eeb4690f77fe16e3eef957cabe978484495ee","download_count":4,"created_at":"2026-04-04T00:57:00Z","updated_at":"2026-04-04T00:57:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330042","id":388330042,"node_id":"RA_kwDOEW4XoM4XJXI6","name":"atmos_1.215.0-rc.1_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180617388,"digest":"sha256:bb4fe61f3929b9e8ffb0483ae5af2fdc59847d3000cca6cd55282e2dc4ca1fa8","download_count":4,"created_at":"2026-04-04T00:57:00Z","updated_at":"2026-04-04T00:57:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388329960","id":388329960,"node_id":"RA_kwDOEW4XoM4XJXHo","name":"atmos_1.215.0-rc.1_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181190818,"digest":"sha256:1b365acf2aaff069d18281370553b0483e904393fb11a8e99ad2f3f611970ad9","download_count":4,"created_at":"2026-04-04T00:56:46Z","updated_at":"2026-04-04T00:56:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330001","id":388330001,"node_id":"RA_kwDOEW4XoM4XJXIR","name":"atmos_1.215.0-rc.1_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195088546,"digest":"sha256:34c83b05810da366b83b6d9ee36905911fc70f4dc795467dce41b36492b9c124","download_count":15,"created_at":"2026-04-04T00:56:53Z","updated_at":"2026-04-04T00:56:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388329961","id":388329961,"node_id":"RA_kwDOEW4XoM4XJXHp","name":"atmos_1.215.0-rc.1_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181338274,"digest":"sha256:04efdb4a367c3802824e2030b376eb9a6651fcf167da167df03f1ce5362087b4","download_count":4,"created_at":"2026-04-04T00:56:46Z","updated_at":"2026-04-04T00:56:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388329959","id":388329959,"node_id":"RA_kwDOEW4XoM4XJXHn","name":"atmos_1.215.0-rc.1_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181403810,"digest":"sha256:718888e9560d5cc8499b803673ef82e7127600f67ba223159c39c3bace0651fd","download_count":4,"created_at":"2026-04-04T00:56:46Z","updated_at":"2026-04-04T00:56:54Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330053","id":388330053,"node_id":"RA_kwDOEW4XoM4XJXJF","name":"atmos_1.215.0-rc.1_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:f5c290ded31e82144c62c923ac99a27658868df8d12187600b66e99486558dff","download_count":2,"created_at":"2026-04-04T00:57:00Z","updated_at":"2026-04-04T00:57:01Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330005","id":388330005,"node_id":"RA_kwDOEW4XoM4XJXIV","name":"atmos_1.215.0-rc.1_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":185003008,"digest":"sha256:6307c9e0d85250708847bd3d572c19b7028213e87d0417f5c9a3427abe7f1053","download_count":4,"created_at":"2026-04-04T00:56:54Z","updated_at":"2026-04-04T00:57:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330049","id":388330049,"node_id":"RA_kwDOEW4XoM4XJXJB","name":"atmos_1.215.0-rc.1_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198438912,"digest":"sha256:10e5ff189d0362ace78181aa0728b5eb12ca7891d6fbce19d7844af29437cbd0","download_count":4,"created_at":"2026-04-04T00:57:00Z","updated_at":"2026-04-04T00:57:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/388330003","id":388330003,"node_id":"RA_kwDOEW4XoM4XJXIT","name":"atmos_1.215.0-rc.1_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182605312,"digest":"sha256:fb2fc60949fdb0791cb5a94145100ddb240b6fbcdd8c934d524929a9fff4c328","download_count":3,"created_at":"2026-04-04T00:56:54Z","updated_at":"2026-04-04T00:57:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.1/atmos_1.215.0-rc.1_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.1","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.1","body":"## 🚀 Enhancements\n\n<details>\n  <summary>fix: provenance and syntax highlighting respect --no-color and pipe detection @osterman (#2281)</summary>\n## what\n\n- Provenance output (`describe component --provenance`) now strips ANSI color codes when stdout is piped or redirected, and respects `--no-color`\n- Syntax highlighting via `HighlightCodeWithConfig` also properly degrades when stdout is piped\n- Provenance output now routes through `data.Write()` instead of `fmt.Print()` for proper I/O channel handling\n\n## why\n\n- Provenance rendering used `lipgloss.NewStyle()` unconditionally without checking stdout TTY status, so ANSI escape codes leaked into piped/redirected output\n- `HighlightCodeWithConfig` checked `IsTTYSupportForStdout() || IsTTYSupportForStderr()` — since stderr remains a TTY when piping stdout, this always returned true and defeated pipe detection\n- `fmt.Print()` bypassed the data channel I/O layer, skipping secret masking\n\n## references\n\n- Follows the same stdout-only TTY check pattern used by list commands (`pkg/list/list_values.go`)\n- Mirrors `HighlightCodeWithConfig`'s precedence: `NoColor` wins, then `ForceColor`, then stdout TTY detection\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **Improvements**\n  * More precise color handling for provenance and code highlighting: honors NoColor/ForceColor and now detects stdout TTY only for consistent styling.\n  * Provenance rendering disables styling when color is off.\n  * Provenance stdout output now flows through the shared output path for more consistent display.\n\n* **Bug Fixes**\n  * Normalized spacing and newline placement around provenance legends and stack headers.\n\n* **Tests**\n  * Updated/added tests and golden snapshots to reflect whitespace, legend formatting, and color/no-color behaviors.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":1},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/304911569","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/304911569/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/304911569/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.215.0-rc.0","id":304911569,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SLJTR","tag_name":"v1.215.0-rc.0","target_commitish":"main","name":"v1.215.0-rc.0","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-02T17:30:35Z","updated_at":"2026-04-03T01:01:08Z","published_at":"2026-04-03T01:01:08Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463151","id":387463151,"node_id":"RA_kwDOEW4XoM4XGDfv","name":"atmos_1.215.0-rc.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199620864,"digest":"sha256:84159544d17cd9b17c0129e278302e87a8ea563c361336ae10830d5e42f625d5","download_count":4,"created_at":"2026-04-03T01:00:01Z","updated_at":"2026-04-03T01:00:11Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463256","id":387463256,"node_id":"RA_kwDOEW4XoM4XGDhY","name":"atmos_1.215.0-rc.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187351090,"digest":"sha256:a1084cba3e5f5700cf09a292d60d01e891cdfe4b964182b1a191581242107285","download_count":3,"created_at":"2026-04-03T01:00:07Z","updated_at":"2026-04-03T01:00:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463275","id":387463275,"node_id":"RA_kwDOEW4XoM4XGDhr","name":"atmos_1.215.0-rc.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194281644,"digest":"sha256:72e8b6bf23a9ae9aa2b889534f444a6e5eb3d87c262c509f098786c1f9334f0e","download_count":4,"created_at":"2026-04-03T01:00:08Z","updated_at":"2026-04-03T01:00:15Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463026","id":387463026,"node_id":"RA_kwDOEW4XoM4XGDdy","name":"atmos_1.215.0-rc.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180617388,"digest":"sha256:b8a7b3c5a06ce7f8f200c1fc08b198868396628de9a3748d7593526640f0ec68","download_count":4,"created_at":"2026-04-03T00:59:53Z","updated_at":"2026-04-03T01:00:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463142","id":387463142,"node_id":"RA_kwDOEW4XoM4XGDfm","name":"atmos_1.215.0-rc.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181190818,"digest":"sha256:dccd7414fbced4c49dd5592d93f14d841459e9cd12f679016287c85a0c14ac60","download_count":4,"created_at":"2026-04-03T01:00:00Z","updated_at":"2026-04-03T01:00:08Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463027","id":387463027,"node_id":"RA_kwDOEW4XoM4XGDdz","name":"atmos_1.215.0-rc.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195084450,"digest":"sha256:30ddabb00f8adcc639686d753b886b5579a6f3a19e94126c46123addb9dccc7a","download_count":8,"created_at":"2026-04-03T00:59:53Z","updated_at":"2026-04-03T01:00:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463154","id":387463154,"node_id":"RA_kwDOEW4XoM4XGDfy","name":"atmos_1.215.0-rc.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181338274,"digest":"sha256:a60188b9111829a2574d71320c2bd64c735e3e9adc05e08ef82e85b79d33c077","download_count":4,"created_at":"2026-04-03T01:00:01Z","updated_at":"2026-04-03T01:00:07Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463271","id":387463271,"node_id":"RA_kwDOEW4XoM4XGDhn","name":"atmos_1.215.0-rc.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181403810,"digest":"sha256:690e47345143fd78d5021d1fd38cf8c68d251ca094a0ee3df7c9d855730f753d","download_count":3,"created_at":"2026-04-03T01:00:08Z","updated_at":"2026-04-03T01:00:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463298","id":387463298,"node_id":"RA_kwDOEW4XoM4XGDiC","name":"atmos_1.215.0-rc.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:6595cee2ea671ad1a09bb6008d27ef1534e2298fa2e8d34e2893966d939ef8fe","download_count":2,"created_at":"2026-04-03T01:00:12Z","updated_at":"2026-04-03T01:00:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463024","id":387463024,"node_id":"RA_kwDOEW4XoM4XGDdw","name":"atmos_1.215.0-rc.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":185001984,"digest":"sha256:aca1874b654be5ba199bca232a9233b6500a9a973f829ab23bea3ddcc2987ebd","download_count":4,"created_at":"2026-04-03T00:59:53Z","updated_at":"2026-04-03T01:00:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463025","id":387463025,"node_id":"RA_kwDOEW4XoM4XGDdx","name":"atmos_1.215.0-rc.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198436864,"digest":"sha256:98835d7eaa06b4f27da9952ee989debe7af0e90dbbf9bf5a90e6ffde8d62ca35","download_count":3,"created_at":"2026-04-03T00:59:53Z","updated_at":"2026-04-03T01:00:01Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387463195","id":387463195,"node_id":"RA_kwDOEW4XoM4XGDgb","name":"atmos_1.215.0-rc.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182603776,"digest":"sha256:9c23b6146951775f26e2f068e0b3cabdc697f0801412f0b45011b061124ff82f","download_count":4,"created_at":"2026-04-03T01:00:02Z","updated_at":"2026-04-03T01:00:08Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.215.0-rc.0/atmos_1.215.0-rc.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.215.0-rc.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.215.0-rc.0","body":"* No changes\n"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/304806572","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/304806572/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/304806572/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.214.0","id":304806572,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SKvqs","tag_name":"v1.214.0","target_commitish":"main","name":"v1.214.0","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-04-02T17:30:35Z","updated_at":"2026-04-02T19:46:45Z","published_at":"2026-04-02T19:46:45Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206928","id":387206928,"node_id":"RA_kwDOEW4XoM4XFE8Q","name":"atmos_1.214.0_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199620864,"digest":"sha256:00dd99b910bf1c29a224ca1d4b6022e8dab45d631cb65b80a904c2c31809eb4a","download_count":11,"created_at":"2026-04-02T18:45:39Z","updated_at":"2026-04-02T18:45:44Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206749","id":387206749,"node_id":"RA_kwDOEW4XoM4XFE5d","name":"atmos_1.214.0_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187351090,"digest":"sha256:da01d0eb0a7b9fe8c3483ab150293d7fc630f2036ada4a5e4328a3538c64374b","download_count":51,"created_at":"2026-04-02T18:45:30Z","updated_at":"2026-04-02T18:45:37Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387207088","id":387207088,"node_id":"RA_kwDOEW4XoM4XFE-w","name":"atmos_1.214.0_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194281644,"digest":"sha256:17c21041daae82fe65f4aa6d5a9453915fde2d415ded22b5d9192b2b5c0862b5","download_count":2,"created_at":"2026-04-02T18:45:44Z","updated_at":"2026-04-02T18:45:51Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206751","id":387206751,"node_id":"RA_kwDOEW4XoM4XFE5f","name":"atmos_1.214.0_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180617388,"digest":"sha256:e947a8c182a1d4a30b52186268e4beb68ae9f1ea9c4b757e95c3aca63b8ef64d","download_count":2,"created_at":"2026-04-02T18:45:30Z","updated_at":"2026-04-02T18:45:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206752","id":387206752,"node_id":"RA_kwDOEW4XoM4XFE5g","name":"atmos_1.214.0_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181190818,"digest":"sha256:55bc2bcd688a7702e7dd93cc242cffae32e637f13668956826d7378cddad0e06","download_count":5,"created_at":"2026-04-02T18:45:30Z","updated_at":"2026-04-02T18:45:39Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206904","id":387206904,"node_id":"RA_kwDOEW4XoM4XFE74","name":"atmos_1.214.0_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":195084450,"digest":"sha256:763814b83feaa4487fd4f905838be2a37713e36cada1746ffc96a5dcf5438d05","download_count":28152,"created_at":"2026-04-02T18:45:38Z","updated_at":"2026-04-02T18:45:44Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206890","id":387206890,"node_id":"RA_kwDOEW4XoM4XFE7q","name":"atmos_1.214.0_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181338274,"digest":"sha256:884ceaf467caa9ab0df37b8f626ad6d47cb527af813fda7f88bfcf84069e2406","download_count":2,"created_at":"2026-04-02T18:45:37Z","updated_at":"2026-04-02T18:45:42Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206981","id":387206981,"node_id":"RA_kwDOEW4XoM4XFE9F","name":"atmos_1.214.0_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181403810,"digest":"sha256:d763f1fe2e57a40b5fdead0beda3cf914f51a6dfd8127457fc324900501a05f9","download_count":1194,"created_at":"2026-04-02T18:45:44Z","updated_at":"2026-04-02T18:45:49Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387207092","id":387207092,"node_id":"RA_kwDOEW4XoM4XFE-0","name":"atmos_1.214.0_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1030,"digest":"sha256:2b468a6777d875c2ffb2b1f5d8079fc8c746870e0d3e247873ba96fb9d7ae91a","download_count":148,"created_at":"2026-04-02T18:45:45Z","updated_at":"2026-04-02T18:45:45Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206961","id":387206961,"node_id":"RA_kwDOEW4XoM4XFE8x","name":"atmos_1.214.0_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":185001984,"digest":"sha256:bc5ba98dc300aa328e3bcb4dd0066d08f19b723568417f3e3aa77a5a63715d59","download_count":19,"created_at":"2026-04-02T18:45:43Z","updated_at":"2026-04-02T18:45:48Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206903","id":387206903,"node_id":"RA_kwDOEW4XoM4XFE73","name":"atmos_1.214.0_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198436864,"digest":"sha256:41b192c0ced1710bffbfeb416f432dfd1059243325c555d073a4f60c04639096","download_count":49,"created_at":"2026-04-02T18:45:38Z","updated_at":"2026-04-02T18:45:44Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/387206750","id":387206750,"node_id":"RA_kwDOEW4XoM4XFE5e","name":"atmos_1.214.0_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182603776,"digest":"sha256:875d32129ae3092098e3f736ee1f6f98c7c63bea4c320a171783dffc4c7b9f2b","download_count":6,"created_at":"2026-04-02T18:45:30Z","updated_at":"2026-04-02T18:45:37Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0/atmos_1.214.0_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.214.0","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.214.0","body":"<details>\r\n  <summary>feat: CLI AI providers — use Claude Code, Codex CLI, or Gemini CLI instead of API tokens @aknysh (#2280)</summary>\r\n\r\n## what\r\n\r\n- Add 3 new **CLI AI providers** that invoke locally installed AI tools as subprocesses: `claude-code`, `codex-cli`, `gemini-cli`\r\n- **MCP pass-through** for CLI providers — configured MCP servers are automatically passed to the CLI tool via its native config format\r\n- **ATMOS_* env var injection** for Codex CLI MCP servers (they don't inherit parent process env)\r\n- No API keys needed — CLI providers reuse the user's existing subscription (Claude Pro/Max, ChatGPT Plus/Pro, Google account free tier)\r\n\r\n### Available CLI Providers\r\n\r\n| Provider | Config Key | Binary | Auth | MCP Support |\r\n|---|---|---|---|---|\r\n| Claude Code | `claude-code` | `claude` | Claude Pro/Max subscription | Full |\r\n| OpenAI Codex | `codex-cli` | `codex` | ChatGPT Plus/Pro subscription | Full |\r\n| Gemini CLI | `gemini-cli` | `gemini` | Google account (free tier) | Blocked for personal accounts |\r\n\r\n### MCP Pass-Through\r\n\r\nEach provider uses its native config format:\r\n\r\n| Provider | Config Method | Approval Flag |\r\n|---|---|---|\r\n| Claude Code | `--mcp-config <temp-file>` | `--dangerously-skip-permissions` |\r\n| Codex CLI | Write to `~/.codex/config.toml` (backup/restore) | `--dangerously-bypass-approvals-and-sandbox` |\r\n| Gemini CLI | `.gemini/settings.json` in cwd | `--approval-mode auto_edit` |\r\n\r\n### Quick Start\r\n\r\n```yaml\r\nai:\r\n  enabled: true\r\n  default_provider: \"claude-code\"  # or \"codex-cli\" or \"gemini-cli\"\r\n  providers:\r\n    claude-code:\r\n      max_turns: 10\r\n```\r\n\r\n```bash\r\nbrew install --cask claude-code && claude auth login\r\natmos ai ask \"What did we spend on EC2 last month?\"\r\n```\r\n\r\n## See It in Action\r\n\r\n> All outputs below are from a real AWS account.\r\n\r\n### Claude Code — Security Posture\r\n\r\n```text\r\n$ atmos ai ask \"What is our security posture in us-east-2 region?\"\r\n\r\nℹ MCP servers configured: 8 (config: /tmp/atmos-mcp-config.json)\r\nℹ AI provider: claude-code\r\n👽 Thinking...\r\n\r\n  ## Security Posture Summary for us-east-2\r\n\r\n  ### ✅ Enabled Security Services (2/6)\r\n\r\n   GuardDuty - Fully operational\r\n    • Status: ENABLED\r\n    • Active data sources: CloudTrail, DNS Logs, VPC Flow Logs,\r\n      S3 Logs, EKS Audit Logs, RDS Login Events\r\n    • Current findings: None (clean)\r\n\r\n   Inspector - Partially enabled\r\n    • Status: ENABLED but no scan types active\r\n\r\n  ### ❌ Disabled Security Services (4/6)\r\n    1. IAM Access Analyzer - Not configured\r\n    2. Security Hub - Not enabled\r\n    3. Trusted Advisor - Error checking status\r\n    4. Macie - Not enabled\r\n\r\n  ### Key Recommendations\r\n   High Priority:\r\n    1. Enable Security Hub for centralized findings aggregation\r\n    2. Enable IAM Access Analyzer\r\n    3. Enable at least one Inspector scan type\r\n```\r\n\r\n### Codex CLI — EC2 Billing\r\n\r\n```text\r\n$ atmos ai ask \"What did we spend on EC2 last month in each region?\"\r\n\r\nℹ MCP servers configured: 8 (in ~/.codex/config.toml)\r\nℹ AI provider: codex-cli\r\n👽 Thinking...\r\n\r\n   For last month, I used the previous calendar month:\r\n   March 1, 2026 through April 1, 2026.\r\n\r\n   EC2 spend by region:\r\n    • us-east-2: $88.10\r\n\r\n   Cost Explorer returned only us-east-2 for Amazon Elastic Compute\r\n   Cloud - Compute, so that appears to be the only region with EC2\r\n   spend in that period.\r\n```\r\n\r\nBoth providers automatically selected the right MCP server and returned answers from real AWS data — no manual server selection needed.\r\n\r\n## why\r\n\r\n### Why run Claude Code through Atmos instead of the other way around?\r\n\r\nBoth directions work — you can start a Claude Code session and call Atmos inside it, or use Atmos to invoke Claude Code. Here's when each approach makes sense:\r\n\r\n#### Starting Claude Code → calling Atmos (via MCP server)\r\n\r\n```bash\r\nclaude\r\n# Then inside Claude Code: @atmos-expert \"list all stacks\"\r\n```\r\n\r\n**How it works:** Claude Code connects to the Atmos MCP server (`atmos mcp start`) and uses Atmos tools directly from the IDE.\r\n\r\n**Best for:**\r\n- Long interactive coding sessions where you need AI + infrastructure context\r\n- IDE-driven workflows (Claude Code in VS Code, Cursor, etc.)\r\n- When you want Claude Code's full toolset (file editing, bash, web search) alongside Atmos tools\r\n- Exploratory work — \"help me understand and modify this infrastructure\"\r\n\r\n**Limitations:**\r\n- Requires setting up the MCP server in your IDE config (`.claude/mcp.json`)\r\n- Only has access to native Atmos tools — no external AWS MCP servers (billing, security, IAM) unless you configure them separately in Claude Code's own MCP config\r\n- Auth credentials for AWS MCP servers must be configured manually in the IDE config\r\n\r\n#### Atmos → starting Claude Code (this PR)\r\n\r\n```bash\r\natmos ai ask \"What did we spend on EC2 last month?\"\r\n```\r\n\r\n**How it works:** Atmos invokes `claude -p` as a subprocess, passing MCP servers with auth credentials pre-configured.\r\n\r\n**Best for:**\r\n- Quick one-shot queries from the terminal (`atmos ai ask`)\r\n- When you need external MCP servers (AWS billing, security, IAM, CloudTrail) with automatic auth\r\n- CI-adjacent workflows — scripting AI analysis into your workflow\r\n- Multi-provider switching — same question to Claude Code, Codex, or Gemini\r\n- Teams that manage MCP servers centrally in `atmos.yaml` — one config, every developer gets the same tools\r\n\r\n**Key advantage — centralized MCP + auth orchestration:**\r\n\r\n```yaml\r\n# atmos.yaml — one config for the whole team\r\nmcp:\r\n  servers:\r\n    aws-billing:\r\n      command: uvx\r\n      args: [\"awslabs.billing-cost-management-mcp-server@latest\"]\r\n      identity: \"readonly\"   # Atmos Auth handles SSO → credentials automatically\r\n\r\nauth:\r\n  providers:\r\n    aws-sso:\r\n      kind: aws/iam-identity-center\r\n      start_url: \"https://your-org.awsapps.com/start\"\r\n  identities:\r\n    readonly:\r\n      kind: aws/permission-set\r\n      provider: aws-sso\r\n      principal:\r\n        permission_set: \"ReadOnlyAccess\"\r\n        account:\r\n          id: \"123456789012\"\r\n```\r\n\r\nWhen you run `atmos ai ask`, Atmos:\r\n1. Authenticates via SSO (once, cached)\r\n2. Generates MCP config with credential injection (`atmos auth exec -i readonly --`)\r\n3. Injects toolchain PATH so `uvx` is available\r\n4. Passes everything to Claude Code via `--mcp-config`\r\n5. Claude Code uses AWS MCP tools with real credentials — zero manual setup\r\n\r\nWith the \"Claude Code first\" approach, each developer would need to manually configure AWS credentials, MCP server paths, and toolchain binaries in their personal IDE config.\r\n\r\n#### Summary\r\n\r\n| | Claude Code → Atmos | Atmos → Claude Code |\r\n|---|---|---|\r\n| **Setup** | MCP server in IDE config | `atmos.yaml` (shared) |\r\n| **Auth** | Manual per-developer | Centralized via Atmos Auth |\r\n| **External MCP** | Manual config per tool | Automatic from `atmos.yaml` |\r\n| **Toolchain** | Must install `uvx` globally | Atmos Toolchain manages it |\r\n| **Best for** | IDE coding sessions | Terminal queries, team workflows |\r\n| **Multi-provider** | Claude only | Claude, Codex, Gemini |\r\n| **CI/CD** | Not practical | `atmos ai exec` with JSON output |\r\n\r\n**They're complementary, not competing.** Use Claude Code directly for coding sessions in your IDE. Use `atmos ai ask/chat` for quick infrastructure queries with centralized MCP + auth. Both can be configured in the same project.\r\n\r\n### Additional motivation\r\n\r\n- Many developers already have Claude Code or Codex installed with active subscriptions ($20-200/mo). CLI providers let them reuse that investment instead of purchasing separate API tokens.\r\n- CLI providers handle their own tool execution loop, which means they can use all their built-in tools (file search, code editing, web browsing) alongside MCP-provided AWS tools.\r\n- This completes the AI provider ecosystem: 7 API providers + 3 CLI providers = 10 total providers.\r\n\r\n## Key Findings During Implementation\r\n\r\n### Codex CLI\r\n- `-c` flag overrides do NOT register MCP servers as tools — must write to `~/.codex/config.toml`\r\n- `--full-auto` only auto-approves file writes, not MCP tool calls — need `--dangerously-bypass-approvals-and-sandbox`\r\n- JSONL output uses `item.type=\"agent_message\"` with `item.text` directly (not documented `\"message\"` with nested `content[]`)\r\n- MCP servers don't inherit parent env — `ATMOS_*` vars must be explicitly injected\r\n\r\n### Gemini CLI\r\n- MCP is blocked server-side for ALL personal Google accounts (`oauth-personal` auth) regardless of subscription tier\r\n- This is a Google infrastructure restriction (proxy `cloudcode-pa.googleapis.com` has MCP feature flag disabled)\r\n- The Atmos implementation is complete — MCP will work when Google enables it for personal accounts\r\n- Switching to API key auth enables MCP but loses the free-tier benefit (equivalent to existing `gemini` API provider)\r\n\r\n## New Files\r\n\r\n### Code\r\n- `pkg/ai/agent/claudecode/` — Claude Code CLI provider with MCP pass-through\r\n- `pkg/ai/agent/codexcli/` — OpenAI Codex CLI provider with `~/.codex/config.toml` backup/restore and ATMOS_* injection\r\n- `pkg/ai/agent/geminicli/` — Gemini CLI provider with `.gemini/settings.json` in cwd\r\n- `pkg/mcp/client/mcpconfig.go` — Shared MCP config generation (env uppercasing, PATH dedup, toolchain injection)\r\n\r\n### Documentation\r\n- **Blog post**: `website/blog/2026-04-01-ai-cli-providers.mdx`\r\n- **Example**: `examples/ai-claude-code/` — Complete example with AWS MCP servers and automatic auth\r\n- **PRD**: `docs/prd/atmos-ai-local-providers.md` (v1.6)\r\n- **Website docs updated**: `ai/ai.mdx`, `ai/troubleshooting.mdx`, `cli/configuration/ai/index.mdx`, `cli/configuration/ai/providers.mdx`, `cli/configuration/mcp/index.mdx`, `cli/commands/ai/ask.mdx`, `cli/commands/ai/exec.mdx`, `cli/commands/ai/usage.mdx`\r\n- **Roadmap**: 4 shipped milestones added to `ai-assistant` initiative\r\n\r\n### Tests\r\n- 40+ unit tests across all three CLI provider packages\r\n- Coverage: claudecode 63%, codexcli 72%, geminicli 66%, mcp/client 83%, base 88%\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/atmos-ai-local-providers.md`\r\n- Blog: `website/blog/2026-04-01-ai-cli-providers.mdx`\r\n- Example: `examples/ai-claude-code/`\r\n- [Claude Code CLI Reference](https://docs.anthropic.com/en/docs/claude-code/cli-reference)\r\n- [OpenAI Codex CLI](https://github.com/openai/codex)\r\n- [Gemini CLI](https://github.com/google-gemini/gemini-cli)\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Added three CLI AI providers: Claude Code, Codex CLI, and Gemini CLI (use local CLI subscriptions; no API keys)\r\n  * CLI providers support MCP pass-through (Atmos forwards configured MCP servers to the CLI)\r\n  * New per-provider settings: binary, max_turns, max_budget_usd, allowed_tools, full_auto\r\n  * UI now displays the selected AI provider\r\n  * New example project demonstrating Claude Code CLI usage and Terraform VPC example\r\n\r\n* **Documentation**\r\n  * New quick-starts, guides, troubleshooting, and PRD updates distinguishing API vs CLI providers and MCP pass-through workflows\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat: Zero-config CI base detection for describe affected @osterman (#2241)</summary>\r\n\r\n## what\r\n\r\n- Add auto-detection of the base commit in CI environments when `ci.enabled` is true, eliminating verbose `--ref`/`--sha` flag wiring in GitHub Actions workflows\r\n- Introduce unified `--base` flag as a single replacement for the confusingly-named `--ref` and `--sha` flags (both pointed to the base commit)\r\n- Extend the CI Provider interface with `ResolveBase()` method for provider-agnostic base resolution\r\n- Implement GitHub Actions base resolution covering all event types: PR open/sync, PR closed/merged, push, force-push, and merge group\r\n- Implement generic provider with `ATMOS_CI_BASE_REF` env var support for local testing\r\n- Deprecate `--ref` and `--sha` as hidden aliases\r\n\r\n## why\r\n\r\n- Users had to write verbose, error-prone shell expressions to wire `--ref` and `--sha` in GitHub Actions workflows\r\n- The flag names were confusing — both `--ref` and `--sha` referred to the *base* commit, but their names didn't convey this\r\n- With `ci.enabled`, Atmos should auto-detect the base commit from CI environment variables, achieving zero-config operation\r\n- Provider-agnostic architecture allows future GitLab CI, Jenkins, etc. implementations without changing the core logic\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/native-ci/framework/base-resolution.md`\r\n- Blog post: `website/blog/2026-03-21-describe-affected-auto-detection.mdx`\r\n- Docusaurus docs updated: `website/docs/cli/commands/describe/describe-affected.mdx`\r\n- Roadmap milestone added to CI/CD Simplification initiative\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Unified --base flag for specifying the comparison base\r\n  * Automatic base commit detection in CI when ci.enabled is true, with GitHub Actions support\r\n  * ATMOS_CI_BASE_REF environment override for local testing\r\n\r\n* **Deprecated**\r\n  * --ref and --sha flags deprecated; use --base instead\r\n\r\n* **Documentation**\r\n  * Updated CLI docs, blog post, examples, and roadmap entry describing flag precedence and CI auto-detection\r\n\r\n* **Tests**\r\n  * Added extensive unit/integration tests covering base resolution and CI scenarios\r\n\r\n* **Chores**\r\n  * CI provider registry reset helper added\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>feat: MCP server integrations — connect Atmos to external MCP servers @aknysh (#2267)</summary>\r\n\r\n## what\r\n\r\n- Connect Atmos to **external MCP servers** (AWS, GCP, Azure, custom) and use their tools in `atmos ai ask`, `atmos ai chat`, and `atmos ai exec`\r\n- Add CLI MCP management commands: `atmos mcp list`, `tools`, `test`, `status`, `restart`, `start`, `export`\r\n- Add **smart server routing** — automatically selects only the MCP servers relevant to the user's question using a lightweight routing call to the configured AI provider\r\n- Add `--mcp` flag on all AI commands for manual server selection (supports `--mcp aws-iam,aws-billing` and `--mcp aws-iam --mcp aws-billing`), env var `ATMOS_AI_MCP`\r\n- Add `atmos mcp export` to emit `.mcp.json` for Claude Code / Cursor / IDE integration\r\n- Add **Atmos Auth integration** — `identity` field on server config for automatic credential injection (references identities from the `auth` section)\r\n- Add **toolchain integration** — resolves `uvx`/`npx` from `.tool-versions` before starting servers\r\n- Add `BridgedTool` pattern to wrap external MCP tools as native Atmos `tools.Tool` interface\r\n- Add human-readable tool names in output (`aws-iam → list_roles` instead of `aws-iam__list_roles`)\r\n- Add tool execution display to `atmos ai ask` output via MarkdownFormatter\r\n- Add configurable `ai.max_tool_iterations` (default 25, was hardcoded 10) to support complex multi-tool queries\r\n- Add complete example with 8 pre-configured AWS MCP servers at [`examples/mcp/`](https://atmos.tools/examples/mcp)\r\n- Add comprehensive documentation: [MCP Configuration](https://atmos.tools/cli/configuration/mcp), [MCP Commands](https://atmos.tools/cli/commands/mcp/list), [AI Landing Page](https://atmos.tools/ai)\r\n\r\n## why\r\n\r\n- **Leverage the ecosystem** — 100+ MCP servers exist for AWS, GCP, Azure, databases, monitoring, CI/CD. Instead of reimplementing cloud provider functionality, Atmos orchestrates existing MCP servers\r\n- **Parity with AI tools** — Claude Code, Cursor, Windsurf all manage MCP servers. Atmos should too\r\n- **Speed** — Installing an AWS MCP server takes seconds. Building equivalent functionality takes weeks\r\n- **Composability** — Users can mix native Atmos tools (describe stacks, validate) with external tools (AWS billing, security, IAM) in the same AI conversation\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/atmos-mcp-integrations.md`\r\n- Blog post: `website/blog/2026-03-29-mcp-server-integrations.mdx`\r\n- Example: [`examples/mcp/`](https://atmos.tools/examples/mcp) — complete working example with 8 AWS MCP servers\r\n- [AWS MCP Servers](https://github.com/awslabs/mcp) — 20+ servers for the AWS ecosystem\r\n- [MCP Protocol Specification](https://modelcontextprotocol.io/)\r\n\r\n## See It in Action\r\n\r\n> All outputs below are from real AWS accounts. Account IDs, resource identifiers,\r\n> and internal names have been redacted. Cost figures represent an example of real-world spending.\r\n\r\n### List configured servers\r\n\r\n```text\r\n$ atmos mcp list\r\n       NAME         STATUS                           DESCRIPTION\r\n─────────────────────────────────────────────────────────────────────────────────────────\r\n aws-api            stopped  AWS API — direct AWS CLI access with security controls\r\n aws-billing        stopped  AWS Billing — billing summaries and payment history\r\n aws-cloudtrail     stopped  AWS CloudTrail — event history and API call auditing\r\n aws-docs           stopped  AWS Documentation — search and fetch AWS docs\r\n aws-iam            stopped  AWS IAM — role/policy analysis and access patterns\r\n aws-knowledge      stopped  AWS Knowledge — managed AWS knowledge base (remote)\r\n aws-pricing        stopped  AWS Pricing — real-time pricing and cost analysis\r\n aws-security       stopped  AWS Security — Well-Architected security posture assessment\r\n```\r\n\r\n### Explore tools from a server\r\n\r\n```text\r\n$ atmos mcp tools aws-security\r\n           TOOL                                                         DESCRIPTION\r\n──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\r\n CheckSecurityServices     Verify if selected AWS security services are enabled in the specified region and account.\r\n GetSecurityFindings       Retrieve security findings from AWS security services.\r\n GetStoredSecurityContext  Retrieve security services data that was stored in context from a previous CheckSecurityServices call.\r\n CheckStorageEncryption    Check if AWS storage resources have encryption enabled.\r\n ListServicesInRegion      List all AWS services being used in a specific region.\r\n CheckNetworkSecurity      Check if AWS network resources are configured for secure data-in-transit.\r\n```\r\n\r\n### Test server connectivity\r\n\r\n```text\r\n$ atmos mcp test aws-docs\r\n✓ Server started successfully\r\n✓ Initialization handshake complete\r\n✓ 4 tools available\r\n✓ Server responds to ping\r\n```\r\n\r\n### Ask AI — documentation search (smart routing selects aws-knowledge)\r\n\r\n```text\r\n$ atmos ai ask \"How do I configure S3 bucket lifecycle rules?\"\r\nℹ MCP routing selected 1 of 8 servers: aws-knowledge\r\nℹ MCP server \"aws-knowledge\" started (6 tools)\r\nℹ Registered 6 tools from 1 MCP server(s)\r\nℹ AI tools initialized: 16\r\n👽 Thinking...\r\n\r\n   Configuring S3 Bucket Lifecycle Rules\r\n\r\n   S3 lifecycle rules automate object management by transitioning objects between\r\n   storage classes, archiving, or expiring them...\r\n\r\n  ## Tool Executions (1)\r\n  1. ✅ aws-knowledge → aws.search_documentation (2874ms)\r\n```\r\n\r\n### Ask AI — billing analysis (smart routing selects aws-billing)\r\n\r\n```text\r\n$ atmos ai ask \"Show our billing summary for the past 2 months\"\r\nℹ MCP routing selected 1 of 8 servers: aws-billing\r\nℹ MCP server \"aws-billing\" started (25 tools)\r\nℹ Registered 25 tools from 1 MCP server(s)\r\nℹ AI tools initialized: 35\r\n👽 Thinking...\r\n\r\n  ## 📊 AWS Billing Summary — February & March 2026\r\n\r\n   Service                                  │ Feb 2026 │ Mar 2026 │ Change\r\n  ──────────────────────────────────────────┼──────────┼───────────┼──────────\r\n   Amazon Virtual Private Cloud             │ $309.53  │ $261.17   │ ▼ $48.36\r\n   EC2 - Other                              │ $88.12   │ $123.39   │ ▲ $35.27\r\n   ...\r\n\r\n  ## Tool Executions (1)\r\n  1. ✅ aws-billing → cost-explorer (381ms)\r\n```\r\n\r\n### Ask AI — security posture across all regions (smart routing selects aws-api + aws-security)\r\n\r\n```text\r\n$ atmos ai ask \"Is GuardDuty enabled in all regions?\"\r\nℹ MCP routing selected 2 of 8 servers: aws-api, aws-security\r\nℹ MCP server \"aws-api\" started (2 tools)\r\nℹ MCP server \"aws-security\" started (6 tools)\r\nℹ Registered 8 tools from 2 MCP server(s)\r\nℹ AI tools initialized: 18\r\n👽 Thinking...\r\n\r\n  ## ❌ GuardDuty is NOT Enabled in All Regions\r\n\r\n   GuardDuty is only enabled in 1 out of 34 regions checked.\r\n\r\n  ### ✅ Enabled (1 region)\r\n\r\n   Region    │ Detector ID\r\n  ───────────┼────────────────────────────────────\r\n   us-east-2 │  <detector-id-redacted>\r\n\r\n  ### ❌ Not Enabled (33 regions)\r\n\r\n   Region         │ Region         │ Region\r\n  ────────────────┼────────────────┼────────────────\r\n   ap-south-1     │ ap-south-2     │ ap-southeast-1\r\n   eu-central-1   │ eu-west-1      │ us-east-1\r\n   us-west-2      │ ...            │\r\n\r\n  ### 🔒 Recommendations\r\n    1. Enable GuardDuty in all active regions\r\n    2. Use delegated administrator via AWS Organizations\r\n    3. Prioritize us-east-1, us-west-2, eu-west-1 immediately\r\n\r\n  ## Tool Executions (4)\r\n  1. ✅ aws-api → call_aws (400ms)\r\n  2. ✅ aws-api → call_aws (14ms)\r\n  3. ✅ aws-api → call_aws (7ms)\r\n  4. ✅ aws-api → call_aws (9450ms)\r\n```\r\n\r\n### Ask AI — IAM audit (smart routing selects aws-iam)\r\n\r\n```text\r\n$ atmos ai ask \"List all IAM roles with admin access\"\r\nℹ MCP routing selected 1 of 8 servers: aws-iam\r\nℹ MCP server \"aws-iam\" started (29 tools)\r\nℹ Registered 29 tools from 1 MCP server(s)\r\nℹ AI tools initialized: 39\r\n👽 Thinking...\r\n\r\n  ## 🔐 IAM Roles with Admin Access\r\n\r\n  ### 1. ✅ Direct AdministratorAccess Policy (4 attachments)\r\n\r\n   Role Name                                        │ Description                                    │ Trust Principal\r\n  ──────────────────────────────────────────────────┼────────────────────────────────────────────────┼───────────────────────────\r\n    AWSReservedSSO_AdministratorAccess_...          │ Allow Full Administrator access to the account │ AWS SSO (SAML Federation)\r\n    AWSReservedSSO_RootAccess_...                   │ Centralized root access to member accounts     │ AWS SSO (SAML Federation)\r\n    AWSReservedSSO_TerraformApplyAccess_...         │ Full Terraform state and account access        │ AWS SSO (SAML Federation)\r\n    AWSReservedSSO_TerraformApplyAccess-Core_...    │ Full Terraform access (core backend)           │ AWS SSO (SAML Federation)\r\n\r\n  ### 🛡️ Security Recommendations\r\n    1. Review SSO assignments for AdministratorAccess and RootAccess roles.\r\n    2. Audit TerraformApplyAccess roles — ensure MFA/session policies are enforced.\r\n    3. Monitor tfstate roles — cross-account trust across 14 accounts.\r\n    4. Enable CloudTrail for AssumeRole calls on high-privilege roles.\r\n\r\n  ## Tool Executions (2)\r\n  1. ✅ aws-iam → list_roles (314ms)\r\n  2. ✅ aws-iam → list_policies (174ms)\r\n```\r\n\r\n### Check status of all servers\r\n\r\n```text\r\n$ atmos mcp status\r\n      NAME       STATUS   TOOLS                        DESCRIPTION\r\n─────────────────────────────────────────────────────────────────────────────────────────\r\n aws-api         running  2      AWS API — direct AWS CLI access with security controls\r\n aws-billing     running  25     AWS Billing — billing summaries and payment history\r\n aws-cloudtrail  running  5      AWS CloudTrail — event history and API call auditing\r\n aws-docs        running  4      AWS Documentation — search and fetch AWS docs\r\n aws-iam         running  29     AWS IAM — role/policy analysis and access patterns\r\n aws-knowledge   running  6      AWS Knowledge — managed AWS knowledge base (remote)\r\n aws-pricing     running  9      AWS Pricing — real-time pricing and cost analysis\r\n aws-security    running  6      AWS Security — Well-Architected security posture assessment\r\n```\r\n\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * External MCP server support with new mcp commands: list, tools, test, status, restart, export\r\n  * New --mcp / ATMOS_AI_MCP flag for ai ask/chat/exec to select servers (overrides routing)\r\n  * Smart MCP routing to choose relevant servers per prompt\r\n  * Human-friendly tool names in AI responses\r\n  * Configurable AI request timeouts and max tool‑iteration limits\r\n\r\n* **Documentation**\r\n  * Extensive MCP and AI integration docs, examples, and an AWS MCP example\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n</details>\r\n\r\n\r\n## 🚀 Enhancements\r\n\r\n<details>\r\n  <summary>fix: add process-level credential cache @AleksandrMatveev (#2272)</summary>\r\n\r\n## what\r\n\r\n- Added a process-level in-memory credential cache (`sync.Map`) to `authenticateChain()` that stores successfully authenticated credentials keyed by realm + chain identity\r\n- When a subsequent authentication request matches the same realm and chain within the same CLI invocation, the cached credentials are returned (after expiration validation) without making additional API calls\r\n- The previous fix (dbcba35) that skips cached target identity credentials in keyring/file storage remains intact - this cache layer sits above it\r\n\r\n## why\r\n\r\n- The previous fix correctly prevented stale cached credentials from being returned by always forcing re-authentication of the target identity (e.g., AssumeRole). However, during `atmos describe affected`, each `!terraform.state` YAML function resolution creates a new `AuthManager` via `resolveAuthManagerForNestedComponent`, and each one triggers a full AssumeRole API call\r\n- This caused `atmos describe affected` to degrade from ~2 minutes to ~17 minutes due to N redundant STS AssumeRole calls for N components sharing the same auth chain\r\n- The in-memory cache is inherently safe: unlike keyring/file caches that persist across processes and may contain stale data from different auth mechanisms (e.g., pod credentials vs. role credentials), process-scoped credentials were authenticated during the current invocation and are guaranteed correct\r\n- Cached entries are validated against the existing expiration buffer (`minCredentialValidityBuffer` = 15m) before reuse, and the cache resets naturally when the process exits\r\n\r\n## references\r\n\r\n- Previous fix: https://github.com/cloudposse/atmos/commit/dbcba35b12d0f4044795e80851bc8760adfa7d3c#diff-de62c2ba7fdbec5bab3d1554349f5082c4ec6cc1378a3b38d14f8a7efb649b62\r\n\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Process-level in-memory credential cache to speed repeated authentications and share valid credentials across instances.\r\n  * Automatic detection and removal of expired/invalid cached credentials with transparent re-authentication.\r\n  * Ability to reset the process credential cache.\r\n\r\n* **Tests**\r\n  * Tests verifying cache hits, isolation by realm/chain, expiration handling, and cache reset behavior.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: use allowlist DTO for instance uploads to prevent sensitive data leakage @milldr (#2269)</summary>\r\n## What\r\n- Introduce `dtos.UploadInstance` as an allowlist struct with only the fields Atmos Pro needs\r\n- Convert `schema.Instance` → `UploadInstance` at the upload boundary in `list_instances.go`\r\n- Sanitize `settings.pro` to handle `map[interface{}]interface{}` from YAML for JSON compatibility\r\n\r\n### Fields included in upload (allowlist)\r\n- `component` — instance identification\r\n- `stack` — instance identification\r\n- `component_type` — terraform or helm\r\n- `settings.pro` — drift detection configuration (enabled flag, detect/remediate workflows)\r\n\r\n### Fields excluded (never serialized)\r\n- `vars` — can contain secrets\r\n- `env` — can contain secrets and credentials\r\n- `backend` — contains role ARNs and bucket names\r\n- `source` — not used by Atmos Pro\r\n- `metadata` — not used by Atmos Pro\r\n- All `settings` keys except `pro` — not used by Atmos Pro\r\n\r\n## Why\r\n- Previously, `InstancesUploadRequest` used `[]schema.Instance` which included all sections from the stack config\r\n- `env` and `vars` can contain secrets that should never leave the CI environment\r\n- Nested YAML maps in the excluded fields produce `map[interface{}]interface{}` types that `encoding/json` cannot marshal, causing `atmos list instances --upload` to fail with `json: unsupported type: map[interface {}]interface {}`\r\n- Using an allowlist DTO ensures new fields added to `schema.Instance` are never inadvertently uploaded\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n## Release Notes\r\n\r\n* **Refactor**\r\n  * Optimized instance upload payloads by streamlining the data structure to include only essential configuration fields (component, stack, component type, and settings).\r\n  * Enhanced upload efficiency by automatically filtering and extracting pro-specific settings before transmission.\r\n\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>refactor(auth): move ECR login from auth to aws namespace (ATMOS-37) @Benbentwo (#2144)</summary>\r\n\r\n## what\r\n\r\n- Move `atmos auth ecr-login` command to `atmos aws ecr login` under the AWS namespace\r\n- Create new `cmd/aws/ecr/` package with parent ECR command and login subcommand\r\n- Move ECR login tests to new package structure (16 tests, all passing)\r\n- Relocate documentation from `auth/` to `aws/` command directory\r\n- Update all cross-references in tutorials, blog posts, and internal design docs\r\n\r\n## why\r\n\r\nThe `auth` namespace must remain provider-agnostic per CLI design principles. AWS-specific commands like ECR login belong under the `atmos aws` namespace hierarchy, following the established pattern with `atmos aws eks update-kubeconfig`. This ensures the `auth` namespace is not polluted by provider- or service-specific commands and maintains a clean separation between generic auth operations and cloud-specific integrations.\r\n\r\n## references\r\n\r\nCloses #ATMOS-37\r\n\r\nAcceptance criteria from ATMOS-37:\r\n- ✅ No AWS- or ECR-specific commands exist directly under `atmos auth`\r\n- ✅ Command structure aligns with interface-based design  \r\n- ✅ CLI help and docs reflect the updated command hierarchy\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **New Features**\r\n  * Moved ECR login into the AWS namespace as atmos aws ecr login, added top-level ecr subcommand, introduced a command-local --identity flag, and retained multi-registry --registry support.\r\n\r\n* **Tests**\r\n  * Removed legacy test suite and added a comprehensive test suite validating the new command wiring, flags, argument flows, and auth-manager behavior.\r\n\r\n* **Documentation**\r\n  * Updated CLI docs, tutorials, PRD, and blog examples to reference atmos aws ecr login.\r\n\r\n* **Chores**\r\n  * Added new sentinel errors for clearer ECR login failure and identity-selection reporting.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix(auth): skip identity resolution in describe when functions disabled @johncblandii (#2262)</summary>\r\n\r\n## what\r\n\r\n- Skip identity resolution in all four describe commands (`describe component`, `describe stacks`, `describe affected`, `describe dependents`) when `--process-functions=false`\r\n- Use `cmd.Flags().Changed(IdentityFlagName)` instead of `identityName != \"\"` so that only an explicit `--identity` CLI flag bypasses the guard — `ATMOS_IDENTITY` env vars no longer trigger auth when functions are disabled\r\n- Add 10 regression tests covering: auth skipped when functions disabled, env var doesn't bypass guard, explicit `--identity` flag forces auth, and unit tests for the `Changed` vs env var distinction\r\n\r\n## why\r\n\r\n- When all YAML functions are disabled via `--process-functions=false`, describe commands were still attempting identity resolution (SSO login, credential fetching, etc.)\r\n- YAML functions (`!terraform.state`, `!terraform.output`) are the only consumers of auth credentials during describe — no functions means no auth needed\r\n- The original guard treated env vars (`ATMOS_IDENTITY`) as equivalent to explicit CLI flags, causing auth to run even when the user only wanted raw config inspection\r\n- This caused unnecessary authentication prompts/errors in CI and local development\r\n\r\n## references\r\n\r\n- Affects `cmd/describe_component.go`, `cmd/describe_stacks.go`, `cmd/describe_affected.go`, `cmd/describe_dependents.go`\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * Describe commands now skip unnecessary authentication resolution unless YAML functions processing is enabled or an identity flag was explicitly provided, avoiding spurious auth errors and improving reliability.\r\n\r\n* **Tests**\r\n  * Added regression tests covering auth-skip behavior across describe commands and verifying explicit identity-flag vs environment-variable semantics.\r\n\r\n* **Refactor**\r\n  * Reworked describe command wiring to improve dependency injection and execution plumbing for component description.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n\r\n<details>\r\n  <summary>fix: add actionable hints and doc links to Atmos Pro API errors @osterman (#2264)</summary>\r\n## what\r\n\r\n- Wrap all Atmos Pro API errors in the Error Builder pattern with status-specific hints and documentation links\r\n- Add `ui.Success`/`ui.Error` messages when `--upload` completes or fails (previously silent on success, swallowed on failure)\r\n- Consolidate fragmented hints into self-contained statements (each hint gets its own lightbulb icon)\r\n- Remove duplicate quickstart links from 404 hints\r\n- Replace `fmt.Errorf` error wrapping with `errors.Join` + `buildProAPIError` across all Pro API paths (uploads, lock/unlock, OIDC exchange)\r\n\r\n## why\r\n\r\n- Users seeing a 403 from Atmos Pro had no guidance on what to do — the error message was opaque (e.g. `API request failed with status 403`). The most common cause is per-repo permissions not being configured.\r\n- Each HTTP status now links to the most relevant Atmos Pro doc page:\r\n  - **403** → [Permissions](https://atmos-pro.com/docs/learn/permissions) + [Quickstart](https://atmos-pro.com/docs/install)\r\n  - **401** → [GitHub Workflows](https://atmos-pro.com/docs/configure/github-workflows) + [Authentication](https://atmos-pro.com/docs/learn/authentication)\r\n  - **404** → [Install](https://atmos-pro.com/docs/install)\r\n  - **5xx** → [Troubleshooting](https://atmos-pro.com/docs/learn/troubleshooting)\r\n- Successful uploads were completely silent — users had no confirmation the upload worked\r\n- Upload failures were silently swallowed (`log.Warn` only) — now they surface as proper errors with hints\r\n\r\n## references\r\n\r\n- Triggered by user report: 403 on `atmos describe affected --upload` with no actionable guidance\r\n- Atmos Pro docs: https://atmos-pro.com/docs/learn/permissions\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n## Summary by CodeRabbit\r\n\r\n* **Bug Fixes**\r\n  * API errors now include richer context (HTTP status, operation, trace IDs) and status-specific troubleshooting hints; non-JSON responses include a troubleshooting link. Token exchange and lock/unlock failures surface improved, consistent error information.\r\n\r\n* **New Features**\r\n  * User-facing success and error notifications when uploading affected stacks.\r\n\r\n* **Tests**\r\n  * Added tests validating status-specific hints, non-JSON error handling, and trace ID presence.\r\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n</details>\r\n","mentions_count":6},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/304469749","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/304469749/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/304469749/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.214.0-rc.2","id":304469749,"author":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SJdb1","tag_name":"v1.214.0-rc.2","target_commitish":"main","name":"v1.214.0-rc.2","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-02T00:23:09Z","updated_at":"2026-04-02T01:18:58Z","published_at":"2026-04-02T01:18:58Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673103","id":386673103,"node_id":"RA_kwDOEW4XoM4XDCnP","name":"atmos_1.214.0-rc.2_darwin_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199502528,"digest":"sha256:6dc1dae0688208a5d6c0822ce4bdfda34ce76b64b4e3a277e09ef16b0ec314dc","download_count":3,"created_at":"2026-04-02T01:17:46Z","updated_at":"2026-04-02T01:17:52Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673178","id":386673178,"node_id":"RA_kwDOEW4XoM4XDCoa","name":"atmos_1.214.0-rc.2_darwin_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187231826,"digest":"sha256:5e262419a97f1ec953e14d80f0a80f66b496bae1dec9b316e416f79d51ae7da8","download_count":3,"created_at":"2026-04-02T01:17:59Z","updated_at":"2026-04-02T01:18:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673100","id":386673100,"node_id":"RA_kwDOEW4XoM4XDCnM","name":"atmos_1.214.0-rc.2_freebsd_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194171052,"digest":"sha256:4ed9dd87d1554d87885c99e09f89be2147ff492a0740646e31c236764793c61f","download_count":2,"created_at":"2026-04-02T01:17:46Z","updated_at":"2026-04-02T01:17:52Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673102","id":386673102,"node_id":"RA_kwDOEW4XoM4XDCnO","name":"atmos_1.214.0-rc.2_freebsd_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180486316,"digest":"sha256:213fab892d13176cbf4fa3d47e2a42c011157d46cb91c130e3b21fba45be6214","download_count":3,"created_at":"2026-04-02T01:17:46Z","updated_at":"2026-04-02T01:17:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673186","id":386673186,"node_id":"RA_kwDOEW4XoM4XDCoi","name":"atmos_1.214.0-rc.2_linux_386","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181076130,"digest":"sha256:1e65fa7b00f0b21cdadb62000050454b7a794bd1272cb0b216c73ca9633931af","download_count":3,"created_at":"2026-04-02T01:18:00Z","updated_at":"2026-04-02T01:18:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673136","id":386673136,"node_id":"RA_kwDOEW4XoM4XDCnw","name":"atmos_1.214.0-rc.2_linux_amd64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194973858,"digest":"sha256:b56907c0d63ce11e70c4e6ba9f56bd7c8ed95fd51c44176830a9b9033aeb198a","download_count":169,"created_at":"2026-04-02T01:17:53Z","updated_at":"2026-04-02T01:17:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673148","id":386673148,"node_id":"RA_kwDOEW4XoM4XDCn8","name":"atmos_1.214.0-rc.2_linux_arm","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:c997f42ce7a4ff34bfa3787b21c67c679e13c9eab781618883895f22d73b9335","download_count":2,"created_at":"2026-04-02T01:17:54Z","updated_at":"2026-04-02T01:18:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673137","id":386673137,"node_id":"RA_kwDOEW4XoM4XDCnx","name":"atmos_1.214.0-rc.2_linux_arm64","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:bea8736c4d9293de368d41d5a6c780f78503abc62b47454ab710a1caf144f4d0","download_count":4,"created_at":"2026-04-02T01:17:53Z","updated_at":"2026-04-02T01:18:00Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673189","id":386673189,"node_id":"RA_kwDOEW4XoM4XDCol","name":"atmos_1.214.0-rc.2_SHA256SUMS","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1085,"digest":"sha256:d6a65c97518e59673400ec925d1a1fe50456a338f7186bd42b843e4d8df8d8ae","download_count":1,"created_at":"2026-04-02T01:18:00Z","updated_at":"2026-04-02T01:18:01Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673177","id":386673177,"node_id":"RA_kwDOEW4XoM4XDCoZ","name":"atmos_1.214.0-rc.2_windows_386.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":184883712,"digest":"sha256:cc1f4265bfc401450c38ce38d2ed6772456b83abb876ae40b4da65a8ac576ae2","download_count":3,"created_at":"2026-04-02T01:17:59Z","updated_at":"2026-04-02T01:18:05Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673101","id":386673101,"node_id":"RA_kwDOEW4XoM4XDCnN","name":"atmos_1.214.0-rc.2_windows_amd64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198325248,"digest":"sha256:667266c8539f570496142dd8b930b66f6f12951097d5009ecf7d3d3953bb420e","download_count":2,"created_at":"2026-04-02T01:17:46Z","updated_at":"2026-04-02T01:17:53Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386673141","id":386673141,"node_id":"RA_kwDOEW4XoM4XDCn1","name":"atmos_1.214.0-rc.2_windows_arm64.exe","label":"","uploader":{"login":"cloudposse-releaser[bot]","id":163353533,"node_id":"BOT_kgDOCbyTvQ","avatar_url":"https://avatars.githubusercontent.com/in/855608?v=4","gravatar_id":"","url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D","html_url":"https://github.com/apps/cloudposse-releaser","followers_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloudposse-releaser%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182495744,"digest":"sha256:2cdf17088ed000983b3e73c5ded2af46843c28eca28e2feb313e5005a7c3f31c","download_count":2,"created_at":"2026-04-02T01:17:53Z","updated_at":"2026-04-02T01:17:59Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-rc.2/atmos_1.214.0-rc.2_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.214.0-rc.2","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.214.0-rc.2","body":"<details>\n  <summary>feat: MCP server integrations — connect Atmos to external MCP servers @aknysh (#2267)</summary>\n## what\r\n\r\n- Connect Atmos to **external MCP servers** (AWS, GCP, Azure, custom) and use their tools in `atmos ai ask`, `atmos ai chat`, and `atmos ai exec`\r\n- Add CLI MCP management commands: `atmos mcp list`, `tools`, `test`, `status`, `restart`, `start`, `export`\r\n- Add **smart server routing** — automatically selects only the MCP servers relevant to the user's question using a lightweight routing call to the configured AI provider\r\n- Add `--mcp` flag on all AI commands for manual server selection (supports `--mcp aws-iam,aws-billing` and `--mcp aws-iam --mcp aws-billing`), env var `ATMOS_AI_MCP`\r\n- Add `atmos mcp export` to emit `.mcp.json` for Claude Code / Cursor / IDE integration\r\n- Add **Atmos Auth integration** — `identity` field on server config for automatic credential injection (references identities from the `auth` section)\r\n- Add **toolchain integration** — resolves `uvx`/`npx` from `.tool-versions` before starting servers\r\n- Add `BridgedTool` pattern to wrap external MCP tools as native Atmos `tools.Tool` interface\r\n- Add human-readable tool names in output (`aws-iam → list_roles` instead of `aws-iam__list_roles`)\r\n- Add tool execution display to `atmos ai ask` output via MarkdownFormatter\r\n- Add configurable `ai.max_tool_iterations` (default 25, was hardcoded 10) to support complex multi-tool queries\r\n- Add complete example with 8 pre-configured AWS MCP servers at [`examples/mcp/`](https://atmos.tools/examples/mcp)\r\n- Add comprehensive documentation: [MCP Configuration](https://atmos.tools/cli/configuration/mcp), [MCP Commands](https://atmos.tools/cli/commands/mcp/list), [AI Landing Page](https://atmos.tools/ai)\r\n\r\n## why\r\n\r\n- **Leverage the ecosystem** — 100+ MCP servers exist for AWS, GCP, Azure, databases, monitoring, CI/CD. Instead of reimplementing cloud provider functionality, Atmos orchestrates existing MCP servers\r\n- **Parity with AI tools** — Claude Code, Cursor, Windsurf all manage MCP servers. Atmos should too\r\n- **Speed** — Installing an AWS MCP server takes seconds. Building equivalent functionality takes weeks\r\n- **Composability** — Users can mix native Atmos tools (describe stacks, validate) with external tools (AWS billing, security, IAM) in the same AI conversation\r\n\r\n## references\r\n\r\n- PRD: `docs/prd/atmos-mcp-integrations.md`\r\n- Blog post: `website/blog/2026-03-29-mcp-server-integrations.mdx`\r\n- Example: [`examples/mcp/`](https://atmos.tools/examples/mcp) — complete working example with 8 AWS MCP servers\r\n- [AWS MCP Servers](https://github.com/awslabs/mcp) — 20+ servers for the AWS ecosystem\r\n- [MCP Protocol Specification](https://modelcontextprotocol.io/)\r\n\r\n## See It in Action\r\n\r\n> All outputs below are from real AWS accounts. Account IDs, resource identifiers,\r\n> and internal names have been redacted. Cost figures represent an example of real-world spending.\r\n\r\n### List configured servers\r\n\r\n```text\r\n$ atmos mcp list\r\n       NAME         STATUS                           DESCRIPTION\r\n─────────────────────────────────────────────────────────────────────────────────────────\r\n aws-api            stopped  AWS API — direct AWS CLI access with security controls\r\n aws-billing        stopped  AWS Billing — billing summaries and payment history\r\n aws-cloudtrail     stopped  AWS CloudTrail — event history and API call auditing\r\n aws-docs           stopped  AWS Documentation — search and fetch AWS docs\r\n aws-iam            stopped  AWS IAM — role/policy analysis and access patterns\r\n aws-knowledge      stopped  AWS Knowledge — managed AWS knowledge base (remote)\r\n aws-pricing        stopped  AWS Pricing — real-time pricing and cost analysis\r\n aws-security       stopped  AWS Security — Well-Architected security posture assessment\r\n```\r\n\r\n### Explore tools from a server\r\n\r\n```text\r\n$ atmos mcp tools aws-security\r\n           TOOL                                                         DESCRIPTION\r\n──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\r\n CheckSecurityServices     Verify if selected AWS security services are enabled in the specified region and account.\r\n GetSecurityFindings       Retrieve security findings from AWS security services.\r\n GetStoredSecurityContext  Retrieve security services data that was stored in context from a previous CheckSecurityServices call.\r\n CheckStorageEncryption    Check if AWS storage resources have encryption enabled.\r\n ListServicesInRegion      List all AWS services being used in a specific region.\r\n CheckNetworkSecurity      Check if AWS network resources are configured for secure data-in-transit.\r\n```\r\n\r\n### Test server connectivity\r\n\r\n```text\r\n$ atmos mcp test aws-docs\r\n✓ Server started successfully\r\n✓ Initialization handshake complete\r\n✓ 4 tools available\r\n✓ Server responds to ping\r\n```\r\n\r\n### Ask AI — documentation search (smart routing selects aws-knowledge)\r\n\r\n```text\r\n$ atmos ai ask \"How do I configure S3 bucket lifecycle rules?\"\r\nℹ MCP routing selected 1 of 8 servers: aws-knowledge\r\nℹ MCP server \"aws-knowledge\" started (6 tools)\r\nℹ Registered 6 tools from 1 MCP server(s)\r\nℹ AI tools initialized: 16\r\n👽 Thinking...\r\n\r\n   Configuring S3 Bucket Lifecycle Rules\r\n\r\n   S3 lifecycle rules automate object management by transitioning objects between\r\n   storage classes, archiving, or expiring them...\r\n\r\n  ## Tool Executions (1)\r\n  1. ✅ aws-knowledge → aws.search_documentation (2874ms)\r\n```\r\n\r\n### Ask AI — billing analysis (smart routing selects aws-billing)\r\n\r\n```text\r\n$ atmos ai ask \"Show our billing summary for the past 2 months\"\r\nℹ MCP routing selected 1 of 8 servers: aws-billing\r\nℹ MCP server \"aws-billing\" started (25 tools)\r\nℹ Registered 25 tools from 1 MCP server(s)\r\nℹ AI tools initialized: 35\r\n👽 Thinking...\r\n\r\n  ## 📊 AWS Billing Summary — February & March 2026\r\n\r\n   Service                                  │ Feb 2026 │ Mar 2026 │ Change\r\n  ──────────────────────────────────────────┼──────────┼───────────┼──────────\r\n   Amazon Virtual Private Cloud             │ $309.53  │ $261.17   │ ▼ $48.36\r\n   EC2 - Other                              │ $88.12   │ $123.39   │ ▲ $35.27\r\n   ...\r\n\r\n  ## Tool Executions (1)\r\n  1. ✅ aws-billing → cost-explorer (381ms)\r\n```\r\n\r\n### Ask AI — security posture across all regions (smart routing selects aws-api + aws-security)\r\n\r\n```text\r\n$ atmos ai ask \"Is GuardDuty enabled in all regions?\"\r\nℹ MCP routing selected 2 of 8 servers: aws-api, aws-security\r\nℹ MCP server \"aws-api\" started (2 tools)\r\nℹ MCP server \"aws-security\" started (6 tools)\r\nℹ Registered 8 tools from 2 MCP server(s)\r\nℹ AI tools initialized: 18\r\n👽 Thinking...\r\n\r\n  ## ❌ GuardDuty is NOT Enabled in All Regions\r\n\r\n   GuardDuty is only enabled in 1 out of 34 regions checked.\r\n\r\n  ### ✅ Enabled (1 region)\r\n\r\n   Region    │ Detector ID\r\n  ───────────┼────────────────────────────────────\r\n   us-east-2 │  <detector-id-redacted>\r\n\r\n  ### ❌ Not Enabled (33 regions)\r\n\r\n   Region         │ Region         │ Region\r\n  ────────────────┼────────────────┼────────────────\r\n   ap-south-1     │ ap-south-2     │ ap-southeast-1\r\n   eu-central-1   │ eu-west-1      │ us-east-1\r\n   us-west-2      │ ...            │\r\n\r\n  ### 🔒 Recommendations\r\n    1. Enable GuardDuty in all active regions\r\n    2. Use delegated administrator via AWS Organizations\r\n    3. Prioritize us-east-1, us-west-2, eu-west-1 immediately\r\n\r\n  ## Tool Executions (4)\r\n  1. ✅ aws-api → call_aws (400ms)\r\n  2. ✅ aws-api → call_aws (14ms)\r\n  3. ✅ aws-api → call_aws (7ms)\r\n  4. ✅ aws-api → call_aws (9450ms)\r\n```\r\n\r\n### Ask AI — IAM audit (smart routing selects aws-iam)\r\n\r\n```text\r\n$ atmos ai ask \"List all IAM roles with admin access\"\r\nℹ MCP routing selected 1 of 8 servers: aws-iam\r\nℹ MCP server \"aws-iam\" started (29 tools)\r\nℹ Registered 29 tools from 1 MCP server(s)\r\nℹ AI tools initialized: 39\r\n👽 Thinking...\r\n\r\n  ## 🔐 IAM Roles with Admin Access\r\n\r\n  ### 1. ✅ Direct AdministratorAccess Policy (4 attachments)\r\n\r\n   Role Name                                        │ Description                                    │ Trust Principal\r\n  ──────────────────────────────────────────────────┼────────────────────────────────────────────────┼───────────────────────────\r\n    AWSReservedSSO_AdministratorAccess_...          │ Allow Full Administrator access to the account │ AWS SSO (SAML Federation)\r\n    AWSReservedSSO_RootAccess_...                   │ Centralized root access to member accounts     │ AWS SSO (SAML Federation)\r\n    AWSReservedSSO_TerraformApplyAccess_...         │ Full Terraform state and account access        │ AWS SSO (SAML Federation)\r\n    AWSReservedSSO_TerraformApplyAccess-Core_...    │ Full Terraform access (core backend)           │ AWS SSO (SAML Federation)\r\n\r\n  ### 🛡️ Security Recommendations\r\n    1. Review SSO assignments for AdministratorAccess and RootAccess roles.\r\n    2. Audit TerraformApplyAccess roles — ensure MFA/session policies are enforced.\r\n    3. Monitor tfstate roles — cross-account trust across 14 accounts.\r\n    4. Enable CloudTrail for AssumeRole calls on high-privilege roles.\r\n\r\n  ## Tool Executions (2)\r\n  1. ✅ aws-iam → list_roles (314ms)\r\n  2. ✅ aws-iam → list_policies (174ms)\r\n```\r\n\r\n### Check status of all servers\r\n\r\n```text\r\n$ atmos mcp status\r\n      NAME       STATUS   TOOLS                        DESCRIPTION\r\n─────────────────────────────────────────────────────────────────────────────────────────\r\n aws-api         running  2      AWS API — direct AWS CLI access with security controls\r\n aws-billing     running  25     AWS Billing — billing summaries and payment history\r\n aws-cloudtrail  running  5      AWS CloudTrail — event history and API call auditing\r\n aws-docs        running  4      AWS Documentation — search and fetch AWS docs\r\n aws-iam         running  29     AWS IAM — role/policy analysis and access patterns\r\n aws-knowledge   running  6      AWS Knowledge — managed AWS knowledge base (remote)\r\n aws-pricing     running  9      AWS Pricing — real-time pricing and cost analysis\r\n aws-security    running  6      AWS Security — Well-Architected security posture assessment\r\n```\r\n\r\n\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * External MCP server support with new mcp commands: list, tools, test, status, restart, export\n  * New --mcp / ATMOS_AI_MCP flag for ai ask/chat/exec to select servers (overrides routing)\n  * Smart MCP routing to choose relevant servers per prompt\n  * Human-friendly tool names in AI responses\n  * Configurable AI request timeouts and max tool‑iteration limits\n\n* **Documentation**\n  * Extensive MCP and AI integration docs, examples, and an AWS MCP example\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\r\n\n</details>\n\n\n## 🚀 Enhancements\n\n<details>\n  <summary>fix: add process-level credential cache @AleksandrMatveev (#2272)</summary>\n## what\r\n\r\n- Added a process-level in-memory credential cache (`sync.Map`) to `authenticateChain()` that stores successfully authenticated credentials keyed by realm + chain identity\r\n- When a subsequent authentication request matches the same realm and chain within the same CLI invocation, the cached credentials are returned (after expiration validation) without making additional API calls\r\n- The previous fix (dbcba35) that skips cached target identity credentials in keyring/file storage remains intact - this cache layer sits above it\r\n\r\n## why\r\n\r\n- The previous fix correctly prevented stale cached credentials from being returned by always forcing re-authentication of the target identity (e.g., AssumeRole). However, during `atmos describe affected`, each `!terraform.state` YAML function resolution creates a new `AuthManager` via `resolveAuthManagerForNestedComponent`, and each one triggers a full AssumeRole API call\r\n- This caused `atmos describe affected` to degrade from ~2 minutes to ~17 minutes due to N redundant STS AssumeRole calls for N components sharing the same auth chain\r\n- The in-memory cache is inherently safe: unlike keyring/file caches that persist across processes and may contain stale data from different auth mechanisms (e.g., pod credentials vs. role credentials), process-scoped credentials were authenticated during the current invocation and are guaranteed correct\r\n- Cached entries are validated against the existing expiration buffer (`minCredentialValidityBuffer` = 15m) before reuse, and the cache resets naturally when the process exits\r\n\r\n## references\r\n\r\n- Previous fix: https://github.com/cloudposse/atmos/commit/dbcba35b12d0f4044795e80851bc8760adfa7d3c#diff-de62c2ba7fdbec5bab3d1554349f5082c4ec6cc1378a3b38d14f8a7efb649b62\r\n\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Process-level in-memory credential cache to speed repeated authentications and share valid credentials across instances.\n  * Automatic detection and removal of expired/invalid cached credentials with transparent re-authentication.\n  * Ability to reset the process credential cache.\n\n* **Tests**\n  * Tests verifying cache hits, isolation by realm/chain, expiration handling, and cache reset behavior.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>fix: use allowlist DTO for instance uploads to prevent sensitive data leakage @milldr (#2269)</summary>\n## What\n- Introduce `dtos.UploadInstance` as an allowlist struct with only the fields Atmos Pro needs\n- Convert `schema.Instance` → `UploadInstance` at the upload boundary in `list_instances.go`\n- Sanitize `settings.pro` to handle `map[interface{}]interface{}` from YAML for JSON compatibility\n\n### Fields included in upload (allowlist)\n- `component` — instance identification\n- `stack` — instance identification\n- `component_type` — terraform or helm\n- `settings.pro` — drift detection configuration (enabled flag, detect/remediate workflows)\n\n### Fields excluded (never serialized)\n- `vars` — can contain secrets\n- `env` — can contain secrets and credentials\n- `backend` — contains role ARNs and bucket names\n- `source` — not used by Atmos Pro\n- `metadata` — not used by Atmos Pro\n- All `settings` keys except `pro` — not used by Atmos Pro\n\n## Why\n- Previously, `InstancesUploadRequest` used `[]schema.Instance` which included all sections from the stack config\n- `env` and `vars` can contain secrets that should never leave the CI environment\n- Nested YAML maps in the excluded fields produce `map[interface{}]interface{}` types that `encoding/json` cannot marshal, causing `atmos list instances --upload` to fail with `json: unsupported type: map[interface {}]interface {}`\n- Using an allowlist DTO ensures new fields added to `schema.Instance` are never inadvertently uploaded\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n## Release Notes\n\n* **Refactor**\n  * Optimized instance upload payloads by streamlining the data structure to include only essential configuration fields (component, stack, component type, and settings).\n  * Enhanced upload efficiency by automatically filtering and extracting pro-specific settings before transmission.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n\n<details>\n  <summary>refactor(auth): move ECR login from auth to aws namespace (ATMOS-37) @Benbentwo (#2144)</summary>\n## what\n\n- Move `atmos auth ecr-login` command to `atmos aws ecr login` under the AWS namespace\n- Create new `cmd/aws/ecr/` package with parent ECR command and login subcommand\n- Move ECR login tests to new package structure (16 tests, all passing)\n- Relocate documentation from `auth/` to `aws/` command directory\n- Update all cross-references in tutorials, blog posts, and internal design docs\n\n## why\n\nThe `auth` namespace must remain provider-agnostic per CLI design principles. AWS-specific commands like ECR login belong under the `atmos aws` namespace hierarchy, following the established pattern with `atmos aws eks update-kubeconfig`. This ensures the `auth` namespace is not polluted by provider- or service-specific commands and maintains a clean separation between generic auth operations and cloud-specific integrations.\n\n## references\n\nCloses #ATMOS-37\n\nAcceptance criteria from ATMOS-37:\n- ✅ No AWS- or ECR-specific commands exist directly under `atmos auth`\n- ✅ Command structure aligns with interface-based design  \n- ✅ CLI help and docs reflect the updated command hierarchy\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Moved ECR login into the AWS namespace as atmos aws ecr login, added top-level ecr subcommand, introduced a command-local --identity flag, and retained multi-registry --registry support.\n\n* **Tests**\n  * Removed legacy test suite and added a comprehensive test suite validating the new command wiring, flags, argument flows, and auth-manager behavior.\n\n* **Documentation**\n  * Updated CLI docs, tutorials, PRD, and blog examples to reference atmos aws ecr login.\n\n* **Chores**\n  * Added new sentinel errors for clearer ECR login failure and identity-selection reporting.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n</details>\n","mentions_count":4},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/304380946","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/304380946/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/304380946/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.214.0-test.7","id":304380946,"author":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SJHwS","tag_name":"v1.214.0-test.7","target_commitish":"prd/pro-summary-upload","name":"v1.214.0-test.7","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-01T19:22:58Z","updated_at":"2026-04-01T19:49:58Z","published_at":"2026-04-01T19:49:58Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493648","id":386493648,"node_id":"RA_kwDOEW4XoM4XCWzQ","name":"atmos_1.214.0-test.7_darwin_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199502464,"digest":"sha256:13049b64681c6f729acc878b15d1d49b344395b81b5638cc7220c9c4fb3dfb1e","download_count":4,"created_at":"2026-04-01T19:48:57Z","updated_at":"2026-04-01T19:49:03Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493650","id":386493650,"node_id":"RA_kwDOEW4XoM4XCWzS","name":"atmos_1.214.0-test.7_darwin_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187231762,"digest":"sha256:6db0412b144f1bc4c8e27805a0404cc55a805151b2aab914cbbc501537ddeffe","download_count":3,"created_at":"2026-04-01T19:48:57Z","updated_at":"2026-04-01T19:49:03Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493685","id":386493685,"node_id":"RA_kwDOEW4XoM4XCWz1","name":"atmos_1.214.0-test.7_freebsd_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194171052,"digest":"sha256:a98f03bbf26f26dc6365d73908a2cf4ac479cc5d1e20ce87268edcf6797505b2","download_count":3,"created_at":"2026-04-01T19:49:04Z","updated_at":"2026-04-01T19:49:10Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493681","id":386493681,"node_id":"RA_kwDOEW4XoM4XCWzx","name":"atmos_1.214.0-test.7_freebsd_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180486316,"digest":"sha256:914fc9d91dd56837feeb70e759366f1bdf8f14e7ae4cd5c850787ce4c8f458bd","download_count":3,"created_at":"2026-04-01T19:49:03Z","updated_at":"2026-04-01T19:49:10Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493714","id":386493714,"node_id":"RA_kwDOEW4XoM4XCW0S","name":"atmos_1.214.0-test.7_linux_386","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181076130,"digest":"sha256:4cb703527354a63c1e1af299e8c6ccae2d470f623e53e7a3090b805292ca7fd0","download_count":4,"created_at":"2026-04-01T19:49:06Z","updated_at":"2026-04-01T19:49:12Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493649","id":386493649,"node_id":"RA_kwDOEW4XoM4XCWzR","name":"atmos_1.214.0-test.7_linux_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194973858,"digest":"sha256:ecf9b82799613633f2f4880ba2d596abd7f76050336d465fd5c96691bec87601","download_count":33,"created_at":"2026-04-01T19:48:57Z","updated_at":"2026-04-01T19:49:06Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493745","id":386493745,"node_id":"RA_kwDOEW4XoM4XCW0x","name":"atmos_1.214.0-test.7_linux_arm","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:868c8c0ddc6c3b5765b97d04b1fb728ba9057647ec12dbf903b565e2dae1b4aa","download_count":3,"created_at":"2026-04-01T19:49:11Z","updated_at":"2026-04-01T19:49:16Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493647","id":386493647,"node_id":"RA_kwDOEW4XoM4XCWzP","name":"atmos_1.214.0-test.7_linux_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:bef0416d4e0ee336360d4739a42bd2bae26b0e8e28fb8372320bf762394dc014","download_count":4,"created_at":"2026-04-01T19:48:57Z","updated_at":"2026-04-01T19:49:03Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493751","id":386493751,"node_id":"RA_kwDOEW4XoM4XCW03","name":"atmos_1.214.0-test.7_SHA256SUMS","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1107,"digest":"sha256:0786c7955c0ea36ca427fe297fe2eb7706f1139ce15adfd592dda9bb7f489144","download_count":2,"created_at":"2026-04-01T19:49:12Z","updated_at":"2026-04-01T19:49:13Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493730","id":386493730,"node_id":"RA_kwDOEW4XoM4XCW0i","name":"atmos_1.214.0-test.7_windows_386.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":184883200,"digest":"sha256:0f126292c91f7c4ae577672e3fba78a0ad04f64e529b156685d25f2a183c1a85","download_count":4,"created_at":"2026-04-01T19:49:10Z","updated_at":"2026-04-01T19:49:16Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493728","id":386493728,"node_id":"RA_kwDOEW4XoM4XCW0g","name":"atmos_1.214.0-test.7_windows_amd64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198325248,"digest":"sha256:0c9ce36aacc9812aa09a1d149e4d0625b2dacee1be6384eb279a2e769c1b74bc","download_count":4,"created_at":"2026-04-01T19:49:10Z","updated_at":"2026-04-01T19:49:18Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386493682","id":386493682,"node_id":"RA_kwDOEW4XoM4XCWzy","name":"atmos_1.214.0-test.7_windows_arm64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182496256,"digest":"sha256:5c4018a35ae4bf2c80e2d937c8ebddd247e469522e39db9d858a0ec587a1ce73","download_count":4,"created_at":"2026-04-01T19:49:04Z","updated_at":"2026-04-01T19:49:09Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.7/atmos_1.214.0-test.7_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.214.0-test.7","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.214.0-test.7","body":"## 🚀 Feature Preview Release\n\nThis is a **feature preview** based on an open pull request. It is intended for testing artifacts and validating functionality before the feature is merged.\n\n> [!WARNING]\n> This release is temporary and may be removed at any time without notice.\n"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/304235186","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/304235186/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/304235186/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.214.0-test.6","id":304235186,"author":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SIkKy","tag_name":"v1.214.0-test.6","target_commitish":"fix/list-instances-json-marshal","name":"v1.214.0-test.6","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-04-01T14:11:35Z","updated_at":"2026-04-01T14:37:52Z","published_at":"2026-04-01T14:37:52Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332236","id":386332236,"node_id":"RA_kwDOEW4XoM4XBvZM","name":"atmos_1.214.0-test.6_darwin_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199502464,"digest":"sha256:9e1be901141b45f4db28866e8094a7dfe6c23b6f4816d7a83d92a794b64fdc5c","download_count":2,"created_at":"2026-04-01T14:36:37Z","updated_at":"2026-04-01T14:36:43Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332301","id":386332301,"node_id":"RA_kwDOEW4XoM4XBvaN","name":"atmos_1.214.0-test.6_darwin_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187231762,"digest":"sha256:c1dee1731658bf47c90b810dc2899b67f1f7bbdd84bab077cf46fe9bafb37fca","download_count":2,"created_at":"2026-04-01T14:36:38Z","updated_at":"2026-04-01T14:36:43Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332379","id":386332379,"node_id":"RA_kwDOEW4XoM4XBvbb","name":"atmos_1.214.0-test.6_freebsd_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194171052,"digest":"sha256:8e6e6a89d99184f88249d4e880c50db260bb7b5b844227e1f9d0903a3fe728be","download_count":2,"created_at":"2026-04-01T14:36:44Z","updated_at":"2026-04-01T14:36:51Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332376","id":386332376,"node_id":"RA_kwDOEW4XoM4XBvbY","name":"atmos_1.214.0-test.6_freebsd_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180486316,"digest":"sha256:48898698fe5f25759c150111dfbc9ec8f7b8530e56df65b9eb1edc66a0594d61","download_count":1,"created_at":"2026-04-01T14:36:44Z","updated_at":"2026-04-01T14:36:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332178","id":386332178,"node_id":"RA_kwDOEW4XoM4XBvYS","name":"atmos_1.214.0-test.6_linux_386","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181072034,"digest":"sha256:e21b36bc4230c684cbad7170f215bda10071a6baf3fb50b1dd763a954b2fecfb","download_count":2,"created_at":"2026-04-01T14:36:29Z","updated_at":"2026-04-01T14:36:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332175","id":386332175,"node_id":"RA_kwDOEW4XoM4XBvYP","name":"atmos_1.214.0-test.6_linux_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194973858,"digest":"sha256:761e2c26c59dde20dae847d43f5cc2e0f597764a962f680cc2d8e55e45f24114","download_count":4,"created_at":"2026-04-01T14:36:29Z","updated_at":"2026-04-01T14:36:37Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332181","id":386332181,"node_id":"RA_kwDOEW4XoM4XBvYV","name":"atmos_1.214.0-test.6_linux_arm","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:8185cdf3a6dd9d66dc5da0725d1d65ffe04f40f0efa14bda92d5379e3e1e855e","download_count":1,"created_at":"2026-04-01T14:36:30Z","updated_at":"2026-04-01T14:36:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332179","id":386332179,"node_id":"RA_kwDOEW4XoM4XBvYT","name":"atmos_1.214.0-test.6_linux_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:abe687e8272a453a34991d9815bfb74ec96544caf2dfdad17d6592aa2cf077bd","download_count":2,"created_at":"2026-04-01T14:36:29Z","updated_at":"2026-04-01T14:36:36Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332393","id":386332393,"node_id":"RA_kwDOEW4XoM4XBvbp","name":"atmos_1.214.0-test.6_SHA256SUMS","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1107,"digest":"sha256:603d1305f076777e35fdf0fb8d4e868bed6c117d16fc552f0f46b3511c9910c6","download_count":1,"created_at":"2026-04-01T14:36:46Z","updated_at":"2026-04-01T14:36:46Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332381","id":386332381,"node_id":"RA_kwDOEW4XoM4XBvbd","name":"atmos_1.214.0-test.6_windows_386.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":184881664,"digest":"sha256:063c9523b0da3da5c4d282a40969cc11693c36847ae27b4159b6fe0c9145ca23","download_count":2,"created_at":"2026-04-01T14:36:45Z","updated_at":"2026-04-01T14:36:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332222","id":386332222,"node_id":"RA_kwDOEW4XoM4XBvY-","name":"atmos_1.214.0-test.6_windows_amd64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198322688,"digest":"sha256:ec8ce05477969f719a386bc0d6fa505ccf443141b530bba136d37c0ca17adfe5","download_count":2,"created_at":"2026-04-01T14:36:36Z","updated_at":"2026-04-01T14:36:46Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/386332237","id":386332237,"node_id":"RA_kwDOEW4XoM4XBvZN","name":"atmos_1.214.0-test.6_windows_arm64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182494208,"digest":"sha256:6e065b04c5c776e7a45d1b879907a375d5c80348a81ba136bbd565fd5f662a11","download_count":2,"created_at":"2026-04-01T14:36:37Z","updated_at":"2026-04-01T14:36:44Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.6/atmos_1.214.0-test.6_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.214.0-test.6","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.214.0-test.6","body":"## 🚀 Feature Preview Release\n\nThis is a **feature preview** based on an open pull request. It is intended for testing artifacts and validating functionality before the feature is merged.\n\n> [!WARNING]\n> This release is temporary and may be removed at any time without notice.\n"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/303954803","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/303954803/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/303954803/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.214.0-test.5","id":303954803,"author":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SHftz","tag_name":"v1.214.0-test.5","target_commitish":"fix/list-instances-json-marshal","name":"v1.214.0-test.5","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-03-31T23:39:36Z","updated_at":"2026-04-01T00:06:00Z","published_at":"2026-04-01T00:06:00Z","assets":[{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887142","id":385887142,"node_id":"RA_kwDOEW4XoM4XACum","name":"atmos_1.214.0-test.5_darwin_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":199498272,"digest":"sha256:5b09b4b994a867eb2709d83dc816785cfc9fe8332001ca58b0cadc58ade04bce","download_count":3,"created_at":"2026-04-01T00:04:50Z","updated_at":"2026-04-01T00:04:57Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_darwin_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887070","id":385887070,"node_id":"RA_kwDOEW4XoM4XACte","name":"atmos_1.214.0-test.5_darwin_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":187231666,"digest":"sha256:27d7d1537947642ca085a0477e2b42636b55f4f689c2354f560f34619477db91","download_count":2,"created_at":"2026-04-01T00:04:43Z","updated_at":"2026-04-01T00:04:49Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_darwin_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887068","id":385887068,"node_id":"RA_kwDOEW4XoM4XACtc","name":"atmos_1.214.0-test.5_freebsd_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194171052,"digest":"sha256:6867a43eb231f1d3734a88c81b0607df7dad610db5ead913eee60b3e6b007838","download_count":3,"created_at":"2026-04-01T00:04:43Z","updated_at":"2026-04-01T00:04:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_freebsd_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887069","id":385887069,"node_id":"RA_kwDOEW4XoM4XACtd","name":"atmos_1.214.0-test.5_freebsd_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":180486316,"digest":"sha256:3b58de115d9806a512fe8fee4fe7c23bfdb32876f7c4f4d40a2250bc9f408623","download_count":3,"created_at":"2026-04-01T00:04:43Z","updated_at":"2026-04-01T00:04:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_freebsd_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887170","id":385887170,"node_id":"RA_kwDOEW4XoM4XACvC","name":"atmos_1.214.0-test.5_linux_386","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181072034,"digest":"sha256:cde5bbd27b29f2cc7d3102347bcdda57f12de4bae59d0c49d70e277700573557","download_count":3,"created_at":"2026-04-01T00:04:57Z","updated_at":"2026-04-01T00:05:02Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_linux_386"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887171","id":385887171,"node_id":"RA_kwDOEW4XoM4XACvD","name":"atmos_1.214.0-test.5_linux_amd64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":194973858,"digest":"sha256:d8592fca4b11dd3e91f50acd2fa696b8da8f92124471c0ff074da3126dca4f29","download_count":8,"created_at":"2026-04-01T00:04:57Z","updated_at":"2026-04-01T00:05:03Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_linux_amd64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887166","id":385887166,"node_id":"RA_kwDOEW4XoM4XACu-","name":"atmos_1.214.0-test.5_linux_arm","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:bf5ee5dad99f02cfd9d33e70d74a556338e153cf0475dcaaa3f42cb9e2123b0c","download_count":3,"created_at":"2026-04-01T00:04:56Z","updated_at":"2026-04-01T00:05:03Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_linux_arm"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887141","id":385887141,"node_id":"RA_kwDOEW4XoM4XACul","name":"atmos_1.214.0-test.5_linux_arm64","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":181272738,"digest":"sha256:0a249fd1f460709b6257b3084b07fbadf4be750209e0a16eabf4f23fe6084694","download_count":2,"created_at":"2026-04-01T00:04:50Z","updated_at":"2026-04-01T00:04:56Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_linux_arm64"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887173","id":385887173,"node_id":"RA_kwDOEW4XoM4XACvF","name":"atmos_1.214.0-test.5_SHA256SUMS","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":1107,"digest":"sha256:bdfd8afad0df17389806f54c8b12ed96410827a0612ab19744fdbdc30654f0b1","download_count":2,"created_at":"2026-04-01T00:04:57Z","updated_at":"2026-04-01T00:04:58Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_SHA256SUMS"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887143","id":385887143,"node_id":"RA_kwDOEW4XoM4XACun","name":"atmos_1.214.0-test.5_windows_386.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":184880128,"digest":"sha256:ec4492c7cbef081fedf5f5bb3a216cc971511b65bef68e4991a86686d46e86af","download_count":3,"created_at":"2026-04-01T00:04:50Z","updated_at":"2026-04-01T00:04:57Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_windows_386.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887071","id":385887071,"node_id":"RA_kwDOEW4XoM4XACtf","name":"atmos_1.214.0-test.5_windows_amd64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":198322176,"digest":"sha256:15a4785e074dcfa3208cbfc8e044b058978d3fd65b87317bb565609c00546a92","download_count":3,"created_at":"2026-04-01T00:04:43Z","updated_at":"2026-04-01T00:04:50Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_windows_amd64.exe"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/assets/385887140","id":385887140,"node_id":"RA_kwDOEW4XoM4XACuk","name":"atmos_1.214.0-test.5_windows_arm64.exe","label":"","uploader":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/x-ms-dos-executable","state":"uploaded","size":182493184,"digest":"sha256:43dcab96951fe4b74c0775c54c183e7ea687937059ea12aa2a7d4c00ae9cf256","download_count":3,"created_at":"2026-04-01T00:04:49Z","updated_at":"2026-04-01T00:04:56Z","browser_download_url":"https://github.com/cloudposse/atmos/releases/download/v1.214.0-test.5/atmos_1.214.0-test.5_windows_arm64.exe"}],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.214.0-test.5","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.214.0-test.5","body":"## 🚀 Feature Preview Release\n\nThis is a **feature preview** based on an open pull request. It is intended for testing artifacts and validating functionality before the feature is merged.\n\n> [!WARNING]\n> This release is temporary and may be removed at any time without notice.\n"},{"url":"https://api.github.com/repos/cloudposse/atmos/releases/303941645","assets_url":"https://api.github.com/repos/cloudposse/atmos/releases/303941645/assets","upload_url":"https://uploads.github.com/repos/cloudposse/atmos/releases/303941645/assets{?name,label}","html_url":"https://github.com/cloudposse/atmos/releases/tag/v1.214.0-test.4","id":303941645,"author":{"login":"cloud-posse-feature-releases[bot]","id":216086508,"node_id":"BOT_kgDODOE37A","avatar_url":"https://avatars.githubusercontent.com/in/1400047?v=4","gravatar_id":"","url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D","html_url":"https://github.com/apps/cloud-posse-feature-releases","followers_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/followers","following_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/repos","events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/cloud-posse-feature-releases%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOEW4XoM4SHcgN","tag_name":"v1.214.0-test.4","target_commitish":"fix/list-instances-json-marshal","name":"v1.214.0-test.4","draft":false,"immutable":false,"prerelease":true,"created_at":"2026-03-31T22:33:28Z","updated_at":"2026-03-31T23:01:43Z","published_at":"2026-03-31T23:01:43Z","assets":[],"tarball_url":"https://api.github.com/repos/cloudposse/atmos/tarball/v1.214.0-test.4","zipball_url":"https://api.github.com/repos/cloudposse/atmos/zipball/v1.214.0-test.4","body":"## 🚀 Feature Preview Release\n\nThis is a **feature preview** based on an open pull request. It is intended for testing artifacts and validating functionality before the feature is merged.\n\n> [!WARNING]\n> This release is temporary and may be removed at any time without notice.\n"}]