This would be, except....not.
1) It doesn't solve the "builder entraps himself" problem
2) Breaks the known workaround of a suspended building where you DO NOT want the builder standing ("Gee, this construction I am doing will block that suspended one over there. I guess I won't build this!"
3) How do you check "will this block another construction?" It leads back to the "pathing to [meeting area|booze|bed|food]" problem.
1, correct, it wouldn't solve that, building direction would.
2, I was unaware of this workaround, however I wouldn't say it would break that, I dont see why it would. While I did use the term 'suspended' it was inaccurate in the context of the existing 'Suspended' construction system, it would be a new label on the construction, lets call it "Pending" which would be completely disassociated from the existing suspended system, this "Pending system" is a way for the engine to determine the order that a grouping of constructions should be built.
Picture time! as even my crude horrible drawings are better than I can explain.
w = unbuilt wall
W = Built wall
p = Pending wall
e = exempt construction(player would never see this, as the whole chain would be calced in a step)
Here we can see, a U shaped section of wall, and we want to fill it in. We designate 3 more walls.
WWWW
Wwww
WWWW
We will task the rightmost tile first, but the steps work for any scenario i can think of. It goes through the following check;
Do i have free* spots in all 4 compass directions?
Yes, task the build.
No, Goto next step.
Are all of the tiles that are 'blocking' me a pending flagged construction?
Yes, task the build
No, goto next step
Are any of the tiles that are 'blocking' me a unpending Construction awaiting tasking?
Yes, flag current tile as exempt, run check the unpending tile, then recheck the parent tile.
No, next step
Are the only tiles blocking me exemption tiles?
Yes, set all exemptions in the chain to pending and break (we've exempted ourselves into a corner)
No, set to pending
Now lets walk through the check in our current situation. The first point, is of course a No, we have an unpending, unsuspended construction blocking us.
The second part, no again.
Third part, is yes, we are in fact blocked by an unbuilt construction, so we now run a check on that tile, but before that we flag the tile we were checking as exempt.
WWWW
Weww
WWWW
First part of the check, nope, no free spot.
Second part, yup, 2, but one has been flagged as exempt from further checks in this nest, but the other isnt, so we can check that one! Flag current as exempt, and onward!
WWWW
Weew
WWWW
First check, here we have 3 'free' spots, 2 existing constructions, and an empty space, but alas, the exempt tile makes this check a no, next step.
We're only blocked by an exempt tile, so this is a no as well. Next step.
Ah! our first no on step 3, we move to the final check, which sets ourselves as pending.
WWWW
Weep
WWWW
Back to the middle tile, unflag as exempt, and recheck.
1st step: nope.
2nd step. nope
3rd step, nope, pending assigned.
WWWW
Wepp
WWWW
Regress, unflag exempt and recheck.
1st step, nope.
2nd step, yes! task the build.
WWWW
WWpp
WWWW
But of course, when the construction completed, we clear pending flags in 4 directions
WWWW
WWwp
WWWW
that tile is now up for task, it clears the check and is built. clearing the pending tag on the 3rd section.
WWWW
WWWw
WWWW
*a free tile is a tile that is in no danger if blocked in, such a an existing construction, or wall etc.
3, Programatically, pretty easy, however my examples dont account for some nuances like multi tiled constructions, but thats fairly easily worked around.