@@ -466,6 +466,8 @@ This is a very simple mark file for the `update` type.
466466 ^- (quip card _state)
467467 ?- -.action
468468 %add
469+ ?: (~(has by tasks) now.bowl)
470+ $(now.bowl (add now.bowl ~s0..0001))
469471 :_ state(tasks (~(put by tasks) now.bowl [name.action %.n]))
470472 :~ :* %give %fact ~[/updates] %todo-update
471473 !>(`update:todo`[%add now.bowl name.action])
@@ -542,7 +544,22 @@ in `on-poke` with:
542544?> =(src.bowl our.bowl)
543545```
544546
545−Let's look at `on-watch`:
547+Additionally, you might notice the `%add` case in `handle-poke` begins with the
548+following:
549+
550+```hoon
551+?: (~(has by tasks) now.bowl)
552+ $(now.bowl (add now.bowl ~s0..0001))
553+```
554+
555+Back in lesson two, we mentioned that the bowl is only repopulated when there's
556+a new Arvo event, so simultaneous messages from a local agent or web client
557+would be processed with the same bowl. Since we're using `now.bowl` for the task
558+ID, this means multiple `%add` actions could collide. To handle this case, we
559+check if there's already an entry in the `tasks` map with the current date-time,
560+and if there is, we increase the time by a fraction of a second and try again.
561+
562+Let's now look at `on-watch`:
546563
547564```hoon
548565++ on-watch