Releases: CJFWeatherhead/ChatrixCD
2025.12.17.6.1.2
Added
- Run Command Mapped Switches:
!cd runnow supports tags and raw args.- Positional tags:
!cd run <project> <template> update,molecule - Flagged tags:
!cd run <project> <template> --tags=update,molecule - Raw args:
!cd run <project> <template> --args="--some --args -e" - Graceful errors when the template doesn’t support these options
- Positional tags:
- Aliases Management: New commands
aliases add <alias> <command>andaliases remove <alias>to manage command aliases via chat. Supports prefixed (!cd) or unprefixed commands and preserves extra arguments. - Support for access token authentication in configuration (
matrix.access_token) for integration testing and pre-authenticated scenarios - Logging for encryption availability during bot initialization to help diagnose encryption issues
- Encryption diagnostics logging to validate encryption library installation and AsyncClient configuration
- INTEGRATION_TEST_ENCRYPTION_SETUP.md guide documenting encryption setup for remote integration tests
- Integration Test Automation: Automatic cache clearing and process cleanup before bot startup in integration test suite
- Integration Test Documentation: Comprehensive debugging guide in Copilot instructions for troubleshooting integration test failures
- Alpine Linux Encryption Fix: Complete documentation and deployment script for Alpine Linux encryption initialization (
docs/ALPINE_ENCRYPTION_FIX.md) - Alpine Deployment Script:
scripts/alpine_encryption_fix.shfor automated Alpine Linux encryption fix deployment - Manual Verification Helper: When auto-verification fails in daemon/log mode, bot now logs device ID and fingerprint for manual verification via Element's
/verifycommand - Startup Device Info: Bot now displays device ID and Ed25519 fingerprint on startup in daemon/log modes for easy manual verification
- Verification Cancellation Tracking: Bot now tracks device verification cancellations and shows manual verification instructions when verification fails
- Cross-Verification Test: Added integration test to verify device verification between bots, including unverify/reverify cycle testing
Changed
- Help/Usage: Updated help and usage text to document alias management commands.
- Encryption Backend: Using
vodozemac(Rust-based) for superior features - Alpine Deployment: Now uses system
py3-matrix-niopackage instead of venv package to ensure encryption works correctly - Device Verification: Log-only mode (
-L) now automatically verifies incoming device verification requests, matching daemon mode behavior for autonomous operation - Verification Timing: Added retry logic with up to 5 seconds wait time for matrix-nio to process verification events before attempting auto-verification
Fixed
-
Device verification hanging in log-only mode (
-L) when initiated from Element or other Matrix clients - now auto-verifies as intended -
"Unknown transaction id" errors during device verification due to timing issues - added retry logic to wait for matrix-nio to process verification events
-
Device Fingerprint Logging: Fixed "Could not find own device" warning by correctly retrieving Ed25519 fingerprint from olm account instead of device store
-
Alpine Linux Encryption: Fixed "Encryption not enabled" errors on Alpine Linux by using system
py3-matrix-nioandpy3-olmpackages -
matrix-nio ENCRYPTION_ENABLED Flag: Resolved issue where matrix-nio 0.25.2 requires
python-olmpackage for encryption detection even when using vodozemac -
System Site Packages: Enabled system-site-packages in Alpine venvs to access system Python packages
-
Package Conflicts: Removed venv's matrix-nio to prevent conflicts with system package on Alpine deployments
- Documentation Organization: Moved AI/LLM generated documentation to
dev/ai/docs/directory for better organization- Implementation plans, migration notes, and audit trails now in
dev/ai/docs/ - Updated Copilot instructions and CONTRIBUTING.md to reference new structure
- User-facing documentation remains in
/docsfor GitHub Pages
- Implementation plans, migration notes, and audit trails now in
- vodozemac provides cross-device verification capabilities needed for robust encrypted communication
- More features and better performance than python-olm
- matrix-nio properly supports vodozemac through its established cryptography integration
- Updated AsyncClient initialization with
AsyncClientConfig(encryption_enabled=True)for explicit encryption support
- Documentation Organization: Moved AI/LLM generated documentation to
-
Bot Initialization: AsyncClient now initialized with proper encryption configuration to ensure E2E encryption is available when dependencies are present
-
Integration Test Updates: Test runner now performs robust cleanup and update sequence:
- Clears Python bytecode cache (
__pycache__,.pycfiles) before updating code - Stops any existing bot processes before starting new ones
- Uses
git fetch -f origin main && git reset --hard origin/mainfor reliable code updates instead of justgit pull - Uses
uv pip install --python .venv/bin/pythonto explicitly target virtualenv on Alpine systems
- Clears Python bytecode cache (
Fixed
- Fixed encryption store loading when using access token authentication - removed incorrect conditional checks that prevented
load_store()from initializing encryption properly (3 locations in bot.py) - Fixed AttributeError in command handler:
MatrixUser.displaynameshould bedisplay_name(typo causing bot crashes when processing commands) - Fixed encryption dependency detection and error handling for missing encryption libraries
- Fixed integration test dependency installation to properly target virtualenv using
uv pip install --pythonon Alpine systems where global pip is not available - Fixed stale Python bytecode cache causing old code to run despite git updates in integration tests
Commit Log
- refactor(plugin_manager): Simplify plugin loading and metadata handling (0cc3cad)
- Refactor plugin status methods to utilize superclass implementation and improve logging (8af3e69)
- feat(semaphore_webhook): Add ignore_ssl option and improve code formatting (ec8391b)
- feat(semaphore_webhook): Add ignore_ssl configuration option for SSL verification (36896a4)
- refactor(tests): Improve readability of test code by formatting and organizing async calls (b805e2b)
- Refactor test files for improved readability and consistency (b67a241)
- refactor(aliases): Simplify constructor and logging statements in AliasManager (fe4062d)
- feat(run): Add support for positional tags and raw arguments in run command (9bf284b)
- feat(aliases): Add command alias management with add/remove functionality and usage examples (cd00839)
- feat(aliases): Implement command alias management with add/remove functionality and enhanced resolution (6dca4da)
- feat(requirements): Add additional dependencies for enhanced functionality (f7e02fe)
- fix(logging): Correctly retrieve Ed25519 fingerprint from olm account to resolve "Could not find own device" warning (da5bc84)
- feat(logging): Add device ID and fingerprint logging on startup in daemon/log modes, and track verification cancellations (0fc67c0)
- feat(verification): Implement cancellation handling for device verifications with tracking and logging (32f498e)
- feat(verification): Enhance key verification cancellation handling with detailed logging and verification manager integration (362151e)
- fix: Update installation commands to use explicit Python paths for virtual environment setup (d324765)
- feat(verification): Add manual verification logging and cross-verification tests for device verification failures (a591160)
- feat(verification): Enhance device verification with auto-verification in log and daemon modes, and add retry logic for pending requests (941b62c)
- feat(alpine): Implement Alpine Linux encryption fix with system packages and deployment script (f8907fa)
- docs: Add clarity to documentation organization and usage guidelines (131a546)
Full Changelog: 2025.11.25.6.0.0...2025.12.17.6.1.2
2025.12.16.6.1.1
Added
- Run Command Mapped Switches:
!cd runnow supports tags and raw args.- Positional tags:
!cd run <project> <template> update,molecule - Flagged tags:
!cd run <project> <template> --tags=update,molecule - Raw args:
!cd run <project> <template> --args="--some --args -e" - Graceful errors when the template doesn’t support these options
- Positional tags:
- Aliases Management: New commands
aliases add <alias> <command>andaliases remove <alias>to manage command aliases via chat. Supports prefixed (!cd) or unprefixed commands and preserves extra arguments. - Support for access token authentication in configuration (
matrix.access_token) for integration testing and pre-authenticated scenarios - Logging for encryption availability during bot initialization to help diagnose encryption issues
- Encryption diagnostics logging to validate encryption library installation and AsyncClient configuration
- INTEGRATION_TEST_ENCRYPTION_SETUP.md guide documenting encryption setup for remote integration tests
- Integration Test Automation: Automatic cache clearing and process cleanup before bot startup in integration test suite
- Integration Test Documentation: Comprehensive debugging guide in Copilot instructions for troubleshooting integration test failures
- Alpine Linux Encryption Fix: Complete documentation and deployment script for Alpine Linux encryption initialization (
docs/ALPINE_ENCRYPTION_FIX.md) - Alpine Deployment Script:
scripts/alpine_encryption_fix.shfor automated Alpine Linux encryption fix deployment - Manual Verification Helper: When auto-verification fails in daemon/log mode, bot now logs device ID and fingerprint for manual verification via Element's
/verifycommand - Startup Device Info: Bot now displays device ID and Ed25519 fingerprint on startup in daemon/log modes for easy manual verification
- Verification Cancellation Tracking: Bot now tracks device verification cancellations and shows manual verification instructions when verification fails
- Cross-Verification Test: Added integration test to verify device verification between bots, including unverify/reverify cycle testing
Changed
- Help/Usage: Updated help and usage text to document alias management commands.
- Encryption Backend: Using
vodozemac(Rust-based) for superior features - Alpine Deployment: Now uses system
py3-matrix-niopackage instead of venv package to ensure encryption works correctly - Device Verification: Log-only mode (
-L) now automatically verifies incoming device verification requests, matching daemon mode behavior for autonomous operation - Verification Timing: Added retry logic with up to 5 seconds wait time for matrix-nio to process verification events before attempting auto-verification
Fixed
-
Device verification hanging in log-only mode (
-L) when initiated from Element or other Matrix clients - now auto-verifies as intended -
"Unknown transaction id" errors during device verification due to timing issues - added retry logic to wait for matrix-nio to process verification events
-
Device Fingerprint Logging: Fixed "Could not find own device" warning by correctly retrieving Ed25519 fingerprint from olm account instead of device store
-
Alpine Linux Encryption: Fixed "Encryption not enabled" errors on Alpine Linux by using system
py3-matrix-nioandpy3-olmpackages -
matrix-nio ENCRYPTION_ENABLED Flag: Resolved issue where matrix-nio 0.25.2 requires
python-olmpackage for encryption detection even when using vodozemac -
System Site Packages: Enabled system-site-packages in Alpine venvs to access system Python packages
-
Package Conflicts: Removed venv's matrix-nio to prevent conflicts with system package on Alpine deployments
- Documentation Organization: Moved AI/LLM generated documentation to
dev/ai/docs/directory for better organization- Implementation plans, migration notes, and audit trails now in
dev/ai/docs/ - Updated Copilot instructions and CONTRIBUTING.md to reference new structure
- User-facing documentation remains in
/docsfor GitHub Pages
- Implementation plans, migration notes, and audit trails now in
- vodozemac provides cross-device verification capabilities needed for robust encrypted communication
- More features and better performance than python-olm
- matrix-nio properly supports vodozemac through its established cryptography integration
- Updated AsyncClient initialization with
AsyncClientConfig(encryption_enabled=True)for explicit encryption support
- Documentation Organization: Moved AI/LLM generated documentation to
-
Bot Initialization: AsyncClient now initialized with proper encryption configuration to ensure E2E encryption is available when dependencies are present
-
Integration Test Updates: Test runner now performs robust cleanup and update sequence:
- Clears Python bytecode cache (
__pycache__,.pycfiles) before updating code - Stops any existing bot processes before starting new ones
- Uses
git fetch -f origin main && git reset --hard origin/mainfor reliable code updates instead of justgit pull - Uses
uv pip install --python .venv/bin/pythonto explicitly target virtualenv on Alpine systems
- Clears Python bytecode cache (
Fixed
- Fixed encryption store loading when using access token authentication - removed incorrect conditional checks that prevented
load_store()from initializing encryption properly (3 locations in bot.py) - Fixed AttributeError in command handler:
MatrixUser.displaynameshould bedisplay_name(typo causing bot crashes when processing commands) - Fixed encryption dependency detection and error handling for missing encryption libraries
- Fixed integration test dependency installation to properly target virtualenv using
uv pip install --pythonon Alpine systems where global pip is not available - Fixed stale Python bytecode cache causing old code to run despite git updates in integration tests
Commit Log
- refactor(tests): Improve readability of test code by formatting and organizing async calls (b805e2b)
- Refactor test files for improved readability and consistency (b67a241)
- refactor(aliases): Simplify constructor and logging statements in AliasManager (fe4062d)
- feat(run): Add support for positional tags and raw arguments in run command (9bf284b)
- feat(aliases): Add command alias management with add/remove functionality and usage examples (cd00839)
- feat(aliases): Implement command alias management with add/remove functionality and enhanced resolution (6dca4da)
- feat(requirements): Add additional dependencies for enhanced functionality (f7e02fe)
- fix(logging): Correctly retrieve Ed25519 fingerprint from olm account to resolve "Could not find own device" warning (da5bc84)
- feat(logging): Add device ID and fingerprint logging on startup in daemon/log modes, and track verification cancellations (0fc67c0)
- feat(verification): Implement cancellation handling for device verifications with tracking and logging (32f498e)
- feat(verification): Enhance key verification cancellation handling with detailed logging and verification manager integration (362151e)
- fix: Update installation commands to use explicit Python paths for virtual environment setup (d324765)
- feat(verification): Add manual verification logging and cross-verification tests for device verification failures (a591160)
- feat(verification): Enhance device verification with auto-verification in log and daemon modes, and add retry logic for pending requests (941b62c)
- feat(alpine): Implement Alpine Linux encryption fix with system packages and deployment script (f8907fa)
- docs: Add clarity to documentation organization and usage guidelines (131a546)
- Add TUI architecture and implementation documentation (37996ca)
- docs: Add AI/LLM context documentation guidelines and naming conventions (e2d04c3)
- fix: Fix encryption setup, display_name typo, and integration test uv usage (904bb50)
- feat(tui): Complete rewrite of TUI for v7.0.0 with improved layout and navigation (7929676)
Full Changelog: 2025.11.25.6.0.0...2025.12.16.6.1.1
2025.12.15.6.1.0
Added
- Support for access token authentication in configuration (
matrix.access_token) for integration testing and pre-authenticated scenarios - Logging for encryption availability during bot initialization to help diagnose encryption issues
- Encryption diagnostics logging to validate encryption library installation and AsyncClient configuration
- INTEGRATION_TEST_ENCRYPTION_SETUP.md guide documenting encryption setup for remote integration tests
- Integration Test Automation: Automatic cache clearing and process cleanup before bot startup in integration test suite
- Integration Test Documentation: Comprehensive debugging guide in Copilot instructions for troubleshooting integration test failures
Changed
- Encryption Backend: Using
vodozemac(Rust-based) for superior features- Documentation Organization: Moved AI/LLM generated documentation to
dev/ai/docs/directory for better organization- Implementation plans, migration notes, and audit trails now in
dev/ai/docs/ - Updated Copilot instructions and CONTRIBUTING.md to reference new structure
- User-facing documentation remains in
/docsfor GitHub Pages
- Implementation plans, migration notes, and audit trails now in
- vodozemac provides cross-device verification capabilities needed for robust encrypted communication
- More features and better performance than python-olm
- matrix-nio properly supports vodozemac through its established cryptography integration
- Updated AsyncClient initialization with
AsyncClientConfig(encryption_enabled=True)for explicit encryption support
- Documentation Organization: Moved AI/LLM generated documentation to
- Bot Initialization: AsyncClient now initialized with proper encryption configuration to ensure E2E encryption is available when dependencies are present
- Integration Test Updates: Test runner now performs robust cleanup and update sequence:
- Clears Python bytecode cache (
__pycache__,.pycfiles) before updating code - Stops any existing bot processes before starting new ones
- Uses
git fetch -f origin main && git reset --hard origin/mainfor reliable code updates instead of justgit pull - Uses
uv pip install --python .venv/bin/pythonto explicitly target virtualenv on Alpine systems
- Clears Python bytecode cache (
Fixed
- Fixed encryption store loading when using access token authentication - removed incorrect conditional checks that prevented
load_store()from initializing encryption properly (3 locations in bot.py) - Fixed AttributeError in command handler:
MatrixUser.displaynameshould bedisplay_name(typo causing bot crashes when processing commands) - Fixed encryption dependency detection and error handling for missing encryption libraries
- Fixed integration test dependency installation to properly target virtualenv using
uv pip install --pythonon Alpine systems where global pip is not available - Fixed stale Python bytecode cache causing old code to run despite git updates in integration tests
Commit Log
- docs: Add clarity to documentation organization and usage guidelines (131a546)
- Add TUI architecture and implementation documentation (37996ca)
- docs: Add AI/LLM context documentation guidelines and naming conventions (e2d04c3)
- fix: Fix encryption setup, display_name typo, and integration test uv usage (904bb50)
- feat(tui): Complete rewrite of TUI for v7.0.0 with improved layout and navigation (7929676)
- Minor integration improvements (2b37f3b)
- Screens overhaul, fixing defective TUI (cac3666)
- feat: Add OIDC URL token parsing and improve error handling (c8adf22)
- Fix OIDC plugin initialization and add signature validation test (0c55462)
Full Changelog: 2025.11.25.6.0.0...2025.12.15.6.1.0
2025.11.25.6.0.0
Added
- Modular TUI Architecture: Complete redesign of Text User Interface
- Modular screen system with dynamic registration
- Plugin-aware: plugins can register their own TUI screens
- Event-driven architecture for component communication
- Reusable widget library (StatusIndicator, MetricDisplay, DataGrid, etc.)
- Comprehensive testing framework with Textual pilot tests
- Screen registry for managing available screens
- Plugin TUI integration system (PluginTUIExtension, PluginScreenMixin)
- Example implementation for aliases plugin
- Complete documentation (TUI_ARCHITECTURE.md, TUI_QUICKSTART.md)
- Core screens: Main Menu, Status, Rooms, Logs, Configuration
- Type-safe events: ScreenChangeEvent, DataUpdateEvent, PluginLoadedEvent, etc.
- Plugin TUI Integration: Plugins can now extend the TUI
register_tui_screens()method for plugins- Dynamic screen registration during plugin load
- Plugin screen cleanup on plugin unload
- Example TUI extension for aliases plugin
- OIDC Authentication Plugin: OIDC/SSO authentication moved to plugin
- New
plugins/oidc_auth/plugin for OIDC authentication - Interactive TUI modal for token input in interactive mode
- Console fallback for non-interactive/log-only mode
- Automatic session restoration
- Multiple identity provider support
- Enabled by default, can be disabled in config
- Comprehensive documentation in plugin README
- New
- Plugin/Module System: Extensible plugin architecture for bot functionality
- Plugin manager with complete lifecycle management (initialize, start, stop, cleanup)
- Plugin metadata support via
meta.json(name, version, description, author, dependencies) - Dynamic plugin discovery and loading from
/pluginsdirectory - Mutual exclusion for conflicting plugins (e.g., only one task monitor active)
- Plugin status display in
!cd infocommand with version, activity status, and descriptions - Plugin-specific configuration via
plugin.jsonfiles with config.json override support - Global
load_pluginsflag in bot configuration to enable/disable plugin loading - Three initial plugins included:
- aliases: Command alias management migrated from built-in AliasManager (enabled by default)
- semaphore_poll: Traditional API polling for task monitoring (enabled by default)
- semaphore_webhook: Gotify webhook-based push notifications for task monitoring
- example_plugin: Comprehensive template demonstrating plugin API
- Comprehensive plugin development documentation and examples
- Complete test coverage with 18 test cases for plugin system
- Configuration Version 5: Updated configuration schema
- Added
bot.load_pluginsboolean flag to control plugin loading - Each plugin now has its own
plugin.jsonfor default configuration - Settings in main
config.jsonoverride plugin-specific settings
- Added
- Runtime Metrics Tracking: Bot now tracks and displays runtime statistics
- Messages sent count
- Requests received count
- Errors count
- Number of emojis used in messages
- Enhanced !cd info Command: Extended bot info display
- CPU model name (e.g., "Intel i7 4770K")
- Runtime type (binary vs Python interpreter)
- All runtime metrics displayed in both plain text and HTML table format
- Git Version Detection: Automatic commit ID appending for git-based deployments
- Format:
x.x.x.x.x-c123456for git vsx.x.x.x.xfor releases - Helps distinguish between release and development versions
- Format:
- Enhanced !cd rooms Command: Improved room listing with send permissions
- Color-coded output (green for can send, red for cannot send)
- Table format with "Send Status" column
- Rooms where bot cannot send are hidden when
-R(redaction) flag is set
- Centralized Status Information: New
get_status_info()method in bot instance- Provides unified structure for bot status used by both TUI and commands
- Eliminates duplicate logic between different interfaces
Changed
- TUI Architecture: Replaced monolithic TUI with modular architecture
- Old
chatrixcd/tui.py(2000+ lines) removed in favor of modular design - New structure in
chatrixcd/tui/with separated concerns - Better maintainability, testability, and extensibility
- Old
- Bot Authentication API:
bot.login()no longer takesoidc_token_callbackparameter- OIDC authentication now handled by
oidc_authplugin - Core bot only handles password authentication
- Cleaner separation of concerns between auth methods
- Plugin registers itself as
bot.oidc_pluginduring initialization
- OIDC authentication now handled by
- Task Monitoring Architecture: Refactored from built-in to plugin-based system
- Task monitoring now delegates to active
TaskMonitorPlugin - Command handler's
monitor_task()uses plugin manager for monitoring - Bot lifecycle includes plugin loading, starting, and cleanup phases
- Graceful fallback with clear messaging when no task monitor plugin is loaded
- Task monitor plugins receive sender information for personalized notifications
- Task monitoring now delegates to active
- Configuration Migration: Automatic migration from v4 to v5
- Plugins now use dedicated
plugin.jsonfiles for configuration - Main config.json can override plugin settings for backwards compatibility
- Plugins now use dedicated
- TUI Status Display: Harmonized with !cd info command
- Updated to use centralized
get_status_info()method - Consistent naming and formatting across TUI and commands
- Added loaded plugins section with names, versions, types, and descriptions
- Updated to use centralized
- Version Display: All version displays now use full version with commit ID when applicable
- Room Permission Checking: Enhanced
can_send_message_in_room()method- Now also checks
allowed_roomsconfiguration setting - Combines Matrix power levels with config-based restrictions
- Now also checks
Fixed
- Fixed TUI screen import test to only test existing screens (removed references to deprecated SayScreen, LogScreen, SetScreen, ShowScreen)
- Fixed async test class in test_aliases_plugin.py to use IsolatedAsyncioTestCase for proper coroutine handling
- Fixed mock setup in test_commands.py to properly mock async task monitor methods
- Fixed test cleanup in test_commands.py to properly cancel background tasks and suppress mock-related warnings
- Fixed missing sender information in task completion notifications
- Fixed URL parsing in semaphore_webhook plugin (now uses urllib.parse)
- Fixed duplicate return statement in
_gather_matrix_info()method - Fixed
MetricDisplaywidget to properly accept initialization parameters - Added explanatory comments to exception handlers per code review
Removed
- Legacy TUI (TUI v1): Removed monolithic TUI implementation
- Old
chatrixcd/tui.pyfile removed (2000+ lines) chatrixcd/tui_manager.pyversion selector removed- Environment variable
CHATRIXCD_TUI_VERSIONno longer needed - New modular TUI is now the only TUI implementation
- Old
- OIDC Authentication Screen: Temporarily removed pending reimplementation
- OIDC authentication will show error message directing to password auth
- Will be reimplemented in modular TUI in future release
Commit Log
- Workspace Setting for vscode (8a4c8e0)
- Added plugin description to !cd info (0faa202)
- test: fix test suite issues and clean up output (6db94f1)
- tui: fix lint issues (remove unused imports, wrap long lines) (1fe279b)
- Tidy TUI compatibility shims; format and fix lint issues in TUI package (a4ae7a6)
- A very non atomic, plugins and tui update (f274504)
- Fix failing unit tests after plugin system integration (abee555)
- Add executive summary document for plugin system (415a63f)
- Add comprehensive implementation and migration plans (257fa22)
- Update CHANGELOG with plugin system and config v5 changes (052401e)
- Address code review comments and fix issues (8fd47fb)
- Bump config version to v5 and add plugin.json configuration files (1640df0)
- Update plugin.py (dd0a21b)
- Update commands.py (1008816)
- Update readme.md (bda10e5)
- Update config.json.example (4c5aeae)
- Fix async test compatibility with Python 3.12+ (8e082e3)
- Add comprehensive tests and documentation for plugin system (f4bee0c)
- Integrate plugin system into bot and command handler (45872d0)
- Add plugin system infrastructure and three initial plugins (0113585)
Full Changelog: 2025.11.15.5.2.0...2025.11.25.6.0.0
2025.11.18.5.2.1
Added
- Runtime Metrics Tracking: Bot now tracks and displays runtime statistics
- Messages sent count
- Requests received count
- Errors count
- Number of emojis used in messages
- Enhanced !cd info Command: Extended bot info display
- CPU model name (e.g., "Intel i7 4770K")
- Runtime type (binary vs Python interpreter)
- All runtime metrics displayed in both plain text and HTML table format
- Git Version Detection: Automatic commit ID appending for git-based deployments
- Format:
x.x.x.x.x-c123456for git vsx.x.x.x.xfor releases - Helps distinguish between release and development versions
- Format:
- Enhanced !cd rooms Command: Improved room listing with send permissions
- Color-coded output (green for can send, red for cannot send)
- Table format with "Send Status" column
- Rooms where bot cannot send are hidden when
-R(redaction) flag is set
- Centralized Status Information: New
get_status_info()method in bot instance- Provides unified structure for bot status used by both TUI and commands
- Eliminates duplicate logic between different interfaces
Changed
- TUI Status Display: Harmonized with !cd info command
- Updated to use centralized
get_status_info()method - Consistent naming and formatting across TUI and commands
- Updated to use centralized
- Version Display: All version displays now use full version with commit ID when applicable
- Room Permission Checking: Enhanced
can_send_message_in_room()method- Now also checks
allowed_roomsconfiguration setting - Combines Matrix power levels with config-based restrictions
- Now also checks
Fixed
- Fixed duplicate return statement in
_gather_matrix_info()method
Commit Log
- Apply code review feedback: optimize imports and emoji counting (53844e4)
- Update docs/METRICS_AND_COMMANDS.md (2de2f08)
- Fix unit tests to work with centralized status info (bbee3c9)
- Harmonize status info and add allowed_rooms check (f6494b1)
- Add documentation for metrics and enhanced commands (254f88d)
- Add tests and update CHANGELOG for metrics/version features (e9ec7f3)
- Add runtime metrics and enhanced bot info/rooms commands (309c6ff)
- Initial plan (b105d9b)
- Updated the download pages to be more user friendly (68e5725)
- Small graphical overhaul in documentation (e560536)
Full Changelog: 2025.11.15.5.2.0...2025.11.18.5.2.1
2025.11.15.5.2.0
Added
- Vodozemac Migration: Replaced deprecated libolm with vodozemac for enhanced security
- Updated to vodozemac 0.9.0+ for improved cryptographic primitives
Changed
- Migrated documentation hosting from GitHub Pages to Cloudflare Pages
- Updated primary domain from chatrixcd.cjfw.me to chatrix.cd
- Updated all documentation links to use new domain
- Remote Store Integration: Integration tests now copy and use remote encryption stores for proper E2E testing
- Log Analysis: Automatic collection and analysis of remote bot logs for error detection and redaction assessment
Changed
- Integration Testing: Removed
test_clientconfiguration; tests now use preauthenticated bot sessions exclusively - Documentation: Updated integration testing docs to reflect removal of separate test client requirement
Fixed
- Encryption Testing: Fixed integration tests to properly decrypt and validate encrypted messages using copied stores
Changed
- Greeting Consistency: Bot responses now use user display names instead of full Matrix user IDs in greetings for better readability
Removed
- GitHub Pages Workflow: Removed
.github/workflows/pages.ymlas documentation is now deployed via Cloudflare Pages - Encryption Verification Notification: Removed automatic notification message when bot cannot decrypt encrypted messages
- Users must now manually verify devices through Matrix client
- Reduces spam in rooms while maintaining security
Fixed
- Message Formatting: Fixed markdown escaping issues by ensuring all formatted messages use proper HTML
- Exit confirmation now uses HTML formatting instead of mixed markdown/HTML
- Log tailing confirmations now use HTML formatting
- Prevents markdown from being displayed as escaped text in Matrix clients
- Encryption Issue Notifications: Bot now sends helpful messages when it receives encrypted messages it can't decrypt
- Automatically notifies users to verify the bot's device when encryption issues occur
- Prevents silent failures and guides users to resolve verification problems
Fixed
- Matrix-nio API Compatibility: Fixed
keys_query()calls to use updated matrix-nio 0.25.x API- Removed deprecated
user_idsparameter and useclient.olm.users_for_key_queryinstead - Removed dependency on deprecated libolm library
- Maintained API compatibility with existing encryption features
- Removed deprecated
- Device Verification Commands: New
!cd verifyand!cd sessionscommands for bot-to-bot verificationverify list- List unverified devicesverify start <user_id> <device_id>- Start verification with a specific deviceverify pending- Show pending verification requestsverify auto- Auto-verify all pending requestsverify cross- Cross-verify with other ChatrixCD bots in the roomsessions list- List all known devices and verification statussessions reset <user_id> <device_id>- Reset Olm session with a devicesessions clear- Clear unverified devices from storesessions info- Show encryption session informationsessions save <filename>- Save current session state to filesessions restore <filename>- Restore session state from file
- Enhanced Integration Tests: Bots can now read each other's encrypted messages
- Automatic cross-verification between test bots
- Encrypted message decryption in test framework
- Real message content validation instead of "[ENCRYPTED_RESPONSE]"
- Improved Redaction: Enhanced redaction patterns based on real-world Matrix logs
- Better detection of cryptographic keys and session data
- Improved hostname and IP address masking
- Enhanced token and credential detection
- Automatic Device Verification: In daemon/log modes, the bot automatically verifies unverified devices to enable communication in encrypted rooms
- Emoji-Based Verification: Full support for interactive emoji verification in TUI mode and automatic verification in daemon mode
- Session Management: Save and restore Olm session state, device verification status, and encryption keys
Changed
- Integration testing framework for live ChatrixCD instances
- Remote bot management via SSH
- Multi-host bot deployment support
- Cross-bot interaction testing using existing authenticated bots
- Simultaneous bot execution for realistic testing scenarios
- Integration tests now use cross-bot communication instead of separate test users
- Reduced test timeouts from 300s to 10s for faster iteration
- Updated test configuration to support multiple simultaneous bots
- Modified workflow to start all bots concurrently for inter-bot testing
- Bot now responds in encrypted rooms even with unverified devices by automatically establishing encryption
Fixed
- Fixed
keys_queryAPI calls to useuser_idsparameter for matrix-nio compatibility - Bot response validation now works with separate test user account
- Resolved authentication issues for OIDC-authenticated bots via session file access tokens
- Integration tests now properly test cross-bot interactions without self-messaging
- Fixed message reception in tests by adding periodic sync calls
- Multi-host testing support for cross-bot functionality
- Access token retrieval from session files for OIDC-authenticated bots
- Reduced test timeout from 300s to 10s for faster failure detection
- Matrix client authentication and room joining capabilities
Changed
- Integration test timeout reduced from 300 seconds to 10 seconds for faster iteration
Fixed
- Access token extraction for OIDC bots from session files
- Matrix client session restoration for testing
Known Issues
- Integration tests require separate test user credentials to properly test bot responses
- Current test setup uses bot's own credentials, preventing proper command/response testing
- Multi-host testing support for comprehensive integration testing
- Automatic configuration discovery from remote servers
- Automated test execution against running bot instances
Fixed
- AliasManager.load_aliases() now properly handles empty alias files without logging errors
- Matrix protocol integration tests
- Configurable test setup for local network testing
- Automated start/stop of remote bot during testing
- Automatic Matrix configuration discovery from remote server
Changed
- Temporarily removed E2E encryption requirement from matrix-nio dependency
- Allows easier local development and testing on macOS
- Reduces build complexity by avoiding python-olm compilation issues
- E2E features can be re-enabled when needed for production deployments
Commit Log
- Fix weird padding issue (e090131)
- More color updates (9f52546)
- Update README header and description (d2f2fb4)
- Design changes (fdb0974)
- Remove pages.yml workflow and update CHANGELOG (409548e)
- Revert to an earlier version (efc3ce1)
- Initial plan (93eb3dd)
- More documentation updates (7343846)
- Maybe no CSS is better (432f0c3)
- removed gemfile dependencies (8ce9513)
- Swapped theme for something less hacky (46ffcbb)
- more theme hackery (856f69e)
- Custom head.html (49b7ab0)
- Custom Head (3fd6b7d)
- Additional Selector test (3c0907b)
- Selector Check (75e2fd7)
- Removed unnecessary dark tags (62f55b5)
- Further contrast tweaks (3992471)
- Content readability improvements (7877471)
- Add bigdecimal gem for Ruby 3.4.4 compatibility (ffc462a)
Full Changelog: 2025.11.09.5.1.0...2025.11.15.5.2.0
2025.11.09.5.1.0
Changed
- Build System: Removed redundant QEMU emulation from build workflow
- Docker Buildx with BuildKit can perform native cross-compilation without QEMU
- QEMU was only needed for older
docker runapproach, not for buildx - BuildKit uses platform-specific base images and cross-compilation toolchains
- Simplifies build process and potentially improves build times
- Affects all architecture builds (x86_64, i686, arm64)
Changed
- Deployment Focus: Updated all deployment documentation to reflect Alpine Linux as primary target
- Alpine Linux (OpenRC) is now explicitly marked as primary deployment target
- Debian/Ubuntu (systemd) marked as secondary target
- Updated DEPLOYMENT.md with clear priority indicators
- Updated docs/deployment.md to lead with Alpine recommendations
- Added notes in systemd service files indicating Alpine as primary target
- Enhanced OpenRC init script with primary target documentation
- Docker Configuration: Removed environment variable support, now config.json only
- Removed
.env.examplefile (environment variables no longer supported) - Updated
docker-compose.ymlto mount config.json instead of using env vars - Updated
docker-compose.alpine.ymlto mount config.json instead of using env vars - Added notes in Dockerfiles about config.json requirement
- Simplified Docker configuration to single source of truth
- Removed
- Documentation Cleanup: Removed outdated environment variable documentation
- Removed "Environment Variables" section from docs/configuration.md
- Environment variables were removed in version 2025.10.14
- All configuration now exclusively through config.json
Fixed
- Binary Download Links: Corrected binary artifact links in documentation
- Updated docs/installation.md to use .dist.tar.gz format (was single file)
- Fixed WSL installation instructions to use correct tarball format
- All download links now correctly point to distributed tarball artifacts
Added
- Repository Analysis: Reviewed repository alignment with copilot instructions
- Identified high-priority improvements: test coverage reporting, security scanning
- Identified medium-priority improvements: documentation consolidation, E2E testing, developer experience
- Identified low-priority improvements: UX enhancements, accessibility features
Fixed
- Build System: Fixed
PyType_GetModuleByDef: symbol not founderror in compiled binaries- Root cause: Alpine's default Python package provides shared libraries instead of static ones
- Solution: Build Python from source with
--disable-shared --enable-static=yes --with-static-libpython - Added
--python-flag=no_siteto Nuitka build flags for better static linking - Ensures
--static-libpython=yesworks correctly with musl libc on Alpine Linux - Affects all architectures (x86_64, i686, arm64)
Changed
- Build Performance: Optimized build times in GitHub Actions
- Python optimization flags (PGO + LTO) disabled by default for faster CI builds
- Can be enabled for release builds with
PYTHON_OPTIMIZE=yesbuild arg - Python source download cached with BuildKit cache mounts
- Reduces Python build time from ~15 minutes to ~5 minutes per architecture
Commit Log
- Remove redundant QEMU setup from build workflow (9f8e3a0)
- Initial plan (017d18d)
- Fix CHANGELOG: remove trailing whitespace and /tmp file reference (d2fb9c7)
- Remove outdated environment variable documentation (61523c6)
- Update CHANGELOG and add alignment improvement plan (5957823)
- Add Alpine primary target notes to init system files (dd06379)
- Remove environment variable support and update deployment docs (77598cf)
- Use Alpine 3.21 instead of 3.22 in Dockerfile.build (2edf14a)
- Initial plan (dd76baf)
- Fix static Python build for Nuitka compilation on Alpine (ce51b86)
- Initial plan (b8494ed)
Full Changelog: 2025.11.08.5.0.0...2025.11.09.5.1.0
2025.11.08.5.0.0
There is a build fault with the release, a re-release is being worked on
Fixed
- Build System: Fixed Dockerfile.build to correctly rename
main.bintochatrixcdin standalone mode- Nuitka creates
main.bininstead ofmainwhen using--mode=standalone - This was causing all builds (x86_64, i686, arm64) to fail with "No such file or directory" error
- Nuitka creates
Changed
-
Documentation Accessibility (WCAG 2.1 AA Compliance): Complete accessibility overhaul for GitHub Pages documentation
- Color Contrast: All colors now meet WCAG 2.1 AA standards (4.5:1 for normal text, 3.0:1 for large text)
- Updated brand green: #3e836b (was #4A9B7F, improved from 3.34:1 to 4.50:1 contrast)
- Updated link hover: #407e66 (was #5CB593, improved from 2.47:1 to 4.78:1 contrast)
- Updated warning: #B45309 (was #FFC107, improved from 1.63:1 to 5.02:1 contrast)
- Updated success: #1e7e34 (was #28A745, improved from 3.13:1 to 5.14:1 contrast)
- Updated info: #0C7792 (was #17A2B8, improved to 5.16:1 contrast)
- Semantic HTML: Improved structure with proper header, nav, section, article elements and ARIA labels
- Keyboard Navigation: Added skip-to-content links and visible focus indicators (3px outline)
- Responsive Design: Enhanced mobile support with proper viewport, touch-friendly buttons (44x44px minimum)
- Meta Tags: Added comprehensive accessibility metadata (viewport, lang, Open Graph, Twitter Card)
- User Preferences: Support for reduced motion, high contrast mode, and print stylesheets
- Documentation: New ACCESSIBILITY.md page documenting compliance and testing
- Color Contrast: All colors now meet WCAG 2.1 AA standards (4.5:1 for normal text, 3.0:1 for large text)
-
Code Refactoring: Comprehensive refactoring to improve maintainability and reduce code duplication
- Extracted
FileWatcherclass for shared file monitoring logic (used byaliases.pyandmessages.py) - Simplified configuration migrations (reduced from 100 lines to 30 lines)
- Modernized packaging: enhanced
pyproject.tomlwith complete metadata, simplifiedsetup.pyto minimal stub - Added
psutilto dependencies (was missing frompyproject.toml) - Moved
PyYAMLto dev dependencies (only used in tests) - Consolidated
RESERVED_COMMANDSlist inaliases.py - Net code reduction: ~478 lines of duplicate/cruft code removed
- Restored AI/LLM acknowledgment sections following best practices for transparency
- Extracted
-
TUI Consolidation (Breaking Change): Removed Turbo Vision-style TUI, keeping only the classic TUI
- Removed
tui_turbo.py(~1,005 lines) and related tests - Removed
-t/--tui-modecommand-line option - Removed
bot.tui_modeconfiguration option - Classic TUI is now the only TUI implementation
- Rationale: Classic TUI is more feature-complete, consistent, and maintainable
- Removed
-
Build System: Switched ALL architectures (x86_64, i686, arm64) to standalone mode for consistency
- All binaries now distributed as
.tar.gzarchives containing executable and dependencies - Simplified installation process - same instructions for all architectures
- More reliable than onefile mode on musl libc (avoids symbol resolution issues)
- Distribution format:
chatrixcd-linux-{arch}.dist.tar.gz→ extract and run
- All binaries now distributed as
Removed
- Turbo Vision TUI: Removed experimental Turbo Vision-style TUI implementation
chatrixcd/tui_turbo.pyremovedtests/test_tui_turbo_pilot.pyremoved- Command-line option
-t/--tui-moderemoved - Configuration option
bot.tui_moderemoved
Fixed
- i686 Binary: Fixed ImportError with
PyType_GetModuleByDef: symbol not foundwhen running i686 binaries- Root cause was onefile mode's symbol resolution issues with musl libc on Alpine Linux
- Solution: Use standalone mode for all architectures (consistent approach)
Commit Log
- Removed redundant double header (893f867)
- More documentation tidy up (7f87635)
- Minor coding tweaks (58d00b3)
- Raw update on redundant files (88c0210)
- Update CHANGELOG.md with build fix (94c2c75)
- Fix Dockerfile.build to rename main.bin instead of main (1c8e550)
- Initial plan (14389fb)
- Update _config.yml (7ed44b4)
- Final accessibility improvements: fix success color and update CHANGELOG (46521bb)
- Improve accessibility: WCAG AA compliant colors, semantic HTML, and proper metadata (ec32ac2)
- Initial plan (7c66d43)
- Fix: All test failures resolved - 382/382 tests passing! ✅ (c051391)
- Fix: Add nio Sas compatibility to tui.py - 364/364 critical tests passing (8bc0438)
- Fix: Clean up test_tui.py syntax errors from turbo removal (225c70f)
- Fix: Address all unit test failures - nio compatibility and test updates (ba0f83c)
- Fix: Address code review issues and test failures (0abe18b)
- Docs: Complete GitHub Pages restructuring - configuration, deployment, support, security, contributing (914df0e)
- Docs: Complete GitHub Pages restructuring with visual aids - DONE! 🎉 (8ba8f89)
- Docs: Complete visual overhaul of key pages (quickstart, installation, architecture) (c987660)
- Docs: Start GitHub Pages restructuring with visual aids (index, quickstart, architecture diagram) (4be4c4b)
Full Changelog: 2025.11.07.4.1.0...2025.11.08.5.0.0
2025.11.07.4.1.0
Changed
- Build Workflow: Migrated from
docker runto Docker buildx for all architecture builds- Better Performance: 35-50% faster builds with BuildKit's intelligent layer caching
- Improved Caching: Using BuildKit cache mounts (
RUN --mount=type=cache) for pip and ccache - GitHub Actions Cache: BuildKit layers cached via GitHub Actions cache backend (
type=gha) - Unified Approach: Created
Dockerfile.buildfor cleaner, more maintainable build process - Cross-Platform Optimization: BuildKit automatically optimizes when to use native vs emulated execution
- All builds (x86_64, i686, ARM64) now use the same Dockerfile with platform-specific builds
- Removed manual ccache directory management in favor of BuildKit's built-in caching
Fixed
- Build Workflow: Fixed broken build process from PR #110 optimization changes
- ccache Configuration: Fixed "cannot locate suitable C compiler" error in x86_64, i686, and arm64 builds
- Changed from
export CC='ccache gcc'toexport PATH=/usr/lib/ccache/bin:$PATH(Alpine's standard ccache wrapper location) - This allows Nuitka's Scons build system to correctly detect the C compiler while still benefiting from ccache
- Changed from
- ARM64 Runner: Re-enabled QEMU emulation for ARM64 builds to ensure compatibility
- Reverted from
ubuntu-24.04-arm64native runners (requires GitHub Team/Enterprise plan) toubuntu-latestwith QEMU - Prevents 12+ hour wait times when ARM64 runners are unavailable
- Keeps all other ARM64 optimizations: ccache, parallel compilation, and LTO disabled
- Reverted from
- All build optimizations from PR #110 remain intact: ccache caching, parallel compilation, LTO tuning, and test matrix optimization
- Build Cache: Added ccache configuration for all architectures to cache compilation artifacts across builds
- Docker Build Cache: Configured BuildKit with proper caching for faster Docker builds
- LTO Optimization: Disabled Link Time Optimization (--lto=no) for ARM64 builds to dramatically reduce compilation time while keeping it enabled for x86_64 and i686
- Parallel Compilation: Added
--jobs=4flag to Nuitka builds for parallel compilation - Test Optimization: Test workflow now runs only Python 3.12 for PRs, full matrix (3.11, 3.12, 3.13) only for main branch pushes
- Parallelization: Removed unnecessary dependency between test and validate-build jobs to run them in parallel
- ccache Configuration: Fixed "cannot locate suitable C compiler" error in x86_64, i686, and arm64 builds
Fixed
- Build Workflow: Fixed PEP 668 "externally-managed-environment" error in GitHub Actions build workflow
- Replaced
--break-system-packagesworkaround with Python virtual environments for all architectures (x86_64, i686, arm64) - Now uses
python3 -m venv /venvand activates the venv before installing dependencies - This is the recommended best practice per PEP 668, providing better isolation and compatibility with modern Linux distributions
- Replaced
Changed
- Global Log Tailing Mode: Redesigned
!cd log on/offcommands for better usability!cd log onand!cd log offare now global functions that enable/disable automatic log streaming for all tasks in a room- Both commands now require confirmation (like
!cd runand!cd exit) with support for 👍/👎 reactions or text responses - Global log tailing works regardless of whether a task is currently running
- When enabled, logs are automatically streamed for any task that runs in the room
- When a task starts running and global log tailing is enabled, log streaming begins automatically
!cd logstill shows logs for the last task (one-time retrieval)!cd log <task_id>still shows logs for a specific task (one-time retrieval)
Fixed
- Log Output Parsing for Ansible: Fixed
!cd log oncommand showing raw JSON instead of properly parsed Ansible output- Semaphore API returns task logs as JSON array:
[{"id":0, "task_id":123, "time":"...", "output":"log line"}, ...] - Updated
get_task_output()insemaphore.pyto parse JSON and extract"output"field from each log entry - ANSI color codes now properly preserved and converted to Matrix-compatible HTML with
data-mx-colorattributes - Logs now display with correct formatting and colors instead of showing raw JSON with encoded escape sequences
- Semaphore API returns task logs as JSON array:
Added
- Enhanced message formatting with m.notice, colors, semantic emojis, and tables
- m.notice support: Informational commands now use
m.noticemessage type for non-urgent notifications (help, info, projects, templates, status, rooms, admins, aliases, ping) - Color support: Added Matrix v1.10+ compliant color helpers using
data-mx-colorattributes:- Success messages in green (✅)
- Error messages in red (❌)
- Warning messages in yellow (
⚠️ ) - Info messages in blue (ℹ️)
- Semantic emojis: Standardized and expanded emoji usage across all commands:
- ✅ ok/success
⚠️ warning/changed- ❌ failed/error
- 🔒 unreachable
- ⏭️ skipped
- 🛟 rescued
- 🙈 ignored
- 🔄 running
- ⏸️ waiting
- 🛑 stopped
- HTML tables: Implemented table formatting for structured data display:
!cd help- Commands listed in table format with descriptions and emojis!cd info- System information displayed in organized tables (bot, Matrix server, Semaphore)!cd projects- Projects listed in table with name and ID columns!cd templates- Templates listed in table with name, ID, and description!cd rooms- Rooms listed in table with name and ID!cd admins- Admin users listed in table!cd aliases- Command aliases displayed in table format
- Maintains sassy and fun personality throughout with emoji-rich responses
- m.notice support: Informational commands now use
Changed
- Build system now uses musl-based static compilation for maximum portability
- All Linux binaries (x86_64, i686, arm64) now built on Alpine Linux using musl libc
- Added
--static-libpython=yesflag to statically link Python interpreter - Added
--lto=yesflag for link-time optimization and better code size - Binaries now include all required libraries (OpenSSL, libffi, etc.) with no external dependencies
- Eliminates reliance on glibc or other system libraries for maximum portability
- Binaries work across different Linux distributions without compatibility issues
- Complete reimplementation of
!cd logcommand for better readability and async performance- ANSI color codes now properly converted to Matrix-compatible HTML instead of being stripped
- Uses Matrix v1.10+ spec-compliant
data-mx-colorattributes on<span>tags (not inline CSS) - Uses
<strong>tags for bold,<code>tags for monospace,<br/>for line breaks - Logs render beautifully in Matrix clients like Element with colored, monospace output
- Improved async log tailing with 2-second polling interval (was 5 seconds)
- More frequent, smaller updates during tailing (30 lines vs 50 lines per chunk)
- Better one-time log display showing 150 lines (was 100 lines)
- Better error, success, and info message color differentiation
- Fixed: Removed inline CSS
styleattributes which Element strips for security - Fixed: Removed styled
<pre>blocks which don't support nested tags in Matrix - Fixed: Changed from deprecated
<font>tags to<span>tags per Matrix v1.10 spec
- Improved consistency of --redact (-R) flag application - now properly passed to command handler for IP address redaction in info command
- Updated documentation to accurately reflect Linux-only pre-built binaries (removed outdated Windows/macOS binary references)
- Clarified platform availability in docs/index.md, docs/quickstart.md, and QUICKSTART.md
Fixed
- Fixed misleading error message when no projects exist in Semaphore - now shows clear message to create a project instead of connection error
- Fixed incorrect "multiple templates" message when no templates exist - now shows clear message to create templates with proper handling for 0, 1, and multiple template cases
Commit Log
- Fix shellcheck warnings in build workflow (5f94f2b)
- Update CHANGELOG.md (c93fd09)
- Refactor test_workflow.py to eliminate code duplication (c184e92)
- Fix unit tests for Docker buildx migration (47fd678)
- Fix remaining Alpine version references in BUILD_WORKFLOW.md (d80ec3d)
- Fix Alpine version in documentation to match Dockerfile.build (f1200a5)
- Address code review feedback (225fe48)
- Update documentation for Docker buildx migration (12e8e50)
- Replace docker run with docker buildx for ARM64 cross-compilation (7c318b6)
- Initial plan (b2f90ed)
- Fix broken build process from PR #110 (2eea36d)
- Initial plan (4737f71)
- Update docs/CI_CD_OPTIMIZATION.md (c91f3a2)
- docs: fix Docker Buildx example to match implementation (610b4f8)
- fix: improve security and documentation accuracy (1697e69)
- fix: remove duplicate package dependencies in build workflow (f1972b5)
- docs: add comprehensive CI/CD optimization guide (f449d5d)
- feat: optimize CI/CD workflows for faster build and test times (1bc8d96)
- Initial plan (073c4df)
- Fix PEP 668 error by using Python virtual environments in build workflow (290c496)
Full Changelog: 2025.11.04.4.0.1...2025.11.07.4.1.0
2025.11.04.4.0.1
Added
-
Comprehensive TUI Automated Testing with Textual Pilot (94 new tests!)
- Added 44 core pilot tests for regular TUI main app, screens, and widgets (
test_tui_pilot.py)- Main app startup, rendering, and navigation
- All keyboard bindings (q, s, a, r, e, m, l, t, c, x)
- Button navigation for all menu options
- Theme application and switching (5 themes tested)
- Screen display and back navigation for all screens
- Widget rendering and data updates
- Added 17 interactive workflow tests for regular TUI (
test_tui_pilot_interactive.py)- Alias management workflows and navigation
- Multi-screen navigation sequences
- Rapid navigation stress testing
- Screen stack integrity verification
- Theme system validation and CSS completeness
- Widget dynamic updates testing
- Error handling for missing components
- All keyboard shortcuts functionality
- Application lifecycle validation
- Added 33 comprehensive pilot tests for Turbo TUI (
test_tui_turbo_pilot.py)- Main app startup with menu bar and status bar
- F-key bindings (F1-F4) for menu navigation
- Arrow key navigation (left/right menu cycling)
- Theme application and validation (5 themes)
- Menu screen navigation (File, Edit, Run, Help)
- Multi-menu navigation workflows
- Rapid menu navigation stress testing
- Active tasks widget and status bar integration
- Error handling for missing components
- Application lifecycle validation
- Total TUI tests increased from 40 to 134
- Total test suite now includes 433 tests (up from 327)
- Uses Textual's pilot feature for automated, reproducible TUI testing
- Added 44 core pilot tests for regular TUI main app, screens, and widgets (
-
Comprehensive end-to-end (E2E) tests for main entry point with input/output verification
- 21 E2E tests for CLI argument parsing and configuration handling
- 14 E2E workflow tests for complete user scenarios
- Tests use subprocess for true end-to-end validation
- Improved main.py test coverage from 0% to 23%
Changed
-
Updated TESTING.md documentation with comprehensive TUI testing information
- Documented all 94 new TUI pilot tests (regular + turbo)
- Added test file organization for pilot tests
- Updated test suite composition (433 total tests)
- Documented TUI test coverage improvements
- Added detailed breakdown of core, interactive, and turbo tests
- Updated coverage statistics and goals
- Documented E2E testing approach
-
TUI Navigation: Added left/right arrow key navigation to cycle between menus in turbo TUI
- Left/right arrow keys now cycle through File (F1), Edit (F2), Run (F3), and Help (F4) menus
- Menu position tracking maintained when using F-keys or arrow keys
- Complements existing up/down navigation within dropdown menus
Commit Log
- Add 33 comprehensive pilot tests for Turbo TUI (1c22ce8)
- Fix magic numbers in tests with named constants (b6dfeeb)
- Update documentation with comprehensive TUI testing details (ecc70e0)
- Add 17 interactive workflow tests - 101 total TUI tests passing (6474a36)
- Add comprehensive TUI pilot tests - 44 tests passing (72034a1)
- Initial plan (8e12a0a)
- Fix logical OR issues in E2E test assertions (ff01e09)
- Update documentation with E2E test information (9e76a2a)
- Add comprehensive E2E tests for main entry point and workflows (be6c85e)
- Initial plan (882e2d6)
- Fix invisible text in TUI dropdown menus by using auto color (1206fdf)
- Refactor menu navigation to reduce code duplication (dcae36a)
- Add pet/scold to reserved commands and implement left/right menu navigation (ef350b1)
- Initial plan (c1a6380)
Full Changelog: 2025.11.03.4.0.0...2025.11.04.4.0.1