# NipCell Usage Guide ## Overview NipCells provide isolated environments for packages with conflicting dependencies. When the dependency resolver cannot unify variant demands, it suggests creating separate NipCells to maintain isolation while allowing both packages to coexist. ## When to Use NipCells NipCells are automatically suggested when: - **Variant conflicts** occur in exclusive domains (e.g., different init systems) - **Circular dependencies** cannot be resolved - **Incompatible version requirements** exist between packages ## Automatic Fallback The resolver automatically detects unresolvable conflicts and suggests NipCell isolation: ``` ❌ [VariantConflict] Cannot unify conflicting variant demands 🔍 Context: Package 'openssl' has conflicting exclusive variant flags in domain 'crypto' 🔀 [IsolationSuggested] NipCell isolation recommended The following packages have irreconcilable conflicts: • openssl (conflicts with: nginx) NipCell isolation allows you to install these packages in separate environments, each with its own dependency graph. This avoids the conflict while maintaining full functionality of each package. 💡 Suggested commands: $ nip cell create openssl-cell --isolation=standard $ nip cell activate openssl-cell $ nip install openssl ``` ## Manual Cell Management ### Creating Cells ```bash # Create a new cell nip cell create dev-env --isolation=standard # Create with specific profile nip cell create prod-env --profile=server --isolation=strict ``` ### Activating Cells ```bash # Activate a cell nip cell activate dev-env # Check active cell nip cell list ``` ### Installing Packages in Cells ```bash # Install in active cell nip cell activate dev-env nip install nginx # Install directly to specific cell nip install --cell=dev-env nginx ``` ### Switching Between Cells ```bash # Switch to different cell nip cell activate prod-env # Deactivate current cell nip cell deactivate ``` ### Removing Cells ```bash # Remove cell and clean up packages nip cell delete dev-env # Remove without cleanup (keep packages) nip cell delete dev-env --no-cleanup ``` ## Cell Isolation Levels - **None**: No isolation (not recommended for conflicts) - **Standard**: Mount + filesystem namespaces (default) - **Strict**: Mount + PID + network + IPC namespaces - **Quantum**: All namespaces + cryptographic boundaries ## Resolver Integration The resolver maintains separate dependency graphs for each cell: ```nim # Resolver automatically uses active cell context let manager = newResolverCellManager() # Activate cell for resolution discard manager.activateCell("dev-env") # Resolve dependencies in cell context let graph = manager.resolveInCell("dev-env", "nginx", variantDemand) # Packages are isolated between cells discard manager.addPackageToActiveCell("nginx") ``` ## Best Practices 1. **Use descriptive cell names**: `dev-env`, `prod-env`, `testing-env` 2. **Document cell purpose**: Use `--description` flag when creating 3. **Regular cleanup**: Remove unused cells to save disk space 4. **Isolation level**: Use `standard` for most cases, `strict` for security-critical 5. **Conflict resolution**: Let the resolver suggest cells automatically ## Architecture ``` ┌─────────────────────────────────────────────────────────────┐ │ Conflict Detection │ │ ───────────────────────────────────────────────────────── │ │ Resolver detects unresolvable conflicts │ └────────────────────┬────────────────────────────────────────┘ │ v ┌─────────────────────────────────────────────────────────────┐ │ Isolation Suggestion │ │ ───────────────────────────────────────────────────────── │ │ Suggests NipCell isolation with commands │ └────────────────────┬────────────────────────────────────────┘ │ v ┌─────────────────────────────────────────────────────────────┐ │ Cell Management │ │ ───────────────────────────────────────────────────────── │ │ Create, activate, switch, remove cells │ │ Maintain separate dependency graphs │ └─────────────────────────────────────────────────────────────┘ ``` ## Implementation Details ### Modules - **`nipcell_fallback.nim`**: Conflict detection and isolation suggestions - **`cell_manager.nim`**: Cell management and resolver integration ### Key Types - `NipCellGraph`: Cell with its own dependency graph - `NipCellGraphManager`: Manages multiple cells - `ResolverCellManager`: Integrates cells with resolver - `IsolationSuggestion`: Suggested cell configuration ### Requirements Satisfied - **10.1**: Detect unresolvable conflicts and suggest NipCell isolation - **10.2**: Create separate NipCells for conflicting packages - **10.3**: Maintain separate dependency graphs per cell - **10.4**: Support cell switching - **10.5**: Clean up cell-specific packages when removing cells ## Testing The NipCell system has comprehensive test coverage: - **41 tests** for fallback mechanism (`test_nipcell_fallback.nim`) - **29 tests** for cell management (`test_cell_manager.nim`) - **70 total tests** covering all functionality All tests pass with 100% success rate. ## Future Enhancements - Integration with existing NipCell CLI commands - Automatic cell suggestions during package installation - Cell templates for common use cases - Cell export/import for sharing configurations - Performance optimizations for large cell counts --- **Last Updated:** November 26, 2025 **Status:** Complete - Phase 8 NipCell Integration