Skip to content

Commit dc2baf9

Browse files
committed
Add mandatory CHANGELOG and update docs/tests
Introduce CHANGELOG.md as the project's source-of-truth and require updating its Unreleased section for every change. Update README, AGENTS.md and documentation (docs/README.md, docs/architecture.md, docs/maintenance.md, docs/testing.md) to reference and enforce the changelog. Add a unit test (tests/test_documentation_structure.py) to assert the changelog exists and contains an "## [Unreleased]" section. The changelog follows Keep a Changelog conventions and includes a 7.4.1 baseline.
1 parent 69f3140 commit dc2baf9

8 files changed

Lines changed: 97 additions & 8 deletions

File tree

AGENTS.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Guia para agentes de manutenção
22

3-
Antes de alterar o ZapZap, leia `docs/README.md`, `docs/architecture.md`,
4-
`docs/maintenance.md` e a seção pertinente de `docs/testing.md`.
3+
Antes de alterar o ZapZap, leia `CHANGELOG.md`, `docs/README.md`,
4+
`docs/architecture.md`, `docs/maintenance.md` e a seção pertinente de
5+
`docs/testing.md`.
56

67
- Preserve comportamento, chaves e valores persistidos; migre explicitamente
78
quando uma mudança for inevitável.
@@ -11,6 +12,9 @@ Antes de alterar o ZapZap, leia `docs/README.md`, `docs/architecture.md`,
1112
- Mantenha IDs persistidos separados de rótulos traduzidos.
1213
- Audite páginas, backends e plataformas irmãs quando a mudança for transversal.
1314
- Não considere `offscreen` prova de foco, cursor, compositor ou aparência real.
15+
- Registre obrigatoriamente toda mudança ou adição na seção `Unreleased` de
16+
`CHANGELOG.md`, inclusive documentação, testes, manutenção interna,
17+
dependências, empacotamento e workflows.
1418
- Não conclua uma alteração estrutural sem atualizar a documentação técnica e
1519
seus inventários marcados no mesmo conjunto de mudanças.
1620

CHANGELOG.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Changelog
2+
3+
All changes and additions to ZapZap are documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/2.0.0/).
6+
Every pull request or commit that changes the repository must add or update an
7+
entry under `Unreleased`, including internal, documentation, test, packaging,
8+
and workflow changes.
9+
10+
This mandatory record starts after version 7.4.1. The 7.4.1 entry below is the
11+
historical baseline; older release summaries remain available in the GitHub
12+
releases and the AppStream metadata.
13+
14+
## [Unreleased]
15+
16+
### Added
17+
18+
- Added this changelog as the mandatory source of truth for all project changes
19+
and additions.
20+
21+
## [7.4.1] - 2026-08-12
22+
23+
### Added
24+
25+
- Added an update indicator with release details and quick access to release
26+
notes and downloads.
27+
28+
### Changed
29+
30+
- Improved reliability when ZapZap is closed by the operating system.
31+
- Included performance improvements.
32+
33+
[Unreleased]: https://github.com/rafatosta/zapzap/compare/7.4.1...HEAD
34+
[7.4.1]: https://github.com/rafatosta/zapzap/releases/tag/7.4.1

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ Every contribution helps keep ZapZap free, maintained, and continuously improvin
7575

7676
Architecture, maintenance procedures and automated-test instructions are
7777
available in the [technical documentation](docs/README.md).
78+
All project changes and additions are recorded in the
79+
[changelog](CHANGELOG.md).
7880

7981
## License
8082
ZapZap is licensed under the GNU General Public License v3.0 or later. See [LICENSE](LICENSE) for the full license text.

docs/README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Inventário de documentos técnicos:
3131

3232
| Assunto | Fonte de verdade |
3333
|---|---|
34+
| Alterações e histórico de versões | `CHANGELOG.md` |
3435
| Pacotes distribuídos | `pyproject.toml`, seção `tool.setuptools.packages` |
3536
| Arquitetura e responsabilidades | `docs/architecture.md` |
3637
| Configurações persistidas | classes de domínio em `zapzap/core/config/settings/` |
@@ -40,7 +41,13 @@ Inventário de documentos técnicos:
4041
| Testes automatizados | `tests/test_*.py` |
4142
| Builds e releases | `.github/workflows/` e `.github/packaging/` |
4243

