Skip to content

Tutorial 2 How the Code Works sv

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

Tutorial 2 · Hur koden fungerar

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


Kartan

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.

Idé 1 — En ren kärna som returnerar strängar

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

Idé 2 — Innehållspooler

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.

Idé 3 — Frödriven slumpmässighet = deterministiska tester

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ägg

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

Idé 4 — Två lager av tester

  • test/unit.test.js anropar kärnfunktioner och kontrollerar strängarna de returnerar (snabbt, precist).
  • test/cli.test.js startar faktiskt bin/lockedin.js och 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.


Varför det här spelar roll för att arbeta med en agent

Sätt ihop de fyra idéerna, och du får en kodbas där en agent kan:

  1. Lägga till en funktion som en ren funktion som returnerar en sträng,
  2. Lägga till ett test för den utan någon I/O-akrobatik,
  3. Hålla utdatan reproducerbar via den frösatta RNG:n, och
  4. 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.

✅ Testa det med din agent

Be din agent verifiera din förståelse — genom att läsa, inte redigera:

  1. "Lista varje innehållspool i src/lockedin.js och hur många poster varje har."
  2. "Visa mig en invariant som test/unit.test.js upprätthåller om generatePost, och förklara vad som skulle bryta den."
  3. "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.

Nästa: Tutorial 3 Din första agentuppgift

📘 LockedIn CLI wiki

Tutorial

Reference


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

Clone this wiki locally