- Add CachedDatabase struct wrapping Database with cache.Cache field and NewCachedDatabase constructor
- Add CachedFind method with cache key generation from query/args, cache hit deserialization, database fallback on miss, and 5-minute TTL
- Add CachedFirst method with same caching pattern as CachedFind for single record queries
- Add InvalidateCache method for clearing all cache entries and InvalidateCacheKey
- Add ConfigStoreService struct with database dependency and NewConfigStoreService constructor
- Add List method with optional section filtering, section/key ordering, and sensitive value masking (********)
- Add UpsertConfigInput struct with section/key/value/type/sensitive/description/updated_by fields and required validation
- Add Upsert method with section+key lookup, default
- Add error code constants for validation/auth/resource/system/business logic errors (VALIDATION_FAILED/UNAUTHORIZED/NOT_FOUND/INTERNAL_ERROR/etc)
- Add EnhancedErrorResponse with error/code/details/context/timestamp/request_id fields and ValidationErrorResponse with field-specific errors array
- Add handleError function with gorm.ErrRecordNotFound/ErrDuplicatedKey/ErrInvalidData handling
- Add CasbinService struct with enforcer/db fields and NewCasbinService constructor with GORM adapter initialization
- Add Casbin model configuration with request_definition/policy_definition/role_definition/policy_effect/matchers for RBAC
- Add initializeDefaultPolicies with admin (full access), operator (manage services/monitoring), and viewer (read-only) role permissions
- Add CheckPermission method
- Add production.yml with environment name/URL and protection rules configuration
- Add required_reviewers (cto/head-of-operations/security-lead) and prevent_force_pushes setting
- Add required_status_checks with strict mode for build-and-push/test-suite/security-scan/performance-tests contexts
- Add deployment_restrictions limiting deployments to specific users (cto/head-of-operations/devops-lead) and platform
- Add deploy workflow triggered on push to main, version tags, and manual workflow_dispatch with environment selection
- Add build-and-push job with GHCR login, Docker metadata extraction for API server/web dashboard, image builds with branch/tag/sha tagging, and image outputs
- Add deploy-staging job (main branch or manual staging selection) with kubectl setup and placeholder deployment commands
- Add CI workflow triggered on push/PR to main/develop branches
- Add api-server-test job with PostgreSQL service, Go 1.23 setup, golangci-lint, race detection tests with coverage, and binary build
- Add web-dashboard-test job with Node.js 20 setup, npm ci, linting, TypeScript type checking, and build
- Add docker-build job (main branch only) with Buildx setup, API server/web dashboard image builds, and GitHub Actions
- Replace interface{} with any in sendDeactivationRequest method signature in es2_helpers.go
- Add plugin_service_test.go with setupPluginTest helper using in-memory SQLite and gorm.AutoMigrate
- Add TestPluginService_List with test cases for all/enabled/disabled/by-type filtering and no matches
- Add TestPluginService_Install with tests for successful install, duplicate prevention, and missing fields
- Add Subscriber model with IMSI/MSISDN/email/status/plan_id/profile_status fields and validation examples
- Add Service model with name/namespace/replicas/ready_replicas/available_replicas/creation_timestamp fields
- Add Deployment model with service/version/status/started_at/completed_at/metadata fields and status enum
- Add Plugin model with name/version/author/description/enabled/config fields
- Add Automation model with name/description/trigger/
- Add DeploymentService struct with database dependency and NewDeploymentService constructor
- Add DeploymentFilter struct with Service/Environment/Status/Limit/Offset fields for query filtering
- Add List method with context support, filter application (service/environment/status), pagination (default limit: 20), and DESC ordering by created_at
- Add Get method with gorm.ErrRecordNotFound handling and formatted
- Add websocket.Upgrader with CheckOrigin allowing all origins in development
- Add Message struct with type/data/timestamp fields for WebSocket messages
- Add Client struct with conn/send/mutex/closed fields and readPump/writePump/Close methods
- Add Hub struct with clients map, broadcast/register/unregister channels, and sync.RWMutex
- Add NewHub constructor and Run method with client registration/
- Add PluginService struct with database dependency and NewPluginService constructor
- Add PluginFilter struct with Enabled/Type/Category fields for query filtering
- Add List method with context support, filter application (enabled/type/category), and DESC ordering by installed_at
- Add Get method with gorm.ErrRecordNotFound handling and formatted error messages
- Add InstallPluginInput struct with name/
- Update charmbracelet/colorprofile from v0.4.1 to v0.4.3
- Update charmbracelet/x/ansi from v0.11.6 to v0.11.7
- Update clipperhouse/displaywidth from v0.9.0 to v0.11.0
- Update clipperhouse/uax29/v2 from v2.5.0 to v2.7.0
- Update davecgh/go-spew to v1.1.2-0.20180830191138-d8f796af33cc
- Update fsnotify/fsnotify from v1.7.0 to v1.9.0
- Update google/go-cmp from v0.5.9 to v0.7.0
- Update lucasb-eyer/go-colorful from v1.3.0 to v1.4
- Replace interface{} with any in providerConfigure, doRequest, get, post, put method signatures
- Replace interface{} with any in dataSourceSubscriberRead, dataSourceSystemStatsRead functions
- Replace interface{} with any in resourceSubscriberCreate/Read/Update/Delete, resourceRatingPlanCreate/Read/Update/Delete functions
- Replace map[string]interface{} with map[string]any in subscriber create/update request bodies
- Update
- Add Enhanced Error Handling section with error codes (VALIDATION_FAILED, UNAUTHORIZED, FORBIDDEN, NOT_FOUND, ALREADY_EXISTS, INTERNAL_ERROR, RATE_LIMITED), standardized JSON response format, and field-specific validation error structure
- Add Testing Strategy section with integration test coverage for API endpoints/authentication/RBAC/services, test structure example with setupTest
- Add PrometheusService struct with baseURL/http.Client (10s timeout) and PROMETHEUS_URL env config (default: http://prometheus:9090)
- Add Available method with /-/ready endpoint health check
- Add Query method with instant PromQL execution via /api/v1/query, URL escaping, error handling
- Add promResponse/promVectorData/PromVectorSample structs for query result parsing with metric/value fields
- Add "use client" directive to automation and billing pages for client-side rendering
- Add useState/useEffect hooks for Automation/AutomationRun/Invoice/Payment state management with loading/error/actionLoading states
- Add automation page: loadData with Promise.all for api.automation.list/logs, handleCreateAutomation with JSON config parsing, handleRunAutomation/handleScheduleAutomation with api
- Add "use client" directive to monitoring page for client-side rendering
- Add useState/useEffect hooks for MetricSample/Alert state management with loading/error states
- Add loadMonitoringData with Promise.all for api.monitoring.metrics/alerts, handleCustomQuery with PromQL execution
- Add 8 predefinedQueries: uptime, CPU/memory/network usage, connections, response time, error/request rates
- Add "use client" directive to plugins page for client-side rendering
- Add useState/useEffect hooks for Plugin state management with loading/error/actionLoading states
- Add loadPlugins with api.plugins.list() and filterEnabled support
- Add handleInstallPlugin with JSON config parsing, form reset, api.plugins.install()
- Add handleTogglePlugin with api.plugins.enable/disable methods
- Add handleUninstallPlugin
- Add "use client" directive to services page for client-side rendering
- Add useState/useEffect hooks for Service/ServiceHealth/PodStatus state management with loading/error states
- Add loadServices with api.services.list(), loadServiceDetails with Promise.all for service/health/pod/logs/events data
- Add handleServiceAction with restart/start/stop actions via api.services methods
- Add "use client" directive to settings, subscribers, and usage pages for client-side rendering
- Add useState/useEffect hooks for API data fetching with loading/error states
- Add settings page: ConfigEntry state management, loadConfigs with api.config.get(), handleSaveConfig with api.config.update(), getConfigValue helper
- Add subscribers page: Subscriber/PaginatedResponse state, api.subscribers.list
- Add alert.tsx with Alert, AlertTitle, AlertDescription, AlertAction components using class-variance-authority with default/destructive variants
- Add error-alert.tsx with ErrorAlert component featuring AlertCircle icon, retry/dismiss actions, and customizable text
- Add input.tsx with Input component supporting file uploads, focus-visible states, aria-invalid styling, and dark mode
- Add label.tsx with Label component
- Remove docs/API.md (237 lines) with TaaS-specific REST endpoints and SDK examples
- Expand docs/ARCHITECTURE.md with detailed system overview, component architecture, data flow diagrams, scaling strategies, and RBAC security model
- Add Table of Contents with 6 main sections: System Overview, Component Details, Data Flow, Scaling, Security & RBAC, Future Enhancements
- Add detailed component descriptions
- Add TelecomSDK.MixProject with app :telecom_sdk version 1.0.0 and Elixir ~> 1.15 requirement
- Add application config with :logger in extra_applications
- Add dependencies: finch ~> 0.16 for HTTP client, jason ~> 1.4 for JSON, websockex ~> 0.4 for WebSocket, ex_doc ~> 0.27 (dev only)
- Add package metadata with MIT license and GitHub repository link
- Set start_permanent based on Mix.env() == :prod
- Add WebSocketClient class with connect/disconnect lifecycle management and reconnection logic with exponential backoff
- Add event handler system with on/off methods for message type subscription
- Add subscribeToUsage/unsubscribeFromUsage methods for real-time subscriber usage updates by IMSI
- Add subscribeToAlerts/unsubscribeFromAlerts methods for platform-wide alert notifications
- Add send method
- Add main function with plugin.Serve to initialize Terraform provider plugin
- Add Provider function returning schema.Provider with api_url and api_key configuration
- Add api_url schema with TELECOM_API_URL environment variable fallback to http://localhost:8000
- Add api_key schema with TELECOM_API_KEY environment variable, marked as sensitive and optional
- Register resources: telecom_subscriber and
- Add APIClient struct with BaseURL, APIKey, and HTTPClient with 30s timeout
- Add providerConfigure to initialize client from schema with api_url and api_key
- Add doRequest helper with context support, JSON marshaling, Content-Type and Authorization headers
- Add get method accepting GET requests with 200 OK validation and JSON decoding
- Add post method accepting POST requests with 200/201 status validation and optional