43-
## Regra de atualização
44+
## Regras de atualização
45+
46+
Toda mudança ou adição ao repositório deve atualizar obrigatoriamente a seção
47+
`Unreleased` de `CHANGELOG.md` no mesmo commit ou pull request. Essa exigência
48+
também se aplica a documentação, testes, manutenção interna, dependências,
49+
empacotamento e workflows; o histórico Git e as notas geradas pelo GitHub não
50+
substituem o registro curado.
4451

4552
Uma alteração estrutural não está completa sem atualizar esta documentação.
4653
Isso inclui adicionar, remover, renomear ou mover pacotes, funcionalidades,

docs/architecture.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ arquitetura no nome final do artefato.
395395

396396
| Caminho | Conteúdo |
397397
|---|---|
398+
| `CHANGELOG.md` | fonte obrigatória de todas as mudanças e adições do projeto |
398399
| `zapzap/` | código Python distribuído e catálogos `.mo` de runtime |
399400
| `tests/` | testes `unittest`, fixture Qt e verificações estáticas |
400401
| `docs/` | documentação técnica e contratos de manutenção |

docs/maintenance.md

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ dados reais para testes destrutivos de conta, cache ou configurações.
2727
legadas.
2828
5. Considere Linux/Flatpak, Linux nativo, Windows e macOS quando a mudança tocar
2929
integração de sistema.
30+
6. Planeje a entrada correspondente em `CHANGELOG.md`; nenhuma mudança ou
31+
adição está dispensada desse registro.
3032

3133
## Matriz de impacto
3234

@@ -261,6 +263,36 @@ Repita para cada catálogo alterado e gere os `.mo` que o pacote distribui.
261263
mascarar um import anterior por monkeypatch posterior.
262264
- Consulte `docs/memory-benchmark.md` para cenários, schema e interpretação.
263265

266+
## Registro obrigatório de mudanças
267+
268+
`CHANGELOG.md`, na raiz do repositório, é a fonte de verdade do histórico do
269+
ZapZap. Toda mudança ou adição deve atualizar a seção `Unreleased` no mesmo
270+
commit ou pull request. A regra inclui funcionalidades, correções, mudanças de
271+
comportamento, documentação, testes, refatorações, dependências, ferramentas,
272+
empacotamento e workflows.
273+
274+
Use as categorias `Added`, `Changed`, `Deprecated`, `Removed`, `Fixed` e
275+
`Security`. Escreva entradas curtas que expliquem o efeito da mudança; para
276+
trabalho interno, descreva o impacto na manutenção, confiabilidade, desempenho
277+
ou processo de entrega. Não copie o `git log` e não considere commits, pull
278+
requests ou notas automáticas do GitHub substitutos do changelog.
279+
280+
Ao preparar uma release:
281+
282+
1. revise todas as entradas acumuladas desde a versão anterior;
283+
2. transforme `Unreleased` em uma seção com versão e data no formato
284+
`YYYY-MM-DD`;
285+
3. crie uma nova seção `Unreleased` vazia;
286+
4. atualize os links de comparação no final do arquivo;
287+
5. use a seção da versão como base para as notas do GitHub Release.
288+
289+
O bloco `<releases>` de
290+
`share/metainfo/com.rtosta.zapzap.appdata.xml` existe somente para a publicação
291+
no Flathub. Ele não é a fonte do histórico e não precisa ser atualizado a cada
292+
mudança. Na preparação de uma release do Flatpak, atualize-o manualmente com um
293+
resumo curto e voltado ao usuário, derivado das entradas de `CHANGELOG.md`
294+
acumuladas entre a versão anterior e a nova.
295+
264296
## Contrato de documentação estrutural
265297

266298
Toda alteração estrutural deve atualizar os documentos no mesmo commit ou pull
@@ -334,10 +366,12 @@ Workflows mantidos:
334366
- `release-deploy.yml`
335367
<!-- structure-check:workflows:end -->
336368

