What This Actually Is and Why You Should Probably Ignore It
Gordon To End All Wars is a custom conflict-resolution framework built around deterministic priority arbitration. It was originally conceived as an internal tool for a mid-sized logistics company that had two management teams permanently arguing over warehouse routing decisions. Instead of forming another committee, someone wrote a script that took every variable on the table, scored it against a fixed rubric, and output a single recommendation with zero ambiguity. The idea caught on because it does exactly one thing: it removes the emotional component from decisions that were never actually about emotions in the first place. The basic structure works like this. You define your variables, assign them weights, and run the inputs through the arbiter. That is it. The whole thing is maybe two thousand lines of Python if you are being generous, and the core loop is less than three hundred. Most people overcomplicate it because they want it to handle edge cases that the original author explicitly said it would not handle.
Gordon To End All Wars Implementation Notes
If you are trying to set this up yourself, start with the dependency list. You need Python 3.9 or later, numpy for the scoring matrix, and either PostgreSQL or SQLite for the input storage layer. The project pulls from a public repository, though the maintainer has not pushed a stable release in about fourteen months. The last commit is functional. Do not expect ongoing support. The configuration file is where most people break it. The default config expects a specific JSON schema for your inputs. If your data comes in CSV or comes from a legacy database with inconsistent column naming, you need to write a small normalization script before anything else. I spent a week chasing a bug that turned out to be a single column named priority_score in one system and Priority_Score_v2 in another. The arbiter treated them as unrelated fields and assigned null weight to both. Once I added a preprocessing step that mapped those variations into a canonical set of keys, the whole thing started producing readable outputs within forty minutes instead of failing silently. There are a few things that are not obvious from the documentation. First, the weight assignments are not suggestions. They are hard constraints. If you set resource_allocation at 0.35 and safety_compliance at 0.65, the model will not compromise between them no matter what the input looks like. This is by design but it catches people off guard when they assume the system will find a middle ground. It will not. It picks the path of least friction based on your weights and moves on.
Second, the arbiter does not validate input quality. If you feed it garbage data, it will produce a garbage output that looks perfectly formatted and authoritative. This is the biggest risk with this tool. I learned that the hard way when a client fed in six months of uncleaned routing logs and the output confidently recommended a strategy that would have routed forty percent of shipments through a closed depot. The numbers looked clean. The logic was flawless. The input was wrong. I ended up writing a separate data-cleaning pass that runs before the arbiter even sees the records. It added about two hours to the initial setup but saved me from looking incompetent in front of a client who would have noticed eventually. The framework also has a known limitation with circular dependencies. If your variables reference each other in a feedback loop, the scoring matrix fails to converge and returns NaN values. You have to break the cycle manually by removing one of the dependent variables or flattening the relationship into a single composite score. There is no automated detection for this. You just get a stack trace and have to figure out which variable is pulling its own tail. For small teams with straightforward decision trees, this works fine. The outputs are consistent and defensible, which is valuable when you need to explain a decision to stakeholders who would rather argue forever than make a choice. For anything involving cross-departmental politics, legacy system integration, or inputs that change format monthly, you are better off building a simpler custom solution or using an existing decision-tree library like scikit-learn with a carefully constrained feature set.
Get the Full Details

The download is available through the standard GitHub repository. Clone it, run the setup script, and read the config schema before you touch anything else. The README is adequate but assumes you already understand the underlying arbitration logic. If you do not, there is a white paper linked in the docs that explains the math behind the scoring matrix. It is dense but necessary if you want to avoid the mistakes I made.