This repository was archived by the owner on Jul 10, 2026. It is now read-only.
Sprint 5: /usage retorna tokens reais (TKT-042) - #113
Merged
Conversation
O endpoint /api/v1/usage retornava total_tokens_input/output = 0 (// TODO). Agora soma prompt_tokens/completion_tokens de training_interactions do workspace. Usa query_scalar nao-macro (checado em runtime) para nao depender do cache .sqlx (sem necessidade de sqlx-cli/prepare). Verificacao local: cargo build (clean) + clippy -D warnings limpos; query SQL validada contra o schema do Postgres local. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcsaeS7c9zJ4vkNtxqBcnc
danzeroum
pushed a commit
that referenced
this pull request
Jun 22, 2026
…rator rejeitado) Investigacao revelou que varios apontamentos da auditoria estavam desatualizados e que ha codigo morto confundindo o crate `api`: - removidos 5 arquivos de rota ORFAOS no api (nao declarados em routes/mod.rs, zero refs): usage.rs, webhooks.rs, search.rs (duplicatas mortas das rotas reais que vivem no crate api-public) + chat.rs, feedback.rs (stubs que importavam `ai_orchestrator`, um nao-dependency — nem compilariam). Correcoes de entendimento (roadmap): - TKT-018/019 (linkar ai-orchestrator): REJEITADO. O crate e dead code para outra arquitetura (vLLM, RAG rag-searcher, tabela training_interactions, SSE proprio, sem basic-auth nem OLLAMA_MOCK). Linka-lo quebraria o chat atual + 11 testes. - TKT-020 (rag-searcher): REJEITADO (RAG do orchestrator); api::rag ja faz 4 estagios com rerank. - TKT-041 (Swagger): JA real (ApiDoc utoipa 40+ paths + SwaggerUi em /docs). - TKT-042 (usage tokens): o caminho VIVO (admin_service.get_usage_metrics, usado pelo dashboard via /api/admin/metrics) JA soma tokens de usage_events. O "0 // TODO" estava no api/routes/usage.rs MORTO (deletado). PR #113 editou esse arquivo morto — superado por esta remocao. Verificacao local: cargo build -p api -p api-public OK apos as remocoes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcsaeS7c9zJ4vkNtxqBcnc
danzeroum
added a commit
that referenced
this pull request
Jun 22, 2026
…ejeitado, Swagger/usage já reais) (#116) * docs: atualiza pendencias resolvidas nesta execucao (P-01, P-07) - P-01 vLLM vs Ollama: RESOLVIDO — runtime Ollama externo, ADR-001 atualizado; vLLM = profile GPU (depende de P-06). - P-07 Redis: RESOLVIDO (parcial) — redis no compose + throttle de login usa Redis; falta so confirmar recursos da VPS de producao. - P-09: remove referencia ao SHA antigo de main. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcsaeS7c9zJ4vkNtxqBcnc * chore(cleanup): remove rotas mortas do api + corrige roadmap (orchestrator rejeitado) Investigacao revelou que varios apontamentos da auditoria estavam desatualizados e que ha codigo morto confundindo o crate `api`: - removidos 5 arquivos de rota ORFAOS no api (nao declarados em routes/mod.rs, zero refs): usage.rs, webhooks.rs, search.rs (duplicatas mortas das rotas reais que vivem no crate api-public) + chat.rs, feedback.rs (stubs que importavam `ai_orchestrator`, um nao-dependency — nem compilariam). Correcoes de entendimento (roadmap): - TKT-018/019 (linkar ai-orchestrator): REJEITADO. O crate e dead code para outra arquitetura (vLLM, RAG rag-searcher, tabela training_interactions, SSE proprio, sem basic-auth nem OLLAMA_MOCK). Linka-lo quebraria o chat atual + 11 testes. - TKT-020 (rag-searcher): REJEITADO (RAG do orchestrator); api::rag ja faz 4 estagios com rerank. - TKT-041 (Swagger): JA real (ApiDoc utoipa 40+ paths + SwaggerUi em /docs). - TKT-042 (usage tokens): o caminho VIVO (admin_service.get_usage_metrics, usado pelo dashboard via /api/admin/metrics) JA soma tokens de usage_events. O "0 // TODO" estava no api/routes/usage.rs MORTO (deletado). PR #113 editou esse arquivo morto — superado por esta remocao. Verificacao local: cargo build -p api -p api-public OK apos as remocoes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcsaeS7c9zJ4vkNtxqBcnc --------- Co-authored-by: Claude <noreply@anthropic.com>
danzeroum
added a commit
that referenced
this pull request
Jun 22, 2026
…não ser verificável offline (#117) * docs: atualiza pendencias resolvidas nesta execucao (P-01, P-07) - P-01 vLLM vs Ollama: RESOLVIDO — runtime Ollama externo, ADR-001 atualizado; vLLM = profile GPU (depende de P-06). - P-07 Redis: RESOLVIDO (parcial) — redis no compose + throttle de login usa Redis; falta so confirmar recursos da VPS de producao. - P-09: remove referencia ao SHA antigo de main. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcsaeS7c9zJ4vkNtxqBcnc * chore(cleanup): remove rotas mortas do api + corrige roadmap (orchestrator rejeitado) Investigacao revelou que varios apontamentos da auditoria estavam desatualizados e que ha codigo morto confundindo o crate `api`: - removidos 5 arquivos de rota ORFAOS no api (nao declarados em routes/mod.rs, zero refs): usage.rs, webhooks.rs, search.rs (duplicatas mortas das rotas reais que vivem no crate api-public) + chat.rs, feedback.rs (stubs que importavam `ai_orchestrator`, um nao-dependency — nem compilariam). Correcoes de entendimento (roadmap): - TKT-018/019 (linkar ai-orchestrator): REJEITADO. O crate e dead code para outra arquitetura (vLLM, RAG rag-searcher, tabela training_interactions, SSE proprio, sem basic-auth nem OLLAMA_MOCK). Linka-lo quebraria o chat atual + 11 testes. - TKT-020 (rag-searcher): REJEITADO (RAG do orchestrator); api::rag ja faz 4 estagios com rerank. - TKT-041 (Swagger): JA real (ApiDoc utoipa 40+ paths + SwaggerUi em /docs). - TKT-042 (usage tokens): o caminho VIVO (admin_service.get_usage_metrics, usado pelo dashboard via /api/admin/metrics) JA soma tokens de usage_events. O "0 // TODO" estava no api/routes/usage.rs MORTO (deletado). PR #113 editou esse arquivo morto — superado por esta remocao. Verificacao local: cargo build -p api -p api-public OK apos as remocoes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcsaeS7c9zJ4vkNtxqBcnc * docs(rls): plano seguro de RLS (TKT-026) + prova no DB do isolamento Investigacao de RLS revelou um risco que impede habilitar ingenuamente: scoped_conn usa set_config('app.workspace_id', $1, FALSE) — nivel de SESSAO numa conexao do POOL. O valor persiste apos a conexao voltar ao pool; com RLS usando current_setting, uma query nao-scoped numa conexao reusada herdaria o workspace anterior -> vazamento/quebra cruzada. Nao da p/ verificar isso sem rodar o app sob concorrencia. Entrega (por integridade, plano + prova de DB em vez de migration arriscada): - docs/rls-plan.md: caminho seguro — (1) GUC transaction-local (SET LOCAL em transacao) em TODO caminho tenant; (2) migration estrita por tabela; (3) cleanup defensivo. Politica usa NULLIF(current_setting(...),'') p/ evitar erro de cast de string vazia apos RESET. - Prova no Postgres local (role nao-superuser): SET app.workspace_id=A ve so A, =B ve so B, unset/RESET -> 0 linhas sem erro. Valida a politica e o isolamento. Roadmap atualizado: TKT-026 = planejado + provado no DB, NAO habilitado no app. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AcsaeS7c9zJ4vkNtxqBcnc --------- Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TKT-042 — usage metering real
GET /api/v1/usageretornavatotal_tokens_input/output = 0(// TODO). Agora somaprompt_tokens/completion_tokensdetraining_interactionsdo workspace.query_scalarnão-macro (checado em runtime) → não depende do cache.sqlx, então compila sobSQLX_OFFLINEsem precisar desqlx-cli/prepareCOALESCE(SUM(...),0)::bigint→ seguro com tabela vaziaVerificação local
cargo build -p api(rebuild limpo) ✓ ·cargo clippy -p api -- -D warnings✓0|0em workspace vazio)🤖 Generated with Claude Code
Generated by Claude Code