Update to support reference architectures#5
Merged
Conversation
osterman
approved these changes
Nov 12, 2020
osterman
added a commit
that referenced
this pull request
Oct 6, 2025
Update developer and PRD documentation to reflect the new structured markdown error formatting with explanations and examples. ## Changes ### Developer Guide (docs/errors.md) **Error Builder API**: - Document `WithExplanation()` and `WithExplanationf()` methods - Document `WithExample()` and `WithExampleFile()` methods - Add embedded markdown example pattern with `//go:embed` - Update Quick Start with complete example using all features **Error Formatting**: - Add "Structured Markdown Output" section showing 6 sections - Document section order and conditional rendering - Provide complete example with all sections - Update configuration options to reflect context table in all modes ### PRD (docs/prd/atmos-error-handling.md) **Design Decisions**: - Update "Builder Pattern for Complex Errors" with new methods - Add "Structured Markdown Error Presentation" as Decision #5 - Document section hierarchy and visual design rationale - Provide formatted example output **Error Categories**: - Update "Builder-Enhanced Errors" with rich error example - Show explanations, examples, hints, and context together - Document use cases for structured error presentation **Migration Path**: - Add Phase 6: Structured Markdown Error Formatting (Complete) - Document all implementation details: - New builder methods - Formatter refactoring with 6 sections - Workflow error conversions - Exit code handling updates - 21 comprehensive tests - Golden snapshot regeneration All documentation now reflects the complete structured markdown error system. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 18, 2025
- Fix broken documentation links in blog and update.mdx - Change /core-concepts/vendor/vendor-manifest to /vendor/vendor-config - Change /core-concepts/vendor to /vendor/vendor-config and /cheatsheets/vendoring - Document vendor update stub as known limitation with detailed TODOs Note: Comments #1, #3, #4, #5 were already addressed in previous commits. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 21, 2025
- Fix broken documentation links in blog and update.mdx - Change /core-concepts/vendor/vendor-manifest to /vendor/vendor-config - Change /core-concepts/vendor to /vendor/vendor-config and /cheatsheets/vendoring - Document vendor update stub as known limitation with detailed TODOs Note: Comments #1, #3, #4, #5 were already addressed in previous commits. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 23, 2025
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 26, 2025
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 26, 2025
- Fix broken documentation links in blog and update.mdx - Change /core-concepts/vendor/vendor-manifest to /vendor/vendor-config - Change /core-concepts/vendor to /vendor/vendor-config and /cheatsheets/vendoring - Document vendor update stub as known limitation with detailed TODOs Note: Comments #1, #3, #4, #5 were already addressed in previous commits. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 29, 2025
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 29, 2025
- Fix Comment #3: Parse global flags before InitCliConfig in all auth commands by adding BuildConfigAndStacksInfo helper to pkg/flags and cmd/auth/helpers.go - Fix Comment #4: Add guard for empty selectable array in configure.go to prevent index out of bounds when no AWS user identities found - Fix Comment #5: Remove duplicate IdentityFlagName constants by using cfg.IdentityFlagName from pkg/config/const.go as canonical source - Remove unused schema imports from login.go, exec.go, shell.go - Remove unnecessary nolint:gosec directives from env.go 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 29, 2025
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 30, 2025
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Dec 31, 2025
1. Fix hydration mismatch: Initialize isFullscreen/isMobile to false, then set mobile state after mount in useEffect (Comment #1) 2. Fix stale closure in resize handler: Use ref to track current fullscreen state instead of closure value (Comment #2) 3. Remove unused import: Remove createPortal from SlideNotesPopout (Comment #3) 4. Fix popout window recreation: Remove currentSlide/totalSlides/ currentNotes from dependency array so window isn't recreated on every slide change (Comment #4) 5. Fix XSS vulnerability: Use textContent instead of innerHTML when setting notes content in popout window (Comment #5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
aknysh
added a commit
that referenced
this pull request
Jan 1, 2026
…omization (#1925) * feat: Improve slide deck mobile responsiveness and fullscreen behavior - Auto-enter fullscreen mode on mobile/tablet devices (touch + width ≤ 1024px) - Detect device orientation and screen dimensions for responsive behavior - Remove forced dark mode styling; fullscreen now respects current theme - Add responsive breakpoints for tablet (996px) and mobile (768px) - Implement viewport-based scaling for text and images on mobile - Maintain 2-column split layouts on mobile with scaled content - Increase z-index to 99999 to prevent navbar overlap in fullscreen - Improve padding and spacing for mobile screens - Use clamp() with viewport units (vw) for fluid typography 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * feat: Add responsive scaling for desktop fullscreen mode - Remove max-width constraint (1600px) on fullscreen slide wrapper - Use viewport-based sizing to fill entire screen while maintaining 16:9 - Scale slide content width from 800px to 85-90% in fullscreen - Add clamp() with vw units for text scaling in fullscreen: - Titles scale from 2.5rem to 4rem (4vw) - Title slides scale from 3.5rem to 5.5rem (5vw) - Content/lists scale from 1.25rem to 2rem (2vw) - Code scales from 0.9rem to 1.3rem (1.2vw) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: Increase bomb image width from 180px to 280px 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Allow vertical scrolling in fullscreen slides for long content Changes overflow from hidden to overflow-y: auto so YAML code blocks and other long content can be scrolled within the slide. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Make mobile fullscreen fill entire viewport without black borders Remove 16:9 aspect ratio constraint on mobile so the slide background extends to fill the entire screen instead of showing black bars. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Remove dark borders on mobile fullscreen by making containers transparent Make all fullscreen containers transparent so the slide's background extends to fill the entire viewport without visible borders. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Restore solid background and visible controls on mobile fullscreen - Use solid background color instead of transparent to hide page behind - Add fixed positioning for toolbar at bottom of screen - Add fixed positioning for nav buttons with semi-transparent background - Add padding-bottom to slide content to avoid toolbar overlap 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Hide left-area container in mobile fullscreen mode The left-area container was taking up space in the flex layout even though the nav buttons were fixed positioned, causing a dark strip on the left side of the slide. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Improve vertical centering in mobile fullscreen mode - Changed container align-items from stretch to center - Added flexbox centering to slide-wrapper - Changed slide height from 100% to auto with min-height: 100% - Added explicit flexbox centering to slide element 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Keep prev navigation button visible in mobile fullscreen Instead of hiding the left-area container completely (which also hides the prev button), collapse it to width: 0 but keep overflow: visible so the fixed-positioned nav button still renders. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Ensure vertical centering for content layout slides on mobile - Changed slide height back to 100% (from auto with min-height) - Added explicit centering override for content layout slides - Keep text-align: left for content readability 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Enable vertical scrolling on mobile fullscreen slides - Changed slide from flexbox to block display to allow overflow scrolling - Moved vertical centering to slide__inner using min-height + flexbox - margin: auto centers content when it's shorter than viewport - Long content can now scroll properly 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Use absolute positioning for mobile slide to enable scrolling - Removed flexbox from slide-wrapper (was preventing scroll) - Used absolute positioning on slide to fill container - Slide now has fixed dimensions and can scroll content 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Use 'justify-content: safe center' for vertical centering with scroll - Use 'safe center' which centers when content fits, aligns to start when overflow - Keep flexbox display for proper centering - Remove conflicting display: block from Slide.css 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Use margin:auto on slide__inner for vertical centering - Removed 'justify-content: safe center' (limited browser support) - Use margin: auto on slide__inner with flex-shrink: 0 - This centers when content is short, scrolls when content overflows 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Remove top padding from mobile fullscreen slide Changed padding from '1.5rem 2rem' to '0 2rem' to eliminate the top offset that was pushing content down. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Remove all top padding from mobile fullscreen slides - Added !important to slide padding override (0 1.5rem) - Explicitly set margin: auto and padding: 0 on slide__inner 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Add horizontal padding to slide__inner on mobile fullscreen Changed padding from 0 to '0 1rem' for left/right spacing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Add customizable speaker notes with position, display mode, and popout options - Add notes preferences state (position, displayMode, isPopout) to context with localStorage persistence - Add bottom position for notes panel (Google Slides style) with 25vh height - Add shrink display mode that resizes slides instead of overlaying - Add toolbar controls to toggle position, display mode, and popout (desktop only) - Add popout window component with BroadcastChannel sync for cross-window navigation - Fix navigation buttons z-index to work when notes overlay is present - Ensure notes content is scrollable with proper min-height: 0 on flex child 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: Move notes preference controls to SlideNotesPanel header Move the position toggle, display mode toggle, and popout button from the main toolbar into the SlideNotesPanel header. The main toolbar now only shows a single notes button that toggles notes or brings them back from popout mode. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Add horizontal padding to bottom position speaker notes The notes content was flush against the left/right edges when in bottom position. Added 2rem padding to both header and content for better visual spacing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Extend progress bar to full width in page mode The progress bar was respecting the container padding, leaving gaps on the sides. Now uses negative margins to extend edge-to-edge. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Address CodeRabbit review comments for SlideDeck 1. Fix hydration mismatch: Initialize isFullscreen/isMobile to false, then set mobile state after mount in useEffect (Comment #1) 2. Fix stale closure in resize handler: Use ref to track current fullscreen state instead of closure value (Comment #2) 3. Remove unused import: Remove createPortal from SlideNotesPopout (Comment #3) 4. Fix popout window recreation: Remove currentSlide/totalSlides/ currentNotes from dependency array so window isn't recreated on every slide change (Comment #4) 5. Fix XSS vulnerability: Use textContent instead of innerHTML when setting notes content in popout window (Comment #5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Improve popout window slide state synchronization - Add refs to track current slide state for immediate popout initialization - Create updatePopoutContent helper to consolidate DOM update logic - Immediately update popout content after document.close() to avoid "Loading..." flash - Add popup=yes to window.open() for better browser compatibility - Note: Arc browser opens popups as tabs by design, but BroadcastChannel sync still works 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Add slide-notes-extractor plugin for TTS export Creates plain text files from SlideNotes content at build time for OpenAI TTS. Files are output to build/slides/{deck-name}/slide{N}.txt and sync to S3 with the rest of the build. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Add TTS player for speaker notes Implement a full-featured Text-to-Speech player for slide speaker notes: - Play/Pause/Stop controls in both toolbar and player bar - Mute toggle with visual feedback (red icon when muted) - Voice selector with 6 OpenAI voices (alloy, echo, fable, nova, onyx, shimmer) - Speed control (0.5x to 2x) - Progress bar with seek capability - Auto-advance to next slide when audio completes - Auto-continue playback when manually navigating slides - Preferences persistence (voice, speed, mute) in localStorage - Keyboard shortcuts: P (play/pause), M (mute) Uses the Cloud Posse TTS API which converts slide notes .txt files (generated at build time by slide-notes-extractor plugin) to speech. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Address security and accessibility review comments - Fix XSS vulnerability in slide-notes-extractor by using iterative tag stripping and removing any remaining < or > characters - Add keyboard support to TTSPlayer progress bar (ArrowLeft/Right for 5s seek, Home/End for start/end) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * [autofix.ci] apply automated fixes * [autofix.ci] apply automated fixes (attempt 2/3) * fix: Auto-play TTS continues after slide advance The TTS auto-play feature was not continuing playback after auto-advancing to the next slide because the "was playing" state was cleared before the slide change occurred. Changed to use a dedicated autoPlayRef that: - Gets set to true when user starts playing - Stays true across slide transitions (so next slide auto-plays) - Gets cleared on pause, stop, or reaching the last slide Also wired up TTSPlayer callbacks so pause/stop/resume properly update the auto-play state. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Use text extraction approach for HTML sanitization Changed from iterative tag stripping to text extraction approach to address CodeQL "incomplete multi-character sanitization" alert. The new approach: 1. Extracts text content between HTML tags 2. Joins with spaces to preserve word boundaries 3. Removes any stray angle brackets as final cleanup This avoids the regex replacement pitfall where removing one tag could leave fragments that combine into new tags. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Add 2-second delay between slides during TTS auto-play When auto-playing speaker notes, there's now a 2-second pause between slides to give listeners time to absorb the content before the next slide's audio begins. The delay is: - Configurable via AUTO_ADVANCE_DELAY constant (currently 2000ms) - Cancelled when user pauses or stops playback - Cleaned up on component unmount 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: Split TTS auto-advance delay into 1s after + 1s before Split the 2-second delay between slides into two parts: - 1 second after the current slide's audio ends - 1 second before the next slide's audio starts This provides a more balanced pause that gives time for both the current slide to sink in and for the visual transition to the next slide before audio begins. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: Rename TTS delay constants for clarity Rename AUTO_ADVANCE_DELAY_AFTER/BEFORE to AUTO_ADVANCE_DELAY and AUTO_PLAY_DELAY for clearer semantics: - AUTO_ADVANCE_DELAY: delay before advancing to next slide - AUTO_PLAY_DELAY: delay before starting audio on new slide 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Keep TTS player bar visible during slide transitions Add isAutoPlaying state to track auto-play mode for UI updates. Previously, the TTSPlayer bar would disappear during the 1-second delay between slides because neither isPlaying nor isPaused was true. Now the bar stays visible when navigating via the drawer or during auto-advance transitions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Show loading spinner during TTS slide transitions The play button now shows a loading spinner during the delay between slides when in auto-play mode. Previously it would briefly show the play icon which was jarring. Changes: - Always show the TTS button (not conditional on currentNotes) - Show spinner when isAutoPlaying but not yet playing/paused - Button stays active during auto-play transitions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Reuse Audio element for iOS autoplay compatibility iOS Safari blocks audio playback that isn't directly triggered by user interaction. Creating a new Audio() element for each slide broke the user-activation chain, causing "request is not allowed by the user agent" errors on mobile. Fix: Reuse a single persistent Audio element and update its src property instead of creating new elements. This preserves the user-activation state established on the first tap. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Prefetch TTS audio in parallel with delay Start the TTS API call immediately when a slide changes, running it in parallel with the AUTO_PLAY_DELAY. This way the delay is: max(delay, api_call_time) instead of: delay + api_call_time Added prefetch() function to useTTS that returns a playPrefetched() function, allowing the fetch and delay to run concurrently. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Prefetch next slide audio while current slide plays Add background prefetching of n+1 slide audio to eliminate API latency between slides during auto-play. Changes: - Add prefetch cache (Map keyed by slide+voice) - Add prefetchInBackground() for silent background fetching - Update play() and prefetch() to check cache first - Trigger background prefetch when audio starts playing Now while slide N plays, slide N+1 audio is fetched in parallel. When advancing, the cached audio is used immediately. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Handle unhandled promise rejection in TTS resume The resume callback was calling audio.play() without handling the returned Promise, which could lead to unhandled rejections when autoplay is blocked or other playback errors occur. Now properly chains .then/.catch to update state appropriately on success or failure. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Improve mobile portrait fullscreen layout for slides Address issues in mobile Safari portrait mode: - Use dvh units to account for dynamic browser UI (URL bar) - Add safe-area-inset padding for notched devices - Reduce font sizes for narrow portrait viewports - Stack split layouts vertically in portrait - Align content to top instead of center to prevent overlap 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Center slide content vertically in mobile portrait mode Reverted to centered vertical alignment for slides in portrait mode. The previous top-alignment looked unbalanced for shorter content. Content will scroll if it overflows. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Andriy Knysh <aknysh@users.noreply.github.com>
osterman
added a commit
that referenced
this pull request
Jan 2, 2026
- cmd/auth/shell.go: Use envpkg.MergeGlobalEnv() for consistency with exec.go (addresses CodeRabbit comment #3 about env merging inconsistency) - cmd/auth/whoami.go: Use %w for error wrapping to preserve error chain (addresses CodeRabbit comment #4 about error wrapping) - tests/cli_describe_component_test.go: Use cross-platform TTY detection with term.IsTTYSupportForStdout() and close file handle properly (addresses CodeRabbit comments #5, #6) - tests/describe_test.go: Add skipIfNoTTY helper with cross-platform TTY detection and proper file handle cleanup (addresses CodeRabbit comments #7, #8) Note: Comments #1 and #2 (codeql clear-text logging) are false positives - the atmos auth env command intentionally outputs credentials for shell sourcing, similar to `aws configure export-credentials`. Suppression comments are already in place. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 3, 2026
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 4, 2026
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 4, 2026
- Fix Comment #3: Parse global flags before InitCliConfig in all auth commands by adding BuildConfigAndStacksInfo helper to pkg/flags and cmd/auth/helpers.go - Fix Comment #4: Add guard for empty selectable array in configure.go to prevent index out of bounds when no AWS user identities found - Fix Comment #5: Remove duplicate IdentityFlagName constants by using cfg.IdentityFlagName from pkg/config/const.go as canonical source - Remove unused schema imports from login.go, exec.go, shell.go - Remove unnecessary nolint:gosec directives from env.go 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 4, 2026
- cmd/auth/shell.go: Use envpkg.MergeGlobalEnv() for consistency with exec.go (addresses CodeRabbit comment #3 about env merging inconsistency) - cmd/auth/whoami.go: Use %w for error wrapping to preserve error chain (addresses CodeRabbit comment #4 about error wrapping) - tests/cli_describe_component_test.go: Use cross-platform TTY detection with term.IsTTYSupportForStdout() and close file handle properly (addresses CodeRabbit comments #5, #6) - tests/describe_test.go: Add skipIfNoTTY helper with cross-platform TTY detection and proper file handle cleanup (addresses CodeRabbit comments #7, #8) Note: Comments #1 and #2 (codeql clear-text logging) are false positives - the atmos auth env command intentionally outputs credentials for shell sourcing, similar to `aws configure export-credentials`. Suppression comments are already in place. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 5, 2026
- Fix Comment #3: Parse global flags before InitCliConfig in all auth commands by adding BuildConfigAndStacksInfo helper to pkg/flags and cmd/auth/helpers.go - Fix Comment #4: Add guard for empty selectable array in configure.go to prevent index out of bounds when no AWS user identities found - Fix Comment #5: Remove duplicate IdentityFlagName constants by using cfg.IdentityFlagName from pkg/config/const.go as canonical source - Remove unused schema imports from login.go, exec.go, shell.go - Remove unnecessary nolint:gosec directives from env.go 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 5, 2026
- cmd/auth/shell.go: Use envpkg.MergeGlobalEnv() for consistency with exec.go (addresses CodeRabbit comment #3 about env merging inconsistency) - cmd/auth/whoami.go: Use %w for error wrapping to preserve error chain (addresses CodeRabbit comment #4 about error wrapping) - tests/cli_describe_component_test.go: Use cross-platform TTY detection with term.IsTTYSupportForStdout() and close file handle properly (addresses CodeRabbit comments #5, #6) - tests/describe_test.go: Add skipIfNoTTY helper with cross-platform TTY detection and proper file handle cleanup (addresses CodeRabbit comments #7, #8) Note: Comments #1 and #2 (codeql clear-text logging) are false positives - the atmos auth env command intentionally outputs credentials for shell sourcing, similar to `aws configure export-credentials`. Suppression comments are already in place. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 23, 2026
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 23, 2026
1. delete.go: Require --force flag for deletion (returns error instead of silently exiting), using static error ErrPlanfileDeleteRequireForce 2. list.go: Add global flag parsing (--base-path, --config, etc.) 3. show.go: Add global flag parsing (--base-path, --config, etc.) 4. check.go: Add Name field to UpdateCheckRunOptions (distinct from Title) 5. checks.go: Use opts.Name instead of opts.Title for GitHub API Note: Comment #5 about template field access was investigated and found to be a false positive. The templates correctly access fields from TerraformTemplateContext which provides .Resources, .HasChanges() etc. at the top level (not under .Result). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 30, 2026
- Use filepath.Join for OS-safe test paths (Comments #1, #6) - Route FileCache operations through injected FileSystem interface (Comment #2) - Add ErrCacheFetch sentinel and wrap fetch() errors (Comment #3) - Fix misleading "log" comment in GetOrFetch (Comment #4) - Add missing BrowserSessionWarningShown assertion (Comment #5) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
osterman
added a commit
that referenced
this pull request
Jan 30, 2026
- Use filepath.Join for OS-safe test paths (Comments #1, #6) - Route FileCache operations through injected FileSystem interface (Comment #2) - Add ErrCacheFetch sentinel and wrap fetch() errors (Comment #3) - Fix misleading "log" comment in GetOrFetch (Comment #4) - Add missing BrowserSessionWarningShown assertion (Comment #5) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Benbentwo
added a commit
that referenced
this pull request
Feb 23, 2026
- Update security note #5 to reflect deterministic identity binding via --identity flag (no longer "ambient AWS credentials") - Fix diagram: "STS GetCallerID" → "GetCallerIdentity" - Clarify that auth subcommands use authCmd.AddCommand(), not CommandProvider (which is for top-level commands only) - Distinguish existing --role-arn flag (generation-time) from future exec plugin role assumption (runtime) in Future Enhancements Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Benbentwo
added a commit
that referenced
this pull request
Mar 4, 2026
* docs: Add EKS kubeconfig authentication integration PRD This PRD defines the design for integrating EKS kubeconfig generation into Atmos's authentication system via the integration pattern. EKS kubeconfig generation will be automatic on identity login and available via `atmos auth eks-kubeconfig` command. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * docs: Update EKS PRD based on review feedback Changes based on PR review: - Use `atmos aws eks update-kubeconfig` instead of `atmos auth eks-kubeconfig` - Update kubeconfig schema to use nested structure with path/mode/update fields - Simplify KUBECONFIG env var example to use `atmos auth env --format=export` - Add note clarifying exec credential plugin is standard AWS CLI format 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * docs: Sync EKS kubeconfig PRD with current codebase Align the PRD with the actual integration infrastructure after rebasing onto main. Fixes incorrect interface definition, method names, file paths, and dependency status. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Use atmos as exec credential plugin, simplify XDG path Replace `aws eks get-token` with `atmos auth eks-token` as the kubeconfig exec credential plugin, eliminating the AWS CLI dependency. Simplify XDG path usage to call GetXDGConfigDir directly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Update architecture diagram to show kubectl exec flow Add the kubectl-time exec flow showing atmos auth eks-token being invoked by kubectl to generate bearer tokens via STS. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Add identity resolution, KUBECONFIG append, Mode parsing to EKS PRD - Add --identity flag and interactiveMode: Never to exec plugin spec for deterministic credential selection with multiple identities - Specify KUBECONFIG colon-separated append semantics (idempotent) - Fix eks-token command path to cmd/auth_eks_token.go matching existing auth subcommand pattern (not CommandProvider) - Specify KubeconfigSettings.Mode octal parsing via strconv.ParseUint - Replace custom MergeKubeconfig with k8s.io/client-go/tools/clientcmd Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Fix security note, diagram label, Role ARN scope in EKS PRD - Update security note #5 to reflect deterministic identity binding via --identity flag (no longer "ambient AWS credentials") - Fix diagram: "STS GetCallerID" → "GetCallerIdentity" - Clarify that auth subcommands use authCmd.AddCommand(), not CommandProvider (which is for top-level commands only) - Distinguish existing --role-arn flag (generation-time) from future exec plugin role assumption (runtime) in Future Enhancements Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Sync EKS PRD with current codebase - Add validation spec for KubeconfigSettings.Update (reject invalid values at config-load time, default "merge") - Add k8s.io/client-go and PR #1903 to Dependencies section - Fix `atmos auth env --format=export` to `atmos auth env` (bash is the default; "export" is not a valid format) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Rewrite EKS PRD intro, add Terraform provider documentation Rewrite the executive summary and problem statement to better frame the motivation: Atmos already manages cloud auth, so extending to Kubernetes config is a natural next step. Add Terraform Kubernetes provider section showing kubeconfig-based and exec-based approaches. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Clarify exec plugin mechanism in Terraform provider section Explain that the kubeconfig's exec spec contains `command: atmos` which the Terraform provider invokes on demand for token refresh. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: Add integration lifecycle, env var composition, and flag docs to EKS PRD - Show --identity and --profile flags in Desired Workflow examples - Extend Integration interface with Cleanup() and Environment() methods - Add Integration Cleanup on Logout section (logout undoes login effects) - Add Integration Environment Variables section with composition strategy for multi-integration scenarios (blue/green clusters, mixed EKS+ECR) - Update CLI command flags with env var bindings and flag disambiguation - Replace kubeconfig cleanup future enhancement with CI/CD workflow item - Add test cases for cleanup, environment composition, and logout Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
what
why
opsctltoatmosprojects/tocomponents/