DominaresTools

All tools / Testing & code health

cleanfork

Keep a brand-scrubbed copy of a private codebase in sync with its origin.

Buy cleanfork for $99

One payment of $99, plus sales tax where it applies, and every future update. Delivered as a private GitHub repository you're invited to.

See it work

cleanfork 1.0.1demo mode
python3 cleanfork/examples/make_world.py
Built three repositories and a config in cleanfork/examples/world

Upstream main = 7ec1faca

  module                 pending  extract                      site
  billing                      2  held: new dependency         waiting on extract
      -> imports from packages.core import ledger
  discounts                    1  held: conflict               waiting on extract
  shipping                     1  held: brand                  waiting on extract
      -> line 8: # tuned for Acme Corp freight
  tax                          1  ready                        ready
Demo mode, not a live system: cleanfork 1.0.1, run on 2026-10-05. The shipped example world on our test machine: three throwaway git repositories (an upstream app, a clean extract and a downstream app) built in a temporary folder; no network.

What it does

cleanfork three-way merges each upstream change into a clean extract of a private codebase, holds the ones that conflict, bring a forbidden word back or need a private module, gates on the extract's own tests, releases it, then carries it to downstream copies.

Per-file three-way merge
Each file is a module with three copies (upstream, extract, downstream). cleanfork runs git merge-file with the product prefixes removed from the base and the incoming text.
Holds, never forces
A conflict, a forbidden word, a new import of a private module, an upstream deletion, an uncommitted edit or a file that is not UTF-8 holds that change and says why. Nothing held is forced in.
Gated and released
The extract's own gate commands run first, then a next-minor tag, then each downstream copy's gates.
Brand scan
Every tracked text file of the extract is scanned for the words you list. Binaries and symlinks are listed as not scanned. It finds only the words you give it.
Your commands, your credentials
Gates are your own commands, run with your permissions, and --push uses your git credentials. A clean merge can still be wrong, so the gates are your check.

What you get

cleanfork 1.0.1: the Python package and the cleanfork command, a script that builds a throwaway example world, and the full test suite, with 120 automated tests.

A commercial license. Use it and change it in your own projects and your clients' projects. Don't share or resell the source. Read the license.

Every update. New versions land in the same repository; git pull to get them.

Requirements

Python 3.10 or newer. Python 3.10 or newer and git on your PATH. No other dependencies.

How buying works

  1. Enter your GitHub username. You'll see the account before you pay, so you can check it's yours.
  2. Pay $99, plus any sales tax shown at checkout, on Stripe's checkout page.
  3. Accept the invitation GitHub emails you. Signed in as that account, you'll also find it at github.com/dominares-tools/cleanfork/invitations. Invitations expire after 7 days; you can get a new one any time.
  4. Clone and install:
    git clone https://github.com/dominares-tools/cleanfork.git

    Private repo: sign in to GitHub on this computer first. Run gh auth login and choose HTTPS, or give git a personal access token when it asks for a password. To use an SSH key instead, clone git@github.com:dominares-tools/cleanfork.git.

    python3 -m venv .venv && . .venv/bin/activate
    pip install ./cleanfork

Questions

Do I need GitHub?

Yes. Access is a read-only invitation to a private repository, sent to the GitHub account you choose.

Can I get a refund?

Yes, within 14 days, no questions asked. Access ends when the refund goes through. Refund policy.

Who takes the payment?

Payments are handled by Stripe, which works out sales tax. Your receipt and card statement show Link (LINK.COM*), Stripe's checkout service.

Something wrong?

Email support@dominares.org. Every buyer of a tool shares its repository, so support happens by email rather than in GitHub issues.