IlmHamroh
JavaScript Full-stack/12-qism. JavaScript: ilg'or mavzular va kod sifati43/44-dars19 daqiqa
Mundarija (37)

AI bilan samarali ishlash: prompting, kontekst va loyiha qoidalari fayllari

Qisqacha: AI yordamchidan yaxshi natija olishning siri — u siz bilgan narsani bilmaydi. Unga to'rt narsani bering: aniq vazifa ("nima va qayerda"), kontekst (kerakli fayl, xato matni, versiyalar), cheklovlar ("yangi kutubxona qo'shma", "mavjud uslubda") va natija shakli. Katta ishni avval reja bilan boshlang, keyin kichik qadamlar bilan; har javobni ishga tushiring va xato matnini qaytarib bering. Loyiha qoidalarini har safar qayta yozmaslik uchun ularni AGENTS.md yoki CLAUDE.md kabi faylga bir marta yozib qo'ying. Holat — 2026-yil oktabr.

Bu darsda

  • Yaxshi so'rov (prompt) ning to'rt qismini ajrata olasiz: vazifa, kontekst, cheklov, natija shakli.
  • AI'ga qaysi kontekstni berish kerakligini (fayl, xato, versiya, namuna) va nimani bermaslik kerakligini bilasiz.
  • Katta ishni "avval reja, keyin qadamlar" usulida bajarasiz va xatoni iterativ tuzatasiz.
  • vazifalar dagi teglariniOl uchun AI'ga test yozdirasiz, javobni ishga tushirib tekshirasiz.
  • AGENTS.md / CLAUDE.md kabi loyiha qoidalari fayli nima ekanini bilasiz va vazifalar uchun shunday fayl yozasiz.

Oldin bilishingiz kerak: AI dasturlash yordamchilari xaritasi, Birinchi avtomatik test: node:test va assert, Code smell va refactoring, Nozik xatolar.

1. Nega bu kerak?

AI dasturlash yordamchilari xaritasi darsida AI qanday ishlashini ko'rgan edik: u matnning eng ehtimolli davomini yozadi va ishonch bilan xato qiladi. O'shanda asosiy maslahat — o'rganish davrida AI'dan kod emas, tushuntirish so'rash edi.

Endi siz boshqa joydasiz. 12-qismga yetib keldingiz: kodni o'qiysiz, testlar yozasiz, ESLint va JSDoc'ni bilasiz. Endi AI'dan kod so'rash mumkin — chunki uni tekshira olasiz. Savol boshqa: qanday so'rasa, javob yaxshi bo'ladi?

Sardor AI chatiga shunday yozdi:

text
teglariniOl uchun test yoz

Javob tez keldi va ishonchli ko'rinardi. Lekin npm test uni ishga tushirgach — qizil. AI vazifalar loyihasini ko'rmagan. U teglariniOl qayerda turganini, eksport qilinadimi, nima qaytarishini, testlar qanday kutubxona bilan yozilishini bilmaydi. U taxmin qildi — va taxmin noto'g'ri chiqdi.

O'xshatish: yangi ishchiga "anavi ishni qilib qo'y" deysiz. U aqlli, lekin birinchi kuni. Qaysi ish, qayerda, qanday asboblar bilan, nimaga tegmaslik kerak — aytmasangiz, u o'zicha qiladi. AI — har suhbatda birinchi kuni ishga kelgan juda tez ishchi.

2. Yaxshi so'rovning to'rt qismi

2.1 Vazifa, kontekst, cheklov, natija

