# Do Prompt à Produção — arquitetura narrativa

> Documento mestre da palestra. Define o arco, a lista final de slides, o
> objetivo e o que fica de cada um, o conteúdo visual, as transições e os
> momentos exatos da demo. As speaker notes completas vivem em
> `docs/02-speaker-notes.md` e também dentro do deck (tecla `S`).

---

## 1. Premissa

O palestrante usa Claude Code, agentes e IA para construir software todos os
dias, e acredita no ganho. A palestra **não** é um alerta contra IA. É um
alerta contra uma assimetria específica:

> IA democratizou a capacidade de construir software.
> Não democratizou automaticamente a capacidade de construir software seguro.

O custo de **produzir código** despencou. O custo de **validar consequências**
não. Arquitetura, autorização, isolamento, gestão de segredos, revisão e
julgamento técnico continuam existindo, e continuam sendo humanos.

## 2. O arco em cinco movimentos

| # | Movimento | Emoção pretendida | Slides |
| :- | :-- | :-- | :-- |
| I | **Celebração** — o que a IA nos deu | entusiasmo, reconhecimento | 00–04 |
| II | **A virada** — o agente ganhou mãos | desconforto crescente | 05–07 |
| III | **Consequência** — dois casos reais | tensão, "isso podia ser eu" | 08–12 |
| IV | **Quebra ao vivo** — AcmeCRM | choque controlado, riso | 13–15 |
| V | **Resolução** — controles baratos | alívio, senso de agência | 16–19 |

A audiência deve rir no movimento I, ficar quieta no III, rir de novo (nervoso)
no IV e sair com uma lista curta e executável no V.

A frase-âncora que costura tudo:

> **O problema não é a IA errar. É o que ela consegue fazer quando erra.**

E a síntese técnica:

> **AGENCY × PRIVILEGE = BLAST RADIUS**

## 3. Regras de composição do deck

- **Uma ideia por slide.** Se o slide precisa de dois fôlegos para ser lido, virou dois slides.
- **Legível em 2–3 segundos** antes do palestrante abrir a boca.
- Detalhe mora nas speaker notes, nunca na tela.
- Slides-manifesto são propositalmente vazios. O silêncio é parte do design.
- Linguagem visual: **dossiê técnico** (o design system do portfólio do palestrante):
  papel manila, tinta de arquivo, azul `#28518C`, mono para identificadores,
  carimbo de status para veredito. Sem cyberpunk, sem cadeado neon, sem capuz.
- Casos reais, pesquisa e ficção recebem **carimbos visuais distintos**:
  `INCIDENTE REAL` · `PESQUISA / DEMONSTRAÇÃO` · `CENÁRIO FICTÍCIO`.
  Nenhuma afirmação factual entra num slide sem carimbo.

## 4. Orçamento de tempo (alvo: 42 min + 15–20 min de perguntas)

| Bloco | Slides | Minutos | Acumulado |
| :-- | :-- | --: | --: |
| Abertura e a mudança | 00–02 | 4,5 | 4,5 |
| Manifesto e julgamento | 03–04 | 3,5 | 8,0 |
| O agente mudou a equação | 05 | 3,0 | 11,0 |
| Caso Replit | 06–07 | 4,0 | 15,0 |
| Caso PocketOS | 08–09 | 4,5 | 19,5 |
| Blast radius | 10 | 2,5 | 22,0 |
| Segredos (Claude Code) | 11 | 3,0 | 25,0 |
| AuthN ≠ AuthZ | 12 | 2,5 | 27,5 |
| Injeção de prompt | 13–14 | 5,0 | 32,5 |
| **DEMO AcmeCRM** | 15 | **9,0** | 41,5 |
| Segurança Mínima Viável | 16 | 4,0 | 45,5 |
| Governança | 17 | 2,0 | 47,5 |
| Fechamento | 18 | 1,5 | 49,0 |

