Skip to content

Latest commit

 

History

History
187 lines (142 loc) · 7.64 KB

.template.md

File metadata and controls

187 lines (142 loc) · 7.64 KB

[RFC-XXX] Título da RFC

Data Referências Colaborações
10 de janeiro, 2022 @pessoa_1 @pessoa_2 @pessoa_3 @pessoa_4

Sumário: Resumo curto de uma ou duas sentenças sobre a proposta.

A RFC começa com um breve resumo. Esse seção deve ter um ou dois parágrafos que apenas explicam qual vai ser o objetivo da RFC, mas sem entrar em muitos detalhes do "porque", "porque não", "como", etc. Qualquer pessoa que abrir esse documento deve ter uma entendimento claro de qual que é a itenção da RFC só de ler esse(s) parágrafos.

Histórico

A próxima seção é a seção de "Histórico". Esse seção deve ter pelo menos dois parágrafos e pode se extender a até uma página inteira em alguns casos. O objetivo da seção de histórico é: como um pessoa nova ao projeto eu consigo ler a seção de histórico e qualquer link presente e ter todo o contexto do porquê esse mudança é necessária?

Se você não consegue mostrar para uma pessoa aleatória a seção de histórico e fazer com que ela obtenha quase todo o contexto do porquê essa RFC é necessária, então a seção de histórico não está suficientemente completa. Para ajudar, coloque links para outras RFCs, discussões e outros conteúdos necessários para providenciar contexto sem que você tenha que simplemente repetir.

Proposta

A próxima seção necessária é a "Proposta" ou "Objetivo". Dado o histórico acima, essa seção propõe a solução. Essa parte deve ser uma visão geral do "como será feito" da solução, mas para mais detalhes outras seções serão utilizadas.

Ideias Abandonadas (Opcional)

A medida que a RFC evolui, é comum que ideias sejam abandonadas. Ao invés de simplemente apagar elas do documento, você deveria tentar organiza-las em sub-seções para deixar claro que elas foram abandonadas e, ao mesmo tempo, explicar porquê elas foram abandonadas.

Ao compartilhar a RFC ou quando alguém for ler a RFC no futuro, é comum seguir o mesmo caminho e cair nas mesmas armadilhas que foram aprendidas no processo. Ideias abandonadas são uma forma de reconhecer esses caminhos e explicar as armadilhas e o porquê da ideia ter sido adandonada.

Outras Seções

Desse ponto em diante, as seções e cabeçalhos não possuem um formato específico e ficam a critério das pessoas que estão escrevendo a RFC. Seções são marcadas com nível 2 de cabeçalho (## Cabeçalho 2). Tente organizar suas informações em seções auto-sufcientes que respodam alguma pergunta importante, e ordene as suas seções de forma que o conhecimento necessário seja acumulado (ao invés de forçar a pessoa que esteja lendo a pular entre seções para adquirir contexto).

Seções geralmente são geralmente divididas em sub-seções estilizadas com ### Cabeçalho 3. Essas sub-seções ajudam a organizar ainda mais as informações para auxiliar a leitura e discussão.

Implementação (Exemplo)

Muitas RFCs tem uma seção de "implementação" que detalha como implementação será feita. Esse seção deve explicar uma visão de mudanças de API (internas ou externas), mudanças em pacotes, etc. O objetivo é dar uma ideia para as pessoas que estão revisando de quais sub-sistemas precisam ser alterados e área de impacto dessas mudanças.

Esse conhecimento pode gerar recomendações de formas alternativas de implementação que talvez sejam mais idiomáticas ao projeto or que resulte em menos mudanças. Or então pode resultar no entendimento de que a solução proposta nessa RFC é muito complexa para o problema que está tentando ser resolvido.

Para as pessoas que estão criando a RFC, detalhar e escrever a implementação em um nível mais alto pode server como uma forma de "debug com pato de borracha" e pode identificar muitos problemas comuns ou até problemas que nem sabemos que não sabemos antes mesmo de escrever qualquer linha de código.

UX (Exemplo)

Se essa RFC possue mudanças que irão impactar usuários(as), é importante ter uma seção de "UI/UX". Mudanças que impactam usuários(as) incluem mudanças de API expostas externamente, mudanças no formato de arquivos de configuração, mudanças de saída na linha de comando, etc.

Essa seção é efetivamente a seção de "implementação" para a experiência do(a) usuário(a). O objetivo é explicar as mudanças necessárias, qualquer impacto em relação a compatibilidade com versões anteriores, qualquer impacto no fluxo de trabalho, etc.

Como a pessoa que está revisando a RFC, essa seção deve ser analisada para verificar se as mudanças propostas se encaixam na experiência estabelecida pelo projeto. Por exemplo, se a mudança de UX está propondo um argumento -foo_bar mas todos os outros argumentos usam hífens, como -foo-bar, então essa é uma mudança que merece ser discutida em um comentário. Além do mais, se as quebras de compatibilidade não são toleráveis or existe uma forma de fazer a mudança preservando a compatibilidade, essas opções devem ser exploradas.

Estilos do Texto

Todas as RFCs devem seguir um estilo e estrutura similar para facilitar a leitura.

Markdown

As RFCs são escritas em formato Markdown seguindo a sintaxe do GitHub. Cada linha no arquivo deve ter menos de 80 caracteres para facilitar a leitura em modo texto e comentários durante a revisão da PR.

Estilos de Cabeçalho

## Cabeçalho 2 dever ser utilizado para títulos de seções. Não use # Cabeçalho 1.

### Cabeçalho 3 deve ser usado para sub-seções.

Os próximos estilos de cabeçalho podem ser utilizados para seções mais aprofundadas, mas é raro quem uma RFC vá além do #### Cabeçalho 4, ou que até chegue no #### Cabeçalho 4.

Listas

Ao criar listas, é comum que a primeira frase/sentença/paralavra esteja em negrito para dar atenção à algum ponto ou categoria. Por exemplo, uma lista de considerações para uma API:

  • Formato deve ser widget
  • Protocolo deve ser widget-rpc
  • Compatibilidade com outras versões deve ser considerada

Blocos de Código

Blocos de código devem usar três crases seguidas e realce de sintaxe quando necessário. Por exemplo:

```hcl
module "meu_modulo" {
  # ...
}
```

Irá gerar o bloco:

module "meu_modulo" {
  # ...
}

Imagens e outros artefatos

Durante a criação da RFC é comum que sejam usadas imagens e outros artefatos para facilitar a descrição de certas partes da proposta. Esses arquivos podem ser colocados em sub-pastas dentro da pasta raíz da RFC.

A imagem então pode ser referenciada no arquivo Markdown usado um texto alternativo e o caminho relativo para o arquivo:

![texto alternativo](img/arquivo.png)

Se uma imagem for gerada a partir de um arquivo fonte (como um arquivo .psd do Photoshop), esses também deverão ser colocados no repositório afim de possibilitar o acesso público à fonte e possíveis alterações ou derivações do trabalho original. Esses arquivos devem fircar em uma sub-pasta chamada src dentro da pasta da RFC.

rfcs
└── RFC-001
    ├── img
    │   └── infra-azure.png
    ├── RFC-001.md
    └── src
        └── azure.drawio