sdd-layer 0.25.2

Spec-Driven Development CLI and agent harness
# ─── SDD Bot — Configuração ────────────────────────────────────────────────────
# Copie este arquivo para .sdd/bot/sdd-bot.config.yaml e preencha os valores.
# ATENÇÃO: sdd-bot.config.yaml deve estar no .gitignore (contém segredos).
# Execute: sdd bot install — para gerar interativamente com validação.

slack:
  # Nome da sessão/workspace do projeto (ex: cijira).
  # As 4 primeiras letras viram prefixo dos canais:
  #   <prefix>-comandos  → canal de entrada de comandos (ex: ciji-comandos)
  #   <prefix>-logs      → canal privado de auditoria (somente admins, ex: ciji-logs)
  #   <prefix>-tasks     → grupo que contém os canais de cards ativos (ex: ciji-tasks)
  # O prefixo também nomeia branches e worktrees gerados pelo bot.
  # Mínimo de 4 caracteres; evite espaços e caracteres especiais.
  session_name: "cijira"

  # Token do Bot (xoxb-...) — gerado em OAuth & Permissions → Install App.
  # Escopos mínimos necessários: channels:manage, chat:write, files:write,
  # groups:write, users:read — veja a tabela completa no README.
  bot_token: "xoxb-..."

  # Token de nível de app para Socket Mode (xapp-...).
  # Gerado em Settings → Basic Information → App-Level Tokens.
  # Escopo necessário: connections:write.
  app_token: "xapp-..."

bot_policy:
  # Usuários Slack autorizados a aprovar/reprovar gates pelo bot.
  # Também configure os mesmos IDs em sdd.config.yaml > approvers.slack.
  allowed_slack_approvers: []

  # Admins podem usar os mesmos comandos de aprovação e retomada.
  admin_user_ids: []

  # Limites seguros para chamadas do CLI SDD disparadas pelo bot.
  max_workflow_iterations: 3
  command_timeout_ms: 300000

  # V1 supervisionada: unattended permanece desligado por padrão.
  allow_unattended: false
  default_through: "review" # execution | review | memory

jira:
  # URL base do workspace Jira, sem trailing slash.
  base_url: "https://<workspace>.atlassian.net"

  # Chave do projeto Jira onde os cards serão criados (ex: PROJ, SDD, DEV).
  project_key: "PROJ"

  # Nome exato da coluna de backlog/ideia (primeira coluna do board).
  # O bot cria o card nessa coluna com status "/bloqueado".
  backlog_column: "Ideia/Backlog"

  # Token de API Jira — gerado em id.atlassian.com → Manage profile → Security.
  api_token: "..."

  # E-mail do usuário Jira associado ao token acima.
  user: "usuario@empresa.com"

github:
  # Repositório onde Issues, PRs e Actions serão usados pelo adapter GitHub.
  owner: "<org-ou-user>"
  repo: "<repo>"
  base_branch: "main"

  auth:
    # Caminho recomendado: GitHub App com installation token gerado em runtime.
    # Guarde a private key fora do repo e aponte por env ou path local secreto.
    app_id: "<github-app-id>"
    installation_id: "<installation-id>"
    private_key_env: "GITHUB_APP_PRIVATE_KEY"
    # Fallback simples para dev interno: defina GITHUB_TOKEN ou GH_TOKEN no ambiente.
    token_env: "GITHUB_TOKEN"

  project:
    # GitHub Projects v2. Use `id` quando já souber o node ID; caso contrário
    # informe owner_type/owner/number para o provider resolver via GraphQL.
    owner_type: "organization" # organization | user
    owner: "<org-ou-user>"
    number: 1
    # id: "PVT_kw..."
    field_mapping:
      status_field_id: ""
      todo_option_id: ""
      in_progress_option_id: ""
      done_option_id: ""

  webhook_secret_env: "GITHUB_WEBHOOK_SECRET"
  webhook:
    # Receiver HTTP opcional para webhooks GitHub. Também pode ser ativado por
    # SDD_GITHUB_WEBHOOK_PORT sem editar este arquivo.
    enabled: false
    port: 8787
    path: "/github/webhook"
  # Resiliência HTTP do provider GitHub.
  request_timeout_ms: 10000
  max_attempts: 3
  retry_base_delay_ms: 250
  labels:
    - "sdd"

bitbucket:
  # Workspace do Bitbucket (aparece na URL: bitbucket.org/<workspace>/<repo>).
  workspace: "<workspace>"

  # Slug do repositório onde os worktrees e branches serão criados.
  repo_slug: "<repo>"

  # Branch pai de todos os worktrees criados pelo bot (padrão: homolog).
  # O bot faz checkout dessa branch antes de criar cada worktree de card.
  base_branch: "homolog"

  # API token com scopes — gerado em id.atlassian.com → Security → API tokens →
  # "Create API token with scopes". App: Bitbucket. Scopes: Repositories Read+Write,
  # Pull requests Read+Write, Account Read. (App passwords estão sendo descontinuados.)
  # O 'sdd bot install' grava este token no remote git via x-bitbucket-api-token-auth.
  app_password: "ATATT..."

  # E-mail da conta Atlassian. Usado na REST API; no git o username é o estático
  # x-bitbucket-api-token-auth (configurado automaticamente pelo instalador).
  user: "usuario@empresa.com"

integrations:
  # Use jira/bitbucket para o fluxo Atlassian legado ou github/github para
  # GitHub Issues + Projects v2 + Pull Requests + Actions.
  work_tracker: "jira" # jira | github
  repo: "bitbucket"    # bitbucket | github | git

llm:
  # Provider do modelo de linguagem utilizado pelo bot para gerar artefatos.
  # Valores aceitos: anthropic | openai | ollama
  provider: "anthropic"

  # Modelo padrão para geração de artefatos SDD (idea, risk-classification).
  # O bot usa automaticamente o modelo mais leve (haiku) para títulos de card.
  # Exemplos: claude-sonnet-4-5, gpt-4o, llama3
  model: "claude-sonnet-4-5"

  # Anthropic API Key — gerada em console.anthropic.com → API Keys.
  # Obrigatório quando provider = anthropic.
  api_key: "sk-ant-..."

  # OpenAI API Key (somente quando provider = openai).
  # openai_api_key: "sk-..."

  # URL base do servidor Ollama (somente quando provider = ollama).
  # ollama_base_url: "http://localhost:11434"

sdd:
  # Pasta raiz dos worktrees, relativa à raiz do projeto SDD.
  # Cada card cria um worktree em <worktrees_root>/<card-id> (ex: .worktree/PROJ-42).
  # Certifique-se de que o caminho está no .gitignore do repositório.
  worktrees_root: ".worktree"