Closes the remaining gaps in GitHub's community-standards check, adds explicit privacy and dependency documentation matching the plugin's "DSGVO-by-design" claim, and removes the stale upstream Crowdin artefact so the repo no longer suggests it ships its own translation pipeline. New community-health files: - CODE_OF_CONDUCT.md: project-specific, short and direct, single reporting path to kontakt@hellion-media.de - CONTRIBUTING.md: scope, accepted vs declined contributions, build and test instructions, EUPL-1.2 contribution terms, translation policy split between Hellion-specific (here) and upstream strings (Chat 2 repo) - SUPPORT.md: routing for bugs, security, privacy and casual feedback - .github/PULL_REQUEST_TEMPLATE.md: summary, change-type checklist, testing notes, compatibility notes for migrations and manifest fields, contribution checklist - .github/FUNDING.yml: comments-only file, no platforms enabled, points donors at the upstream Chat 2 maintainers' Ko-fi pages New privacy and compliance documentation: - PRIVACY.md: what the plugin stores locally (config, SQLite, EmoteCacheV1), retention defaults, the two outbound network calls (BetterTTV API+CDN with ShowEmotes opt-out, Square Enix Lodestone font once-off), explicit no-telemetry statement, GDPR Art. 15/17/18/20/21 rights mapped to plugin features, third-party privacy-policy links - THIRD_PARTY_NOTICES.md: direct NuGet dependencies with versions pinned to v0.5.4 (MessagePack, Microsoft.Data.Sqlite, morelinq, Pidgin, SixLabors.ImageSharp under Six Labors Split License 1.0), Dalamud SDK and .NET tooling, bundled Exo 2 font (OFL-1.1) and plugin icon, network-touch status per component, re-audit commands Crowdin cleanup: - crowdin.yml deleted (was upstream Chat 2's project_id 663694, pointed at /ChatTwo/Resources/Language.resx, never wired to HellionChat strings) - README, CONTRIBUTING and CODE_OF_CONDUCT no longer suggest HellionChat operates a Crowdin project; remaining mentions are explicitly framed as upstream Chat 2's workflow Contact and version consistency: - Maintainer email switched from maintainer@hellion-media.de to kontakt@hellion-media.de in SECURITY.md and NOTICE.md - README version references updated to 0.5.4 (header, project status block) and the update-tag pattern generalised from v0.1.x to v0.X.Y - bug_report.yml version placeholder bumped to 0.5.4 - Project-documents table added to README footer linking all health and reference files in one place Release-body automation: - .github/workflows/release.yml now extracts the matching version block from ChatTwo/HellionChat.yaml's changelog and combines it with a static install / docs footer (custom-repo URL, project document links, licence) before passing the result to softprops/action-gh-release@v3 via body_path - Workflow fails fast if no changelog block exists for the tagged version, automating the existing "yaml + repo.json + release body kept in sync" rule - Tag value passed via env: TAG_NAME with strict ^v\d+\.\d+\.\d+$ validation before any string concatenation, so the tag input cannot break out into shell evaluation
5.5 KiB
Contributing to HellionChat
Thanks for taking a look. HellionChat is a small, opinionated fork of Chat 2 maintained by one person in spare time. This document explains what I am looking for, what I am not, and how to make a contribution land smoothly.
Before you open anything
- Read the README so you understand the scope: this is a privacy-focused, EUPL-1.2-licensed Dalamud plugin that intentionally removes the upstream webinterface and ships smaller defaults.
- Read UPSTREAM_SYNC.md. Cherry-picks from upstream Chat 2 are selective and conscious; not everything that lands there belongs here.
- Read SECURITY.md. Anything security-sensitive goes through a private advisory, never a public issue or PR.
- Read the code of conduct.
What I will accept
- Bug fixes for behaviour documented in the README, the in-plugin settings or the changelog.
- Translation contributions for Hellion-specific strings via direct
pull requests against
ChatTwo/Resources/HellionStrings.*.resx. Translations for the upstream Chat 2 strings (Language.*.resx) are not handled here; they go through the upstream Chat 2 project. - Documentation improvements (README, comments, this file).
- Performance fixes with a measurable before/after.
- New features that fit the privacy-first scope and do not duplicate what an existing Dalamud plugin already does well.
What I will probably decline
- 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".
- Features that bypass the privacy filter or weaken the default retention behaviour without an explicit, documented opt-in.
- Sweeping refactors that touch large parts of the upstream codebase. They make selective upstream cherry-picks much harder and the maintenance cost outweighs the benefit for a one-person project.
- AI-generated code dropped in without disclosure or human review. See AI_DISCLOSURE.md for how I handle AI assistance on my side; I expect comparable transparency from contributors.
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 proposal than to a finished pull request.
Workflow
- Open an issue (bug or feature request) using the templates under
.github/ISSUE_TEMPLATE/. Skip this step only for trivial typos. - Fork the repository and branch off
main. Branch naming is informal; something likefix/auto-tell-history-emptyorfeat/adblock-light-modeis plenty. - Match the existing code style. The repository ships an
.editorconfigthat VS Code and Rider pick up automatically. - Keep commits focused. Several small commits with clear messages are easier to review than one big one. Squash-on-merge happens at the PR level if needed.
- If your change touches user-visible behaviour, update the README
and/or the changelog block in
ChatTwo/HellionChat.yamlandrepo.jsonfor the next version. I bump the version number myself at release time, so you do not need to. - Open the pull request against
main. The PR template will ask you to summarise the change, the testing you did and any compatibility notes.
Build and test
The project targets net10.0-windows against Dalamud SDK 15. To build
locally you need:
- .NET 10 SDK
- A working Dalamud development environment with
DALAMUD_HOMEset (XIVLauncher installed and launched once is the simplest path) - VS Code with the C# Dev Kit, Rider, or Visual Studio
dotnet restore
dotnet build ChatTwo.sln -c Release
dotnet test ChatTwo.sln -c Release
The test project is ChatTwo.Tests. New behaviour should come with a
test where the existing test infrastructure makes that practical
(privacy filter, configuration migration, message store).
For a smoke test in-game: build, copy the output into your Dalamud
devPlugins/HellionChat/ directory and load it through /xlplugins.
Continuous integration
Every push and every pull request runs:
build.yml—dotnet buildanddotnet testcodeql.yml— CodeQL security analysis
A pull request will not be merged while either of these is failing. CodeQL findings on changed code need to be addressed; pre-existing findings on untouched code are tracked separately.
Licensing
By submitting a pull request you confirm that:
- Your contribution is your own work, or you have the right to contribute it under the project licence.
- You agree that your contribution will be released under the EUPL-1.2, the same licence as the rest of the project.
There is no separate CLA.
Translations
Hellion-specific strings live in ChatTwo/Resources/HellionStrings.resx
(English source) and HellionStrings.<lang>.resx (per-language).
Translations are accepted as direct pull requests against those files.
The upstream Chat 2 strings in ChatTwo/Resources/Language.*.resx are
not translated in this repository. They are owned by the upstream
Chat 2 project and synced in via cherry-pick. Please contribute
upstream-string translations to
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.