-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 2 How the Code Works sv
Mål: förstå den handfull designval som gör det här projektet enkelt — och säkert — att ändra med en AI-agent. Du behöver inte memorera koden; du behöver den mentala modellen, så att du kan dirigera agenten precist.
← Föregående: Tutorial 1 Orientering · Nästa: Tutorial 3 Din första agentuppgift
lockedin-cli/
├── bin/lockedin.js # startpunkt — den ENDA delen som gör in-/utmatning
├── src/lockedin.js # kärnan — rena funktioner som returnerar strängar
├── test/
│ ├── unit.test.js # testar kärnfunktionerna direkt
│ └── cli.test.js # startar den riktiga binären och kontrollerar dess utdata
├── tools/screenshot.js # renderar SVG:erna du ser i docs/
└── package.json # metadata + `npm test`-skriptet
Fyra idéer får det att tickla. Lär dig dessa, så kan du be agenten om nästan vilken ändring som helst med förtroende.
Öppna src/lockedin.js. Lägg märke till att renderingsfunktionerna inte
skriver ut — de returnerar strängar:
function renderConnect() {
const names = shuffle(NAMES).slice(0, 6);
// ...bygger upp en array av rader...
return out.join('\n'); // returnerar text; skriver inte ut något
}All den faktiska utskriften (och läsningen av dina tangenttryckningar)
händer i bin/lockedin.js. Den här "kärnan returnerar data, kanten gör
I/O"-uppdelningen är den enskilt viktigaste saken här, eftersom en
funktion som bara returnerar en sträng är trivial att testa:
const out = app.renderConnect();
assert.ok(out.includes("\"Jag skulle gärna vilja lägga till dig i mitt yrkesnätverk.\" — skickat till "));Ingen mockning av en terminal, ingen infångning av stdout. När du ber agenten lägga till en funktion är det därför den också kan lägga till ett snabbt, tillförlitligt test för den.
Skämten bor i vanliga arrayer nära toppen av src/lockedin.js:
const HOOKS = [ 'Impopulär åsikt:', 'Låt det sjunka in.', /* ...~25 totalt... */ ];
const LESSONS = [ '→ Ditt nätverk är ditt nettovärde.', /* ... */ ];Generatorerna väljer från dessa pooler. I v1.2.0 växte varje pool till
~25 varianter, och ett andra lager av mallpooler lades till (saker
som POST_REVEALS och REFLECT_TAGSETS) så att strukturen på varje
utdata varierar, inte bara orden. Att lägga till innehåll är ofta lika
enkelt som att lägga till strängar i en array — en perfekt första uppgift
att ge en agent.
Slumpmässig utdata och automatiserade tester låter oförenliga. Det här projektet löser det med en frösättbar slumptalsgenerator:
setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b → samma frö, samma inläggVarje slumpmässigt val går genom de delade pick() / shuffle()-
hjälparna, som hämtar från den frösatta generatorn. Sätt
LOCKEDIN_SEED=42, och CLI:n är fullt reproducerbar. Guldregeln för
varje ändring: ny slumpmässighet måste använda pick / shuffle, aldrig
Math.random direkt — annars går determinismen (och testerna) sönder.
Ha det här i bakhuvudet; du kommer påminna agenten om det i kapitel 3.
-
test/unit.test.jsanropar kärnfunktioner och kontrollerar strängarna de returnerar (snabbt, precist). -
test/cli.test.jsstartar faktisktbin/lockedin.jsoch kontrollerar dess riktiga stdout och avslutningskod (bevisar att hela grejen fungerar från början till slut).
Tillsammans är de grinden. De kodar också invarianter — löften appen
ger. Till exempel öppnar ett inlägg alltid med en känd krok och innehåller
alltid minst tre →-lärdomar; "connect"-skärmen säger alltid
incalculable. När en agent ändrar kod fångar dessa tester allt som i
tysthet bröt ett löfte.
Sätt ihop de fyra idéerna, och du får en kodbas där en agent kan:
- Lägga till en funktion som en ren funktion som returnerar en sträng,
- Lägga till ett test för den utan någon I/O-akrobatik,
- Hålla utdatan reproducerbar via den frösatta RNG:n, och
- Bevisa att den inte förstörde något genom att köra den befintliga grinden.
Det är slingan du kommer köra i nästa kapitel.
Be din agent verifiera din förståelse — genom att läsa, inte redigera:
- "Lista varje innehållspool i
src/lockedin.jsoch hur många poster varje har." - "Visa mig en invariant som
test/unit.test.jsupprätthåller omgeneratePost, och förklara vad som skulle bryta den." - "Var är den frösatta RNG:n definierad, och vilka funktioner måste
använda den istället för
Math.random? Ändra inget — förklara bara."
När agentens svar matchar det här kapitlet är du redo att bygga.
Tutorial
- 1 · Orientation
- 2 · How the Code Works
- 3 · Your First Agent Task
- 4 · Prompting & Reviewing
- 5 · Localization
Reference
Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.