-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 2 How the Code Works no
Mål: forstå de få designvalgene som gjør dette prosjektet enkelt — og trygt — å endre med en AI-agent. Du trenger ikke å pugge koden; du trenger den mentale modellen, slik at du kan dirigere agenten presist.
← Forrige: Tutorial 1 Orientering · Neste: Tutorial 3 Din første agentoppgave
lockedin-cli/
├── bin/lockedin.js # inngangspunkt — den ENESTE delen som gjør inndata/utdata
├── src/lockedin.js # kjernen — rene funksjoner som returnerer strenger
├── test/
│ ├── unit.test.js # tester kjernefunksjonene direkte
│ └── cli.test.js # starter den ekte binærfilen og sjekker utdataen
├── tools/screenshot.js # rendrer SVG-ene du ser i docs/
└── package.json # metadata + `npm test`-skriptet
Fire ideer får det til å tikke. Lær disse, så kan du be agenten om nesten enhver endring med tillit.
Åpne src/lockedin.js. Legg merke til at render-funksjonene ikke skriver ut
— de returnerer strenger:
function renderConnect() {
const names = shuffle(NAMES).slice(0, 6);
// ...bygger opp en rekke med linjer...
return out.join('\n'); // returnerer tekst; skriver ikke ut noe
}All den faktiske utskrivingen (og lesingen av tastetrykkene dine) skjer i
bin/lockedin.js. Denne "kjernen returnerer data, kanten gjør I/O"-
oppdelingen er den viktigste enkeltstående tingen her, fordi en funksjon som
bare returnerer en streng er trivielt å teste:
const out = app.renderConnect();
assert.ok(out.includes("«Jeg vil gjerne legge deg til i mitt profesjonelle nettverk.» — sendt til "));Ingen mocking av en terminal, ingen fanging av stdout. Når du ber agenten om å legge til en funksjon, er dette hvorfor den også kan legge til en rask, pålitelig test for den.
Vitsene bor i vanlige tabeller nær toppen av src/lockedin.js:
const HOOKS = [ 'Upopulær mening:', 'La det synke inn.', /* ...~25 totalt... */ ];
const LESSONS = [ '→ Nettverket ditt er formuen din.', /* ... */ ];Generatorene velger fra disse poolene. I v1.2.0 vokste hver pool til ~25
varianter, og et andre lag med malpooler ble lagt til (ting som
POST_REVEALS og REFLECT_TAGSETS) slik at strukturen til hver utdata
varierer, ikke bare ordene. Å legge til innhold er ofte like enkelt som å
legge til strenger i en tabell — en perfekt første oppgave å gi en agent.
Tilfeldig utdata og automatiserte tester høres ut som motsetninger. Dette prosjektet løser det med en frøbar tilfeldighetsgenerator:
setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b → samme frø, samme innleggHvert tilfeldige valg går gjennom de delte pick() / shuffle()-hjelperne,
som trekker fra den frøbaserte generatoren. Sett LOCKEDIN_SEED=42, og CLI-en
er fullt reproduserbar. Gullregelen for enhver endring: ny tilfeldighet må
bruke pick / shuffle, aldri Math.random direkte — ellers går
determinismen (og testene) i stykker. Ha dette i bakhodet; du vil minne
agenten på det i kapittel 3.
-
test/unit.test.jskaller kjernefunksjoner og bekrefter strengene de returnerer (rask, presis). -
test/cli.test.jsstarter faktiskbin/lockedin.jsog sjekker den ekte stdout-en og avslutningskoden (beviser at hele greia fungerer fra ende til annen).
Sammen er de porten. De koder også invarianter — løfter appen gir. For
eksempel starter et innlegg alltid med en kjent krok og inneholder alltid
minst tre →-lærdommer; "connect"-skjermen sier alltid incalculable. Når en
agent endrer kode, fanger disse testene alt som stille brøt et løfte.
Sett de fire ideene sammen, og du får en kodebase der en agent kan:
- Legge til en funksjon som en ren funksjon som returnerer en streng,
- Legge til en test for den uten noen I/O-akrobatikk,
- Holde utdataen reproduserbar via den frøbaserte RNG-en, og
- Bevise at den ikke ødela noe ved å kjøre den eksisterende porten.
Det er sløyfen du vil kjøre i neste kapittel.
Be agenten din om å verifisere forståelsen din — ved å lese, ikke redigere:
- "List opp hver innholdspool i
src/lockedin.jsog hvor mange oppføringer hver har." - "Vis meg én invariant som
test/unit.test.jshåndhever omgeneratePost, og forklar hva som ville ødelagt den." - "Hvor er den frøbaserte RNG-en definert, og hvilke funksjoner må bruke
den i stedet for
Math.random? Ikke endre noe — bare forklar."
Når agentens svar samsvarer med dette kapittelet, er du klar til å bygge.
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.