> **Nota de ritmo.** O somatório acima é o teto (~49 min). Os cortes de
> emergência, na ordem: (a) slide 07 vira uma frase falada dentro do 06;
> (b) demo cai para 6 min cortando o ato D3; (c) slide 17 vira uma frase
> dentro do 18. Com os três cortes: 41 min.

## 5. Lista final de slides

| # | ID | Título / linha | Tipo | Carimbo |
| :- | :-- | :-- | :-- | :-- |
| 00 | `capa` | Do Prompt à Produção | capa | — |
| 01 | `pergunta` | Quanto software você já colocou em produção sem saber o que tem embaixo? | provocação | — |
| 02 | `mudanca` | IDEIA → PROMPT → CÓDIGO → BANCO → AUTH → API → DEPLOY | diagrama | — |
| 03 | `manifesto-democratizou` | IA democratizou construir. Não democratizou construir seguro. | manifesto | — |
| 04 | `judgment` | CODE IS CHEAP. JUDGMENT IS EXPENSIVE. | manifesto + contraste | — |
| 05 | `read-write-execute` | READ · WRITE · EXECUTE | diagrama grande | — |
| 06 | `replit` | Replit / Jason Lemkin — julho de 2025 | caso | INCIDENTE REAL |
| 07 | `instrucao-nao-e-controle` | Uma instrução não é um controle de segurança. | manifesto | — |
| 08 | `pocketos` | PocketOS — abril de 2026 | caso + fluxo | INCIDENTE REAL |
| 09 | `we-gave-the-keys` | The agent didn't hack production. We gave it the keys. | manifesto | — |
| 10 | `blast-radius` | AGENCY × PRIVILEGE = BLAST RADIUS | equação | — |
| 11 | `secrets` | Peça menos. Permita menos. Impeça tecnicamente o resto. | config / 3 níveis | DOCUMENTAÇÃO |
| 12 | `authn-authz` | Login diz quem você é. Autorização diz o que você pode. | interface + fluxo | — |
| 13 | `dados-viram-instrucoes` | Para um agente, dados também podem virar instruções. | manifesto + taxonomia | — |
| 14 | `toxic-flow` | GitHub MCP · toxic agent flow · lethal trifecta | fluxo | PESQUISA |
| 15 | `demo` | AcmeCRM — o CRM mais vibe-coded do mundo | demo ao vivo | CENÁRIO FICTÍCIO |
| 16 | `mvs` | MINIMUM VIABLE SECURITY | framework | — |
| 17 | `governanca` | Governança em cinco perguntas | lista curta | — |
| 18 | `fechamento` | SHIP FAST. BUT KNOW WHAT YOU SHIPPED. | manifesto final | — |
| 19 | `referencias` | Fontes | apêndice (backup) | — |

São 20 telas, mas seis delas (`03`, `04`, `07`, `09`, `10`, `18`) são
slides-manifesto de 5 a 90 segundos. O peso real de conteúdo fica em torno de
14 slides, como pedido no briefing. A contagem maior existe para dar respiro,
não para dar informação.

## 6. Detalhamento slide a slide

Formato de cada entrada: **Objetivo** (o que o slide faz pela palestra) ·
**O que fica** (o que a audiência leva) · **Visual** (o que está na tela) ·
**Transição** (a ponte falada para o próximo).

---

### 00 · `capa` — Do Prompt à Produção

- **Objetivo.** Estabelecer tom: developer tooling, não compliance. Dizer quem fala e por quê, em uma linha.
- **O que fica.** "Isso vai ser prático."
- **Visual.** Título em display, do tamanho da tela. Subtítulo: *Como construir software com IA sem terceirizar segurança, arquitetura e bom senso.* Rodapé em mono: nome, comunidade New Rec, data. Ao fundo, uma trama fina de papel milimetrado. Nada mais.
- **Transição.** "Antes de eu falar qualquer coisa, quero fazer uma pergunta — e eu não vou responder ela agora."

