# Upstream Sync

HellionChat is a standalone EUPL-1.2 plugin that originated from [Chat 2](https://github.com/Infiziert90/ChatTwo). Since
v1.0.0 it lives under its own namespace, IPC channels and source tree. The active cherry-pick pipeline from upstream
Chat 2 is closed since the v1.4.x cycle.

This document covers what that means, why I closed it, and what stays in place.

## A Word on Intent

HellionChat is not trying to replace Chat 2. I build it for myself, and maybe for people who want the same things I do:
a privacy-first chat plugin with tighter defaults and no remote-access surface. If that is not you, Chat 2 is the better
choice and a well-maintained project.

I am available to Infi if he ever has questions about HellionChat or how I have diverged from the upstream code. What I
will not do is interfere with Chat 2's direction or push unsolicited opinions into his project.

Long-term compatibility between Chat 2 and HellionChat is not guaranteed and, frankly, not technically possible. I am
building a new UI from scratch and making deliberate architectural decisions that pull in a different direction. Some
upstream patches will simply stop applying cleanly and that is expected.

## Why Cherry-Picking Stopped in v1.4.x

Two things converged:

1. **Chat 2 is in a rework cycle.** Infi mentioned directly that parts of ChatTwo are being reworked and "stuff may not
   be able to be cherry picked anymore." Once the upstream code paths I would pull from no longer exist in the same
   shape, `git cherry-pick` stops being a meaningful tool — what would land would not be the change Infi wrote, it would
   be a hand-port of his concept.
2. **HellionChat has drifted enough that selective patches require adaptation anyway.** The UI is being rebuilt, the
   theme engine sits on top of HellionStyle which has no upstream equivalent, the privacy filter changes how messages
   flow through MessageManager. Even before the rework was announced, more and more upstream patches needed adaptation
   rather than a clean apply.

Together those two points mean continuing to call this an "active cherry-pick pipeline" was no longer honest. So I
closed it.

## What Closing the Pipeline Means in Practice

- The `upstream` git remote was removed locally on 2026-05-08. Anyone setting up a fresh clone does **not** add it back.
- New commits will not carry `(cherry picked from commit ...)` trailers. Anything that originates from Chat 2 from this
  point forward will be a hand-port at most, and it gets called out as such in its own commit message and in the
  relevant source comments.
- The existing cherry-pick trail stays in the git history exactly as it is. Every `(cherry picked from commit ...)` line
  that was added with `-x` in earlier releases remains intact; that is the attribution paper trail and removing it would
  be wrong.

## What Does Not Change

- **EUPL-1.2 anchor lines in source files.** Files that originated from Chat 2 keep their licence headers and any "based
  on Infiziert90/ChatTwo" notice exactly as they are. The licence obligations under EUPL-1.2 do not lapse because
  cherry-picking stopped.
- **NOTICE.md** stays canonical. Attribution to Infi and Anna for the message store, channel logic, hook system, ImGui
  chat window and the localisation infrastructure remains the foundation statement of this fork.
- **README acknowledgements.** The Acknowledgements section in `README.md`, the maintainer thanks in the About tab, and
  the `Language.*.resx` Crowdin translator credit list all stay as they are.
- **The original `Language.*.resx` files** remain in the source tree in their last upstream-sync state. They are the
  work of the Chat 2 Crowdin community and the existing translations stay valuable. They will not receive automatic
  upstream updates anymore — see CONTRIBUTING.md for what that means for translators.

## What Could Re-Open Later

If Chat 2's rework lands and stabilises, and there is a piece of upstream code that I genuinely want in HellionChat, the
path forward is **study and re-implement**, not cherry-pick. That means:

- Read the upstream change, understand the design, port the concept to HellionChat's actual code paths.
- Credit the upstream author in the commit message and, if the ported code is non-trivial, in a source-file comment.
- Pre-clear with Infi if the port is large enough to warrant a conversation.

This is heavier than `git cherry-pick -x` and that is the point. Cherry-picking was light because both codebases shared
structure; once they do not, the proper attribution costs a real conversation rather than a flag on a git command.

## Contributing Back

HellionChat benefits from Chat 2's work, so I try to give something back where I can. If I fix a bug or improve
something that would be useful to Chat 2 and is not HellionChat-specific, I submit a good-will PR to
[Infiziert90/ChatTwo](https://github.com/Infiziert90/ChatTwo).

A few things to note about that process:

- Good-will PRs are validated in a separate fork first to make sure the fix stands on its own without HellionChat
  context.
- They are written by hand. No AI-generated code goes to Infi's project. He did not ask for Pair-level AI involvement
  and I will not push that decision onto his codebase.
- This is not guaranteed for every change, only where it makes sense and where I am confident the fix is clean and
  self-contained.
- Whether it gets accepted is Infi's call, and a "no" is fine.

## When Upstream Takes a Direction I Cannot Follow

If a future Chat 2 release breaks compatibility with the HellionChat privacy philosophy in a way that cannot be resolved
(mandatory cloud sync, removal of the local message store, an incompatible licence change), HellionChat continues from
where it is. The inherited history stays under EUPL-1.2 and stays attributed.
