My plan here is to make all combi / seq modules have inputs and outputs as busses... Now we can connect one module to another using this AutoUpdater ( or linker sounds better ? ) which uses digraphs to specify relationship between busses.

Consider this :  
AND.inputs : ( Dynamically sized bus )
AND.outputs : ( Fixed size ( 1 bit ) bus )

Similarly assume inputs and output busses for OR...

now if a module MOD takes 4 inputs and has 1 bit output ( A.B + C.D )

After initializing the Gates ...

# Inside initilization of and1
AutoUpdater.add_link( MOD.inputs[:2], and1.inputs[:2] )

# Inside initilization of and2
AutoUpdater.add_link( MOD.inputs[2:], and2.inputs[:2] )

# Inside initilization of or1
AutoUpdater.add_link( [and1.outputs, and2.outputs] , or1.inputs[:2] )

# in MOD
AutoUpdater.add_link( or1.outputs, MOD.outputs )

Now if `MOD.inputs[0].set_voltage(5)` is done to change one input.
It propagates to the output without need for `triggering`.

Why I feel this is better than triggering is if outputs are fed back to input of module the updater keeps updating it as normally ( as if there were no feedback ) without getting stuck in infinite loop ( in triggering only next object is visible... to the AutoUpdater the whole structure is visible ) ... essentially what the auto updater sees is ... : 

for a node1 ( a connector object ) : 
1 connected to 3, 1 connected to 2, 1 connected to 4
updates values of 1 to 3, 2 and 4

for a node2 : 
2 connected to 1 <-- loop, a bug
updates values of 2 to 1

[ This wont affect the auto updater's performance either ... since it is going to indefinitely do this anyway for a given set of nodes in the digraph repeatedly  ... ]

In case of triggering -- 1 triggers 2 triggers 1 triggers 2 ... infinite recursive triggering ... the program halts ...

feedback may be a bug - output value keeps oscillating which can be debugged.
( 1 -> NOT -> 2 -> 1 ) a bug unstable op ... but executing does not halt the program !

or a desired one ( with appropriate stable block between 2 connectors ) the output is stable and correct.
( 1 -> NOT -> NOT -> 2 -> 1 ) stable ... infinite triggering is avoided ...