@ojokesusu/lintasai 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/.github/workflows/publish-npm.yml +40 -0
  2. package/.github/workflows/validate.yml +93 -0
  3. package/AUDIT_POST_SETUP_PROMPT_v1.md +280 -0
  4. package/BOOTSTRAP_PROJECT_DOCS_PROMPT_v1.md +3 -0
  5. package/CHANGELOG.md +313 -0
  6. package/CLAUDE_universal_v1.md +1021 -0
  7. package/CONTRIBUTING.md +101 -0
  8. package/FIRST_SESSION_PROMPT_v1.md +7 -0
  9. package/JALANKAN_KIT.md +188 -0
  10. package/LICENSE +21 -0
  11. package/MULAI_DI_SINI.md +145 -0
  12. package/PROJECT_KICKOFF_PROMPT_v1.md +3 -0
  13. package/PROJECT_LIFECYCLE_PROMPT_v1.md +536 -0
  14. package/PROJECT_MIGRATION_PROMPT_v1.md +3 -0
  15. package/README.md +505 -0
  16. package/SETUP_POLA_B_PROMPT_v1.md +5 -0
  17. package/SPLIT_REPO_MIGRATION_PROMPT_v1.md +485 -0
  18. package/TEAM_ROLLOUT_GUIDE_v1.md +172 -0
  19. package/UPDATE_DOCS_PROMPT_v1.md +3 -0
  20. package/UPDATE_KIT_PROMPT_v1.md +213 -0
  21. package/bin/lintasai.js +81 -0
  22. package/docs/SIGNED_RELEASE.md +162 -0
  23. package/install-windows.ps1 +225 -0
  24. package/kit.ps1 +508 -0
  25. package/lib/agents-md.ps1 +174 -0
  26. package/lib/git-helpers.ps1 +104 -0
  27. package/lib/kit-files.psd1 +133 -0
  28. package/lib/manifest-signing.ps1 +65 -0
  29. package/lib/manifest.ps1 +267 -0
  30. package/lib/rollback.ps1 +241 -0
  31. package/lib/safety.ps1 +193 -0
  32. package/lib/template-deploy.ps1 +242 -0
  33. package/lib/version-detect.ps1 +161 -0
  34. package/package.json +36 -0
  35. package/setup-pola-b.ps1 +687 -0
  36. package/templates/ANALOGI_LIBRARY.md +7 -0
  37. package/templates/CLAUDE_TEAM_GUIDE.md +505 -0
  38. package/templates/CROSS_REPO_TYPES_PIPELINE.md +473 -0
  39. package/templates/DB_SCHEMA_SCAN_PROMPT.md +194 -0
  40. package/templates/DISCORD_BOT_INTEGRATION.md +187 -0
  41. package/templates/GLOSSARY_NON_PROGRAMMER.md +361 -0
  42. package/templates/INDEX.md +157 -0
  43. package/templates/MCP_SETUP.md +1145 -0
  44. package/templates/MIGRATE_TO_SUBFOLDER_PROMPT_v1.md +220 -0
  45. package/templates/ONBOARDING.md +172 -0
  46. package/templates/PROJECT_STARTER_TEMPLATES.md +264 -0
  47. package/templates/PROMPT_LIBRARY.md +790 -0
  48. package/templates/RLS_SETUP_PROMPT.md +167 -0
  49. package/templates/SECURITY_INCIDENT_PLAYBOOK.md +191 -0
  50. package/templates/SPLIT_REPO_AGENTS_TEMPLATES.md +32 -0
  51. package/templates/SPLIT_REPO_NON_PROGRAMMER_PROMPTS.md +604 -0
  52. package/templates/SPLIT_REPO_TOOLS_SETUP.md +388 -0
  53. package/templates/STACK_DETECTION_PATTERN.md +261 -0
  54. package/templates/STACK_GUIDE.md +564 -0
  55. package/templates/STACK_MIGRATION_GUIDE.md +154 -0
  56. package/templates/STACK_VERSIONS.md +31 -0
  57. package/templates/UPDATE_GUIDE.md +246 -0
  58. package/templates/_EXAMPLE.md +110 -0
  59. package/templates/_PATTERNS.md +173 -0
  60. package/templates/architecture.md +180 -0
  61. package/templates/architecture_auto.md +61 -0
  62. package/templates/decisions/README.md +108 -0
  63. package/templates/decisions/_TEMPLATE.md +84 -0
  64. package/templates/feature-flags-advanced.md +171 -0
  65. package/templates/github/CODEOWNERS.template +61 -0
  66. package/templates/github/GENERATE_TYPES_SCRIPT.md +77 -0
  67. package/templates/github/PUBLISH_SHARED_WORKFLOW.yml +52 -0
  68. package/templates/github/RECEIVE_BACKEND_UPDATE.yml +106 -0
  69. package/templates/github/RENOVATE_FRONTEND.json +28 -0
  70. package/templates/github/TRIGGER_FRONTEND_UPDATE.yml +29 -0
  71. package/templates/github/pull_request_template.md +44 -0
  72. package/templates/github/scripts/ai-review.js +153 -0
  73. package/templates/github/workflows/ai-review.yml +61 -0
  74. package/templates/github/workflows/backup-schemas.yml +169 -0
  75. package/templates/glossary.md +110 -0
  76. package/templates/split-agents/BACKEND.md +149 -0
  77. package/templates/split-agents/FRONTEND.md +141 -0
  78. package/templates/split-agents/SHARED.md +82 -0
  79. package/templates/split-agents/TOOLS.md +77 -0
  80. package/tests/Run-Tests.ps1 +19 -0
  81. package/tests/lib-safety.Tests.ps1 +66 -0
  82. package/tests/rollback.Tests.ps1 +66 -0
  83. package/tests/uninstall.Tests.ps1 +265 -0
  84. package/tests/update-kit.Tests.ps1 +78 -0
  85. package/uninstall.ps1 +794 -0
  86. package/update-kit.ps1 +907 -0
