The tests.conftest import could not be resolved in the nix sandbox
because tests is not a proper package. Define the WriteConfig type
alias directly in test_builder.py and test_graph.py instead.
Implement bulkgen/providers/bfl.py with a fully async httpx-based client
that supports all current and future BFL models (including flux-2-*).
Remove the blackforest dependency and simplify the image provider by
eliminating the asyncio.to_thread wrapper.
Add cachix/git-hooks.nix input and wire basedpyright, ruff,
ruff-format, and commitizen hooks into flake checks and devShell.
The basedpyright hook runs against a Nix-built venv so imports
resolve correctly in the sandbox.
Expose homeManagerModules.bulkgen and homeManagerModules.default
from the flake. The module provides programs.bulkgen.enable and
programs.bulkgen.package options, adding bulkgen to home.packages
when enabled.
- Replace pyright with basedpyright in devenv.nix (custom hook)
- Add basedpyright to devenv packages
- Fix all basedpyright warnings: add DiGraph[str] type args, annotate
class attributes, narrow SyncResponse, handle unused call results,
suppress unavoidable Any from yaml.safe_load and untyped blackforest
- Replace pydantic-settings[yaml] with direct pyyaml dependency
- Update CLAUDE.md to reflect basedpyright and dependency changes
CLAUDE.md covers architecture, data flow, code style conventions,
provider specifics, and all commands needed for development.
README.md covers installation, quick start, full config format
reference, CLI usage, incremental builds, and environment variables.
- build: executes all or specific target with dependency resolution
- clean: removes generated artifacts and state file, preserves inputs
- graph: prints dependency graph with build stages
- Config discovery: finds single *.bulkgen.yaml in working directory
- Uses native async API (chat.complete_async)
- Appends text input file contents to prompt with headers
- Notes image inputs as attached references
- Writes raw LLM response directly to output file
- build_graph() creates a DAG from project config with validation
- get_build_order() wraps topological_generations() for parallel batches
- get_subgraph_for_target() extracts transitive deps for single-target builds
- Validates missing dependencies and cycle detection
- TargetType enum with IMAGE/TEXT variants
- Defaults, TargetConfig, ProjectConfig pydantic models
- infer_target_type() for extension-based type dispatch
- resolve_model() for default/override model resolution
- load_config() using yaml.safe_load + model_validate
- Create bulkgen/ package with __init__.py
- Create bulkgen/providers/ subpackage with __init__.py
- Add mistralai>=1.0.0 to dependencies
- Add [project.scripts] entry point and [build-system] with hatchling
- Add .bulkgen.state.yaml to .gitignore