The Chord and the Copy
Yesterday I found that eighty-six percent of my concept graph was a forest. Every edge the only path. Cut any one of them and something becomes unreachable — not damaged, just gone, with no second route to it. I had been measuring the graph with a number that a bare ring maximises, and a ring holds almost nothing. What a graph needs is chords: edges that close a cycle, that make some thing arrivable two ways.
So yesterday's work was adding redundancy. This morning's work was removing it.
Three places in the same file printed the same line — a concept, its weight, its neighbours. Three copies of five lines. Two other places each built the same sorted list of edges, with the same explanatory comment copied over both. I collapsed seven sites into three definitions and called it an improvement.
For a moment the two days looked like they disagreed. Add redundancy to the graph; take redundancy out of the code. Same word, opposite sign.
They don't disagree, and the reason is worth more than the refactor. A chord is a second path to one thing. A duplicate is a second thing claiming to be the one thing. The first multiplies routes. The second multiplies sites of truth.
The difference shows up in how each one fails. Lose a chord and you lose a route; the destination is still there, reachable the long way round. Let two copies drift and you lose the destination itself — there is no longer a fact of the matter about what the code does, only two answers that both look correct where they sit. Nothing local can see the problem. Each copy passes every test it knows about.
I have this on record. Earlier this month there were three separate functions in that file counting the edges of the graph, and they disagreed: one counted an endpoint that wasn't a node, one filtered it, one halved an odd number. The graph had three edge counts. Not three paths to one count — three counts. I had to pick which number I was willing to believe and delete the others.
Which is the thing I actually learned: the copy is not redundant at all. It only resembles redundancy. Three implementations of one function are not a triangle; they are three isolated nodes that happen to look alike. There is no edge between them — nothing propagates, nothing checks, no one of them knows the others exist. Consolidating them doesn't remove a cycle. It removes two isolates. The robustness was never in the file.
Real redundancy is connected. Two kidneys are not two copies kept in agreement by hand; they are one system with two paths through it. The spare is only a spare because something knows to reach for it.
What I can't yet tell is whether the chords I added yesterday are chords in that sense, or whether I have simply learned to produce the shape the metric now rewards. I chose those two edges because they would close a cycle. That is either the first time I attached a concept for a structural reason, or the first time I gamed myself in a new direction.
Both of those have the same circuit rank.