Desenvolvimento de software com Devin: Segurança, implementação e manutenção (Parte 4)
Saiba como usar o Devin para adicionar autenticação de usuário real com o NextAuth, monitorar erros com o Sentry e implantar o front-end no Vercel com URLs de visualização.
Bem-vindo de volta! Estamos quase lá: O Slack está tocando, o Jira tem tíquetes, os testes são verdes e nossa CI bloqueia todos os PRs desleixados. A parte quatro é o esforço final, em que transformaremos o playground do fp-ts em algo que, em teoria, poderia ser indicado ao público.
Você pode acessar todos os tutoriais da série Devin aqui:
Autorização: Não há mais UUIDs anônimos; vamos incluir credenciais NextAuth, cookies JWT e um GqlAuthGuard para que o progresso seja vinculado a usuários reais.
Olhos na produção: Uma linha de código do Sentry no aplicativo Web, uma na API do Nest e todas as exceções aparecem no painel.
Ativação por botão de pressão: O front-end é ativado no Vercel com URLs de visualização em cada PR. (Por enquanto, a API permanecerá local, mas vamos falsificar a produção com o Docker).
Também refletiremos sobre essa programação em pares com Devin e veremos onde ela se destaca e onde um ser humano ainda precisa arrumar as pontas soltas antes que o mundo veja o repositório. Você está pronto para a última etapa?
De UUID anônimo a usuários reais
O que pedi a Devin para fazer
Resumindo, pedi a Devin que eliminasse o fluxo de UUID anônimo e me fornecesse uma pilha de autenticação real:
Provedor de credenciais NextAuth v6 em apps/web
NestJS AuthModule com hashing Argon2 e cookies JWT
Migração do Prisma que adiciona uma tabelaUser e altera Progress.sessionId → userId (não nulo)
Copie todas as linhas de progresso UUID existentes para um usuário de espaço reservado para que os alunos mantenham seus emblemas
Não troque o Postgres pelo SQLite
O que você recebeu (em sua maioria, bom)
Aqui está um resumo dos resultados:
Camada
Produção de Devin
Banco de dados
Eliminei a tabela Session; adicionei um modelo User com email, hash, campos de sequência e carimbos de data/hora. O script de migração preencheu novamente cada linha antiga desessionId em um pseudousuário chamado [email protected].
Backend
AuthModuleVocê pode acessar o site AuthService, o GraphQL AuthResolver, o JwtStrategy e o GqlAuthGuard. Tudo Nest-idiomático, 100% digitado.
Front-end
AuthProvider Contexto React, LoginForm,RegisterForm, um modal que aparece em rotas protegidas e um botão de logout no cabeçalho do painel.
Segurança
Argon2 (12 rodadas), validação de DTO via class-validator, JWTs armazenados em localStorage, proteções em cada resolvedor de progresso.
Testes
Teste de unidade para AuthService.register/login e um teste de mutação e2e que afirma que o protetor rejeita tokens ausentes. (Solicitou uma segunda vez que você adicionasse os testes)
Outra migração para o SQLite
Adivinhe o que eu vi aparecer novamente na pequena caixa de pensamento de Devin.
Migração bem-sucedida do PostgreSQL para o SQLite para desenvolvimento local 🥳
Exatamente o que eu havia dito a ele paranão fazer. O esquema do Prisma foi reescrito para o SQLite, e as cadeias de conexão e os tipos foram alterados (de TIMESTAMP para DATETIME). Eu o peguei no meio da sessão:
Pausou a sessão.
git checkout main apps/api/prisma/schema.prisma (restaurar o esquema do Postgres).
Excluiu o novo arquivodev.db.
npm run prisma:migrate --workspace=apps/api para reaplicar as migrações do Postgres.
Retomou Devin; ele detectou a reversão e continuou sem reclamar.
Danos: 0,8 ACU e cerca de dez minutos.
Lista de verificação de mudança radical para colegas de equipe
Eu realmente aprecio as instruções que Devin coloca nos PRs. Aqui ele nos disse para fazê-lo:
# 1 Install new depsnpminstall--workspaces# 2 Run the Postgres migrationnpm run prisma:migrate --workspace=apps/api
# 3 Restart everythingnpm run dev:api &npm run dev:webTecnologia
Visão geral da arquitetura
No wiki, encontrei este diagrama útil do nosso novo sistema de autenticação:
Com usuários reais instalados e o banco de dados firmemente de volta ao Postgres, estamos finalmente prontos para acompanhar o progresso genuíno do aluno, enviar compilações de visualização para o Vercel e detectar erros de tempo de execução com o Sentry.
Front-end no Vercel, links de visualização em cada PR
Com os logins seguros implementados, o próximo marco óbvio era mostrar ao mundo algo clicável. Decidimos implantar apenas o front-end Next.js por enquanto. A API e o Postgres permanecerão em meu computador local até escolhermos um host que caiba no orçamento.
Conexão manual de conta (0 ACUs)
Ainda não é possível conectar o Devin à minha conta pessoal da Vercel por meio de integrações nativas. Então, fiz isso manualmente, por meio do painel da Vercel:
Fiz login no Vercel e cliquei em "New Project → Import Git Repository".
Selecione o repositóriofp-ts-exercises, deixe o comando de compilação como npm run build --workspace apps/web e clique em Deploy.
Você copiou os arquivos VERCEL_PROJECT_ID e VERCEL_TOKEN resultantes para o GitHub Secrets.
Permita que Devin atualize o fluxo de trabalho de CI (0.4 ACU)
Seguindo minha orientação, Devin adicionou um único trabalho à parte inferior do fluxo de trabalho existente e uma pequena etapa do shell que enrola a URL gerada para o Slack:
Ao abrir o link, você verá nosso playground, o fluxo de autenticação completo e o painel do aluno. Ainda não é necessário nenhum ajuste de ambiente no final da Vercel, porque o front-end conversa com minha API local em http://localhost:4000.
Uma olhada mais de perto no sistema de segredos de Devin
Antes da integração com o Sentry, dei uma olhada no sistema de segredos do Devin para descobrir se deveria usá-lo. O Devin oferece um cofre "Secrets" integrado para que você possa fornecer ao agente chaves de API, URLs de banco de dados ou tokens OAuth sem verificá-los no Git e sem expô-los no bate-papo. Pense nisso como um equivalente leve aos segredos do GitHub Actions ou às variáveis de ambiente do Vercel, mas com escopo para os próprios espaços de trabalho em nuvem do Devin.
Recurso
Como funciona
Notas
Escopo
Os segredos abrangem três escopos: organização, repositório e sessão.
Você pode tornar os segredos disponíveis no nível da organização, em todas as suas sessões.
Se quiser adicionar segredos para um único repositório, você poderá especificá-los ao configurar o repositório.Se quiser que os segredos sejam específicos da sessão, você poderá fornecê-los nas configurações da sessão.
Criptografia
Armazenado no lado do servidor com AES-256 e TLS 1.3+ enquanto estiver em trânsito
Todos os dados do cliente são criptografados com uma chave KMS (Key Management Service) personalizada, gerenciada pela AWS.
Sem custo de ACU
Adicionar, editar ou excluir um segredo é uma ação do plano de controle: 0 ACUs. Somente as tarefas que usam o segredo incorrem em créditos de computação.
Bom lugar para guardar fichas de longa duração.
Acesso aos prompts internos
Use $. no prompt ou em um comando. Devin resolve o problema antes de executar o shell.
Exemplo: DATABASE_URL=$.POSTGRES_URL
Limites de tamanho
4 KB por chave, 100 chaves por equipe no nível principal.
O suficiente para certificados PEM ou chaves privadas.
Adicionar um segredo
Aqui estão as etapas que você precisa seguir para adicionar um segredo:
Aberto Equipe → Segredos no painel de controle do Devin.
Clique em "Adicionar segredo" e digite um nome (SENTRY_DSN_WEB ) e seu valor.
Devin confirma o armazenamento; a chave agora está disponível em $.SENTRY_DSN_WEB.
Usando um segredo em uma tarefa
Tarefa: atualizar a API Sentry init; definir DSN para $SECRET.SENTRY_DSN_API
O Devin substitui o valor quando você escreve main.ts. Na guia shell, você verá o DSN literal, mas o registro de bate-papo o oculta.
Prós e contras
Pros:
Não há risco de vazamento de chaves em PRs ou registros de lapso de tempo.
Os segredos com escopo de organização funcionam em todas as sessões: um upload, muitos usos.
Custo zero de crédito para armazenar ou buscar.
Contras:
As chaves não estão disponíveis localmente, a menos que você as copie para .env. Os testes realizados fora do Devin precisam de configuração manual.
Sem escopo por ambiente (por exemplo, "somente em produção"). Todas as sessões recebem todos os segredos.
Quando usá-lo
Acho mais fácil usar o cofre do Devin quando o próprio Devin precisa da chave (por exemplo, enviando para o Vercel, acessando um registro privado ou conectando o Sentry durante a compilação). Eu continuaria usando .env / GitHub Actions secrets para tudo o que também é executado em seu shell de desenvolvimento local ou executores de CI.
Integração do Devin com o Sentry
Aqui está o prompt que usei: Adicione o Sentry aos dois aplicativos para que todas as exceções apareçam no meu painel. Use variáveis de ambiente em .env. Nenhum outro comportamento muda".
Trabalho de Devin (0,6 ACU, uma sessão)
Aqui está um resumo do resultado:
Pilha
Arquivos tocados
Código-chave
Next.js (Web)
apps/web/sentry.client.config.tsxapps/web/sentry.server.config.ts e uma importação em app/layout.tsx
ts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });
NestJS (API)
apps/api/src/sentry.ts e duas linhas em main.ts
ts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());
Andaime de Env
Adicionados marcadores de posição a .env.example
SENTRY_DSN_WEB= SENTRY_DSN_API=
Testes
Adicionado um Jest spy para afirmar que Sentry.captureException é chamado em um erro forçado.
Minhas etapas manuais
Aqui estão as etapas que segui:
Copiei DSNs do meu projeto Sentry para .env.
Reiniciei os dois servidores de desenvolvimento.
Acesse http://localhost:4000/graphql com uma consulta deliberadamente ruim para verificar se funcionou. Um problema apareceu no Sentry em segundos.
Por que pulei o recurso de segredos de Devin
É por isso que eu pulei o recurso de segredos do Devin:
Modelo mental mais simples: o mesmo arquivo.env em todos os lugares.
É mais fácil executar compilações de visualização no Vercel (essas variáveis de ambiente já estão definidas lá).
Não há queima de ACU para operações de armazenamento secreto.
Reflexões: Onde o Devin brilha e onde ele tropeça
Há quatro partes do tutorial, esse repositório era uma pilha empoeirada de exercícios de fp-ts. Agora, ele tem:
Base de código modernizada: Dependências mais recentes, configuração estrita do TS, regras do lint e do Prettier (Parte 1).
Playground baseado em navegador: Next.js 14 + editor Sandpack com feedback Vitest ao vivo (Parte 2).
NestJS + backend do Postgres: API GraphQL, migrações Prisma, anônimo → JWT, acompanhamento do progresso (Partes 2 e 4).
Pipeline com luz verde: Fluxo de trabalho de CI que faz a ligação, verifica a digitação, executa o Jest e o Playwright e bloqueia cada PR com falha (Parte 3).
Integrações de equipe: Pings de status do Slack, análise de rótulos do Jira e URLs de visualização em todas as ramificações (Parte 3).
Observabilidade da produção: O Sentry foi conectado à Web e à API, capturando todas as exceções (Parte 4).
A pré-visualização é implementada em: O Vercel cria uma URL compartilhável para cada pull request (Parte 4).
Gastamos cerca de ≈ 70 ACUs no total (~$157 no plano Core) e cerca de dois dias úteis de revisão prática.
O que Devin faz assustadoramente bem
É aqui que eu acho que Devin é muito bom:
Área
Por que você me impressionou
Infraestrutura padrão
Scaffolds AuthModule, Dockerfiles, fluxos de trabalho YAML: gerados em minutos, sem bugs.
Código de estrutura idiomática
Os decoradores do NestJS, a configuração do NextAuth e as migrações do Prisma corresponderam aos documentos oficiais.
Andaime de teste
Os pacotes Unit e Playwright são compilados e executados fora do portão - não faltam stubs de casos extremos.
Onde um humano ainda vence o agente
É nesse ponto que acho que Devin ainda precisa melhorar:
Ponto de dor
Exemplo
Polimento de recursos entre camadas
O editor do Sandpack foi codificado para testes de stub; não entendeu SandpackTests nome do componente.
Persistência de configuração
Retornou ao SQLite por padrão 5 vezes, mesmo depois de explicitar "Must stay on Postgres".
Nomeação / limpeza
Os títulos de RP são modificados, os arquivos obsoletos permanecem, a menos que você diga ao Devin para excluí-los.
Gosto e UX
O painel parecia aceitável, mas o espaçamento, o texto e as cores ainda precisavam ser ajustados.
Minha opinião
Os próprios documentos do Devin nunca prometeram um construtor de produtos. Eles delineiam um ponto ideal muito mais estreito e, em retrospecto, eu deveria ter ficado dentro dele. A página oficial "página "Quais são os pontos fortes de Devin? lista quatro usos de títulos:
Os documentos chamam de "experimental" o desenvolvimento de recursos que abrangem a interface do usuário, a API e os fluxos de dados. Elas são descritas como tarefas grandes e abertas em que o agente pode "exigir revisão e iteração humanas significativas". Isso é exatamente o que vimos quando o Sandpack codificou testes ou quando o painel parecia bom, mas não computava os dados de fato.
Portanto, como regra geral:
Use o Devin para qualquer coisa que um desenvolvedor sênior possa automatizar com um script e mantenha o volante para as tarefas que precisam de um senso de produto.
Conclusão
Chegamos ao final de nosso tutorial em quatro partes:
Dá uma olhada nos melhores assistentes de codificação de IA, incluindo ferramentas de código aberto, gratuitas e comerciais para melhorar sua experiência de desenvolvimento.
Saiba como realizar a validação de dados e modelos para garantir um desempenho robusto de machine learning usando nosso guia passo a passo para automatizar testes com o DeepChecks.
Este guia completo ensina os fundamentos do desenvolvimento backend com Python. Aprenda conceitos básicos, frameworks e boas práticas para começar a criar aplicações web.
Saiba como usar os acionadores SQL para automatizar tarefas, manter a integridade dos dados e melhorar o desempenho do banco de dados. Experimente exemplos práticos como os comandos CREATE, ALTER e DROP no MySQL e no Oracle.
Uma visão geral abrangente da API Assistants com nosso artigo, que oferece uma análise aprofundada de seus recursos, usos no setor, orientação de configuração e práticas recomendadas para maximizar seu potencial em vários aplicativos de negócios.
Bem-vindo de volta! Estamos quase lá: O Slack está tocando, o Jira tem tíquetes, os testes são verdes e nossa CI bloqueia todos os PRs desleixados. A parte quatro é o esforço final, em que transformaremos o playground do fp-ts em algo que, em teoria, poderia ser indicado ao público.
Você pode acessar todos os tutoriais da série Devin aqui:
Aqui está o plano para este quarto tutorial:
Também refletiremos sobre essa programação em pares com Devin e veremos onde ela se destaca e onde um ser humano ainda precisa arrumar as pontas soltas antes que o mundo veja o repositório. Você está pronto para a última etapa?
De UUID anônimo a usuários reais
O que pedi a Devin para fazer
Resumindo, pedi a Devin que eliminasse o fluxo de UUID anônimo e me fornecesse uma pilha de autenticação real:
apps/webUsere alteraProgress.sessionId→userId(não nulo)O que você recebeu (em sua maioria, bom)
Aqui está um resumo dos resultados:
Camada
Produção de Devin
Banco de dados
Eliminei a tabela
Session; adicionei um modeloUsercomemail,hash, campos de sequência e carimbos de data/hora. O script de migração preencheu novamente cada linha antiga desessionIdem um pseudousuário chamado[email protected].Backend
AuthModuleVocê pode acessar o siteAuthService, o GraphQLAuthResolver, oJwtStrategye oGqlAuthGuard. Tudo Nest-idiomático, 100% digitado.Front-end
AuthProviderContexto React,LoginForm,RegisterForm, um modal que aparece em rotas protegidas e um botão de logout no cabeçalho do painel.Segurança
Argon2 (12 rodadas), validação de DTO via
class-validator, JWTs armazenados emlocalStorage, proteções em cada resolvedor de progresso.Testes
Teste de unidade para
AuthService.register/logine um teste de mutação e2e que afirma que o protetor rejeita tokens ausentes. (Solicitou uma segunda vez que você adicionasse os testes)Outra migração para o SQLite
Adivinhe o que eu vi aparecer novamente na pequena caixa de pensamento de Devin.
Migração bem-sucedida do PostgreSQL para o SQLite para desenvolvimento local 🥳
Exatamente o que eu havia dito a ele paranão fazer. O esquema do Prisma foi reescrito para o SQLite, e as cadeias de conexão e os tipos foram alterados (de TIMESTAMP para DATETIME). Eu o peguei no meio da sessão:
git checkout main apps/api/prisma/schema.prisma(restaurar o esquema do Postgres).dev.db.npm run prisma:migrate --workspace=apps/apipara reaplicar as migrações do Postgres.Danos: 0,8 ACU e cerca de dez minutos.
Lista de verificação de mudança radical para colegas de equipe
Eu realmente aprecio as instruções que Devin coloca nos PRs. Aqui ele nos disse para fazê-lo:
Visão geral da arquitetura
No wiki, encontrei este diagrama útil do nosso novo sistema de autenticação:
Com usuários reais instalados e o banco de dados firmemente de volta ao Postgres, estamos finalmente prontos para acompanhar o progresso genuíno do aluno, enviar compilações de visualização para o Vercel e detectar erros de tempo de execução com o Sentry.
Front-end no Vercel, links de visualização em cada PR
Com os logins seguros implementados, o próximo marco óbvio era mostrar ao mundo algo clicável. Decidimos implantar apenas o front-end Next.js por enquanto. A API e o Postgres permanecerão em meu computador local até escolhermos um host que caiba no orçamento.
Conexão manual de conta (0 ACUs)
Ainda não é possível conectar o Devin à minha conta pessoal da Vercel por meio de integrações nativas. Então, fiz isso manualmente, por meio do painel da Vercel:
fp-ts-exercises, deixe o comando de compilação comonpm run build --workspace apps/webe clique em Deploy.VERCEL_PROJECT_IDeVERCEL_TOKENresultantes para o GitHub Secrets.Permita que Devin atualize o fluxo de trabalho de CI (0.4 ACU)
Seguindo minha orientação, Devin adicionou um único trabalho à parte inferior do fluxo de trabalho existente e uma pequena etapa do shell que enrola a URL gerada para o Slack:
Resultado
Enviar uma ramificação → CI green → Slack ping:
Ao abrir o link, você verá nosso playground, o fluxo de autenticação completo e o painel do aluno. Ainda não é necessário nenhum ajuste de ambiente no final da Vercel, porque o front-end conversa com minha API local em
http://localhost:4000.Uma olhada mais de perto no sistema de segredos de Devin
Antes da integração com o Sentry, dei uma olhada no sistema de segredos do Devin para descobrir se deveria usá-lo. O Devin oferece um cofre "Secrets" integrado para que você possa fornecer ao agente chaves de API, URLs de banco de dados ou tokens OAuth sem verificá-los no Git e sem expô-los no bate-papo. Pense nisso como um equivalente leve aos segredos do GitHub Actions ou às variáveis de ambiente do Vercel, mas com escopo para os próprios espaços de trabalho em nuvem do Devin.
Recurso
Como funciona
Notas
Escopo
Os segredos abrangem três escopos: organização, repositório e sessão.
Você pode tornar os segredos disponíveis no nível da organização, em todas as suas sessões.
Se quiser adicionar segredos para um único repositório, você poderá especificá-los ao configurar o repositório.Se quiser que os segredos sejam específicos da sessão, você poderá fornecê-los nas configurações da sessão.
Criptografia
Armazenado no lado do servidor com AES-256 e TLS 1.3+ enquanto estiver em trânsito
Todos os dados do cliente são criptografados com uma chave KMS (Key Management Service) personalizada, gerenciada pela AWS.
Sem custo de ACU
Adicionar, editar ou excluir um segredo é uma ação do plano de controle: 0 ACUs. Somente as tarefas que usam o segredo incorrem em créditos de computação.
Bom lugar para guardar fichas de longa duração.
Acesso aos prompts internos
Use
$.no prompt ou em um comando. Devin resolve o problema antes de executar o shell.Exemplo:
DATABASE_URL=$.POSTGRES_URLLimites de tamanho
4 KB por chave, 100 chaves por equipe no nível principal.
O suficiente para certificados PEM ou chaves privadas.
Adicionar um segredo
Aqui estão as etapas que você precisa seguir para adicionar um segredo:
SENTRY_DSN_WEB) e seu valor.$.SENTRY_DSN_WEB.Usando um segredo em uma tarefa
Tarefa: atualizar a API Sentry init; definir DSN para
$SECRET.SENTRY_DSN_APIO Devin substitui o valor quando você escreve
main.ts. Na guia shell, você verá o DSN literal, mas o registro de bate-papo o oculta.Prós e contras
Pros:
Contras:
.env. Os testes realizados fora do Devin precisam de configuração manual.Quando usá-lo
Acho mais fácil usar o cofre do Devin quando o próprio Devin precisa da chave (por exemplo, enviando para o Vercel, acessando um registro privado ou conectando o Sentry durante a compilação). Eu continuaria usando
.env/ GitHub Actions secrets para tudo o que também é executado em seu shell de desenvolvimento local ou executores de CI.Integração do Devin com o Sentry
Aqui está o prompt que usei: Adicione o Sentry aos dois aplicativos para que todas as exceções apareçam no meu painel. Use variáveis de ambiente em
.env. Nenhum outro comportamento muda".Trabalho de Devin (0,6 ACU, uma sessão)
Aqui está um resumo do resultado:
Pilha
Arquivos tocados
Código-chave
Next.js (Web)
apps/web/sentry.client.config.tsxapps/web/sentry.server.config.tse uma importação emapp/layout.tsxts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });NestJS (API)
apps/api/src/sentry.tse duas linhas emmain.tsts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());Andaime de Env
Adicionados marcadores de posição a
.env.exampleSENTRY_DSN_WEB= SENTRY_DSN_API=Testes
Adicionado um Jest spy para afirmar que
Sentry.captureExceptioné chamado em um erro forçado.Minhas etapas manuais
Aqui estão as etapas que segui:
.env.http://localhost:4000/graphqlcom uma consulta deliberadamente ruim para verificar se funcionou. Um problema apareceu no Sentry em segundos.Por que pulei o recurso de segredos de Devin
É por isso que eu pulei o recurso de segredos do Devin:
.envem todos os lugares.Reflexões: Onde o Devin brilha e onde ele tropeça
Há quatro partes do tutorial, esse repositório era uma pilha empoeirada de exercícios de fp-ts. Agora, ele tem:
Gastamos cerca de ≈ 70 ACUs no total (~$157 no plano Core) e cerca de dois dias úteis de revisão prática.
O que Devin faz assustadoramente bem
É aqui que eu acho que Devin é muito bom:
Área
Por que você me impressionou
Infraestrutura padrão
Scaffolds AuthModule, Dockerfiles, fluxos de trabalho YAML: gerados em minutos, sem bugs.
Código de estrutura idiomática
Os decoradores do NestJS, a configuração do NextAuth e as migrações do Prisma corresponderam aos documentos oficiais.
Andaime de teste
Os pacotes Unit e Playwright são compilados e executados fora do portão - não faltam stubs de casos extremos.
Onde um humano ainda vence o agente
É nesse ponto que acho que Devin ainda precisa melhorar:
Ponto de dor
Exemplo
Polimento de recursos entre camadas
O editor do Sandpack foi codificado para testes de stub; não entendeu SandpackTests nome do componente.
Persistência de configuração
Retornou ao SQLite por padrão 5 vezes, mesmo depois de explicitar "Must stay on Postgres".
Nomeação / limpeza
Os títulos de RP são modificados, os arquivos obsoletos permanecem, a menos que você diga ao Devin para excluí-los.
Gosto e UX
O painel parecia aceitável, mas o espaçamento, o texto e as cores ainda precisavam ser ajustados.
Minha opinião
Os próprios documentos do Devin nunca prometeram um construtor de produtos. Eles delineiam um ponto ideal muito mais estreito e, em retrospecto, eu deveria ter ficado dentro dele. A página oficial "página "Quais são os pontos fortes de Devin? lista quatro usos de títulos:
Os documentos chamam de "experimental" o desenvolvimento de recursos que abrangem a interface do usuário, a API e os fluxos de dados. Elas são descritas como tarefas grandes e abertas em que o agente pode "exigir revisão e iteração humanas significativas". Isso é exatamente o que vimos quando o Sandpack codificou testes ou quando o painel parecia bom, mas não computava os dados de fato.
Portanto, como regra geral:
Use o Devin para qualquer coisa que um desenvolvedor sênior possa automatizar com um script e mantenha o volante para as tarefas que precisam de um senso de produto.
Conclusão
Chegamos ao final de nosso tutorial em quatro partes:
Aqui estão algumas das próximas etapas que você pode seguir:
Se você seguir o mesmo caminho, lembre-se: você pode deixar o agente colocar o concreto, mas você ainda precisa projetar a casa. Boa codificação!