337-
Antes de uma release, revise a versão em `zapzap/__init__.py`, metadados
338-
AppStream em `share/metainfo/`, artefatos desktop/ícone, catálogos compilados e
339-
histórico real de mudanças. Valide XML/AppStream e o manifesto Flatpak com as
340-
ferramentas disponíveis; avisos do Flathub podem bloquear a publicação.
369+
Antes de uma release, revise a versão em `zapzap/__init__.py`, consolide a
370+
seção correspondente de `CHANGELOG.md` e verifique artefatos desktop/ícone e
371+
catálogos compilados. Quando houver publicação no Flathub, produza manualmente
372+
um resumo do changelog no bloco `<releases>` dos metadados AppStream em
373+
`share/metainfo/`; valide então XML/AppStream e o manifesto Flatpak com as
374+
ferramentas disponíveis, pois avisos do Flathub podem bloquear a publicação.
341375

342376
No AppImage, o nome publicado deve ser definido antes da geração do arquivo
343377
`.zsync`. O script de geração fornece o basename final ao `quick-sharun` pela
@@ -371,5 +405,6 @@ publicação de cada release.
371405
- [ ] `python tests/check_unused_code.py --packages-only` passa;
372406
- [ ] `python -m compileall -q zapzap tests tools run.py` passa;
373407
- [ ] `git diff --check` passa;
408+
- [ ] toda mudança ou adição foi registrada em `CHANGELOG.md`;
374409
- [ ] documentação estrutural e inventários foram atualizados;
375410
- [ ] foi feita validação gráfica real quando `offscreen` não é suficiente.

docs/testing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ documente o que ele protege.
8585
| `test_deeplink.py` | validação de URLs WhatsApp e resistência a injeção de script |
8686
| `test_desktop_application_dbus.py` | interface `org.freedesktop.Application` e ativação D-Bus |
8787
| `test_dictionary_options.py` | descoberta dinâmica, nomes amigáveis, ordenação, redimensionamento e fallback de dicionários personalizados |
88-
| `test_documentation_structure.py` | camadas de UI e sincronização entre árvore, inventários técnicos e guia para agentes |
88+
| `test_documentation_structure.py` | camadas de UI, contrato mínimo do changelog e sincronização entre árvore, inventários técnicos e guia para agentes |
8989
| `test_donations_page.py` | URLs HTTPS oficiais, fallback externo, cartões responsivos/acessíveis, troca imediata de idioma e rota única pela sidebar, Configurações e Sobre |
9090
| `test_external_link_lifecycle.py` | descarte da página WebEngine transitória após abrir links externos |
9191
| `test_gpu_environment.py` | detecção multi-GPU, conectores e seleção de render node |

tests/test_documentation_structure.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
TESTING_PATH = DOCS_ROOT / "testing.md"
1818
DOCS_INDEX_PATH = DOCS_ROOT / "README.md"
1919
AGENT_GUIDE_PATH = REPOSITORY_ROOT / "AGENTS.md"
20+
CHANGELOG_PATH = REPOSITORY_ROOT / "CHANGELOG.md"
2021

2122

2223
def documented_inventory(path: Path, name: str) -> list[str]:
@@ -103,6 +104,7 @@ def test_maintenance_entry_points_are_documented(self):
103104
def test_agent_guide_points_to_the_maintenance_contract(self):
104105
guide = AGENT_GUIDE_PATH.read_text(encoding="utf-8")
105106
for required_reference in (
107+
"CHANGELOG.md",
106108
"docs/README.md",
107109
"docs/architecture.md",
108110
"docs/maintenance.md",
@@ -112,6 +114,10 @@ def test_agent_guide_points_to_the_maintenance_contract(self):
112114
with self.subTest(reference=required_reference):
113115
self.assertIn(required_reference, guide)
114116

117+
def test_changelog_keeps_an_unreleased_section(self):
118+
changelog = CHANGELOG_PATH.read_text(encoding="utf-8")
119+
self.assertIn("## [Unreleased]", changelog)
120+
115121

116122
if __name__ == "__main__":
117123
unittest.main()

0 commit comments

Comments
 (0)