- Reverted from generic Package approach to factory function pattern
- Factory creates Engine::new_raw() + registers package (efficient)
- AsyncRunner and SyncRunner use engine_factory: Arc<dyn Fn() -> Engine>
- Each job gets a fresh engine instance (cheap with factory pattern)
- Package is created once inside factory, engines reuse it
- Implemented get_error() method to fetch job error messages from Redis
- Mirrors get_result() pattern for consistency
- Used by supervisor to retrieve job errors without manual Redis queries
- Cleanup: removed old runner_osis directory
- Reorganized examples into osiris/, sal/, and utils/ folders
- Moved hardcoded scripts to separate .rhai files
- Added signature() method to JobBuilder for job signing
- Updated OSIRIS context to use block_in_place instead of runtime
- Removed runtime field from OsirisContext
- Added typed save() methods for Note and Event objects
- Updated all examples to use new structure and APIs