Prompt (so'rov) — AI'ga yozadigan topshiriq matningiz. Yaxshi prompt odatda to'rt qismdan iborat:

Qism Savol Misol
Vazifa Nima qilish kerak? "teglariniOl uchun qo'shimcha test yoz"
Kontekst Nima ustida? fayl matni, mavjud testdan namuna, Node 24.21, node:test
Cheklov Nimani qilmaslik kerak? "yangi kutubxona qo'shma", "royxat.js ni o'zgartirma"
Natija shakli Javob qanday ko'rinishda? "faqat bitta fayl, izohlar o'zbekcha"

Bular sehrli so'zlar emas. Bu — yaxshi topshiriqning o'zi. Xuddi shu to'rt narsani jamoadoshingizga ham aytardingiz.

2.2 Aniq vazifa

"Kodni yaxshila" — noaniq: tezroqmi, o'qilishi osonroqmi, qisqaroqmi? AI o'zicha tanlaydi va ko'pincha ko'p narsani o'zgartiradi. Aniq vazifa — bitta, tekshirib bo'ladigan natija:

  • "Bu funksiyani yaxshila."
  • "render.js dagi hisobniYoz() hisob qatoriga bajarilganlar foizini ham qo'shsin: 3 ta vazifa qoldi, 2 ta bajarildi (40%). Boshqa funksiyalarga tegma. Mavjud xulq o'zgarmasin — npm test 59/59 qolishi kerak."

Ikkinchi so'rovda tekshiruv mezoni bor: "59/59". Natijani AI'ning so'zi bilan emas, test bilan baholaysiz.

2.3 Misol bering

AI naqshni misoldan juda yaxshi ilg'aydi. Uslubingizni so'z bilan tasvirlash o'rniga — bitta namunani ko'rsating: "mavjud testlar mana shunday yozilgan: …". Bu usul few-shot (bir necha namuna bilan) deb ataladi. Namunasiz AI o'zi ko'proq ko'rgan uslubda yozadi — masalan, siz ishlatmaydigan test kutubxonasida.

Tekshirib ko'ring: "Menyu sahifasi uchun narx formatlovchi funksiya yoz" so'rovida to'rt qismdan qaysilari yo'q?

Javob

Vazifa bor, lekin noaniq. Kontekst yo'q: qaysi fayl, qaysi til va muhit, narx qanday kelib, qanday chiqishi kerak (35000 → 35 000 so'm?). Cheklov yo'q: kutubxona ishlatsa bo'ladimi, Intl.NumberFormat mi? Natija shakli yo'q: funksiya nomi, test kerakmi? AI bularning hammasini o'zi taxmin qiladi.

3. Kontekst: nima berish va nima bermaslik

3.1 Kerakli kontekst

