Skip to content

Commit ca677fc

Browse files
authored
Add contributor guidance and agent instructions (#725)
1 parent 9f482d1 commit ca677fc

4 files changed

Lines changed: 190 additions & 47 deletions

File tree

AGENTS.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# Working on Keep a Changelog
2+
3+
This file explains why the project is built the way it is. When a change
4+
conflicts with these principles, the principles win.
5+
6+
How-to guidance — setup, common tasks, and the translation workflow — lives
7+
exclusively in [CONTRIBUTING.md](CONTRIBUTING.md). Do not repeat it here;
8+
point to it instead.
9+
10+
## What this project is
11+
12+
Keep a Changelog is a set of mindful guidelines for human-centered change
13+
communication. It is not a spec for people to robotically validate against.
14+
The site exists to help people communicate software changes to other humans,
15+
and every decision — in the writing and in the code — serves that goal.
16+
17+
The project has one maintainer, myriad contributors, and an oversized impact
18+
on how software changes are communicated around the world. Most of that impact
19+
comes from refusing easy tropes: we do not create or endorse specific tools,
20+
we do not follow conventions blindly when they make little sense, and we do
21+
not tell people what to do without regard for their specific contexts.
22+
23+
Apply the same judgment to the project itself. Favor simplicity, and when a
24+
rule needs to be strict, make the reasoning for that strictness clear.
25+
26+
## Technical principles
27+
28+
**No backend.** The site is static HTML, built once and served from GitHub
29+
Pages. This keeps hosting simple, cheap, and durable. Do not introduce
30+
anything that requires a server, a database, or a build service beyond the
31+
existing static build.
32+
33+
**Ruby at heart, CLI-based.** This is a Ruby project (Middleman, Rake,
34+
Minitest), and every workflow runs from the command line ([CONTRIBUTING.md](CONTRIBUTING.md)
35+
lists the tasks). Prefer extending the existing Ruby and Rake tooling over
36+
adding new toolchains. Small exceptions exist where a tool is clearly the
37+
right one for the job (Playwright for cross-browser visual regression, a
38+
Python script for translation QA scoring) — they are dev-only and never part
39+
of the shipped site.
40+
41+
**Boring is fine.** We do not need the most hyped language or framework.
42+
The measure of a tool is whether the project is hindered without it, not
43+
whether it is popular. Before proposing a migration or a new dependency, ask
44+
what problem it solves that the current setup cannot.
45+
46+
**Translations are a first-class concern.** The site's incredible number of
47+
community-created translations exists because translating and managing
48+
versions is deliberately accessible — to readers and to contributors. A
49+
translator can edit plain markup without understanding the build (the workflow
50+
is in [CONTRIBUTING.md](CONTRIBUTING.md)). Protect that: any change to how
51+
pages are structured or versioned must remain easy for a non-programmer
52+
translator to follow.
53+
54+
## How we use LLMs
55+
56+
Keep a Changelog has one maintainer and myriad contributors. Keeping a free
57+
open source project like this alive involves complicated logistics: dozens of
58+
languages, several spec versions in each, and a steady stream of contributions
59+
to review. That work does not happen without automation — and even automation
60+
requires maintenance. LLMs help carry that load, within strict limits, because
61+
wasting resources is antithetical to what this project stands for.
62+
63+
LLMs are **not** used to:
64+
65+
- **Replace translators.** Translations are created and reviewed by people who
66+
speak the language and know the culture. No model output can substitute for
67+
that judgment.
68+
- **Decide what Keep a Changelog says.** The guidelines are human positions,
69+
reasoned about and owned by humans.
70+
- **Spend tokens on needless features.** If a feature would not exist without
71+
an LLM to justify it, it should not exist.
72+
73+
LLMs **are** used to:
74+
75+
- **Build reusable tools that do not need an LLM to run.** The translation
76+
coverage lint, the semantic QA pipeline, and the version routing tests are
77+
ordinary scripts anyone can run, offline, for free, forever. An LLM may help
78+
write a tool once; the tool must then stand on its own.
79+
- **Validate accessibility, design, and functionality requirements** — checks
80+
a single maintainer could not perform by hand across every language, version,
81+
and browser.
82+
83+
The most daunting recurring problem this addresses is translation upkeep.
84+
Every version-specific translation must:
85+
86+
1. exist — or the site must give clear guidance for contributing one;
87+
2. be accurate and consistent with the original English guidelines, while
88+
remaining understandable in its own language and culture.
89+
90+
Tooling helps check these. Humans decide them.
91+
92+
## Writing and content
93+
94+
The content is held to `docs/tone-and-voice.md`. In short: write plainly,
95+
lead with the point, don't gatekeep, and prefer wording a non-native reader
96+
can understand on the first pass and a translator can translate rather than
97+
rephrase. This applies to site content, and it is a good default for
98+
documentation and commit messages too.
99+
100+
Guidelines on the site should explain their reasoning. A reader should be able
101+
to disagree intelligently with any recommendation we make, because we told
102+
them why we make it.

CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@AGENTS.md

CONTRIBUTING.md

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,84 @@
1-
See [README](README.md#development).
1+
# Contributing to Keep a Changelog
2+
3+
Please do contribute! Issues and pull requests are welcome. This file is the
4+
single home for contributor guidance — how to set up the project, work on it,
5+
and submit changes. For the principles behind how the project is built, see
6+
[AGENTS.md](AGENTS.md).
7+
8+
## Development
9+
10+
### Dependencies
11+
12+
- Ruby ([see version][ruby-version], [rbenv][rbenv] recommended)
13+
- Bundler (`gem install bundler`)
14+
15+
### Installation
16+
17+
- `git clone https://github.com/olivierlacan/keep-a-changelog.git`
18+
- `cd keep-a-changelog`
19+
- `bundle install`
20+
21+
### Common tasks
22+
23+
- `bin/rake serve` starts a local development server at http://localhost:4567
24+
which will reload with any local file changes
25+
- `bin/rake build` runs middleman build with `--verbose` flag so build errors are
26+
logged for easier debugging
27+
- `bin/rake test` runs the Minitest suite (also the default task)
28+
- `bundle exec standardrb` checks Ruby style ([Standard][standard])
29+
30+
### Visual regression tests
31+
32+
Cross-browser screenshot tests (Playwright, dev-only; not shipped with the
33+
site) guard against unintended visual changes:
34+
35+
- `bin/rake snapshots:baseline` builds the site and records baseline screenshots
36+
- `bin/rake snapshots:check` rebuilds and diffs against the baseline
37+
38+
### Deployment
39+
40+
- `bin/rake clean` can clean a corrupted `build/` directory in
41+
case `publish` failed
42+
- `bin/rake deploy` cleans, builds and pushes to the `gh-pages` branch on GitHub so
43+
the site is deployed to keepachangelog.com
44+
45+
## Translations
46+
47+
Create a new directory in [`source/`][source] named after the ISO 639-1 code
48+
for the language you wish to translate Keep a Changelog to. For example,
49+
assuming you want to translate to French Canadian:
50+
51+
- create the `source/fr-CA` directory.
52+
- duplicate the `source/en/1.0.0/index.html.haml` file in `source/fr-CA`.
53+
- edit `source/fr-CA/1.0.0/index.html.haml` until your translation is ready.
54+
- commit your changes to your own [fork][fork]
55+
- submit a [Pull Request][pull-request] with your changes
56+
57+
It may take some time to review your submitted Pull Request. Try to involve a
58+
few native speakers of the language you're translating to in the Pull Request
59+
comments. They'll help review your translation for simple mistakes and give us
60+
a better idea of whether your translation is accurate.
61+
62+
Translations are human work. This project does not use LLMs to replace
63+
translators, and a translation needs your judgment about what reads naturally
64+
in your language and culture — not just what matches the English words. The
65+
automated checks below only help find gaps and inconsistencies; they don't
66+
write or approve translations. [AGENTS.md](AGENTS.md) explains how the project
67+
uses LLMs and where it draws the line.
68+
69+
### Translation checks
70+
71+
- `ruby translation_coverage.rb` reports how complete each translation is
72+
(see [TRANSLATION_COVERAGE.md](TRANSLATION_COVERAGE.md))
73+
- `bin/rake translations:lint` runs a deterministic, rule-based translation lint
74+
- `bin/rake translations:qa` scores translated segments semantically
75+
(one-time setup: `bin/rake translations:setup`)
76+
77+
Thank you for your help improving software one changelog at a time!
78+
79+
[rbenv]: https://github.com/rbenv/rbenv
80+
[ruby-version]: .ruby-version
81+
[source]: source/
82+
[standard]: https://github.com/standardrb/standard
83+
[pull-request]: https://help.github.com/articles/creating-a-pull-request/
84+
[fork]: https://help.github.com/articles/fork-a-repo/

README.md

Lines changed: 3 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,60 +6,17 @@ Don’t let your friends dump git logs into changelogs™
66

77
This repository generates https://keepachangelog.com/.
88

9-
## Development
10-
11-
### Dependencies
12-
13-
- Ruby ([see version][ruby-version], [rbenv][rbenv] recommended)
14-
- Bundler (`gem install bundler`)
15-
16-
### Installation
17-
18-
- `git clone https://github.com/olivierlacan/keep-a-changelog.git`
19-
- `cd keep-a-changelog`
20-
- `bundle install`
21-
- `bin/rake serve` starts a local development server at http://localhost:4567
22-
which will reload with any local file changes
23-
- `bin/rake build` runs middleman build with `--verbose` flag so build errors are
24-
logged for easier debugging
25-
26-
### Deployment
27-
28-
- `bin/rake clean` can clean a corrupted `build/` directory in
29-
case `publish` failed
30-
- `bin/rake deploy` cleans, builds and pushes to the `gh-pages` branch on GitHub so
31-
the site is deployed to keepachangelog.com
32-
33-
### Translations
34-
35-
Create a new directory in [`source/`][source] named after the ISO 639-1 code
36-
for the language you wish to translate Keep a Changelog to. For example,
37-
assuming you want to translate to French Canadian:
38-
39-
- create the `source/fr-CA` directory.
40-
- duplicate the `source/en/1.0.0/index.html.haml` file in `source/fr-CA`.
41-
- edit `source/fr-CA/1.0.0/index.html.haml` until your translation is ready.
42-
- commit your changes to your own [fork][fork]
43-
- submit a [Pull Request][pull-request] with your changes
44-
45-
It may take some time to review your submitted Pull Request. Try to involve a
46-
few native speakers of the language you're translating to in the Pull Request
47-
comments. They'll help review your translation for simple mistakes and give us
48-
a better idea of whether your translation is accurate.
49-
509
## Contribute
5110

5211
Please do contribute! Issues and pull requests are welcome.
5312

13+
Development setup, common tasks, and the translation workflow are documented
14+
in [CONTRIBUTING.md](CONTRIBUTING.md).
15+
5416
Thank you for your help improving software one changelog at a time!
5517

5618
[changelog]: ./CHANGELOG.md
5719
[changelog-badge]: https://img.shields.io/badge/changelog-Keep%20a%20Changelog%20v1.1.0-%23E05735
5820
[license]: ./LICENSE
59-
[rbenv]: https://github.com/rbenv/rbenv
60-
[ruby-version]: .ruby-version
61-
[source]: source/
62-
[pull-request]: https://help.github.com/articles/creating-a-pull-request/
63-
[fork]: https://help.github.com/articles/fork-a-repo/
6421
[version-badge]: https://img.shields.io/badge/version-1.1.0-blue.svg
6522
[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg

0 commit comments

Comments
 (0)