---

### 01 · `pergunta` — a provocação

- **Objetivo.** Plantar a pergunta que o resto da palestra vai responder. Criar cumplicidade, não culpa.
- **O que fica.** "Ele está falando de mim, e não está me julgando."
- **Visual.** Uma pergunta em tipografia grande, centralizada, sozinha:
  *"Quanto software uma pessoa consegue colocar em produção hoje sem realmente saber tudo o que existe por baixo dele?"*
  Abaixo, em mono e bem discreto: `// a gente volta nisso`.
- **Transição.** "Segura essa. Vamos falar primeiro do que mudou — e do que mudou pra melhor."

---

### 02 · `mudanca` — a conquista

- **Objetivo.** Celebrar de verdade. A audiência precisa sentir que o palestrante está do lado dela antes de qualquer aviso.
- **O que fica.** "Uma pessoa hoje cobre a stack inteira. Isso é real e é bom."
- **Visual.** Um trilho horizontal de sete estações, ligadas por uma linha de tinta:
  `IDEIA → PROMPT → CÓDIGO → BANCO → AUTH → API → DEPLOY`.
  Sob o trilho, duas réguas de tempo sobrepostas: **ANTES — vários especialistas, meses** e **AGORA — uma pessoa, dias**. A régua "agora" é visivelmente curta. Sem ícones.
- **Transição.** "Isso é uma conquista. Eu construo assim. Mas repara numa coisa: o trilho encurtou inteiro, menos uma estação."

---

### 03 · `manifesto-democratizou` — o slide-manifesto

- **Objetivo.** O momento de maior peso da primeira metade. É a tese em duas linhas.
- **O que fica.** A frase, palavra por palavra.
- **Visual.** Fundo cheio. Duas linhas, tipografia display, alinhadas à esquerda com margem generosa:
  **"IA democratizou a capacidade de construir software."**
  **"Não democratizou automaticamente a capacidade de construir software seguro."**
  A segunda linha entra depois da primeira, com uma pausa de silêncio. A palavra `seguro` recebe o azul de arquivo. Sem rodapé, sem número de slide, sem logo.
- **Transição.** "Por que não? Porque o que ficou barato foi uma coisa só."

---

### 04 · `judgment` — Code is cheap

- **Objetivo.** Transformar o manifesto em mecanismo: o que exatamente barateou e o que não.
- **O que fica.** "'Funciona' e 'pode operar' são dois testes diferentes."
- **Visual.** Título em mono, caixa alta: `CODE IS CHEAP. JUDGMENT IS EXPENSIVE.`
  Abaixo, duas colunas separadas por um fio vertical:

  | FUNCIONA | PODE OPERAR COM SEGURANÇA |
  | :-- | :-- |
  | passa no caminho feliz | resiste ao caminho infeliz |
  | responde 200 | responde 403 quando deve |
  | roda na minha máquina | roda com o dado de outra pessoa |
  | eu vi funcionar | eu sei o que acontece se falhar |

  A coluna da esquerda é cinza. A da direita é tinta cheia.
- **Transição.** "E até aqui isso é uma conversa sobre qualidade de código. A partir de agora deixa de ser."

---

### 05 · `read-write-execute` — o agente mudou a equação

- **Objetivo.** O pivô da palestra. Sair de "a IA escreve código" para "a IA opera o ambiente".
- **O que fica.** "A pergunta certa não é se ela escreve bem. É o que ela alcança."
- **Visual.** Três blocos grandes, lado a lado, do tamanho da tela: **READ · WRITE · EXECUTE**.
  Sob cada um, três a quatro capacidades em mono pequeno:
  - `READ` — repositórios · arquivos locais · variáveis de ambiente · resultados de ferramentas
  - `WRITE` — editar código · abrir commits e PRs · instalar pacotes · alterar configuração
  - `EXECUTE` — shell · rede · MCP e tools · cloud e infraestrutura
  O bloco `EXECUTE` está carimbado, os outros dois não. Embaixo, riscada, a pergunta velha *"A IA escreve código bom?"*, e ao lado, em tinta cheia: **"O que ela consegue alcançar?"**
