All notable changes to CTBase will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- New exception type: Added
SolverFailureexception for reporting solver/integrator failures across the toolbox - Generic retcode support: Accommodates different solver types (SciML integrators, NLP solvers, linear solvers)
- SciML:
:Unstable,:DtLessThanMin,:MaxIters - NLP:
:Infeasible,:MaxIterations,:Stalled - Linear: condition number indicators, singular matrix flags
- SciML:
- Enriched context: Fields for
retcode,suggestion, andcontextto provide actionable error information - User-friendly display: Emoji-based display with π§ for return codes
- Cross-package utility: Suitable for use across CTFlows, CTDirect, and other control-toolbox packages
- Exception guide: Added comprehensive
SolverFailuresection todocs/src/guide/exceptions.md - Hierarchy update: Updated exception hierarchy diagram to include
SolverFailure - Quick reference: Added
SolverFailureto decision table for exception selection - Usage examples: Provided examples for ODE integration, optimization, and linear solver failures
- Comprehensive test coverage: Added tests for
SolverFailurein all test suitestest_types.jl: Hierarchy and construction teststest_display.jl: Display tests (minimal, full fields, edge cases)test_exceptions.jl: Exception throwing and output tests
- All tests passing: 315 tests pass including 15 new tests for
SolverFailure
- Exception module: Exported
SolverFailurefromCTBase.Exceptions - Display module: Added display logic in
format_user_friendly_errorandBase.showerror
- Stable release: Bumped from 0.18.6-beta to 0.18.7 for stable release
- No functional changes: Version promotion only, all features from 0.18.6-beta preserved
- Code formatting: Applied JuliaFormatter across the codebase for consistent style
- Standardized formatting: Improved readability and maintainability
- CI improvements: Enhanced CompatHelper workflow with subdirs input
- Better dependency management: More robust compatibility checking
- ANSI escape sequence support: Added ANSI color formatting for exception display in generated documentation
- Replaced printstyled calls: Migrated from
printstyled()to raw ANSI escape sequences insrc/Exceptions/display.jl - Automatic CSS conversion: Documenter now automatically converts ANSI sequences to CSS classes for web display
- Helper functions: Added
_ansi_color(),_ansi_reset(), and_print_ansi_styled()for consistent color formatting - Type support: Extended color formatting to support
String,Symbol, andTypeinputs
- Updated exception display tests to verify ANSI output format
- All tests pass with new ANSI color implementation (106/106)
- Version bump to 0.18.6-beta for feature enhancement
- Fixed cross-reference syntax in docstrings by removing unnecessary
@refmacros - Updated references in
src/Exceptions/types.jlfor cleaner documentation links - Updated references in
src/Descriptions/module files for consistency - Updated references in extension files (
ext/TestRunner.jl,ext/DocumenterReference.jl,ext/CoveragePostprocessing.jl) - Improved documentation rendering and link consistency across the codebase
- Bumped version to 0.18.5 for maintenance release
- Removed
test/extras/directory containing progress bar demos and example scripts - Removed
test/src/temporary artifacts from Documenter testing - Updated
.gitignoreto excludetest/_test_*/pattern for temporary test artifacts - Improved repository hygiene by removing 2286 lines of test artifacts
- Added comprehensive docstrings for internal TestRunner helper functions
- Documented
_FULL_BAR_THRESHOLDconstant and its purpose for progress bar resolution - Added detailed documentation for severity mapping functions (
_severity,_color_for_severity,_block_char_for_severity) - Documented backward compatibility shim
_default_on_test_donewith usage guidance
- TestRunner: Full-resolution progress bar up to 50 tests with cumulative coloring (green/yellow/red), brackets reflect max severity; compressed mode retains uniform bar.
- Progress demo: Added
test/extras/progress/real_bar.jlfor realistic bar simulation with history (skips/failures). - Documentation: Module docstrings now appear on public API pages only.
- Updated progress display tests for new 50-width threshold and cumulative bar rendering.
- Version bump only; no functional changes recorded.
- Public API pages now include module docstrings (private pages unaffected).
- Removed
.vscode/artefacts from version control (gitignore hygiene).
- Complete reorganization of the codebase into thematic modules:
src/
βββ Core/ # Fundamental types and utilities
βββ Exceptions/ # Enhanced error handling system
βββ Unicode/ # Unicode character utilities
βββ Descriptions/ # Description management
βββ Extensions/ # Extension system with tag-based dispatch
- Improved maintainability through clear separation of concerns
- Better testability with isolated module boundaries
- New exception types with rich context:
PreconditionError: ReplacesUnauthorizedCallfor state-related errorsParsingError: For syntax and structure validation errorsAmbiguousDescription: Enhanced with diagnostic capabilitiesExtensionError: Improved with feature and context information
- Rich error messages with optional fields for suggestions, context, and diagnostics
- User-friendly display with emojis and structured formatting
- Better debugging experience with detailed error context
- Tag-based dispatch for extension points:
AbstractDocumenterReferenceTag/DocumenterReferenceTagAbstractCoveragePostprocessingTag/CoveragePostprocessingTagAbstractTestRunnerTag/TestRunnerTag
- Three core extensions:
DocumenterReference: API documentation generationCoveragePostprocessing: Test coverage analysis and reportingTestRunner: Advanced test execution with glob patterns
- Clean separation between extension points and implementations
- Glob pattern support for test selection
- Configurable filename/function name builders
- Dry run mode for test planning
- Recursive test discovery in subdirectories
- Integration with Julia's test ecosystem
- Complete documentation rewrite with modular tutorials
- API reference generation with automatic categorization
- Enhanced coverage reporting with visual summaries
- Professional documentation guides for developers
- Modular test organization by functionality (not source structure)
- Comprehensive test coverage with quality metrics
- Automated code quality checks with Aqua.jl
- Performance and type stability testing
- Improved error messages with actionable suggestions
- Better Unicode support for mathematical notation
- Enhanced description management with intelligent completion
- Professional project structure following Julia best practices
- Strict adherence to Julia style guidelines
- Comprehensive type annotations for better performance
- Memory allocation optimization for critical paths
- Extensive documentation for all public APIs
- Contract-first testing methodology
- Unit and integration test separation
- Mock and fake implementations for isolated testing
- Deterministic and reproducible tests
- Type stability improvements throughout the codebase
- Reduced memory allocations in hot paths
- Optimized Unicode operations
- Efficient description matching algorithms
Aqua = "0.8": Code quality and consistency checksOrderedCollections = "1": Ordered data structures for testing
- Julia
1.10+(increased from1.8+) - Updated all package compatibility bounds
src/
βββ Core/ # Fundamental types and utilities
βββ Exceptions/ # Enhanced error handling system
βββ Unicode/ # Unicode character utilities
βββ Descriptions/ # Description management
βββ Extensions/ # Extension system
test/
βββ suite/ # Modular test suites by functionality
βββ extras/ # Example tests and diagnostics
βββ src/ # Source-level integration tests
docs/
βββ src/ # Modular documentation tutorials
ext/
βββ CoveragePostprocessing.jl # Coverage analysis
βββ DocumenterReference.jl # API documentation
βββ TestRunner.jl # Advanced test execution
See BREAKINGS.md for detailed migration guide.
This major release represents a significant investment in code quality, developer experience, and long-term maintainability. The modular architecture provides a solid foundation for future enhancements while maintaining backward compatibility where possible.
- Adaptive bar width: Width equals total for β€20 tests, fixed at 20 for >20 tests
- Visual consistency: Uses
β(filled) andβ(empty) characters without gaps - Smart failure detection: Correctly detects both exceptions and
@testassertion failures - Zero-padded indices: Aligned test numbers for better readability
- Before/after results scanning: Compares testset results before and after eval
- Recursive failure detection: Scans nested testsets for
Test.FailandTest.Error - More reliable than
anynonpass: Works regardless of testset completion timing
- Path prefix stripping: Users can write
test/suiteorsuiteinterchangeably - Guard against conflicts: Prevents
test/subdirectory in test directory - Comprehensive callbacks:
on_test_startandon_test_donewithTestRunInfocontext - Configurable progress: Built-in progress bar with option for custom callbacks
- Complete docstring overhaul: All functions follow project documentation standards
- Safe, runnable examples: All examples use
julia-replwith proper imports - Cross-reference resolution: Fully qualified
@reflinks to prevent header conflicts - API reference reorganization: Clean separation in
src/api/without prefixes
- User guides in
src/guide/: Clear separation from API reference - API reference in
src/api/: Auto-generated with clean filenames - Updated navigation: Changed "Tutorials" to "User Guides" for clarity
- Fixed cleanup: Generated API files properly removed after build
- Fixed
@refconflicts: All TestRunner references now use fully qualified names - Enhanced error handling: Better detection and reporting of test failures
- Improved type safety: Comprehensive type annotations throughout
- Memory optimization: Efficient progress bar rendering and failure detection
- Stable version with basic exception handling
- Simple description management
- Basic Unicode utilities
- Foundation for Control Toolbox ecosystem
For older versions, please refer to the git commit history.