@@ -0,0 +1,154 @@
1
+ # templates/STACK_MIGRATION_GUIDE.md — Panduan Migrasi Stack (Advanced)
2
+
3
+ > Versi 1 · 2026-06-03
4
+ > **POST-LAUNCH ADVANCED.** Default tim pakai Vercel — file ini cuma untuk fase migrasi spesifik (cost Vercel over-budget, butuh background worker persistent, atau butuh WebSocket long-lived).
5
+
6
+ ---
7
+
8
+ ## 1. Pengantar
9
+
10
+ File ini = **pendamping `STACK_GUIDE.md`** untuk fase migrasi vendor hosting.
11
+
12
+ **JANGAN baca file ini di Day 0–1.** Staff IT non-programmer fase awal cukup pakai Vercel + Supabase sesuai `STACK_GUIDE.md` section 3.
13
+
14
+ **Baru relevan kalau:**
15
+
16
+ - Bill Vercel sudah lewat budget (umumnya >$100/bulan untuk satu project) DAN owner sudah verifikasi penyebabnya bukan misconfiguration (mis. ISR revalidate kekecilan, image optimization mati).
17
+ - Butuh **background worker persistent** (Vercel function = serverless, mati setelah HTTP response selesai → tidak cocok untuk job antrian panjang, polling DB terus-menerus, dll.).
18
+ - Butuh **WebSocket / Server-Sent Events long-lived connection** (Vercel Edge punya batasan koneksi durasi pendek).
19
+ - Owner sudah baca Decision Matrix di `STACK_GUIDE.md` section 9 dan memutuskan pindah.
20
+
21
+ > *Background worker* = proses yang jalan terus-menerus di server (bukan response per request HTTP). Contoh: pengirim email batch, scraper jadwal, queue processor.
22
+
23
+ ---
24
+
25
+ ## 2. Railway Migration Guide
26
+
27
+ Kapan pilih Railway:
28
+
29
+ - Butuh background worker persistent + cron native gratis.
30
+ - Mau tetap pakai stack Docker-portable (tidak vendor-lock seperti Vercel Edge).
31
+ - Tim sudah familiar Nixpacks atau Dockerfile.
32
+
33
+ ### 2.1. Provision
34
+
35
+ 1. https://railway.app → New Project → Deploy from GitHub.
36
+ 2. Add PostgreSQL plugin (klik **+ New** → Database → PostgreSQL).
37
+ 3. Connection string auto-inject ke service via `${{ Postgres.DATABASE_URL }}`.
38
+
39
+ ### 2.2. Env Vars
40
+
41
+ Service → Variables → tambah satu per satu, atau import dari `.env`.
42
+
43
+ ```text
44
+ DATABASE_URL = ${{ Postgres.DATABASE_URL }}
45
+ NEXT_PUBLIC_SITE_URL = https://akses.up.railway.app
46
+ ```
47
+
48
+ ### 2.3. Dockerfile vs Nixpacks
49
+
50
+ - **Nixpacks** (default) — auto-detect Next.js, no config. Pilih ini dulu.
51
+ - **Dockerfile** — kalau butuh dependency native (ImageMagick, FFmpeg, Chromium).
52
+
53
+ Contoh Dockerfile Next.js minimal:
54
+
55
+ ```dockerfile
56
+ FROM node:20-alpine AS builder
57
+ WORKDIR /app
58
+ COPY package*.json ./
59
+ RUN npm ci
60
+ COPY . .
61
+ RUN npm run build
62
+
63
+ FROM node:20-alpine AS runner
64
+ WORKDIR /app
65
+ COPY --from=builder /app/.next/standalone ./
66
+ COPY --from=builder /app/.next/static ./.next/static
67
+ COPY --from=builder /app/public ./public
68
+ EXPOSE 3000
69
+ CMD ["node", "server.js"]
70
+ ```
71
+
72
+ Note: aktifkan `output: 'standalone'` di `next.config.js`.
73
+
74
+ ### 2.4. Background Worker + Cron Native
75
+
76
+ Railway dukung worker service terpisah dari web. Add **+ New Service** → pilih repo yang sama, set start command beda:
77
+
78
+ ```text
79
+ Web service: npm run start (= next start)
80
+ Worker service: npm run worker (= node dist/worker.js)
81
+ ```
82
+
83
+ Cron: pakai package `node-cron` di worker service, atau Railway **Cron Job** (klik service → Settings → Cron Schedule).
84
+
85
+ ### 2.5. Healthcheck Endpoint
86
+
87
+ Railway monitor `GET /api/health` (configurable). Bikin route:
88
+
89
+ ```ts
90
+ // app/api/health/route.ts
91
+ export async function GET() {
92
+ return Response.json({ status: 'ok', ts: Date.now() })
93
+ }
94
+ ```
95
+
96
+ ---
97
+
98
+ ## 3. Render Migration Guide (Alternative)
99
+
100
+ Mirip Railway, tapi UI beda + pricing model beda. Pilih Render kalau:
101
+
102
+ - Mau spending limit ketat (Render lebih predictable per service).
103
+ - Tim sudah familiar Render (mis. pakai untuk proyek lain).
104
+
105
+ ### 3.1. Web Service + DB Terpisah
106
+
107
+ 1. https://render.com → New → **PostgreSQL** → pilih region + plan.
108
+ 2. New → **Web Service** → connect GitHub repo.
109
+ 3. Connection string DB di-copy manual ke env var `DATABASE_URL`.
110
+
111
+ ### 3.2. Build / Start Command
112
+
113
+ ```text
114
+ Build Command: npm ci && npm run build
115
+ Start Command: npm run start
116
+ ```
117
+
118
+ Untuk Next.js standalone:
119
+
120
+ ```text
121
+ Start Command: node .next/standalone/server.js
122
+ ```
123
+
124
+ ### 3.3. Background Worker + Cron
125
+
126
+ - **Background Worker**: New → Background Worker → set start command sama dengan worker proyek (mis. `npm run worker`).
127
+ - **Cron Job**: New → Cron Job → schedule pakai sintaks cron (`0 */6 * * *` = tiap 6 jam) + command (`npm run cron:cleanup`).
128
+
129
+ ---
130
+
131
+ ## 4. Checklist Pre-Migration (Sebelum Pindah dari Vercel)
132
+
133
+ Sebelum eksekusi migrasi, pastikan:
134
+
135
+ - [ ] Sudah verifikasi bill Vercel bukan akibat misconfiguration (cek `Project → Usage`, bandingkan dengan optimasi: ISR revalidate, image optimization, function region).
136
+ - [ ] Sudah baca `STACK_GUIDE.md` section 9 (Decision Matrix) dan paham trade-off vendor lock-in.
137
+ - [ ] Backup DB Supabase aktif (Settings → Database → Backups).
138
+ - [ ] Rollback plan siap: kalau migrasi gagal, balik ke Vercel via DNS switch (TTL DNS ≤5 menit sebelum cutover).
139
+ - [ ] Custom domain SSL siap di vendor baru (Railway/Render auto-handle, tapi propagation DNS bisa 1–24 jam).
140
+ - [ ] Env vars sensitif sudah di-copy ke vendor baru dan di-mark Sensitive/Secret.
141
+ - [ ] Tim yang punya akses Vercel sudah diberi akses Railway/Render (least privilege).
142
+
143
+ ---
144
+
145
+ ## 5. Referensi Eksternal
146
+
147
+ - Railway docs: https://docs.railway.app
148
+ - Render docs: https://render.com/docs
149
+ - Decision Matrix vendor: `templates/STACK_GUIDE.md` section 9
150
+ - Default workflow (sebelum migrasi): `templates/STACK_GUIDE.md` section 3 (Vercel Setup)
151
+
152
+ ---
153
+
154
+ > **Update file ini** tiap kali ada perubahan flow Railway/Render (UI dashboard, pricing tier, atau best practice). Catat di `CHANGELOG.md` kit + bump versi.
@@ -0,0 +1,31 @@
1
+ # Stack Versions Reference - lintasAI
2
+
3
+ > Single source of truth untuk version requirement.
4
+ > Update file ini saat upgrade major version framework.
5
+ > Konsumen: STACK_GUIDE.md, FRONTEND.md, STACK_DETECTION_PATTERN.md, dst.
6
+ > Last updated: 2026-06-05
7
+
8
+ ## Required Versions (Minimum Supported)
9
+
10
+ | Stack | Minimum | Recommended | Tested |
11
+ |---|---|---|---|
12
+ | Node.js | 18.x | 20.x LTS | 20.x |
13
+ | Next.js | 14.x | 16.x | 16.2.3 |
14
+ | React | 18.x | 19.x | 19.2.4 |
15
+ | Prisma | 5.x | 7.x | 7.7.0 |
16
+ | Tailwind | 3.x | 4.x | 4.x |
17
+ | TypeScript | 5.x | 5.x | 5.x |
18
+ | NextAuth | v4 | v4 | 4.24.13 |
19
+
20
+ ## Version Compatibility Matrix
21
+
22
+ | lintasAI version | Next.js | Prisma | Notes |
23
+ |---|---|---|---|
24
+ | v1.0.0 | 14-16 | 5-7 | Default akses stack |
25
+ | v1.1.0+ | 17+ | 8+ | Future |
26
+
27
+ ## Update Policy
28
+
29
+ - Patch bumps (Next 16.2 → 16.3): auto-supported
30
+ - Minor bumps (Next 16 → 17): test in staging dulu
31
+ - Major bumps: kit version bump + migration guide
@@ -0,0 +1,246 @@
1
+ # docs/UPDATE_GUIDE.md — Cara Update Kit lintasAI (untuk Staff IT Non-Programmer)
2
+
3
+ > Versi 1 · 2026-06-04 · auto-deployed oleh setup-pola-b.ps1
4
+
5
+ ---
6
+
7
+ ## 1. Untuk siapa & kapan baca dokumen ini
8
+
9
+ Dokumen ini untuk **staff IT non-programmer** yang pakai kit `lintasAI` di proyek harian. Baca kalau:
10
+
11
+ - Kamu lihat notifikasi/chat "lintasAI versi baru rilis" dan bingung harus apa.
12
+ - AI di Claude Code bilang "kit kamu ketinggalan, update dulu".
13
+ - Kamu mau tahu apakah update versi baru aman atau bikin file lama berantakan.
14
+ - Kamu mau rollback (balik ke versi lama) karena update terasa "aneh".
15
+
16
+ Kalau kamu programmer senior dan butuh detail teknis sha256/manifest diff, langsung loncat ke `./.claude-kit/CHANGELOG.md` + baca source `update-kit.ps1`.
17
+
18
+ ---
19
+
20
+ ## 2. TL;DR (baca ini dulu kalau buru-buru)
21
+
22
+ Kit `lintasAI` di-update dengan **1 perintah** — entah lewat chat AI ("lintasAI v1.2.0 rilis, update") atau jalanin `kit.ps1 update` di PowerShell. Sistem otomatis re-clone versi terbaru, backup file kamu yang ter-modifikasi, lalu AI **auto-pakai aturan baru** di sesi berikutnya. Mirip kayak **WhatsApp auto-update di Play Store** — kamu tinggal tap, fitur baru langsung jalan, chat lama tidak hilang.
23
+
24
+ ---
25
+
26
+ ## 3. 4-Tier Update Strategy (level keparahan update)
27
+
28
+ Tidak semua update sama besarnya. Kit `lintasAI` punya **4 level**, dari yang paling ringan sampai yang butuh perhatian khusus:
29
+
30
+ | Tier | Label CHANGELOG | Contoh isi update | Analogi tools digital | Aksi staff |
31
+ |------|-----------------|-------------------|----------------------|------------|
32
+ | **1 — Silent** | (tanpa label) | Typo, perbaikan kalimat, fix link rusak | **WhatsApp 2.23.10 → 2.23.11** auto-update di background, kamu bahkan tidak sadar | Cukup 1 perintah `kit.ps1 update`. Selesai. |
33
+ | **2 — AI auto-sync** | (tanpa label) | Aturan baru ditambahin, template baru, prompt baru | **iPhone iOS 17.3 → 17.4** minor — ada fitur baru tapi semua app lama tetap jalan normal | 1 perintah update. AI di sesi berikutnya auto-pakai aturan baru. Tidak perlu setup ulang. |
34
+ | **3 — [BREAKING]** | `[BREAKING]` | Struktur file/folder berubah, format CLAUDE.md ganti, nama file di-rename | **iPhone iOS 16 → iOS 17** major — sebelum upgrade muncul layar "backup dulu ya", beberapa setting harus dicek ulang | Baca **"Migration Steps"** inline di CHANGELOG.md untuk versi itu. Biasanya 2-5 langkah PowerShell. AI bisa bantu jalanin step-by-step. |
35
+ | **4 — [SCAN-REQUIRED]** | `[SCAN-REQUIRED]` | Logic bulk-bootstrap berubah, rule scan dokumen lama ganti | **Tokopedia Seller ganti algoritma kategori** — produk lama harus di-remap ulang biar tetap muncul di pencarian | Paste ulang isi `JALANKAN_KIT.md` ke chat AI baru. AI scan ulang proyek pakai rule baru, lalu apply. |
36
+
37
+ **Cara baca label:** buka `./.claude-kit/CHANGELOG.md`, lihat entry versi terbaru. Kalau ada `[BREAKING]` atau `[SCAN-REQUIRED]` di judul, naik tier. Kalau cuma "fix typo di template X", itu Tier 1.
38
+
39
+ ---
40
+
41
+ ## 4. Dual-Mode Update — pilih yang nyaman
42
+
43
+ Ada **2 cara** update kit. Sama-sama valid, tapi pas konteks beda:
44
+
45
+ ### Mode A — AI Chat (RECOMMENDED untuk harian)
46
+
47
+ Buka Claude Code, chat:
48
+
49
+ > "lintasAI v1.2.0 rilis, update dong"
50
+
51
+ AI akan:
52
+ 1. Fetch `CHANGELOG.md` versi baru dari GitHub `ojokesusu/lintasAI`.
53
+ 2. Parse label tier (Tier 1/2/3/4).
54
+ 3. Compose ringkasan Bahasa Indonesia: "ada 3 perubahan, 1 typo + 1 fitur baru + 1 BREAKING (rename folder X → Y)".
55
+ 4. Tanya konfirmasi: "lanjut update?" — kamu jawab "ya".
56
+ 5. Jalanin `./.claude-kit/kit.ps1 update` otomatis.
57
+ 6. Kalau Tier 3/4, AI bacain "Migration Steps" satu per satu sambil tunggu kamu OK.
58
+
59
+ **Analogi:** kayak **Tokopedia Seller** yang push notif "ada update aturan baru ongkir, mau lihat?" — kamu tap, dia jelasin pakai bahasa biasa, kamu tinggal setuju.
60
+
61
+ ### Mode B — PowerShell Script (fallback / CI / advanced)
62
+
63
+ Buka PowerShell di folder proyek, jalanin:
64
+
65
+ ```powershell
66
+ ./.claude-kit/kit.ps1 update
67
+ ```
68
+
69
+ Script otomatis classify tier dan kasih output terstruktur di terminal:
70
+
71
+ ```
72
+ [OK] Fetched lintasAI v1.2.0 (was: v1.1.3)
73
+ [INFO] 3 changes: 1 Tier-1, 1 Tier-2, 1 Tier-3 [BREAKING]
74
+ [ACTION REQUIRED] Tier-3 migration needed:
75
+ - Step 1: Rename folder docs/old/ -> docs/legacy/
76
+ - Step 2: Update reference di AGENTS.md line 42
77
+ [BACKUP] 2 files user-modified -> .claude-kit/CLAUDE_universal_v1.md.bak-20260604-1530
78
+ ```
79
+
80
+ Mode ini dipakai kalau:
81
+ - Kamu CI/CD pipeline (no AI in the loop).
82
+ - Sambungan internet AI lagi lemot, mau update offline lebih cepat.
83
+ - Kamu programmer dan suka lihat output mentah.
84
+
85
+ **Analogi:** kayak `git pull` manual vs pakai GitHub Desktop GUI — sama hasilnya, beda interface.
86
+
87
+ ---
88
+
89
+ ## 5. Skenario sehari-hari — kapan tiap tier muncul
90
+
91
+ **Skenario A: Tier 1 — Hari Senin pagi**
92
+ > Owner kit fix typo "ANALAGI" → "ANALOGI" di `ANALOGI_LIBRARY.md`. Kamu chat "update", AI bilang "cuma typo, aman 100%, update otomatis". Kamu lanjut kerja. Tidak ada yang berubah di workflow kamu.
93
+
94
+ **Skenario B: Tier 2 — Hari Rabu sore**
95
+ > Owner kit tambah 5 prompt baru di `PROMPT_LIBRARY.md` untuk handle task "code review". Kamu update. Sesi AI besok pagi, kamu tanya "review PR ini", AI auto-pakai prompt baru tanpa kamu sadar. Mirip **Excel kasih function baru `XLOOKUP`** — formula lama (`VLOOKUP`) tetap jalan, function baru tinggal dipakai kalau mau.
96
+
97
+ **Skenario C: Tier 3 [BREAKING] — Hari Jumat siang**
98
+ > Owner kit rename `CLAUDE_universal_v1.md` → `LINTAS_AI_RULES.md`. CHANGELOG kasih Migration Steps:
99
+ > 1. Tutup semua sesi Claude Code.
100
+ > 2. Jalanin `kit.ps1 update`.
101
+ > 3. AI auto-update referensi di `AGENTS.md` kamu.
102
+ > 4. Buka sesi baru, verifikasi AI baca file baru.
103
+ >
104
+ > Analogi: kayak **BCA mobile minta re-login pakai biometric** setelah update major — sedikit ribet, tapi sekali doang.
105
+
106
+ **Skenario D: Tier 4 [SCAN-REQUIRED] — Hari Senin pagi setelah weekend**
107
+ > Owner kit ubah logic scan: dulu cuma baca `docs/`, sekarang juga baca `prisma/schema.prisma`. Kamu paste ulang `JALANKAN_KIT.md` ke chat AI baru. AI bilang "saya scan ulang proyek pakai rule baru ya", lalu propose update di beberapa file lama. Kamu approve. Analogi: **Tokopedia minta seller re-kategorisasi produk** setelah ganti algoritma — sekali kerjaan, manfaat panjang.
108
+
109
+ ---
110
+
111
+ ## 6. Cara execute update — langkah konkret
112
+
113
+ ### Cara 1 (RECOMMENDED): Chat ke AI
114
+
115
+ 1. Buka Claude Code di folder proyek (mis. `D:\Users\Administrator\projects\akses`).
116
+ 2. Ketik di chat: `lintasAI v1.2.0 rilis, update`.
117
+ (Ganti `1.2.0` dengan versi yang kamu lihat di chat tim / di GitHub.)
118
+ 3. Tunggu AI ringkas perubahan dalam Bahasa Indonesia.
119
+ 4. Jawab `ya` kalau setuju.
120
+ 5. AI eksekusi + verifikasi + lapor "selesai, versi sekarang v1.2.0".
121
+
122
+ ### Cara 2 (advanced): PowerShell
123
+
124
+ 1. Buka PowerShell.
125
+ 2. `cd` ke folder proyek.
126
+ 3. Jalanin:
127
+ ```powershell
128
+ ./.claude-kit/kit.ps1 update
129
+ ```
130
+ 4. Baca output, ikuti `[ACTION REQUIRED]` kalau ada.
131
+ 5. Kalau Tier 3/4, buka `./.claude-kit/CHANGELOG.md` baca section "Migration Steps" versi itu.
132
+
133
+ ---
134
+
135
+ ## 7. Apa yang ter-backup otomatis
136
+
137
+ Update kit pakai **atomic re-clone** (kit lama dihapus, kit baru di-clone fresh). Tapi file yang **kamu modifikasi sendiri** tidak hilang — dilindungi pakai logic sha256 di `update-kit.ps1`:
138
+
139
+ - Sebelum re-clone, script hitung sha256 tiap file kit.
140
+ - Bandingkan dengan manifest versi awal install.
141
+ - File yang sha256-nya **beda** (= kamu pernah edit) → di-backup ke `.bak-YYYYMMDD-HHmm`.
142
+ - File yang sha256-nya **sama** (= tidak pernah disentuh) → langsung ditimpa fresh.
143
+
144
+ **Contoh:**
145
+ ```
146
+ ./.claude-kit/CLAUDE_universal_v1.md ← tidak pernah kamu edit, di-overwrite
147
+ ./.claude-kit/CLAUDE_universal_v1.md.bak-20260604-1530 ← (tidak dibuat, file aman)
148
+
149
+ ./.claude-kit/templates/INDEX.md ← kamu edit kemarin
150
+ ./.claude-kit/templates/INDEX.md.bak-20260604-1530 ← BACKUP versi kamu disini
151
+ ./.claude-kit/templates/INDEX.md ← versi baru kit di-install di sini
152
+ ```
153
+
154
+ Setelah update, kamu bisa **diff manual** antara file baru vs `.bak` kamu, lalu merge perubahan yang masih relevan. AI bisa bantu kalau kamu chat "merge backup INDEX.md kemarin ke versi baru".
155
+
156
+ **Analogi:** mirip **Google Drive kasih versioning otomatis** — file lama tidak hilang, tinggal buka "Version History".
157
+
158
+ ---
159
+
160
+ ## 8. Auto-cleanup backup (30 hari + max 3 versi)
161
+
162
+ Biar folder `.claude-kit/` tidak penuh sampah `.bak`, `update-kit.ps1` punya auto-cleanup:
163
+
164
+ - **Aturan 1:** file `.bak` yang umurnya > **30 hari** dihapus otomatis tiap kali update.
165
+ - **Aturan 2:** kalau ada > **3 versi backup** untuk file yang sama, versi paling lama dihapus (keep 3 terbaru).
166
+
167
+ **Contoh:**
168
+ ```
169
+ INDEX.md.bak-20260301-1200 ← 95 hari lalu, DIHAPUS
170
+ INDEX.md.bak-20260520-0900 ← keep (3 terbaru)
171
+ INDEX.md.bak-20260601-1430 ← keep
172
+ INDEX.md.bak-20260604-1530 ← keep (paling baru)
173
+ ```
174
+
175
+ **Analogi:** kayak **WhatsApp auto-delete chat backup di Google Drive setelah 1 tahun** — sistem self-clean, tidak perlu kamu pikirin.
176
+
177
+ > Catatan: TIDAK ada folder `migrations/` per breaking change (over-engineering). Migration instructions ditulis **inline** di CHANGELOG entry per versi, supaya satu tempat aja yang dibaca.
178
+
179
+ ---
180
+
181
+ ## 9. Rollback kalau update bermasalah
182
+
183
+ Kalau setelah update terasa "aneh" (mis. AI bingung, file hilang, error import), rollback:
184
+
185
+ ### Cara 1: kit.ps1 rollback
186
+
187
+ ```powershell
188
+ ./.claude-kit/kit.ps1 rollback
189
+ ```
190
+
191
+ Script otomatis cari snapshot pre-update terakhir dan restore.
192
+
193
+ ### Cara 2: git restore (kalau kit di-track git)
194
+
195
+ ```powershell
196
+ git restore --source=HEAD~1 -- .claude-kit/
197
+ ```
198
+
199
+ Balik ke versi commit sebelumnya. Cocok kalau kamu sudah commit kit ke repo proyek.
200
+
201
+ ### Cara 3: chat AI
202
+
203
+ > "rollback update lintasAI tadi, kayanya bermasalah"
204
+
205
+ AI auto-jalanin Cara 1 + verifikasi.
206
+
207
+ **Analogi:** kayak **iPhone "Restore from iCloud Backup"** — kalau update iOS bermasalah, restore ke snapshot sebelumnya, semua data balik.
208
+
209
+ ---
210
+
211
+ ## 10. FAQ untuk staff non-programmer
212
+
213
+ **Q1: Saya tidak update selama 2 bulan, aman?**
214
+ Aman, kit lama tetap jalan. Tapi AI mungkin tidak tahu fitur/aturan baru. Best practice: update minimal 1× per 2 minggu, atau tiap kali owner kit announce versi baru di chat tim.
215
+
216
+ **Q2: Update bisa bikin file `docs/` proyek saya hilang?**
217
+ **TIDAK.** Update cuma sentuh folder `./.claude-kit/`. File proyek (mis. `docs/`, `prisma/`, `app/`) tidak ke-touch sama sekali. Kit dan proyek terpisah, kayak **app WhatsApp vs chat history kamu** — update app tidak hapus chat.
218
+
219
+ **Q3: Saya pernah edit `CLAUDE_universal_v1.md`, edit-an saya hilang setelah update?**
220
+ Tidak. File user-modified auto-backup ke `.bak-YYYYMMDD-HHmm`. Bisa kamu cek + merge manual. AI bisa bantu.
221
+
222
+ **Q4: Versi kit terbaru di mana saya lihat?**
223
+ Buka `github.com/ojokesusu/lintasAI` → file `CHANGELOG.md`. Atau chat AI: "versi terbaru lintasAI berapa?".
224
+
225
+ **Q5: Sesi AI besok pagi otomatis tahu aturan baru, atau saya perlu setting ulang?**
226
+ Auto. Tiap kali AI start sesi, dia baca `./.claude-kit/CLAUDE_universal_v1.md` fresh. Jadi setelah update, sesi berikutnya = pakai aturan baru tanpa setting ulang. Analogi: **Notion update template** → besok kamu buka Notion, template baru langsung ada.
227
+
228
+ **Q6: Saya CI/CD, update di pipeline gimana?**
229
+ Pakai Mode B (PowerShell). Tambahin step `./.claude-kit/kit.ps1 update --non-interactive` di pipeline. Exit code non-zero kalau ada Tier 3/4 yang butuh manual review.
230
+
231
+ **Q7: Kalau saya cuma 1 orang (solo project), perlu update juga?**
232
+ Perlu. Owner kit terus improve aturan, prompt, dan analogi. Update = AI kamu makin pintar. Solo project lebih gampang lagi karena tidak perlu koordinasi tim.
233
+
234
+ ---
235
+
236
+ ## 11. Cross-reference
237
+
238
+ - **Istilah teknis** (mis. "sha256", "manifest", "atomic re-clone") → buka `./.claude-kit/templates/ANALOGI_LIBRARY.md` untuk analogi sehari-hari.
239
+ - **Detail per versi** (apa berubah di v1.2.0 vs v1.3.0) → buka `./.claude-kit/CHANGELOG.md`.
240
+ - **Audit setelah update besar** → ikuti pattern di `./.claude-kit/CLAUDE_universal_v1.md` section 4.4 "Audit Post-Setup".
241
+ - **Aturan umum kerja AI-first** → `./.claude-kit/CLAUDE_universal_v1.md` (wajib baca tiap sesi).
242
+ - **Kalau bingung, chat AI**: "saya mau update lintasAI tapi tidak paham langkahnya" — AI guide step-by-step.
243
+
244
+ ---
245
+
246
+ > Dokumen ini bagian dari kit `lintasAI` v1.0.0 (commit d7284b1). Update guide ini sendiri ikut tier classification — kalau owner kit ubah strategy update, versi guide ini naik ke v2 dengan `[BREAKING]` label.
@@ -0,0 +1,110 @@
1
+ # docs/_EXAMPLE.md — Contoh Format `.md` Pendamping (REFERENSI)
2
+
3
+ > Versi 1 · 2026-05-31 · generic untuk semua proyek tim
4
+ > File ini SISTEM (prefix `_`) — referensi format, **jangan dihapus**.
5
+
6
+ ## Pengantar
7
+
8
+ File ini = **contoh konkret 1 file `.md` pendamping** yang ditulis sesuai format standar tim (`_PATTERNS.md` seksi 3). Pakai sebagai reference saat kamu (atau AI) buat `.md` pendamping baru — copy struktur, ganti isi sesuai modul aktual.
9
+
10
+ **Contoh di bawah = fiksional** (`users.ts` adalah file imajiner). Ini cuma reference format, bukan bagian dari proyekmu. Hapus atau biarkan — tidak akan mengganggu.
11
+
12
+ ---
13
+
14
+ ## CONTOH (mulai dari sini, copy & adapt)
15
+
16
+ ```markdown
17
+ # users.md — Modul User Management (CRUD + RBAC)
18
+
19
+ > Versi 1 · 2026-05-31 · auto-generated
20
+
21
+ ## Tujuan
22
+ Modul `users.ts` adalah **fasad CRUD untuk entitas user** di proyek ini. Tujuan utama: centralisasi semua operasi user (create / read / update / soft-delete) supaya validasi + audit log konsisten lintas endpoint. Cegah duplikasi query Prisma di banyak handler.
23
+
24
+ Konsumen: handler API (`/api/users/*`), background job (mis. cleanup user inactive), CLI seeding (`scripts/seed-users.ts`).
25
+
26
+ ## Cara Pakai
27
+
28
+ `​`​`ts
29
+ import { createUser, getUserById, updateUser, softDeleteUser } from "@/lib/users";
30
+
31
+ // Create — validasi schema + hash password + audit log otomatis
32
+ const user = await createUser({
33
+ email: "alice@example.com",
34
+ password: "plain-text-here", // di-hash di dalam, jangan hash sendiri
35
+ role: "MEMBER",
36
+ });
37
+
38
+ // Read — return null kalau tidak ada (jangan throw)
39
+ const u = await getUserById("user_123");
40
+
41
+ // Update — partial update, validasi schema, audit log delta
42
+ await updateUser("user_123", { role: "ADMIN" });
43
+
44
+ // Soft delete — set deletedAt, JANGAN hard delete (audit retention 90 hari)
45
+ await softDeleteUser("user_123", { actorId: currentUser.id });
46
+ `​`​`
47
+
48
+ ## Input / Output
49
+
50
+ - **`createUser(input: CreateUserInput): Promise<User>`**
51
+ - Input: `{ email: string, password: string, role: Role }`
52
+ - Output: `User` (tanpa field `password`)
53
+ - Throws: `ValidationError` kalau email duplicate / format invalid / password lemah
54
+
55
+ - **`getUserById(id: string): Promise<User | null>`**
56
+ - Input: `id` (string, format `user_<cuid>`)
57
+ - Output: `User` atau `null` (BUKAN throw kalau tidak ada)
58
+
59
+ - **`updateUser(id: string, patch: Partial<UserPatch>): Promise<User>`**
60
+ - Input: ID + partial patch object
61
+ - Output: User setelah update
62
+ - Throws: `NotFoundError` kalau ID tidak ada, `ValidationError` kalau patch invalid
63
+
64
+ - **`softDeleteUser(id: string, opts: { actorId: string }): Promise<void>`**
65
+ - Input: ID + actorId untuk audit
66
+ - Output: void
67
+ - Side effect: set `deletedAt = now()`, insert row `audit_log`
68
+
69
+ ## Dependensi
70
+
71
+ - **Library**:
72
+ - `@prisma/client` — query DB user table
73
+ - `bcrypt` — password hash (cost factor 12)
74
+ - `zod` — schema validation
75
+ - **Env**:
76
+ - `BCRYPT_COST` (opsional, default 12) — biaya bcrypt
77
+ - **File terkait**:
78
+ - `prisma.ts` — singleton Prisma client
79
+ - `audit.ts` — `logAction()` untuk write ke `audit_log` table
80
+ - `permissions.ts` — `requireRole()` kalau caller perlu RBAC check di luar
81
+ - DB: tabel `users`, `audit_log`
82
+
83
+ ## Catatan
84
+
85
+ - **Password hashing**: SELALU pakai `bcrypt.hash(password, BCRYPT_COST)` di dalam modul. JANGAN expose raw password compare ke caller — pakai `verifyPassword(plain, hash)` helper. Cegah timing attack: bcrypt sudah constant-time.
86
+ - **Soft delete bukan hard delete**: aturan compliance — semua user record retain 90 hari dengan `deletedAt` set. Hard delete cuma di cleanup job khusus (lihat `scripts/cleanup-deleted-users.ts`).
87
+ - **Email case-insensitive**: lookup pakai `.toLowerCase()` di query Prisma. Cegah Alice@x.com vs alice@x.com jadi 2 record.
88
+ - **Audit log wajib untuk mutation**: create/update/softDelete WAJIB insert ke `audit_log` table dengan `actorId` (siapa lakukan), `targetUserId` (siapa terdampak), `action` (string enum), `delta` (JSON diff).
89
+ - **Race condition email duplicate**: pakai DB unique constraint di kolom `email` + catch `PrismaClientKnownRequestError` code `P2002`. Jangan check-then-insert (race).
90
+ - Source code: `src/lib/users.ts:1` (entry), `src/lib/users.validation.ts:1` (zod schema).
91
+ ```
92
+
93
+ ---
94
+
95
+ ## Aturan saat copy contoh ini
96
+
97
+ 1. **Ganti `users.md` jadi nama modul aktual** (mis. `auth.md`, `invoices.md`).
98
+ 2. **Ganti semua placeholder fiksional** — `users.ts`, `User`, env var, dll.
99
+ 3. **Update `Versi` + tanggal** sesuai kenyataan.
100
+ 4. **Source code path WAJIB nyata** — jangan biarkan `src/lib/users.ts:1` kalau file aktual beda.
101
+ 5. **Pastikan max ~80 baris** (file ini contoh = lebih panjang karena ada explanation, tapi `.md` pendamping aktual cukup ringkas).
102
+ 6. **Update `architecture_auto.md`** setelah create — tambah 1 baris baru.
103
+
104
+ ---
105
+
106
+ ## Kenapa file ini ada?
107
+
108
+ Tim profesional = consistent format. Tanpa contoh konkret, tiap dev/AI bikin format beda → docs jadi messy + AI kebingungan saat baca. File `_EXAMPLE.md` ini = anchor format. Saat AI generate `.md` pendamping baru, AI baca file ini dulu sebagai reference.
109
+
110
+ Boleh dihapus kalau tim sudah hafal format. Default: **biarkan** — biaya 0, value tinggi untuk anggota baru.