refactor: distribute Acaua as a Docker image instead of a desktop app
Release / Plan (reuse the published image?) (push) Successful in 3s
CI / Docker image (build and smoke test) (push) Skipped
CI / Format and clippy (push) Successful in 4m32s
CI / Dependency audit (push) Successful in 11s
CI / Tests (Linux) (push) Successful in 9m15s
Release / ci (push) Successful in 9m18s
Release / Build image (arm64) (push) Failing after 7m7s
Release / Build image (amd64) (push) Failing after 13m53s
Release / Publish tags (push) Skipped
Release / Gitea release (push) Skipped
Release / Plan (reuse the published image?) (push) Successful in 3s
CI / Docker image (build and smoke test) (push) Skipped
CI / Format and clippy (push) Successful in 4m32s
CI / Dependency audit (push) Successful in 11s
CI / Tests (Linux) (push) Successful in 9m15s
Release / ci (push) Successful in 9m18s
Release / Build image (arm64) (push) Failing after 7m7s
Release / Build image (amd64) (push) Failing after 13m53s
Release / Publish tags (push) Skipped
Release / Gitea release (push) Skipped
Acaua is a collective SOC daemon consuming only Zeek log files, not a single-user tool needing local hardware like its siblings. Drop the Tauri desktop shell, installers and self-update entirely; the server and its web dashboard ship as a container, updated by pulling a new image tag. Link against the official prebuilt libduckdb instead of compiling it from source via the bundled feature, cutting image build time from 15+ minutes to about 3. Fix a real bug found along the way: as PID 1 in a container, the daemon ignored SIGTERM and was always killed after the stop timeout; it now shuts down gracefully. Also corrects the Pillar 1 beaconing score: the period estimate had a harmonic alias (a perfectly periodic 4h series resolved to 600s), and the old score formula flagged pure random traffic as suspicious (p95 = 0.839 on Poisson noise). The new formula was validated against 300 samples per scenario. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAyr8d7HuAdUGB6aA5xmDD
This commit is contained in:
1 parent
1b974bb90d
commit
8a80504c45
72 files changed
+2524
-6384
No files matched your search
+37
-54
@@ -2,83 +2,66 @@
|
||||
|
||||
[English](CONTRIBUTING.md) · **Português**
|
||||
|
||||
Obrigado por ajudar. O projeto é um esqueleto pré-alfa, então as contribuições
|
||||
mais úteis agora são testes, fixtures, documentação e correções de projeto
|
||||
pequenas e bem delimitadas.
|
||||
Obrigado por ajudar. O projeto é um motor de NDR construído em torno de evidência determinística.
|
||||
As contribuições mais úteis agora são testes, fixtures, documentação e correções
|
||||
arquiteturais pontuais.
|
||||
|
||||
1. **Só monitoramento autorizado.** O Acauã é software defensivo para redes
|
||||
próprias ou com autorização explícita. Não adicione caminhos de coleta que
|
||||
escondam escopo, retenção ou evidência.
|
||||
2. **Evidência faz parte do recurso.** Uma mudança de detecção precisa declarar
|
||||
entradas, reduções em ordem fixa e valores intermediários. Pontuação sem
|
||||
registro reproduzível de evidência não é aceita.
|
||||
3. **Seja honesto sobre o que funciona.** Se um recurso é stub, só roda no Linux
|
||||
ou cobre apenas um log Zeek, diga isso no README, no `--help` e no teste.
|
||||
4. **Código 100% em inglês.** Código-fonte, comentários, scripts, workflows e
|
||||
mensagens de commit são em inglês. A GUI e a CLI continuam bilíngues (PT-BR e
|
||||
EN via `i18n-en.js`).
|
||||
1. **Apenas monitoramento autorizado.** O Acauã é software defensivo para redes
|
||||
próprias ou redes que você tem autorização expressa para observar. Não adicione
|
||||
mecanismos de coleta que ocultem escopo, retenção ou evidências.
|
||||
2. **Evidência é parte do recurso.** Uma alteração de detecção deve declarar suas
|
||||
entradas, reduções em ordem fixa e valores intermediários. Não são aceitas
|
||||
pontuações sem registro reproduzível de evidência.
|
||||
3. **Seja transparente sobre o que funciona.** Se um recurso for um stub, limitado
|
||||
a Linux ou restrito a um log Zeek específico, documente no README, na ajuda da
|
||||
CLI e nos testes.
|
||||
4. **Base de código 100% em inglês.** Código-fonte, comentários, scripts, workflows
|
||||
e mensagens de commit são em inglês. O dashboard web permanece bilíngue (PT-BR
|
||||
e EN via `i18n-en.js`).
|
||||
|
||||
## Fluxo
|
||||
## Fluxo de trabalho
|
||||
|
||||
```bash
|
||||
scripts/install-hooks.sh
|
||||
scripts/fetch-libduckdb.sh ~/.cache/acaua/duckdb
|
||||
export DUCKDB_LIB_DIR=~/.cache/acaua/duckdb LD_LIBRARY_PATH=~/.cache/acaua/duckdb
|
||||
scripts/check.sh
|
||||
scripts/check.sh --full
|
||||
```
|
||||
|
||||
O `check.sh` roda formatação, clippy com warnings como erro, cobertura de
|
||||
tradução da UI, sintaxe de shell, YAML dos workflows, consistência de SemVer e a
|
||||
checagem do desktop. O `--full` inclui testes do workspace e `cargo audit`.
|
||||
|
||||
A feature opcional DuckDB não entra na checagem padrão:
|
||||
|
||||
```bash
|
||||
cargo check -p acaua-core --features duckdb
|
||||
```
|
||||
`check.sh` executa formatação, clippy com warnings como erro, cobertura de
|
||||
tradução da UI, sintaxe de shell, YAML de workflows, consistência de SemVer,
|
||||
validação de pin da DuckDB e termos proibidos. `--full` inclui os testes do
|
||||
workspace e `cargo audit`.
|
||||
|
||||
## Pesquisa
|
||||
|
||||
`research/` é um espaço Python isolado para validação científica. Ele pode usar
|
||||
astropy, scipy, networkx, pandas e notebooks. Ele nunca deve ser importado pelo
|
||||
runtime Rust, copiado para um release ou exigido para compilar o produto.
|
||||
|
||||
## Regras de detecção
|
||||
|
||||
- Mantenha reduções em ordem fixa quando resultados de ponto flutuante entram em
|
||||
um alerta.
|
||||
- Use um valor sentinela documentado em vez de `NaN` ou panic para entradas
|
||||
degeneradas.
|
||||
- Use Jensen-Shannon, não KL puro, quando uma distribuição pode ter probabilidade
|
||||
zero.
|
||||
- Não use JA4S/JA4H/JA4X/JA4SSH/JA4L por padrão: essas variantes têm licença
|
||||
não-OSI. O JA4 de impressão digital de cliente TLS é o único padrão.
|
||||
- Conexões longas precisam de detector próprio; elas não produzem os intervalos
|
||||
curtos que uma pontuação de beaconing espera.
|
||||
`research/` é um espaço Python isolado para validação científica. Pode utilizar
|
||||
astropy, scipy, networkx, pandas e notebooks. Nunca deve ser importado pelo runtime
|
||||
em Rust, copiado para uma release ou exigido para compilar o produto.
|
||||
|
||||
## Interface e tradução
|
||||
|
||||
O texto-fonte da interface é em português. O inglês vem de
|
||||
`apps/gui/ui/i18n-en.js`, aplicado em tempo de execução por `i18n.js`. Ao
|
||||
adicionar texto visível, rode `node scripts/check-ui-i18n.mjs` e inclua o par em
|
||||
inglês.
|
||||
O texto original da interface é em português. O inglês vem de `apps/gui/ui/i18n-en.js`,
|
||||
aplicado em runtime por `i18n.js`. Ao adicionar texto visível, execute
|
||||
`node scripts/check-ui-i18n.mjs` e forneça o par correspondente em inglês.
|
||||
|
||||
## Documentação
|
||||
|
||||
Mantenha o par: todo arquivo `*.md` e `docs/*` tem versão em inglês e em
|
||||
português (`*.pt-BR.md`, `docs/pt-BR/`). Nomes de arquivo só são traduzidos
|
||||
quando a palavra muda de verdade, como `architecture.md` → `arquitetura.md`.
|
||||
Mantenha os pares: todo arquivo `*.md` e `docs/*` possui uma versão em inglês e
|
||||
uma em português (`*.pt-BR.md`, `docs/pt-BR/`). Nomes de arquivo são traduzidos
|
||||
apenas quando a palavra de fato muda, como em `architecture.md` → `arquitetura.md`.
|
||||
|
||||
## Commits e releases
|
||||
|
||||
Os commits seguem Conventional Commits 1.0.0 em inglês (`feat:`, `fix:`,
|
||||
`chore:`, `ci:`, `docs:`, `refactor:`, `test:`, `perf:`, `build:`). As versões
|
||||
seguem SemVer 2.0.0 e ficam sincronizadas entre o workspace, o manifesto do
|
||||
desktop e a configuração do Tauri.
|
||||
Commits seguem Conventional Commits 1.0.0 em inglês (`feat:`, `fix:`, `chore:`,
|
||||
`ci:`, `docs:`, `refactor:`, `test:`, `perf:`, `build:`). Versões seguem SemVer 2.0.0.
|
||||
|
||||
Enviar uma tag `v*` cria uma Release no Gitea a partir da seção correspondente do
|
||||
`CHANGELOG.md` e anexa os pacotes Linux da CLI e os bundles do desktop.
|
||||
Releases são publicadas como imagens de container multi-arquitetura (`linux/amd64`
|
||||
e `linux/arm64`) no registry do Gitea. Enviar uma tag `v*` gera a release no Gitea
|
||||
a partir do `CHANGELOG.md` e re-aponta as tags da imagem do container existente.
|
||||
|
||||
## Licença
|
||||
|
||||
Ao contribuir, você concorda em licenciar sob [MIT](LICENSE-MIT) **ou**
|
||||
[Apache-2.0](LICENSE-APACHE), como o resto do projeto.
|
||||
[Apache-2.0](LICENSE-APACHE), em conformidade com o restante do projeto.
|
||||
Reference in new issue
Block a user