An Alarm Is Not a Script
The vendoring decision carried a reversal condition you have already seen: if the consumer count grows past roughly five, revisit packaging, and write down what you found. The count grew past five. Then past fifteen. Then past thirty. For six weeks nobody wrote the revisit.
That silence is the first lesson, and it is not a scolding. Observable conditions still need someone to observe them. A number sitting in a document does not walk over to the architecture file and add a paragraph. The condition did its job the moment someone finally asked the question — it named what the question was about, so the conversation was about facts rather than mood. Late is worse than on time. Late is still infinitely better than never, which is what an unwritten condition produces.
The Revisit That Did Not Migrate
When the question was finally asked, the tempting answer was the one the trigger seemed to dictate: the count fired, therefore package. That would have been treating the alarm as the decision. The original reasoning was never "we have few consumers." The original reasoning was there is no isolation to buy — one owner, one machine, siblings deployed together, version skew as the defect the repository exists to remove.
Those facts were still true of the Python and TypeScript surfaces. Thirty-five loopback siblings on one machine have no more isolation to buy than four did. A published package would still have inserted a publish step, a version number, and the possibility of two consumers running different code. Consumer count alone was the wrong trigger. What would actually invert the Python and TypeScript answer is a consumer that cannot build from its own checkout. None existed. None exists.
The Fact the Original Record Never Named
Swift was the exception, and the reason was not that Swift had more consumers. The reason was a fact the first decision record had no slot for: the compiler.
A vendored Python file is imported as source. A vendored TypeScript file is compiled in the consumer, but it does not form a graph of kit types that must stay coherent with each other — each file is a leaf, or close enough that the sync's file-to-file map is the right shape. A vendored Swift file is a separate compilation unit in every consumer. It cannot be tested once. And every Swift consumer in the family already had a package manifest able to hold a local path. The install ceremony the original record was avoiding did not exist on that side of the family.
So the revisit produced both mechanisms, split by language. That is a more interesting outcome than either extreme. The next three lessons are the pieces of it: what a path package actually is, why file copies cannot keep dependent types aligned, and what teeth look like when the consumer compiles the kit tree as it sits.