All of the provided implementations fail for `[2,3,1,2]`.

Here is a **correct** and **efficient** solution with \$O(n)\$ time complexity:

    def almost_increasing_sequence?(sequence)
      return false if sequence.length  < 2
      return true  if sequence.length == 2

      max1 = sequence[0]  # maximum up to the previous item
      max2 = sequence[1]  # maximum up to the current item
      count = 0

      sequence[1..-1].each_with_index do |item, index|
        prev = sequence[index]
        nxt  = sequence[index+2]

        if prev >= item
          count += 1
          return false if count > 1
          if index > 0 and item <= max1 and nxt and nxt <= max2
            return false
          end
        end

        max1 = prev if prev > max1
        max2 = item if item > max2
      end

      return count == 1
    end

---

Some tests courtesy of @AJFaraday (corrected & extended):

    [
      [[], false],
      [[1], false],
      [[1, 2], true],
      [[1, 2, 3, 4, 99, 5, 6], true],
      [[1, 3, 2], true],
      [[10, 1, 2, 3, 4, 5], true],
      [[0, -2, 5, 6], true],
      [[1, 2, 3, 4, 3, 6], true],
      [[1, 1], true],
      [[100, 200, 300, 400, 99, 500, 600], true],
      [[1, 2, 1, 2], false],
      [[1, 2, 3, 4, 5, 3, 5, 6], false],
      [[40, 50, 60, 10, 20, 30], false],
      [[1, 3, 2, 1], false],
      [[1, 4, 10, 4, 2] , false],
      [[1, 1, 1, 2, 3], false],
      [[10, 1, 2, 3, 4, 5, 6], true],
      [[5, 7, 8, 90, 91, 92, 93], false],
      [[2,3,1,2], false],
      [[1,2,1,2], false],
      [[1, 2, 3, 4, 5, 3, 5, 6], false],
      [[40, 50, 60, 10, 20, 30], false]
    ].each do |array, expected|
      if almost_increasing_sequence?(array) != expected
        puts "FAIL Should get #{expected} for #{array}"
      else
        puts "PASS"
      end
    end