- **Transição.** "Quando 'errar' quer dizer 'executar', a conta muda. Deixa eu te mostrar duas contas que já foram pagas."

---

### 06 · `replit` — Replit / Jason Lemkin

- **Objetivo.** Primeiro caso real. Estabelecer que instrução em linguagem natural não segura nada.
- **O que fica.** "Ele avisou. Várias vezes. Por escrito. Não adiantou."
- **Visual.** Carimbo `INCIDENTE REAL · JUL 2025` no topo. Uma linha do tempo vertical curta, quatro marcos em mono:
  `experimento público de vibe coding, acompanhado dia a dia no X`
  `dia 9 · app no ar, base de produção com registros reais`
  `dia 9 · congelamento de código declarado explicitamente, mais de uma vez`
  `dia 9 · o agente executa comandos não autorizados e apaga os dados de produção`
  À direita, um bloco citando a resposta pública da Replit: pedido público de desculpas do CEO, postmortem, separação automática entre banco de desenvolvimento e produção, melhorias de reversão e um modo somente-planejamento.
  Rodapé discreto: `fontes: slide 19`.
- **Transição.** "Repara no que falhou. Não foi o modelo não entender o pedido. Foi o pedido não ser um mecanismo."

---

### 07 · `instrucao-nao-e-controle` — manifesto

- **Objetivo.** Converter o caso em princípio. É o slide que a audiência vai fotografar.
- **O que fica.** A distinção prompt/controle.
- **Visual.** Duas linhas, contrastadas por peso:
  **PROMPTS EXPRESSAM INTENÇÃO.**
  **CONTROLES IMPÕEM LIMITES.**
  Acima, em mono pequeno: `uma instrução não é um controle de segurança`.
- **Transição.** "Guarda essa distinção, porque o segundo caso é ela levada ao extremo."

---

### 08 · `pocketos` — PocketOS

- **Objetivo.** Segundo caso real, mais recente e mais próximo do público. Mostrar que o problema não é o modelo, é a credencial.
- **O que fica.** O encadeamento, não o vilão.
- **Visual.** Carimbo `INCIDENTE REAL · ABR 2026`. Uma cascata vertical de quatro caixas, cada uma um pouco mais larga e mais escura que a anterior:
  `TAREFA DE STAGING`
  `TOKEN COM PRIVILÉGIO EXCESSIVO` — *encontrado em um arquivo fora do escopo da tarefa*
  `ACESSO A PRODUÇÃO`
  `AÇÃO DESTRUTIVA` — *banco e cópias de segurança no mesmo raio*
  No canto, isolado e em tipografia grande: **`~9s`**.
  Rodapé: `Cursor Agent · Claude Opus 4.6 · token Railway de escopo amplo · fontes: slide 19`.
- **Transição.** "A leitura preguiçosa desse caso é 'a IA surtou'. A leitura útil é outra."

---

### 09 · `we-gave-the-keys` — manifesto

- **Objetivo.** Tirar a responsabilidade do modelo e devolver para a arquitetura. Momento de silêncio.
- **O que fica.** A frase.
- **Visual.** Tela cheia, duas linhas:
  **"The agent didn't hack production."**
  **"We gave it the keys."**
  Nada mais. Sem carimbo, sem rodapé.
- **Transição.** "Dá pra transformar os dois casos numa conta só."

---

### 10 · `blast-radius` — a equação

