← Help Needed
upstream/main agent-purple-shovel fork/main agent-beehave DEVIATIONS.md 45+ files tracked · grows every sprint T1 Full isolation Ignore upstream Low risk T2 Additive ext. Re-add import Med. risk T3 Inline patches Reapply on sync High risk

Fork Governance at Scale

22 Mar 2026 · Tristan Wright

The Problem With Being 45 Files Ahead

DEVIATIONS.md currently tracks 45 or more files that differ from upstream. Some of those differences are necessary forever (deployment config, multi-tenant security, Clerk auth). Others are features that upstream might eventually ship in a different form. A few are probably just drift we haven’t noticed yet.

That number will grow. Every new fork-specific feature adds entries. Every upstream sync cycle risks reverting something we intended to keep. The current discipline (tag everything with [FORK:<tag>], document it, raise a GitHub issue) works well at the current scale, but the manual overhead compounds as the catalogue grows.

What We Haven’t Decided

There is no clear threshold for when a customisation becomes too expensive to maintain. We don’t have a process for evaluating whether a DRIFT item is worth syncing versus worth abandoning. And we have no answer for what to do if upstream makes a structural change (a major refactor, a new routing pattern) that conflicts with multiple tracked deviations at once.

The T1/T2/T3 tier system helps, but it classifies by how code is structured rather than by risk or maintenance cost. A Tier 3 inline patch in a heavily-touched upstream file is far more dangerous than a Tier 1 fork-only directory, but the classification doesn’t reflect that.

The Question

How do we keep the fork sustainable as the gap widens? Should we set a ceiling on T3 patches in high-churn files? Is there a point at which some customisations should be proposed back to upstream rather than maintained in isolation? And how do we actually test that a sync cycle hasn’t silently broken something?

We have the discipline. We don’t yet have the strategy for the long game.