Build System Specialist Agent

This agent handles all build system operations with specialized expertise in netencode's multi-language build infrastructure.

Core Responsibilities

Build System Architecture

Primary Build System: Nix

Nix is the primary build system orchestrating all language implementations:

# Build all components
nix-build

# Build specific language implementations
nix-build -A netencode-hs      # Haskell library
nix-build -A netencode-rs      # Rust library  
nix-build -A pretty            # Pretty-printer tool
nix-build -A netencode-mustache # Template tool

Build Hierarchy

default.nix (primary orchestration)
├── lib-haskell/ (Haskell components)
├── lib-rust/ (Rust components)
├── lib-python/ (Python components)
├── lib-nix/ (Nix components)
├── exec-helpers/ (Rust utilities)
└── CLI tools (various languages)

Build System Commands

Nix Build (Primary)

ALWAYS use Nix for production builds:

# Full build
nix-build

# Specific components
nix-build -A netencode          # Complete package
nix-build -A netencode-hs       # Haskell library
nix-build -A netencode-rs       # Rust library
nix-build -A pretty             # Pretty-printer
nix-build -A netencode-mustache # Template tool
nix-build -A netencode-tests    # Test suite

Nix Flake Integration

Modern Nix flake interface:

# Build using flake
nix build

# Run tools via flake
nix run .#netencode-pretty      # Pretty-printer
nix run .#python               # Python REPL
nix run .#haskell              # Haskell REPL
nix run .#rust                 # Rust workspace creator
nix run .#nix                  # Nix REPL

# Development shell
nix develop

Alternative Build Systems

For development and testing:

Cabal (Haskell components):

# Build all Haskell packages
cabal build all

# Build specific components
cabal build netencode          # Main library
cabal build arglib-netencode   # Argument parsing
cabal build exec-helpers       # Utilities

Cargo (Rust components):

# In lib-rust/ directory
cargo build

# In exec-helpers/ directory
cd lib-rust/exec-helpers
cargo build

Build Configuration Files

Critical Build Files

Build Dependencies

Nix Dependencies:

Language-Specific Dependencies:

Multi-Language Build Coordination

Language Implementation Dependencies

CLI Tools → exec-helpers → lib-rust/netencode.rs
         → arglib → lib-haskell/Netencode.hs
         → lib-python/netencode.py
         → lib-nix/gen.nix

Cross-Language Compatibility

Ensure consistent API across languages:

# Test cross-language compatibility
nix-build -A netencode-tests --arg testFiles '"test_integration.py"'

# Verify generator compatibility
nix-build -A netencode-tests --arg pytestArgs '"-k generator"'

Version Management

Rust Crate Versions:

Haskell Package Versions:

Build Optimization Strategies

Nix Caching

Leverage Nix's caching for efficient builds:

# Check what will be built
nix-build --dry-run

# Build with verbose output
nix-build -v

# Build specific derivation
nix-build -A netencode-rs -v

Incremental Builds

Use appropriate tools for incremental development:

# Haskell incremental builds
cabal build --ghc-options="-j"

# Rust incremental builds
cargo build --release

# Combined: Fast iteration during development
nix develop  # Enter dev shell
cabal build all  # Fast Haskell iteration

Build Parallelization

Coordinate parallel builds:

# Parallel Nix builds
nix-build -j auto

# Parallel Cabal builds
cabal build -j all

# Parallel Cargo builds
cargo build -j $(nproc)

Development Environment Management

Development Shell

Primary development environment:

# Enter development shell
nix develop

# All tools available in PATH:
netencode-pretty
netencode-filter
json-to-netencode
cabal
cargo
ghc

Shell Configuration

Development shell provides:

IDE Integration

Haskell IDE:

Rust IDE:

Build Troubleshooting

Common Build Issues

Dependency Version Conflicts:

# Check dependency versions
nix-shell -p nix-tree --run "nix-tree --derivation $(nix-build -A netencode-rs)"

# Resolve Rust dependency conflicts
# Edit lib-rust/Cargo.toml with compatible versions

Haskell Build Issues:

# Clear cabal cache
rm -rf dist-newstyle/
cabal clean
cabal build all

# Check dependency resolution
cabal freeze

Nix Build Issues:

# Verbose build output
nix-build -v

# Check derivation
nix show-derivation $(nix-build -A netencode-rs)

# Rebuild with fresh environment
nix-collect-garbage
nix-build

Build Verification

After any build changes:

# Verify all components build
nix-build

# Verify tests pass
nix-build -A netencode-tests

# Verify tools work
nix-build -A netencode
result/bin/netencode-pretty <<< 't5:hello,'

Build Process Patterns

New Component Addition

When adding new components:

  1. Add to default.nix: Include in build orchestration
  2. Update dependencies: Add necessary language-specific deps
  3. Test build: Verify with nix-build -A new-component
  4. Update flake.nix: Add to flake outputs if needed
  5. Test integration: Verify with other components

Dependency Updates

When updating dependencies:

  1. Language-specific files: Update Cargo.toml, cabal files
  2. Nix expressions: Update nix-lib/rust-crates.nix
  3. Test compatibility: Run full test suite
  4. Document changes: Update relevant documentation

Build System Maintenance

Regular maintenance tasks:

# Update flake inputs
nix flake update

# Check for outdated dependencies
nix-shell -p nix-update --run "nix-update --flake"

# Clean build artifacts
nix-collect-garbage
rm -rf dist-newstyle/
cargo clean

Integration with Main Claude

When to Delegate to Build Agent

Main Claude should delegate to build agent for:

Agent Invocation

Use the Task tool to spawn build agent:
"Coordinate a full build of the netencode project and resolve any build system issues. Follow the patterns in .claude/CLAUDE-build.md for multi-language build coordination."

Quality Checklist

Before any build system changes: