Navan found it on a Thursday. He'd been staring at a DOT file for the better part of an hour, trying to express a conditional: if the code generation passed scenario validation above 0.9, advance to deployment. If it scored between 0.7 and 0.9, loop back to codergen for another iteration. Below 0.7, escalate to human review.
In any programming language he knew, this would be an if-else chain. Three branches, three blocks, nested brackets, indentation. In Swift, it would be clean enough. In a shell script, it would be ugly. In YAML, it would be an abomination.
In Attractor, it was three edges leaving one node.
Each edge had a condition attribute. satisfaction >= 0.9 on the edge to the deploy node. satisfaction >= 0.7 AND satisfaction < 0.9 on the edge looping back to codergen. satisfaction < 0.7 on the edge to human review. Three edges, three conditions, no nesting, no brackets, no indentation. The logic was visible in the graph topology.
"Jay," Navan said. "Look at this."
Jay came over and looked. He tilted his head slightly, the way people do when they're reading something upside-down or when they're seeing a familiar thing from an unfamiliar angle.
"The conditions are on the edges," he said.
"The conditions are the edges. There's no separate routing logic. There's no controller. There's no switch statement buried in a handler somewhere. The graph itself expresses the conditional. The topology is the logic."
Jay was quiet for a moment. "That's... elegant is the wrong word. Elegant implies ornamentation. This is just clear."
"It's more than clear. It's visible. If you render this graph, you can see the three possible paths radiating out from the assessment node. You can see the pipeline branch. You don't have to read code to understand the flow. You look at the picture."
Justin, walking past with his coffee, paused. "Now change the threshold."
Navan edited the condition on one edge. Changed 0.9 to 0.92. Saved the file. That was it. No recompile, no redeploy, no test suite. The pipeline's behavior had changed because the graph had changed.
"In the old world," Justin said, "you'd file a pull request for that."
"In the old world," Navan said, "I'd file a pull request, wait for review, argue about whether 0.92 was better than 0.9, merge it, redeploy, and then find out the change broke something unrelated because the conditional was entangled with three other branches."
"And here?"
Navan pointed at the DOT file. "Here, the edge is the condition. I changed the edge. I changed the condition. Nothing else was touched because nothing else could be touched. The isolation is structural."
He saved his notebook entry for the day in three words: edges are elegant.
"The isolation is structural." This is what every policy language tries to achieve. Attractor gets it for free because the graph format physically prevents entanglement.