Skip to content

Vulcan Application Modernization Roadmap

Overview

This document outlines the complete modernization strategy for the Vulcan application, covering backend, middleware, and frontend components. It establishes a phased approach with clear milestones, decision points, and success criteria to keep the migration focused and manageable.

Guiding Principles

  1. Incremental Progress: Prefer smaller, focused changes over sweeping rewrites
  2. Measured Outcomes: Define clear success criteria for each phase
  3. Backward Compatibility: Maintain functionality throughout the migration
  4. Testing First: Establish comprehensive tests before making significant changes
  5. Ruthless Prioritization: Defer non-essential improvements to future phases
  6. Continuous Integration: Keep the application deployable at all times
  7. Technical Debt Reduction: Address existing issues before adding new complexity
  8. Evidence-Based Decisions: Use metrics and benchmarks to guide architectural choices

Phase 0: Rails 8 and Infrastructure Modernization (COMPLETED)

Objectives

  • ✅ Complete Rails 8.0.2.1 upgrade
  • ✅ Complete the migration from Webpacker to jsbundling-rails
  • ✅ Upgrade Ruby to 3.3.9 and Node.js to 22 LTS
  • ✅ Fix all security vulnerabilities and pass SonarCloud quality gate
  • ✅ Establish OIDC auto-discovery for simplified authentication

Completed Tasks

Success Criteria Achieved

  • ✅ Rails 8.0.2.1 running in production
  • ✅ All assets build with jsbundling-rails (Webpacker removed)
  • ✅ All features function identically to pre-migration
  • ✅ Security vulnerabilities fixed (SonarCloud passing)
  • ✅ OIDC configuration simplified to 4 environment variables
  • ✅ Docker builds optimized with jemalloc

Decision Points

  • GO/NO-GO: Proceed to next phase only when all entry points are successfully migrated
  • SCOPE: Identify any critical technical debt to address immediately
  • PRIORITIZATION: Use security findings to help determine next phase ordering

Phase 0.5: Development Process Enhancement

Objectives

  • Establish standardized linting and code quality tools
  • Implement automated security scanning
  • Enhance testing infrastructure and processes
  • Create baseline metrics for code quality and security

Tasks

Success Criteria

  • Functional CI pipeline with linting, testing, and security scanning
  • Code quality metrics established and documented
  • Pre-commit hooks prevent common issues
  • Test coverage meets established threshold (recommend >70%)
  • Documented procedures for security review

Decision Points

  • TOOLS: Select appropriate linting and security tools for the stack
  • STRICTNESS: Determine appropriate levels of enforcement vs. warning
  • NEXT PHASE: Determine whether Rails or Vue upgrades should be prioritized next based on security findings

Phase 1: Rails Upgrade and Backend Modernization

Objectives

  • Upgrade Rails to latest version
  • Optimize database design and performance
  • Create comprehensive API foundation
  • Enhance backend test coverage
  • Address prioritized security vulnerabilities

Tasks

Success Criteria

  • All Rails tests pass on the upgraded version
  • Database queries show measurable performance improvements
  • Complete API coverage for existing functionality
  • API performance meets established benchmarks
  • Authentication security review completed
  • No remaining temporary simplifications from migration phase

Decision Points

  • ARCHITECTURE: Decide on API-only mode versus hybrid approach
  • SCHEMA VALIDATION: Evaluate benefits of schema validation libraries
  • DATABASE: Decide on specific optimization techniques (indexing, denormalization, etc.)
  • SERIALIZATION: Choose between fast_jsonapi, jbuilder, or alternative

Phase 2: Vue 2 to Vue 3 Transition

Objectives

  • Upgrade Vue from 2.x to 3.x
  • Replace bootstrap-vue with bootstrap-vue-3
  • Implement comprehensive frontend testing
  • Maintain feature parity throughout the upgrade
  • Address prioritized frontend security issues

Tasks

Success Criteria

  • All Vue components render and function correctly
  • Frontend test coverage meets established threshold (recommend >70%)
  • No degradation in performance benchmarks
  • No user-visible differences in UI or behavior
  • No remaining temporary simplifications from migration phase

Decision Points

  • TESTING APPROACH: Choose between component testing, E2E testing, or both
  • SELECTIVE REFACTOR: Identify which components benefit most from Composition API conversion
  • LIBRARY EVALUATION: Re-evaluate bootstrap-vue-3 vs alternatives based on implementation experience

Phase 3: Component Architecture Modernization

Objectives

  • Implement modern state management solution
  • Evaluate and improve component architecture
  • Establish clear data flow patterns
  • Improve component reusability
  • Enhance client-side performance
  • Address architectural security concerns

Tasks

Success Criteria

  • Measurable performance improvements in key interactions
  • Reduced code duplication and complexity
  • Improved developer experience metrics
  • Enhanced type safety throughout the application
  • Frontend security posture improved
  • Component architecture follows established best practices

Decision Points

  • TYPING: Evaluate effort/value ratio of TypeScript adoption
  • ARCHITECTURE: Consider modular architecture for larger application sections
  • STATE: Assess centralized vs. component-local state management needs
  • VALIDATION: Decide on client-side validation approach

Phase 3.5: Runtime Configuration Management

Objectives

  • Implement dynamic runtime configuration management comparable to Heimdall2
  • Enable zero-restart administrative operations
  • Provide web-based administration interface
  • Support bulk operations for users and STIG/SRG management
  • Enhance deployment and scaling capabilities

Context

