docs: close active upstream cherry-pick pipeline
Chat 2 has entered a major rework that Infi confirmed makes selective patches no longer portable. The cherry-pick pipeline as a routine workflow stops with the v1.4.x cycle. Documentation reflects the new state across all touchpoints. UPSTREAM_SYNC.md rewritten: replaces the "How I Cherry-Pick" / "Reviewing What Is New Upstream" / "Conflict Handling" sections with "Why Cherry-Picking Stopped", "What Closing the Pipeline Means in Practice", "What Does Not Change", "What Could Re-Open Later". Existing cherry-pick trails in the git history stay intact, EUPL-1.2 anchor lines and NOTICE.md remain canonical. README.md, CONTRIBUTING.md, ROADMAP.md, THIRD_PARTY_NOTICES.md and the PR template updated to match: cherry-pick references reframed as historical or pointed at UPSTREAM_SYNC.md for the current state. NOTICE.md keeps the BetterTTV cherry-pick example as a concrete past case but adds a paragraph that the pipeline is closed and clarifies the attribution standard is preserved unchanged. PULL_REQUEST_TEMPLATE.md drops the "Upstream cherry-pick from Chat 2" checkbox and the cherry-pick-path compatibility prompt. The upstream git remote was already removed locally on 2026-05-08 (separate change, not in this commit). No source-file edits, no manifest version bump, no changelog entry — this is documentation-only and ships with the next release.
This commit is contained in:
@@ -23,7 +23,6 @@ https://github.com/JonKazama-Hellion/HellionChat/security/advisories/new
|
|||||||
- [ ] Documentation only
|
- [ ] Documentation only
|
||||||
- [ ] Translation update
|
- [ ] Translation update
|
||||||
- [ ] Build, CI or tooling change
|
- [ ] Build, CI or tooling change
|
||||||
- [ ] Upstream cherry-pick from Chat 2
|
|
||||||
|
|
||||||
## Linked issue
|
## Linked issue
|
||||||
|
|
||||||
@@ -53,7 +52,6 @@ new commands, new translations, removed behaviour. If none, write
|
|||||||
bump and is it covered by the existing migration tests?
|
bump and is it covered by the existing migration tests?
|
||||||
- Does this change the schema in MessageStore?
|
- Does this change the schema in MessageStore?
|
||||||
- Does this change the repo.json or HellionChat.yaml manifest fields?
|
- Does this change the repo.json or HellionChat.yaml manifest fields?
|
||||||
- Does this affect the upstream cherry-pick path? See docs/UPSTREAM_SYNC.md.
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## Checklist
|
## Checklist
|
||||||
|
|||||||
+19
-9
@@ -15,9 +15,11 @@ to make a contribution land smoothly.
|
|||||||
- Read the [README](README.md) so you understand the scope: a
|
- Read the [README](README.md) so you understand the scope: a
|
||||||
privacy-focused, EUPL-1.2-licensed Dalamud plugin that intentionally
|
privacy-focused, EUPL-1.2-licensed Dalamud plugin that intentionally
|
||||||
removes the upstream webinterface and ships privacy-first defaults.
|
removes the upstream webinterface and ships privacy-first defaults.
|
||||||
- Read [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md). Cherry-picks
|
- Read [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md). Active
|
||||||
from upstream Chat 2 are selective and deliberate; not everything
|
cherry-picking from upstream Chat 2 has ended in the v1.4.x cycle;
|
||||||
that lands there belongs here.
|
HellionChat continues as an independent codebase. Existing
|
||||||
|
upstream-derived code keeps its attribution. New contributions
|
||||||
|
stand on their own and do not need to be cherry-pick-compatible.
|
||||||
- Read [`SECURITY.md`](SECURITY.md). Anything security-sensitive goes
|
- Read [`SECURITY.md`](SECURITY.md). Anything security-sensitive goes
|
||||||
through a private advisory, never a public issue or PR.
|
through a private advisory, never a public issue or PR.
|
||||||
- Read the [Code of Conduct](CODE_OF_CONDUCT.md).
|
- Read the [Code of Conduct](CODE_OF_CONDUCT.md).
|
||||||
@@ -43,9 +45,11 @@ to make a contribution land smoothly.
|
|||||||
"Was gegenüber Chat 2 fehlt".
|
"Was gegenüber Chat 2 fehlt".
|
||||||
- Features that bypass the privacy filter or weaken the default
|
- Features that bypass the privacy filter or weaken the default
|
||||||
retention behaviour without an explicit, documented opt-in.
|
retention behaviour without an explicit, documented opt-in.
|
||||||
- Sweeping refactors that touch large parts of the codebase. They make
|
- Sweeping refactors that touch large parts of the codebase. The
|
||||||
selective upstream cherry-picks much harder and the maintenance cost
|
maintenance cost outweighs the benefit for a one-person project.
|
||||||
outweighs the benefit for a one-person project.
|
(This used to be doubly important because of the upstream
|
||||||
|
cherry-pick path; that path is closed now, but the rule still
|
||||||
|
holds on its own merits.)
|
||||||
- AI-generated code dropped in without disclosure or human review. See
|
- AI-generated code dropped in without disclosure or human review. See
|
||||||
[`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) for how I handle
|
[`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) for how I handle
|
||||||
AI assistance on my side; I expect comparable transparency from
|
AI assistance on my side; I expect comparable transparency from
|
||||||
@@ -117,9 +121,15 @@ Hellion-specific strings live in
|
|||||||
direct pull requests.
|
direct pull requests.
|
||||||
|
|
||||||
The upstream Chat 2 strings in `HellionChat/Resources/Language.*.resx`
|
The upstream Chat 2 strings in `HellionChat/Resources/Language.*.resx`
|
||||||
are **not** translated here. They are owned by the upstream project
|
are **not** translated here. They are kept as-is from the last
|
||||||
and synced in via cherry-pick. Please contribute those to
|
upstream sync and remain the work of the Chat 2 Crowdin community.
|
||||||
[Infiziert90/ChatTwo](https://github.com/Infiziert90/ChatTwo) instead.
|
Active cherry-picking from upstream ended in the v1.4.x cycle (see
|
||||||
|
[`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md)), so future
|
||||||
|
translation improvements to those upstream strings will not flow
|
||||||
|
into HellionChat automatically anymore. If you have improvements
|
||||||
|
for the original Chat 2 strings, please contribute them to
|
||||||
|
[Infiziert90/ChatTwo](https://github.com/Infiziert90/ChatTwo)
|
||||||
|
directly.
|
||||||
|
|
||||||
## Licensing
|
## Licensing
|
||||||
|
|
||||||
|
|||||||
@@ -35,9 +35,19 @@ edits minimal, isolated to clearly-marked Hellion files, and reversible.
|
|||||||
|
|
||||||
Concrete example: when API 15 hit, I cherry-picked your fix for the
|
Concrete example: when API 15 hit, I cherry-picked your fix for the
|
||||||
BetterTTV emote regression with `git cherry-pick -x` so authorship and
|
BetterTTV emote regression with `git cherry-pick -x` so authorship and
|
||||||
co-author trail stay intact. That is the standard I want to keep using as
|
co-author trail stay intact. That was the standard I held to as long
|
||||||
long as both projects are alive. You should never have to look at this
|
as cherry-picking was viable, and you should never have to look at
|
||||||
fork and wonder if I quietly ate your work.
|
this fork and wonder if I quietly ate your work.
|
||||||
|
|
||||||
|
With ChatTwo entering its rework cycle, the active cherry-pick
|
||||||
|
pipeline is closed since v1.4.x — see [docs/UPSTREAM_SYNC.md](docs/UPSTREAM_SYNC.md)
|
||||||
|
for the full reasoning. The attribution standard stays exactly the
|
||||||
|
same: every existing `(cherry picked from commit ...)` line remains
|
||||||
|
in the git history, the EUPL-1.2 anchor lines in source files are
|
||||||
|
untouched, and this NOTICE.md remains canonical. If anything from
|
||||||
|
this point forward originates from Chat 2 it will be a hand-port at
|
||||||
|
most, called out as such in the commit message and source comments,
|
||||||
|
not a `git cherry-pick`.
|
||||||
|
|
||||||
If anything in this fork ever steps on something you would not be okay
|
If anything in this fork ever steps on something you would not be okay
|
||||||
with, please reach out and I will fix it. Genuinely. The list of contacts
|
with, please reach out and I will fix it. Genuinely. The list of contacts
|
||||||
@@ -62,8 +72,10 @@ full-history-by-default position fits a much larger one, including the
|
|||||||
roleplaying community where chat archive is part of the play experience.
|
roleplaying community where chat archive is part of the play experience.
|
||||||
Trying to upstream HellionChat's defaults would have meant arguing that
|
Trying to upstream HellionChat's defaults would have meant arguing that
|
||||||
Chat 2's defaults are wrong, and they are not. They are right for the
|
Chat 2's defaults are wrong, and they are not. They are right for the
|
||||||
user base ChatTwo serves. So I keep the fork separate, attribute clearly,
|
user base ChatTwo serves. So I keep the fork separate and attribute
|
||||||
and pull selected upstream patches when they apply.
|
clearly. Active cherry-picking from upstream stopped in the v1.4.x
|
||||||
|
cycle once Chat 2's rework made selective patches no longer portable;
|
||||||
|
the existing cherry-pick trail stays in the git history.
|
||||||
|
|
||||||
## Why HellionChat left the GitHub fork network
|
## Why HellionChat left the GitHub fork network
|
||||||
|
|
||||||
@@ -72,8 +84,9 @@ that a fork is either a development branch or a dead mirror. HellionChat
|
|||||||
is neither. It is an independently-maintained EUPL-1.2 fork with its own
|
is neither. It is an independently-maintained EUPL-1.2 fork with its own
|
||||||
release cadence, its own custom repo, its own user base. Detaching the
|
release cadence, its own custom repo, its own user base. Detaching the
|
||||||
fork-network relation just makes the situation honest. The git history,
|
fork-network relation just makes the situation honest. The git history,
|
||||||
the cherry-pick trail, and the attribution stay exactly the same. The
|
the existing cherry-pick trail, and the attribution stay exactly the
|
||||||
only thing that changes is the GitHub UI no longer says "forked from".
|
same. The only thing that changes is the GitHub UI no longer says
|
||||||
|
"forked from".
|
||||||
|
|
||||||
## Trademarks and naming
|
## Trademarks and naming
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Hellion Chat ist ein Privacy-First-Plugin auf dem Chat-2-Fundament. Der größte
|
|||||||
|
|
||||||
Der Daten-Handling-Fokus liegt auf den DSGVO/EU-, US- und JP-Regelungen, soweit für ein Chat-Plugin praktisch umsetzbar: Speicherzeit pro Kanal, granulare Filter, Selbstauskunft per Export. Eine ausführliche Auflistung steht in [`PRIVACY.md`](PRIVACY.md).
|
Der Daten-Handling-Fokus liegt auf den DSGVO/EU-, US- und JP-Regelungen, soweit für ein Chat-Plugin praktisch umsetzbar: Speicherzeit pro Kanal, granulare Filter, Selbstauskunft per Export. Eine ausführliche Auflistung steht in [`PRIVACY.md`](PRIVACY.md).
|
||||||
|
|
||||||
Eigenständiges Repository, EUPL-1.2-lizenziert. Mit v1.0.0 ist der Standalone-Cut abgeschlossen: eigener Namespace `HellionChat.*`, eigene IPC-Kanäle, eigene Source-Tree-Struktur. Distribution über Custom-Repo. Selektive Cherry-Picks von Upstream-Chat-2 nach Bedarf, dokumentiert in [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md).
|
Eigenständiges Repository, EUPL-1.2-lizenziert. Mit v1.0.0 ist der Standalone-Cut abgeschlossen: eigener Namespace `HellionChat.*`, eigene IPC-Kanäle, eigene Source-Tree-Struktur. Distribution über Custom-Repo. Aktiver Upstream-Sync ist mit dem v1.4.x-Cycle beendet: Chat 2 befindet sich in einem grundlegenden Rework und Cherry-Picks sind nicht mehr portierbar. Hellion Chat geht ab da als unabhängige Codebase weiter, Hintergrund und Attribution in [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md).
|
||||||
|
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
@@ -311,7 +311,7 @@ Im Repo-Root liegen die Standard-Repository-Dokumente, vertiefende Dokumentation
|
|||||||
| [`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md) | Entwicklungsgeschichte, vom Web-Stack zu C# / Dalamud, was ich aus dem Fork gelernt habe. |
|
| [`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md) | Entwicklungsgeschichte, vom Web-Stack zu C# / Dalamud, was ich aus dem Fork gelernt habe. |
|
||||||
| [`docs/IPC.md`](docs/IPC.md) | IPC-Kanal-Reference, Tuple-Payload-Felder, Migrations-Diff für Drittplugins. |
|
| [`docs/IPC.md`](docs/IPC.md) | IPC-Kanal-Reference, Tuple-Payload-Felder, Migrations-Diff für Drittplugins. |
|
||||||
| [`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md) | Theme-Engine-Authoring-Guide (EN): JSON-Schema, Color- und Layout-Slots, Channel-Identity-Regeln, Validierung. |
|
| [`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md) | Theme-Engine-Authoring-Guide (EN): JSON-Schema, Color- und Layout-Slots, Channel-Identity-Regeln, Validierung. |
|
||||||
| [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md) | Cherry-Pick-Policy gegenüber Chat 2. |
|
| [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md) | Upstream-Sync-Stand: Cherry-Pick-Pipeline seit v1.4.x geschlossen, Attribution intakt. |
|
||||||
| [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md) | NuGet-Dependencies mit Lizenzen, Bundled Assets, Network-Status pro Komponente. |
|
| [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md) | NuGet-Dependencies mit Lizenzen, Bundled Assets, Network-Status pro Komponente. |
|
||||||
| [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) | Offenlegung der KI-Unterstützung im Entwicklungsprozess. |
|
| [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) | Offenlegung der KI-Unterstützung im Entwicklungsprozess. |
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -203,6 +203,7 @@ aktuellen Stand getestet.
|
|||||||
|
|
||||||
Hellion Chat ist EUPL-1.2-lizenziert. Konzept-Imports aus AGPL-3.0-Plugins
|
Hellion Chat ist EUPL-1.2-lizenziert. Konzept-Imports aus AGPL-3.0-Plugins
|
||||||
(z.B. XIV Instant Messenger) sind ausschließlich architektonische
|
(z.B. XIV Instant Messenger) sind ausschließlich architektonische
|
||||||
Inspiration, kein Code-Port. Imports aus dem GPL-3.0-kompatiblen
|
Inspiration, kein Code-Port. Code-Imports aus dem Upstream-Bestand
|
||||||
Upstream-Bestand laufen weiter über
|
sind seit v1.4.x abgeschlossen, weil Chat 2 in einem grundlegenden
|
||||||
[`UPSTREAM_SYNC.md`](UPSTREAM_SYNC.md).
|
Rework ist und selektive Patches nicht mehr sauber portierbar sind.
|
||||||
|
Stand und Begründung in [`UPSTREAM_SYNC.md`](UPSTREAM_SYNC.md).
|
||||||
|
|||||||
@@ -51,8 +51,9 @@ HellionChat is a fork of [Chat 2](https://github.com/Infiziert90/ChatTwo)
|
|||||||
by Infiziert90 (Infi) and Anna Clemens, also licensed under EUPL-1.2.
|
by Infiziert90 (Infi) and Anna Clemens, also licensed under EUPL-1.2.
|
||||||
The bulk of the code, including the message store architecture, the
|
The bulk of the code, including the message store architecture, the
|
||||||
channel logic, the hook system and the ImGui chat window, originates
|
channel logic, the hook system and the ImGui chat window, originates
|
||||||
from upstream. See `../NOTICE.md` and `UPSTREAM_SYNC.md` for the
|
from upstream. See `../NOTICE.md` for the attribution; `UPSTREAM_SYNC.md`
|
||||||
attribution and the cherry-pick policy.
|
documents the upstream-sync history, including the close of active
|
||||||
|
cherry-picking in the v1.4.x cycle.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+69
-96
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
HellionChat is a standalone EUPL-1.2 plugin that originated from
|
HellionChat is a standalone EUPL-1.2 plugin that originated from
|
||||||
[Chat 2](https://github.com/Infiziert90/ChatTwo). Since v1.0.0 it
|
[Chat 2](https://github.com/Infiziert90/ChatTwo). Since v1.0.0 it
|
||||||
lives under its own namespace, IPC channels and source tree. I no
|
lives under its own namespace, IPC channels and source tree. The
|
||||||
longer track upstream as a Git fork, but I do monitor Chat 2 commits
|
active cherry-pick pipeline from upstream Chat 2 is closed since
|
||||||
regularly and cherry-pick selectively where it makes sense.
|
the v1.4.x cycle.
|
||||||
|
|
||||||
This document covers how that works so anyone (including future-me)
|
This document covers what that means, why I closed it, and what
|
||||||
can do it cleanly.
|
stays in place.
|
||||||
|
|
||||||
## A Word on Intent
|
## A Word on Intent
|
||||||
|
|
||||||
@@ -28,99 +28,77 @@ new UI from scratch and making deliberate architectural decisions that
|
|||||||
pull in a different direction. Some upstream patches will simply stop
|
pull in a different direction. Some upstream patches will simply stop
|
||||||
applying cleanly and that is expected.
|
applying cleanly and that is expected.
|
||||||
|
|
||||||
## One-Time Setup
|
## Why Cherry-Picking Stopped in v1.4.x
|
||||||
|
|
||||||
Add the upstream repo as a remote on a fresh clone:
|
Two things converged:
|
||||||
|
|
||||||
```bash
|
1. **Chat 2 is in a rework cycle.** Infi mentioned directly that
|
||||||
git remote add upstream https://github.com/Infiziert90/ChatTwo.git
|
parts of ChatTwo are being reworked and "stuff may not be able to
|
||||||
git fetch upstream
|
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.
|
||||||
|
|
||||||
Verify both remotes are wired up:
|
Together those two points mean continuing to call this an "active
|
||||||
|
cherry-pick pipeline" was no longer honest. So I closed it.
|
||||||
|
|
||||||
```bash
|
## What Closing the Pipeline Means in Practice
|
||||||
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)
|
|
||||||
```
|
|
||||||
|
|
||||||
`upstream` is read-only. Never push to it.
|
- 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.
|
||||||
|
|
||||||
## Reviewing What Is New Upstream
|
## What Does Not Change
|
||||||
|
|
||||||
Before any feature cycle I run a quick check:
|
- **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.
|
||||||
|
|
||||||
```bash
|
## What Could Re-Open Later
|
||||||
git fetch upstream
|
|
||||||
git log --oneline main..upstream/main | head -30
|
|
||||||
```
|
|
||||||
|
|
||||||
That shows every commit Infi or contributors landed since the last
|
If Chat 2's rework lands and stabilises, and there is a piece of
|
||||||
sync. I read the messages and decide which ones apply to HellionChat.
|
upstream code that I genuinely want in HellionChat, the path forward
|
||||||
|
is **study and re-implement**, not cherry-pick. That means:
|
||||||
|
|
||||||
## What I Cherry-Pick
|
- 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.
|
||||||
|
|
||||||
**Always:** security fixes, Dalamud API compatibility patches,
|
This is heavier than `git cherry-pick -x` and that is the point.
|
||||||
BetterTTV and emote-cache fixes, regression fixes for upstream
|
Cherry-picking was light because both codebases shared structure;
|
||||||
behaviour HellionChat still relies on.
|
once they do not, the proper attribution costs a real conversation
|
||||||
|
rather than a flag on a git command.
|
||||||
**Sometimes:** small bug fixes in `MessageManager.cs`,
|
|
||||||
`MessageStore.cs`, `ChatLogWindow.cs`, the Tabs system. These come in
|
|
||||||
when they touch code I 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 I deliberately reversed (full-history
|
|
||||||
logging, Tell Exclusive defaults, etc.).
|
|
||||||
|
|
||||||
As HellionChat's UI moves further from the Chat 2 baseline, upstream
|
|
||||||
patches will increasingly require adaptation rather than a clean
|
|
||||||
apply. If a patch cannot be ported without breaking HellionChat
|
|
||||||
behaviour or the privacy model, I skip it rather than force a
|
|
||||||
compromised version in.
|
|
||||||
|
|
||||||
## How I Cherry-Pick
|
|
||||||
|
|
||||||
Always with `-x` so authorship and the original commit hash stay
|
|
||||||
visible:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git checkout -b sync/upstream-<topic> main
|
|
||||||
git cherry-pick -x <upstream-commit-sha>
|
|
||||||
```
|
|
||||||
|
|
||||||
`-x` appends a `(cherry picked from commit <sha>)` line to the commit
|
|
||||||
message. That preserves upstream-author credit and lets anyone reading
|
|
||||||
`git log` trace the change back to Chat 2. Commit messages stay
|
|
||||||
identical to the upstream original; I do not rewrite them to match the
|
|
||||||
HellionChat format.
|
|
||||||
|
|
||||||
## Conflict Handling
|
|
||||||
|
|
||||||
When a cherry-pick conflicts:
|
|
||||||
|
|
||||||
1. Resolve by hand. Do not rewrite upstream code to match HellionChat
|
|
||||||
conventions; that is what the merge marker showed.
|
|
||||||
2. If the conflict is fundamental (touches code that no longer exists
|
|
||||||
in HellionChat), abort the cherry-pick and note why in the
|
|
||||||
relevant GitHub issue or backlog item. Some upstream patches are
|
|
||||||
simply not portable and that is fine.
|
|
||||||
3. After a clean resolve the commit message stays as-is, with the
|
|
||||||
`-x` footer Git appends automatically.
|
|
||||||
|
|
||||||
## Pushing the Sync
|
|
||||||
|
|
||||||
Cherry-picked commits go through the same review as any other change.
|
|
||||||
The sync branch lands in `main` via a no-fast-forward merge, then gets
|
|
||||||
a release tag if user-visible behaviour changed:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git checkout main
|
|
||||||
git merge --no-ff sync/upstream-<topic> -m "merge: upstream sync — <topic>"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing Back
|
## Contributing Back
|
||||||
|
|
||||||
@@ -138,17 +116,12 @@ A few things to note about that process:
|
|||||||
not push that decision onto his codebase.
|
not push that decision onto his codebase.
|
||||||
- This is not guaranteed for every change, only where it makes sense
|
- This is not guaranteed for every change, only where it makes sense
|
||||||
and where I am confident the fix is clean and self-contained.
|
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 Goes Silent
|
|
||||||
|
|
||||||
If Chat 2 stops receiving updates the remote stays configured and this
|
|
||||||
workflow stays documented. The moment maintenance picks back up I am
|
|
||||||
ready to pull again.
|
|
||||||
|
|
||||||
## When Upstream Takes a Direction I Cannot Follow
|
## When Upstream Takes a Direction I Cannot Follow
|
||||||
|
|
||||||
If a future Chat 2 release breaks compatibility with the HellionChat
|
If a future Chat 2 release breaks compatibility with the HellionChat
|
||||||
privacy philosophy in a way that cannot be resolved (mandatory cloud
|
privacy philosophy in a way that cannot be resolved (mandatory cloud
|
||||||
sync, removal of the local message store, an incompatible license
|
sync, removal of the local message store, an incompatible licence
|
||||||
change), HellionChat continues from the last compatible cherry-pick.
|
change), HellionChat continues from where it is. The inherited
|
||||||
The inherited history stays under EUPL-1.2 and stays attributed.
|
history stays under EUPL-1.2 and stays attributed.
|
||||||
|
|||||||
Reference in New Issue
Block a user