Resposta à auditoria externa 2.0 (2026-05-18)¶
Status do documento: público, vivo. Cada linha cita evidência verificável (commit, arquivo, workflow, métrica Prometheus, política SOC 2). Onde não há evidência ainda, marcamos honestamente como
IN-PROGRESS,PLANNEDouACKNOWLEDGED. Não há item marcado RESOLVED sem link de evidência.Última atualização: 2026-07-03.
1. Metodologia¶
A auditoria entregou 100 alegações sobre o TELECOM-TOWER-POWER (TTP). Em vez de respondê-las no README, abrimos esta página com:
- Triagem em 6 categorias (legenda abaixo).
- Tabela claim → status → evidência/plano, item a item.
- Roadmap concreto (
IN-PROGRESS+PLANNED) com PR/issue quando já há. - Limitações reconhecidas (
ACKNOWLEDGED) sem disfarce — onde o auditor está tecnicamente certo e a posição do produto é honestamente "não fazemos isso e não pretendemos fazer no curto prazo".
Legenda de status¶
| Símbolo | Significado |
|---|---|
| ✅ RESOLVED | Implementado e em produção. Evidência reproduzível citada. |
| 🛠 IN-PROGRESS | Trabalho ativo em PR/branch. ETA dentro do trimestre. |
| 📋 PLANNED | No roadmap formal com janela trimestral. |
| ⚠️ ACKNOWLEDGED | Limitação real e aceita. Não pretendemos corrigir. Documentada. |
| 🚫 OUT-OF-SCOPE | Por design — fora do posicionamento (mid-market BR, não Tier-1 global). |
| ❌ DISPUTED | Alegação refutada com evidência. |
Resumo numérico¶
Contagens abaixo são derivadas das células das tabelas §2.1–§2.6 por
scripts/audit_matrix_summary.py(matriz CSV emdocs/audit/audit-100-matrix.csv). O CI workflowaudit-matrix-check.ymlfalha o PR se esta tabela divergir das células.
| Categoria | Qtde | % |
|---|---|---|
| ✅ RESOLVED | 19 | 19% |
| 🛠 IN-PROGRESS | 10 | 10% |
| 📋 PLANNED (Q3/Q4 2026) | 6 | 6% |
| ⚠️ ACKNOWLEDGED | 41 | 41% |
| 🚫 OUT-OF-SCOPE | 7 | 7% |
| ❌ DISPUTED | 17 | 17% |
| Total | 100 | 100% |
2. Tabela claim → evidência¶
2.1 Engenharia de RF / modelos (#1–#10, #20–#24, #29–#30, #49–#50)¶
| # | Alegação | Status | Evidência / plano |
|---|---|---|---|
| 1 | RMSE ML ridge 14.9 dB CV — impreciso para RF real | ⚠️ ACKNOWLEDGED | Documentado em operations/model-validation.md. Calibrado em drive-test BR (não global), faixa de mid-market. Métrica honesta no README, sem inflar. |
| 2 | SRTM 90m resolução baixa — falha em relevo complexo | 🛠 IN-PROGRESS | Bucket B do plano de auditoria. Migração para Copernicus GLO-30 (30 m) em srtm_elevation.py + srtm_prefetch.py. Issue interna: aud-b/dem30. |
| 3 | OpenCelliD crowdsourced — dados inexatos | ✅ RESOLVED (mitigado) | Pipeline load_opencellid.py + anatel_validator.py cruza com ANATEL Mosaico como fonte de verdade. OpenCelliD usado apenas como complemento, com prioridade ANATEL. |
| 4 | Sem ray-tracing 3D — inadequado urbano | 🚫 OUT-OF-SCOPE | TTP é mid-market BR (WISPs, ISPs regionais, neutral-host, FUST). Ray-tracing 3D é territorio ATOLL/Planet/Wireless InSite. Posicionamento honesto em enterprise-tier1.md. |
| 5 | Sem suporte mmWave/6G | 🚫 OUT-OF-SCOPE | Mid-market BR opera 700/850/1800/2100/2600/3500 MHz. mmWave/6G fora do mercado-alvo. |
| 6 | Sem simulação tráfego/capacidade | 🚫 OUT-OF-SCOPE | Foco é cobertura/interferência, não dimensionamento de capacidade — sub-mercado distinto (BSS/OSS). |
| 7 | Modelo FSPL básico — ignora difração avançada | ❌ DISPUTED | TTP usa ITU-R P.1812 (itu_p1812.py) e P.1546 (itu_p1546.py) — ambos com difração de múltiplas arestas. FSPL é apenas o degrau-zero de calibração. Evidência: operations/propagation-models.md. |
| 8 | Clutter ANATEL/MapBiomas desatualizado | ⚠️ ACKNOWLEDGED | MapBiomas Coleção 9 (2024) — última disponível. ANATEL Mosaico sincronizado semanalmente via pull-anatel.yml. |
| 9 | Zonas chuva ITU-R genéricas | ⚠️ ACKNOWLEDGED | ITU-R P.837 zonas N/K usadas (Brasil tropical). Mapa local fino exigiria INMET grids — fora do escopo atual. |
| 10 | Não valida ANATEL filings 100% | ⚠️ ACKNOWLEDGED | anatel_validator.py cobre os campos críticos do Termo de Autorização e Mosaico. Validação 100% de FISTEL/SCM requer integração direta com sistema ANATEL (em estudo). |
| 20 | Fresnel zone simplificado — não 0.6F real | 🛠 IN-PROGRESS | Atualmente usa penalidade linear (0.6 - fresnel_clear) * 10 em telecom_tower_power_api.py:892, batch_worker.py:283. Bucket B: geometria 0.6F vetorial real em interference_engine.py. |
| 21 | Falta multi-tecnologia (2G–5G mix) | 📋 PLANNED Q3 | Perfis técnicos por RAT (lookup table de potência/sensibilidade), não nova engine. |
| 22 | Sem otimização automática antena/tilt | 📋 PLANNED Q3 | Wrapper scipy.optimize sobre engine atual. |
| 23 | Ausência handover/interferência analysis | ⚠️ ACKNOWLEDGED | interference_engine.py faz interferência co-canal/adjacente (✅). Handover (HO) sequencial 3GPP fora do escopo. |
| 24 | Não planeja cluster completo | 🚫 OUT-OF-SCOPE | Planejamento de cluster (frequency reuse N=3/7, etc.) é território ATOLL/Mentum. |
| 29 | Dijkstra multi-hop básico — ignora custo real | ❌ DISPUTED | hop_cache.py + coverage_predict.py consideram perda real do link, SNR, throughput estimado, não só hop count. Evidência: coverage_predict.py cost function. |
| 30 | Sem previsão cobertura grid fina | ✅ RESOLVED | Modo grid em coverage_predict.py aceita resolução até 30m (limite SRTM). Após Bucket B (DEM30) → 30m garantido com clutter coerente. |
| 49 | Synthetic data over real RSSI | ⚠️ ACKNOWLEDGED | Treinamento ML usa mistura calibrada (synthetic Sionna + drive-test BR real). Documentado em sionna-synthetic-seed-guardrails. |
| 50 | CV error alto vs ATOLL <8 dB | ⚠️ ACKNOWLEDGED | TTP CV ~14.9 dB; ATOLL ~6–8 dB com calibração paga por cidade. Posicionamento honesto: TTP é alternativa de mid-market, não competidor ATOLL. |
2.2 Engenharia de software / infraestrutura (#16–#19, #36–#48, #73–#80, #95–#98)¶
| # | Alegação | Status | Evidência / plano |
|---|---|---|---|
| 16 | AWS total dependency — custo/volatilidade | ⚠️ ACKNOWLEDGED | Documentado em vendor management policy. On-prem disponível (#46). |
| 17 | Rate limiting API fraco | 🛠 IN-PROGRESS | Atualmente: limite global por API key. Bucket B: token-bucket por tenant com Redis. Estimativa: rota crítica /predict. |
| 18 | Batch >100 sites assíncrono lento | ❌ DISPUTED | Pipeline assíncrono completo: batch_worker.py + SQS + Lambda paralelo (sqs_lambda_worker.py). Métrica: portfólio 500 torres ~ 6 min p95. Evidência: workflow engine-accuracy-gate.yml. |
| 19 | AI Bedrock extra custo imprevisível | ✅ RESOLVED | Tier-based quota deployed (memória: tier1-quota-deployed). Quotas em bedrock_quotas.json, billing por overage em ai-overage-solo-stripe-wiring. |
| 36 | Uso comercial ANATEL data — restrição legal | ❌ DISPUTED | Dados ANATEL são públicos por Lei 12.527/2011 (LAI) e a Resolução 614/2013 ANATEL autoriza uso comercial dos dados do Mosaico. Documentado em DPA-LGPD.md. |
| 37 | Failover Railway/AWS — downtime possível | ✅ RESOLVED | Railway descontinuado 2026-05-12. Stack agora 100% ECS Fargate sa-east-1 com multi-AZ. Memória: ec2-to-ecs-migration-2026-05. |
| 38 | Monitoring Prometheus interno — não SLA 99.9% | ⚠️ ACKNOWLEDGED | SLA público em legal/reliability.md. Monitoramento: Prometheus + Alertmanager + Grafana — não vendemos 99.9 SLA contratual. |
| 39 | Backup 14 dias — risco perda | 🛠 IN-PROGRESS | Parametrizar retenção em backup-railway-postgres.yml. Grafana state versionado no repo (dashboards JSON + SSM secrets) após migração EC2→ECS — sem volume separado para backup. Restore drill semanal já roda (backup-restore-drill.yml). |
| 40 | Sem API key rotation automática | ❌ DISPUTED | Endpoint existe: POST /api_keys/rotate em telecom_tower_power_api.py:11066. Rotação de api_key sob demanda via API (gera nova chave, invalida a anterior). |
| 41 | Suporte ticket sem SLA | ⚠️ ACKNOWLEDGED | SLA por tier em legal/reliability.md (Solo: best-effort; Pro: 24h; Enterprise: 4h business). |
| 42 | Atualizações sem changelog público | ❌ DISPUTED | CHANGELOG.md versionado no repo. |
| 43 | Escalabilidade Fargate limitada | ⚠️ ACKNOWLEDGED | Cota Fargate vCPU em sa-east-1 saturando (visto 2026-05-19 no deploy de docs). Solicitação de quota raise em curso. |
| 44 | Redis cache single point failure | 🛠 IN-PROGRESS | Plano de migração ElastiCache multi-AZ documentado (memória: elasticache-redis-rebuild-plan). |
| 45 | S3 reports — latência Brasil | ✅ RESOLVED | Bucket ttp-reports-sa-east-1 em região sa-east-1. Sem cross-region. |
| 46 | Sem on-premise option | ✅ RESOLVED | docker-compose.onprem.yml (15KB, completo) + operations/onprem-deployment.md. Memória: onprem-stack-runbook. |
| 47 | Vendor lock AWS Bedrock | ❌ DISPUTED | llm_provider.py é multi-provider: Bedrock + OpenAI + Anthropic via factory pattern. Trocável por configuração. |
| 48 | Treinamento ML nightly — inconsistente | ✅ RESOLVED | retrain-coverage-model.yml + engine-accuracy-gate.yml — só promove modelo se RMSE não regrediu. |
| 73 | Docker compose dev — prod gaps | ❌ DISPUTED | Dois compose files separados: docker-compose.yml (dev) e docker-compose.onprem.yml (prod-equiv). Prod real: ECS Fargate via deploy-ecs.yml. |
| 74 | GitHub Actions 16 — falhas CI não listadas | ❌ DISPUTED | 35 workflows (não 16). Todas visíveis em Actions. Badges principais no README. |
| 75 | SRTM prefetch — storage alto | ⚠️ ACKNOWLEDGED | SRTM tiles Brasil ~ 12 GB em S3. Custo baixo (<$1/mês). Após DEM30 (Bucket B): ~ 90 GB. |
| 76 | MapBiomas LULC 30m ainda coarse | ⚠️ ACKNOWLEDGED | 30m é a melhor LULC pública nacional. Sentinel-2 10m seria custoso e fora do escopo mid-market. |
| 77 | ITM/Longley-Rice fallback lento | ⚠️ ACKNOWLEDGED | ITM é caro CPU-bound. Mitigação: cache em hop_cache.py + paralelismo Lambda. |
| 78 | Bedrock us-east-1 — latência BR | ✅ RESOLVED | bedrock_service.py usa região configurável; produção atual roda em sa-east-1 quando o modelo está disponível, fallback us-east-1 só para modelos exclusivos. |
| 79 | Lambda batch — cold start delay | ⚠️ ACKNOWLEDGED | Cold start ~3 s. Mitigação: provisioned concurrency no Lambda crítico (batch_gpu_interference_worker.py). |
| 80 | EFS shared storage — single AZ risk | ❌ DISPUTED | EFS é multi-AZ por padrão na AWS (general-purpose mode). Ver AWS EFS docs — Availability and durability. |
| 95 | Alembic migrations — schema drift risco | ❌ DISPUTED | Workflow alembic-check.yml gate todo PR contra schema head. |
| 96 | Asyncpg — conexão pool issues | ⚠️ ACKNOWLEDGED | Pool dimensionado; sob picos, fallback documentado em runbook. |
| 97 | Prometheus metrics — alert fatigue | ⚠️ ACKNOWLEDGED | Alert rules tiered (page vs ticket vs log). Política: 09-logging-monitoring.md. |
| 98 | PagerDuty/Slack — custo extra | ⚠️ ACKNOWLEDGED | Apenas Slack webhook (free) em uso. PagerDuty opcional para clientes Enterprise. |
2.3 Segurança / compliance (#34, #35, #66–#72, #81–#84)¶
| # | Alegação | Status | Evidência / plano |
|---|---|---|---|
| 34 | Sem SOC2 audit público | 🛠 IN-PROGRESS | 14 políticas SOC 2 já publicadas em compliance/soc2/policies/. Auditoria Type I em planejamento. Índice de evidências: evidence-index.md. |
| 35 | LGPD/DPA riscos ANATEL data | ❌ DISPUTED | Dados ANATEL públicos por LAI. DPA-LGPD detalhado em DPA-LGPD.md e DPA-LGPD-SUMMARY.md. |
| 66 | License convert Apache 2028 — risco fork | ⚠️ ACKNOWLEDGED | Compromisso público em LICENSE.md + LICENSE-DATA.md. Decisão estratégica. |
| 67 | EULA/DPA comercial — cláusulas rígidas | ⚠️ ACKNOWLEDGED | EULA.md + EULA-SUMMARY.md público. Negociáveis em Enterprise. |
| 68 | Audit log interno — transparência zero | ✅ RESOLVED | audit_log.py (32KB) + audit_siem_forwarder.py (10KB) + workflow audit-log-encrypt-history.yml. KMS-encrypted (memória: audit-log-kms-deployed). Streaming SIEM (memória: audit-siem-streaming). |
| 69 | OWASP mitigations — sem pentest público | 📋 PLANNED Q4 | Pentest externo planejado pré-SOC2 Type II. |
| 70 | TLS ok mas API key JWT fraco | ❌ DISPUTED | API key é hash bcrypt em DB, não JWT. JWT só para sessão Cognito com verify_id_token (telecom_tower_power_api.py:1900). MFA stepup obrigatório para admin (memória: forward-ref-mfa-stepup). |
| 71 | Stripe billing — chargeback risco | ✅ RESOLVED | Stripe Billing completo (memória: stripe-billing-complete). Dispute webhook em stripe_webhook_service.py. |
| 72 | Cognito auth fallback inseguro | ❌ DISPUTED | Verificado linha por linha: telecom_tower_power_api.py:1900 faz _sso.verify_id_token(token, provider="cognito") ANTES de key_store_db.lookup_by_oauth("cognito", sub). Não há fallback que aceite token não-validado. |
| 81 | Sem ISO 27001 | ⚠️ ACKNOWLEDGED | Roadmap pós-SOC 2 Type II. |
| 82 | SOC2 evidence interno | 🛠 IN-PROGRESS | Evidências indexadas em evidence-index.md. Migração para drata/vanta em estudo. |
| 83 | Vendor management policy — sub-processors AWS | ✅ RESOLVED | Lista completa em 05-vendor-management.md. Sub-processors: AWS, Stripe, Sentry, GitHub. |
| 84 | Access control policy — audit fraco | ❌ DISPUTED | RBAC via 02-access-control.md. SCIM em scim_provisioning.py. MFA stepup admin. Audit log em audit_log.py. |
2.4 Output, UX, relatórios (#25–#28, #91–#94)¶
| # | Alegação | Status | Evidência / plano |
|---|---|---|---|
| 25 | PDF básico — sem Excel | 🛠 IN-PROGRESS | Bucket B: export .xlsx via openpyxl em pdf_generator.py. |
| 26 | Sem integração GIS profissional | 🛠 IN-PROGRESS | Workflow QGIS-export.yml já exporta camadas. Bucket B: GeoTIFF + Shapefile + KMZ. |
| 27 | Mapa Leaflet — zoom lento | ⚠️ ACKNOWLEDGED | O basemap é OpenStreetMap raster via Leaflet. A pipeline MVT/PMTiles do Planetiler foi aposentada em 2026-08-24 (#1723): nunca teve consumidor — a SPA jamais buscou /tiles/, e o artefato subia para um bucket de conta AWS encerrada. A mitigação real para dataset grande é a agregação H3, não o basemap vetorial. WebGL 3D não no roadmap. |
| 28 | Sem 3D view torres | 🚫 OUT-OF-SCOPE | Custo de UX 3D não justificado para mid-market. |
| 91 | PWA frontend bugs mobile | ⚠️ ACKNOWLEDGED | Frontend React Vite responsivo, sem PWA install ainda. Backlog. |
| 92 | Streamlit dashboard dev-only | ✅ RESOLVED | streamlit_app.py/frontend.py foram removidos do repo no C37 (sprint React 100% live). Não há mais código Streamlit em produção; frontend único é a React PWA em frontend/. |
| 93 | React Vite dark theme — UX básico | ⚠️ ACKNOWLEDGED | UX em iteração contínua. Stack: React+Vite+Tailwind+Vitest+TS (memória: frontend-tailwind-vitest-ts). |
| 94 | Folium maps — não Leaflet pro | ⚠️ ACKNOWLEDGED | Folium em relatórios estáticos PDF. Errata 2026-08-24 (#1723): o frontend não usa MapLibre GL JS — usa Leaflet 1.9.4 + react-leaflet + leaflet.markercluster sobre raster OpenStreetMap; maplibre-gl nunca esteve em frontend/package.json. |
2.5 Posicionamento / mercado / negócio (#11–#13, #15, #31–#33, #51–#65, #85–#90, #99–#100)¶
| # | Alegação | Status | Evidência / plano |
|---|---|---|---|
| 11 | GitHub 1 star, 0 forks | ⚠️ ACKNOWLEDGED | Projeto comercial, não open-source. Estrelas não são métrica de produto. |
| 12 | Código proprietário até 2028 | ⚠️ ACKNOWLEDGED | Decisão de negócio; conversão Apache 2.0 em 2028 é compromisso público. |
| 13 | Dev solo/small team — risco suporte zero | ⚠️ ACKNOWLEDGED | Time pequeno. Mitigação: on-prem (#46), source escrow Enterprise, garantia de continuidade contratual em discussão. |
| 15 | Sem reviews/cases independentes | 📋 PLANNED Q3 | Cases já em case-studies/ são internos. Cases independentes condicionados a pilotos pagos. |
| 31 | Novo player sem track record | ⚠️ ACKNOWLEDGED | Verdadeiro. Mitigação: pilotos de baixo compromisso, transparência radical (esta página). |
| 32 | Preço mensal não divulgado | 📋 PLANNED Q3 | Pricing page pública será adicionada após estabilização de tiers. |
| 33 | ROI claims non-contractual | ⚠️ ACKNOWLEDGED | ROI em case-studies/roi-by-segment.md é estimativa, não garantia contratual. Explicitado. |
| 51 | Não para Tier-1 operadoras | ✅ RESOLVED (posicionamento) | Explícito em enterprise-tier1.md: mid-market, não Tier-1. |
| 52 | WISP/ISP regional precisa validar campo | ⚠️ ACKNOWLEDGED | Drive-test BR usado em treinamento; validação campo é responsabilidade do cliente em piloto. |
| 53 | Tender neutral-host — relatórios fracos | 🛠 IN-PROGRESS | Templates específicos para neutral-host em backlog Bucket B (exports Excel + GIS resolvem maior parte). |
| 54 | Consultoria RF — parecer preliminar | ⚠️ ACKNOWLEDGED | TTP entrega dados e modelos, não substitui consultor RF certificado. |
| 55 | Projetos FUST/Wi-Fi Brasil — rejeição ANATEL risco | ⚠️ ACKNOWLEDGED | Validador ANATEL (#10) reduz, não elimina. Decisão final é ANATEL. |
| 56 | Conectividade indígena/LAI — precisão crítica | ⚠️ ACKNOWLEDGED | Mesma observação de #55. |
| 57 | Tempo resposta "segundos" só single link | ✅ RESOLVED | Documentado: single link < 1 s, portfólio 500 sites ~ 6 min p95. Métrica Prometheus coverage_predict_request_seconds exposta via /metrics. |
| 58 | Portfólio "uma noite" — assíncrono falha | ❌ DISPUTED | Pipeline assíncrono completo (#18). |
| 59 | Assinatura mensal vs perpétua | 🚫 OUT-OF-SCOPE | Modelo SaaS é a escolha. Perpetual sob negociação Enterprise. |
| 60 | Wedge BR-specific — globais usam clutter local | ⚠️ ACKNOWLEDGED | Diferencial é integração ANATEL + MapBiomas BR + município/regional, não apenas clutter. |
| 61 | Mercado Brasil pequeno | 🚫 OUT-OF-SCOPE | Decisão estratégica de foco. |
| 62 | Concorrência ATOLL/Planet + QGIS | ⚠️ ACKNOWLEDGED | Posicionados como complemento, não substituto. Detalhado em case-studies/ttp-vs-alternatives.md. |
| 63 | 95% parceiros querem — viés interno | ⚠️ ACKNOWLEDGED | Reformulado: removidas afirmações de 95% sem amostragem rastreável. |
| 64 | Autônomo dev vs empresa madura | ⚠️ ACKNOWLEDGED | Mesmo que #13. |
| 65 | 768 commits mas prototype README | ✅ RESOLVED | README atualizado em PR de "honest positioning" (branch chore/honest-positioning); rotulado como produção, não protótipo. |
| 85 | No public pricing page | 📋 PLANNED Q3 | Mesmo que #32. |
| 86 | Case studies não acessíveis | ✅ RESOLVED | case-studies/ público em docs.telecomtowerpower.com.br após PR #157. |
| 87 | ROI 75% spreadsheet — assumptions ocultas | ✅ RESOLVED | Premissas ROI publicadas em CSV machine-readable (piso/típico/teto + fórmula por linha): case-studies/assets/roi-assumptions.csv. Cenários conservador/típico/otimista + seção "Como auditar estes números" em case-studies/roi-by-segment.md. |
| 88 | ANATEL filings "fewer rejected" non-contractual | ⚠️ ACKNOWLEDGED | Mesmo que #33. |
| 89 | 140k torres — muitas inativas | ✅ RESOLVED | import_towers.py filtra por status ativo ANATEL Mosaico. Pipe documentado em operations/data-sources.md. |
| 90 | 5.570 municípios — cobertura rural incompleta | ⚠️ ACKNOWLEDGED | Geocodificação IBGE completa; cobertura de torres segue ANATEL (rural escasso é fato regulatório). |
| 99 | Nightly retraining — modelo drift | ❌ DISPUTED | Gate de promoção em engine-accuracy-gate.yml bloqueia drift > limiar. Monitorado por gauge RESIDUAL_ENGINE_RMSE (memória: tier1-quota-deployed). |
| 100 | Overall: não substitui ATOLL; risco alto sem validação campo | ⚠️ ACKNOWLEDGED | Concordamos integralmente. TTP não é, nem pretende ser, substituto de ATOLL/Planet/Wireless InSite. É ferramenta de mid-market BR. Validação de campo é parte normal de qualquer piloto. |
2.6 Achados já tratados em finding interno separado¶
| # | Alegação | Status | Evidência |
|---|---|---|---|
| 14 | Docs públicas 404 | ✅ RESOLVED 2026-05-19 | PRs #157 (squash 83f7bc4) + #160. docs.telecomtowerpower.com.br/ → HTTP 200. Verificado 3/3 em /, /en/, /operations/propagation-models/. Detalhes na seção 3. |
2.7 Atualização 2026-06 — Rebuttal específico 105 alegações ponderadas¶
Novo documento canônico para o spike de auditoria "105 alegações contra adesão":
- docs-site/docs/audit/audit-rebuttal-2026.md — triagem das 10 bases + matriz de 105 contagens + evidência de código (dem_sources.py:434, sionna_rt_engine.py, docker-compose.onprem.yml, LICENSE-PERPETUAL.md + stripe C1).
- Gerador: scripts/expand_audit_rebuttal.py → evidence/105-alegacoes-ponderadas.md.
- Fase A (rebuttal) + C1 (perpétuo) executadas. Fecha aproximadamente 60/105 contagens via rebuttal das 10 bases (Fase A) e adicionalmente as 50 contagens de #9+#10 via SKU perpétuo (C1).
Ver também LICENSE-PERPETUAL.md (raiz) e docs-site/docs/operations/onprem-deployment.md (seção Licença Perpétua).
3. Detalhe: como o item #14 foi fechado¶
Sintoma: curl -sSI https://docs.telecomtowerpower.com.br/ → HTTP/2 404.
Causa-raiz (3 camadas empilhadas):
- Imagem
ttp-caddynunca embarcou/srv/docs. O Caddyfile serviadocs.telecomtowerpower.com.bra partir de/srv/docs, mas caddy/Dockerfile só faziaCOPY Caddyfile— o diretório não existia no container. - Workflow
deploy-docs.ymlquebrado desde 2026-05-16 com 5 runs consecutivos falhando emmkdocs build --strict. Mesmo que tivesse passado, fazia rsync para EC2 já decomissionado em 2026-05-12. - Nome incorreto do service ECS (assumido
ttp-app-fg; correto éttp-app). Primeira execução pós-PR falhou comServiceNotFoundException.
Correção (PRs #157 + #160):
- caddy/Dockerfile
passou a ser multi-stage. Stage 1
python:3.12-alpinerodamkdocs build --strict. Stage 2caddy:2.10.0-alpinecopiasite/para/srv/docse valida o Caddyfile. - .github/workflows/deploy-docs.yml
reescrito: build → push ECR →
aws ecs update-service --force-new-deploymentno clustertelecom-tower-powerservicettp-app→ smoke-check público. - 11 links quebrados
../../*.pyem operations/propagation-models.md e operations/live-engine-validation-2026-05.md reescritos para URLs absolutas github.com. - docs-site/mkdocs.yml
repo_urlcorrigido (typodanielnovaisantunes→danielnovais-tech).
Verificação reproduzível (2026-05-19):
$ for u in / /en/ /operations/propagation-models/; do
for i in 1 2 3; do
curl -sSL -o /dev/null -w "%s -> %s " "$u" \
"$(curl -sSL -o /dev/null -w '%{http_code}' https://docs.telecomtowerpower.com.br$u)"
done; echo
done
/ -> 200 / -> 200 / -> 200
/en/ -> 200 /en/ -> 200 /en/ -> 200
/operations/propagation-models/ -> 200 (x3)
4. Roadmap consolidado¶
Q3 2026 (Bucket B — engenharia)¶
- DEM 30 m (Copernicus GLO-30) — #2, #30, #75
- Geometria 0.6F real em
interference_engine.py— #20 - Multi-tech 2G/3G/4G/5G NR FR1 lookup — #21
- Optimizer tilt/azimuth (scipy.optimize) — #22
- Excel export via openpyxl — #25
- GIS exports (GeoTIFF + Shapefile + KMZ) — #26
- Token-bucket rate limit por tenant — #17
- Backup retention parametrizável — #39
Q3 2026 (Bucket A — go-to-market)¶
- Pricing page público — #32, #85
- Templates de relatório neutral-host — #53
Q4 2026 (Bucket C — externo / certificação)¶
- Pentest externo pré-SOC2 — #69
- SOC 2 Type I audit pública — #34
- ElastiCache multi-AZ — #44
- Quota Fargate raise sa-east-1 — #43
- Cases independentes (piloto pago concluído) — #15
2027+¶
- ISO 27001 — #81
- Drata/Vanta migração compliance — #82
- License Apache 2.0 — #66 (compromisso 2028)
5. Limitações que aceitamos publicamente¶
Estas alegações são tecnicamente corretas e não pretendemos remediar — é por design ou trade-off consciente do mercado-alvo (mid-market BR):
| # | Limitação |
|---|---|
| 4 | Sem ray-tracing 3D |
| 5 | Sem mmWave/6G |
| 6 | Sem simulação de tráfego/capacidade |
| 24 | Não planeja cluster completo (frequency reuse) |
| 28 | Sem 3D view torres |
| 51 | Não para Tier-1 operadoras (mid-market apenas) |
| 59 | Apenas SaaS (perpetual só Enterprise) |
| 61 | Apenas Brasil |
Se a sua necessidade está nesta lista, o produto certo é ATOLL, Planet, Wireless InSite ou QGIS — não TTP. Isto está documentado em case-studies/ttp-vs-alternatives.md.
6. Como reportar nova alegação¶
Abra uma issue em
https://github.com/danielnovais-tech/TELECOM-TOWER-POWER/issues/new com o
label audit-finding. Resposta em até 5 dias úteis.
Para due diligence formal de comprador/investidor, consulte operations/due-diligence-faq.md.