# Work in Progress ## Recent Changes Summary (February 2025) ### Experiment Designer Iteration (February 2025) #### **Current Focus: Experiment Designer Redesign (Hashing / Drift / Action Library / Properties / DnD / Save & Export)** **Status**: In active iteration (not stable) The experiment designer has been refactored into modular components (registry + library + flow + properties panel). Active iteration now targets validation drift visibility, richer parameter controls, and continued provenance/compilation integrity. **Implemented (baseline):** - Step-first container model (steps hold ordered actions) (stable) - Drag-and-drop of actions into steps and reordering within steps (stable) - Conversion utility to DB step/action structures (provenance & execution metadata flattening) (stable) - Plugin action loading with namespaced IDs (pluginId.actionId) and provenance retention (stable) - Execution compilation pipeline (deterministic graph + integrity hash) integrated in update mutation (stable) **UI State (updated):** - Compact spacing (h-6/7 inputs) and category coloring - Dark mode variants applied (will audit accessibility) - Category color system (may refine semantic tokens; now reused across extracted components) - Step containers with colored left borders for type (moved into `StepFlow`) - Drag overlays + hover states (keyboard reordering & provenance badge a11y still pending) **Interaction Features (present / modularized):** - Multi-level drag & drop (steps + actions) via `StepFlow` - Direct action selection for inline parameter editing (now inside `PropertiesPanel`) - Action tooltip (plugin/source details; provenance badges present; enrichment still planned) - Drop zone highlighting - Pointer sensor activation threshold (mobile/touch review pending) **Plugin Integration (status):** - Registry loads core + study plugin actions (version stored; pin drift resolution still pending; designer now guarantees installed study plugin actions appear once experiment + study resolved) - Fallback actions present (unchanged) - Param schema → UI field mapping (primitive only; now enhanced for boolean + ranged number) - Provenance & execution metadata embedded in action instances (server persists) (stable) - Structured error surfaces for plugin load/validation failures still TODO **Technical Notes (updated):** - Types expanded: provenance, execution descriptors, integrity hashing structures (stable) - Acceptable performance; profiling after slider & drift logic integration still pending - Accessibility review pending (keyboard reorder, focus indicators, slider a11y labels) - Monolith split complete: `ActionRegistry.ts`, `ActionLibrary.tsx`, `StepFlow.tsx`, `PropertiesPanel.tsx` - Need unit tests for registry + conversion + compiler + drift serializer; none present **Key Files (current iteration - post modularization):** - `~/components/experiments/designer/BlockDesigner.tsx` - Orchestrator (state, validation, drift) - `~/components/experiments/designer/ActionRegistry.ts` - Registry (core + plugin + fallback) - `~/components/experiments/designer/ActionLibrary.tsx` - Categorized draggables - `~/components/experiments/designer/StepFlow.tsx` - Sortable steps & actions - `~/components/experiments/designer/PropertiesPanel.tsx` - Parameter & metadata editor **Current State Summary:** Functional baseline with modular extraction complete. Parameter UI upgraded (boolean → Switch, ranged number → Slider). Hash drift indicator implemented (Validated / Drift / Unvalidated). Still pending: enum grouping polish, keyboard DnD accessibility, version pin drift resolution, structured plugin load error surfaces. ### Experiment Designer Redesign Implementation (in progress) #### **Status Snapshot** Simplified and unified the seed scripts to load all plugins (core and robot) through the same repository sync mechanism. **Seed Script Consolidation:** - **Before**: 5 separate seed scripts (`seed.ts`, `seed-dev.ts`, `seed-simple.ts`, `seed-plugins.ts`, `seed-core-blocks.ts`) - **After**: Single `seed-dev.ts` script with integrated repository sync - **Benefits**: Consistent plugin loading, easier maintenance, real repository testing **Core Repository Integration:** - Core blocks now loaded from `http://localhost:3000/hristudio-core` during development - Same repository sync logic as robot plugins from `https://repo.hristudio.com` - Eliminates hardcoded core blocks - everything comes from repositories - Local core repository served from `public/hristudio-core/` directory **Simplified Setup Process:** ```bash docker compose up -d bun db:push bun db:seed # Single command loads everything ``` **Repository Sync Integration:** - Core system blocks loaded as single plugin with 4 block groups (27 total blocks) - Robot plugins loaded individually (TurtleBot3 Burger/Waffle, NAO) - All repositories use same sync validation and error handling - Proper metadata storage with repository references **Package.json Cleanup:** - Removed `db:seed:simple`, `db:seed:plugins`, `db:seed:core-blocks`, `db:seed:full` - Single `db:seed` command for all seeding needs - Simplified development workflow with fewer script options --- - Spec Document: `docs/experiment-designer-redesign.md` (completed) - Hashing Model: Implementing (canonical + incremental planned) - State Store: Planned (Zustand-based) - Action Library: Pending rebuild (categorization + search + drift markers) - Step Flow: Existing structure to be replaced with new DnD + keyboard support - Properties Panel: To adopt dynamic ParameterFieldFactory (Switch / Slider / etc.) - Validation Layer: Rule set drafting (structural + param + plugin) - Drift Detection: Planned (design vs last validated hash + plugin signature drift) - Save / Versioning: Pending (auto-save + manual + conflict detection) - Export / Import: Export bundle utility planned - Removal of legacy naming (“enhanced” / transitional) in progress - Docs Cross-linking: Partially updated #### **Next Milestones** Fixed and implemented full repository synchronization for dynamic plugin loading from remote repositories. **Core Fixes:** - **Repository Sync Implementation**: Fixed TODO placeholder in `admin.repositories.sync` API with complete synchronization logic - **Plugin Store Display Logic**: Fixed installation state detection - plugins now correctly show "Installed" vs "Install" buttons - **Repository Name Display**: All plugins now show proper repository names from metadata - **Admin Role Access**: Fixed missing administrator role preventing access to admin routes **Technical Implementation:** - Repository sync fetches from `https://repo.hristudio.com` with complete error handling - Plugin matching with existing robots by name/manufacturer patterns - Proper TypeScript typing throughout with removal of `any` types - Database metadata updates with repository references - Installation status checking via `getStudyPlugins` API integration **Repository Integration:** - **Live Repository**: `https://repo.hristudio.com` serving 3 robot plugins (TurtleBot3 Burger/Waffle, NAO) - **Plugin Actions**: Complete ROS2 action definitions with parameter schemas - **Trust Levels**: Official, Verified, Community plugin categorization - **Metadata Storage**: Platform, category, specs, documentation links preserved **User Experience Improvements:** - Plugin Store now shows 4 plugins total (Core System + 3 robot plugins) - Correct installation states: Core System shows "Installed", others show "Install" - Repository names displayed for all plugins from proper metadata - Study-scoped plugin installation working correctly ## Recent Changes Summary (December 2024) (historical reference) ### Plugin System Implementation #### **Plugin Management System** Complete plugin system for robot platform integration with study-specific installations. **Core Features:** - Plugin browsing and installation interface - Repository management for administrators - Study-scoped plugin installations - Trust levels (official, verified, community) - Plugin action definitions for experiment integration **Files Created:** - `src/app/(dashboard)/plugins/` - Plugin pages and routing - `src/components/plugins/` - Plugin UI components - `src/components/admin/repositories-*` - Repository management - Extended `src/server/api/routers/admin.ts` with repository CRUD - Added `pluginRepositories` table to database schema **Database Schema:** - `plugins` table with robot integration metadata - `studyPlugins` table for study-specific installations - `pluginRepositories` table for admin-managed sources **Navigation Integration:** - Added "Plugins" to sidebar navigation (study-scoped) - Admin repository management in administration section - Proper breadcrumbs and page headers following system patterns **Technical Implementation:** - tRPC routes for plugin CRUD operations - Type-safe API with proper error handling - Follows EntityForm/DataTable unified patterns - Integration with existing study context system --- ### Admin Page Redesign #### **System Administration Interface** Complete redesign of admin page to match HRIStudio design patterns. **Layout Changes:** - **Before**: Custom gradient layout with complex grid - **After**: Standard PageHeader + card-based sections - System overview cards with metrics - Recent activity feed - Service status monitoring - Quick action grid for admin tools **Components Used:** - `PageHeader` with Shield icon and administrator badge - Card-based layout for all sections - Consistent typography and spacing - Status badges and icons throughout --- ### Complete Experiment Designer Redesign #### **Background** The experiment designer was completely redesigned to integrate seamlessly with the HRIStudio application's existing design system and component patterns. The original designer felt out of place and used inconsistent styling. #### **Key Changes Made** ##### **1. Layout System Overhaul** - **Before**: Custom resizable panels with full-page layout - **After**: Standard PageHeader + Card-based grid system - **Components Used**: - `PageHeader` with title, description, and action buttons - `Card`, `CardHeader`, `CardTitle`, `CardContent` for all sections - 12-column grid layout (3-6-3 distribution) ##### **2. Visual Integration** - **Header**: Now uses unified `PageHeader` component with proper actions - **Action Buttons**: Replaced custom buttons with `ActionButton` components - **Status Indicators**: Badges integrated into header actions area - **Icons**: Each card section has relevant icons (Palette, Play, Settings) ##### **3. Component Consistency** - **Height Standards**: All inputs use `h-8` sizing to match system - **Spacing**: Uses standard `space-y-6` and consistent card padding - **Typography**: Proper text hierarchy matching other pages - **Empty States**: Compact and informative design ##### **4. Technical Improvements** - **Simplified Drag & Drop**: Removed complex resizable panel logic - **Better Collision Detection**: Updated for grid layout structure - **Function Order Fix**: Resolved initialization errors with helper functions - **Clean Code**: Removed unused imports, fixed TypeScript warnings #### **Code Structure Changes** ##### **Layout Before**: ```jsx
{/* Custom header */}
{/* Palette */} {/* Canvas */} {/* Properties */}
``` ##### **Layout After**: ```jsx
{/* Block Library */}
{/* Experiment Flow */}
{/* Properties */}
``` #### **Files Modified** - `src/components/experiments/designer/BlockDesigner.tsx` - Current iterative version - `src/components/ui/data-table.tsx` - Fixed control heights - `src/components/experiments/experiments-data-table.tsx` - Fixed select styling - `src/components/participants/participants-data-table.tsx` - Fixed select styling - `src/components/studies/studies-data-table.tsx` - Fixed select styling - `src/components/trials/trials-data-table.tsx` - Fixed select styling --- ### Data Table Controls Standardization #### **Problem** Data table controls (search input, filter selects, columns dropdown) had inconsistent heights and styling, making the interface look unpolished. #### **Solution** - **Search Input**: Already had `h-8` - ✅ - **Filter Selects**: Added `h-8` to all `SelectTrigger` components - **Columns Dropdown**: Already had proper Button styling - ✅ #### **Tables Fixed** - Experiments data table - Participants data table - Studies data table (2 selects) - Trials data table --- ### System Theme Enhancements #### **Background** The overall system theme was too monochromatic with insufficient color personality. #### **Improvements Made** ##### **Color Palette Enhancement** - **Primary Colors**: More vibrant blue (`oklch(0.55 0.08 240)`) instead of grayscale - **Background Warmth**: Added subtle warm undertones to light mode - **Sidebar Blue Tint**: Maintained subtle blue character as requested - **Chart Colors**: Proper color progression (blue → teal → green → yellow → orange) ##### **Light Mode**: ```css --primary: oklch(0.55 0.08 240); /* Vibrant blue */ --background: oklch(0.98 0.005 60); /* Warm off-white */ --card: oklch(0.995 0.001 60); /* Subtle layering */ --muted: oklch(0.95 0.008 240); /* Slight blue tint */ ``` ##### **Dark Mode**: ```css --primary: oklch(0.65 0.1 240); /* Brighter blue */ --background: oklch(0.12 0.008 250); /* Soft dark with blue undertone */ --card: oklch(0.18 0.008 250); /* Proper contrast layers */ --muted: oklch(0.22 0.01 250); /* Subtle blue-gray */ ``` #### **Results** - Much more personality and visual appeal - Better color hierarchy and element distinction - Professional appearance maintained - Excellent accessibility and contrast maintained --- ### Breadcrumb Navigation Fixes #### **Problems Identified** 1. **Study-scoped pages** linking to wrong routes (missing context) 2. **Form breadcrumbs** linking to non-existent entities during creation 3. **Inconsistent study context** across different data tables #### **Solutions Implemented** ##### **Study Context Awareness** - **ExperimentsDataTable**: `Dashboard → Studies → [Study Name] → Experiments` - **ParticipantsDataTable**: `Dashboard → Studies → [Study Name] → Participants` - **TrialsDataTable**: `Dashboard → Studies → [Study Name] → Trials` ##### **Form Breadcrumbs Fixed** - **ExperimentForm**: Uses study context when available, falls back to global - **ParticipantForm**: Links to study-scoped participants when in study context - **TrialForm**: Links to study-scoped trials when available ##### **Smart Link Logic** - ✅ **With `href`**: Renders as clickable `` - ✅ **Without `href`**: Renders as non-clickable `` - ✅ **Conditional availability**: Only provides `href` when target exists --- ### Technical Debt Cleanup #### **Block Designer Fixes** 1. **Nested Block Drag & Drop**: Added proper `SortableContext` for child blocks 2. **Collision Detection**: Enhanced for better nested block handling 3. **Helper Functions**: Fixed initialization order (`findBlockById`, `removeBlockFromStructure`) 4. **Background Colors**: Matched page theme properly #### **Permission System** - **Added Administrator Bypass**: System admins can now edit any experiment - **Study Access Check**: Enhanced to check both study membership and system roles #### **API Enhancement** - **Visual Design Storage**: Added `visualDesign` field to experiments update API - **Database Integration**: Proper saving/loading of block designs --- ### Current Status (Deprecated Section - To Be Rewritten) #### **Completed** - (Remove) Designer not yet in a stable/complete state - All data table control styling standardized - System theme enhanced with better colors - Breadcrumb navigation completely fixed - Technical debt resolved #### **Production Ready** - TypeScript surface improving; more types to add for provenance/execution - Consistent styling throughout application - Proper error handling and user feedback - Excellent dark mode support - Mobile/tablet friendly drag and drop #### **Improvements Achieved** - Visual consistency improved; still refactoring designer component size - **User Experience**: Significant improvement in navigation and usability - **Code Quality**: Clean, maintainable code with proper patterns - **Performance**: Optimized drag and drop with better collision detection - **Accessibility**: WCAG 2.1 AA compliance maintained throughout --- ### Core Block System Implementation (February 2024) (archived) **Complete documentation available in [`docs/core-blocks-system.md`](core-blocks-system.md)** #### **Repository-Based Core Blocks** Complete overhaul of the experiment designer to use plugin-based architecture for all blocks. **Architecture Change:** - **Before**: Hardcoded core blocks in `BlockRegistry.initializeCoreBlocks()` - **After**: Repository-based loading from `hristudio-core` plugin repository - **Benefits**: Complete consistency, easier updates, extensible core functionality **Core Repository Structure:** ``` hristudio-core/ ├── repository.json # Repository metadata ├── plugins/ │ ├── index.json # Plugin index (26 total blocks) │ ├── events.json # Event trigger blocks (4 blocks) │ ├── wizard-actions.json # Wizard action blocks (6 blocks) │ ├── control-flow.json # Control flow blocks (8 blocks) │ └── observation.json # Observation blocks (8 blocks) └── assets/ # Repository assets ``` **Block Categories Implemented:** ##### **Event Triggers (4 blocks)** - `when_trial_starts` - Trial initialization trigger - `when_participant_speaks` - Speech detection with duration threshold - `when_timer_expires` - Time-based triggers with custom delays - `when_key_pressed` - Wizard keyboard shortcuts (space, enter, numbers) ##### **Wizard Actions (6 blocks)** - `wizard_say` - Speech with tone guidance (neutral, friendly, encouraging) - `wizard_gesture` - Physical gestures (wave, point, nod, applaud) with directions - `wizard_show_object` - Object presentation with action types - `wizard_record_note` - Observation recording with categorization - `wizard_wait_for_response` - Response waiting with timeout and prompts - `wizard_rate_interaction` - Subjective rating scales (1-5, 1-7, 1-10, custom) ##### **Control Flow (8 blocks)** - `wait` - Pause execution with optional countdown display - `repeat` - Loop execution with delay between iterations - `if_condition` - Conditional logic with multiple condition types - `parallel` - Simultaneous execution with timeout controls - `sequence` - Sequential execution with error handling - `random_choice` - Weighted random path selection - `try_catch` - Error handling with retry mechanisms - `break` - Exit controls for loops, sequences, trials ##### **Observation & Sensing (8 blocks)** - `observe_behavior` - Behavioral coding with standardized scales - `measure_response_time` - Stimulus-response timing measurement - `count_events` - Event frequency tracking with auto-detection - `record_audio` - Audio capture with quality settings and transcription - `capture_video` - Multi-camera video recording with resolution control - `log_event` - Timestamped event logging with severity levels - `survey_question` - In-trial questionnaires with response validation - `physiological_measure` - Sensor data collection with sampling rates **Technical Implementation:** - **Dynamic Loading**: Core blocks loaded from `/public/hristudio-core/plugins/` - **Fallback System**: Minimal core blocks if repository loading fails - **Validation**: Complete JSON schema validation with color/category consistency - **Async Initialization**: Non-blocking core block loading on component mount - **Type Safety**: Full TypeScript support with proper block definitions **Files Created/Modified:** - `hristudio-core/` - Complete core blocks repository - `public/hristudio-core/` - Publicly served core blocks - Enhanced `BlockRegistry.loadCoreBlocks()` method - Repository validation script with ES modules support - Comprehensive documentation and block schemas **Benefits Achieved:** - **Consistency**: All blocks now follow the same plugin architecture - **Extensibility**: Easy to add new core blocks without code changes - **Version Control**: Core blocks can be versioned and updated independently - **Modularity**: Clean separation between core functionality and robot plugins - **Maintainability**: Centralized block definitions with validation --- ### Documentation Status (Updated With Provenance, Compilation, Pending Modularization) All changes have been documented and the codebase is ready for production deployment. The system now features: 1. Unified repository loading in place (integrity hash now captured; version drift alerts pending) 2. **Simplified Seed Scripts**: Single command setup with automatic repository synchronization 3. **Local Core Repository**: Core blocks served from `public/hristudio-core/` during development 4. **Working Repository Sync**: Live synchronization from `https://repo.hristudio.com` for robot plugins 5. **Proper Installation States**: Plugin store correctly shows installed vs available plugins 6. **TypeScript Compliance**: All unsafe `any` types replaced with proper typing 7. **Admin Access**: Full administrator role and permission system operational **Core Documentation Files (Pending Updates):** - [`docs/core-blocks-system.md`](core-blocks-system.md) - Complete core blocks implementation guide - [`docs/plugin-system-implementation-guide.md`](plugin-system-implementation-guide.md) - Robot plugin system guide - [`docs/work_in_progress.md`](work_in_progress.md) - Current development status (now includes provenance & compiler updates) **Readiness Caveats:** - Pending UI: provenance badges (partially done), re-validation triggers (implemented), drift indicator (TODO), modular split (TODO), parameter control upgrades (TODO), version drift resolution (TODO) - ✅ Simplified seed scripts with unified repository loading - ✅ Core repository integration via localhost during development - ✅ Repository synchronization fully functional for both core and robot plugins - ✅ Plugin store with proper installation state detection - ✅ Admin dashboard with repository management - ✅ Complete user authentication and authorization - ✅ Study-scoped plugin installation working - ✅ 98% feature completion maintained **Development Workflow (Stable Pieces):** - ✅ Single `bun db:seed` command for complete setup - ✅ Core blocks loaded from local repository structure - ✅ Robot plugins synchronized from live repository - ✅ Consistent plugin architecture across all block types - ✅ Real repository testing during development