Skip to content

Referência do standcast.yml ​

O Standcast lê toda a configuração de um arquivo só: o standcast.yml na raiz do repositório .github da organização (ou da conta pessoal), na branch padrão. Não existe outro lugar para configurar os times.

Todo exemplo yaml desta página passa pelo parser de verdade quando a documentação é gerada.

Exemplo mínimo ​

yaml
teams:
  - name: backend
    timezone: America/Sao_Paulo
    remind_at: "09:30"
    digest_at: "10:00"
    language: pt-BR
    managers: [alice]
    members: [alice, bob]
    chat:
      provider: slack
      channel: "#daily-backend"

Exemplo completo ​

yaml
teams:
  - name: backend
    timezone: America/Boa_Vista
    workdays: [mon, tue, wed, thu, fri]
    remind_at: "09:30"
    digest_at: "10:00"
    language: pt-BR
    managers: [felipeoliveira]
    members: [alice, bob]
    chat:
      provider: slack
      channel: "#daily-backend"
    tracker:
      provider: linear
      team: BE
    signals:
      pr_review_hours: 48
      card_stale_days: 5
      direct_message: false
members:
  alice: { slack: U0123, linear: alice@acme.com }

Nível de cima ​

ChaveTipoObrigatóriaPadrãoDescrição
teamslista de timessimPelo menos um time. Os nomes dos times têm que ser únicos.
membersmapa de login do GitHub para identidadesnão{}Mapeamento manual de identidades. Veja Mapeamento de identidades.

Nenhuma outra chave é aceita. Uma chave desconhecida falha na validação com Unrecognized key.

Chaves do time ​

ChaveTipoObrigatóriaPadrãoExemplo
nametexto, não vaziosimbackend
timezonefuso IANAsimAmerica/Sao_Paulo
workdayslista de mon tue wed thu fri sat sun, pelo menos umnão[mon, tue, wed, thu, fri][mon, tue, wed, thu]
remind_atHH:MM, 24 horassim"09:30"
digest_atHH:MM, 24 horassim"10:00"
languageen ou pt-BRnãoenpt-BR
managerslista de logins do GitHub, pelo menos umsim[felipeoliveira]
memberslista de logins ou times do GitHub, pelo menos umsim[alice, "@acme/backend"]
chat.providerslack ou google-chatsimslack
chat.channeltexto, não vaziosim"#daily-backend"
tracker.providerlinear ou jiranãolinear
tracker.teamtexto, não vaziocom trackerBE
signals.pr_review_hoursnúmero maior que 0não4824
signals.card_stale_daysnúmero maior que 0não53
signals.direct_messagetrue ou falsenãofalsetrue

name ​

O nome do time, como aparece no título do consolidado, na API e nas tools do MCP. Tem que ser único no arquivo. Renomear um time começa um histórico novo com o novo nome.

timezone ​

Um nome de fuso IANA, como America/Sao_Paulo, Europe/Lisbon ou UTC. Abreviações como BRT e nomes de cidade como Brasilia são recusados.

workdays ​

Os dias em que o time tem daily, com os nomes em inglês. Os consolidados só saem nesses dias. Uma daily enviada em outro dia conta para o próximo dia útil.

remind_at ​

O horário local do lembrete, enviado por mensagem direta no Slack, em dias úteis, para quem ainda não enviou a daily. No máximo um por pessoa por dia. Ele tem que ser antes do digest_at, senão o arquivo é inválido. Veja Como funciona.

digest_at ​

O horário local em que o consolidado é publicado. Use aspas ("10:00") para manter o valor como texto. Use dois dígitos na hora: "09:00", não "9:00".

language ​

O idioma do consolidado e das dailies atrasadas publicadas na thread dele: en ou pt-BR. Sem essa chave, o time usa inglês. Ela não muda o que as pessoas escreveram: as dailies nunca são traduzidas.

managers ​

Logins do GitHub dos gestores do time. Gestores leem os consolidados, as dailies e os impedimentos do time pelas tools de gestor do MCP. Admins da organização leem todos os times sem precisar estar listados. Impedimentos sem outra pessoa para encaminhar vão para os gestores.

