Usually, a failed task means an actual error (e.g. HTTP 404), not something that is "bad" for the user but a state that can reasonably be expected (e.g. search returned no results, user not logged in, or player lost the game).
What's happening in your WIP is that the failure will get ignored somewhere, since
Effects.task only takes tasks that Never fail. Adding the HitMine tag to Game is on the right track, but as you have it it will never get created.
I *think* the best way to do this is:
-- Game.Elm
mineClicked : Mailbox ()
mineClicked = Signal.mailbox ()
Then pass mineClicked.address to Board.create and keep it in the model. And you also need to thread Signal.map (always HitMine) mineClicked.signal in as an input in the StartApp config. It's kind of icky.
Subcomponents pass up Html and Effects to their supercomponent, but in both cases they're somewhat opaque: the Html is placed as the child of more Html, and the effects are merged in and passed up, ultimately to the runtime. The root of the problem is that the subcomponent needs to communicate with the the super information that doesn't really fall into either of those categories.