- **Objetivo.** Entregar o modelo mental que a audiência vai levar embora. É o produto da palestra.
- **O que fica.** `AGENCY × PRIVILEGE = BLAST RADIUS`, e o reflexo de perguntar pelo raio antes de dar acesso.
- **Visual.** A equação sozinha, do tamanho da tela, em display. Abaixo, dois discos concêntricos de tamanhos muito diferentes, cada um rotulado em mono:
  `alta autonomia + permissão mínima → raio pequeno`
  `alta autonomia + credencial de produção → raio enorme`
  No rodapé, duas linhas contrastadas:
  `"nunca mexa em produção"` → **orientação**
  `"você não tem credencial de produção"` → **controle**
- **Transição.** "Beleza. Chega de assustar. Vamos para a primeira coisa que dá pra fazer ainda hoje, em cinco minutos."

---

### 11 · `secrets` — três níveis de maturidade

- **Objetivo.** Primeira entrega prática. Mostrar Claude Code de verdade, com a sintaxe vigente.
- **O que fica.** Existe um degrau entre pedir e impedir, e ele é um arquivo JSON.
- **Visual.** Três degraus empilhados, cada um mais escuro que o anterior.

  **1 · PROMPT** — `"Claude, nunca leia meu .env."` em mono, cinza claro, carimbo `SUGESTÃO`.

  **2 · CONFIGURAÇÃO** — `.claude/settings.json`, carimbo `REGRA`:

  ```json
  {
    "permissions": {
      "deny": [
        "Read(./.env)",
        "Read(./.env.*)",
        "Read(./secrets/**)"
      ]
    }
  }
  ```

  **3 · ENFORCEMENT** — `.claude/settings.json`, carimbo `SISTEMA OPERACIONAL`:

  ```json
  {
    "sandbox": {
      "enabled": true,
      "filesystem": {
        "denyRead": ["~/"],
        "allowRead": ["."]
      }
    }
  }
  ```

  Ao lado do degrau 2, uma nota curta em mono, que é o detalhe que separa quem
  leu a documentação de quem não leu:
  `deny Read cobre as ferramentas de arquivo do Claude, os comandos de arquivo que o Claude Code reconhece no Bash (cat, head, tail, sed) e os alvos de redirecionamento; não cobre um script Python ou Node que abre o arquivo sozinho.`
  E ao lado do degrau 3:
  `com o sandbox ligado, as regras de deny de Read e Edit são fundidas na fronteira de filesystem do sandbox; a partir daí quem impõe é o SO, para o comando e para os processos filhos.`

  No rodapé: **PEÇA MENOS. PERMITA MENOS. IMPEÇA TECNICAMENTE O RESTO.**
- **Transição.** "Isso resolve o que o agente lê. Agora, o que a sua aplicação deixa qualquer um ler."

---

### 12 · `authn-authz` — autenticação ≠ autorização

- **Objetivo.** Preparar tecnicamente o primeiro passo da demo. A audiência precisa entender IDOR *antes* de ver.
- **O que fica.** Login responde "quem é você". Autorização responde "você pode fazer ISTO com ISTO".
- **Visual.** Um fragmento de barra de endereço, grande, no centro, com o número editável em destaque:
  `acmecrm.local/customers/` **`1001`** → `1001` riscado, virando **`2001`**.
  Abaixo, duas respostas de API lado a lado, em mono:
  `GET /api/customers/2001` → **`200 OK`** (em tinta) com o nome de um cliente de outro tenant
  `GET /api/customers/2001` → **`403 Forbidden`** (com carimbo verde)
  No rodapé, uma linha sozinha: **"Esconder o botão Admin não é controle de acesso."**
- **Transição.** "Guarda esse 2001 na cabeça. A gente vai fazer isso ao vivo daqui a pouco. Antes, tem uma classe de problema que só existe porque agentes leem coisas."

---

### 13 · `dados-viram-instrucoes` — injeção de prompt

