Phase 5: Fortschrittssynchronisation mit UUID
Goal: Behalte den Abschlussstatus jedes Lernenden bei und male die Seitenleiste beim Neuladen neu an, alles ohne Benutzerkonten.ACU burn: 2.7 (geplant 2-3).Ergebnis: Ein winziger React-Hook speichert jetzt eine vom Browser erzeugte UUID, ruft die GraphQL-API bei jedem Testdurchlauf auf und lädt den Fortschritt vor, wenn der Spielplatz aufgesetzt wird.
Was Devin tatsächlich getan hat
Für die fünfte Phase, Devin:
- Integrierter Apollo Client für die GraphQL-Kommunikation zwischen dem Frontend und dem Backend
- Anonymes Sitzungsmanagement mit UUIDs in localStorage implementiert
- Synchronisierte Echtzeit-Fortschrittsdaten und visuelle Indikatoren auf Ebene der Kategorie und der Übung
- Erkennung des Übungsabschlusses durch Einbindung in den Vitest Test Runner im Browser
- Offline-Unterstützung, optimistische Updates und robuste Fehlerbehandlung mit Wiederholungslogik (die ich nie gefordert habe).
Einer der Vorteile ist, dass Devin ein optimistisches UI-Update hinzugefügt hat, so dass Abzeichen sofort auf ✅ umgeschaltet werden. Das ist wichtig, denn so bleibt die Schnittstelle auch bei Verbindungen mit hoher Latenzzeit flott.
Gelernte Lektionen
Was ich mitnehme, ist:
- Kleiner Umfang bedeutet minimale Fehler: Die Aufgabe war recht klein und eng gefasst, sodass Devin sie gut und innerhalb eines guten Zeitrahmens ausgeführt hat.
- Sag, was du willst, aber auch, was du nicht willst: Ich habe bemerkt, dass Devin dazu neigt, den Spielraum zu erweitern, und wieder einmal hat er mir mehr gegeben, als ich wollte. In diesem Fall hat es mich nicht gestört, aber wenn es etwas gibt, was du wirklich nicht möchtest, dann sag es ausdrücklich. So habe ich zum Beispiel in jeder einzelnen Eingabeaufforderung "keine Anmeldefunktion" angegeben, weil ich davon ausging, dass sie versuchen würde, dorthin zu gelangen.
Wir haben jetzt den Beweis, dass unsere anonyme Sitzungspipeline durchgängig funktioniert. Es ist an der Zeit, dass es in der letzten Polierphase gut aussieht.
Phase 6: UI Polish & Progress Dashboard
Goal: Verwandle die Benutzeroberfläche in ein pastellfarbenes, "luftiges" Erlebnis und füge ein Dashboard hinzu, das die Streifen, den Schwierigkeitsgrad und die wöchentlichen Aktivitäten jedes Lernenden anzeigt.ACU burn: 11 (geplant ≈ 3).Outcome: Helle und dunkle Pastellthemen, neu gestaltete Übungskarten und ein Live-Dashboard mit Ringen, Balken und Streckenzählern. Devin hat die groben Züge gemacht, aber ich bin eingesprungen, um die Unstimmigkeiten bei der Namensgebung und den Austausch von Abhängigkeiten zu retten.
In dieser Phase habe ich den Umfang absichtlich erweitert, um zu sehen, wie Devin mit einer größeren Anzahl von Anfragen umgehen würde. Ich dachte eigentlich, dass es für Devin viel einfacher sein würde, als Phase 3 mit der ganzen Backend-Implementierung anzugehen. Spoiler-Alarm: Ich habe mich geirrt.
Was Devin nach der Aufforderung in Angriff genommen hat
Das ist die Aufschlüsselung meiner Anforderungen und Devins Leistung:
|
Anforderung |
Devins Leistung |
|
Pastell Design System |
Tailwind-CSS-Variablen für sanftblaue Primär-, mintfarbene Erfolgs- und lavendelfarbene Akzente hinzugefügt. Setze |
|
Typografie und Abstände |
Führt eine |
|
Fortschritts-Dashboard |
Neue Route
|
|
Verbesserte Karten |
Ersetzte |
|
Katalog-Erweiterung |
Erstelle 10 weitere Stub-Übungen mit sprechenden Namen und Platzhaltervorlagen. Zu den Metadaten gehören der Schwierigkeitsgrad, die geschätzte Zeit und die Kategorie. |
Was Devin falsch gemacht hat
Die Dinge sind nicht perfekt gelaufen - Devin:
- Geänderte Übungspaket-Dateinamen ohne den Wrapper oder Resolver zu aktualisieren → Laufzeit 500s; Patchen +1 ACU.
- Er hat Postgres still und heimlich durch SQLite ersetzt, "um die lokale Entwicklung zu erleichtern", ohne mich um Erlaubnis zu fragen. Ich hätte es nicht gewusst, wenn ich nicht zugeguckt hätte.
- Ich habe Dutzende von
console.logAnweisungen in React-Komponenten hinterlassen und die Lint-Checks haben es immer wieder versucht.
Gelernte Lektionen
Was ich mitnehme:
- Die Logik des Dashboards muss noch überarbeitet werden: Devin hat Streifen- und Zeitzähler verdrahtet, aber sie funktionieren nicht mehr. Backend-Metriken sollten mindestens einen Integrationstest haben, damit die "Happy-Path"-UI nicht vorzeitig zusammengeführt wird.
- Die ACU-Nutzung beschleunigt sich bei langen Sitzungen: Nach ~8 ACUs verlangsamte sich die Sitzung merklich. Kurze, begrenzte Sitzungen (< 5 ACUs) halten den Kontext eng und den Agenten reaktionsfähig.
- Devin wird "hilfreich" die Abhängigkeiten tauschen: Es hat Postgres durch SQLite ersetzt, ohne zu fragen. Pinne kritische Dienste in deinem Prompt: "Wechsle nicht die Datenbank-Engine; bleibe bei Postgres."
- Konstruktionsaufgaben lösen Hot-Reload-Churns aus: Jede Aktualisierung von Tailwind/Vite zählt als Agentenzeit. Vielleicht ist es besser, die Sitzung vor der Massenbearbeitung von Stilen anzuhalten und Devin aufzuwecken, wenn das Projekt sauber kompiliert ist.
Diese Aufgabe war langwierig und kostspielig, verglichen mit dem Rest der Arbeit, die wir geleistet haben. Wenigstens weiß Devin, wo die Dinge falsch gelaufen sind:

