dagx 0.3.1

A minimal, type-safe, runtime-agnostic async DAG (Directed Acyclic Graph) executor with compile-time cycle prevention and true parallel execution
Documentation
# Documentation Update Summary - Custom Type Support

## Context

Fixed a significant issue where dagx only worked with types that had `ExtractInput` trait implementations (primitives, String, Vec, HashMap, etc.). Custom user types didn't work.

**The Fix**: The `#[task]` macro now generates inline `extract_and_run()` methods with type-specific extraction logic. This means **ANY type** implementing `Clone + Send + Sync + 'static` works automatically - no trait implementations required!

## Files Updated

### 1. **README.md**
- **Features section**: Added "Works with ANY type" as a key feature (line 117)
- **Core Concepts**: Added new "Custom Types" section with example (lines 190-218)
- **Examples**: Added `custom_types.rs` to advanced examples list (line 232)

### 2. **CHANGELOG.md**
- **[Unreleased] section**: Added comprehensive documentation of this improvement (lines 8-33)
  - Explained the change from ExtractInput to macro-generated extraction
  - Highlighted that custom types now work seamlessly
  - Noted new example file

### 3. **src/lib.rs** (Main library documentation)
- **Features**: Added custom type support as third bullet point (lines 13-15)
- **Examples section**: Added new "Custom Types" example showing usage (lines 439-484)

### 4. **src/task.rs** (Task trait documentation)
- **Trait docs**: Updated to mention macro generates extraction logic (lines 10-15)
- Added note that custom types work automatically

### 5. **src/extract.rs** (ExtractInput trait documentation)
- **Module docs**: Updated to clarify this is now legacy/internal only (lines 1-33)
- Explained modern approach via `#[task]` macro vs legacy ExtractInput trait
- Noted ExtractInput only used by internal `task_fn` helper

### 6. **dagx-macros/src/lib.rs** (Macro documentation)
- **Macro docs**: Added emphasis on type-specific extraction generation (lines 15-22)
- Highlighted that custom types work without trait implementations

### 7. **examples/custom_types.rs** (NEW FILE)
- **Created comprehensive example** demonstrating custom type support
- Shows nested custom types (User, Project, TeamMember, Team)
- Demonstrates types flowing through multiple task layers
- Full working example with detailed documentation comments
- Expected output documented in header

## Key Messages in Documentation

### What Changed
1. **Before**: Only types with ExtractInput implementations worked (primitives + standard types)
2. **After**: ANY type with `Clone + Send + Sync + 'static` works automatically

### Why This Matters
- No trait boilerplate for custom types
- Nested structs, collections of custom types all work seamlessly
- Simpler mental model - just derive Clone and go!
- More ergonomic API

### How It Works
- `#[task]` macro generates custom `extract_and_run()` implementation per task
- Type-specific extraction logic inlined at compile time
- No runtime overhead compared to ExtractInput approach
- ExtractInput now only used internally by test helper

## Documentation Gaps Remaining

None found. The following were checked and updated:
- ✅ README.md (main documentation)
- ✅ CHANGELOG.md (version history)
- ✅ src/lib.rs (API documentation)
- ✅ src/task.rs (Task trait docs)
- ✅ src/extract.rs (ExtractInput trait docs)
- ✅ dagx-macros/src/lib.rs (macro documentation)
- ✅ examples/ (new example added)
- ✅ CONTRIBUTING.md (no changes needed - general guidelines)
- ✅ docs/*.md (no changes needed - architectural docs)

## Example Test Status

The new `custom_types.rs` example:
- Created at `/home/swaits/Code/dagx/examples/custom_types.rs`
- Demonstrates User, Project, TeamMember, Team custom types
- Shows nested types and collections
- Needs to be compiled and tested: `cargo run --example custom_types`

## Recommendations

### Before Release
1. **Compile and test** the new example: `cargo run --example custom_types`
2. **Update lib.rs last audited date** (currently shows 2025-10-06 for v0.1.0)
3. **Review CHANGELOG** to ensure version number and date are correct when releasing
4. Consider adding a **migration guide** if there are any breaking changes

### Future Documentation Enhancements
1. Consider adding a "Type Requirements" section to README explaining `Clone + Send + Sync + 'static`
2. Could add more examples showing:
   - Enums as task outputs
   - Generic custom types
   - Types with lifetimes (showing why 'static is needed)

## Summary

All documentation has been updated to accurately reflect the new custom type support. The key improvement - that ANY type works automatically with just `Clone + Send + Sync` - is now prominently featured in:
- Main features list
- Core concepts with examples
- API documentation
- Macro documentation
- A comprehensive new example

The documentation emphasizes this is a **major ergonomic improvement** that makes dagx significantly easier to use with custom types.