- **Objetivo.** Explicar a mudança conceitual sem virar aula de LLM security.
- **O que fica.** "Para um agente, o canal de dados e o canal de instrução são o mesmo canal."
- **Visual.** No topo, a frase sozinha: **"Para um agente, dados também podem virar instruções."**
  Abaixo, um leque de fontes em mono, cinza: `usuários · sites · e-mails · tickets · GitHub Issues · documentos · PDFs · base de conhecimento · resultado de ferramenta`.
  E, embaixo, dois blocos curtos:
  **DIRETA** — o atacante fala com o agente.
  **INDIRETA** — o agente lê conteúdo que o atacante plantou antes.
  O bloco `INDIRETA` está em tinta cheia; o outro, apagado. É esse que importa.
- **Transição.** "Sozinho, isso é curiosidade linguística. Combinado com duas outras coisas, vira problema de segurança. E já foi demonstrado — em cima do GitHub."

---

### 14 · `toxic-flow` — GitHub MCP e a lethal trifecta

- **Objetivo.** Mostrar pesquisa séria e nomear o padrão. É a fundação conceitual do ato D4 da demo.
- **O que fica.** Os três ingredientes. Quando os três estão juntos, o problema é sistêmico.
- **Visual.** Metade esquerda: uma cascata de sete passos em mono, com uma seta contínua:
  `ATACANTE` → `ISSUE MALICIOSA EM REPO PÚBLICO` → `AGENTE LÊ A ISSUE` → `INJEÇÃO INDIRETA` → `AGENTE TEM ACESSO A REPO PRIVADO` → `AGENTE TEM CANAL DE SAÍDA (abrir PR)` → `EXFILTRAÇÃO`.
  Carimbo no alto: `PESQUISA · INVARIANT LABS · MAI 2025`, com a nota `demonstração controlada, não vazamento real`.
  Metade direita: três círculos que se cruzam, e só a interseção está em tinta:
  `ENTRADA NÃO CONFIÁVEL` · `DADO SENSÍVEL` · `CAPACIDADE DE AGIR / EXFILTRAR`.
  No centro da interseção: **LETHAL TRIFECTA**.
  Rodapé: `"toxic agent flow" — Invariant Labs · "lethal trifecta" — Simon Willison, 2025`.
- **Transição.** "Agora eu quero parar de falar e mostrar. Tudo o que a gente viu até aqui está dentro de um app que eu escrevi de propósito do jeito errado."

---

### 15 · `demo` — AcmeCRM

- **Objetivo.** Provar tudo. É o clímax.
- **O que fica.** "Eu já escrevi isso."
- **Visual.** Slide-cartão de abertura da demo, exibido por ~15 segundos antes do alt-tab:
  **AcmeCRM** — *o CRM mais vibe-coded do mundo*
  Carimbo discreto, canto inferior: `INTENTIONALLY VULNERAVEL TRAINING APPLICATION · SYNTHETIC DATA ONLY`.
  Ao lado, em mono: `100% local · sem internet · sem credencial real`.
  O roteiro minuto a minuto está na seção 7 deste documento e em `docs/05-runbook-demo.md`.
- **Transição.** (volta do app para o deck) "Quatro falhas. Nenhuma delas exótica. E a correção das quatro cabe num slide."

---

### 16 · `mvs` — Segurança Mínima Viável

- **Objetivo.** Resolver a tensão. Devolver agência. Este slide precisa parecer alcançável, não uma auditoria.
- **O que fica.** Oito controles baratos, agrupados em três blocos que cabem na cabeça.
- **Visual.** **Não é uma lista de oito.** São três colunas, cada uma com um título-verbo e os controles dentro:

  **QUEM ENTRA**
  `1 · Identidade` — autenticação madura, múltiplos fatores onde faz sentido
  `2 · Autorização` — no servidor e contextual
  `3 · Isolamento de tenant` — usuário + ação + recurso + tenant, sempre os quatro

  **O QUE ENTRA NO CÓDIGO**
  `4 · Segredos` — cofre de segredos, e fronteira explícita para o agente
  `5 · Dependências` — lockfile (arquivo de trava), verificação, varredura
  `6 · Pipeline` — revisão de pull request, proteção de branch, scan de segredo e de dependência

  **O QUE O AGENTE PODE**
  `7 · Permissões do agente` — menor privilégio, sandbox, aprovação humana no que dói
  `8 · Detecção e recuperação` — registro, cópia de segurança testada, reversão

  Cada bloco é uma coluna com fio vertical de separação. Números em mono, no
  azul de arquivo. Nenhuma frase passa de uma linha.
  Rodapé: **"Não é um departamento de segurança antes do MVP. São oito coisas baratas que apagam a maior parte do risco."**
