| 
87 | 87 |   - Array validation and count propagation working  | 
88 | 88 |   - Cascade handles taskless dependent maps  | 
89 | 89 | 
 
  | 
 | 90 | +- [x] **PR #213: NULL for Unknown initial_tasks** - `09-16-make-initial-tasks-nullable`  | 
 | 91 | +  - Changed initial_tasks from "1 as placeholder" to NULL for dependent map steps  | 
 | 92 | +  - Benefits: Semantic correctness (NULL = unknown, not "1 task")  | 
 | 93 | +  - Implemented: Schema change to allow NULL, updated all SQL functions  | 
 | 94 | +  - Added validation for non-array and NULL outputs to map steps  | 
 | 95 | +  - Comprehensive tests for NULL behavior and error cases  | 
 | 96 | + | 
90 | 97 | #### ❌ Remaining Work  | 
91 | 98 | 
 
  | 
92 | 99 | - [ ] **Array Element Distribution** (CRITICAL - BLOCKS REAL MAP USAGE)  | 
 | 
102 | 109 |   - Store aggregated output for dependent steps to consume  | 
103 | 110 |   - Maintain task_index ordering in aggregated arrays  | 
104 | 111 |   - Tests for aggregation with actual map task outputs  | 
 | 112 | +  - **IMPORTANT**: Must add test for map->map NULL propagation when this is implemented  | 
 | 113 | +  - **IMPORTANT**: Must handle non-array outputs to map steps (should fail the run)  | 
105 | 114 | 
 
  | 
106 | 115 | - [ ] **DSL Support for .map() Step Type**  | 
107 | 116 | 
 
  | 
 | 
124 | 133 |   - Basic happy path coverage  | 
125 | 134 |   - This should be minimal and added to the Edge Worker integration test suite for now  | 
126 | 135 | 
 
  | 
127 |  | -- [ ] **Semantic Improvement: NULL for Unknown initial_tasks** (OPTIONAL - Can be deferred)  | 
128 |  | - | 
129 |  | -  - Change initial_tasks from "1 as placeholder" to NULL for dependent map steps  | 
130 |  | -  - Benefits: Semantic correctness (NULL = unknown, not "1 task")  | 
131 |  | -  - Scope: Schema change to allow NULL, update 5+ SQL functions  | 
132 |  | -  - See detailed plan in `pkgs/core/PLAN_use_null_for_map_initial_tasks.md`  | 
133 |  | -  - **Note**: This is a semantic improvement only - current approach works functionally  | 
134 |  | -  - **Warning**: If deferred, new tests for Array Distribution and Output Aggregation will  | 
135 |  | -    assume initial_tasks = 1 for dependent maps, making this change harder later  | 
136 |  | - | 
137 | 136 | - [ ] **Migration Consolidation**  | 
138 | 137 | 
 
  | 
139 | 138 |   - Remove all temporary/incremental migrations from feature branches  | 
140 | 139 |   - Generate a single consolidated migration for the entire map infrastructure  | 
141 | 140 |   - Ensure clean migration path from current production schema  | 
142 | 141 |   - If NULL improvement is done, include it in the consolidated migration  | 
143 | 142 | 
 
  | 
 | 143 | +- [ ] **Update README's** and **Docs**  | 
 | 144 | + | 
 | 145 | +  - `pkgs/core/README.md`  | 
 | 146 | + | 
 | 147 | +    - Add new section describing the step types  | 
 | 148 | +    - Describe single step briefly, focus on describing map step type and how it differs  | 
 | 149 | +    - Make sure to mention that maps are constrained to have exactly one dependency  | 
 | 150 | +    - Show multiple cases of inputs -> task creation  | 
 | 151 | +    - Explain edge cases (empty array propagation, invalid array input)  | 
 | 152 | +    - Explain root map vs dependent map and how it gets handled and what restrictions those apply on the Flow input  | 
 | 153 | +    - Explain cascade completion of taskless steps and its limitations  | 
 | 154 | + | 
 | 155 | +  - `pkgs/dsl/README.md`  | 
 | 156 | + | 
 | 157 | +    - Briefly describe the new `.array()` and `.map()` methods  | 
 | 158 | +    - Mention `.array` is mostly sugar, and `.map` is the new step type  | 
 | 159 | +    - Link to `pkgs/core/README.md` sections for more explanation about map steps  | 
 | 160 | +    - Make sure to mention that maps are constrained to have exactly one dependency  | 
 | 161 | + | 
 | 162 | +  - **Add basic docs page**  | 
 | 163 | + | 
 | 164 | +    - put it into `pkgs/website/src/content/docs/concepts/array-and-map-steps.mdx`  | 
 | 165 | +    - describe the DSL and how the map works and why we need it  | 
 | 166 | +    - show example usage of root map  | 
 | 167 | +    - show example usage of dependent map  | 
 | 168 | +    - focus mostly on how to use it, instead of how it works under the hood  | 
 | 169 | +    - link to the README's for more details  | 
 | 170 | + | 
144 | 171 | - [ ] **Graphite Stack Merge**  | 
145 | 172 | 
 
  | 
146 | 173 |   - Configure Graphite merge queue for the complete PR stack  | 
 | 
0 commit comments