Wir haben zwar etwas Hübsches, aber es hat ein bisschen gedauert und ist nicht voll funktionsfähig. Einige der Dashboard-Kennzahlen sind fest kodiert - zwei Übungen in unserer Optionskategorie? Wir haben 10. Die Streak- und Zeitmetriken sind auch nicht mit irgendetwas verbunden und die Benutzeroberfläche auf den einzelnen Übungsseiten ist ziemlich schlecht.
Kosten & Zeit Rückblick
Wie die Zahlen ausfielen
Hier ist eine Zusammenfassung, wie alles gelaufen ist:
|
Phase |
Geplante ACUs |
Tatsächliche ACUs |
Delta |
Anmerkungen |
|
1 - Arbeitsbereich & Gerüst |
1 – 2 |
3.66 |
▲ ≈ 1.7 |
Zusätzliche Schleifen auf |
|
2 - Übungspaket |
2 |
0.60 |
▼ 1.4 |
Einfaches Verschieben von Dateien, keine aufwendigen Installationen |
|
3 – API & Prisma |
4 |
4.20 |
▲ 0.2 |
Config Falten (fehlt |
|
4 - Spielplatz & Tests |
3 – 4 |
7.20 |
▲ ≈ 3.5 |
Hot-Reload-Zyklen, Blockierung des Merge-Editors |
|
5 - Fortschrittssynchronisation |
2 – 3 |
2.70 |
▼ ≈ 0.3 |
Unkomplizierter Haken + Abfragen |
|
6 - UI polieren & Dashboard |
2 – 3 |
11.00 |
▲ ≈ 8 |
Neuinstallationen, stiller DB-Swap, große CSS-Neuladungen |
|
Gesamt |
18 – 24 |
29.36 |
▲ ≈ 6 – 11 |
Rund 35 % über der ursprünglichen Schätzung |
|
Kosten: 29,36 ACUs × $2,25 ≈ $66 | ||||
Zeitersparnis gegenüber manueller Arbeit
Das ist meine Schätzung der gesparten Zeit:
|
Aufgabe |
Menschliche Schätzung |
Devin (+ Korrekturen) |
Netz |
|
Bootstrapping NestJS + GraphQL + Prisma |
4 Stunden |
1 Std. (inkl. Korrekturen) |
-3 Std. |
|
Sandpack + Vitest Browserverkabelung |
3 Stunden |
1 Stunde 20 Minuten |
-1 h 40 min |
|
Vollständige Neugestaltung in Pastellfarben & Dashboard |
6 Stunden |
2 Stunden (aber immer noch nicht funktionsfähig) |
−4 h |
|
Gesamtzeit |
~13 Stunden |
~4 Stunden 20 Minuten |
-8 Std. 40 Min. |
Die wichtigsten Erkenntnisse
Das sind Dinge, die ich empfehle:
|
Thema |
Was zu tun ist |
Warum es wichtig ist |
|
Halte die Sitzungen kurz |
- Begrenze jeden Lauf auf ≤ 5 ACUs. - Teile große Ziele in mundgerechte Tickets auf. |
Sitzungen mit mehr als 8 ACUs sind langsam, und die Fehlerrate steigt auf ≈35 %. Kurze Bursts bleiben reaktionsschnell und billiger. |
|
Früh stupsen, oft innehalten |
- Sieh dir die Registerkarte "Zeitraffer" an; wenn Devin eine Schleife macht, tippe "Weiter" oder "Schlafen". - Mach eine Pause, während du CSS oder Dokumente bearbeitest, und wecke Devin, sobald der Code kompiliert ist. |
Die Leerlaufschleifen ticken noch, aber die heiße Phase der Entwurfsarbeit ist ein reines ACU-Brennen. |
|
Konfiguration als manuelle Arbeit behandeln |
- Große Dateibäume selbst verschieben/umbenennen (Drag-Drop schlägt 0.8 ACU-Skripte). - Behebe erstmalige Paketfehler manuell, Wiederholungen sind ACU-Senken. |
Datei-I/O und Wiederholungsinstallationen machen ~30 % der verschwendeten Credits aus. |
|
Lint & type-check lokal |
- Führe deine Testskripte (in unserem Fall Lint und Typecheck) immer vor dem Zusammenführen aus. - Füge diese Befehle zu deinem CI hinzu (mehr dazu im nächsten Tutorial!). |
Devin wird den Erfolg verkünden, auch wenn die Pipeline scheitert. |
|
Pin critical tech |
- Gib an, was sich nicht ändern darf: "Bleib auf Postgres, kein Login, behalte Tailwind." - Erforderliche Umgebungsvariablen in |
Devin tauscht Postgres gegen SQLite aus oder fügt neue Testläufer hinzu, wenn er nicht dazu aufgefordert wird. |
|
Geheimnisse selbst regeln |
- Entferne - Plane einen Geheimhaltungsschritt für spätere Tutorials. |
Devin unterscheidet nicht unbedingt zwischen Dummy-Credits und echten Creds. |
|
Merge-Editor stoppt |
- Springe ein, um bei Merge-Commits und Prozess-Exits zu helfen. |
Vim-Lock-ups verschwenden Minuten und ACUs. |
|
Unbrauchbaren Code frühzeitig löschen |
- Nach Umzügen, |
Redundante Dateien verwirren den Agenten und verlängern die Erstellungszeiten. |
|
Unit-Tests für neue Logik hinzufügen |
- Streckenzähler, Timer oder Metriken brauchen Backend-Tests, vertraue nicht allein auf die Benutzeroberfläche. Auch hier gilt: Warte ab, wir werden das im nächsten Tutorial behandeln. |
Devin verkabelte das Armaturenbrett, ließ die Zähler aber funktionsunfähig, bis Tests die Lücke aufdeckten. |
|
Sag, was du willst und was du nicht willst |
- Explizite Negativformulierungen ("No auth yet") verhindern, dass sich der Geltungsbereich vergrößert. - Überprüfe den Plan, den Devin vorschlägt, und schneide Extras ab. |
Der Agent liebt es, zu viel zu liefern - gut für Demos, schlecht für Budgets. |
Was kommt als Nächstes?
Wir haben jetzt:
- Ein pastellfarbener Spielplatz, der fp-ts Tests im Browser ausführt
- Eine NestJS + PostgreSQL API, die den Fortschritt mit nichts anderem als einer UUID speichert
- Ein Fortschritts-Dashboard, das wirklich Spaß macht
Unter dem nächsten Tutorialverlagern wir den Schwerpunkt von den Funktionen auf den Workflow und die Zusammenarbeit mit:
- Kontinuierliche Prüfung: Füge die Suiten Jest und Playwright hinzu und lass Devin beide mit jeder PR grün halten.
- CI/CD-Pipeline: Erstelle GitHub-Aktionen, die die Web- und API-Apps bauen und führe die Tests in Headless Chrome aus.
- Teamintegrationen: Verbinde Devin mit Jira, um Tickets zu aktualisieren, schicke Build-Zusammenfassungen an Slack und experimentiere mit der neuen produktinternen Wiki-Funktion von Devin, um die Dokumentation zu vereinfachen.
Wenn du bereit bist, weiterzumachen, klicke auf den dritten Listenpunkt unten, um zum nächsten Tutorial zu gelangen:
- Einrichtung und erster Pull Request (Teil 1)
- Eine vertikale Scheibe mit Devin verschiffen (Teil 2)
- Integration, Tests und CI/CD (Teil 3)
- Sicherheit, Einsatz, Wartung (Teil 4)
Willkommen zurück! Im ersten Tutorium dieser Reihe hat Devin mein altes fp-ts-exercises Repo entstaubt und ein ordentliches dependency-upgrade PR eröffnet. In diesem zweiten Teil erhöhen wir den Schwierigkeitsgrad und bauen Full-Stack-Features.
Du kannst alle Tutorials der Devin-Serie hier aufrufen:
Wenn du bis zum Ende dieses zweiten Teils scrollst, hast du es geschafft:
Auf dem Weg dorthin lassen wir Devin seine eigene Aufgabenliste erstellen, beobachten, wie er mit Front- und Back-End-Tickets jongliert, und greifen ein, wenn er über Konfigurationsfehler stolpert. Ich zeige dir, wo ich ACUs ausgegeben (und gespart) habe, was ich von Hand repariert habe und wie man Sitzungen effizient hält.
Rekapitulation und Voraussetzungen
In dieser Tutorial-Reihe arbeiten wir mit meinem (ehemals) aufgegebenen fp-ts-Übungsrepositorium.
Das Projekt ist eine Sammlung von kleinen Herausforderungen, die funktionale Programmierkonzepte (wie Option, Either usw.) in TypeScript vermitteln sollen. Im Moment ist es ein Clone-and-Run-Repo: Lernende ziehen es herunter, bearbeiten Dateien lokal und führen die Tests in ihrem eigenen Terminal aus.
Das Ziel ist es, diese Übungen in eine browserbasierte, interaktive Spielwiese zu verwandeln, auf der die Teilnehmer/innen die Erklärungen lesen, den Code in einem In-Page-Editor bearbeiten und sofort sehen können, ob die Tests bestanden wurden (oder nicht). Die Lernenden haben außerdem die Möglichkeit, sich einzuloggen und ihren Fortschritt zu speichern.
Was wir im ersten Teil erreicht haben
Erinnere dich daran, dass wir im ersten Lernprogramm:
Lokale Werkzeuge, die du für den zweiten Teil brauchst
Für dieses zweite Tutorial brauchen wir:
Empfohlene Devin-Einstellungen
Ich empfehle die folgenden Einstellungen für Devin:
Lass Devin den Spielplan schreiben
Ich dachte, es wäre interessant, zunächst Devins Planungsfähigkeiten zu testen. Ich habe eine Eingabeaufforderung erstellt und Devin gebeten, mir mit der Funktion "Fragen" (derzeit kostenlos in der Beta-Phase) bei der Planung der Arbeit zu helfen, die wir heute machen werden.
Aufforderung:
Ich möchte mein bestehendes fp-ts-exercises Node + TypeScript Repo (derzeit Clone-and-Run CLI-Übungen) in eine browserbasierte Lernplattform verwandeln, die den Fortschritt verfolgt.
Zielerfahrung:
- Die Lernenden öffnen eine Next.js-Webanwendung, wählen eine Übung aus, bearbeiten den Code im Browser und sehen sofort, ob die Vitest-Tests bestanden haben oder nicht.
- Der Fortschritt (abgeschlossene Slugs) wird serverseitig gespeichert und bei späteren Besuchen erneut geladen, aber wir fügen noch keine Benutzerkonten hinzu (wir verwenden eine anonyme UUID, die im Browser gespeichert ist).
Die technischen Möglichkeiten, zu denen ich tendiere:
- Frontend: Next.js 14 (React 18, App Router)
- Code Editor & Runner: Sandpack + @vitest/browser
- API: NestJS 13 mit @nestjs/graphql (Apollo-Treiber)
- Datenbank: Prisma 5 mit PostgreSQL
- Arbeitsbereich: einfache npm-Arbeitsbereiche (apps/web, apps/api, packages/exercises)
Schlage einen schrittweisen Umsetzungsplan (Aufgabenliste) vor, der diesen vertikalen Abschnitt mit Leben füllt. Schätze die relativen ACU-Kosten für jede Aufgabe und kennzeichne alle langwierigen Schritte (z. B. große Migrationen oder Installationen mit vielen Abhängigkeiten).
Devin lieferte uns eine Liste mit sechs Aufgaben, für die er jeweils einen geschätzten ACU angab, und markierte die Schritte, die mit "starken Abhängigkeiten" verbunden waren.
Devins Antwort:
Phase 1: Arbeitsbereich einrichten (2-3 ACU)
Phase 2: Übungspaket Migration (3-4 ACU)
Phase 3: Backend API (4-5 ACU)
Phase 4: Frontend-Kernfunktionen (5-6 ACU)
Phase 5: Lernpfad (2-3 ACU)
Phase 6: Polnisch & Einsatz (2-3 ACU)
Geschätzte Gesamtkosten: 18–24 ACU
Der Plan war insgesamt ziemlich gut. Ich habe einige Dinge geändert, vor allem in Phase sechs, da wir uns im vierten Tutorial mit dem Einsatz beschäftigen werden.
Phase 1: Arbeitsbereich & Front-End-Gerüst
Goal: Erstelle npm-Workspaces, verschiebe die Legacy-Dateien und bootstrappe eine leere Next.js 14-Shell.ACU burn: 3,66 (geplant 1-2).Ergebnis: Das Repo enthält nun
/apps/web,packages/exercisesund eine Tailwind-fähige Next.js-App, die auflocalhost:3000läuft.Die Aufforderung
Ich habe Devin gebeten, den Plan zu erstellen, den er für die erste Phase gemacht hat. Agentic Devin hat keinen Kontext zu dem, was du vorher in der "Frag Devin"-Funktion gefragt hast, also musst du eine separate Anfrage erstellen und den Kontext angeben.
Ich werde nicht alle Aufforderungen in diesem Artikel einfügen, aber hier ist die erste:
Aufforderung:
Aufgabe: Initialisiere die npm-Workspace-Struktur und das Next.js-Frontend für die Browser-Plattform fp-ts-exercisesContext:
Ich bin dabei, mein bestehendes CLI-basiertes Lernsystem fp-ts-exercises in eine browserbasierte Plattform umzuwandeln. Das aktuelle System hat die Übungen in 10-from-either.exercise.ts:1-3 mit der TypeScript-Konfiguration in tsconfig.json:88 und der Vitest-Einrichtung in vitest.config.ts:7 organisiert.
Anforderungen:
Ergebnisse:
Tech Stack:
Einreichung:
Alle Aufforderungen, die ich daraufhin geschrieben habe, folgten demselben Muster: Aufgabenhighlight, Kontext, Anforderungen, Ergebnisse, technischer Hintergrund und Details zur Einreichung.
Was Devin tatsächlich getan hat
Es hat ziemlich lange gebraucht, um sich zu entscheiden (etwa vier Minuten), aber es hat funktioniert:
packages/exercises/srcmigriert.Warum die ACU-Kosten in die Höhe geschnellt sind
Die ACU-Kosten sind in die Höhe geschnellt, weil:
npm installzu wiederholen.qin Vim zu stoppen, dannCtrl-C, und beides schlug fehl. Ich habe dem Programm ein wenig Zeit gegeben, um es selbst zu reparieren, musste dann aber beide Male manuell eingreifen und die Prozesse beenden. Jede zusätzliche Minute bedeutete zusätzliche ACUs, und ich hätte dieses Problem nicht so schnell bemerkt, wenn ich Devins Aktionen nicht genau verfolgt hätte.Menschliche Interventionen und Lektionen gelernt
Hier ist eine Zusammenfassung der Korrekturen, die ich vornehmen musste:
Fix
Zeit
Wie ich es gemacht habe
Hängende Node Watch Aufgabe beendet
15 s
Beendet den Prozess in der VM-Shell.
Tailwind neu installiert
90 s
npm install tailwindcss postcss autoprefixer --workspace=apps/web und wiederholte tailwind init.
.next/ zu .gitignore hinzugefügt
10 s
Manuell übertragen, um aufgeblähte PRs zu vermeiden.
Das Verschieben großer Dateibäume geht von Hand schneller und ist viel günstiger, da Devin nach Zeit/Aufgabe abrechnet. Ich habe die Ordner verschoben, bestätigt und den Agenten die neue Struktur übernehmen lassen. Es konnte meine Änderungen problemlos übernehmen und selbständig zusammenführen!
Allerdings musste ich das Programm auffordern, die Skripte für Lint und Typprüfung auszuführen, auch wenn ich dies in der ersten Eingabeaufforderung angegeben hatte. Am Ende lief es für beide, aber sie scheiterten. Devin hielt es trotzdem für einen Erfolg und machte die PR mit.
Ich habe beide Probleme lokal behoben, die Skripte selbst ausgeführt und den neuen Webentwicklungsserver gestartet, um sicherzugehen, dass er wie vorgesehen startet, und den Commit veröffentlicht.
Phase 2: Verpacken der Übungen
Goal: Extrahiere alle Challenge-Dateien in ein wiederverwendbares
packages/exercisesPaket und generiere Metadaten für jede Übung.ACU burn: 0,6 (geplant 2+).Outcome: Shared Package exportiert typisierte Metadaten, die die Web-App und die zukünftige API mitimport { exercises } from '@exercises/registry'importieren können.Was Devin tatsächlich getan hat
Devin hat es geschafft:
fp-tsNutzung.exercise.tsund.solution.tsPaarenoption-01)getExercises(),getExerciseBySlug(),getExercisesByCategory(),getCategories(),getCategoryBySlug()Warum Devin unter dem Budget abschloss
Devin hat es geschafft, die Kosten für die ACU niedrig zu halten - hier siehst du, wie er das geschafft hat:
git mv(billig) anstelle von Copy-Paste plus DiffMenschliche Interventionen
Dieses Mal nicht!
Aus dem letzten Mal habe ich gelernt und die Skripte in Devins Zweig lokal ausgeführt. Alles wurde kompiliert und die Registry exportiert saubere Typdefinitionen, was sie zum perfekten Eingabematerial für die UI und API macht, die wir als Nächstes bauen werden.
Phase 3: NestJS + GraphQL API
Goal: Richte einen NestJS 13-Dienst ein, der den Trainingsfortschritt über GraphQL darstellt und Daten in PostgreSQL mit Prisma persistiert.ACU burn: 4.2 (geplant 4).Outcome:
apps/apiboots onlocalhost:4000/graphql. Du kannst Fortschrittsdatensätze abfragen und ändern, die durch eine anonyme Sitzungs-ID gekennzeichnet sind.Was Devin tatsächlich getan hat
Für die dritte Phase, Devin:
apps/apimit TypeScript und Apollo GraphQLSessionundCompletedExerciseModellen eingerichtetpackages/exercises) zur DatenermittlungWo Devin gestolpert ist
Dies sind die Probleme, auf die ich in der dritten Phase gestoßen bin, und die Korrekturen, die ich vornehmen musste:
Ausgabe
Fix
Zeit
reflect-metadataImport vergessen → App stürzt beim Start abSouffliert Devin: "Ich stoße auf diesen Fehler, wenn ich versuche,
"npm run dev"auszuführen:Die Meta-Eigenschaft 'import.meta' ist nur zulässig, wenn die Option
--module'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18' oder 'nodenext' lautet."1 ACU, 5 Minuten
Lint-Skript fehlt
Souffliert Devin: "Füge das Lint-Skript zum api-Paket hinzu und stelle sicher, dass es funktioniert."
1 ACU, 4 Minuten
Versehentlich begangen
.envgit rm --cached apps/api/.env && echo '.env' >> apps/api/.gitignore20 s
Gelernte Lektionen
Das sind meine Eindrücke:
npm run devstürzte ab, bisreflect-metadatahinzugefügt wurde..envDatei mit einerDATABASE_URLVariable übergeben, die einen Dummy-Benutzernamen und ein Passwort enthielt. Nachdem ich sie lokal gezogen hatte, änderte ich den Benutzernamen und das Passwort in meine lokalen Datenbankkennungen und stellte sicher, dass die Datei aus dem Git-Tracking-System entfernt und zum.gitignorehinzugefügt wurde. Wir werden in zukünftigen Tutorials sehen, wie man sicher mit Geheimnissen umgeht.Phase 4: Sandpack Spielplatz & Live Tests
Goal: Gib den Lernenden einen Browser-Editor, der fp-ts-Lösungen und Vitest-Checks in Echtzeit ausführt.ACU burn: 7.2 (geplant 3-4).Outcome: Der Besuch von
/exercises/option-01öffnet eine geteilte Ansicht: Der Sandpack-Editor auf der linken Seite, der Testtunnel auf der rechten Seite und eine Erfolgsmeldung, sobald alle Specs bestanden sind.Was Devin tatsächlich getan hat
Hier ist, was Devin für die vierte Phase gemacht hat:
Wo Devin zusätzliche ACUs verbrannt hat
Devin hat in dieser Phase mehr ACUs verbrannt als erwartet - hier ist der Grund dafür:
Ursache
Wie ich das Problem behoben / entschärft habe
Ich habe veralteten CLI-Runner-Code in
apps/webhinterlassen - Sandpack hat versucht, beide Kopien zu kompilieren und ist dabei abgestürzt.Lösche
pages/index.tsxaus dem ursprünglichen Gerüst, lege es fest und führe Devin erneut aus.Auf Rückmeldung gewartet, aber nicht explizit nachgefragt → Leerlaufschleife.
Nach drei Minuten Stille habe ich im Chat "Sieht gut aus, mach weiter" getippt.
Gelernte Lektionen
Meine Eindrücke sind dieses Mal:
Devin hat sich hier etwas Zeit gelassen. Es drehte sich in einer Schleife und versuchte, die gleichen Probleme zu speichern, das Backend und das Frontend nicht richtig zu verbinden, Änderungen vorzunehmen, die Server neu zu starten, im Browser zu prüfen, ob es funktionierte, usw. Es war wie eine normale Entwicklungsarbeit, nehme ich an...
Wir haben jetzt eine funktionierende App. Ich konnte sowohl den API- als auch den Webserver starten, zu localhost navigieren, die Stub-Funktion bearbeiten, auf Speichern drücken und beobachten, wie das Testfenster von rot auf grün wechselte. Dann habe ich gemerkt, dass es die Arbeit nur zur Hälfte erledigt hat, und habe den Test und die Lösung der ersten Übung auf jeder Übungsseite fest eingefügt. Ich wies ihn darauf hin und nach mehreren Schleifen konnte er den Fehler korrigieren und seine Korrekturen veröffentlichen.