AI dasturlash yordamchilari xaritasi darsidagi kontekst oynasi ni eslang: model faqat suhbatda ko'rgan narsani biladi. Shuning uchun:

  • Kerakli fayl yoki uning qismi. Butun loyiha emas — vazifaga tegishli joy. Funksiya boshqa modulga bog'liq bo'lsa — uning imzosi (JSDoc'li qatori) ham.
  • Xato matni to'liq. "Ishlamayapti" emas — konsoldagi butun matn va stack trace (Stack trace va JavaScript xato turlari).
  • Versiyalar. node --version, package.json dagi devDependencies. AI'ning bilimi ma'lum sanada to'xtagan; sizning versiyangiz undan yangi bo'lishi mumkin (JS versiyalari va brauzer mosligi).
  • Namuna. Mavjud testdan bir bo'lak, loyihadagi o'xshash funksiya.
  • Nima qilib ko'rdingiz. "--test-randomize bilan ham sinadim" — AI bir xil yo'lni qayta taklif qilmaydi.

3.2 Bermaslik kerak bo'lgan narsalar

  • Sirlar. .env dagi qiymatlar, tokenlar, parollar, kalitlar. Bu haqda keyingi darsda batafsil — AI natijasini tekshirish va xavfsizlik.
  • Keraksiz hajm. 2 000 qatorlik log faylining hammasi emas — xato atrofidagi 20 qator. Ortiqcha matn asosiy narsani "ko'mib" yuboradi.
  • Begona shaxsiy ma'lumot. Mijozlar ro'yxati, telefonlar — o'rniga +998 90 000 00 00 kabi namuna.

3.3 Agentlar kontekstni o'zi yig'adi

Chat'da kontekstni siz nusxalab berasiz. Agent esa (AI xaritasi dagi uchinchi tur) loyiha papkasidagi fayllarni o'zi o'qiydi, npm test ni o'zi ishga tushiradi. Bu qulay, lekin ikki narsa o'zgaradi. Birinchidan, agent nimani o'qishini siz nazorat qilishingiz kerak (.env ham papkada!). Ikkinchidan, agentga loyiha qoidalarini oldindan aytib qo'yish kerak — buning uchun «Loyiha qoidalari fayllari» bo'limidagi fayllar bor.

4. Avval reja, keyin qadamlar

4.1 Reja so'rang

Katta vazifada ("vazifalar ga sana bo'yicha saralash qo'sh") AI'dan darhol kod so'ramang. Avval:

text
Kod yozma. Avval reja ber: qaysi fayllar o'zgaradi, qanday yangi
funksiyalar kerak, qaysi testlar qo'shiladi. Har qadamni bir
gapda yoz. Noaniq joy bo'lsa — menga savol ber.

Rejani o'qiysiz va xatoni kod yozilmasdan oldin tuzatasiz: "yo'q, localStorage ga tegma — u faqat saqlash.js da". Bu kod review'dan ancha arzon. Oxirgi qator ham muhim: AI noaniq joyni o'zicha to'ldirgandan ko'ra, so'ragani yaxshi.

4.2 Kichik qadamlar

Rejadagi har qadam — alohida so'rov, alohida tekshiruv, alohida commit. Xuddi Code smell va refactoring darsidagi "kichik qadam — testlar yashil" qoidasi. AI bir javobda 6 faylni o'zgartirsa, xato qayerda ekanini topish qiyin. Bitta faylni o'zgartirsa — oson.

4.3 Iterativ tuzatish

AI javobi ishlamasa, "ishlamadi" deb yozmang. Unga haqiqiy natijani qaytaring:

flowchart LR
  A["Aniq so'rov"] --> B["AI javobi"]
  B --> C["O'qing va ishga tushiring"]
  C --> D{"Test yashilmi?"}
  D -- "yo'q" --> E["Xato matnini to'liq qaytaring"]
  E --> B
  D -- "ha" --> F["Tushunib, commit qiling"]

Diagrammadagi "O'qing" qadamini tashlab ketmang: AI'ning yashil testi ham siz tushunmagan kod bo'lishi mumkin. Va bir xil xato 2–3 marta qaytsa — to'xtang. Yangi suhbat oching va kontekstni qaytadan, aniqroq bering: uzun suhbatda model eski, noto'g'ri taxminlariga yopishib qoladi.

Tekshirib ko'ring: AI'ning kodi uchinchi marta xuddi shu TypeError ni beryapti. Siz har safar "yana xato" deb yozdingiz. Nima o'zgartirasiz?

Javob

Birinchidan, xato matnini to'liq (stack trace bilan) va qaysi buyruq bilan ishga tushirganingizni yozasiz. Ikkinchidan, kontekst yetarlimi — tekshirasiz: AI xato bergan funksiyaning asl kodini ko'rganmi? Uchinchidan, suhbat uzun bo'lsa, yangisini ochib, vazifani noldan, aniqroq yozasiz. "Yana xato" — AI uchun hech qanday ma'lumot bermaydi.

5. To'liq misol: teglariniOl uchun test

5.1 Birinchi urinish — kontekstsiz

Sardorning "teglariniOl uchun test yoz" so'roviga AI quyidagicha javob berdi. (Bu — namunaviy javob: AI vositasi va kunga qarab sizdagi javob boshqacha bo'ladi. Muhimi — tekshirish usuli.)

js
import { test } from "node:test";
import assert from "node:assert/strict";
import { teglariniOl } from "../assets/js/royxat.js";

test("teglarni ajratadi", () => {
  assert.deepEqual(teglariniOl("Non olish #bozor #uy"), [
    "#bozor",
    "#uy",
  ]);
});

Ko'rinishi to'g'ri: node:test, assert/strict, test nomi o'zbekcha. Sardor avval alohida tajriba branch'ini ochdi (git switch -c tajriba/ai-test — AI'ning ishi main ga aralashmasin), testni tekshiruv/teglar-ai.test.js ga saqladi va ishga tushirdi. node --test tekshiruv/teglar-ai.test.js ning haqiqiy chiqishi (Node 24.21):

text
import { teglariniOl } from "../assets/js/royxat.js";
         ^^^^^^^^^^^
SyntaxError: The requested module '../assets/js/royxat.js' does not provide an export named 'teglariniOl'

Tarjimasi: "so'ralgan royxat.js moduli teglariniOl nomli eksportni bermaydi". ESM import darsidagi xato. teglariniOl — royxat.js ning ichki funksiyasi, u eksport qilinmaydi. AI buni bilmagan va taxmin qilgan.

Ikkinchi xato ham bor, lekin u hali ko'rinmadi: teglariniOl massiv emas, Set qaytaradi. Funksiya eksport qilinganida ham deepEqual(Set, massiv) yiqilardi. Bitta qisqa so'rov — ikkita taxmin, ikkalasi noto'g'ri.

