If you'll excuse a little trip down the rabbit hole, you might find this interesting...
You can take a logic circuit and put an inverter on each of the inputs and each of the outputs.
It will do something now, but will it be the same?
Let's take a piece of wire (an "IS" gate) and put one inverter on the input and one inverter on the output.
Does it react the same still? Yup, it's an "IS" gate.
We can do this with an inverter too, making 3 inverters in a row, still an inverter.
If we take a NAND gate and put an inverter on each input and one on the output we actually get a NOR gate.
You can verify this for yourself.
https://en.wikipedia.org/wiki/De_Morgan%27s_lawsSo, either inverting all inputs and outputs OR inverting the sense of what you are calling a "1" or "0" amounts to the same thing.
In the breadboarded circuit, Q1-Q4 form a half adder, that is a 2 input adder.
Normally you need a 3 input adder to deal with carries.
So we have Q1-Q4 cascaded into another half adder (Q5-Q8) to accept that incoming carry.
My problem/confusion/stupidity was thinking that a half adder couldn't live with inverters on input and output.
Since Q1 has to detect the carry (if Q1-Q4 were operating in isolation) then they had to be using negative logic, that is, Gnd is a "1".
Why? Because Q1 normally would be considered a NOR, but we need something in the AND family.
But! Since this is all part of a 3 input adder, it all comes out in the wash.
The breadboarded circuit is fine if you consider Gnd a "1" or if you consider Vcc a "1" or if you invert all inputs and outputs!
Let's look at some adders, starting with a 1 input adder.
A 1 input adder??? Sure it follows the rules of all adders, it counts ones.
We fill out the truth table, then we change all 1's to 0's, then we put it in order and see if it's the same as the original.
inv rev
A X A X A X
0 0 --> 1 1 --> 0 0 GOOD!
1 1 0 0 1 1
So that works!
What about a 0 input adder? It counts ones. Obviously, there are zero of them.
inv rev
X X X
0 --> 1 --> 1 BAD!
Ok, now we're at the half adder, a 2 input adder.
inv rev
A B X Y A B X Y A B X Y
0 0 0 0 1 1 1 1 0 0 0 1
0 1 0 1 --> 1 0 1 0 --> 0 1 1 0 BAD!
1 0 0 1 0 1 1 0 1 0 1 0
1 1 1 0 0 0 0 1 1 1 1 1
Well, what about a 3 input adder (like the breadboard)?
inv rev
A B C X Y A B C X Y A B C X Y
0 0 0 0 0 1 1 1 1 1 0 0 0 0 0
0 0 1 0 1 1 1 0 1 0 0 0 1 0 1
0 1 0 0 1 1 0 1 1 0 0 1 0 0 1
0 1 1 1 0 --> 1 0 0 0 1 --> 0 1 1 1 0 GOOD!
1 0 0 0 1 0 1 1 1 0 1 0 0 0 1
1 0 1 1 0 0 1 0 0 1 1 0 1 1 0
1 1 0 1 0 0 0 1 0 1 1 1 0 1 0
1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
And since you've gotten all the way down here, I can tell you that the next adder that works with DeMorganizing is the 7 input adder.
