# 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.