- **Transição.** "E tem uma última peça, que não é técnica, e que normalmente a galera confunde com burocracia."

---

### 17 · `governanca` — governança em cinco perguntas

- **Objetivo.** Traduzir "governança" para founder. Fechar o lado organizacional sem soar corporativo.
- **O que fica.** Cinco perguntas que cabem numa reunião de vinte minutos.
- **Visual.** No topo, a definição em uma linha:
  *"Quem pode usar o quê, com quais dados, com quais permissões, e quem responde pelo resultado."*
  Abaixo, cinco perguntas numeradas em mono, uma por linha, com respiro entre elas:
  `1 · Qual ferramenta de IA pode acessar meu código?`
  `2 · Quais dados podem entrar nela?`
  `3 · Quais credenciais e ferramentas o agente tem?`
  `4 · Quem aprova ação crítica?`
  `5 · Eu consigo descobrir depois o que aconteceu?`
  À direita de cada uma, um checkbox vazio, desenhado a fio. Sem preenchimento.
- **Transição.** "Se você sair daqui hoje só com uma coisa, que seja isto."

---

### 18 · `fechamento` — o fecho

- **Objetivo.** Consolidar sem recapitular. Deixar a audiência com energia, não com medo.
- **O que fica.** As duas frases finais.
- **Visual.** Construção em dois tempos na mesma tela.
  Primeiro entram, em peso médio:
  **PROMPTS EXPRESSAM INTENÇÃO.**
  **CONTROLES IMPÕEM LIMITES.**
  Elas então recuam para cinza, e entra embaixo, em display, ocupando o resto da tela:
  **SHIP FAST.**
  **BUT KNOW WHAT YOU SHIPPED.**
  Rodapé em mono, discreto: nome, contato, `github.com/lucasvnd`.
- **Transição.** Para as perguntas. O slide 19 fica no ar durante as perguntas.

---

### 19 · `referencias` — fontes

- **Objetivo.** Sustentar tecnicamente tudo o que foi afirmado. Fica no ar durante as perguntas.
- **O que fica.** "Ele não inventou nada disso."
- **Visual.** Três colunas discretas, tipografia pequena: **INCIDENTES**, **PESQUISA**, **DOCUMENTAÇÃO**. Uma linha por fonte, com o link em mono. Conteúdo completo em `docs/06-referencias.md`.

---

## 7. Momentos exatos da demo (slide 15)

Nove minutos, cinco atos, uma restauração de estado. O runbook operacional completo — comandos,
o que fazer se travar e o plano B — está em `docs/05-runbook-demo.md`.

