Variantes — Taxonomy
Define o termo **variante** como instância executável de um componente Koder para uma combinação específica de superfície (UI/forma) × alvo (plataforma/SO) × fator de forma (dispositivo). Distingue de release (eixo temporal) e de artefato (build output). Codifica os três eixos como vocabulário fechado, lista combinações válidas, e define o naming canônico `<sector>-<surface>-<target>`.
Variantes na Koder Stack
1. Definição
Uma *ariante*é uma instância executável de um componente Koder para uma combinação específica de:
- *urface*— qual superfície de interação ela expõe (mobile, desktop,
tv, web, cli, tui, engine, backend).
- *arget*— qual plataforma/SO ela executa (linux, macos, windows,
android, ios, tizenos, webos, browser, universal).
- *orm factor*— qual fator de forma de dispositivo ela serve (phone,
tablet, tv, laptop, desktop, terminal, server, embedded).
Uma variante é o que o usuário final *oda* Não é o código-fonte (isso é um componente L4), nem o arquivo binário entregue (isso é um artefato), nem a release temporal (isso é uma versão).
Exemplos
| Componente | Variante | Naming canônico |
|---|---|---|
| Koder Hub | App mobile Android em celular | hub-mobile-android |
| Koder Hub | App desktop Linux em laptop | hub-desktop-linux |
| Koder Hub | CLI Linux em terminal | hub-cli-linux |
| Koder Hub | Web app em browser | hub-web-browser |
| Koder Talk | App mobile iOS em celular | talk-mobile-ios |
| Koder Talk | App TV TizenOS | talk-tv-tizenos |
| Koder Kortex | Backend Linux em servidor | kortex-backend-linux |
| Koder Koda | Engine embedded em Go runtime | kode-engine-go |
2. Distinção de termos relacionados
| Termo | Eixo | Exemplo |
|---|---|---|
| *ariante* | Distribuição (surface × target × form factor) | hub-cli-linux |
| *elease*/ *ersão* | Tempo (sequência de mudanças) | Hub v2.3.0 |
| *rtefato* | Arquivo entregue (build output) | hub_2.3.0_amd64.deb |
| *omponente* | Código-fonte deployável | products/dev/hub/app/cli/ |
| *ector* | Identidade L3 do produto | products/dev/hub |
A combinação completa que identifica algo único em produção: *sector + variant + release** → ex: hub + cli-linux + v2.3.0`.
3. Vocabulário fechado
3.1 — Surface (eixo de UI/forma de consumo)
Mapeia 1:1 com o L4 de RFC-006:
| Surface | L4 origin | Descrição |
|---|---|---|
mobile |
app/mobile/ |
App Flutter touch-first |
desktop |
app/desktop/ |
App Flutter com mouse+teclado |
tv |
app/tv/ |
App JS/React com remote |
web |
app/web/ |
App em browser (PWA, SaaS) |
cli |
app/cli/ |
Comando não-interativo |
tui |
app/tui/ |
Terminal UI interativa |
backend |
backend/ |
Servidor HTTPgRPCWebSocket |
engine |
engine/ |
Biblioteca embarcável |
3.2 — Target (eixo de plataforma/SO)
| Target | Aplicável a surface |
|---|---|
linux |
desktop, cli, tui, backend, web (server-side) |
macos |
desktop, cli, tui |
windows |
desktop, cli, tui |
android |
mobile |
ios |
mobile |
tizenos |
tv |
webos |
tv |
browser |
web (qualquer ChromeEdgeFirefox/Safari) |
universal |
engine (multi-language binding agnóstico de SO) |
3.3 — Form factor (eixo de dispositivo)
| Form factor | Surface típica |
|---|---|
phone |
mobile |
tablet |
mobile, desktop (iPad com keyboard) |
tv |
tv |
laptop |
desktop, web |
desktop (workstation) |
desktop, web |
terminal |
cli, tui |
server |
backend |
embedded |
engine |
4. Combinações válidas
Nem todo cruzamento surface × target × form_factor faz sentido. A matriz canônica:
| Surface | Targets válidos | Form factors típicos |
|---|---|---|
mobile |
android, ios | phone, tablet |
desktop |
linux, macos, windows | laptop, desktop, tablet (iPad) |
tv |
tizenos, webos | tv |
web |
browser | laptop, desktop, tablet, phone |
cli |
linux, macos, windows | terminal, server |
tui |
linux, macos, windows | terminal |
backend |
linux | server |
engine |
universal | embedded, server, terminal, laptop |
Combinações ausentes da matriz não devem ser inventadas sem RFC explícita (análogo ao RFC-006 §3.4 para adicionar nova surface).
5. Naming canônico
<sector>-<surface>-<target>Exemplos:
hub-cli-linuxtalk-mobile-androidkmail-web-browserpass-desktop-macos
Para multi-target (ex: Flutter mobile que cobre Android + iOS no mesmo código), usar a surface em vez do target específico:
talk-mobile(cobretalk-mobile-androidetalk-mobile-ios)pass-desktop(cobrepass-desktop-linux/macos/windows)
Variantes com brand B2B usam o prefixo da brand:
raven-web-browser(variante web do Raven, não do Kmail)nimbus-cli-linux(variante CLI do Nimbus)
6. Onde aparecem
6.1 — koder.manifest.json
O /k-manifest lista uma entrada variants[] por componente, com schema:
{
"variants": [
{
"name": "hub-cli-linux",
"surface": "cli",
"target": "linux",
"form_factor": "terminal",
"source": "products/dev/hub/app/cli/",
"artifact": "hub_x.y.z_amd64.deb"
}
]
}6.2 — /k-parity
A "matriz de paridade de UIs" é literalmente a matriz de variantes do componente: cada coluna é uma variante, cada linha é uma feature, cada célula é o estado dessa feature naquela variante.
6.3 — /k-test, /k-bench
Os testes e benchmarks rodam *or variante* Um relatório de teste declara a variante alvo (talk-mobile-android é distinto de talk-mobile-ios, mesmo compartilhando 95% do código).
6.4 — Naming de pacote, container, serviço
Pacotes Linux: <sector>-<surface> (sem target, que vem da arch)
hub-cli→hub-cli_2.3.0_amd64.deb,hub-cli_2.3.0_arm64.deb
Containers Docker: koder/<sector>-<surface>
koder/kmail-backend:v2.3.0
Systemd services: koder-<sector>-<surface>.service
koder-hub-backend.service
7. Regras de uso (normativo)
- *empre dizer "variante" em vez de "versão" ao se referir a uma
combinação de surfacetargetform* "Versão" fica reservado para release temporal.
- *aming consistente*
<sector>-<surface>ou<sector>-<surface>-<target>— nunca inventar variações ad-hoc. - *ada variante tem manifest próprio* declarações de capabilities,
permissions, dependencies por variante (uma variante CLI não pede permissão de microfone; uma variante mobile pede).
- *aridade é entre variantes, não entre "UIs" ou "plataformas"*—
o termo unifica os três eixos.
- *rand variants (par engine+product) seguem a mesma regra*
raven-backend-linuxekmail-backend-linuxsão variantes distintas, mesmo que partilhem código.
8. Anti-padrões
- ❌ "Versão Linux do Hub" → ✅ "Variante CLI Linux do Hub"
- ❌ "Plataforma Android do Talk" → ✅ "Variante mobile Android do Talk"
- ❌ "Build do Pass para iPad" → ✅ "Variante mobile iOS form factor tablet do Pass"
- ❌ Naming
hub-linux-cli(ordem errada) → ✅hub-cli-linux - ❌ Inventar surface fora do vocabulário fechado (ex:
hub-watch-watchos) sem RFC
9. Migração
Documentos pré-existentes que usam "versão de UI", "versão de plataforma", "build para X" devem ser progressivamente atualizados para "variante", sem quebrar refs antigas. O /k-housekeep audita e abre tickets para correções.