5.2 Ikkinchi urinish — kontekst bilan

Sardor so'rovni to'rt qism bilan qayta yozdi:

text
Vazifa: vazifalar loyihasidagi teg ajratish uchun 3 ta qo'shimcha
test yoz — mavjud testlarda yo'q chegaraviy holatlar.

Kontekst:
- Node 24.21, testlar node:test + node:assert/strict, ESM.
- teglariniOl royxat.js ichida, EKSPORT QILINMAYDI. U Set
  qaytaradi (kichik harfda, takrorsiz). Kodi:
  [royxat.js dan TEG regex'i va teglariniOl — 12 qator]
- Mavjud testlar uni tegHisobi() orqali sinaydi. Namuna:
  [royxat.test.js dan "const teglar = (matn) => ..." yordamchisi
  va bitta test — 15 qator]
- Allaqachon bor holatlar: vergul, nuqta, apostrof, emoji, ##,
  katta harf.

Cheklov: royxat.js ni o'zgartirma, yangi paket qo'shma.
Natija: bitta fayl, tekshiruv/teglar-ai.test.js.

Kvadrat qavs ichidagi joylarga Sardor kodning o'zini qo'ydi. Yangi javob:

js
import "./xotira.js";
import { describe, test } from "node:test";
import assert from "node:assert/strict";
import { VazifalarRoyxati } from "../assets/js/royxat.js";

// teglariniOl eksport qilinmaydi — tegHisobi orqali sinaymiz
const teglar = (matn) => [
  ...VazifalarRoyxati.dan([{ id: 1, matn, bajarildi: false }])
    .tegHisobi()
    .keys(),
];

describe("teglar: qo'shimcha holatlar", () => {
  test("yangi qatordan keyingi teg", () => {
    assert.deepEqual(teglar("Non olish\n#bozor"), ["#bozor"]);
  });

  test("raqamli teg", () => {
    assert.deepEqual(teglar("#2026 #yil2026"), ["#2026", "#yil2026"]);
  });

  test("chiziqcha tegning bir qismi", () => {
    assert.deepEqual(teglar("#yangi-yil"), ["#yangi-yil"]);
  });
});

Bu safar AI loyihaning o'z yo'lidan bordi: xotira.js, tegHisobi() orqali sinash, mavjud yordamchining aynan o'zi. Kod nomlari ham o'zbekcha — chunki namunada shunday edi. Ishga tushiramiz:

text
▶ teglar: qo'shimcha holatlar
  ✔ yangi qatordan keyingi teg (2.3663ms)
  ✔ raqamli teg (0.2108ms)
  ✖ chiziqcha tegning bir qismi (1.4682ms)
✖ teglar: qo'shimcha holatlar (5.9389ms)
ℹ tests 3
ℹ pass 2
ℹ fail 1

Yiqilgan testning tafsiloti:

text
  AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
  + actual - expected

    [
  +   '#yangi'
  -   '#yangi-yil'
    ]

Tarjimasi: "qiymatlar qat'iy chuqur teng bo'lishi kutilgan edi: + — haqiqiy, - — kutilgan". Kod #yangi qaytardi, AI esa #yangi-yil ni kutdi.

5.3 Kim haq: test yoki kod?

Qizil test ikki narsani anglatishi mumkin: kodda xato bor yoki testda xato bor. AI yozgan testda bu savol ayniqsa muhim. AI'ning "kutilgan" qiymati — uning taxmini, talab emas.

TEG regex'ini o'qiymiz (Unicode regex darsida yozilgan): tegda harf, raqam, _ va harflar orasidagi apostrof bo'ladi. Chiziqcha (-) ro'yxatda yo'q. Demak, kod o'z talabiga muvofiq ishlayapti. AI talabni bilmagan va "chiroyli ko'rinadigan" javobni kutgan.

Ikki yo'l bor:

  1. Talab "chiziqcha tegni tugatadi" — testni shunga moslaymiz va xulqni qotiramiz.
  2. Talab o'zgarishi kerak (#yangi-yil bitta teg bo'lsin) — bu mahsulot qarori, uni AI emas, jamoa qabul qiladi. Keyin avval test, keyin TEG o'zgaradi.

Sardor birinchisini tanladi — talab o'zgarmaydi:

