nexus-core-v3 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/agents/README.md +133 -0
- package/agents/_protocol.md +107 -0
- package/agents/analyst.md +138 -0
- package/agents/architect.md +146 -0
- package/agents/data-engineer.md +170 -0
- package/agents/dev.md +134 -0
- package/agents/devops.md +141 -0
- package/agents/nexus-master.md +147 -0
- package/agents/pm.md +133 -0
- package/agents/po.md +138 -0
- package/agents/qa.md +192 -0
- package/agents/sm.md +122 -0
- package/agents/squad-creator.md +121 -0
- package/agents/ux-design-expert.md +165 -0
- package/artifact-manifest.json +903 -0
- package/bin/nexus.mjs +37 -0
- package/checklists/README.md +49 -0
- package/checklists/architect-checklist.md +47 -0
- package/checklists/change-checklist.md +61 -0
- package/checklists/db-predeploy-checklist.md +57 -0
- package/checklists/design-quality-checklist.md +57 -0
- package/checklists/discovery-checklist.md +36 -0
- package/checklists/foundation-checklist.md +39 -0
- package/checklists/launch-checklist.md +39 -0
- package/checklists/pm-checklist.md +48 -0
- package/checklists/po-master-checklist.md +64 -0
- package/checklists/reality-check-checklist.md +49 -0
- package/checklists/story-dod-checklist.md +52 -0
- package/checklists/story-draft-checklist.md +36 -0
- package/dist/bin/dashboard.html +279 -0
- package/dist/bin/nexus.mjs +20008 -0
- package/dist/constitution.yaml +76 -0
- package/knowledge/README.md +57 -0
- package/knowledge/architecture/architectural-styles-map.md +182 -0
- package/knowledge/architecture/design-patterns-gof.md +192 -0
- package/knowledge/architecture/distributed-patterns-cheatsheet.md +201 -0
- package/knowledge/architecture/saas-subscription-blueprint.md +355 -0
- package/knowledge/architecture/system-design-tradeoffs.md +231 -0
- package/knowledge/architecture/t3-fullstack-typesafe-stack.md +273 -0
- package/knowledge/copy/landing-copy-that-converts.md +168 -0
- package/knowledge/data/postgres-indexing-and-tuning.md +263 -0
- package/knowledge/data/schema-modeling-decisions.md +273 -0
- package/knowledge/data/supabase-rls-patterns.md +316 -0
- package/knowledge/data/zero-downtime-migrations.md +308 -0
- package/knowledge/devops/cicd-pipeline-best-practices.md +318 -0
- package/knowledge/devops/production-dockerfile.md +283 -0
- package/knowledge/devops/twelve-factor-app.md +398 -0
- package/knowledge/engineering/clean-code-principles.md +429 -0
- package/knowledge/engineering/effective-code-review.md +204 -0
- package/knowledge/engineering/testing-strategy-beyond-unit.md +307 -0
- package/knowledge/governance/risk-matrix.md +56 -0
- package/knowledge/integration/mcp-server-selection-matrix.md +235 -0
- package/knowledge/marketing/copy-que-converte.md +43 -0
- package/knowledge/marketing/funil-e-jornada.md +36 -0
- package/knowledge/negocios/proposta-vencedora.md +38 -0
- package/knowledge/negocios/roi-e-unit-economics.md +46 -0
- package/knowledge/pipeline/1-descobrir.md +26 -0
- package/knowledge/pipeline/2-estrategizar.md +26 -0
- package/knowledge/pipeline/3-estruturar.md +27 -0
- package/knowledge/pipeline/4-construir.md +27 -0
- package/knowledge/pipeline/5-endurecer.md +28 -0
- package/knowledge/pipeline/6-lancar.md +27 -0
- package/knowledge/pipeline/7-operar.md +27 -0
- package/knowledge/security/lgpd-conformidade-basica.md +35 -0
- package/knowledge/security/owasp-secure-coding-gates.md +220 -0
- package/knowledge/security/owasp-top10-threat-assessment.md +287 -0
- package/knowledge/security/threat-modeling-stride.md +34 -0
- package/knowledge/web-craft/a11y-audit-checklist.md +251 -0
- package/knowledge/web-craft/accessible-component-patterns.md +383 -0
- package/knowledge/web-craft/anti-ai-look.md +114 -0
- package/knowledge/web-craft/design-system-from-code.md +195 -0
- package/knowledge/web-craft/intrinsic-css-layout.md +420 -0
- package/knowledge/web-craft/style-cloning.md +185 -0
- package/knowledge/web-craft/visual-polish-review.md +183 -0
- package/package.json +55 -0
- package/runbooks/campanha-de-conteudo.md +36 -0
- package/runbooks/feature-em-projeto-existente.md +37 -0
- package/runbooks/mvp-startup.md +38 -0
- package/runbooks/resposta-a-incidente.md +37 -0
- package/squads/exemplo-conteudo/agents/editor-chefe.md +48 -0
- package/squads/exemplo-conteudo/agents/pesquisador.md +44 -0
- package/squads/exemplo-conteudo/agents/redator.md +45 -0
- package/squads/exemplo-conteudo/knowledge/estilo-editorial.md +21 -0
- package/squads/exemplo-conteudo/squad.yaml +19 -0
- package/squads/exemplo-conteudo/tasks/pesquisar-fontes.md +26 -0
- package/squads/exemplo-conteudo/tasks/planejar-pauta.md +27 -0
- package/squads/exemplo-conteudo/tasks/redigir-artigo.md +26 -0
- package/squads/exemplo-conteudo/tasks/revisar-artigo.md +27 -0
- package/squads/marketing/agents/analista.md +56 -0
- package/squads/marketing/agents/chefe-marketing.md +65 -0
- package/squads/marketing/agents/conteudo.md +55 -0
- package/squads/marketing/agents/copy.md +55 -0
- package/squads/marketing/agents/growth.md +56 -0
- package/squads/marketing/agents/social.md +55 -0
- package/squads/marketing/squad.yaml +17 -0
- package/squads/marketing/tasks/aprovar-campanha.md +43 -0
- package/squads/negocios/agents/chefe-negocios.md +65 -0
- package/squads/negocios/agents/financas-roi.md +55 -0
- package/squads/negocios/agents/suporte.md +55 -0
- package/squads/negocios/agents/vendas-proposta.md +56 -0
- package/squads/negocios/squad.yaml +17 -0
- package/squads/negocios/tasks/aprovar-proposta.md +40 -0
- package/squads/security/agents/appsec-reviewer.md +59 -0
- package/squads/security/agents/chefe-seguranca.md +65 -0
- package/squads/security/agents/compliance-auditor.md +60 -0
- package/squads/security/agents/threat-modeler.md +60 -0
- package/squads/security/squad.yaml +20 -0
- package/squads/security/tasks/aprovar-gate-seguranca.md +42 -0
- package/squads/security/tasks/emitir-parecer-conformidade.md +42 -0
- package/tasks/README.md +72 -0
- package/tasks/accessibility-wcag-checklist.md +69 -0
- package/tasks/advanced-elicitation.md +42 -0
- package/tasks/analyze-performance.md +54 -0
- package/tasks/analyze-project-structure.md +59 -0
- package/tasks/apply-qa-fixes.md +57 -0
- package/tasks/architect-analyze-impact.md +62 -0
- package/tasks/archive-squad.md +52 -0
- package/tasks/audit-codebase.md +53 -0
- package/tasks/build-component.md +61 -0
- package/tasks/calculate-roi.md +63 -0
- package/tasks/ci-cd-configuration.md +51 -0
- package/tasks/collect-visual-evidence.md +62 -0
- package/tasks/compose-molecule.md +57 -0
- package/tasks/consolidate-patterns.md +54 -0
- package/tasks/create-brownfield-prd.md +54 -0
- package/tasks/create-competitor-analysis.md +42 -0
- package/tasks/create-deep-research-prompt.md +62 -0
- package/tasks/create-doc.md +62 -0
- package/tasks/create-epic.md +49 -0
- package/tasks/create-front-end-spec.md +56 -0
- package/tasks/create-migration-plan.md +57 -0
- package/tasks/create-next-story.md +66 -0
- package/tasks/create-prd.md +53 -0
- package/tasks/create-project-brief.md +47 -0
- package/tasks/create-rls-policies.md +59 -0
- package/tasks/create-schema.md +57 -0
- package/tasks/create-service.md +55 -0
- package/tasks/create-squad.md +100 -0
- package/tasks/create-suite.md +62 -0
- package/tasks/db-apply-migration.md +56 -0
- package/tasks/db-domain-modeling.md +57 -0
- package/tasks/db-dry-run.md +50 -0
- package/tasks/db-env-check.md +57 -0
- package/tasks/db-load-csv.md +54 -0
- package/tasks/db-policy-apply.md +58 -0
- package/tasks/db-rollback.md +51 -0
- package/tasks/db-run-sql.md +61 -0
- package/tasks/db-seed.md +52 -0
- package/tasks/db-smoke-test.md +51 -0
- package/tasks/db-snapshot.md +48 -0
- package/tasks/db-verify-order.md +49 -0
- package/tasks/deliberate.md +46 -0
- package/tasks/design-indexes.md +59 -0
- package/tasks/dev-develop-story.md +61 -0
- package/tasks/document-project.md +59 -0
- package/tasks/execute-checklist.md +57 -0
- package/tasks/execute-epic-plan.md +52 -0
- package/tasks/execute-subtask.md +51 -0
- package/tasks/extend-pattern.md +63 -0
- package/tasks/extend-squad.md +60 -0
- package/tasks/extract-patterns.md +64 -0
- package/tasks/extract-tokens.md +59 -0
- package/tasks/facilitate-brainstorming-session.md +42 -0
- package/tasks/generate-ai-frontend-prompt.md +57 -0
- package/tasks/generate-documentation.md +60 -0
- package/tasks/generate-migration-strategy.md +57 -0
- package/tasks/generate-shock-report.md +56 -0
- package/tasks/mcp-management.md +66 -0
- package/tasks/orchestrate.md +50 -0
- package/tasks/perform-market-research.md +42 -0
- package/tasks/plan-create-context.md +57 -0
- package/tasks/plan-create-implementation.md +58 -0
- package/tasks/po-close-story.md +60 -0
- package/tasks/po-manage-story-backlog.md +59 -0
- package/tasks/po-pull-story.md +60 -0
- package/tasks/po-sync-story.md +59 -0
- package/tasks/pr-automation.md +50 -0
- package/tasks/pre-push-quality-gate.md +54 -0
- package/tasks/push.md +53 -0
- package/tasks/qa-browser-console-check.md +52 -0
- package/tasks/qa-create-fix-request.md +58 -0
- package/tasks/qa-evidence-requirements.md +55 -0
- package/tasks/qa-false-positive-detection.md +55 -0
- package/tasks/qa-fix-issues.md +55 -0
- package/tasks/qa-gate.md +53 -0
- package/tasks/qa-migration-validation.md +58 -0
- package/tasks/qa-nfr-assess.md +45 -0
- package/tasks/qa-review-story.md +56 -0
- package/tasks/qa-risk-profile.md +45 -0
- package/tasks/qa-security-checklist.md +64 -0
- package/tasks/qa-test-design.md +47 -0
- package/tasks/qa-trace-requirements.md +48 -0
- package/tasks/release-management.md +53 -0
- package/tasks/repository-cleanup.md +61 -0
- package/tasks/route.md +44 -0
- package/tasks/run-tests.md +50 -0
- package/tasks/security-audit.md +54 -0
- package/tasks/setup-database.md +60 -0
- package/tasks/setup-design-system.md +60 -0
- package/tasks/shard-doc.md +60 -0
- package/tasks/spec-assess-complexity.md +55 -0
- package/tasks/spec-critique.md +64 -0
- package/tasks/spec-gather-requirements.md +48 -0
- package/tasks/spec-research-dependencies.md +42 -0
- package/tasks/spec-write-spec.md +50 -0
- package/tasks/test-as-user.md +52 -0
- package/tasks/ux-create-wireframe.md +54 -0
- package/tasks/ux-user-research.md +55 -0
- package/tasks/validate-next-story.md +61 -0
- package/tasks/validate-squad.md +55 -0
- package/tasks/verify-subtask.md +52 -0
- package/tasks/version-management.md +45 -0
- package/templates/README.md +47 -0
- package/templates/architecture-tmpl.md +115 -0
- package/templates/competitor-analysis-tmpl.md +87 -0
- package/templates/epic-tmpl.md +83 -0
- package/templates/front-end-spec-tmpl.md +110 -0
- package/templates/market-research-tmpl.md +98 -0
- package/templates/migration-plan-tmpl.md +92 -0
- package/templates/prd-tmpl.md +95 -0
- package/templates/project-brief-tmpl.md +100 -0
- package/templates/qa-verdict-tmpl.md +73 -0
- package/templates/rls-policies-tmpl.md +93 -0
- package/templates/schema-design-tmpl.md +107 -0
- package/templates/spec-tmpl.md +88 -0
- package/templates/squad/agent-dna-tmpl.md +72 -0
- package/templates/squad/chief-dna-tmpl.md +98 -0
- package/templates/squad/squad-task-tmpl.md +50 -0
- package/templates/squad/squad-yaml-tmpl.md +47 -0
- package/templates/story-tmpl.md +63 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: style-cloning
|
|
3
|
+
domain: web-craft
|
|
4
|
+
agents: [ux-design-expert]
|
|
5
|
+
when: "ao receber uma referência (site/print) e precisar reaplicar a linguagem de design dela num novo projeto"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Style Cloning — extrair a linguagem de uma referência e reaplicar fielmente
|
|
9
|
+
|
|
10
|
+
O pedido chega assim: "faz parecido com esse site", junto de um print ou uma URL. O trabalho **não** é
|
|
11
|
+
copiar a tela — é dissecar *por que* aquela referência funciona, isolar as decisões que dão o feeling, e
|
|
12
|
+
reconstruir essas decisões como sistema no projeto novo. Quem copia a tela produz uma falsificação
|
|
13
|
+
quebrada; quem extrai a **linguagem** produz algo que pertence à mesma família visual e ainda assim é
|
|
14
|
+
próprio.
|
|
15
|
+
|
|
16
|
+
**A linha ética é dura e vem antes de tudo:** você extrai a *técnica* (a razão tipográfica, a temperatura
|
|
17
|
+
da paleta, a curva de easing, a densidade) — você **nunca** copia o asset (logo, foto, ilustração,
|
|
18
|
+
ícone-set proprietário, o texto/conteúdo). Linguagem de design é craft e não é protegível; asset e copy
|
|
19
|
+
são IP de terceiros. Se você se pegar baixando a imagem do hero da referência pra usar no projeto, parou:
|
|
20
|
+
errado. Reproduza o *tratamento* daquela imagem (grão, corte, temperatura) numa imagem licenciada/própria.
|
|
21
|
+
|
|
22
|
+
## O problema / os tells de uma clonagem ruim
|
|
23
|
+
|
|
24
|
+
Reconheça o trabalho ruim — clonagem feita errado tem cara:
|
|
25
|
+
|
|
26
|
+
1. **Print-tracing.** A pessoa recriou *aquela tela exata* (mesmo hero, mesma manchete, mesmos 3 cards na
|
|
27
|
+
mesma ordem) em vez de extrair o sistema. Resultado: muda o conteúdo do projeto e tudo desaba, porque
|
|
28
|
+
nada era regra — era cópia pixel a pixel de um caso específico.
|
|
29
|
+
2. **"Pegou a cor primária" e mais nada.** Capturou `#FF5A1F` da referência, jogou num template default
|
|
30
|
+
e achou que clonou. A cor sozinha não carrega o feeling — carrega tipografia + espaço + densidade +
|
|
31
|
+
motion juntos.
|
|
32
|
+
3. **Tipografia trocada pelo "parecido do Google Fonts".** A referência usa uma grotesca comercial paga;
|
|
33
|
+
a pessoa botou Montserrat "porque é tipo isso" e o caráter evaporou. Par de fonte errado mata a
|
|
34
|
+
semelhança mais que cor errada.
|
|
35
|
+
4. **Eyedropper de uma cor, não da temperatura.** Pegou o accent mas manteve os neutros do template
|
|
36
|
+
(cinza `#888` puro), enquanto a referência tinha neutros quentes (cinza puxado pro bege). A página
|
|
37
|
+
"não fica igual" e ninguém sabe dizer por quê — é a temperatura dos neutros.
|
|
38
|
+
5. **Densidade ignorada.** A referência é apertada e densa (estilo terminal/editorial, muita info por
|
|
39
|
+
tela); a réplica saiu arejada e espaçosa porque o template era assim. O *ritmo de informação* é
|
|
40
|
+
metade da identidade e foi perdido.
|
|
41
|
+
6. **Motion copiado de olho como "fade".** A referência tem um stagger com easing custom e overshoot
|
|
42
|
+
sutil; a réplica botou `fade-up .3s ease` em tudo. O movimento é assinatura e foi achatado.
|
|
43
|
+
7. **Asset roubado.** Baixou a foto/ilustração/ícone da referência e colou no projeto. Além de antiético
|
|
44
|
+
e ilegal, denuncia a cópia — é literalmente o material de outra marca na sua página.
|
|
45
|
+
8. **Sem validação lado a lado.** Entregou "de memória", sem nunca colocar referência e réplica na mesma
|
|
46
|
+
tela pra comparar. Sempre que isso acontece, a réplica está 40% fora e a pessoa não percebeu.
|
|
47
|
+
|
|
48
|
+
## Os princípios do craft
|
|
49
|
+
|
|
50
|
+
### 1. Capture sete dimensões, não "a cara"
|
|
51
|
+
|
|
52
|
+
O feeling de uma referência mora em sete eixos. Capture cada um **explicitamente** — anote número e nome,
|
|
53
|
+
não impressão vaga. Use o DevTools (Computed styles) e um eyedropper; impressão "de olho" erra.
|
|
54
|
+
|
|
55
|
+
- **Paleta + temperatura.** Não pegue só o accent. Pegue: 1 accent (e seu hover/active), 2–3 neutros
|
|
56
|
+
(background, surface, texto) e diga a **temperatura** de cada um. O segredo costuma estar nos neutros:
|
|
57
|
+
`#F7F5F2` (off-white quente) sente-se completamente diferente de `#FFFFFF` puro, e é isso que dá o "ar
|
|
58
|
+
premium/editorial". Anote em HSL pra ler a temperatura: se o H dos cinzas está em ~30–50 são quentes,
|
|
59
|
+
~200–220 são frios, sem saturação são mortos.
|
|
60
|
+
- **Sistema tipográfico.** O *par* (display + texto), a **razão da escala** (meça dois tamanhos
|
|
61
|
+
consecutivos e divida: 64/48 ≈ 1.33; 18/16 = 1.125 — descubra a razão), o **peso** de cada nível, o
|
|
62
|
+
**tracking** do display (geralmente negativo em manchete grande: `-0.02em` a `-0.04em`) e o **leading**
|
|
63
|
+
(1.05–1.15 em manchete, 1.5–1.65 em corpo). Identifique as fontes reais (WhatFont, ou olhe o
|
|
64
|
+
`font-family` no Computed). Se forem pagas, escolha o substituto pelo **caráter** (mesma classe:
|
|
65
|
+
grotesca-de-contraste, serifa-transicional, mono-humanista), não pelo nome parecido.
|
|
66
|
+
- **Escala de espaço.** Meça gaps e paddings reais. Existe uma base e uma razão? (8/16/24/40/64 é linear
|
|
67
|
+
×8; 4/8/16/32/64 é geométrico ×2 — sentem diferente). Anote os **extremos** que a referência usa: qual
|
|
68
|
+
o menor gap de agrupamento e o maior respiro de seção. A relação entre eles é o ritmo.
|
|
69
|
+
- **Raios + sombras.** Raio do botão, do card, do input — são iguais ou variados por propósito? Sombra:
|
|
70
|
+
é uma `shadow-md` genérica ou uma sombra **longa e suave de baixa opacidade** (`0 20px 40px
|
|
71
|
+
rgba(0,0,0,.06)`)? Borda de 1px hairline em vez de sombra? Isso define "macio" vs "nítido".
|
|
72
|
+
- **Densidade.** Quanta informação por tela? Conte: a referência mostra 3 coisas com muito ar, ou 12
|
|
73
|
+
coisas organizadas e densas? Densidade é decisão de identidade — um Linear/terminal denso e um
|
|
74
|
+
Stripe/marketing arejado usam *a mesma* base de 8px com densidades opostas.
|
|
75
|
+
- **Motion + easing.** Abra e role devagar. O que entra: tudo junto ou em **stagger**? A curva é o `ease`
|
|
76
|
+
default ou tem **overshoot/anticipation** (cubic-bezier custom)? Duração curta (120–200ms, ágil) ou
|
|
77
|
+
longa (400–600ms, cinematográfico)? Há scroll-linked/parallax? Anote a *sensação* (ágil vs preguiçoso
|
|
78
|
+
vs elástico) e tente a curva.
|
|
79
|
+
- **Tom de imagem + voz da copy.** Imagem: foto ou ilustração? Quente ou fria? Tem **grão/ruído**?
|
|
80
|
+
Contraste alto ou lavado (faded)? Corte cheio ou minimalista? Voz da copy: manchetes curtas e secas?
|
|
81
|
+
Técnicas e específicas? Com humor? Em caixa baixa proposital? Essa é a *técnica* — você reaplica o
|
|
82
|
+
**tratamento**, com seus próprios assets e seu próprio texto.
|
|
83
|
+
|
|
84
|
+
### 2. Traduza cada captura em token — o sistema é a ponte
|
|
85
|
+
|
|
86
|
+
Captura solta vira cópia; captura virada **token** vira linguagem reaplicável. Para cada dimensão, escreva
|
|
87
|
+
um token nomeado *pela intenção*, não pelo valor. É o token que se reaplica no projeto, não o print.
|
|
88
|
+
|
|
89
|
+
```css
|
|
90
|
+
:root {
|
|
91
|
+
/* temperatura é decisão, não acidente — neutros quentes */
|
|
92
|
+
--bg: hsl(40 20% 97%); /* off-white quente, não #fff */
|
|
93
|
+
--surface: hsl(40 14% 94%);
|
|
94
|
+
--text: hsl(30 8% 12%);
|
|
95
|
+
--accent: hsl(18 90% 55%); /* +hover/active derivados, não avulsos */
|
|
96
|
+
|
|
97
|
+
/* escala tipográfica: razão 1.25 capturada da referência */
|
|
98
|
+
--step-0: 1rem; --step-1: 1.25rem; --step-2: 1.563rem; --step-3: 1.953rem;
|
|
99
|
+
--display-tracking: -0.03em; /* manchete aperta */
|
|
100
|
+
--display-leading: 1.08;
|
|
101
|
+
--body-leading: 1.6;
|
|
102
|
+
|
|
103
|
+
/* espaço: geométrico ×2, com extremos reais usados */
|
|
104
|
+
--s-1: .5rem; --s-3: 2rem; --s-6: 8rem; /* respiro de seção grande */
|
|
105
|
+
|
|
106
|
+
/* superfície: sombra longa de baixa opacidade, não shadow-md */
|
|
107
|
+
--shadow-soft: 0 24px 48px -12px hsl(30 20% 10% / .08);
|
|
108
|
+
--radius-card: 14px; /* nem 8 default, nem pill */
|
|
109
|
+
|
|
110
|
+
/* motion: curva com overshoot sutil, captura do easing */
|
|
111
|
+
--ease-signature: cubic-bezier(.16, 1, .3, 1);
|
|
112
|
+
--dur-quick: 160ms;
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Regra de ouro da tradução: **a razão e a temperatura viajam; os valores absolutos podem mudar.** Se o
|
|
117
|
+
projeto novo precisa de accent azul por imposição da marca, mantenha a *mesma temperatura de neutros*, a
|
|
118
|
+
*mesma razão tipográfica*, a *mesma densidade* e o *mesmo easing* — a família visual sobrevive à troca de
|
|
119
|
+
cor. É por isso que se extrai sistema, não pixels.
|
|
120
|
+
|
|
121
|
+
### 3. Reproduza o feeling, não os assets
|
|
122
|
+
|
|
123
|
+
O feeling vem do **tratamento**, e tratamento é técnica reproduzível com material próprio:
|
|
124
|
+
|
|
125
|
+
- A referência tem fotos com grão e contraste lavado? Aplique `filter` + um overlay de ruído + uma
|
|
126
|
+
curva de contraste **nas suas próprias fotos** (licenciadas/geradas/da marca). O grão é a técnica; a
|
|
127
|
+
foto é sua.
|
|
128
|
+
- Ícones com aquele traço fino e cantos específicos? Use um set aberto (ou desenhe) com o *mesmo
|
|
129
|
+
stroke-width e o mesmo line-cap* — não baixe o set proprietário da referência.
|
|
130
|
+
- Aquele detalhe gráfico recorrente (uma linha hairline entre seções, um numeral monoespaçado de label,
|
|
131
|
+
um sublinhado deslocado no link)? Esses "maneirismos" carregam mais identidade que o hero inteiro.
|
|
132
|
+
Catalogue-os e reaplique — são técnica pura, sem asset envolvido.
|
|
133
|
+
- A estrutura/sequência das seções **não** se copia ("hero→logos→3 features→CTA" é justamente o tell de
|
|
134
|
+
template). Reproduza os *princípios de composição* (assimetria, ponto focal único, sangria) sobre o
|
|
135
|
+
*seu* conteúdo, na *sua* ordem.
|
|
136
|
+
|
|
137
|
+
### 4. Valide fidelidade lado a lado, com checagem objetiva
|
|
138
|
+
|
|
139
|
+
Nunca confie na memória. Coloque **referência e réplica na mesma viewport** (duas janelas, ou print da
|
|
140
|
+
ref ao lado do localhost) e cheque eixo por eixo, não "no geral":
|
|
141
|
+
|
|
142
|
+
- **Squint test** (aperte os olhos / desfoque 8px ambas): os blocos de peso e o ritmo claro-escuro batem?
|
|
143
|
+
Se a mancha geral diverge, é densidade ou hierarquia — não cor.
|
|
144
|
+
- **Overlay de cor:** eyedropper no mesmo tipo de elemento (bg, texto, accent) nas duas. Bate o H/S/L?
|
|
145
|
+
- **Régua na tipografia:** meça a razão entre H1 e corpo nas duas. Mesma razão? Mesmo tracking de
|
|
146
|
+
manchete?
|
|
147
|
+
- **Cronômetro no motion:** role as duas devagar. Mesma sensação (ágil/elástico/lento)? Entra junto ou em
|
|
148
|
+
stagger nas duas?
|
|
149
|
+
|
|
150
|
+
Se três dos quatro batem e o projeto ainda parece "seu" (assets e copy próprios), a clonagem da
|
|
151
|
+
*linguagem* foi um sucesso e a do *conteúdo* não aconteceu — exatamente o objetivo.
|
|
152
|
+
|
|
153
|
+
## Checklist
|
|
154
|
+
|
|
155
|
+
Antes de entregar uma reaplicação de estilo, responda — qualquer "sim" da seção ÉTICA é bloqueio:
|
|
156
|
+
|
|
157
|
+
**Ética (bloqueante):**
|
|
158
|
+
- [ ] Algum asset da referência (foto, logo, ilustração, ícone-set, vídeo) foi baixado e usado?
|
|
159
|
+
- [ ] Algum texto/copy da referência foi colado em vez de reescrito com voz própria?
|
|
160
|
+
- [ ] A estrutura é uma cópia 1:1 da página da referência em vez de princípios reaplicados?
|
|
161
|
+
|
|
162
|
+
**Captura (todas devem ter resposta concreta, com número/nome):**
|
|
163
|
+
- [ ] Capturei accent **e** a temperatura dos neutros (em HSL), não só uma cor?
|
|
164
|
+
- [ ] Identifiquei o par de fontes real e a **razão** da escala tipográfica (não chutei "Montserrat")?
|
|
165
|
+
- [ ] Medi a escala de espaço e anotei os **extremos** (densidade) que a referência usa?
|
|
166
|
+
- [ ] Capturei raio, tipo de sombra e o **easing/duração** do motion?
|
|
167
|
+
|
|
168
|
+
**Tradução + fidelidade:**
|
|
169
|
+
- [ ] Cada captura virou **token nomeado por intenção**, reaplicável no conteúdo do projeto?
|
|
170
|
+
- [ ] Reproduzi o **tratamento** de imagem (grão/contraste/corte) em assets próprios?
|
|
171
|
+
- [ ] Fiz o teste **lado a lado** com squint + overlay de cor + régua tipográfica + cronômetro de motion?
|
|
172
|
+
- [ ] A réplica pertence à mesma família visual **e** usa conteúdo/assets inteiramente próprios?
|
|
173
|
+
|
|
174
|
+
## Antes → depois
|
|
175
|
+
|
|
176
|
+
| Clonagem ruim (o tell) | Clonagem de craft (a linguagem) |
|
|
177
|
+
|---|---|
|
|
178
|
+
| Recriou a tela exata da referência (mesmo hero, mesmos 3 cards, mesma ordem) | Extraiu razão tipográfica, temperatura, densidade e easing como tokens e reaplicou no conteúdo do projeto |
|
|
179
|
+
| Pegou só o accent `#FF5A1F` e jogou no template default | Capturou accent **+** neutros quentes em HSL **+** sombra longa **+** razão 1.25 — o conjunto que dá o feeling |
|
|
180
|
+
| Trocou a grotesca paga por "Montserrat porque é parecido" | Escolheu substituto pela **classe e caráter** (grotesca-de-contraste), com mesmo tracking negativo na manchete |
|
|
181
|
+
| Manteve neutros `#888` do template sobre o accent da ref | Reproduziu a temperatura: `hsl(40 14% 94%)` de surface, off-white quente como a referência |
|
|
182
|
+
| Página arejada porque o template era; ref era densa | Reproduziu a **densidade** real — mesma base de 8px, mesmo ritmo de informação por tela |
|
|
183
|
+
| `fade-up .3s ease` em tudo de olho | Stagger com `cubic-bezier(.16,1,.3,1)` e 160ms — a curva e o tempo capturados da referência |
|
|
184
|
+
| Baixou a foto do hero da referência e colou | Aplicou o **tratamento** (grão + contraste lavado + corte) numa foto própria/licenciada |
|
|
185
|
+
| Entregou "de memória", 40% fora sem perceber | Validou lado a lado com squint + overlay + régua + cronômetro antes de entregar |
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: visual-polish-review
|
|
3
|
+
domain: web-craft
|
|
4
|
+
agents: [ux-design-expert, dev]
|
|
5
|
+
when: "ao revisar o acabamento visual de uma UI antes de entregar"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Visual Polish Review — auditar o acabamento antes de entregar
|
|
9
|
+
|
|
10
|
+
## O problema
|
|
11
|
+
|
|
12
|
+
Uma UI "funciona" e ainda assim parece amadora. Não é por falta de feature — é falta de
|
|
13
|
+
**acabamento**: hierarquia construída só com tamanho de fonte, cinza puro em tudo, sombras
|
|
14
|
+
opacas e chapadas, espaçamento linear sem ritmo, botão sem estado de hover, tela vazia que
|
|
15
|
+
parece bug. Cada um desses é um **tell** que um olho treinado reconhece em meio segundo.
|
|
16
|
+
|
|
17
|
+
Este pack é a régua que Adam Wathan e Steve Schoger (*Refactoring UI*) usam: ~10 lentes de
|
|
18
|
+
auditoria, cada uma com **o tell** (o que denuncia o amador) e **a correção concreta** (o valor,
|
|
19
|
+
a regra, o CSS). Não é "melhore a tipografia" — é "trave em 2 pesos: 400-500 pra corpo, 600-700
|
|
20
|
+
pra ênfase; nunca abaixo de 400 em texto pequeno". A regra-mãe: **acabamento é um sistema de
|
|
21
|
+
escolhas pré-definidas, não tweak avulso por elemento.**
|
|
22
|
+
|
|
23
|
+
## O conhecimento
|
|
24
|
+
|
|
25
|
+
### Lente 1 — Hierarquia por peso e cor, não só por tamanho
|
|
26
|
+
|
|
27
|
+
**O tell:** todo destaque é "fonte maior". Títulos `font-size: 32px`, subtítulos `24px`, e a
|
|
28
|
+
hierarquia inteira mora no eixo do tamanho. Resultado: telas que incham e ainda assim parecem
|
|
29
|
+
planas.
|
|
30
|
+
|
|
31
|
+
**A correção:** distribua a hierarquia em **três eixos** — tamanho, **peso** e **cor**.
|
|
32
|
+
- Para texto, dois pesos bastam: **400–500** (corpo) e **600–700** (ênfase). Evite peso
|
|
33
|
+
**abaixo de 400** em texto de UI — só funciona em título grande, é ilegível em corpo.
|
|
34
|
+
- Cor cria hierarquia **sem encolher a fonte**: escuro pro conteúdo primário, cinza pro
|
|
35
|
+
secundário (data, metadado), cinza mais claro pro terciário (rodapé, copyright).
|
|
36
|
+
- **Emphasize by de-emphasizing:** às vezes o jeito de destacar um elemento é **apagar os
|
|
37
|
+
vizinhos**, não empilhar mais peso no elemento. Reduza o ruído ao redor primeiro.
|
|
38
|
+
|
|
39
|
+
### Lente 2 — Tipografia: escala, line-height inverso, baseline
|
|
40
|
+
|
|
41
|
+
**O tell:** `line-height: 1.5` em título grande (frouxo demais), tamanhos avulsos sem escala,
|
|
42
|
+
textos de tamanhos diferentes alinhados pelo **centro**.
|
|
43
|
+
|
|
44
|
+
**A correção:**
|
|
45
|
+
- **line-height e font-size são inversamente proporcionais:** ~1.5 em corpo pequeno, e
|
|
46
|
+
**apertado** (1.1–1.2) em display grande. Título com line-height de corpo é tell.
|
|
47
|
+
- Use uma **escala fixa** de tamanhos (escolha de uma lista, não digite valores arbitrários).
|
|
48
|
+
Defina `font-size` em **px ou rem**, não em `em` (em compõe e vira imprevisível aninhado).
|
|
49
|
+
- Alinhe tamanhos mistos pela **baseline** (a linha onde as letras pousam), nunca pelo centro.
|
|
50
|
+
- **Letter-spacing:** confie no designer da fonte na maioria dos casos; **aperte** títulos em
|
|
51
|
+
fontes de texto usadas grandes, e **solte** texto em ALL-CAPS.
|
|
52
|
+
|
|
53
|
+
### Lente 3 — Medida (line length) controlada
|
|
54
|
+
|
|
55
|
+
**O tell:** parágrafo que atravessa a tela inteira; texto longo **centralizado**.
|
|
56
|
+
|
|
57
|
+
**A correção:** **45–75 caracteres por linha** (~`max-width: 20–35em` para o bloco de texto, ou
|
|
58
|
+
uma `measure` ~`65ch`). Centralize só headline ou bloco curto independente — **texto corrido é
|
|
59
|
+
left-align**, sempre.
|
|
60
|
+
|
|
61
|
+
### Lente 4 — Cor em HSL, com cinzas que têm temperatura
|
|
62
|
+
|
|
63
|
+
**O tell:** `#808080` e amigos — cinza puro, dessaturado, frio-morto. Cor escolhida em HEX no
|
|
64
|
+
chute.
|
|
65
|
+
|
|
66
|
+
**A correção:** pense em **HSL** (Hue 0–360°, Saturation 0–100%, Lightness 0–100%) — é como o
|
|
67
|
+
olho enxerga.
|
|
68
|
+
- **Cinza não precisa ser cinza:** sature com **azul** pra paleta fria, com **amarelo/laranja**
|
|
69
|
+
pra paleta quente. Cinza com 0% de saturação é o tell.
|
|
70
|
+
- **Quanto mais longe de 50% de lightness, mais saturação** o tom precisa — aumente saturation
|
|
71
|
+
nos tons claros E escuros pra manter a temperatura constante ao longo da rampa.
|
|
72
|
+
- **Nunca cinza sobre fundo colorido.** O efeito "cinza sobre branco" é só **contraste
|
|
73
|
+
reduzido**; sobre cor, escolha um tom de **mesmo hue** e ajuste S/L até aproximar do fundo.
|
|
74
|
+
|
|
75
|
+
### Lente 5 — Paleta como sistema, não 3 cores soltas
|
|
76
|
+
|
|
77
|
+
**O tell:** uma cor de marca, um cinza, preto e branco. Sem rampas — então todo hover/borda/
|
|
78
|
+
disabled é inventado na hora.
|
|
79
|
+
|
|
80
|
+
**A correção:** monte rampas com **~9 shades** (sweet spot) por cor:
|
|
81
|
+
- **8–10 tons de cinza** (do quase-branco ao quase-preto).
|
|
82
|
+
- **1–2 cores primárias**, 5–10 shades cada.
|
|
83
|
+
- **Accent colors** (sucesso, erro, aviso, info), 5–10 shades cada.
|
|
84
|
+
- Gradiente, quando usar: dois hues **a até 30° um do outro** (mais que isso fica "lama").
|
|
85
|
+
|
|
86
|
+
### Lente 6 — Espaçamento NÃO-linear, com ritmo
|
|
87
|
+
|
|
88
|
+
**O tell:** tudo em múltiplos de 8 sem variação — `gap-8`, `py-16` em toda seção. Espaço linear
|
|
89
|
+
é monótono e robótico.
|
|
90
|
+
|
|
91
|
+
**A correção:** escala **não-linear** onde **nenhum par de valores fica a menos de ~25%** um do
|
|
92
|
+
outro. Exemplo de rampa: **4, 8, 12, 16, 24, 32, 48, 64, 96, 128**. Use os **extremos** — seção
|
|
93
|
+
densa (prova social) ao lado de seção arejada (manifesto) cria ritmo. Heurística de processo:
|
|
94
|
+
**comece com espaço demais e remova até gostar** — quase sempre falta whitespace, não sobra.
|
|
95
|
+
|
|
96
|
+
### Lente 7 — Elevação em camadas (sombra de luz, não cinza opaco)
|
|
97
|
+
|
|
98
|
+
**O tell:** `box-shadow: 0 2px 4px #ccc` chapado em tudo; mesma sombra no botão e no modal.
|
|
99
|
+
|
|
100
|
+
**A correção:** uma **escala de ~5 sombras** mapeando elevação:
|
|
101
|
+
- pequena → botão/elemento levemente elevado;
|
|
102
|
+
- média → dropdown;
|
|
103
|
+
- grande → modal (precisa puxar atenção).
|
|
104
|
+
- Cada sombra combina **duas camadas**: luz **ambiente** (offset pequeno, blur menor, mais
|
|
105
|
+
escura) + luz **direta** (offset vertical maior, blur grande, difusa). Spread **negativo** dá
|
|
106
|
+
o efeito sutil quanto mais o objeto sobe. Ex.: `box-shadow: 0 25px 50px -12px rgba(0,0,0,.25)`.
|
|
107
|
+
- Cor da sombra: **preto transparente** (rgba), não cinza opaco; idealmente um tom **escuro do
|
|
108
|
+
próprio hue** do fundo (sombra azul-escura sob botão azul), nunca `#888` chapado.
|
|
109
|
+
|
|
110
|
+
### Lente 8 — Separação sem borda
|
|
111
|
+
|
|
112
|
+
**O tell:** `border: 1px solid #ddd` em cada card, linha divisória em cada item. A tela vira
|
|
113
|
+
uma grade de gaiolas.
|
|
114
|
+
|
|
115
|
+
**A correção:** separe com **sombra, espaçamento ou cor de fundo** antes de recorrer a borda.
|
|
116
|
+
Dois fundos levemente diferentes, ou só mais respiro entre os blocos, separam melhor e mais
|
|
117
|
+
limpo que um traço. Borda fica pro caso em que sombra/espaço não bastam.
|
|
118
|
+
|
|
119
|
+
### Lente 9 — Estados de botão completos
|
|
120
|
+
|
|
121
|
+
**O tell:** botão tem só o estado **default**. Sem hover, sem active, sem focus visível (ou o
|
|
122
|
+
anel azul do browser), sem disabled. Foco azul nativo é tell de "esqueci do detalhe".
|
|
123
|
+
|
|
124
|
+
**A correção:** desenhe **todos os estados**:
|
|
125
|
+
- **hover** — sobe de elevação (sombra um degrau acima) ou escurece/clareia um shade da rampa;
|
|
126
|
+
- **active/pressed** — **reduz a sombra** pra sensação de "sendo pressionado";
|
|
127
|
+
- **focus** — anel **desenhado** (`outline`/ring de marca), nunca o azul default;
|
|
128
|
+
- **disabled** — contraste reduzido e cursor coerente.
|
|
129
|
+
- **Hierarquia de ações na mesma tela:** primária óbvia; secundária clara mas não dominante
|
|
130
|
+
(fundo suave derivado da cor do texto); terciária descobrível mas discreta (link). Chevron no
|
|
131
|
+
link de texto reforça que é clicável.
|
|
132
|
+
|
|
133
|
+
### Lente 10 — Empty states desenhados
|
|
134
|
+
|
|
135
|
+
**O tell:** tela vazia = página em branco, ou um texto que parece **erro** ("Nenhum dado.").
|
|
136
|
+
É a **primeira** interação do usuário com a feature e parece bug.
|
|
137
|
+
|
|
138
|
+
**A correção:** trate empty state como **boas-vindas**: ilustração ou imagem + uma frase com voz
|
|
139
|
+
+ **um CTA claro** que ensina o próximo passo. Mesma régua pra 404 e estados de erro — microcopy
|
|
140
|
+
com personalidade é assinatura barata e forte.
|
|
141
|
+
|
|
142
|
+
### Bônus — Imagem que não vaza
|
|
143
|
+
|
|
144
|
+
**O tell:** foto esticada (upscale), imagem de usuário com proporção quebrada, foto clara com
|
|
145
|
+
texto branco ilegível por cima.
|
|
146
|
+
|
|
147
|
+
**A correção:** só **reduza** imagem, nunca amplie. Controle dimensões de upload com
|
|
148
|
+
`background-size: cover`. Sombra sutil na imagem evita que o fundo "sangre" na borda. Texto sobre
|
|
149
|
+
foto: overlay (escurecer/colorir) pra garantir contraste.
|
|
150
|
+
|
|
151
|
+
## Checklist — "isto está acabado?"
|
|
152
|
+
|
|
153
|
+
Qualquer "sim" é um item a corrigir antes de entregar:
|
|
154
|
+
|
|
155
|
+
- [ ] A hierarquia mora **só** no tamanho da fonte (sem variar peso e cor)?
|
|
156
|
+
- [ ] Tem peso **abaixo de 400** em texto pequeno, ou `line-height ~1.5` em título grande?
|
|
157
|
+
- [ ] Texto corrido passa de **75 caracteres** por linha, ou está centralizado?
|
|
158
|
+
- [ ] Tem **cinza puro** (`#808080`/0% saturação) ou cinza sobre fundo colorido?
|
|
159
|
+
- [ ] As cores são valores soltos, **sem rampas** de ~9 shades pra hover/borda/disabled?
|
|
160
|
+
- [ ] O espaçamento é **linear/uniforme**, sem usar os extremos da escala?
|
|
161
|
+
- [ ] A sombra é **cinza opaco chapado**, igual no botão e no modal?
|
|
162
|
+
- [ ] A separação é feita com **borda** onde sombra/espaço/fundo bastariam?
|
|
163
|
+
- [ ] Algum botão tem **só default** (sem hover/active/focus desenhado/disabled)?
|
|
164
|
+
- [ ] O foco é o **anel azul do browser** em vez de um foco de marca?
|
|
165
|
+
- [ ] O **empty state / 404** é página em branco ou parece mensagem de erro?
|
|
166
|
+
|
|
167
|
+
## Tabela de decisão
|
|
168
|
+
|
|
169
|
+
| Lente | O tell | A correção concreta |
|
|
170
|
+
|---|---|---|
|
|
171
|
+
| Hierarquia | Destaque só por tamanho | 3 eixos: tamanho + peso (400-500 / 600-700) + cor; de-emphasize o entorno |
|
|
172
|
+
| Tipografia | line-height 1.5 em título; alinhar pelo centro | line-height inverso ao tamanho; escala fixa em px/rem; alinhar pela baseline |
|
|
173
|
+
| Medida | Linha atravessa a tela; texto centralizado | 45–75 caracteres (~20–35em / ~65ch); corrido é left-align |
|
|
174
|
+
| Cor (HSL) | `#808080`, cinza sobre fundo colorido | Sature o cinza (azul=frio, amarelo=quente); mesmo hue, ajusta S/L |
|
|
175
|
+
| Paleta | 3 cores soltas, sem rampa | ~9 shades por cor; 8-10 cinzas; gradiente com hues a ≤30° |
|
|
176
|
+
| Espaçamento | Tudo em múltiplos de 8 | Escala não-linear (≥25% entre valores: 4/8/12/16/24/32/48/64/96/128), usar extremos |
|
|
177
|
+
| Elevação | Sombra chapada igual em tudo | Escala de ~5; 2 camadas (ambiente+direta); rgba escuro do hue, não cinza opaco |
|
|
178
|
+
| Separação | Borda em todo card | Sombra, espaço ou dois fundos antes de borda |
|
|
179
|
+
| Botão | Só estado default | hover (sobe sombra) / active (baixa sombra) / focus de marca / disabled |
|
|
180
|
+
| Empty state | Página em branco ou texto de erro | Ilustração + voz + 1 CTA; mesma régua pro 404 |
|
|
181
|
+
| Imagem | Upscale, proporção quebrada, texto ilegível | Só reduzir; `cover`; sombra anti-bleed; overlay pro contraste |
|
|
182
|
+
|
|
183
|
+
> Fonte: *Refactoring UI* (Adam Wathan & Steve Schoger) e a palestra de Schoger no CSS Day 2019.
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nexus-core-v3",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Nexus Core v3 — orquestrador de agentes de IA CLI-first (greenfield)",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22"
|
|
9
|
+
},
|
|
10
|
+
"workspaces": [
|
|
11
|
+
"packages/*"
|
|
12
|
+
],
|
|
13
|
+
"nexus": {
|
|
14
|
+
"packageName": "@nexus/core",
|
|
15
|
+
"slashPrefix": "nexus",
|
|
16
|
+
"agentNamespace": "nexus"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"gen:version": "node scripts/gen-version.mjs",
|
|
20
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
21
|
+
"test": "node --import tsx --test packages/contracts/test/*.test.ts packages/config/test/*.test.ts packages/registry/test/*.test.ts packages/governance/test/*.test.ts packages/declarative/test/*.test.ts packages/runtime/test/*.test.ts packages/learning/test/*.test.ts packages/synapse/test/*.test.ts packages/hooks/test/*.test.ts packages/compose/test/*.test.ts packages/validators/test/*.test.ts packages/dist/test/*.test.ts packages/cli/test/*.test.ts packages/orchestration/test/*.test.ts packages/deliberation/test/*.test.ts packages/team/test/*.test.ts packages/squads/test/*.test.ts packages/gateway/test/*.test.ts",
|
|
22
|
+
"coverage": "node scripts/coverage-summary.mjs",
|
|
23
|
+
"validate": "node --import tsx packages/cli/src/bin.ts validate",
|
|
24
|
+
"ratchet": "node --import tsx scripts/ratchet-tighten.ts",
|
|
25
|
+
"check": "npm run gen:version && npm run typecheck && npm run test && npm run coverage && npm run validate && npm run ratchet",
|
|
26
|
+
"release:sign": "node --import tsx scripts/release-sign.ts",
|
|
27
|
+
"build:bundle": "node scripts/build-bundle.mjs",
|
|
28
|
+
"prepublishOnly": "npm run build:bundle"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/js-yaml": "^4.0.9",
|
|
32
|
+
"@types/node": "^22.10.0",
|
|
33
|
+
"esbuild": "^0.28.1",
|
|
34
|
+
"js-yaml": "^4.1.0",
|
|
35
|
+
"tsx": "^4.19.2",
|
|
36
|
+
"typescript": "^5.7.2",
|
|
37
|
+
"zod": "^3.23.8"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {},
|
|
40
|
+
"bin": {
|
|
41
|
+
"nexus": "bin/nexus.mjs"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"bin",
|
|
45
|
+
"dist",
|
|
46
|
+
"agents",
|
|
47
|
+
"tasks",
|
|
48
|
+
"templates",
|
|
49
|
+
"checklists",
|
|
50
|
+
"knowledge",
|
|
51
|
+
"squads",
|
|
52
|
+
"runbooks",
|
|
53
|
+
"artifact-manifest.json"
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: campanha-de-conteudo
|
|
3
|
+
title: Campanha de conteúdo
|
|
4
|
+
when: produzir uma campanha de conteúdo coordenada com pesquisa, criação e revisão
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Runbook — Campanha de conteúdo
|
|
8
|
+
|
|
9
|
+
**Cenário (3 linhas):** você precisa de uma campanha de conteúdo (posts, artigos, peças) coordenada,
|
|
10
|
+
não de textos soltos. A pesquisa guia a mensagem, a criação executa e a revisão garante que cada peça
|
|
11
|
+
sustenta a promessa. O squad de conteúdo (Onda 5) é a unidade natural aqui.
|
|
12
|
+
|
|
13
|
+
## Roster (em camadas)
|
|
14
|
+
|
|
15
|
+
- **Core (sempre):** analyst (pesquisa/ângulo), pm (direção da campanha)
|
|
16
|
+
- **Squad de conteúdo (Onda 5):** `nexus run --squad conteudo "<missão da campanha>"` — o chief coordena
|
|
17
|
+
redator, growth, social e analista. Sob demanda: ux-design-expert (peças visuais).
|
|
18
|
+
|
|
19
|
+
## Execução
|
|
20
|
+
|
|
21
|
+
1. **Descobrir o ângulo** — `nexus run --mode micro "pesquise dores e linguagem do público <X> sobre <tema>"`
|
|
22
|
+
→ Alex. **Gate:** `discovery-checklist` (público nomeado, dor com evidência). A mensagem parte da dor real.
|
|
23
|
+
2. **Estrategizar a campanha** — `nexus run "defina a mensagem central, os canais e o calendário para <tema>"`
|
|
24
|
+
→ Morgan. **Gate:** `pm-checklist`. Escopo e não-escopo explícitos (o que NÃO entra nesta campanha).
|
|
25
|
+
3. **Produzir** — `nexus run --squad conteudo "produza as peças da campanha <tema> para os canais <lista>"`
|
|
26
|
+
→ o squad executa. Cada peça rastreia à mensagem central (No Invention: nada fora da estratégia).
|
|
27
|
+
4. **Endurecer** — revise cada peça: promessa sustentada, tom coerente, sem alegação sem base. **Gate:**
|
|
28
|
+
uma reality-check adaptada — evidência da mensagem, não achismo de "ficou bom".
|
|
29
|
+
5. **Lançar** — publique conforme o calendário; instrumente para medir (o que não se mede não se aprende).
|
|
30
|
+
6. **Operar** — `nexus metrics`/analytics do canal → o que engajou vira insumo da próxima Descoberta.
|
|
31
|
+
|
|
32
|
+
## Sinais de que está no caminho
|
|
33
|
+
|
|
34
|
+
- Cada peça rastreia à mensagem central — nada publicado "porque ficou bonito".
|
|
35
|
+
- O calendário e os canais foram escolhidos, não improvisados.
|
|
36
|
+
- A campanha é medida; o aprendizado alimenta a próxima.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: feature-em-projeto-existente
|
|
3
|
+
title: Feature em projeto existente (brownfield)
|
|
4
|
+
when: adicionar uma capacidade a um código que já existe e não pode quebrar
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Runbook — Feature em projeto existente
|
|
8
|
+
|
|
9
|
+
**Cenário (3 linhas):** o código já roda em produção e uma feature nova precisa entrar sem regressão.
|
|
10
|
+
O risco aqui não é construir — é NÃO quebrar o que funciona. O time entende o terreno antes de mexer,
|
|
11
|
+
e o gate de qualidade guarda a porta contra regressão.
|
|
12
|
+
|
|
13
|
+
## Roster (em camadas)
|
|
14
|
+
|
|
15
|
+
- **Core (sempre):** architect, dev, qa, devops
|
|
16
|
+
- **Sob demanda:** analyst (mapear o legado), data-engineer (migração), ux-design-expert (UI nova)
|
|
17
|
+
|
|
18
|
+
## Execução
|
|
19
|
+
|
|
20
|
+
1. **Entender o terreno** — `nexus run "mapeie a arquitetura e os pontos de integração afetados por
|
|
21
|
+
<feature>"` → Aria. Sem entender o que existe, "adicionar" vira "quebrar".
|
|
22
|
+
2. **Estrategizar o encaixe** — `nexus run "escreva a story de <feature> apontando riscos de regressão
|
|
23
|
+
e ACs de não-quebra"` → Morgan/Pax. **Gate:** `story-draft-checklist`.
|
|
24
|
+
3. **Estruturar a mudança** — decida migração e compatibilidade. **Gate:** `foundation-checklist`
|
|
25
|
+
(dados modelados, reversível). Handoff architect → dev com o spec + as fronteiras a respeitar.
|
|
26
|
+
4. **Construir com rede** — `nexus run --mode sprint "implemente <feature>; NÃO altere contrato
|
|
27
|
+
público sem teste de compat"` → Dex. **Gate:** `story-dod-checklist` + testes de regressão.
|
|
28
|
+
5. **Endurecer contra regressão** — `nexus run "revise <feature>: prove que o comportamento antigo
|
|
29
|
+
segue intacto (teste de regressão) e o novo funciona"` → Quinn. **Gate:** `reality-check-checklist`.
|
|
30
|
+
6. **Lançar gradual** — devops sobe atrás de flag/canário, rollback ensaiado. **Gate:** `launch-checklist`.
|
|
31
|
+
7. **Operar** — observe o caminho novo E o antigo; alerta configurado antes do tráfego.
|
|
32
|
+
|
|
33
|
+
## Sinais de que está no caminho
|
|
34
|
+
|
|
35
|
+
- Todo bug "corrigido" e todo comportamento antigo têm teste de regressão guardando a porta.
|
|
36
|
+
- A mudança sobe reversível e gradual — nunca 100% de uma vez.
|
|
37
|
+
- Contratos públicos só mudam com teste de compatibilidade.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: mvp-startup
|
|
3
|
+
title: MVP de startup do zero
|
|
4
|
+
when: uma ideia nova virando o primeiro produto mínimo viável
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Runbook — MVP de startup do zero
|
|
8
|
+
|
|
9
|
+
**Cenário (3 linhas):** você tem uma ideia e quer o menor produto que prova valor. O time core conduz
|
|
10
|
+
do problema ao lançamento, cortando escopo sem cortar qualidade. O gate de cada fase impede pular
|
|
11
|
+
etapa que volta a cobrar caro depois.
|
|
12
|
+
|
|
13
|
+
## Roster (em camadas)
|
|
14
|
+
|
|
15
|
+
- **Core (sempre):** analyst, pm, po, architect, dev, qa, devops
|
|
16
|
+
- **Sob demanda:** ux-design-expert (se tem interface), data-engineer (se tem dados/schema)
|
|
17
|
+
|
|
18
|
+
## Execução (fases comprimidas → comandos reais)
|
|
19
|
+
|
|
20
|
+
1. **Descobrir** — `nexus run --mode micro "pesquise o problema X para o público Y e resuma a dor"`
|
|
21
|
+
→ Alex entrega o brief. **Gate:** `discovery-checklist` (problema real + usuário + evidência).
|
|
22
|
+
2. **Estrategizar** — `nexus run "escreva o PRD do MVP para <brief>, escopo mínimo, épicos priorizados"`
|
|
23
|
+
→ Morgan entrega o PRD; Pax valida. **Gate:** `pm-checklist`. Handoff pm → architect.
|
|
24
|
+
3. **Estruturar** — `nexus run "desenhe a arquitetura e o schema mínimos para <PRD>"`
|
|
25
|
+
→ Aria + Dara. **Gate:** `foundation-checklist`. Handoff architect → dev (spec como contrato).
|
|
26
|
+
4. **Construir** — por story: `nexus run --mode sprint "implemente a story <n> seguindo o spec"`
|
|
27
|
+
→ Dex (Uma se houver UI). **Gate:** `story-dod-checklist` (suíte verde, ACs cobertos).
|
|
28
|
+
5. **Endurecer** — `nexus run "revise a story <n>: execute, colete evidência, emita o veredito"`
|
|
29
|
+
→ Quinn. **Gate:** `reality-check-checklist`. Reprovar 2–3× é saudável; FAIL → volta ao Dex.
|
|
30
|
+
6. **Lançar** — delegue ao devops: rollback ensaiado, assinatura verificada, observabilidade de pé.
|
|
31
|
+
**Gate:** `launch-checklist` (só o Gage faz push/PR/release).
|
|
32
|
+
7. **Operar** — acompanhe métricas (`nexus metrics`) e capture aprendizado para a próxima Descoberta.
|
|
33
|
+
|
|
34
|
+
## Sinais de que está no caminho
|
|
35
|
+
|
|
36
|
+
- Cada AC tem teste verde e evidência (sem isso, não é MVP, é demo).
|
|
37
|
+
- Nenhum agente começa frio: os handoffs carregam o contexto entre fases.
|
|
38
|
+
- O escopo cortado está REGISTRADO como "não agora", não esquecido.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: resposta-a-incidente
|
|
3
|
+
title: Resposta a incidente em produção
|
|
4
|
+
when: algo quebrou em produção e precisa de contenção, correção e aprendizado
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Runbook — Resposta a incidente
|
|
8
|
+
|
|
9
|
+
**Cenário (3 linhas):** produção quebrou. A ordem é conter primeiro, consertar a causa depois,
|
|
10
|
+
aprender por último — nessa sequência. Pressa que pula a evidência conserta o sintoma e deixa a causa
|
|
11
|
+
viva. O gate aqui é a honestidade: só declara resolvido quem PROVA que resolveu.
|
|
12
|
+
|
|
13
|
+
## Roster (em camadas)
|
|
14
|
+
|
|
15
|
+
- **Core (sempre):** devops (comanda), qa, dev
|
|
16
|
+
- **Sob demanda:** architect (causa-raiz sistêmica), data-engineer (corrupção/migração de dados)
|
|
17
|
+
|
|
18
|
+
## Execução (fases comprimidas — velocidade com método)
|
|
19
|
+
|
|
20
|
+
1. **Conter** — devops estabiliza (rollback do último release, feature flag off, isolar o blast radius).
|
|
21
|
+
Rollback ensaiado do `launch-checklist` paga aqui. Contenção NÃO é correção — é parar o sangramento.
|
|
22
|
+
2. **Diagnosticar** — `nexus run --mode micro "investigue a causa-raiz do incidente <descrição> a partir
|
|
23
|
+
de <logs/sintomas>"` → Dex/Aria. Causa-raiz, não sintoma; hipótese sem evidência não fecha.
|
|
24
|
+
3. **Corrigir** — `nexus run "implemente a correção da causa-raiz + o teste que reproduzia o incidente"`
|
|
25
|
+
→ Dex. **Regra:** o teste que reproduz o bug vem ANTES do fix (red → green).
|
|
26
|
+
4. **Endurecer** — `nexus run "prove que o incidente não se repete: teste de regressão + fluxo exercitado"`
|
|
27
|
+
→ Quinn. **Gate:** `reality-check-checklist`. "Corrigido" sem regressão é hipótese.
|
|
28
|
+
5. **Lançar a correção** — devops sobe com observabilidade reforçada no ponto que falhou. **Gate:**
|
|
29
|
+
`launch-checklist`.
|
|
30
|
+
6. **Aprender (post-mortem sem culpa)** — registre causa, linha do tempo e a ação que evita a reincidência;
|
|
31
|
+
alimente a próxima Descoberta. Incidente sem aprendizado capturado volta.
|
|
32
|
+
|
|
33
|
+
## Sinais de que está no caminho
|
|
34
|
+
|
|
35
|
+
- A contenção veio antes da correção; ninguém "consertou" com produção ainda sangrando.
|
|
36
|
+
- A correção tem o teste que reproduzia o incidente (red-first), não só o "ajuste".
|
|
37
|
+
- O post-mortem foca no sistema, não em culpados — e vira ação concreta.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: editor-chefe
|
|
3
|
+
name: Élio
|
|
4
|
+
title: Editor-Chefe de Conteúdo Técnico
|
|
5
|
+
icon: 🗞️
|
|
6
|
+
archetype: Orchestrator
|
|
7
|
+
lens: coerência editorial — a pauta certa, na profundidade certa, para o leitor certo
|
|
8
|
+
whenToUse: orquestrar a produção de um artigo técnico (pauta → pesquisa → rascunho → revisão → publicação)
|
|
9
|
+
authority: editor-chefe
|
|
10
|
+
model: opus
|
|
11
|
+
owns:
|
|
12
|
+
- planejar-pauta
|
|
13
|
+
- revisar-artigo
|
|
14
|
+
delegatesTo:
|
|
15
|
+
- { agent: pesquisador, when: "levantar fontes, dados e estado da arte do tema" }
|
|
16
|
+
- { agent: redator, when: "transformar pesquisa + pauta em rascunho de artigo" }
|
|
17
|
+
- { agent: devops, when: "git push do artigo aprovado — SEMPRE via devops, sem exceção" }
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Élio — Editor-Chefe de Conteúdo Técnico
|
|
21
|
+
|
|
22
|
+
## Identidade
|
|
23
|
+
|
|
24
|
+
Eu sou o Élio, o chefe deste squad de conteúdo. Eu não escrevo o artigo — eu garanto que o artigo
|
|
25
|
+
certo seja escrito. Defino a pauta com ângulo e leitor-alvo explícitos, despacho a pesquisa para o
|
|
26
|
+
Pio, o rascunho para a Rita, e reviso o resultado contra a pauta original antes de qualquer
|
|
27
|
+
publicação. Artigo sem tese não sai da minha mesa.
|
|
28
|
+
|
|
29
|
+
## Princípios inegociáveis
|
|
30
|
+
|
|
31
|
+
- **Pauta antes de prosa.** Nenhuma palavra é escrita antes de a pauta declarar tese, leitor-alvo
|
|
32
|
+
e o que o leitor sai sabendo. Texto sem pauta é divagação com formatação.
|
|
33
|
+
- **Cada afirmação tem fonte.** O que a pesquisa não sustenta, o artigo não afirma. Eu devolvo o
|
|
34
|
+
rascunho em vez de publicar achismo.
|
|
35
|
+
- **Eu orquestro, não executo.** Pesquisa é do Pio, prosa é da Rita, push é do devops do time core.
|
|
36
|
+
Meu trabalho é a decisão editorial e o veredito final.
|
|
37
|
+
|
|
38
|
+
## Como eu trabalho (método)
|
|
39
|
+
|
|
40
|
+
1. **Defino a pauta** — tese, leitor-alvo e o que o leitor sai sabendo, explícitos antes de tudo.
|
|
41
|
+
2. **Despacho** a pesquisa ao Pio e, com o dossiê pronto, o rascunho à Rita.
|
|
42
|
+
3. **Reviso contra a pauta** — o artigo entregou a tese para o leitor certo, com cada afirmação sustentada?
|
|
43
|
+
4. **Decido a publicação** — aprovo e encaminho o push ao devops, ou devolvo com o que falta.
|
|
44
|
+
|
|
45
|
+
## Voz
|
|
46
|
+
|
|
47
|
+
- **greeting:** `🗞️ Élio — editor-chefe. Qual é a tese e para quem?`
|
|
48
|
+
- **closing:** `— Élio, editor-chefe de conteúdo 🗞️`
|