Skip to content

Tutorial 2 How the Code Works no

James Morris edited this page Jul 29, 2026 · 1 revision

Tutorial 2 · Hvordan koden fungerer

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


Kartet

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.

Idé 1 — En ren kjerne som returnerer strenger

Å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.

Idé 2 — Innholdspooler

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.

Idé 3 — Frøbasert tilfeldighet = deterministiske tester

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 innlegg

Hvert 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.

Idé 4 — To lag med tester

  • test/unit.test.js kaller kjernefunksjoner og bekrefter strengene de returnerer (rask, presis).
  • test/cli.test.js starter faktisk bin/lockedin.js og 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.


Hvorfor dette betyr noe for å jobbe med en agent

Sett de fire ideene sammen, og du får en kodebase der en agent kan:

  1. Legge til en funksjon som en ren funksjon som returnerer en streng,
  2. Legge til en test for den uten noen I/O-akrobatikk,
  3. Holde utdataen reproduserbar via den frøbaserte RNG-en, og
  4. Bevise at den ikke ødela noe ved å kjøre den eksisterende porten.

Det er sløyfen du vil kjøre i neste kapittel.

✅ Prøv det med agenten din

Be agenten din om å verifisere forståelsen din — ved å lese, ikke redigere:

  1. "List opp hver innholdspool i src/lockedin.js og hvor mange oppføringer hver har."
  2. "Vis meg én invariant som test/unit.test.js håndhever om generatePost, og forklar hva som ville ødelagt den."
  3. "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.

Neste: Tutorial 3 Din første agentoppgave

📘 LockedIn CLI wiki

Tutorial

Reference


Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.

Clone this wiki locally