Some code based on Rob's workaround of setting the negatives to zero and reconcile

    # Re-reconciliate when zero values present

    # Extract groups
    groups <- hts.obj %>%
      aggts() %>%
      get_groups()

    x=0 #Counter
    
    # Loop until all positive
    while(sum(hts.obj[[1]] <0) > 0){

      # Generate all time series
      hts.obj <- aggts(hts.obj)    
      
      # Overwrite negatives by zero
      hts.obj[hts.obj<0] <- 0
      
      # Reconcile
      hts.obj <- hts.obj %>%
        ts() %>%
        combinef(groups = groups, keep ="gts")
      
      # Count up
      x=x+1

      # Break after 10 loops
      if(x>=10)break

      }

    rm("x")

    # Overwrite remaining negatives by zero
    hts.obj[[1]][hts.obj[[1]]<0] <- 0

In this example forecasts are indexed by [[1]] - this might change.
Also note that overwriting zeros leads to biased forecasts.