Revise contributing guidelines for clarity and updates

Updated the contributing guidelines to reflect changes in project scope, contribution acceptance criteria, and response times. Clarified sections on translations and continuous integration.
This commit is contained in:
2026-05-05 21:07:18 +02:00
committed by GitHub
parent 2f0affcdbb
commit eb05e04f79
+70 -54
View File
@@ -1,47 +1,55 @@
# Contributing to HellionChat # Contributing to HellionChat
Thanks for taking a look. HellionChat is a small, opinionated fork of Thanks for taking a look. HellionChat is a one-person side project
[Chat 2](https://github.com/Infiziert90/ChatTwo) maintained by one developed under Hellion Forge. It started as a fork of
person in spare time. This document explains what I am looking for, [Chat 2](https://github.com/Infiziert90/ChatTwo) and has since become
what I am not, and how to make a contribution land smoothly. a standalone plugin under its own namespace, IPC channels and
source tree (standalone-cut completed in v1.0.0). Forking HellionChat
itself is explicitly permitted under the EUPL-1.2.
## Before you open anything This document explains what I am looking for, what I am not, and how
to make a contribution land smoothly.
- Read the [README](README.md) so you understand the scope: this is a ## Before You Open Anything
- 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 smaller defaults. removes the upstream webinterface and ships privacy-first defaults.
- Read [UPSTREAM_SYNC.md](docs/UPSTREAM_SYNC.md). Cherry-picks from upstream - Read [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md). Cherry-picks
Chat 2 are selective and conscious; not everything that lands there from upstream Chat 2 are selective and deliberate; not everything
belongs here. that lands there belongs here.
- 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).
## What I will accept ## What I Will Accept
- Bug fixes for behaviour documented in the README, the in-plugin - Bug fixes for behaviour documented in the README, the in-plugin
settings or the changelog. settings or the changelog.
- Translation contributions for Hellion-specific strings via direct - Translation contributions for Hellion-specific strings via direct
pull requests against `HellionChat/Resources/HellionStrings.*.resx`. pull requests against
Translations for the upstream Chat 2 strings (`Language.*.resx`) are `HellionChat/Resources/HellionStrings.*.resx`. Translations for
not handled here; they go through the upstream Chat 2 project. upstream Chat 2 strings (`Language.*.resx`) are not handled here;
those go to the upstream Chat 2 project.
- Documentation improvements (README, comments, this file). - Documentation improvements (README, comments, this file).
- Performance fixes with a measurable before/after. - Performance fixes with a measurable before/after.
- New features that fit the privacy-first scope and do not duplicate - New features that fit the privacy-first scope and do not duplicate
what an existing Dalamud plugin already does well. what an existing Dalamud plugin already does well.
## What I will probably decline ## What I Will Probably Decline
- Re-introducing the webinterface or any remote-access feature. It was - Re-introducing the webinterface or any remote-access feature. It was
removed in v0.2.0 on purpose. See README "Was gegenüber Chat 2 fehlt". removed in v0.2.0 on purpose. See the README section
"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 upstream codebase. - Sweeping refactors that touch large parts of the codebase. They make
They make selective upstream cherry-picks much harder and 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.
- AI-generated code dropped in without disclosure or human review. See - AI-generated code dropped in without disclosure or human review. See
[AI_DISCLOSURE.md](docs/AI_DISCLOSURE.md) for how I handle AI assistance [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) for how I handle
on my side; I expect comparable transparency from contributors. AI assistance on my side; I expect comparable transparency from
contributors.
If you are unsure whether an idea fits, open a feature-request issue If you are unsure whether an idea fits, open a feature-request issue
first and ask before writing code. I would rather say "no" to a first and ask before writing code. I would rather say "no" to a
@@ -50,56 +58,69 @@ proposal than to a finished pull request.
## Workflow ## Workflow
1. Open an issue (bug or feature request) using the templates under 1. Open an issue (bug or feature request) using the templates under
`.github/ISSUE_TEMPLATE/`. Skip this step only for trivial typos. `.github/ISSUE_TEMPLATE/`. Skip this for trivial typos.
2. Fork the repository and branch off `main`. Branch naming is 2. Fork the repository and branch off `main`. Branch naming is
informal; something like `fix/auto-tell-history-empty` or informal; something like `fix/auto-tell-history-empty` or
`feat/adblock-light-mode` is plenty. `feat/theme-export` is fine.
3. Match the existing code style. The repository ships an 3. Match the existing code style. The repository ships an
`.editorconfig` that VS Code and Rider pick up automatically. `.editorconfig` that VS Code and Rider pick up automatically.
4. Keep commits focused. Several small commits with clear messages are 4. Keep commits focused. Several small commits with clear messages are
easier to review than one big one. Squash-on-merge happens at the easier to review than one large one. Squash-on-merge happens at
PR level if needed. the PR level if needed.
5. If your change touches user-visible behaviour, update the README 5. If your change touches user-visible behaviour, update the README
and/or the changelog block in `HellionChat/HellionChat.yaml` and and/or the changelog block in `HellionChat/HellionChat.yaml` and
`repo.json` for the next version. I bump the version number myself `repo.json`. I bump the version number myself at release time.
at release time, so you do not need to.
6. Open the pull request against `main`. The PR template will ask 6. Open the pull request against `main`. The PR template will ask
you to summarise the change, the testing you did and any you to summarise the change, the testing you did and any
compatibility notes. compatibility notes.
## Build and test ## Build and Test
The project targets `net10.0-windows` against Dalamud SDK 15. To build The project targets `net10.0-windows` against Dalamud SDK 15. To build
locally you need: locally you need:
- .NET 10 SDK - .NET 10 SDK
- A working Dalamud development environment with `DALAMUD_HOME` set - A working Dalamud dev environment with `DALAMUD_HOME` set
(XIVLauncher installed and launched once is the simplest path) (XIVLauncher installed and launched once is the simplest path)
- VS Code with the C# Dev Kit, Rider, or Visual Studio - VS Code with the C# Dev Kit, Rider, or Visual Studio
``` ```bash
dotnet restore dotnet restore
dotnet build HellionChat.sln -c Release dotnet build HellionChat.sln -c Release
``` ```
Tests are not part of the current `HellionChat.sln`. If you add a test There are currently no tests in `HellionChat.sln`. If you add a test
project, point it at the relevant subsystems (privacy filter, project, point it at the relevant subsystems (privacy filter,
configuration migration, message store) and mention it in the PR. configuration migration, message store) and mention it in the PR.
For a smoke test in-game: build, copy the output into your Dalamud For a smoke test in-game: build, copy the output into your Dalamud
`devPlugins/HellionChat/` directory and load it through `/xlplugins`. `devPlugins/HellionChat/` directory and load it via `/xlplugins`.
## Continuous integration ## Continuous Integration
Every push and every pull request runs: Every push and every pull request runs:
- `build.yml``dotnet build` and `dotnet test` | Workflow | What it checks |
- `codeql.yml` — CodeQL security analysis | ------------- | ------------------------------------- |
| `build.yml` | `dotnet build` and `dotnet test` |
| `codeql.yml` | CodeQL security analysis |
A pull request will not be merged while either of these is failing. A pull request will not be merged while either of these is failing.
CodeQL findings on changed code need to be addressed; pre-existing CodeQL findings on changed code need to be addressed; pre-existing
findings on untouched code are tracked separately. findings on untouched code are tracked separately.
## Translations
Hellion-specific strings live in
`HellionChat/Resources/HellionStrings.resx` (English source) and
`HellionStrings.<lang>.resx` (per-language). These are accepted as
direct pull requests.
The upstream Chat 2 strings in `HellionChat/Resources/Language.*.resx`
are **not** translated here. They are owned by the upstream project
and synced in via cherry-pick. Please contribute those to
[Infiziert90/ChatTwo](https://github.com/Infiziert90/ChatTwo) instead.
## Licensing ## Licensing
By submitting a pull request you confirm that: By submitting a pull request you confirm that:
@@ -109,23 +130,18 @@ By submitting a pull request you confirm that:
- You agree that your contribution will be released under the - You agree that your contribution will be released under the
[EUPL-1.2](LICENSE), the same licence as the rest of the project. [EUPL-1.2](LICENSE), the same licence as the rest of the project.
There is no separate CLA. There is no separate CLA. Forking HellionChat is explicitly permitted
under the EUPL-1.2, as with any EUPL-licensed project.
## Translations ## Response Times
Hellion-specific strings live in `HellionChat/Resources/HellionStrings.resx` | Channel | Address |
(English source) and `HellionStrings.<lang>.resx` (per-language). | ------------- | -------------------------- |
Translations are accepted as direct pull requests against those files. | GitHub Issues | Preferred for bugs and feature requests |
| Discord DM | `@j.j_kazama` |
| Email | `kontakt@hellion-media.de` |
The upstream Chat 2 strings in `HellionChat/Resources/Language.*.resx` are I respond on weekdays during European business hours and take weekends
**not** translated in this repository. They are owned by the upstream and FFXIV patch days off. A pull request that sits for a few days has
Chat 2 project and synced in via cherry-pick. Please contribute not been ignored. Pinging once after a week is fine; please do not
upstream-string translations to ping daily.
[Infiziert90/ChatTwo](https://github.com/Infiziert90/ChatTwo) instead.
## A note on response times
I respond on weekdays during European business hours and I take
weekends and FFXIV patch days off. A pull request that sits for a few
days has not been ignored; I just have not gotten to it yet. Pinging
once after a week is fine; please do not ping daily.