Perfil de Implementação: Kollontai
Identificador do Perfil: kollontai
Norma Base: GOST 1.3.0
Autor: lumenpink
Status: Ativo / Produção
1. Visão Geral
Este documento define as especificações concretas, serviços de nuvem, ferramentas de automação e infraestrutura adotadas no perfil Kollontai (homenagem à revolucionária soviética, feminista e diplomata Alexandra Kollontai) para satisfazer todos os requisitos normativos do padrão GOST.
2. Forja de Código e Repositórios Remotos
2.1 Forja Primária
- Instância: Codeberg (Software Forgejo).
- Organização / Usuário:
lumenpink. - URL do Repositório:
https://codeberg.org/lumenpink/<nome-do-repo>. - Remote Git SSH Padrão:
ssh://git@codeberg.org/lumenpink/<nome-do-repo>.git. - Branch Padrão:
main.
2.2 Criação Automatizada via API
A criação de repositórios remotos utiliza a API v1 do Codeberg autenticada via $CODEBERG_TOKEN:
curl -X POST \
-H "Authorization: token $CODEBERG_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "<nome-do-repo>",
"description": "<Descrição curta e objetiva do projeto>",
"private": false,
"auto_init": false
}' \
"https://codeberg.org/api/v1/user/repos"
2.3 Redundância Mandatória: Repositório de Backup / Espelho (Mirror)
Todo repositório no perfil Kollontai deve implementar redundância geográfica e resiliência contra indisponibilidade de forjas através de um repositório secundário de backup:
- Forja de Backup Padrão:
* Padrão Canônico: GitHub (https://github.com/lumenpink/<nome-do-repo>), operando como espelho secundário de contingência e preservação.
* Exceções Declaradas no.cccprc: Repositórios com propósitos específicos (como notas/vaults do Obsidian emtildegit.orgou instâncias próprias) podem utilizar forjas alternativas, desde que declaradas explicitamente na chavebackup_forgeoubackup_urldo.cccprc. - Paridade Estrita de Metadados & Sinalização de Espelho:
* Metadados Idênticos: Nome do repositório, tópicos (topics/tags), homepage/website (https://<nome-do-repo>.2lp.in), licença e visibilidade (público/privado) DEVEM ser estritamente iguais entre o repositório principal e o backup.
* Distinção Mandatória: No repositório de backup, a descrição oficial (About / Description) DEVE declarar explicitamente que se trata de uma cópia de contingência, apontando diretamente para o repositório principal no Codeberg:
text [MIRROR / BACKUP] <Descrição do projeto>. Repositório canônico e issues em: https://codeberg.org/lumenpink/<nome-do-repo>
* Issues, pull requests e contribuições devem ser mantidos e tratados exclusivamente na forja canônica no Codeberg. - Estratégia de Sincronização de Branches e Tags:
* Dual Push Local: Configuração do remote localorigincom destinos múltiplos de push para publicação simultânea em um único comando:
bash git remote set-url --add --push origin ssh://git@codeberg.org/lumenpink/<nome-do-repo>.git git remote set-url --add --push origin git@github.com:lumenpink/<nome-do-repo>.git
* CI Mirroring: Sincronização automática via workflow no Forgejo Actions acionando espelhamento autenticado para o backup a cada push na branchmain.
3. Gestão de Commits e Hooks (cccp)
O ecossistema Kollontai utiliza a CLI cccp como ferramenta central de versionamento, hooks do Git e integridade semântica.
3.1 Arquivo .cccprc
Todo repositório no perfil Kollontai DEVE conter na raiz o arquivo .cccprc:
# Forja Canônica Primária (Codeberg)
codeberg_owner = lumenpink
codeberg_repo = <nome-do-repo>
# Redundância & Repositório de Backup (Mandatório)
# backup_forge padrão: github (opções: github, tildegit, gitlab, custom)
backup_forge = github
backup_owner = lumenpink
backup_repo = <nome-do-repo>
# Ou declaração direta de URL de transporte:
# backup_url = git@github.com:lumenpink/<nome-do-repo>.git
# Diretivas de Agentes e Idioma
agent_md_url = https://gist.githubusercontent.com/lumenpink/ebaded4f8bfb956346c28b64f48754fb/raw/c48a2f9cfb4fd73dcb944c4e47a5b17b8f3a3a2e/AGENTS.md
agent_var_lang = english
3.2 Ativação e Bloqueios dos Hooks
Após criar ou clonar o projeto, os hooks DEVEM ser inicializados via:
cccp install
Isso instala:
* commit-msg:
- Validador rigoroso de Conventional Commits.
- Enforcement de Tickets: Rejeita qualquer commit que não contenha a referência explícita ao ticket da issue no padrão (ref #<id>) ou (closes #<id>). Bloqueia commits sem ticket na raiz.
* post-commit: Sincronizador atômico de versão (VERSION), atualização do CHANGELOG.md e metadados.
* pre-push: Gate de CI local com act (ver Seção 5.8).
4. Publicação Web e Documentação (*.2lp.in)
4.1 Infraestrutura: Cloudflare Workers
A vitrine de documentação pública (./site) é publicada na borda da Cloudflare sob o domínio unificado *.2lp.in.
4.2 Arquivo wrangler.jsonc
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "<nome-do-projeto>",
"compatibility_date": "2024-09-23",
"routes": [
{
"pattern": "<nome-do-projeto>.2lp.in",
"custom_domain": true
}
],
"assets": {
"directory": "./site"
}
}
4.3 Cabeçalhos de Segurança (site/_headers)
/*
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
4.4 Fallback: Codeberg Pages (Stateless Orphan Force Push)
Como contingência e redundância estática, o pipeline de CI publica a pasta ./site também no Codeberg Pages (https://lumenpink.codeberg.page/<nome-do-repo>/).
Para evitar acúmulo de histórico de builds e inchaço do repositório no Codeberg, o branch pages é tratado como estritamente efêmero: a publicação gera uma árvore órfã isolada com commit único do snapshot atual e executa git push --force origin pages.
4.5 Armazenamento Canônico de Artefatos & Releases (Cloudflare R2)
No ecossistema Kollontai, binários compilados (executáveis musl, APKs Android, bundles .tar.gz) NÃO são acumulados nem hospedados em releases no Codeberg.
Todos os artefatos de release são enviados diretamente para buckets Cloudflare R2 via npx wrangler r2 object put e distribuídos na borda sob *.2lp.in com suporte nativo a streaming HTTP Range (RFC 7233) e zero taxa de saída.
4.6 Topologia de Serviços Dinâmicos no Perfil Kollontai
Para repositórios que implementam serviços web dinâmicos, daemons ou REPLs (como o Matraca):
1. Camada Privada Primária (Mesh VPN):
- Acesso via Tailscale (http://100.x.y.z:<porta>).
- Todo tráfego entre smartphones, laptops e estações de desenvolvimento permanece criptografado ponto a ponto na rede WireGuard privada sem abertura de portas no firewall.
2. Camada de Borda Autenticada (Cloudflare Tunnel):
- Quando for conveniente o acesso web com certificado SSL público sem a VPN ativa no cliente móvel, utiliza-se o cloudflared direcionando para o subdomínio app.<repo>.2lp.in com autenticação obrigatória no aplicativo.
5. Stack e Ferramental Padrão de Testes
Para atender aos requisitos de alta cobertura (>90%, foco em 100%) e mutação da norma GOST, o ecossistema Kollontai adota as seguintes ferramentas padronizadas por linguagem:
5.1 Shell Scripting / CLI de Sistema
- Dialeto Canônico: POSIX Shell estrito (
/bin/sh) como baseline universal portável; Bash 5.2+ (#!/usr/bin/env bash) quando recursos avançados (arrays, controle fino de processos) forem expressamente justificados. - Runner de Testes:
shellspec(BDD framework para POSIX shell / bash). - Estrutura: Especificações organizadas sob
spec/(ex:spec/*_spec.sh). - Cobertura: Mensuração via
kcovintegrada ao shellspec (shellspec --kcov), mantendo meta de bloqueio $\ge 90\%$. - Linter & Formatação:
shellcheck(zero avisos tolerados) eshfmt -d -i 2 -ci -bn ..
5.2 Rust (Sistemas, Milters, Daemons, CLI e Clientes)
- Compilador Canônico:
rustc >= 1.99.0(Estado da arte). - Edição Canônica Obrigatória:
edition = "2024"erust-version = "1.99"declarados em todoCargo.toml. - Runner de Testes:
cargo test(testes unitários in-source emsrc/e testes de integração emtests/). - Cobertura:
cargo-tarpaulinoucargo-llvm-cov(com flag obrigatória de bloqueio--fail-under 90). - Testes de Mutação:
cargo-mutantspara detecção de testes ineficazes e mutantes sobreviventes. - Target Estático de Distribuição:
x86_64-unknown-linux-musleaarch64-unknown-linux-musl(compilação estática pura sem glibc para distribuição hermética).
5.3 PHP (IndieWeb, APIs e Aplicações Web)
- Versão Canônica:
PHP >= 8.5.0(Estado da arte). - Suporte Reverso Mandatório: Compatibilidade garantida com
PHP >= 8.2("php": "^8.2 || ^8.3 || ^8.4 || ^8.5"nocomposer.json), proibindo quebras de sintaxe ou dependências exclusivas de versões superiores sem fallback seguro. - Tipagem Estrita:
declare(strict_types=1);mandatório em 100% dos arquivos PHP. - Runner de Testes:
pest(PHP Testing Framework elegante e veloz). - Cobertura: Execução contínua com verificação estrita:
bash vendor/bin/pest --coverage --min=90 - Testes de Mutação:
infection(vendor/bin/infection --min-msi=80 --min-covered-msi=85). - Análise Estática & Estilo:
vendor/bin/phpstan analyse --level=max(configurado com target 8.2 no baseline de compatibilidade) evendor/bin/pint --test.
5.4 Node.js & TypeScript (Serviços, Workers e Tooling)
- Runtime Canônico:
Node.js >= 24.16.0 LTS(Estado da arte). - Padrão de Módulos: ESM nativo obrigatório (
"type": "module"nopackage.json). - TypeScript:
TypeScript >= 5.8sob modo estrito total ("strict": true). - Linter & Formatação:
biome(npx biome check ./npx biome format .) como ferramenta canônica e ultrarrápida baseada em Rust. - Runner de Testes:
vitestounode:testnativo com cobertura v8 $\ge 90\%$.
5.5 Interfaces de Usuário, Web & Mobile: Dioxus 0.8
O framework declarativo universal adotado no perfil Kollontai para desenvolvimento de aplicações gráficas reativas (Desktop, Web WASM e Mobile) é o Dioxus 0.8 (dioxus = "0.8"):
- Multiplataforma Nativa:
- Desktop: Renderização rápida via Tao/Wry.
- Web (WASM): Single Page Apps estáticas com renderização client-side ultra-rápida sem NodeJS em runtime.
- Mobile: Android NDK e iOS compilados diretamente com Cargo.
- Manifesto Canônico (
Dioxus.toml):
Todo projeto Dioxus deve manter seu manifesto configurado com o identificador canônicoin.2lp.<app>e metadados de empacotamento:
```toml
[application]
name = ""
default_platform = "web"
[bundle]
identifier = "in.2lp.
publisher = "Lumen Pink"
icon = ["assets/icon.png"]
``
* **Ergonomia Mobile e Layout Adaptativo:**
- Safe Area Insets respeitando entalhes e barras gestuais (env(safe-area-inset-top)eenv(safe-area-inset-bottom)).
- Alvos de toque comtouch-action: manipulation` e dimensão mínima de 48px.
- Responsividade automática: navegação por barra inferior no celular (< 640px) e barra lateral compacta (rail) em tablets (640px – 1024px).
* Componente de Rodapé Canônico:
Aplicações Dioxus devem embutir o componente reativo do rodapé oficial com tradução dinâmica para as 10 línguas normativas.
5.6 Web, Interfaces e Ponta a Ponta (E2E)
- Runner E2E:
playwright(npx playwright test). - Escopo: Navegação automatizada headless em Chromium, Firefox e WebKit simulando as jornadas reais do usuário e garantindo ausência de erros de console, layout e renderização.
5.7 Análise Estática, Formatação Determinística & Zero Warnings por Stack
O ecossistema adota um pipeline estrito onde erros de linter e desvios de formatação quebram o build:
- Rust:
- Linter:
cargo clippy --all-targets --all-features -- -D warnings - Formatação:
cargo fmt -- --check - Auditoria de Dependências:
cargo audit - PHP:
- Análise Estática:
vendor/bin/phpstan analyse --level=max - Formatação:
vendor/bin/pint --test - Auditoria de Dependências:
composer audit - POSIX Shell:
- Linter:
shellcheck(zero avisos tolerados em todos os scripts) - Formatação:
shfmt -d -i 2 -ci -bn .(2 espaços, recuo de case, operadores no início) - Web, JS/TS, JSON, YAML e Markdown:
- Formatação e Linter:
npx biome check .(canônico) ounpx prettier --check "**/*.{json,yaml,md,js,ts,html,css}" - Higiene Universal de Editores:
- Arquivo
.editorconfigna raiz de todo repositório para impor LF, UTF-8, ausência de trailing whitespaces e indentação correta.
5.8 Gate de Pre-Push com act (CI Local Idêntico)
O ecossistema Kollontai usa act — executor local de Forgejo/GitHub Actions baseado em Docker — para rodar o job test do pipeline em um ambiente bit-for-bit idêntico ao do Forgejo antes de cada git push.
Ferramenta
act(nektos/act): lê.forgejo/workflows/ci.ymle executa os jobs dentro dos mesmos containers Docker usados pelo Forgejo Actions.- Pré-requisito: Docker em execução na máquina de desenvolvimento (sempre presente no ecossistema Kollontai).
Comportamento do Hook pre-push
git push
└─► pre-push hook (instalado por cccp install)
├─ Verifica se act + Docker estão disponíveis
│ └─ Não disponíveis: emite aviso, NÃO bloqueia push
├─ Executa: act -j test --no-pull
│ └─ Saída completa → .git/act-logs/<data>_<hora>_<branch>_<sha-curto>.log
├─ Mostra: spinner vivo + step atual + tempo decorrido
└─ Exit 0: push prossegue | Exit 1: push abortado + resumo + path do log
Formato dos Logs
.git/act-logs/
2026-09-24_09-41_feat-42-rate-limit_a4b3c2d.log
2026-09-24_08-17_main_cd62fd5.log
- Diretório
.git/act-logs/é automaticamente ignorado pelo git. - Consulta rápida ao log mais recente:
cccp act log
UX do Gate no Terminal
⠸ [pre-push] Running CI gate locally...
Job: test › cargo clippy -- -D warnings [0:12]
Log: .git/act-logs/2026-09-24_09-41_feat-42_a4b3c2d.log
Sucesso:
✅ CI gate passed (1m 34s) — pushing to origin/main
Falha:
❌ CI gate failed (0m 47s) — push aborted
→ Step failed: cargo test (3 failures)
→ Log: .git/act-logs/2026-09-24_09-41_feat-42_a4b3c2d.log
→ Bypass consciente: git push --no-verify
Bypass Explícito
git push --no-verify # bypass consciente e documentado — não use por hábito
6. Pipeline de CI/CD (.forgejo/workflows/ci.yml)
O workflow no Forgejo Actions declara obrigatoriamente jobs separados: test (roda também localmente via act) e deploy-site (exclusivo do Forgejo, após push):
name: "CI / CD Pipeline"
on:
push:
branches: [main, develop]
pull_request:
jobs:
test:
name: "Run Test Suite & Enforce Coverage (>90%)"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Passos da stack (ex: pest --coverage --min=90, cargo llvm-cov --fail-under 90, etc.)
deploy-site:
name: "Deploy Documentation Site"
runs-on: ubuntu-latest
needs: [test]
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: "Deploy to Cloudflare Workers"
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
run: |
if [ -n "$CLOUDFLARE_API_TOKEN" ]; then
npx wrangler deploy
fi
- name: "Deploy to Codeberg Pages (Stateless Orphan Force Push)"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.name "actions-user"
git config user.email "actions@codeberg.org"
WORKTREE_DIR=$(mktemp -d)
git worktree add --orphan -b pages "$WORKTREE_DIR"
rm -rf "${WORKTREE_DIR:?}"/*
cp -r site/* "$WORKTREE_DIR/"
cd "$WORKTREE_DIR"
git add -A
if git diff --staged --quiet; then
echo "No site changes to deploy."
else
git commit -m "docs(site): deploy documentation snapshot [skip ci]"
git push --force origin pages
fi
cd - >/dev/null
git worktree remove "$WORKTREE_DIR" --force || true
7. Registro no Catálogo Central (~/src/catalog.json)
Todo repositório sob o perfil Kollontai deve ser registrado no arquivo central de descoberta ~/src/catalog.json:
{
"name": "<nome-do-projeto>",
"forge": "codeberg",
"slug": "lumenpink/<nome-do-projeto>",
"description": "<Descrição objetiva em uma linha>",
"topics": ["palavra-chave-1", "palavra-chave-2"],
"license": "CC0-1.0",
"website": "https://<nome-do-projeto>.2lp.in",
"is_upstream": false
}
Isso garante indexação pelo cccp catalog, ferramentas de busca local e dashboards do ecossistema.
8. Mapeamento do Ciclo DD-TDD no Perfil Kollontai
No dia a dia do ecossistema Kollontai, o ciclo DD-TDD opera integrado ao Codeberg Issues, branches dedicados e ao CLI cccp:
8.1 Passo a Passo Operacional:
- Abertura do Ticket:
- Criado via interface do Codeberg ou via CLI:
bash tea issue create --title "Rate limiting no endpoint de autenticação" # Issue #42 criada - Criação do Branch Dedicado:
- Nunca commitar namain:
bash git checkout -b feat/42-rate-limit - Doc in develop (Commit):
- Documentação prévia dos contratos e schemas:
bash git commit -m "docs(auth): document rate limit headers and error payloads (ref #42)" - Failing Test (Commit):
- Teste automatizado que falha comprovando a ausência da proteção:
bash git commit -m "test(auth): add failing integration test for 61st request (ref #42)" - Fix / Code (Commit):
- Código que faz o teste passar com linter limpo (Zero Warnings):
bash git commit -m "feat(auth): implement token bucket rate limiter (ref #42)" - Finish Docs & Close (Commit):
- Atualização da documentação no./site,CHANGELOG.mde fechamento formal:
bash git commit -m "docs(auth): update security guide and finalize tickets (closes #42)"
8.2 Gestão de Releases e Publicação Semântica
Quando um conjunto de tickets/milestones atinge maturidade:
cccp release minor # ou patch / major
git push --tags origin main
Isso consolida o CHANGELOG.md, atualiza VERSION para versão estável e cria a tag Git correspondente.
8.3 Comandos Operacionais para Agentes de IA no Perfil Kollontai
No dia a dia com agentes de IA (assistentes CLI/IDE), o perfil Kollontai adota o protocolo canônico de comandos curtos:
* DCPD (Do, Commit, Push, Deploy): Autorização expressa para implementação da demanda, validação local com testes e Zero Warnings, commit no padrão Conventional Commits com fechamento de issue (closes #ID), push da branch do ticket, merge na branch principal (main) e push remoto disparando o deploy contínuo no Cloudflare Workers / R2 e Codeberg Pages (via stateless single-commit force push).
* DCP (Do, Commit, Push): Implementação, testes locais e push restritos à branch de trabalho (feat/<id>-*), gerando a URL do Pull Request no Codeberg para revisão humana prévia.
* PLAN (Plan & Propose): Pesquisa e diagnóstico aprofundado sem qualquer alteração em arquivos de código nem commits.
* TDD (Ticket, Doc, Test, Do): Execução estrita das 5 etapas do ciclo GOST com commits separados para documentação (docs: ... ref #ID), teste quebrado (test: ... ref #ID) e código funcional.
* AUDIT (Audit & Check): Auditoria técnica passiva rodando linters no máximo (-D warnings), cobertura (llvm-cov / pest --coverage), testes de mutação (cargo-mutants / infection) e composer/cargo audit.
* FIX (Fix & Clean): Saneamento direcionado para eliminar alertas de análise estática e corrigir formatação com cargo fmt, pint ou shfmt.
* RELEASE (Release & Tag): Execução automatizada de cccp release <patch|minor|major> e sincronização com tags remotas.
9. Internacionalização no Perfil Kollontai
O ecossistema Kollontai adota o padrão de arquitetura multilíngue validado no indieinabox com governança de idioma centralizada pelo cccp:
9.1 Configuração da Língua Primária (.cccprc)
A autoridade canônica do idioma padrão de cada repositório é configurada no .cccprc:
agent_var_lang = english # ou portuguese, etc.
- Serve de baseline para o ciclo DD-TDD e triagem de tickets via
diva. - Define o idioma de fallback automático do aplicativo caso alguma chave de tradução em outro idioma não esteja presente.
9.2 Paridade das 10 Línguas no Aplicativo (resources/locales/ ou locales/)
Todo software deve manter dicionários estruturados para as 10 línguas oficiais:
en.json, pt-BR.json, es.json, fr.json, de.json, it.json, ru.json, zh.json, ja.json, ar.json.
A suíte de testes de integração (ex: Pest, Cargo, ShellSpec) deve validar a paridade de 100% de chaves em relação ao arquivo de baseline.
9.3 Roteador Estático Cliente (site/index.html)
Na raiz de documentação ./site/index.html, inclui-se o script de redirecionamento automático com detecção e persistência:
<script>
(function() {
var supported = ['en', 'pt', 'es', 'fr', 'de', 'it', 'ru', 'zh', 'ja', 'ar'];
var saved = localStorage.getItem('doc_lang');
if (saved && supported.indexOf(saved) !== -1) {
window.location.replace(saved + '/');
return;
}
var navLang = (navigator.language || navigator.userLanguage || 'en').toLowerCase().substring(0, 2);
if (supported.indexOf(navLang) !== -1) {
window.location.replace(navLang + '/');
} else {
window.location.replace('en/');
}
})();
</script>
9.4 Suporte Obrigatório a RTL para o Árabe (site/ar/)
As páginas sob site/ar/ e as interfaces da aplicação utilizam:
<html lang="ar" dir="rtl">
10. Banners e Cards Sociais (Padrão KokoroSim)
Todo repositório Lumen que publique site estático deve manter a automação para geração do banner Open Graph em ./site/assets/og_preview.png.
10.1 Script de Geração (scripts/generate_og_image.py)
Utiliza Python + Pillow para renderizar o banner em 1200x630 com Safe Zone 4:3 centralizada (largura de 720px a 840px), evitando cortes em pré-visualizações móveis e do WhatsApp:
- Resolução: 1200x630 px
- Safe Zone: Miolo central com sangria lateral mínima de 180px.
- Tipografia: Fonte condensada geométrica para títulos de alto impacto.
10.2 Preview de Cards (site/card_preview.html)
Para validação visual fiel antes do deploy, recomenda-se incluir em site/card_preview.html a simulação de renderização em WhatsApp (Dark Mode) e Twitter/X (Summary Large Image), conforme arquitetura do KokoroSim.
11. Arquitetura Pragmática & Estrutura de Código no Perfil Kollontai
O perfil Kollontai materializa os princípios de Inversão de Dependência (DIP), hermeticidade e anti-bloat através de padrões objetivos adaptados às linguagens centrais do ecossistema (Rust e PHP).
11.1 Regra de Gradação: Micro-ferramenta vs. Aplicação
- Micro-ferramentas e Scripts Utilitários: Ferramentas de escopo pontual (ex: CLI de 100 linhas ou filtro de texto) NÃO DEVEM ser fracionadas em múltiplas pastas cerimoniais. Ficam contidas diretamente em
src/main.rs(Rust) ou arquivo executável único (PHP/Bash). - Aplicações e Serviços: Projetos que envolvam persistência, múltiplos protocolos ou casos de uso complexos DEVEM adotar a divisão canônica entre Domínio e Adaptadores.
11.2 Padrão de Diretórios para Rust
Em sistemas, daemons e milters:
src/
├── domain/ # Regras de negócio puras (sem dependências de I/O)
│ ├── mod.rs
│ ├── entity.rs # Modelos e invariantes de domínio
│ ├── status.rs # Enums nativos para máquinas de estado
│ └── ports.rs # Traits de I/O (Output Ports: ex: MessageStore, ClientApi)
├── application/ # Orquestração e Casos de Uso
│ ├── mod.rs
│ └── use_cases.rs # Lógica que opera sobre os traits de domínio
├── adapters/ # Implementações de I/O e interfaces de transporte
│ ├── mod.rs
│ ├── in_memory.rs # Fake em memória para testes unitários herméticos
│ ├── sqlite.rs # Adaptador real de persistência
│ └── cli.rs # Entrada via linha de comando (ex: clap)
└── main.rs # Composition Root: instancia adaptadores e orquestra o bootstrap
Exemplo Canônico de Fake em Memória (Rust):
// src/domain/ports.rs
pub trait MessageStore {
fn save(&mut self, id: &str, content: &str) -> Result<(), String>;
fn find(&self, id: &str) -> Option<String>;
}
// src/adapters/in_memory.rs
use std::collections::HashMap;
use crate::domain::ports::MessageStore;
#[derive(Default)]
pub struct InMemoryMessageStore {
items: HashMap<String, String>,
}
impl MessageStore for InMemoryMessageStore {
fn save(&mut self, id: &str, content: &str) -> Result<(), String> {
self.items.insert(id.to_string(), content.to_string());
Ok(())
}
fn find(&self, id: &str) -> Option<String> {
self.items.get(id).cloned()
}
}
Zero mocks dinâmicos: Os testes unitários do caso de uso instanciam InMemoryMessageStore diretamente, rodando em microssegundos sem rede nem arquivos.
11.3 Padrão de Diretórios para PHP
Em APIs, aplicações IndieWeb e serviços web:
src/
├── Domain/ # Núcleo de domínio (PHP puro, zero dependências externas)
│ ├── Models/ # Entidades de negócio
│ ├── Enums/ # Backed Enums nativos (estados e categorias)
│ └── Ports/ # Contratos e Interfaces (Input/Output Ports)
├── Application/ # Casos de uso e orquestração
│ └── UseCases/ # Handlers executando fluxos de domínio
└── Infrastructure/ # Adaptadores concretos
├── Persistence/ # Implementações reais (SQLite/Pdo) e In-Memory Fakes
├── Http/ # Controllers e Middlewares
└── Console/ # Comandos CLI
tests/
├── Unit/ # Testes herméticos usando In-Memory Fakes (milissegundos)
└── Integration/ # Testes com fixtures de banco SQLite em arquivo temporário
Exemplo Canônico de Fake em Memória e Pest (PHP):
// src/Domain/Ports/TokenStorageInterface.php
namespace App\Domain\Ports;
interface TokenStorageInterface {
public function store(string $token, string $userId): void;
public function find(string $token): ?string;
}
// src/Infrastructure/Persistence/InMemoryTokenStorage.php
namespace App\Infrastructure\Persistence;
use App\Domain\Ports\TokenStorageInterface;
final class InMemoryTokenStorage implements TokenStorageInterface {
/** @var array<string, string> */
private array $tokens = [];
public function store(string $token, string $userId): void {
$this->tokens[$token] = $userId;
}
public function find(string $token): ?string {
return $this->tokens[$token] ?? null;
}
}
No teste Pest (tests/Unit/AuthenticateUserTest.php):
test('autentica usuário com storage em memória', function () {
$storage = new \App\Infrastructure\Persistence\InMemoryTokenStorage();
$storage->store('tok-123', 'usr-456');
expect($storage->find('tok-123'))->toBe('usr-456')
->and($storage->find('inexistente'))->toBeNull();
});
11.4 Filosofia Anti-Bloat: Tipos Primitivos & Validação na Borda
- Parse, Don't Validate na Entrada: A validação e desinfecção de strings, limites numéricos e decodificação JSON ocorrem no adaptador de entrada (ex: validação de request HTTP ou parser do CLI).
- Primitivos Confiáveis no Domínio: Evita-se criar Value Objects cerimoniais (ex:
UsernameString,IdInt) quando tipos primitivos nativos (string,int) com tipagem estrita da linguagem atendem com clareza. - Modelagem com Enums Nativos:
- Rust:
pub enum TaskState { Pending, Running, Finished { exit_code: i32 } } - PHP:
enum OrderStatus: string { case Pending = 'pending'; case Approved = 'approved'; case Cancelled = 'cancelled'; }
12. Padrões de Sistema e Containers no Perfil Kollontai
O ecossistema Kollontai adota padrões rígidos de interoperabilidade Unix, priorizando ferramentas leves e compatíveis com shell scripting e ambientes conteinerizados seguros.
12.1 Resolução Canônica de Diretórios XDG
Todo utilitário ou serviço Lumen implementa o mapeamento estrito da especificação XDG com fallbacks universais.
Em Shell Scripting (POSIX):
APP_NAME="meu-app"
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/$APP_NAME"
DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/$APP_NAME"
STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/$APP_NAME"
CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/$APP_NAME"
RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/$APP_NAME"
mkdir -p "$CONFIG_DIR" "$DATA_DIR" "$STATE_DIR" "$CACHE_DIR" 2>/dev/null
Em Rust:
pub fn config_path(app: &str) -> std::path::PathBuf {
let base = std::env::var("XDG_CONFIG_HOME")
.map(std::path::PathBuf::from)
.unwrap_or_else(|_| {
let home = std::env::var("HOME").unwrap_or_else(|_| ".".into());
std::path::PathBuf::from(home).join(".config")
});
base.join(app)
}
12.2 Configuração Plana Baseada em Shell e Env (KEY=VALOR)
Para eliminar dependências pesadas de parsing (como bibliotecas TOML/YAML) em scripts de automação, os arquivos de configuração locais e de usuário adotam formato plano compatível com shell:
# $XDG_CONFIG_HOME/meu-app/config.env
MATRACA_PORT="8080"
MATRACA_BIND="127.0.0.1"
MATRACA_LOG_LEVEL="info"
Carregamento Nativo em Shell:
if [ -f "$CONFIG_FILE" ]; then
set -a
# shellcheck source=/dev/null
. "$CONFIG_FILE"
set +a
fi
12.3 Dockerfiles Canônicos no Perfil Kollontai
Template Rust (Multi-stage + scratch estático):
# Estágio de compilação
FROM rust:1.99-alpine AS builder
RUN apk add --no-cache musl-dev
WORKDIR /build
COPY Cargo.toml Cargo.lock ./
COPY src ./src
RUN cargo build --release --target x86_64-unknown-linux-musl
# Imagem final de produção (Zero Inchaço)
FROM scratch
USER 1000:1000
COPY --from=builder /build/target/x86_64-unknown-linux-musl/release/app /usr/local/bin/app
ENTRYPOINT ["/usr/local/bin/app"]
Template PHP (Multi-stage + alpine com Non-root):
# Estágio de dependências
FROM composer:2 AS vendor
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
# Imagem final de execução
FROM php:8.3-cli-alpine
RUN adduser -D -u 1000 appuser
WORKDIR /app
COPY --chown=appuser:appuser . /app
COPY --chown=appuser:appuser --from=vendor /app/vendor /app/vendor
USER 1000:1000
ENTRYPOINT ["php", "/app/bin/console"]
12.4 Higiene de Containers (.dockerignore e compose.yaml)
Todo repositório com suporte a Docker DEVE incluir .dockerignore rigoroso na raiz:
.git
.env*
!*.example
target/
vendor/
tests/
site/
*.log
E para orquestração de desenvolvimento local, adotar compose.yaml:
services:
app:
build: .
user: "1000:1000"
env_file:
- .env
ports:
- "${APP_PORT:-8080}:8080"
restart: unless-stopped
13. Rodapé Canônico Multilíngue (Padrão de Autoria e Soberania)
Todo aplicativo com interface gráfica, vitrine pública, documentação (site/) ou CLI com rodapé formatado no ecossistema Kollontai DEVE exibir o rodapé canônico em duas linhas rigorosamente estruturadas, com paridade de tradução nas 10 Línguas Oficiais da Norma GOST.
13.1 Arquitetura do Rodapé em Duas Linhas
- Linha 1 — Afirmação Identitária & Transfeminista:
Orgulhosamente produzido por uma [travesti latina] 🏳️⚧️ :) - O substantivo "travesti" permanece rigorosamente sem tradução em todos os idiomas, preservando sua singularidade geopolítica e conceitual sul-americana.
- O adjetivo "latina" é adaptado à gramática nativa de cada idioma.
- A expressão composta
travesti [latina]DEVE atuar como hiperlink obrigatório direcionando para o artigo canônico de definição emhttps://travesti.2lp.in/<lang>/. -
A bandeira trans (
🏳️⚧️) sucede a expressão antes do sorriso:). -
Linha 2 — Metadados de Soberania, Autoria e Licenciamento:
{Nome do App} v{Versão} • [Lumen Pink](https://lumen.pink) • {Data/Hora ISO UTC} • {País / Brasil} 🇧🇷 • [{Licença}] {Nome do App}: Identificador público da aplicação ou biblioteca.v{Versão}: Versão extraída diretamente do arquivoVERSIONda raiz do repositório (ex:v0.1.0-dev.1ouv1.0.0).Lumen Pink: Com link canônico parahttps://lumen.pink.{Data/Hora ISO UTC}: Carimbo exato de data e hora da compilação/montagem no formato ISO 8601 UTC (ex:2026-09-28T22:20:00Z), no lugar do ano estático.{País / Brasil} 🇧🇷: Nome do país adaptado ao idioma (ex:Brasil 🇧🇷,Brazil 🇧🇷,Brésil 🇧🇷,Brasilien 🇧🇷,Brasile 🇧🇷,Бразилия 🇧🇷,巴西 🇧🇷,ブラジル 🇧🇷,البرازيل 🇧🇷), acompanhado da bandeira nacional brasileira.[{Licença}]: Identificador SPDX da licença (ex:GPL-3.0-or-later,CC-BY-SA-4.0, etc.) com link para o arquivoLICENSEdo repositório.
13.2 Matriz Canônica das 10 Línguas Oficiais (Rodapé)
| Idioma | ISO | Linha 1 (Afirmação Identitária) | Linha 2 (Metadados de Soberania) |
|---|---|---|---|
| Português | pt |
Orgulhosamente produzido por uma travesti latina 🏳️⚧️ :) | {App} v{Versão} • por Lumen Pink • {ISO_UTC} • Brasil 🇧🇷 • [{Licença}] |
| Inglês | en |
Proudly produced by a Latin American travesti 🏳️⚧️ :) | {App} v{Versão} • by Lumen Pink • {ISO_UTC} • Brazil 🇧🇷 • [{Licença}] |
| Espanhol | es |
Orgullosamente producido por una travesti latinoamericana 🏳️⚧️ :) | {App} v{Versão} • por Lumen Pink • {ISO_UTC} • Brasil 🇧🇷 • [{Licença}] |
| Francês | fr |
Fièrement produit par une travesti latino-américaine 🏳️⚧️ :) | {App} v{Versão} • par Lumen Pink • {ISO_UTC} • Brésil 🇧🇷 • [{Licença}] |
| Alemão | de |
Mit Stolz entwickelt von einer lateinamerikanischen Travesti 🏳️⚧️ :) | {App} v{Versão} • von Lumen Pink • {ISO_UTC} • Brasilien 🇧🇷 • [{Licença}] |
| Italiano | it |
Orgogliosamente prodotto da una travesti latinoamericana 🏳️⚧️ :) | {App} v{Versão} • da Lumen Pink • {ISO_UTC} • Brasile 🇧🇷 • [{Licença}] |
| Russo | ru |
С гордостью создано латиноамериканской travesti 🏳️⚧️ :) | {App} v{Versão} • от Lumen Pink • {ISO_UTC} • Бразилия 🇧🇷 • [{Licença}] |
| Chinês | zh |
由一位拉美 travesti 自豪制作 🏳️⚧️ :) | {App} v{Versão} • 来自 Lumen Pink • {ISO_UTC} • 巴西 🇧🇷 • [{Licença}] |
| Japonês | ja |
ラテンアメリカの travesti によって誇りを持って制作されました 🏳️⚧️ :) | {App} v{Versão} • 制作: Lumen Pink • {ISO_UTC} • ブラジル 🇧🇷 • [{Licença}] |
| Árabe (RTL) | ar |
صُنع بكل فخر بواسطة travesti أمريكية لاتينية 🏳️⚧️ :) | {App} v{Versão} • بواسطة Lumen Pink • {ISO_UTC} • البرازيل 🇧🇷 • [{Licença}] |
14. Atualização Contínua de Containers Docker (Watchtower)
Para garantir segurança, integridade e atualização contínua de imagens de containers em infraestruturas Docker / Docker Compose autohospedadas (como nos nós obione, obitwo e baquara), a automação adota o Watchtower sob as seguintes diretrizes obrigatórias:
- Opt-in Rigoroso por Labels (
--label-enable):
O Watchtower NUNCA monitora ou reinicia containers de modo indiscriminado. Apenas containers declarando explicitamente a label:
```yaml
labels:- "com.centurylinklabs.watchtower.enable=true"
```
serão atualizados. Containers com dependências sensíveis de migração de banco de dados ou volumes críticos sem backup permanecem intocados.
- "com.centurylinklabs.watchtower.enable=true"
- Limpeza Compulsória de Imagens Órfãs (
WATCHTOWER_CLEANUP=true):
Imagens antigas substituídas são purgadas imediatamente para evitar exaustão de armazenamento no host. - Modos de Acionamento Homologados:
- Agendamento Periódico: Polling programado com intervalo seguro (ex: diário ou a cada 2h).
- Acionamento por Webhook (WATCHTOWER_HTTP_API_TOKEN): Disparo autenticado via POST HTTP disparado automaticamente pelo pipeline de CI/CD do Codeberg após a publicação da nova imagem no registry.