Ah yes, it's a subtle one that took me quite a while to realise ... consider the following scenario @esc24. I hope it helps to clarify ...

We have 9 cubes presented to concatenate and their goal positions after concatenation is as follows:
```
  x x x
y 0 1 2
y 3 4 5
y 6 7 8
```
Now, if we allowed cubes to concatenate *unrestricted* over *any* axis, then we are at the mercy of the order that the cubes are presented to concatenate. As a result, it is easily possible, as I'll demonstrate, for cubes that should concatenate all together, not being able to concatenate together.

Consider the order 3, 4, 8, 2, 5, 6, 7, 0, 1. Unrestricted axis concatenation would result in the following:
 1. 3 is a proto-cube. I'll signify this as 3P. So the proto-cube list is [3P]
 1. 3P + 4 join along the x-axis
 1. 8 is a proto-cube as it can't join to 3 along the x-axis. So the proto-cube list is [3P, 8P]
 1. 2 can't join to 3P, but 8P + 2 join along the y-axis
 1. 3P + 5 join along the x-axis (remember the proto-cubes are considered in order)
 1. 6 can't join to 3P as its joining along the x-axis, and 6 can't join to 8P as its joining along the y-axis. So 6 is a proto-cube, giving [3P, 8P, 6P]
 1. 7 can't join to 3P x-axis. 7 can't join to 8P y-axis, but 6P + 7 joins along x-axis
 1. 0 can't join to 3P x-axis. 0 can't join to 8P y-axis. 0 can't joint to 6P x-axis. Therefore 0 is a proto-cube giving the proto-cube list [3P, 8P, 6P, 0P]
 1. Finally it's clear that we have 0P + 1.

This unrestricted axis concatenation results in the following four cubes:
```
  x x x
y 3 4 5

  x
y 2
y 8

  x x
y 6 7

  x x
y 0 1
```

After a further *two* (order dependent) rounds of concatenation, you'll see that what we end up with is:

```
  x x x
y 3 4 5

  x x x
y 0 1 2
y 6 7 8
```

These final two cube **cannot** be concatenated together. Boom!

After a little thought, you'll realise that the simple solution is to force all proto-cubes to concatenate along the same axis of the very **first** proto-cube join. Throw in some recursion to kick-start the whole process again, and correct behaviour just naturally follows. Lovely.

This is why we need to seed the proto-cube with an axis. It the axis negotitated by the very first proto-cube join.