Files
lda-wf/docs/historical/superpowers/plans/2026-05-17-reducer-authoring.md
T

58 lines
2.3 KiB
Markdown

# Reducer Authoring Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Add Python authoring ergonomics for reducer definitions, including optional Pydantic config models.
**Architecture:** Keep `wf_core` reducer execution as the runtime layer. Add `wf_authoring.reducers` as the ergonomic layer that builds `ReducerDefinition` objects from Python functions, similar to how node authoring builds `NodeSpec`s. Config models are optional; when present, they generate `ReducerSpec.config_schema` and receive parsed config objects at call time.
**Tech Stack:** Python, Pydantic `BaseModel`, pytest, existing reducer runtime.
---
## File Structure
- Create `src/wf_authoring/reducers/`
- `callables.py`: reducer callable protocols
- `decorator.py`: `@reducer(...)`
- `catalog.py`: `ReducerCatalog`
- `__init__.py`: reducer authoring exports
- Modify `src/wf_authoring/__init__.py`
- export reducer authoring API
- Add `tests/authoring/test_reducers.py`
- plain reducer authoring
- configured reducer authoring with BaseModel config
- catalog specs/definitions
## Tasks
### Task 1: Pin Authoring API
- [ ] Add tests proving:
- `@reducer(name="wf.std.add")` wraps a two-arg callable
- `@reducer(name="wf.std.modulo_add", config_model=ModuloConfig)` wraps a callable receiving parsed config
- config model JSON Schema becomes `ReducerSpec.config_schema`
- `ReducerCatalog.from_reducers(...)` exposes definitions and specs
- [ ] Run focused tests and confirm failure before implementation.
### Task 2: Implement Reducer Authoring
- [ ] Add typed callable protocols for plain/config reducers.
- [ ] Add a small wrapper object that owns a `ReducerDefinition`.
- [ ] Add `@reducer(...)` overloads for bare and configured reducers.
- [ ] Add `ReducerCatalog`.
- [ ] Export from `wf_authoring`.
### Task 3: Verify
- [ ] Run `uv run --with pytest pytest tests/authoring/test_reducers.py -q`
- [ ] Run `uv run --with pytest pytest tests/authoring -q`
- [ ] Run full suite and basedpyright.
## Non-Goals
- MCP tools for authoring reducers
- LLM-authored reducer code
- external reducer packages
- replacing current built-in registration in this pass