Based on user feedback (Issue #654) comparing Vulcan to Heimdall2's administrative ease, this phase addresses the gap in runtime configuration management. The implementation leverages proven Rails gems to deliver robust administration capabilities rapidly.

Tasks

Phase 3.5.1: Foundation (4-6 hours)

    • Welcome text and contact information
    • Session timeout settings (with validation)
    • User registration and project creation permissions
    • Email template customizations

Phase 3.5.2: User Management (2-3 hours)

Phase 3.5.3: Feature Flags (1-2 hours)

Phase 3.5.4: Bulk Operations (2-4 hours)

Technology Stack

  • rails-settings-cached: Database-backed configuration with automatic caching
  • ActiveAdmin: Complete admin interface framework (battle-tested)
  • Flipper + Flipper-UI: Feature flags and runtime feature management
  • Background jobs: For bulk operations and maintenance tasks

Security Architecture

ruby
# Security-critical settings (remain environment variables):
- Database connections (DATABASE_URL)
- OIDC client secrets (VULCAN_OIDC_CLIENT_SECRET)
- Encryption keys and LDAP credentials

# Administrative settings (move to database-backed):
- UI customizations and welcome text
- Session timeout and user permissions
- Email templates and notification settings
- Feature flags for experimental features

Success Criteria

Decision Points

  • SECURITY: Validate separation between security-critical and administrative settings
  • PERFORMANCE: Ensure caching strategy meets production scale requirements
  • AUTHORIZATION: Determine granular permission levels for admin interface
  • INTEGRATION: Assess integration with existing authentication systems

Dependencies

  • BLOCKING: Phase 0 completion (Webpacker migration, Ruby 3.2+ upgrade)
  • REQUIRED: Rails 7+ and modern asset pipeline
  • OPTIONAL: Redis/Memcached for enhanced settings caching

Estimated Effort

Total: 8-12 hours across 2-3 sprints Priority: Medium (after infrastructure modernization) References: Issue #673 - Comprehensive implementation plan

Phase 4: Testing and Development Infrastructure

Objectives

  • Enhance testing infrastructure for better reliability
  • Implement CLI architecture improvements
  • Overhaul configuration system
  • Improve development workflow

Tasks (from separate workstream branches)

    • Hierarchical test runner implementation
    • Cross-platform test containers
    • Test organization improvements
    • Enhanced test isolation
    • Expanded Playwright test suite
    • TTY-based CLI with improved UX
    • Command registry implementation
    • Shell escaping security enhancements
    • Standardized command formats
    • Rails-CLI configuration bridge
    • Environment-specific configuration
    • Configuration validation
    • Secret management improvements

Success Criteria

  • Test suite runs reliably across all platforms
  • CLI provides intuitive developer experience
  • Configuration system is validated and secure
  • Development workflow is streamlined

Decision Points

  • TESTING: Playwright vs other E2E testing frameworks
  • CLI: TTY toolkit selection (TTY::Prompt, etc.)
  • CONFIG: rails-settings-cached vs custom solution

Phase 5: Advanced Features and Optimizations

Objectives

  • Implement SSR or hybrid rendering if beneficial
  • Enhance accessibility compliance
  • Optimize performance for large datasets
  • Improve offline capabilities
  • Address remaining GitHub issues

Tasks

Success Criteria

  • Application meets WCAG accessibility guidelines
  • Significant performance improvements for large datasets
  • Reduced server load through efficient caching
  • Improved user experience in limited-connectivity scenarios
  • All prioritized GitHub issues resolved
  • Security posture meets or exceeds industry standards

Decision Points

  • FRAMEWORK: Assess value of Nuxt or similar framework adoption
  • AUDIENCE: Determine importance of offline capabilities for user base
  • COMPLEXITY: Evaluate complexity/benefit ratio of SSR implementation
  • PRIORITIES: Determine which remaining GitHub issues to address

Prioritization Framework

When making decisions about feature implementation or technical approaches, use the following framework:

Must-Have (Required for this phase)

  • Features critical to core application functionality
  • Security-related improvements
  • Performance issues affecting usability
  • Blocking dependencies for future phases

Should-Have (Important but not blocking)

  • Significant developer experience improvements
  • Performance optimizations with measurable impact
  • Features with high user value and moderate implementation cost

Could-Have (Desirable but deferrable)

  • Nice-to-have features with limited user impact
  • Refactoring that improves code quality but doesn't affect functionality
  • Performance optimizations for edge cases

Won't-Have (Explicitly deprioritized)

  • Features requiring significant new technology adoption
  • Changes requiring major architectural shifts
  • Optimizations with minimal measurable impact
  • Features not aligned with application core purpose

Risk Management

Technical Risks

  • Dependency Conflicts: Evaluate all dependencies for Vue 3 compatibility
  • Performance Degradation: Benchmark before and after major changes
  • API Breaking Changes: Version APIs and maintain backward compatibility
  • Data Migration: Plan for seamless data model transitions

Process Risks

  • Scope Creep: Use this document to focus efforts on planned work
  • Knowledge Gaps: Provide training for new technologies
  • Testing Gaps: Prioritize test coverage before major changes
  • Timeline Pressure: Explicitly defer non-essential features

Maintenance and Updates

This roadmap is a living document and should be revisited at the completion of each phase. Updates should include:

  • Lessons learned from completed phases
  • Refinements to upcoming phase plans
  • Adjustments to priorities based on user feedback
  • Updates to technical approach based on evolving best practices

Conclusion

By following this roadmap, we will modernize the Vulcan application in a controlled, incremental manner that minimizes risk while maximizing value. Regular evaluation of progress against this plan will help keep the team focused on the most important improvements.

Remember: The most important outcome is a stable, maintainable application that meets user needs, not perfect adherence to any specific technology or architecture.

Part of the MITRE Security Automation Framework (SAF)