Files
HellionChat/docs/UPSTREAM_SYNC.md
T
JonKazama-Hellion d63c710836 docs: restructure into docs/ folder, add roadmap and learning notes
- Move AI_DISCLOSURE, THIRD_PARTY_NOTICES, UPSTREAM_SYNC, ipc.md
  into docs/ (ipc.md renamed to IPC.md for consistency)
- Add docs/ROADMAP.md, docs/CHANGELOG.md, docs/CONTRIBUTORS.md,
  docs/LEARNING-JOURNEY.md
- Update README to reflect the v1.0.0 standalone state, drop the
  development section, refresh the architecture tree, add a
  release-cadence block linking to LEARNING-JOURNEY
- Fix stale ChatTwo/* source paths to HellionChat/* across docs
- Update cross-links in PRIVACY, CONTRIBUTING and .github/* so they
  point at the new docs/ paths

Pure documentation pass, no code changes.
2026-05-04 09:03:59 +02:00

3.8 KiB

Upstream sync workflow

HellionChat is a standalone EUPL-1.2 fork of Chat 2. We pull selected patches from upstream manually instead of running an automated mirror. This file documents how that works so anyone (including future-me) can do it cleanly.

One-time setup

Add the upstream repo as a remote on a fresh clone:

git remote add upstream https://github.com/Infiziert90/ChatTwo.git
git fetch upstream

Verify both remotes are wired up:

git remote -v
# origin    https://github.com/JonKazama-Hellion/HellionChat.git (fetch)
# origin    https://github.com/JonKazama-Hellion/HellionChat.git (push)
# upstream  https://github.com/Infiziert90/ChatTwo.git (fetch)
# upstream  https://github.com/Infiziert90/ChatTwo.git (push)

You never push to upstream. It is read-only for us.

Reviewing what is new upstream

Before any feature cycle starts I run a quick check:

git fetch upstream
git log --oneline main..upstream/main | head -30

That shows every commit Infi or contributors landed since the last sync. Read the messages, decide which ones apply.

What we cherry-pick

Always: security fixes, API-version compatibility patches (Dalamud API 15 → 16 → ...), BetterTTV / emote-cache fixes, regression fixes for the upstream behaviour we still rely on.

Sometimes: small bug fixes in MessageManager.cs, MessageStore.cs, ChatLogWindow.cs, the Tabs system. Pull them when they touch code we have not heavily modified.

Never: webinterface changes (the entire webinterface tree is gone in HellionChat), changes that conflict with the privacy filter, changes that re-add upstream defaults we deliberately reversed (full-history logging, Tell Exclusive defaults, etc.).

How we cherry-pick

Always with -x so authorship and the original commit hash stay visible:

git checkout -b sync/upstream-<topic> main
git cherry-pick -x <upstream-commit-sha>

-x adds a (cherry picked from commit <sha>) line to the commit message. That preserves the upstream-author credit and lets anyone reading git log trace the change back to ChatTwo. Co-Author trail intact, no AI lines, no "Hellion" prefix on commits that were not authored by us.

Conflict handling

When a cherry-pick conflicts:

  1. Resolve the conflict by hand. Do not "fix" upstream code to match Hellion conventions; that is what the merge marker showed us.
  2. If the conflict is fundamental (touches code that no longer exists in our fork), abort the cherry-pick and document why in Hellion Chat Backlog.md instead. Some upstream patches are not portable; that is fine.
  3. After a successful resolve, the commit message stays identical to the upstream message, with the -x cherry-pick footer Git appends automatically. Do not rewrite the message to match our format.

Pushing the sync

Cherry-picked commits go through the same review as our own work: the sync branch lands in main via a no-fast-forward merge, then a release tag if the user-visible behaviour changes (otherwise just merged).

git checkout main
git merge --no-ff sync/upstream-<topic> -m "merge: upstream sync — <topic>"

When upstream goes silent

If Chat 2 stops receiving updates entirely we keep this workflow alive anyway. The remote stays configured, the documentation stays here. The moment maintenance picks back up we are ready to pull again.

When upstream takes a direction we cannot follow

If a future ChatTwo release breaks compatibility with our privacy philosophy in a way we cannot resolve (e.g. mandatory cloud sync, removal of the local message store, a license change that makes EUPL incompatible), HellionChat continues on its own from the last compatible cherry-pick. The history we already inherited stays under EUPL-1.2 and stays attributed.