Skip to content

Corrigir enforcement fail-closed de licença no lib-commons/v5 #465

@gandalf-at-lerian

Description

@gandalf-at-lerian

Contexto

O lib-license-go chama shutdownManager.Terminate(...) quando a validação de licença falha, mas o handler default do lib-commons/v5 hoje é fail-open: ele registra ASSERTION FAILED: LICENSE VALIDATION FAILED e não encerra o processo.

Isso permite que serviços subam mesmo após falha de licença, especialmente quando o modo global depende da validação de startup e não revalida licença por request.

Evidência

  • Commit que introduziu o comportamento no lib-commons: 1e12ac1a (feat: unify lib-uncommons baseline into lib-commons v4 (#336))
  • O DefaultHandler deixou de chamar os.Exit(1) e passou a usar apenas assert.Never(...)
  • O lib-license-go herdou o comportamento ao consumir lib-commons/v5 v5.0.2
  • Em runtime, o log mostra falha de licença, mas o processo continua executando

Problema

O contrato esperado de fail-closed não está sendo cumprido. WithFailClosed() também é ambíguo/perigoso nesse estado, porque o nome sugere encerramento ou bloqueio efetivo, mas o comportamento atual apenas loga/asserta.

Ajuste esperado

  • Garantir que falha de validação de licença em modo fail-closed encerre o processo ou retorne erro fatal para o bootstrap
  • Não depender do handler default de Terminate() para enforcement crítico
  • Em modo global, não liberar requests se a validação de startup falhou
  • Revisar o contrato/nome de WithFailClosed() para refletir comportamento real
  • Adicionar teste cobrindo falha de licença sem handler customizado, garantindo que o comportamento default não seja fail-open

Requested by: Marcelo Rangel (Slack)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions