Skip to content

[P3][licensing-ux] msg FeatureTierBlocked sugere 'set effective_tier', mas é ignorado em enforced (a runtime audita 'no effect') — remediação enganosa #932

Open

Description

@FabioLeitao

Contexto — nasceu do teste #1 (completão "1ª rodada SEM licença")

Fail-closed validado e correto: mode: enforced sem licença → cai pra Community (tier_fail_closed ... detail=missing_public_key), Community liberado (scan_filesystem, detector_cpf), Pro bloqueado (connector_powerbi, ocr_images) com FeatureTierBlockedError. Audit trail LICENSE_AUDIT action=feature_denied/tier_fail_closed presente — ótimo pra compliance. ✅

O atrito — remediação enganosa na mensagem

  • Empírico (processo fresco, sem o singleton cache): mode=open → Pro ALLOWED (bypassa ✅); enforced + licensing.effective_tier=pro → ainda BLOCKED.
  • By design e correto: core/licensing/runtime_feature_tier.py:15 — "effective_tier from YAML is ignored in enforced mode"; :114 audita detail="licensing.effective_tier has no effect in enforced mode". Security-positivo: não dá pra auto-conceder Pro editando config em enforced.
  • Defeito = só a MENSAGEM: core/licensing/feature_gate.py:59 (mostrada SÓ em enforced, onde o block ocorre) diz "Upgrade your subscription or set licensing.effective_tier in lab config" — exatamente o caminho que a runtime audita como no-op. As duas camadas se contradizem.

3 eixos

(a) graciosa ✅ · (b) msg enganosa ⚠️ (sugere remediação não-funcional no modo em que aparece) · (c) caminho sugerido não resolve; resolução real = licença JWT válida.

Fix (pequeno, doc/UX — NÃO mexe no enforcement)

feature_gate.py:56-60: escopar a dica por modo —

  • enforced: "requires Pro tier; provide a valid license (JWT dbtier). effective_tier não se aplica em enforced."
  • mencionar effective_tier só como simulação de open/lab mode.

Prioridade

P3 — UX de licença comercial. NÃO bloqueia o gate e o comportamento de segurança está correto (fail-closed sólido). Polish de consistência interna.

Activity

  1. FabioLeitao commented on Jul 20, 2026

    @FabioLeitao
    CollaboratorAuthor

    Sinal forte de trabalho ativo na área, não confirma o bug específico

    effective_tier aparece 23x, incluindo runtime_feature_tier.py e feature_gate.py — trabalho substancial na área de tier enforcement. Não confirmei se a mensagem enganosa específica (sugerir "set effective_tier" quando é ignorado em modo enforced) foi corrigida.

    Verificado via A.I.I.D.C.O.B.P.P. v1.4 — Claude (Sonnet 5), auditor externo.

  2. self-assigned this
    on Aug 20, 2026
  3. FabioLeitao commented on Aug 27, 2026

    @FabioLeitao
    CollaboratorAuthor

    Nota de fronteira entre repos (auditor read-only).

    Doutrina do operador (2026-08-27) sobre onde cada camada de licenciamento vive:

    camada dono
    emissão de licença — assinar, revogar, distribuir license-studio
    guard interno — consumir a licença e barrar a feature cada bestial, no próprio código

    ⚠️ lang-agnostic é requisito, não detalhe: o bestiário é poliglota (Rust, Python, …), então o guard não pode depender de uma lib Python — precisa ser contrato verificável em qualquer linguagem.

    Consequência para esta issue: ela não é caso de re-target. O enforcement descrito aqui é do data-boar; a semântica do que foi emitido é do license-studio. É trabalho de fronteira, e a recomendação é registrar essa divisão aqui em vez de mover a issue.

    Contexto: varredura de issues abertas que nasceram antes das bestiais existirem, quando ainda não se sabia se a capacidade seria embarcada, sidecar, ou outra coisa. Decisão do operador.

  4. added this to the v1.8.4 milestone on Aug 29, 2026
  5. added theissue type on Aug 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

P3Low — backlog / nice-to-have

Type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions