docs: update RELEASE.md for v3.2.11

Delta release notes covering changes from v3.0.14 to v3.2.11:
- Configuration-agnostic volume management with optional descriptions
- Admin notification broadcast system
- Privileged user docker.sock access control
- Documentation following modus primaris style
- Technical improvements and upgrade notes

Following modus primaris: concise, factual, organized sections.
This commit is contained in:
stellarshenson
2025-11-09 22:55:59 +01:00
parent a018c7f506
commit d230f45bfe

View File

@@ -1,53 +1,94 @@
# Release v3.0.14
# Release v3.2.11
## Major Features
**User Self-Service Capabilities**
- **Restart Server**: Users can restart their running JupyterLab containers directly from the control panel without admin intervention
- **Manage Volumes**: Selective reset of persistent volumes (home/workspace/cache) when server is stopped - users choose which volumes to reset via checkbox interface
**Configuration-Agnostic Volume Management**
- Volume list dynamically generated from `DOCKER_SPAWNER_VOLUMES` configuration
- Optional `VOLUME_DESCRIPTIONS` dict for user-friendly volume descriptions
- UI automatically adapts if volumes renamed, added, or removed in config
- Template uses Jinja2 loop with conditional description display
- Handler validates against `USER_VOLUME_SUFFIXES` from config
**Admin Notification Broadcast**
- Broadcast notifications to all active JupyterLab servers via `/hub/notifications`
- Six notification types: default, info, success, warning, error, in-progress
- 140-character message limit with live counter
- Concurrent delivery using `asyncio.gather()` with 5-second timeout per server
- Temporary API tokens (5-minute expiry) for authentication
- Requires `jupyterlab_notifications_extension` on spawned servers
**Privileged User Access Control**
- Group-based docker.sock access via `docker-privileged` built-in group
- Pre-spawn hook conditionally mounts `/var/run/docker.sock` based on group membership
- Built-in group protection (auto-recreates if deleted)
- Managed through JupyterHub admin panel at `/hub/admin`
## Technical Improvements
**Frontend**
- Bootstrap 5 modal compatibility (data-bs-toggle, data-bs-target, btn-close)
- RequireJS module loading for proper JavaScript execution
- Font Awesome icons (fa-rotate for restart, fa-database for volumes)
- Proper template inheritance extending JupyterHub's default home.html
**Configuration**
- `jupyterhub_config.py` protected from import errors with `if c is not None:` guards
- `DOCKER_SPAWNER_VOLUMES` defined as module-level constant (importable by handlers)
- `get_user_volume_suffixes()` extracts volume suffixes from config
- `USER_VOLUME_SUFFIXES` calculated and exposed to templates
**Backend**
- New API endpoint: `/api/users/{username}/manage-volumes` accepting JSON body with volume array
- ManageVolumesHandler processes multiple volumes with detailed success/failure response
- Manual permission checking (admin or self) for API handlers
- Comprehensive logging for all operations (frontend console + backend logs)
**Handlers**
- `ManageVolumesHandler` validates against configured volumes (not hardcoded)
- `BroadcastNotificationHandler` sends to `/jupyterlab-notifications-extension/ingest`
- `NotificationsPageHandler` renders broadcast form
- One-line logging per server: username, message preview, type, outcome
**Infrastructure**
- Version management system with project.env and auto-increment on build
- Makefile enhancements: increment_version, tag, stop, logs targets
- Docker API integration via /var/run/docker.sock for volume and container management
**Templates**
- Dynamic volume checkbox generation from `user_volume_suffixes`
- Conditional description display from `volume_descriptions`
- Bootstrap 5 modal syntax throughout
- RequireJS wrapped JavaScript with CSRF protection
## Documentation
- README updated with Features section and visual screenshots
- CLAUDE.md created with architecture overview and configuration patterns
- FEATURE_PLAN.md documenting implementation strategy
- Journal tracking all substantive work
**Modus Primaris Style**
- README reorganized: features first, screenshots, then architecture
- Simplified notification description (verbose → concise)
- Simplified architecture diagram labels
- Features as bullet points at top
**New Documentation**
- `doc/notifications.md` (35 lines) - notification system implementation
- `doc/ui-template-customization.md` (58 lines) - template extension patterns
- `doc/docker-socket-permissions.md` (66 lines) - socket access control
**Screenshots**
- `screenshot-home.png` - user control panel with restart and volume management
- `screenshot-send-notification.png` - admin notification broadcast interface
- `screenshot-volumes.png` - volume management modal
- `screenshot-volumes-modal.png` - volume selection checkboxes
## Version History
- **v3.0.14**: Documentation updates, 3-second stop delay
- **v3.0.12**: Multi-volume management, Bootstrap 5 fixes, icons
- **v2.11**: Previous stable release
- **v3.2.11**: Configuration-agnostic volume management, optional descriptions
- **v3.2.0**: Admin notification broadcast system
- **v3.1.2**: Privileged user docker.sock access control
- **v3.0.23**: Production readiness, CI/CD, architecture cleanup
- **v3.0.14**: User self-service capabilities (restart, volume management)
## Upgrade Notes
No breaking changes. Existing deployments will seamlessly adopt new self-service features upon container restart.
No breaking changes. Configuration backward compatible.
Users will see new buttons on the JupyterHub control panel:
- "Restart Server" (when server is running)
- "Manage Volumes" (when server is stopped)
**Optional**: Add `VOLUME_DESCRIPTIONS` dict to `jupyterhub_config.py` for user-friendly volume descriptions in UI:
```python
VOLUME_DESCRIPTIONS = {
'home': 'User home directory files, configurations',
'workspace': 'Project files, notebooks, code',
'cache': 'Temporary files, pip cache, conda cache'
}
```
**Optional**: Install `jupyterlab_notifications_extension` on spawned servers to enable admin notification broadcast.
Existing deployments adopt new features upon container rebuild and restart.
---
**From**: v2.11-cuda-12.9.1
**To**: v3.0.14_cuda-12.9.1_jh-5.4.2
**Date**: 2025-11-04
**From**: v3.0.14_cuda-12.9.1_jh-5.4.2
**To**: v3.2.11_cuda-12.9.1_jh-5.4.2
**Date**: 2025-11-09