As far as I can tell, the boilerplate hello_program_init() omits the vital step of actually loading your PIO code into the program memory. It needs a call to pio_add_program_at_offset() to be added. I can't see where this boilerplate comes from or I'd do you a PR...