js
  test("chiziqcha tegni tugatadi", () => {
    assert.deepEqual(teglar("#yangi-yil"), ["#yangi"]);
  });

Natija: ℹ tests 3 · pass 3, butun npm test esa ℹ tests 62 · pass 62 · fail 0 (59 ta eski + 3 ta yangi). Bu — tajriba branch'ida (tajriba/ai-test): Sardor AI bilan ishni main dan alohida boshlagan edi. Uchta test main ga birlashtirilmadi — ular darsdagi tajriba sifatida o'sha branch'da qoladi. vazifalar ning asosiy kodida testlar soni o'zgarmaydi — 59.

Saboqlar:

  • Kontekstsiz javob ikkita noto'g'ri taxmin qildi; kontekst bilan — bitta.
  • Yangi testlarning ikkitasi foydali chegaraviy holatni qotirdi: yangi qator va raqam. AI bu yerda haqiqatan yordam berdi.
  • Uchinchi test — "AI ning talab haqidagi taxmini". Uni siz hal qildingiz.

Tekshirib ko'ring: AI yozgan test yiqildi. AI'ga "testni o'tkaz" deb yozsangiz, u nima qilishi mumkin va bu nega xavfli?

Javob

U kutilgan qiymatni haqiqiy natijaga moslab o'zgartirishi mumkin — yoki, aksincha, kodni testga moslab "tuzatishi". Birinchisi kodda haqiqiy xato bo'lsa, uni testga "qotirib" qo'yadi. Ikkinchisi to'g'ri ishlayotgan kodni buzadi. "Test o'tsin" — maqsad emas; maqsad — talabga mos xulq. Qaysi tomon haqligini talab va kodni o'qib, siz hal qilasiz.

6. AI'dan review so'rash

AI kod yozibgina qolmay, kodni ko'rib chiqishi ham mumkin. Bu — ikkinchi juft ko'z. Lekin so'rov bu yerda ham aniq bo'lishi kerak:

text
Quyidagi diff'ni ko'rib chiq. Faqat muammolarni yoz, maqtama.
Har muammoga: fayl:qator, nega muammo, qanday tuzatish.
Qara: chegaraviy holatlar (bo'sh ro'yxat, null), race condition,
nomlash qoidalarimiz (fe'l bilan, o'zbekcha domen nomlari),
yo'qolgan testlar.
[git diff natijasi]

"Faqat muammolarni yoz, maqtama" — muhim qator. Usiz javobning yarmi "kod juda yaxshi yozilgan" bo'lishi mumkin. Ro'yxat (Nozik xatolar, Toza kod: nomlash) — AI'ga nimaga qarashni aytadi.

AI review'ini ham tekshirasiz: u mavjud bo'lmagan muammoni "topishi" yoki haqiqiy xatoni o'tkazib yuborishi mumkin. AI review — inson review o'rniga emas, unga qo'shimcha.

7. Loyiha qoidalari fayllari

7.1 Har safar bir xil gapni yozmaslik uchun

«Ikkinchi urinish — kontekst bilan» dagi so'rovning yarmi — loyiha haqida: Node versiyasi, test kutubxonasi, nomlash, "royxat.js ga tegma". Buni har so'rovda qayta yozish charchatadi va unutiladi. Shuning uchun AI vositalari loyiha ildizidagi maxsus qoidalar faylini o'qiydi va har suhbat boshida kontekstga qo'shadi:

Fayl Kim o'qiydi
AGENTS.md ochiq format: Codex, Cursor, Jules, Gemini CLI, GitHub Copilot agenti, VS Code va boshqa 20 dan ortiq vosita
CLAUDE.md Claude Code
.github/copilot-instructions.md GitHub Copilot
.cursor/rules/ Cursor

AGENTS.md formati bir nechta kompaniya hamkorligida chiqqan va hozir Linux Foundation qoshidagi Agentic AI Foundation tomonidan yuritiladi (agents.md, 2026-yil oktabr). Ko'p vositalar uni tushunadi, shuning uchun bitta umumiy fayl qulay. Monorepo'da (bitta repozitoriyda bir nechta loyiha yoki paket) har paket o'z AGENTS.md siga ega bo'lishi mumkin — tahrirlanayotgan faylga eng yaqini ustun.

7.2 Ichida nima bo'ladi

