Licença das contribuições: o ControlFS é licenciado sob AGPL-3.0-only. Ao enviar uma contribuição (código, documentação, testes, recursos), você concorda que ela seja licenciada sob os mesmos termos. Veja
docs/LICENSING.md. Contributions are accepted under AGPL-3.0-only.
- Instale o .NET SDK indicado em
global.json(10.0.401 ou patch mais novo da mesma banda). dotnet build ControlFS.slnxedotnet test ControlFS.slnxprecisam passar.- Versões de pacotes ficam em
Directory.Packages.props; ao mudar, atualize os lock files (dotnet restore) e registre uma decisão emdocs/decisions/se for mudança de stack.
Seguimos o Gitflow, com uma regra temporária:
Antes da 1.0 (fase atual): não existe
develop. PRs defeature/*ehotfix/*vão direto paramain; as versões são marcadas com tag namain. O modelo completo abaixo (comdeveloperelease/*) começa na primeira versão estável.
mainguarda só versões publicadas (cada commit tem tagvX.Y.Z).developintegra o que vai para a próxima versão.- Nova funcionalidade/correção comum:
feature/<issue>-<nome>a partir dedevelop→ pull request paradevelop. - Preparar versão:
release/X.Y.Za partir dedevelop(só correções, changelog e docs) → pull request paramain→ tag no merge emmain(publica a release) → merge demainde volta emdevelop. - Correção urgente:
hotfix/X.Y.Za partir demain→ pull request paramain→ tag → merge de volta emdevelop. - CI roda só nesses pontos: PR (build + testes), tag em
main(release: gera os pacotes e abre o app antes de publicar) e CodeQL emmain/semanal. PRs não geram pacotes. - Releases: PRs são mergeados conforme ficam prontos; a release só é publicada quando o mantenedor pede. As
versões ficam em
0.x.y-alpha.Naté o mantenedor decidir ir para a 1.0.
- Código, telas, estilos e recursos originais. Não copie de vTree/OmniConsole (GPL-3.0), Playnite, Aniki ReMake, TvLauncher ou outros aplicativos — estude comportamentos, implemente do zero.
- Telas usam apenas
InputAction; nada de checar botões de fabricante na UI. - Regras de segurança (nomes, contenção, conflitos, limites) ficam em Core/Infrastructure, nunca na view.
- Testes destrutivos só em diretórios temporários (
TempDir) — nunca em dados reais. - Não marque como suportado o que não tem teste. Atualize
docs/archive-support.md,docs/controller-compatibility.mdePROGRESS.mdcom resultados observados. - Senhas nunca em logs,
ToString(), arquivos ou argumentos de processo. - Warnings são erros (
TreatWarningsAsErrors).