Add CONTEXT.md as a comprehensive reverse prompt for AI assistants working
on this project. Consolidates knowledge from CLAUDE.md and MEMORY.md into
a single, structured reference document.
Includes:
- Project overview and architecture
- Technology constraints and component patterns
- Development workflow and testing strategy
- CI/CD and release process
- Known issues and workarounds (corrects outdated watchPlugins info)
- Deployment patterns and RBAC requirements
- Quick reference commands and diagnosis guide
- Historical context for key decisions
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Removed all Gitea-related files and references:
- Deleted .gitea/workflows directory (ai-review, ci, e2e, release)
- Removed gitea MCP server from .mcp.json
- Updated CLAUDE.md to list GitHub instead of Gitea
- Updated CHANGELOG.md to remove Gitea migration note
All CI/CD now runs exclusively through GitHub Actions.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Merged prepare-release and release workflows into a single workflow
that handles everything in one job. This eliminates the need for
separate tokens or manual intervention.
Single workflow now:
- Validates version format
- Updates package.json and artifacthub-pkg.yml
- Builds and packages plugin
- Computes checksum
- Updates metadata with real checksum
- Commits all changes to main
- Creates and pushes tag
- Creates GitHub release with tarball
No more tag push triggers, no separate tokens needed.
Everything runs in one workflow_dispatch job.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
The prepare-release workflow now uses GH_APP_TOKEN instead of
GITHUB_TOKEN to push commits and tags. This allows the tag push
to automatically trigger the release workflow without manual
intervention.
GITHUB_TOKEN cannot trigger other workflows due to GitHub's
security policy to prevent infinite workflow loops.
Added documentation in .github/GH_APP_TOKEN.md explaining the
token setup and requirements.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Replace complex draft/publish release workflow with clean two-workflow approach:
1. prepare-release.yaml (manual workflow_dispatch)
- Validates version format
- Updates package.json and artifacthub-pkg.yml
- Commits to main
- Creates and pushes tag
- Triggers release workflow automatically
2. release.yaml (automatic on tag push)
- Single build-and-release job
- Creates GitHub release with tarball in one step (no draft/publish)
- Separate update-metadata job runs after release
- Updates checksum on main branch
Benefits:
- No manual tarball upload required
- No tag force-push anti-pattern
- No draft/publish asset attachment failures
- Clear separation of concerns
- Self-documenting workflow
Eliminates:
- Guard logic for infinite loop prevention
- Post-release tag manipulation
- Manual intervention after workflow "succeeds"
- Checksum chicken-and-egg problem
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Changed ci.yaml from ubuntu-latest to local-ubuntu-latest
- Changed release.yaml from ubuntu-latest to local-ubuntu-latest
- e2e.yaml already using k3s-animaniacs (correct)
This ensures all CI jobs run on on-prem runners instead of GitHub-hosted runners.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Add explicit method: 'GET' to ApiProxy.request() calls in polaris.ts and PolarisSettings.tsx
for compatibility with Headlamp SDK
- Make refresh interval reactive by polling localStorage every second in PolarisDataContext
so settings changes take effect immediately without page reload
Fixes connection test button and data refresh issues.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
* chore: bump version to 0.3.11
* fix: update owner references from cpfarhood to privilegedescalation
- Updated artifacthub-repo.yml owner
- Updated artifacthub-pkg.yml maintainer
- Updated package.json author
Part of organization migration from cpfarhood to privilegedescalation.
- Remove navigation emojis from README and docs/README
- Remove "Made with ❤️ for the Kubernetes community" footer
- Remove checkmark/celebration emojis from quick-start guide
- Remove "(This!)" annotation from architecture diagrams
- Replace emoji references with plain text in features documentation
- Remove GOOD/BAD emojis from production deployment guide
- Simplify congratulations message
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Change license from MIT to Apache-2.0 across all documentation to match package.json
- Update all version references from v0.3.4/v0.3.5 to v0.3.10
- Update tarball filenames from headlamp-polaris-plugin-*.tar.gz to polaris-0.3.10.tar.gz
- Update README.md license badge
- Update artifacthub-pkg.yml license field
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Repository transferred from cpfarhood to privilegedescalation organization.
Updated all references in:
- Configuration files (package.json, artifacthub-pkg.yml)
- Documentation (README, CONTRIBUTING, SECURITY, docs/)
- Workflow files
GitHub Actions workflows will continue to work as they use
${{ github.repository }} which auto-updates.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Changed registerPluginSettings from 'headlamp-polaris-plugin' to 'polaris'
to match package.json name field. Headlamp requires exact match for
settings registration, otherwise settings page renders blank.
Root cause: When package.json was renamed to 'polaris' in PR #9,
the settings registration was not updated.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Replace hardcoded colors with --mui-palette-background-default which:
- Is fully opaque (fixes transparency issue)
- Automatically adapts to Headlamp's light/dark theme
- Matches pattern used throughout codebase
- Eliminates need for media query
Previous approach used hardcoded #ffffff/#1e1e1e which didn't
follow Headlamp's theme settings or custom themes.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
The previous approach using 'opacity: 1' and CSS variable
'var(--mui-palette-background-paper)' did not work because:
- CSS variable can resolve to semi-transparent rgba() values
- opacity property does not affect background color alpha channel
- Semi-transparent background allowed backdrop to bleed through
Solution:
- Use explicit opaque hex colors (#ffffff light, #1e1e1e dark)
- CSS media query for dark mode: @media (prefers-color-scheme: dark)
- Unique class name per namespace to avoid conflicts
- Maintains proper text color with CSS variable fallbacks
Root cause identified by debugger agent: opacity multiplies element
rendering but does NOT fix backgroundColor alpha transparency.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
GitHub's immutable releases feature locks releases upon publication,
preventing asset uploads. This fix uses a two-step process:
1. Create draft release (mutable) and upload tarball
2. Publish release after assets are attached
Also adds validation to ensure tarball name matches package.json,
preventing future naming mismatch issues.
Changes:
- Upgrade from softprops/action-gh-release@v1 to @v2
- Create release as draft initially (draft: true)
- Add separate publish step after asset upload
- Add tarball name validation step
Fixes release workflow failures that occurred with v0.3.6 and v0.3.7.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Add explicit opacity: 1 to namespace detail drawer panel to prevent
any transparency issues in dark/light modes.
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Happy <yesreply@happy.engineering>
Switch E2E tests from GitHub-hosted runners to self-hosted k3s-animaniacs
runners which have network access to headlamp.animaniacs.farh.net.
Changes:
- runs-on: k3s-animaniacs (from ubuntu-latest)
- Re-enable E2E on push/PR events
- Uses ARC (Actions Runner Controller) self-hosted runners
Resolves DNS resolution failures (ERR_NAME_NOT_RESOLVED) by using
runners in the same network as the Headlamp test instance.
Runner config: kubernetes/base/arc-runners/helmrelease-arc-runner-set.yaml
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Happy <yesreply@happy.engineering>
Update package.json name field to show cleaner name in Headlamp Settings → Plugins.
Before: headlamp-polaris-plugin
After: polaris
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Happy <yesreply@happy.engineering>
Changed drawer backgroundColor from var(--mui-palette-background-default)
to var(--mui-palette-background-paper) to match Headlamp's standard drawer
and dialog style with proper opaque elevated surface.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Major improvements to README.md:
1. Added badges:
- CI and E2E test status badges
- License badge
- Quick navigation links to docs sections
2. Updated features:
- Added dark mode support (v0.3.5)
- Highlighted critical Headlamp v0.39.0+ watchPlugins requirement
- Updated installation instructions with current best practices
3. Added comprehensive documentation section:
- Links to all docs/ files (ARCHITECTURE, DEPLOYMENT, SECURITY, TROUBLESHOOTING, TESTING)
- Table of contents with descriptions
- Quick reference troubleshooting table
4. Streamlined development section:
- Quick start commands
- Testing instructions with examples
- Links to detailed guides in CONTRIBUTING.md and TESTING.md
5. Updated release process:
- Reflects GitHub Actions (not Gitea)
- Documents ArtifactHub 30-minute sync
- Links to detailed release process in CONTRIBUTING.md
6. Added Contributing section:
- Links to CONTRIBUTING.md
- Highlights key development practices
7. General improvements:
- Removed outdated Gitea references
- Updated version references to v0.3.5
- Better organization and navigation
- Professional footer
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Priority 3 (Medium - Week 3) completion:
1. Created docs/TROUBLESHOOTING.md:
- Comprehensive troubleshooting guide for all common issues
- Plugin not showing, 403/404 errors, dark mode, data loading
- RBAC and network debugging scripts
- Browser console error solutions
- ArtifactHub sync troubleshooting
2. Created docs/TESTING.md:
- Complete testing guide covering unit, E2E, and CI/CD
- Vitest and Playwright documentation
- Test coverage goals and current status
- Best practices for writing tests
- Debugging strategies and common issues
- Example test patterns
3. Added comprehensive JSDoc comments:
- All exported functions in src/api/polaris.ts
- All exported types and interfaces
- React hooks with usage examples
- Context provider and consumer hook
Documentation completeness: 85% → 95%
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Changed drawer background from var(--mui-palette-background-paper) to
var(--mui-palette-background-default) which properly adapts to dark mode.
Also removed fallback values that were preventing theme variables from
working correctly.
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
- Add docs/ARCHITECTURE.md with system architecture, data flow diagrams, component hierarchy, design decisions, and known limitations
- Add docs/DEPLOYMENT.md with comprehensive installation guide including Helm integration, RBAC configuration, network policies, plugin manager setup, and troubleshooting
- Add SECURITY.md with security model, RBAC requirements, network security, vulnerability reporting, dependency scanning, and compliance considerations
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Add comprehensive contributor guidelines and complete changelog documenting
all 34 versions from v0.0.1 to v0.3.4. This implements Priority 1 from the
documentation-engineer analysis.
CONTRIBUTING.md includes:
- Development workflow and setup
- Branching strategy (feat/, fix/, docs/, etc.)
- Commit message conventions (Conventional Commits)
- Pull request process and checklist
- Code style guidelines (TypeScript, React, imports)
- Testing requirements (unit + E2E)
- Documentation update requirements
- Release process for maintainers
CHANGELOG.md includes:
- All 34 released versions with categorized changes
- Features, fixes, changes, infrastructure updates
- Links to GitHub releases for each version
- Follows Keep a Changelog format
- Semantic versioning
Documentation completeness: 65% → 75%
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Run eslint autofix to sort imports and remove unused ResultCounts import
from InlineAuditSection. This fixes CI lint failures.
Changes:
- Sort imports in all source files per eslint-plugin-import rules
- Remove unused ResultCounts import from InlineAuditSection.tsx
All CI checks now pass:
- ✅ Build successful
- ✅ Lint clean (no warnings)
- ✅ Type-check passing
- ✅ Format check passing
- ✅ Unit tests passing (50/50)
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Remove Gitea workflows and consolidate to GitHub Actions as the single
CI/CD platform. GitHub is now the sole source of truth for the project.
Changes:
- Remove .gitea/workflows/ directory entirely
- ai-review.yaml (Gitea-specific, not migrating)
- e2e.yaml (replaced by .github/workflows/e2e.yaml)
- release.yaml (already exists at .github/workflows/release.yaml)
- Migrate .gitea/workflows/ci.yaml → .github/workflows/ci.yaml
- Add unit tests to CI workflow
- Use Node.js 20 with npm caching
- Add 10-minute timeout
GitHub Actions Workflows:
- ci.yaml: Lint, type-check, format-check, build, test
- e2e.yaml: End-to-end Playwright tests
- release.yaml: Build tarball, create GitHub release, update ArtifactHub metadata
Repository Setup:
- Single remote: https://github.com/cpfarhood/headlamp-polaris-plugin
- All development, CI/CD, and releases happen on GitHub
- ArtifactHub pulls releases from GitHub every 30 minutes
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
Add comprehensive Playwright E2E testing documentation and additional
test coverage for app bar badge and plugin settings functionality.
Changes:
- Add GitHub Actions workflow for E2E tests (.github/workflows/e2e.yaml)
- Create .env.example for local test configuration
- Update .gitignore to exclude .env files
- Enhance e2e/README.md with:
- Detailed test coverage documentation
- Cluster requirements and prerequisites
- Debugging guides and troubleshooting tips
- CI/CD integration instructions for GitHub Actions
- Best practices and examples for writing new tests
- Add e2e/settings.spec.ts:
- Test plugin settings page visibility
- Test refresh interval configuration
- Test dashboard URL configuration
- Test connection test button
- Add e2e/appbar.spec.ts:
- Test badge displays cluster score
- Test badge navigation to overview
- Test badge color reflects score level
- Test badge updates across clusters
Test Results (v0.3.4):
- 5/16 tests passing (sidebar, namespaces, drawer functionality)
- 11/16 failing due to missing v0.3.4 features (settings, app bar badge)
- Tests will pass once plugin is updated to v0.3.4 in cluster
The E2E test suite now provides comprehensive coverage of:
- Plugin registration and loading
- Navigation and routing
- Settings configuration
- App bar integration
- Dark mode support
- Data fetching and rendering
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>