13 KiB
Work Session Summary: Rule and Pack Create/Edit Forms
Date: 2026-01-19
Focus: Web UI form implementation for rules and packs with config schema support
Status: ✅ Complete
Overview
Implemented comprehensive create/edit forms for rules and packs in the Attune web UI, enabling users to:
- Create automation rules with dynamic trigger/action selection
- Register ad-hoc packs with JSON Schema-based configuration definitions
- Edit existing rules and packs (form components support both modes)
Implemented Components
1. RuleForm Component (web/src/components/forms/RuleForm.tsx)
Features:
- Dynamic pack selection with cascading trigger/action dropdowns
- Automatic filtering of triggers and actions by selected pack
- JSON editor for match criteria with syntax validation
- JSON editor for action parameters with template variable support
- Form validation (required fields, JSON syntax)
- Create and update operations via React Query mutations
- Disabled fields for immutable data when editing (pack, trigger, action)
- Auto-navigation to detail page after successful creation
- Error handling and user feedback
Form Fields:
- Pack selection (dropdown, required)
- Name (text, required)
- Description (textarea, optional)
- Enabled toggle (default: true)
- Trigger selection (dropdown, required, filtered by pack)
- Match criteria (JSON textarea, optional)
- Action selection (dropdown, required, filtered by pack)
- Action parameters (JSON textarea, optional)
Validation:
- Name: non-empty string required
- Pack: must be selected
- Trigger: must be selected
- Action: must be selected
- Criteria: valid JSON or empty
- Action parameters: valid JSON or empty
2. PackForm Component (web/src/components/forms/PackForm.tsx)
Features:
- Pack name format validation (lowercase, numbers, hyphens, underscores)
- Semantic versioning validation
- Configuration schema JSON editor with validation
- Quick-insert buttons for common schema examples (API, Database, Webhook)
- Additional metadata JSON editor
- Automatic merging of config_schema into metadata
- System and enabled toggles
- Create and update operations
- Error handling and user feedback
Form Fields:
- Name (text, required, immutable when editing)
- Description (textarea, optional)
- Version (text, required, semver format)
- Author (text, optional)
- Enabled toggle (default: true)
- System toggle (default: false)
- Configuration schema (JSON textarea, JSON Schema format)
- Additional metadata (JSON textarea, optional)
Validation:
- Name: required, must match pattern
^[a-z0-9_-]+$ - Version: required, must match semver pattern
^\d+\.\d+\.\d+ - Config schema: valid JSON, must have
type: "object"at root - Metadata: valid JSON or empty
Quick-Insert Examples:
- API Schema: API key, endpoint, authentication
- Database Schema: Host, port, database, username, password
- Webhook Schema: Webhook URL, auth token, timeout
3. Page Components
RuleCreatePage (web/src/pages/rules/RuleCreatePage.tsx):
- Simple wrapper around RuleForm
- Header with breadcrumb navigation
- Descriptive text for user guidance
PackCreatePage (web/src/pages/packs/PackCreatePage.tsx):
- Simple wrapper around PackForm
- Header with breadcrumb navigation
- Descriptive text for user guidance
4. Routing Updates
Added Routes:
/rules/new→ RuleCreatePage/packs/new→ PackCreatePage
Route Order: New routes placed before :id routes to prevent path conflicts
5. List Page Enhancements
RulesPage:
- Added "Create Rule" button in header
- Button navigates to
/rules/new - Styled consistently with existing UI
PacksPage:
- Added "Register Pack" button in header
- Button navigates to
/packs/new - Enhanced header layout and description
- Styled consistently with existing UI
Technical Implementation Details
React Query Integration
Both forms use existing hooks:
useCreateRule()/useUpdateRule()for rule operationsuseCreatePack()/useUpdatePack()for pack operationsusePacks()for loading pack listusePackTriggers()/usePackActions()for filtered dropdowns- Automatic query invalidation after mutations
Form State Management
- Local state with React
useStatehooks - Separate error state for field-level validation
- JSON parsing/stringification for complex fields
- Effect hook to reset cascading dropdowns on pack change
Validation Strategy
Client-Side Validation:
- Required field checks
- Format validation (pack name, version)
- JSON syntax validation
- Real-time error display
Server-Side Validation:
- API error capture and display
- Generic error handling for network failures
User Experience
- Inline validation errors with red borders and messages
- Submit button disabled during API calls
- Loading states ("Saving...")
- Success navigation (redirect to detail page)
- Cancel button returns to list page
- Helpful placeholder text and examples
- Required field indicators (red asterisks)
- Informational hints below complex fields
Configuration Schema Support
The pack form allows defining a JSON Schema for pack configuration, enabling:
- Schema Definition: Define expected configuration structure
- Type Validation: Specify types (string, integer, object, etc.)
- Constraints: Min/max values, enums, required fields
- Defaults: Provide default values
- Documentation: Add descriptions for each field
Example Schema Structure:
{
"type": "object",
"properties": {
"api_key": {
"type": "string",
"description": "API key for authentication"
},
"endpoint": {
"type": "string",
"description": "Service endpoint URL",
"default": "https://api.example.com"
},
"timeout": {
"type": "integer",
"minimum": 1,
"maximum": 300,
"default": 30
}
},
"required": ["api_key"]
}
Storage: Config schema is merged into pack metadata under config_schema key
Build and Testing Status
Build Status: ✅ PASSING
npm run build
✓ 474 modules transformed
✓ built in 3.12s
- TypeScript compilation: ✅ No errors
- Production build: ✅ Success
- Bundle size: 435.32 kB (122.09 kB gzipped)
Testing Status: ⚠️ MANUAL TESTING REQUIRED
Automated Tests: None yet (test framework setup pending)
Manual Testing Checklist Created:
- 17 test cases for RuleForm
- 20 test cases for PackForm
- 4 test cases for list page integration
- Added to
docs/testing-status.md
Testing Priorities:
- Component unit tests (Vitest + React Testing Library)
- E2E tests (Playwright)
- Form validation scenarios
- API integration testing
Documentation Updates
Updated Files
-
work-summary/TODO.md
- Marked rule and pack forms as complete
- Updated in-progress section
- Adjusted remaining TODO items
-
CHANGELOG.md
- Added comprehensive feature descriptions
- Documented form fields and validation
- Listed all new routes and components
-
docs/testing-status.md
- Added Web UI section
- Created manual testing checklists
- Identified automated testing needs
API Compatibility
Forms are compatible with existing API endpoints:
Rule Creation/Update
POST /api/v1/rules- Create rulePUT /api/v1/rules/:id- Update rule
Expected Fields:
pack_id(number)name(string)description(string, optional)trigger_id(number)action_id(number)criteria(object, optional)action_parameters(object, optional)enabled(boolean)
Pack Creation/Update
POST /api/v1/packs- Create packPUT /api/v1/packs/:ref- Update pack
Expected Fields:
name(string)description(string, optional)version(string)author(string, optional)enabled(boolean)system(boolean)metadata(object, optional, includesconfig_schema)
User Workflows Enabled
Creating a Rule
- Navigate to Rules page
- Click "Create Rule" button
- Select pack (triggers/actions load automatically)
- Enter rule name and description
- Select trigger from filtered list
- Optionally add match criteria (JSON)
- Select action from filtered list
- Optionally add action parameters (JSON)
- Toggle enabled state if needed
- Click "Create Rule"
- Redirected to new rule detail page
Registering a Pack
- Navigate to Packs page
- Click "Register Pack" button
- Enter pack name (lowercase format)
- Enter description and version
- Optionally add author
- Click example button or manually edit config schema
- Define configuration schema using JSON Schema format
- Optionally add additional metadata
- Toggle enabled/system flags if needed
- Click "Register Pack"
- Redirected to new pack detail page
Future Enhancements
Short Term
- Add rule edit mode integration (button on detail page)
- Add pack edit mode integration (button on detail page)
- Implement action, trigger, and sensor forms
- Add form field tooltips with examples
- Improve JSON editor UX (syntax highlighting, autocomplete)
Medium Term
- Visual criteria builder (alternative to JSON editing)
- Visual config schema builder
- Parameter autocomplete from action schemas
- Template variable suggestions
- Form autosave/draft recovery
Long Term
- Visual workflow editor integration
- Rule testing/simulation before saving
- Config schema validation preview
- Import/export rule and pack definitions
- Bulk operations (create multiple rules)
Known Limitations
- No Edit Button Integration: Edit mode works but no UI button to access it yet
- JSON Editing Only: No visual builder for complex criteria/schemas
- No Field Dependencies: Can't show/hide fields based on selections
- No Autosave: Form data lost if user navigates away
- No Validation Preview: Can't test criteria/schemas before saving
- Limited Error Context: API errors don't always show field-specific messages
Dependencies
Existing Hooks Used:
useRules,useCreateRule,useUpdateRule(from@/hooks/useRules)usePacks,useCreatePack,useUpdatePack(from@/hooks/usePacks)usePackTriggers(from@/hooks/useTriggers)usePackActions(from@/hooks/useActions)
No New Dependencies: All functionality built with existing libraries
Success Metrics
Completed
✅ Rule form implemented and building successfully
✅ Pack form implemented with config schema support
✅ Create pages added to routing
✅ List pages updated with create buttons
✅ TypeScript compilation clean
✅ Documentation updated
✅ Testing checklist created
Pending
⚠️ Manual testing of all form scenarios
⚠️ Edit mode UI integration (buttons on detail pages)
⚠️ Automated test implementation
⚠️ User acceptance testing
Architectural Clarification
Important: During this session, architectural constraints were clarified:
Pack-Based vs UI-Configurable Components
Actions and Sensors - NOT UI-Editable:
- Implemented as executable code (Python, Node.js, Shell)
- Registered when a pack is loaded/installed
- Managed through pack lifecycle, not through Web UI
- Rationale: Security, performance, code quality, testing
Triggers - Mixed Model:
- Pack-based triggers: Registered with system packs (e.g.,
slack.message_received) - Ad-hoc triggers: UI-configurable for custom integrations (future feature)
- Only ad-hoc triggers in ad-hoc packs should be editable via UI
Rules - Always UI-Configurable:
- Connect triggers to actions with criteria and parameters
- No code execution, just data mapping
- Users need flexibility to change business logic
Packs - Two Types:
- System packs: Installed via pack management tools, contain code-based components
- Ad-hoc packs: Registered via UI for custom event types without code deployment
Workflow Actions - Future:
- Special type of action that will be UI-configurable
- Part of visual workflow editor implementation
Documentation Created
docs/pack-management-architecture.md- Comprehensive architectural guidelines- Updated
TODO.mdwith architectural notes - Updated
CHANGELOG.mdwith clarifications
Impact on Implementation Plans
Previously Planned (now removed):
- ❌ Action create/edit forms (actions are code-based)
- ❌ Sensor create/edit forms (sensors are code-based)
Still Needed:
- ✅ Trigger create/edit form (for ad-hoc packs only)
- ✅ Workflow action configuration (future feature)
Conclusion
Successfully implemented full-featured create/edit forms for rules and packs, completing a major milestone in the Attune web UI. The forms provide:
- Intuitive UX with cascading dropdowns and real-time validation
- Powerful Features like JSON Schema-based pack configuration
- Production Quality with proper error handling and loading states
- Extensibility supporting both create and edit modes
- Architectural Clarity on pack-based vs UI-configurable components
The implementation follows established patterns from existing pages and integrates seamlessly with the API and state management layers. Ready for manual testing and user feedback.
Next Steps:
- Conduct manual testing using checklist in
docs/testing-status.md - Add edit buttons to rule and pack detail pages
- Implement trigger create/edit form (for ad-hoc packs only)
- Set up automated testing framework (Vitest + Playwright)