- First version. Released on an unsuspecting world.
- Core functionality:
- Type-level phase separation between evaluation and build
- Content-addressed storage implementation
- Sandbox build isolation
- Basic garbage collection
- Command-line interface
- Fixed compilation issues:
- Added
ShowandEqinstances for thePhasetype - Fixed module imports across the codebase
- Properly qualified name references to resolve ambiguities
- Added necessary monad transformer imports (
ask,throwError,liftIO) - Fixed indentation and parsing errors in various modules
- Added
- Improved robustness of:
- Store operations with proper error handling
- Garbage collection with correct file operations
- Sandbox isolation with validated type safety
- Build execution with better monad context handling
- Enhanced code organisation with more consistent import structures
- Test suite improvements:
- Added
LambdaCaseextension to support\casesyntax in tests - Fixed test dependency specifications in cabal file
- Added all required library dependencies to test suite section
- Added
- CLI enhancements:
- Improved error handling in CLI commands
- Fixed issue with
unlessexpressions in command handlers - Added proper if-then-else control flow for error cases
- Name conflict resolution:
- Renamed
storePathutility togetStorePathto avoid field name conflicts - Qualified imports in Graph module to avoid
AcyclicProofambiguity - Fixed type matching in pattern expressions
- Renamed
- Test suite fixes:
- Fixed phantom type errors in phase separation tests
- Improved error simulation approach for cross-phase testing
- Added proper return type handling for monadic operations
- Fixed ByteString conversion in external process interaction
- Properly structured test helpers with consistent error propagation
- Type system enhancements:
- Implemented correct pattern matching on phase-specific operations
- Enhanced GADTs for more robust phantom type checking
- Improved type-level phase separation guarantees
- Fixed polymorphic type constraints in proof system
- Build system improvements:
- Added test case for minimal viable build scenario
- Implemented reproducible build verification
- Enhanced determinism testing methodology
- Added proper support for test-time file operations
- Project structure:
- Stabilised dependency graph between modules
- Established consistent error handling patterns
- Completed initial testing infrastructure
- System now ready for feature development and enhancement
-
Test suite improvements:
- Fixed
throwErrorimport in test files to properly handle monad errors - Updated phase separation test to validate compile-time enforcement
- Fixed type mismatches in sandbox test return values
- Improved binary file handling for gcc and other executables
- Corrected build command arguments for C compilation tests
- Fixed
-
Enhanced type safety:
- Verified that phase separation is properly enforced at compile-time
- Ensured type-level guarantees prevent improper phase mixing
-
Documentation updates:
- Added comments explaining type-level enforcement of phase separation
- Updated test expectations to match current implementation
-
Build system refinements:
- Fixed binary data handling to prevent encoding issues
- Implemented proper return type handling in monadic operations
-
Fixed sandbox permission issues:
- Added proper directory creation with appropriate permissions
- Created helper function
createAndSetupDirfor consistent permission handling - Ensured all sandbox directories have executable permissions
- Properly handled parent directory creation before file operations
-
Enhanced build process robustness:
- Improved shell script builder to use system gcc correctly
- Added permission verification for builder executables
- Implemented better error reporting for build failures
- Fixed test suite to properly handle monadic return types
-
Cross-platform improvements:
- Removed unix-specific dependency for better compatibility
- Implemented sandbox directory structure using portable operations
- Ensured the build system works consistently across environments
-
Completed proof-of-concept implementation:
- All test cases now pass successfully
- Demonstrated type-level phase separation works correctly
- Validated content-addressable storage functionality
- Confirmed proper isolation of build environments
- Added a dedicated daemon process (
ten-daemon) for background operation - Implemented client-server architecture with socket-based communication
- Seamless integration between standalone and daemon operation modes
- Added support for Unix domain sockets with future TCP socket capability
- Created proper daemonisation with robust process management
- Comprehensive user authentication system with token-based auth
- Permission system with five levels (none, basic, standard, advanced, admin)
- Specific permission controls for different operations (build, GC, etc.)
- System user integration for simplified authentication
- Token management with creation, verification, and expiration handling
- Privilege dropping when running as root for enhanced security
- Configurable access control for daemon connections
- Well-defined binary protocol with proper message framing
- Protocol versioning for forward compatibility
- Comprehensive request and response types for all operations
- Proper error handling and status reporting
- Efficient serialisation and deserialisation of messages
- Multiple configuration sources (file, environment, command-line)
- XDG-compliant configuration paths for user environments
- System-wide configuration for daemon installations
- Extensive configuration options for all daemon aspects
- Proper validation of configuration values
- Persistent daemon state with journal and recovery
- Build tracking and queuing system for high load situations
- Advanced path locking for concurrent store access
- Coordinated garbage collection with locking
- Reachability tracking for store paths
- Parallel builds with dependency tracking
- Build status monitoring and reporting
- Build cancellation support
- Return-continuation support for multi-stage builds
- Resource usage tracking and limits
- New daemon subcommands in the main CLI:
start- Start the daemon processstop- Stop the daemon processrestart- Restart the daemon processstatus- Check daemon statusconfig- Show/edit daemon configuration
- Seamless fallback to standalone mode when daemon unavailable
- Automatic daemon starting when needed
- Periodic garbage collection with configurable intervals
- State persistence for crash recovery
- Maintenance tasks for store optimisation
- Build queue management and scheduling
- Concurrent store access with proper locking
- Advanced garbage collection coordination
- Path reachability tracking
- Store integrity verification and repair
- Enhanced store query capabilities
- Configurable log levels (quiet, normal, verbose, debug)
- Log file rotation and management
- Structured logging for machine consumption
- Build-specific log capture and retrieval
- Proper signal handling (SIGTERM, SIGHUP, SIGUSR1)
- PID file management for system monitoring
- Resource usage reporting
- System user integration
- Background worker threads for non-blocking operations
- Connection pooling for client requests
- Efficient resource utilisation
- Memory usage optimisation for large builds
- Extensive daemon configuration documentation
- Command-line help for all daemon operations
- Protocol specification for client implementations
- Security considerations and best practices