Files
metabuilder/codegen/CONFLICT_RESOLUTION_DOCS.md
johndoe6345789 a51130a127 feat: Add external low-code and postgres repositories
- codegen: Low-code React app with JSON-driven component system
- packagerepo: Schema-driven package repository with backend/frontend
- postgres: Next.js app with Drizzle ORM and PostgreSQL

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:48:52 +00:00

6.1 KiB

Conflict Resolution System - Implementation Summary

Overview

A comprehensive conflict resolution UI has been added to the CodeForge platform to handle sync conflicts between local IndexedDB and remote Flask API data.

New Files Created

Core Types

  • src/types/conflicts.ts - Type definitions for conflicts, resolution strategies, and stats

Redux State Management

  • src/store/slices/conflictsSlice.ts - Redux slice managing conflict detection, resolution, and auto-resolve strategies
  • Updated src/store/index.ts - Added conflicts reducer to the store

React Hooks

  • src/hooks/use-conflict-resolution.ts - Custom hook providing simple API for conflict operations

UI Components

  • src/components/ConflictResolutionPage.tsx - Main conflict resolution page with filtering and bulk operations
  • src/components/ConflictCard.tsx - Individual conflict card with expandable details and resolution actions
  • src/components/ConflictDetailsDialog.tsx - Detailed modal view with side-by-side comparison and field-level diff
  • src/components/ConflictIndicator.tsx - Reusable badge/icon indicator showing conflict count
  • src/components/ConflictResolutionDemo.tsx - Demo component for testing conflict workflows

Configuration

  • Updated src/config/pages.json - Added conflict resolution page route
  • Updated component-registry.json - Registered ConflictResolutionPage component

Documentation

  • Updated PRD.md - Added conflict detection & resolution feature and enhanced edge case handling

Key Features

1. Conflict Detection

  • Automatic detection during sync operations
  • Timestamp and content-based comparison
  • Supports all entity types (files, models, components, workflows, lambdas, componentTrees)
  • Manual detection via "Detect Conflicts" button

2. Resolution Strategies

  • Keep Local - Preserve local version, discard remote
  • Keep Remote - Accept remote version, overwrite local
  • Merge Both - Combine local and remote into single version
  • Manual - Custom editing (extensible for future implementation)

3. Conflict Visualization

  • Expandable conflict cards with summary info
  • Side-by-side version comparison
  • Field-by-field diff view showing exact changes
  • Timestamp indicators showing which version is newer
  • Entity type icons for quick identification

4. Bulk Operations

  • Resolve all conflicts with single strategy
  • Filter conflicts by entity type
  • Auto-resolve configuration for automatic handling
  • Clear all conflicts action

5. User Experience

  • Real-time conflict count badges
  • Animated transitions and state changes
  • Toast notifications for operations
  • Loading states during resolution
  • Error handling with clear messaging

6. Conflict Indicator Component

  • Two variants: badge and compact
  • Animated entrance/exit
  • Clickable with custom actions
  • Shows conflict count
  • Can be placed anywhere in UI

Usage Examples

Basic Usage

import { useConflictResolution } from '@/hooks/use-conflict-resolution'

function MyComponent() {
  const { 
    conflicts, 
    hasConflicts, 
    detect, 
    resolve 
  } = useConflictResolution()

  // Detect conflicts
  await detect()

  // Resolve a specific conflict
  await resolve('files:abc123', 'local')

  // Resolve all with strategy
  await resolveAll('remote')
}

Conflict Indicator

import { ConflictIndicator } from '@/components/ConflictIndicator'

// Badge variant
<ConflictIndicator 
  variant="badge" 
  showLabel={true}
  onClick={() => navigate('/conflicts')} 
/>

// Compact variant
<ConflictIndicator 
  variant="compact"
  onClick={handleConflictClick} 
/>

Integration Points

Navigation

  • Added to pages.json as route /conflicts
  • Keyboard shortcut: Ctrl+Shift+C
  • Accessible via navigation menu when enabled

Redux Store

  • New conflicts slice in Redux store
  • Integrates with existing sync operations
  • Persists conflict resolution history

Sync System

  • Hooks into syncFromFlaskBulk thunk
  • Compares timestamps and content hashes
  • Generates conflict items for mismatches

Design System

Colors

  • Destructive red for conflict warnings
  • Primary violet for local versions
  • Accent teal for remote versions
  • Success green for resolved states

Typography

  • JetBrains Mono for IDs and code
  • IBM Plex Sans for descriptions
  • Font sizes follow established hierarchy

Animations

  • 200ms transitions for smooth interactions
  • Pulse animation on conflict badges
  • Scale bounce on status changes
  • Slide-in for new conflict cards

Future Enhancements

Planned Features

  1. Manual editing mode with Monaco editor
  2. Conflict history and audit log
  3. Entity-specific auto-resolve rules
  4. Conflict preview before sync
  5. Undo resolved conflicts
  6. Batch import/export of resolutions
  7. Conflict resolution templates
  8. AI-powered conflict resolution suggestions

Performance Optimizations

  1. Virtual scrolling for large conflict lists
  2. Debounced conflict detection
  3. Background conflict checking
  4. Lazy loading of conflict details

Testing

Manual Testing Workflow

  1. Navigate to Conflict Resolution page
  2. Click "Simulate Conflict" to create test data
  3. Click "Detect Conflicts" to find conflicts
  4. Expand conflict cards to view details
  5. Click "View Details" for full comparison
  6. Test each resolution strategy
  7. Verify conflict indicators update correctly

Test Scenarios

  • ✓ No conflicts state
  • ✓ Single conflict detection
  • ✓ Multiple conflicts with different types
  • ✓ Bulk resolution operations
  • ✓ Filter by entity type
  • ✓ Auto-resolve configuration
  • ✓ Error handling for failed resolutions

Accessibility

  • Keyboard navigation support
  • Proper ARIA labels on interactive elements
  • Color contrast ratios meet WCAG AA
  • Screen reader friendly descriptions
  • Focus management in dialogs

Browser Compatibility

  • Modern browsers with IndexedDB support
  • Chrome 80+
  • Firefox 75+
  • Safari 13.1+
  • Edge 80+

Notes

  • Conflicts are stored in Redux state (not persisted)
  • Resolution operations update IndexedDB immediately
  • Conflict detection is not automatic - requires manual trigger or sync operation
  • Auto-resolve only applies to future conflicts, not existing ones