Qoidalar fayli — yangi jamoadoshga beriladigan qisqa yo'riqnoma. Odatda:

  • loyiha nima va qanday tuzilgan (1–3 gap);
  • buyruqlar: o'rnatish, test, lint, format;
  • kod uslubi va nomlash;
  • taqiqlar: nimaga tegmaslik, nimani qilmaslik;
  • tekshiruv: "ish tugadi" deyishdan oldin nima o'tishi kerak;
  • commit va PR qoidalari.

Qisqa bo'lsin. Bu fayl har suhbatda kontekst oynasining bir qismini egallaydi. Unga faqat har safar kerak bo'ladigan narsa yoziladi, bir martalik ma'lumot emas.

7.3 Qoidalar — tavsiya, kafolat emas

AI qoidani ko'pincha bajaradi, lekin har doim emas. Shuning uchun muhim qoidani ikki joyda ushlaysiz: qoidalar faylida (AI bilsin) va vositada (buzilsa, to'xtatsin). Masalan, "Prettier formati" — faylda yozilgan, lekin npm run format:check uni baribir tekshiradi. "Testlar yashil bo'lsin" — npm test. Bu ESLint va Prettier darsidagi g'oyaning davomi: kelishuvni mashina tekshirsin.

Tekshirib ko'ring: AGENTS.md ga "har doim === ishlat" deb yozdingiz. AI baribir bitta joyda == yozib qo'ysa, buni kim ushlaydi?

Javob