| t | Ato | O que acontece na tela | Frase-gatilho | Slide que preparou |
| :-- | :-- | :-- | :-- | :-- |
| 0:00 | **D0 · Contexto** | Login como `alice@acme.test`. Painel da ACME Corp. Tudo bonito, tudo funcionando. | "Isso aqui foi vibe-coded numa tarde. E funciona." | 02 |
| 0:45 | **D1 · IDOR** | Abrir cliente `1001`. Trocar a URL para `2001`. Aparece o cliente da Wayne Enterprises. Abrir o DevTools e mostrar o `200 OK`. | "Eu não hackeei nada. Eu digitei um número diferente." | 12 |
| 2:15 | **D1'** | Virar a chave para `protegido`. Repetir. `403 Forbidden`. Mesma URL, mesma sessão, resposta diferente. | "Uma linha de código. Uma linha." | 12 |
| 3:00 | **D2 · Admin só no front** | Alice não vê o menu Admin. Chamar `POST /api/admin/users` pelo console. Funciona no modo vulnerável. | "O botão sumiu. O endpoint não." | 12 |
| 4:00 | **D2'** | Modo protegido: `403`. | "Autorização mora no servidor. Sempre." | 16 |
| 4:30 | **D3 · Segredos e o agente** | Mostrar `.env.demo` com credenciais obviamente falsas. Mostrar o `.claude/settings.json` do repositório com o `permissions.deny`. Ler o arquivo com e sem a regra. | "O arquivo continua lá. O que mudou foi quem alcança." | 11 |
| 6:00 | **D4 · Injeção indireta** | Pedir ao Assistente Acme: *"resume os chamados abertos do cliente 1001"*. O agente lê um chamado cujo corpo contém instrução adversarial. No modo vulnerável, ele chama `export_customer_data()` e a interface **simula** a exfiltração, com um banner `SIMULADO — nenhum dado saiu desta máquina`. | "Ninguém falou com o agente. O atacante escreveu isso num chamado três semanas atrás." | 13, 14 |
| 8:00 | **D4'** | Modo protegido: a mesma ferramenta está fora da allowlist da sessão e exige aprovação humana. O agente pede autorização. Recusar na frente da plateia. | "Menor privilégio não é burocracia. É esse pop-up." | 16 |
| 8:45 | **Restauração** | `npm run demo:reset` na frente de todo mundo. Estado volta ao inicial. | "E é isso. Voltando pro deck." | — |

**Contrato narrativo.** Nada aparece na demo que não tenha sido preparado por
um slide anterior, e nada nos slides seguintes é apresentado como novidade se
a audiência acabou de ver quebrar. O slide 16 é lido, deliberadamente, como a
lista de correções do que acabou de acontecer na tela.

## 8. Transições (a costura falada)

| De → Para | Ponte |
| :-- | :-- |
| 00 → 01 | "Antes de eu falar qualquer coisa, uma pergunta — e eu não respondo agora." |
| 01 → 02 | "Segura essa. Primeiro, o que mudou pra melhor." |
| 02 → 03 | "O trilho encurtou inteiro, menos uma estação." |
| 03 → 04 | "Por que não? Porque o que barateou foi uma coisa só." |
| 04 → 05 | "Até aqui é conversa sobre qualidade de código. Agora deixa de ser." |
| 05 → 06 | "Quando errar quer dizer executar, a conta muda. Duas contas já foram pagas." |
| 06 → 07 | "Não falhou o entendimento. Falhou o mecanismo." |
| 07 → 08 | "O segundo caso é essa distinção levada ao extremo." |
| 08 → 09 | "A leitura preguiçosa é 'a IA surtou'. A útil é outra." |
| 09 → 10 | "Dá pra transformar os dois casos numa conta só." |
| 10 → 11 | "Chega de assustar. Primeira coisa acionável, cinco minutos." |
| 11 → 12 | "Isso é o que o agente lê. Agora, o que a sua aplicação deixa qualquer um ler." |
| 12 → 13 | "Guarda o 2001. Antes, uma classe que só existe porque agentes leem." |
| 13 → 14 | "Sozinho é curiosidade. Combinado, é problema. E já foi demonstrado." |
| 14 → 15 | "Chega de slide. Tudo isso está num app que eu escrevi errado de propósito." |
| 15 → 16 | "Quatro falhas, nenhuma exótica, e a correção cabe num slide." |
| 16 → 17 | "Falta uma peça, que não é técnica." |
| 17 → 18 | "Se você levar uma coisa só daqui, que seja isto." |
