chore: housekeeping — linter & formatter setup

Add .prettierrc.json, .markdownlint.json, .yamllint.yaml, .gitattributes
Run CSharpier, Prettier and markdownlint across the entire codebase.
No logic changes — formatting, using order and line endings only.
This commit is contained in:
2026-05-10 13:01:00 +02:00
parent cd01fa63a1
commit 699d4ede1d
141 changed files with 8833 additions and 5733 deletions
+58 -92
View File
@@ -1,127 +1,93 @@
# 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.
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.
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.
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.
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.
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.
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.
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.
- 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.
- **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:
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.
- 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.
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).
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.
- 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.
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.