0220e5d756
Pull in the refreshed linter and tooling configs (editorconfig, gitignore, gitattributes, prettierignore, prettierrc, markdownlint, yamllint, env.example, dotnet-tools) and run prettier and markdownlint in --fix / --write mode across the repo so the existing tree matches the new rules. - prettier 2-space indent on yaml/yml and json overrides, asterisk strong, underscore emphasis, proseWrap always - markdownlint MD007 indent aligned to 2 and MD049 to underscore so prettier output stays passing - preflight Block F also ignores CLAUDE.md (gitignored personal file) - prettierignore extended to keep HellionChat.yaml manifest and the NuGet packages.lock.json out of the formatter No semantic content changed; csharpier, build, full build-suite (729/729) and the new prettier/markdownlint/yamllint checks all green.
104 lines
5.7 KiB
Markdown
104 lines
5.7 KiB
Markdown
# 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.
|