first cut of task.py stable with passing tests