Add ConfigurationValidationRunner with IConfigurationValidator interface for
validating required settings at startup. Includes SecureStore and LDAP validators.
Expand ConfigManager with pipeline editing UI, dialogs, and step editors.
Update documentation with config validation guidance.
Remove the read-only pipeline viewer from the web UI:
- Delete PipelineViewer.razor page and supporting components
- Delete PipelineController and PipelineMapper from API
- Delete Pipeline DTOs from Core
- Delete PipelineApiClient from Client
- Remove navigation link and DI registrations
- Delete obsolete plan documents
The ConfigManager utility retains pipeline editing capabilities.
Add SecureStore integration to ConfigManager for secure handling of connection
strings and sensitive configuration values. Includes store/secret management
UI, encrypted .store file support, and comprehensive test coverage.
Add comprehensive XML documentation (param/returns tags) across 132 source
files to improve IntelliSense and API discoverability. Include ConfigManager
design documents and implementation plans for phases 1-9.
Add Window.DataTemplates section to MainWindow.axaml to enable automatic
view selection when SelectedFormViewModel is set. Each form ViewModel
type is now mapped to its corresponding View.
Add 7 form view pairs implementing the dark theme UI for ConfigManager:
- DataSyncFormView: Sync intervals, performance, and retention settings
- DataAccessFormView: Query timeouts and schema name configuration
- AuthFormView: Cookie name and expiration settings
- LdapFormView: Server URLs, directory structure, and dev options
- SearchFormView: Result limits and timeout configuration
- ExcelExportFormView: Sheet protection, format, timezone, and debug options
- PipelineFormView: Source/Destination/Schedules with collapsible Expanders
All views follow the dark theme colors from configmanager-ui-design.md:
- Background layers: #0D0F12, #151920, #232A35
- Text hierarchy: #E6EDF5, #9BA8B8, #5C6A7A
- Borders: #2D3540, #3D4550
- Accent: #5C9AFF
Task 25 of docs/plans/2026-01-19-configmanager-phases7-9.md
- Add IFileSystem and IDialogService dependencies to constructor
- Implement OnSelectedNodeChanged to create appropriate form ViewModels
- Add LoadConfigForTesting helper for unit testing
- Add MarkAsChanged helper to track unsaved changes
- Update OpenFolderAsync to use IDialogService
- Add comprehensive unit tests for form selection
Add DiffPreviewDialog and DiffPreviewDialogViewModel to display a diff
preview of configuration changes before saving. The dialog shows line
numbers, insertions (green), deletions (red), and unchanged lines with
a dark theme matching the ConfigManager design spec.
Add dialog service abstraction for platform-specific dialogs:
- IDialogService interface with folder picker, message, confirmation,
diff preview, and validation results methods
- AvaloniaDialogService implementation using MsBox.Avalonia
- Basic implementations for ShowDiffPreviewAsync and ShowValidationResultsAsync
(full dialogs to be implemented in Tasks 22-23)
- Add MessageBox.Avalonia package reference
Add form ViewModels for editing pipeline configurations in the ConfigManager.
ScheduleFormViewModel wraps ScheduleModel for schedule editing.
PipelineFormViewModel wraps PipelineModel with schedule sub-ViewModels.
Implement LdapFormViewModel for editing LDAP configuration section with
properties for ServerUrlsText, GroupDn, SearchBase, ConnectionTimeoutSeconds,
UseFakeAuth, and AdminBypassUsersText. Array properties use newline-separated
text with StringSplitOptions.RemoveEmptyEntries | TrimEntries for splitting.
Implements Task 18 from phases 7-9 plan. SearchFormViewModel wraps
SearchSection model with properties for MaxResultRows, TimeoutSeconds,
and MaxConcurrentSearches. Includes full test coverage with 7 tests
verifying initialization, two-way binding, change notification, and
null argument handling.
Add service for auto-discovering configuration file locations. The
service searches in prioritized order:
1. JDESCOPING_CONFIG_PATH environment variable
2. Same directory as executable
3. ../JdeScoping.Host/ relative to executable
4. User config directory (~/.jdescoping on Unix, %LOCALAPPDATA%\JdeScoping on Windows)
Includes 9 unit tests covering all search locations, priority order,
edge cases (missing directory, missing appsettings.json), and
cancellation token support.
Add config file loading and saving service following TDD approach:
- IConfigFileService interface for loading/saving config files
- ConfigLoadException for descriptive error handling
- ConfigFileService implementation with JSON serialization
- Unit tests with mocked IFileSystem dependency
Add file system abstraction to enable testability for file operations.
- IFileSystem interface with common file operations
- FileSystem implementation wrapping System.IO
- Unit tests for FileExists functionality
Implement deferred code review findings:
- Add IDialogService/IClipboardService interfaces for testable platform operations
- Create AvaloniaDialogService and AvaloniaClipboardService implementations
- Extract dialog strings and file extensions to centralized Constants classes
- Refactor ViewModels to use DI instead of event delegates
- Update tests to use mock services
- Fix CriteriaSheetGenerator.FormatTimestamp to handle all DateTimeKind values
- Update TestWebApplicationFactory to use IAuthenticationService
- Add logger parameter to ExcelParserServiceTests
- Add SecureStoreManager to solution under /utils/ folder
Document the MisData_Curr/Hist table split in architecture docs, add
post-sync archival scripts to move BackLevel records to history table,
and generate comprehensive unit test report (856 tests, 100% pass rate).
Split MisData table into MisData_Curr (Status='Current') and
MisData_Hist (Status='BackLevel') following existing archival pattern.
- Add MisData_Curr and MisData_Hist table scripts
- Create MisData view (UNION ALL) for backward compatibility
- Update production and DEV pipeline configurations
- Update unit tests for new table count (22 tables)
- Update database documentation
Remove 9 unused types from Core (duplicate extension classes, TableSpec, ColumnSpec, LotLocation), move ComponentLotViewModel and OperatorViewModel from Client to Core, and refactor DataSync.Dev to use pipeline-based configuration. Fix Login.razor to use UserInfoDto directly.
Add navigation link to the ETL Pipeline Viewer page in the main navigation
bar, providing easy access for users to monitor and inspect pipeline
configurations and execution status.
Add admin page for viewing ETL pipeline configurations with:
- Pipeline selector dropdown (alphabetical list)
- Status summary table (type, last run, success, next required, status)
- Execution history table with paging (10 per page)
- Source, destination, and scripts info cards
- Three PipelineScheduleSection components for Mass, Daily, Hourly schedules
- SQL modal integration for viewing queries and scripts
- Add GetAvailableTables, GetPipelineConfig, GetScheduleDefaults to IEtlPipelineFactory
- Implement new methods in EtlPipelineFactory
- Create PipelineController with endpoints:
- GET /api/pipelines - list all pipeline names
- GET /api/pipelines/{name} - get pipeline configuration
- GET /api/pipelines/{name}/status - get schedule status
- GET /api/pipelines/{name}/executions - get execution history
- Add JdeScoping.DataSync reference to JdeScoping.Api
- GetRecentUpdatesAsync: Returns last N DataUpdate records for a table,
optionally filtered by UpdateType, ordered by StartDt descending
- GetLastRunsAsync: Returns the most recent run (successful or not) for
each UpdateType for a given table using a CTE with ROW_NUMBER
Design document for admin monitoring component that visualizes:
- Pipeline configuration from pipelines.json
- Execution status (last run, next required, overdue)
- Recent execution history (last 10 per schedule type)
- Schedule sections for Mass/Daily/Hourly with defaults vs overrides
- Fix hourly lookback bug: use hourly timestamp/interval (not daily)
- Update DI registrations across DataSync, DataAccess, Api layers
- Add WorkProcessor config to appsettings.json
- Remove deprecated DataSyncService (replaced by WorkProcessor)
All 340 DataSync tests pass. Legacy bug from OLD solution now fixed.
- SearchRepository: Search table operations with Dapper
- SearchExecutionService: Search pipeline with proper cancellation handling
- WorkProcessor: Unified BackgroundService for syncs and searches
- SearchNotificationService: SignalR notifications in Api layer
All 45 new tests pass. Proper shutdown vs timeout distinction
prevents marking searches as error on host shutdown.