Qoidalar faylining o'zi emas — u faqat AI'ga "ma'lum qiladi". Ushlaydigan — vosita: ESLint'ning eqeqeq qoidasi npm run lint da xato beradi, CI esa PR'ni to'xtatadi. Lekin faqat qoida yoqilgan bo'lsa: eqeqeq recommended to'plamida yo'q (JavaScript'ning mashhur tuzoqlari darsida ko'rgandik), vazifalar ning eslint.config.js ida ham hozircha yo'q. Demak, bu qoidani faylga yozish bilan birga, eslint.config.js ga ham qo'shish kerak. Shuning uchun muhim qoida ikki joyda turadi: faylda (AI bilsin) va lint/testda (buzilsa, to'xtatsin).

8. Ko'p uchraydigan xatolar

8.1 Bir qatorli so'rov

"Test yoz", "xatoni tuzat", "yaxshila".

Vazifa + kontekst + cheklov + natija shakli. Uzunroq so'rov — qisqaroq tuzatish yo'li.

8.2 "Ishlamadi" deb javob berish

Xato matnisiz qayta so'rash.

Buyruq, to'liq xato matni, nimani sinab ko'rganingiz.

8.3 Butun loyihani chatga tashlash

30 faylni birdan joylash — asosiy narsa ko'milib ketadi, sir tushib qolishi ham oson.

Vazifaga tegishli fayl va qism. Kerak bo'lsa, AI o'zi so'raydi.

8.4 AI'ning kutilgan qiymatiga ishonish

AI yozgan test qizil — kodni testga moslash.

Talabni o'qing, kim haqligini o'zingiz hal qiling («Kim haq: test yoki kod?»).

8.5 Abadiy suhbat

Bitta suhbatda bir hafta ishlash — model eski taxminlarga yopishadi.

Yangi vazifa — yangi suhbat. Doimiy qoidalar — qoidalar faylida.

9. Mashqlar

1-mashq (oson): So'rovni qayta yozing

Bu so'rovni to'rt qismli qilib qayta yozing: "Menyuni narx bo'yicha saralaydigan funksiya yoz". Ishora: «Vazifa, kontekst, cheklov, natija» jadvali; sort va taqqoslash funksiyasi.

Yechim
text
Vazifa: menyu massivini narx bo'yicha o'sish tartibida
saralaydigan sortByPrice(menu) funksiyasini yoz.

Kontekst: Node 24, ESM. Element shakli:
{ name: "Osh", price: 35000 }. Narxlar butun son (so'm).

Cheklov: asl massiv o'zgarmasin (toSorted ishlat),
kutubxona qo'shma. Narxi teng bo'lsa — asl tartib saqlansin.

Natija: funksiya va node:test bilan 3 ta test
(oddiy holat, bo'sh massiv, teng narxlar).

E'tibor bering: cheklovlarda JavaScript'ning mashhur tuzoqlari dagi ikki tuzoq oldindan yopildi — sort asl massivni o'zgartirishi va funksiyasiz satr bo'yicha saralashi.

2-mashq (o'rta): Kontekstda nima yetishmaydi?

Sardor shunday yozdi: "npm test qizil, api.test.js da xato. Tuzat." Kamida to'rtta yetishmayotgan narsani sanang va to'g'ri so'rovni yozing.

Yechim

Yetishmaydi:

  1. Xato matni va qaysi test yiqilgani.
  2. api.test.js dagi o'sha testning kodi va u sinayotgan api.js funksiyasi.
  3. Nima o'zgargan — oxirgi commit yoki diff.
  4. Versiyalar (node --version).
  5. Cheklov: testni emas, kodni tuzatish kerakmi yoki aksincha — noma'lum.
text
Vazifa: api.test.js dagi "404 → TOPILMADI" testi yiqildi.
Sababini top va tuzatish taklif qil. Kod yozishdan oldin
sababni bir-ikki gapda tushuntir.

Kontekst: Node 24.21, node:test. Oxirgi commit — api.js dagi
holatKodi() ni o'zgartirdim (diff pastda). Xato matni:
[to'liq AssertionError]
Test kodi: [15 qator]  holatKodi(): [12 qator]

Cheklov: test — kanon xulq, uni o'zgartirma.

3-mashq (qiyin): Reja so'rovi

vazifalar ga yangi imkoniyat kerak: har vazifa yaratilgan sanasini saqlasin va ro'yxatda "bugun", "kecha" deb ko'rsatsin. AI'ga faqat reja so'raydigan prompt yozing. Unda loyiha qoidalaridan kamida uchtasini cheklov sifatida keltiring. Ishora: Nozik xatolar dagi vaqt zonasi va soxta soat, Intl.RelativeTimeFormat, vazifalar dagi "localStorage faqat saqlash.js da" qoidasi.

Yechim
text
Kod yozma — faqat reja ber.

Vazifa: vazifalar ilovasida har vazifa yaratilgan vaqtini
saqlasin va ro'yxatda nisbiy ko'rsatsin ("bugun", "kecha").

Kontekst: vazifalar v3.1 — 10 ta ES modul, vanilla JS.
Vazifa maydonlari: id, matn, bajarildi (vazifa.js). Eksport
paketi versiyasi PAKET_VERSIYASI = 1 (paket.js). Testlar —
node:test, npm test 59/59.

Cheklovlar:
- localStorage faqat saqlash.js da, fetch faqat api.js da.
- Eski paketlar (yaratilgan sanasiz) ham o'qilsin — versiya
  masalasini rejada alohida yoz.
- Testlarda hozirgi vaqt ishlatilmasin: soat parametr yoki
  mock.timers bilan.
- Sanani Intl.RelativeTimeFormat bilan, timeZone aniq.
- Kanon nomlar o'zgarmaydi.

Natija: qaysi fayl o'zgaradi, yangi funksiyalar nomi va
imzosi, qaysi testlar qo'shiladi, qaysi qadamlar ketma-ket.
Noaniq joy bo'lsa — savol ber.

Eng muhim cheklov — eski paketlar: aks holda AI paketniOqi ni yangi maydonni majburiy qilib o'zgartiradi va foydalanuvchilarning saqlangan ro'yxatlari "buzuq" bo'lib qoladi.

4-mashq: Vazifalar qadami — AGENTS.md

vazifalar repozitoriysi ildiziga AGENTS.md yozing. Unda: loyiha haqida 2 gap, buyruqlar (npm test, npm run lint, npm run format:check, npm run tip), kod qoidalari va taqiqlar. Ishora: README.md, TEXNIK-QARZ.md, eslint.config.js va .prettierrc dagi kelishuvlar. Branch — chore/agents-md. Kod fayllariga tegmang.

Yechim
text
# AGENTS.md — vazifalar

Vazifalar ro'yxati ilovasi: vanilla JS, 10 ta ES modul
(assets/js), build yo'q, GitHub Pages'da. Ma'lumot «Bahor»
mashq API'sida, localStorage — kesh.

## Buyruqlar
- npm install
- npm test            (node:test, internetsiz, 59 test)
- npm run test:tarmoq (haqiqiy API — faqat so'ralganda)
- npm run lint        (ESLint 10, flat config)
- npm run format:check, npm run format (Prettier, faqat JS)
- npm run tip         (tsc --noEmit, JSDoc + @ts-check)

## Kod qoidalari
- Domen nomlari o'zbekcha, funksiya — fe'l bilan (qosh,
  filtrniOl). Brauzer API nomlari o'zgarmaydi.
- Kanon nomlar (eksportlar) o'zgartirilmaydi — TEXNIK-QARZ.md.
- Izoh — "nega"ni yozadi, "nima"ni emas.
- Import faqat pastga: asosiy -> render/holat/api/... ; aylana yo'q.

## Taqiqlar
- fetch faqat api.js da, localStorage faqat saqlash.js da.
- "vazifalar:v3" kaliti va PAKET_VERSIYASI o'zgarmaydi.
- Yangi npm paket — faqat so'rab, aniq versiya bilan.
- .env, tokenlar, kalit qiymatlari kodga va chatga yozilmaydi.
- git push, force push va fayl o'chirish — faqat so'rab.

## "Tayyor" degani
npm test, lint, format:check va tip — hammasi toza.
Xulq o'zgargan bo'lsa — avval test, keyin kod.
Commit: Conventional Commits (feat:, fix:, refactor:, test:, chore:).

Sayt ```md blok tilini bilmagani uchun bu yerda text ko'rinishida; faylning o'zi Markdown. Claude Code ishlatsangiz, CLAUDE.md ga bitta qator yetarli — @AGENTS.md: Claude Code @ bilan boshqa faylni ulay oladi.

Branch main dan ochiladi (tajriba branch'idan emas — AI testlari unda qoladi):

bash
git switch main
git switch -c chore/agents-md
git add AGENTS.md
git commit -m "chore: AI agentlar uchun AGENTS.md"

Tekshiruv: npm test — 59/59; lint, format:check, tip — toza (AGENTS.md kodga tegmaydi, Prettier .md fayllarni o'tkazib yuboradi). Keyin — odatdagidek PR va birlashtirish.

10. Real ishda

  • 2026-yilda ko'p jamoalarda AI yordamchi — oddiy ish asbobi. Ko'p repozitoriylarda AGENTS.md yoki shunga o'xshash fayl bor: uni o'qish — yangi loyihaga kirishning tez yo'li (odamlar uchun ham).
  • Kompaniya qoidalari. Qaysi AI vositasi ruxsat etilgani, unga qaysi kodni berish mumkinligi — kompaniya siyosati. Ishga kirganda birinchi hafta so'raladigan savollardan biri.
  • Intervyu. "AI'dan qanday foydalanasiz?" savoli tobora ko'p so'raladi. Kuchli javob: "aniq vazifa va kontekst beraman, avval reja so'rayman, har natijani test bilan tekshiraman, loyiha qoidalarini faylda saqlayman".
  • Keyingi qadam: AI natijasini qanday tekshirish va qaysi xavflardan saqlanish — AI natijasini tekshirish va xavfsizlik.

Xulosa

  • AI siz bilgan narsani bilmaydi: har so'rov — vazifa, kontekst, cheklov, natija shakli.
  • Kontekst — kerakli fayl, to'liq xato, versiyalar, namuna; sirlar va keraksiz hajm — yo'q.
  • Katta ish: avval reja (kodsiz), keyin kichik qadamlar; xato bo'lsa — haqiqiy chiqishni qaytaring.
  • AI yozgan test qizil bo'lsa — kim haqligini talab va kodni o'qib siz hal qilasiz.
  • AGENTS.md, CLAUDE.md — loyiha qoidalari fayllari; muhim qoidani vosita (test, lint) ham tekshirsin.

Keyingi dars: AI natijasini tekshirish va xavfsizlik — AI kodini begona juniorning kodidek tekshirish, mavjud bo'lmagan paketlar, sirlar va agent ruxsatlari.

Manbalar

  • AGENTS.md — agents.md (Agentic AI Foundation, Linux Foundation)
  • Claude Code hujjatlari: "Manage Claude's memory" (CLAUDE.md, @ import) — docs.claude.com
  • GitHub Docs: "Adding repository custom instructions for GitHub Copilot" — docs.github.com
  • Node.js: "Test runner" — nodejs.org/api/test.html
Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
AI bilan samarali ishlash: prompting, kontekst va loyiha qoidalari fayllari — IlmHamroh