Cada item precisa ser um login simples. Nomes que começam com @, como @acme/leads, não são aceitos: o Standcast não expande times do GitHub, então liste os logins um a um. Um item de time é rejeitado com um erro.

members ​

Quem escreve dailies neste time. Cada item é:

  • um login do GitHub, como alice; ou
  • um time do GitHub, escrito "@org/slug-do-time", como "@acme/backend". Use aspas, porque o YAML não aceita valor começando com @.

Os times do GitHub são resolvidos toda vez que o Standcast precisa do time, então as mudanças no GitHub valem sem editar o arquivo. O Standcast lê os 100 primeiros membros de cada time do GitHub. Os logins são comparados sem diferenciar maiúsculas e minúsculas.

Uma pessoa pode estar em vários times. A daily dela aparece no consolidado de cada time, e a data da daily usa o fuso e os dias úteis do primeiro time que a lista.

chat ​

Para onde vai o consolidado.

  • provider: slack. O parser aceita google-chat, mas ele ainda não é suportado: os consolidados desse time falham com unsupported_provider.
  • channel: o canal do Slack, como "#nome" (com aspas, porque # começa um comentário no YAML) ou como id do canal, por exemplo C0123456789. Num canal privado, convide o bot do Standcast antes. Veja Slack.

tracker ​

O gerenciador de projetos do time: provider (linear ou jira) e team (a chave do time).

text
tracker:
  provider: linear
  team: BE
  • provider: linear: o Standcast lê os cards do workspace do Linear que um admin conectou na página de setup. team é a chave do time no Linear, como BE, e limita a atividade e os sinais a esse time do Linear. Veja Instalar.
  • provider: jira é aceito pelo parser, mas o Jira ainda vem em breve. A página de setup mostra um aviso e mais nada acontece.
  • Se um time usa o Linear e o Linear não está conectado, a página de setup avisa. Nada quebra: o rascunho só fica sem cards.

signals ​

Ajustes dos impedimentos sugeridos, que aparecem só para a pessoa a quem se referem:

  • pr_review_hours: um pull request seu, aberto e que não é rascunho, sem revisão há esse número de horas desde que ficou pronto para revisão. Padrão 48.
  • card_stale_days: um card seu no Linear em andamento há esse número de dias ou mais, contando de quando foi iniciado. Padrão 5. A sugestão é card_stale.
  • direct_message: com true, o impedimento sugerido também é enviado à pessoa por mensagem direta, uma vez por sugestão. Padrão false.

O CI falhando no commit head de um pull request conta depois de 24 horas, e não é configurável.

Times do GitHub ​

Use um time do GitHub em vez de listar as pessoas uma a uma. O app precisa da permissão Members (read), que ele pede na instalação.

yaml
teams:
  - name: platform
    timezone: Europe/Lisbon
    remind_at: "09:00"
    digest_at: "09:30"
    managers: [carol]
    members: ["@acme/platform", dave]
    chat:
      provider: slack
      channel: C0123456789

Vários times ​

Cada time tem canal, fuso e horários próprios. A Erin está nos dois times, então a data da daily dela segue o backend, o primeiro time que a lista.

yaml
teams:
  - name: backend
    timezone: America/Sao_Paulo
    remind_at: "09:30"
    digest_at: "10:00"
    language: pt-BR
    managers: [felipeoliveira]
    members: [alice, bob, erin]
    chat:
      provider: slack
      channel: "#daily-backend"
  - name: mobile
    timezone: America/New_York
    workdays: [mon, tue, wed, thu]
    remind_at: "08:45"
    digest_at: "09:15"
    managers: [frank]
    members: [erin, grace]
    chat:
      provider: slack
      channel: "#daily-mobile"

Mapeamento de identidades ​

O Standcast menciona as pessoas no Slack comparando o e-mail principal verificado da conta do GitHub com o e-mail do usuário no Slack. Quando os e-mails são diferentes, mapeie a pessoa à mão na chave members do nível de cima, pelo login do GitHub:

yaml
teams:
  - name: backend
    timezone: America/Sao_Paulo
    remind_at: "09:30"
    digest_at: "10:00"
    managers: [alice]
    members: [alice, bob]
    chat:
      provider: slack
      channel: "#daily-backend"
members:
  bob: { slack: U0456 }
ChaveUsada hojeValor
slacksimId de membro no Slack, como U0456. No Slack, abra o perfil da pessoa, clique nos três pontos e em Copiar ID de membro.
google_chatem breveUsuário do Google Chat
linearsimE-mail da pessoa no Linear. Opcional: sem ele, o Standcast usa o e-mail principal verificado do GitHub. Precisa ser um e-mail
jiraem breveConta no Jira

Um mapeamento slack vale a partir do próximo consolidado, mesmo para quem nunca entrou. Quem não tem mapeamento é ligado pelo e-mail ao entrar com standcast login ou na página de setup. Se você conectar outro workspace do Slack, as ligações por e-mail são apagadas e refeitas no próximo login.

O e-mail linear tem prioridade sobre o e-mail do GitHub. As ligações com o Linear são feitas quando a pessoa entra, logo depois de o Linear ser conectado, e sempre que o standcast.yml muda, inclusive para quem está num time por um time do GitHub (@org/time). O Standcast guarda o id do usuário no Linear, nunca o e-mail. Se você conectar outro workspace do Linear, as ligações com o Linear são apagadas.

Erros de validação comuns ​

Estas são as mensagens que a página de setup mostra, no formato caminho: mensagem. As mensagens são em inglês. teams.0 é o primeiro time, teams.1 o segundo, e assim por diante.

MensagemCausaComo resolver
teams.0.digest_at: must be HH:MM (24h)Um horário como "9:30", "10h" ou "25:00"Use dois dígitos e 24 horas: "09:30"
teams.0.digest_at: Invalid input: expected string, received undefinedFalta o digest_at (o mesmo vale para remind_at, timezone e name)Adicione a chave
teams.0.timezone: unknown IANA timezoneBrasilia, BRT, GMT-3Use um nome como America/Sao_Paulo
teams.0.workdays.0: Invalid option: expected one of "mon"|"tue"|"wed"|"thu"|"fri"|"sat"|"sun"monday, Mon, segUse as três letras minúsculas em inglês
teams.0.workdays: Too small: expected array to have >=1 itemsworkdays: []Liste pelo menos um dia, ou remova a chave
teams.0.language: Invalid option: expected one of "pt-BR"|"en"pt, pt_BR, portuguesUse pt-BR ou en
teams.0.chat.provider: Invalid option: expected one of "slack"|"google-chat"teams, SlackUse slack
teams.0.members: Too small: expected array to have >=1 itemsmembers: [] (o mesmo vale para managers)Liste pelo menos uma pessoa
teams.0.managers.0: managers must be GitHub logins, not teams or @-prefixed namesmanagers: ["@acme/leads"]Liste os logins, como [alice, bob]
teams.0: Unrecognized key: "reminder"Uma chave escrita errado ou desconhecidaConfira a chave nas tabelas acima
members.alice.slack: must be a Slack user id like U0123ABCDUm nome, um e-mail, um id de canal ou <!channel>Use o id de membro, que começa com U ou W
members.alice: Unrecognized key: "slak"Uma chave de identidade escrita erradoUse slack, google_chat, linear ou jira
teams.1.name: duplicate team name "backend"Dois times com o mesmo nomeRenomeie um deles
teams.0.signals.pr_review_hours: Too small: expected number to be >00 ou um número negativoUse um número positivo
teams: Too small: expected array to have >=1 itemsteams: []Adicione um time
: Invalid input: expected object, received nullO arquivo está vazioAdicione pelo menos um time
Uma mensagem de sintaxe do YAML com linha e colunaIndentação quebrada, [ ou aspas sem fecharCorrija o YAML nessa linha

Enquanto o arquivo estiver inválido, o Standcast continua usando a última versão válida até você corrigir. Veja Estados da configuração.