Dokumen ini adalah panduan praktis untuk menguji DevMap selama development dan sebelum release.
Ada beberapa versi DevMap yang dapat diuji:
| Jenis tes | Yang dijalankan | Kapan digunakan |
|---|---|---|
| Source langsung | packages/cli/src/ melalui tsx |
Melihat perubahan terbaru secepat mungkin |
| Automated test | Test unit dan integration | Memastikan perubahan tidak merusak behavior |
| Build lokal | packages/cli/dist/ |
Memastikan hasil compile production bekerja |
| Tarball external | Package .tgz di project lain |
Meniru instalasi pengguna npm |
| npm exec | Tarball tanpa global install | Memastikan gaya penggunaan npx bekerja |
| npm link | CLI global sementara | Menguji command devmap dari folder mana pun |
| CI/runtime | OS dan versi Node berbeda | Verifikasi lintas platform sebelum release |
Jalankan focused test ranking dan evaluation:
pnpm --filter devmap exec tsx --test test/context-builder.test.ts test/context-builder-eval.test.tsExpected result:
- Pertanyaan produk tidak memilih
test/,tests/,__tests__/, fixture,*.test.*, atau*.spec.*. - Pertanyaan testing dalam English dapat memilih file tersebut.
- Pertanyaan navigasi English memilih maksimal dua file dan 60 baris per file.
- Istilah CLI dan web UI memprioritaskan package yang sesuai.
- Evaluation tetap top-1 accuracy 20/20 dan top-3 recall 20/20.
Manual source-mode check:
pnpm dev:cli ask "where scanner"
pnpm dev:cli ask "which tests cover the scanner?"
pnpm dev:cli ask "where is the web UI dashboard component?"Periksa Relevant Files dan prompt token usage. Query pertama seharusnya
memprioritaskan production CLI source dan memakai context jauh lebih kecil
daripada default lama lima file dengan maksimal 200 baris per file.
Focused automated test:
pnpm --filter devmap exec tsx --test test/config-command.test.ts test/analyze-ai.test.ts test/ask-command.test.tsExpected automatic routing:
ask:llama-3.1-8b-instantanalyze:openai/gpt-oss-20banalyze --deep:openai/gpt-oss-120b- fallback:
openai/gpt-oss-20b
Manual override:
pnpm dev:cli config model openai/gpt-oss-120b
pnpm dev:cli doctor
pnpm dev:cli config model autoThe first command should preserve the existing API key and provider. The last command should restore automatic command-based routing.
Focused contract test:
pnpm --filter devmap exec tsx --test test/json-output.test.tsManual source-mode checks:
pnpm dev:cli analyze --json
pnpm dev:cli ask "where scanner" --json
pnpm dev:cli doctor --json
pnpm dev:cli config model auto --jsonPipe output into a JSON parser:
pnpm dev:cli doctor --json | ConvertFrom-JsonExpected:
- parsing succeeds without stripping ANSI;
- stdout contains one JSON document;
- no section header, separator, bullet, or Markdown formatting appears;
- API keys are never included;
- packed package E2E verifies JSON output after tarball installation.
Untuk development harian:
- Jalankan source langsung tanpa build.
- Jalankan test yang berhubungan dengan perubahan.
- Jalankan seluruh automated test.
- Build CLI dan uji file
dist.
Sebelum membuat PR:
- Jalankan seluruh automated test.
- Build CLI.
- Build web.
- Jalankan
git diff --check. - Review staged diff.
Sebelum publish MVP:
- Jalankan seluruh langkah sebelum PR.
- Buat tarball.
- Install tarball pada project lain.
- Uji
init,analyze,ask, dandoctor. - Uji
npm exectanpa global install. - Uji Groq live.
- Pastikan seluruh GitHub Actions hijau.
Semua command development dijalankan dari root repository DevMap:
cd "C:\path\to\devmap"Pastikan requirement tersedia:
node --version
pnpm --versionRequirement:
- Node.js 18 atau lebih baru;
- pnpm 10.34.2.
Install dependency:
pnpm installIni adalah cara tercepat untuk melihat perubahan terbaru di source DevMap.
Tidak perlu menjalankan pnpm build:cli. Command menggunakan tsx dan membaca
file dalam packages/cli/src/ secara langsung.
pnpm dev:cli
pnpm dev:cli -- --help
pnpm dev:cli -- doctor
pnpm dev:cli -- analyze
pnpm dev:cli -- analyze --fresh
pnpm dev:cli -- ask "bagaimana analyzer bekerja?"Gunakan mode ini setelah mengubah:
- command CLI;
- analyzer;
- Context Builder;
- AI prompt;
- output terminal;
- error handling.
Perubahan source langsung terlihat pada command berikutnya.
Fixture aman digunakan karena tidak mengubah project pribadi:
pnpm dev:cli -- analyze packages/cli/test/fixtures/nextjs-project --fresh
pnpm dev:cli -- analyze packages/cli/test/fixtures/express-project --freshHasil penting Next.js:
- framework
nextjs; - entry point
app/page.tsxdanapp/layout.tsx; - NextAuth dan Prisma terdeteksi;
.env, lockfile, dannode_modulestidak dipindai.
Hasil penting Express:
- framework
express; - entry point
src/server.ts; - route payment dan Stripe terdeteksi.
devmap init membuat atau mengubah file pada current working directory.
Jika hanya ingin menguji output terbaru, jalankan analyze, ask, dan doctor
di repository DevMap. Untuk menguji init secara lengkap, lebih aman gunakan
project sementara atau project lain agar .gitignore, DEVMAP.md, dan
.devmap/ tidak mengganggu repository DevMap.
Automated test memakai fake provider untuk AI sehingga tidak memakai quota Groq.
Jalankan seluruh test dan TypeScript check:
pnpm test:cliCommand tersebut menjalankan:
pnpm --filter devmap test:unit
pnpm --filter devmap test:typesHasil minimum saat ini:
tests 49
pass 49
fail 0
Analyzer dan snapshot:
pnpm --filter devmap exec tsx --test test/analyzers.test.tsAI client:
pnpm --filter devmap exec tsx --test test/ai-client.test.tsCommand ask:
pnpm --filter devmap exec tsx --test test/ask-command.test.tsAI analyze:
pnpm --filter devmap exec tsx --test test/analyze-ai.test.tsDoctor:
pnpm --filter devmap exec tsx --test test/doctor.test.tsTerminal Markdown:
pnpm --filter devmap exec tsx --test test/markdown-terminal.test.tsContext Builder benchmark:
pnpm --filter devmap exec tsx --test test/context-builder-eval.test.tsTarget Context Builder:
Context Builder top-1 accuracy: 20/20
Context Builder top-3 recall: 20/20
Mode ini menguji JavaScript production dalam packages/cli/dist/.
Build CLI:
pnpm build:cliJalankan hasil build:
node packages/cli/dist/index.js
node packages/cli/dist/index.js --version
node packages/cli/dist/index.js --help
node packages/cli/dist/index.js doctor
node packages/cli/dist/index.js analyze --fresh
node packages/cli/dist/index.js ask "bagaimana analyzer bekerja?"Perbedaan dengan source mode:
- source mode membaca perubahan terbaru secara langsung;
- build mode membaca file lama dalam
dist; - setelah source berubah, jalankan
pnpm build:clilagi sebelum mengujidist.
Gunakan build mode untuk menemukan:
- import yang gagal setelah compile;
- file output yang hilang;
- perbedaan source dan production build;
- masalah entry binary.
Ini adalah tes distribusi paling realistis sebelum package dipublish ke npm.
Automated E2E untuk membuat tarball, memasangnya pada project Next.js dan Express sementara, lalu menjalankan binary hasil install:
pnpm test:package-e2eTes ini memakai home directory sementara agar config Groq pribadi tidak terbaca dan tidak melakukan request AI live.
Status manual terakhir:
- install tarball pada project eksternal berhasil;
- validasi API key Groq berhasil;
- command AI live berhasil dijalankan;
- nilai API key tidak dicatat dalam repository.
Dari root repository DevMap:
pnpm --filter devmap pack --pack-destination artifactsTarball akan dibuat di:
artifacts/devmap-0.1.0.tgz
Simpan path absolutnya:
$tarball = (Resolve-Path ".\artifacts\devmap-0.1.0.tgz").Path
$tarballPastikan isi package hanya mencakup:
dist/;package.json;README.md;LICENSE.
Tidak boleh ada:
src/;test/;.env;.devmap/;node_modules/.
Contoh:
cd "C:\path\to\project-lain"Pastikan terminal berada di root project:
Get-Location
Get-ChildItemBiasanya root project memiliki package.json.
npm install --save-dev "$tarball"Setelah install, jalankan DevMap melalui:
npx devmap --version
npx devmap --helpUntuk AI live, set API key hanya pada terminal aktif:
$env:GROQ_API_KEY="gsk_your_key"Jalankan:
npx devmap init
npx devmap analyze --fresh
npx devmap ask "jelaskan struktur dan alur utama project ini"
npx devmap doctorinit seharusnya:
- memvalidasi Groq API key;
- menyimpan config global ke
~/.devmap/config.json; - membuat
.devmap/; - menambahkan
.devmap/ke.gitignore; - membuat
DEVMAP.mdjika belum ada; - membuat
AGENTS.mddasar jika belum ada; - meminta konfirmasi sebelum append ke existing
AGENTS.md; - tidak menimpa
AGENTS.mdatauDEVMAP.mdyang sudah ada.
analyze seharusnya:
- mendeteksi framework dan package manager;
- menampilkan entry point, route, feature, database, dan service;
- membuat
.devmap/snapshot.json; - menampilkan architecture interpretation jika AI dikonfigurasi;
- menampilkan model dan token usage.
ask seharusnya:
- memilih file yang relevan;
- menjawab sesuai bahasa pertanyaan;
- merender heading, list, table, dan inline code dengan rapi;
- menampilkan model dan token usage;
- tidak menampilkan raw stack trace.
doctor seharusnya:
- menampilkan status config, key, model, snapshot, framework, OS, dan Node;
- tidak pernah menampilkan API key asli.
Hapus API key dari terminal setelah testing:
Remove-Item Env:GROQ_API_KEYTarball yang sudah terpasang pada project lain tidak otomatis ikut berubah.
Ulangi:
cd "C:\path\to\devmap"
pnpm --filter devmap pack --pack-destination artifacts
cd "C:\path\to\project-lain"
npm install --save-dev "C:\path\to\devmap\artifacts\devmap-0.1.0.tgz"Kemudian jalankan kembali:
npx devmap analyze --fresh
npx devmap ask "pertanyaan pengujian"Hapus package development:
npm uninstall devmapFile berikut adalah artifact integrasi DevMap:
.devmap/
DEVMAP.md
Hapus hanya jika project tersebut memang project uji dan file tidak memiliki
perubahan penting. Periksa juga entry .devmap/ pada .gitignore.
Tes ini memastikan gaya penggunaan seperti npx devmap bekerja.
Dari root DevMap:
$tarball = (Resolve-Path ".\artifacts\devmap-0.1.0.tgz").PathJalankan secara berurutan:
npm exec --yes --cache "$env:TEMP\devmap-version" --package $tarball -- devmap --version
npm exec --yes --cache "$env:TEMP\devmap-help" --package $tarball -- devmap --helpGunakan cache berbeda untuk menghindari race pada instalasi package.
Ini opsional. Gunakan jika ingin command devmap tersedia secara global dan
tetap mengarah ke repository lokal.
Setup:
pnpm build:cli
cd packages/cli
npm linkSekarang command dapat dijalankan dari project mana pun:
devmap --version
devmap analyze --fresh
devmap ask "jelaskan project ini"
devmap doctorSetiap source berubah, build ulang:
cd "C:\path\to\devmap"
pnpm build:cliLepaskan global link setelah selesai:
npm unlink -g devmapAutomated test tidak memakai quota. Bagian ini memakai API key dan quota Groq.
Set API key:
$env:GROQ_API_KEY="gsk_your_key"Flow minimum:
devmap init
devmap analyze --fresh
devmap analyze
devmap ask "Bagaimana autentikasi bekerja?"
devmap ask "Jelaskan struktur database dalam tabel"
devmap doctorPastikan:
initmenyatakan key valid;- analyze pertama menampilkan architecture dan token usage;
- analyze kedua memakai cache dan menampilkan
Cached: yes; - jawaban mengikuti bahasa pertanyaan;
- table dan Markdown tampil rapi;
- file yang disebut memang relevan;
- raw provider error dan stack trace tidak muncul;
doctormenyatakan key dan model valid.
Tes deep model:
devmap analyze --deep --freshHapus key:
Remove-Item Env:GROQ_API_KEYJangan menaruh API key dalam repository, screenshot, issue, atau chat.
Gunakan project sementara agar file pribadi tidak berubah.
Pastikan project tidak memiliki AGENTS.md, lalu jalankan:
devmap initExpected:
- DevMap membuat
AGENTS.md; - file berisi
DevMap Context; - block mengarahkan agent membaca
DEVMAP.md.
Buat file:
Set-Content AGENTS.md "# Existing Instructions"
devmap initJawab:
AGENTS.md exists. Append DevMap instructions? [y/N]: yes
Expected:
- isi lama tetap ada;
- DevMap block ditambahkan di bagian akhir;
- rerun
inittidak menggandakan block.
Jalankan init, lalu jawab n atau tekan Enter.
Expected:
- existing
AGENTS.mdsama persis; - terminal menyatakan update dilewati.
$env:GROQ_API_KEY="gsk_your_key"
devmap init
Remove-Item Env:GROQ_API_KEYJika existing AGENTS.md ditemukan tanpa prompt interaktif:
- file tidak diubah;
- terminal meminta user menjalankan
initsecara interaktif untuk konfirmasi.
Automated test:
pnpm --filter devmap exec tsx --test test/init-and-errors.test.tspnpm dev:cli -- analyze "Z:\path-that-does-not-exist"Expected:
- exit code gagal;
- pesan path tidak ditemukan;
- tip actionable;
- tanpa raw stack trace.
Remove-Item Env:GROQ_API_KEY -ErrorAction SilentlyContinue
pnpm dev:cli -- initExpected:
- API key diminta atau command menjelaskan cara memberikannya;
- config parsial tidak dibuat.
$env:GROQ_API_KEY="invalid-key"
pnpm dev:cli -- init
Remove-Item Env:GROQ_API_KEYExpected:
- pesan key invalid;
- config valid sebelumnya tidak ditimpa;
- tanpa raw provider stack trace.
Buat project sementara dengan JSON invalid lalu jalankan analyze.
Expected:
- analysis tetap selesai;
- framework fallback dari source tetap bekerja;
- warning disimpan pada snapshot;
- user diarahkan memperbaiki
package.jsondan menjalankan--fresh.
Verifikasi Windows Node.js 18 dan 20:
npx -p node@18 node packages\cli\node_modules\tsx\dist\cli.mjs packages\cli\test\run-tests.ts
npx -p node@20 node packages\cli\node_modules\tsx\dist\cli.mjs packages\cli\test\run-tests.tsGitHub Actions menguji:
- Windows, Ubuntu, dan macOS;
- Node.js 18, 20, dan 22;
- frozen install;
- CLI test;
- CLI build;
- CLI smoke test;
- web build;
- package tarball smoke test.
Sebelum merge, cek:
gh pr checksSeluruh job wajib hijau.
Development:
pnpm dev:webProduction build:
pnpm build:webPreview:
pnpm preview:webpnpm test:cli
pnpm build:cli
pnpm build:web
git diff --check
git status --shortPastikan:
- seluruh test lulus;
- CLI dan web berhasil dibuild;
- tidak ada API key;
- tidak ada
.devmap/,dist/,artifacts/, ataunode_modules/yang staged; PROGRESS.md,TEST.md, atauDEBUG.mddiperbarui bila relevan.
Review staged files:
git diff --cached --stat
git diff --cached