@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,173 @@
1
+ # docs/_PATTERNS.md — Standar Dokumentasi Tim Profesional
2
+
3
+ > Versi 1 · 2026-05-31 · generic untuk semua proyek tim
4
+ > File ini SISTEM (prefix `_`) — auto-disertakan saat setup. Jangan dihapus, edit hati-hati.
5
+
6
+ ## Tujuan
7
+ File ini = **single source of truth** untuk cara tim ini menulis & me-maintain dokumentasi `.md` di folder `docs/`. Berlaku untuk SEMUA proyek (Next.js, Vue, Python, Go, dll). AI baca file ini di awal kerja docs untuk patuh ke konvensi tim, bukan pakai gaya improvisasi.
8
+
9
+ Untuk **format konkret per file `.md`** lihat `_EXAMPLE.md` (1 file contoh siap-pakai).
10
+
11
+ ---
12
+
13
+ ## 1. Kapan WAJIB ada file `.md` pendamping?
14
+
15
+ File kode dengan kondisi DI BAWAH ini WAJIB punya `docs/<basename>.md`:
16
+
17
+ | Kategori | Pattern (case-insensitive, glob) |
18
+ |---|---|
19
+ | **Auth** | `auth.*`, `*-auth.*`, `session.*`, `login.*`, `oauth.*`, `jwt.*` |
20
+ | **DB / Persistence** | `db.*`, `prisma.*`, `repository.*`, `schema.*`, `models/*` |
21
+ | **Security / Crypto** | `crypto.*`, `encrypt.*`, `permissions.*`, `*-guard.*`, `rate-limit.*` |
22
+ | **API / Router root** | `routes.*`, `controllers/*`, `handlers/*`, `api/*/route.*` |
23
+ | **Entry points** | `main.*`, `index.*`, `app.*`, `server.*`, `layout.*` |
24
+ | **Feature domain** | file kode di folder `features/<nama>/` atau `modules/<nama>/` dengan >1 fungsi publik |
25
+
26
+ **Tidak wajib** (boleh ada `.md` kalau mau, tapi tidak required):
27
+ - File util kecil 1-fungsi (`format-date.ts`, `pluralize.ts`).
28
+ - File component UI sederhana tanpa state kompleks.
29
+ - Test file (`*.test.ts`, `*.spec.ts`).
30
+ - Type-only file (`types.ts`, `*.d.ts`).
31
+
32
+ ---
33
+
34
+ ## 2. Lokasi & Naming
35
+
36
+ **Default**: semua `.md` flat di `docs/` (1 level).
37
+ - File pendamping: nama persis = basename file kode → `src/lib/auth.ts` → `docs/auth.md`.
38
+ - File sistem (kit-managed): prefix `_` → `_PATTERNS.md`, `_EXAMPLE.md`.
39
+ - File peta proyek (user-managed): `architecture.md` + `glossary.md`.
40
+ - Registry TOC (AI-managed): `architecture_auto.md`.
41
+
42
+ **Scaling rule (kalau `docs/` > 30 file)**: pakai subfolder grouping.
43
+ ```
44
+ docs/
45
+ ├── architecture.md (peta makro proyek, user-edit)
46
+ ├── architecture_auto.md (registry TOC, AI auto-maintain)
47
+ ├── glossary.md (kamus istilah)
48
+ ├── _PATTERNS.md (file ini)
49
+ ├── _EXAMPLE.md (contoh format `.md` pendamping)
50
+ ├── security/
51
+ │ ├── auth.md
52
+ │ ├── encryption.md
53
+ │ └── rate-limit.md
54
+ ├── api/
55
+ │ ├── routes.md
56
+ │ └── handlers.md
57
+ └── features/
58
+ ├── invoices.md
59
+ └── reports.md
60
+ ```
61
+ - AI baca `architecture_auto.md` dulu (lihat aturan READ-MINIMAL di seksi 4), tahu lokasi subfolder, baru cherry-pick file relevan.
62
+
63
+ ---
64
+
65
+ ## 3. Format wajib tiap file `.md` pendamping
66
+
67
+ ```markdown
68
+ # <basename>.md — <deskripsi singkat 1 baris>
69
+
70
+ > Versi 1 · <YYYY-MM-DD> · auto-generated (atau "user-written")
71
+
72
+ ## Tujuan
73
+ Untuk siapa & masalah apa yang diselesaikan. 1-3 kalimat. Bahasa Indonesia, junior-friendly.
74
+
75
+ ## Cara Pakai
76
+ Contoh pemanggilan singkat (code block kalau ada). Sebut "Dipakai di `<file>:<line>`" kalau diketahui.
77
+
78
+ ## Input / Output
79
+ - Input: parameter, tipe data.
80
+ - Output: return value, side effects, error yang bisa di-throw.
81
+
82
+ ## Dependensi
83
+ - Library: import signifikan.
84
+ - Env: env var yang dibaca.
85
+ - File terkait: file lain yang depend / dipakai.
86
+
87
+ ## Catatan
88
+ - Edge case dari source code.
89
+ - Keputusan penting / non-obvious behavior.
90
+ - Gotcha umum.
91
+ - Source code: `<path>:<line>`.
92
+ ```
93
+
94
+ **Aturan format:**
95
+ - Max ~80 baris per file (kalau lebih, pecah ke `<basename>-<subtopic>.md`).
96
+ - Bahasa Indonesia, definisikan jargon di pemunculan pertama.
97
+ - Jangan karang — `[TBD: <pertanyaan>]` kalau gak yakin.
98
+ - Selalu sertakan source path + line di "Catatan".
99
+ - Tidak boleh ada secret/credential plain di docs (mask: `DATABASE_URL=postgresql://***`).
100
+
101
+ Contoh konkret 1 file `.md` siap-pakai ada di `_EXAMPLE.md`.
102
+
103
+ ---
104
+
105
+ ## 4. Aturan AI behavior (4 aturan inti dari CLAUDE_universal_v1.md seksi 7)
106
+
107
+ **4.1 AUTO-SYNC** (seksi 7.1)
108
+ - Tiap edit code yang sudah ada `docs/<basename>.md` → AI WAJIB update `.md` di sesi yang sama (kalau perubahan substansial: signature publik, behavior, dependency, edge case baru).
109
+ - Update `architecture_auto.md` kalau ada `.md` baru/rename/hapus.
110
+
111
+ **4.2 LAZY-GENERATE** (seksi 7.2)
112
+ - Tiap buat/edit file kode CRITICAL (sesuai pattern di seksi 1 di atas) yang BELUM ada `.md` → AI **sugest** generate per-file, **tanya user dulu**. JANGAN bulk-auto.
113
+ - Default: per-file approval. Bulk-generate manual = paste `PROJECT_LIFECYCLE_PROMPT_v1.md` (Stage B: Bootstrap Docs) (on-demand tool).
114
+
115
+ **4.3 READ-MINIMAL** (seksi 7.3)
116
+ - Saat AI menerima task, baca `docs/architecture.md` DULU (peta makro), lalu `docs/architecture_auto.md` (registry TOC), baru cherry-pick `.md` relevan task.
117
+ - LARANGAN: jangan baca semua `docs/*.md` di awal sesi (boros token kalau folder besar).
118
+
119
+ **4.4 ARCHITECTURE REGISTRY** (seksi 7.4)
120
+ - `docs/architecture.md` = peta makro proyek, user-edited.
121
+ - `docs/architecture_auto.md` = registry TOC semua `.md` pendamping, AI auto-maintain (1 baris per file).
122
+ - Pisah supaya user-edit tidak konflik dengan AI auto-maintain.
123
+
124
+ ---
125
+
126
+ ## 5. Workflow update docs
127
+
128
+ **Saat AI edit code:**
129
+ 1. Cek apakah ada `docs/<basename>.md` → kalau ada DAN perubahan substansial → update.
130
+ 2. Commit code + `.md` bareng-bareng (1 commit boleh include keduanya).
131
+ 3. Update `docs/architecture_auto.md` kalau ada perubahan struktur (file baru, rename, hapus).
132
+
133
+ **Saat AI buat file kode CRITICAL baru:**
134
+ 1. Tanya user: "File `<basename>` kena pattern CRITICAL + belum ada `docs/<basename>.md` — generate sekarang? (y/n)"
135
+ 2. Kalau "y" → generate pakai format seksi 3.
136
+ 3. Kalau "n" → opsional catat di `architecture_auto.md` section "Pending docs".
137
+
138
+ **Saat user paste `PROJECT_LIFECYCLE_PROMPT_v1.md` (Stage C: Update Docs):**
139
+ - Bulk audit semua `.md` vs git log → lapor mana yang outdated → user pilih per-file refresh.
140
+
141
+ **Saat user paste `PROJECT_LIFECYCLE_PROMPT_v1.md` (Stage B: Bootstrap Docs):**
142
+ - On-demand bulk-generate untuk proyek lama yang banyak file CRITICAL tanpa `.md`. Interactive — wajib konfirmasi sebelum write.
143
+
144
+ ---
145
+
146
+ ## 6. Anti-pattern (HINDARI)
147
+
148
+ - ❌ Bulk auto-generate banyak `.md` sekaligus tanpa per-file approval (kecuali user paste BOOTSTRAP prompt).
149
+ - ❌ Baca semua `docs/*.md` di awal sesi tanpa filter.
150
+ - ❌ Overwrite `.md` existing tanpa user explicit minta.
151
+ - ❌ Skip update `architecture_auto.md` saat tambah/hapus `.md`.
152
+ - ❌ Karang isi `.md` tanpa baca source code (selalu traceable ke `<path>:<line>`).
153
+ - ❌ Tulis `.md` dalam Bahasa Inggris (kecuali override khusus proyek di `AGENTS.md`).
154
+ - ❌ Embed secret/credential plain di `.md` (selalu mask).
155
+
156
+ ---
157
+
158
+ ## 7. Opt-in hooks (opsional, per proyek)
159
+
160
+ Aktifkan di `AGENTS.md` proyek section "Override khusus proyek":
161
+
162
+ - **Pre-commit hook** — git hook yang block commit kalau edit `src/lib/*.ts` tanpa edit `docs/*.md` pendamping. Tool: husky, pre-commit, lefthook. Tambah di `package.json` scripts.
163
+ - **CI lint** — workflow GitHub Actions yang fail kalau `architecture_auto.md` outdated vs `docs/` actual files.
164
+ - **Auto-versioning header** — script `docs:bump` yang naikkan `Versi X · <tanggal>` di header `.md` saat update.
165
+
166
+ Default kit: **tidak aktif** — friction setup tinggi untuk solo/junior. Aktifkan kalau tim sudah disiplin.
167
+
168
+ ---
169
+
170
+ ## 8. Riwayat update aturan
171
+ | Versi | Tanggal | Ringkasan |
172
+ |---|---|---|
173
+ | 1 | 2026-05-31 | Inisialisasi standar dokumentasi tim. |
@@ -0,0 +1,180 @@
1
+ # docs/architecture.md — Peta Proyek `<NAMA_PROYEK>`
2
+ > Versi 1 · `[TBD: tanggal hari ini, format YYYY-MM-DD]`
3
+
4
+ ## Pengantar
5
+ File ini adalah **peta proyek 1-halaman**. Dibaca sekali di awal sesi (oleh AI atau dev baru) untuk paham struktur tanpa harus jelajah repo. Update **tiap kali** ada perubahan signifikan: tambah modul, ganti stack, ubah ENV, atau ubah konvensi. Bukan dokumentasi mendalam — detail teknis tetap di file `.md` masing-masing fitur di folder `docs/`.
6
+
7
+ Semua dokumentasi proyek ditulis dalam **Bahasa Indonesia** (konsisten dengan `CLAUDE.md` global). File ini = peta makro proyek; kamus istilah ada di `docs/glossary.md`; registry semua `.md` pendamping (auto-maintained AI) ada di `docs/architecture_auto.md`.
8
+
9
+ ---
10
+
11
+ ## Tujuan Proyek
12
+ [TBD: 2-3 kalimat. Apa yang dibangun? Untuk siapa? Masalah apa yang diselesaikan?]
13
+
14
+ Contoh terisi: *"Aplikasi internal manajemen invoice untuk tim finance UKM. Menggantikan workflow Excel + email yang error-prone. Target user: 5-20 staff finance per tenant."*
15
+
16
+ ---
17
+
18
+ ## Stack
19
+ - **Bahasa utama**: [TBD: mis. TypeScript 5.4 / Python 3.12 / Go 1.22 / Dart 3.5]
20
+ - **Framework**: [TBD: lihat templates/STACK_VERSIONS.md untuk versi recommended]
21
+ - **Runtime / Build**: [TBD: mis. Node 20 LTS / Bun 1.1 / uv / go build]
22
+ - **UI / Styling**: [TBD: mis. Tailwind 4 + shadcn/ui / Jinja2 / Material 3]
23
+ - **DB / ORM**: [TBD: mis. PostgreSQL 16 + Prisma 5 / SQLAlchemy 2 / sqlc]
24
+
25
+ ---
26
+
27
+ ## Struktur Folder
28
+ <!-- Tree di bawah contoh proyek Node. Untuk Python/Go/Dart, ganti sesuai konvensi bahasa (mis. `cmd/`, `internal/`, `lib/`). -->
29
+ ```text
30
+ <root>/
31
+ ├── src/ // source code utama
32
+ ├── public/ // aset statis (gambar, favicon)
33
+ ├── docs/ // dokumentasi per-modul + architecture.md ini
34
+ ├── prisma/ // skema DB & migrasi [hapus kalau tidak pakai Prisma]
35
+ ├── tests/ // unit & integration test
36
+ ├── scripts/ // skrip operasional (seed, backup, dll)
37
+ ├── .env.example // template ENV (jangan commit .env asli!)
38
+ └── package.json // (atau pyproject.toml / go.mod / pubspec.yaml)
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Entry Points
44
+ - **App utama**: [TBD: mis. `src/app/layout.tsx` (Next.js App Router) / `main.py` / `cmd/server/main.go` / `lib/main.dart`]
45
+ - **Halaman pertama**: [TBD: mis. `src/app/page.tsx` / route `"/"`]
46
+ - **Background worker / cron**: [TBD: mis. `src/workers/index.ts`. Kosongkan kalau tidak ada]
47
+
48
+ ---
49
+
50
+ ## Modul Inti
51
+ <!-- Isi 5-10 modul paling sering disentuh. Hapus baris contoh sebelum commit. -->
52
+ | Modul | Lokasi | Tujuan | Dependensi Utama |
53
+ |---|---|---|---|
54
+ | `<nama-modul-1>` | `<path>` | [TBD: tujuan singkat 1 baris] | [TBD: lib utama] |
55
+ | `<nama-modul-2>` | `<path>` | [TBD] | [TBD] |
56
+
57
+ ---
58
+
59
+ ## Dependensi Utama
60
+ <!-- Hanya library signifikan (5-10), bukan dump package.json. Sertakan alasan dipakai. -->
61
+ - **`<lib-1>`** — [TBD: 1 baris alasan. Contoh: *"Prisma — ORM type-safe, auto-generate types dari schema"*]
62
+ - **`<lib-2>`** — [TBD]
63
+
64
+ ---
65
+
66
+ ## Environment Variables
67
+ <!-- JANGAN tulis nilai asli. Selalu pakai contoh format / placeholder. -->
68
+ **Loader**: `.env.local` (dev) → `<platform>` dashboard (prod, mis. Vercel/Railway/Fly). Template: `.env.example` di root.
69
+
70
+ | Nama | Wajib? | Tujuan | Contoh Format |
71
+ |---|---|---|---|
72
+ | `DATABASE_URL` | ya | Koneksi DB utama | `postgresql://user:pass@host:5432/db` |
73
+ | `<NAMA_ENV_2>` | [ya/tidak] | [TBD] | [TBD] |
74
+
75
+ ---
76
+
77
+ ## Skrip & Perintah
78
+ <!-- Contoh di bawah Node. Ganti sesuai stack. -->
79
+ - `npm run dev` — server dev (hot reload) di port 3000 *(Python: `uv run dev` · Go: `go run ./cmd/server`)*
80
+ - `npm run build` — build production
81
+ - `npm run test` — jalankan unit test
82
+ - `npx prisma migrate dev` — bikin & apply migrasi DB lokal
83
+ - [TBD: skrip spesifik proyek — seed, lint, deploy, dll]
84
+
85
+ ---
86
+
87
+ ## Sumber Data Eksternal
88
+ - **Database utama**: [TBD: mis. *"Supabase Postgres (shared dev + prod, lihat `docs/db.md`)"*]
89
+ - **API eksternal**: [TBD: mis. *"Stripe (payment), Resend (email). Config client di `src/lib/clients/`"*]
90
+ - **Cache / Queue**: [TBD: mis. Redis Upstash, atau *"tidak pakai"*]
91
+ - **Storage file**: [TBD: mis. Supabase Storage bucket `<nama-bucket>`]
92
+
93
+ ---
94
+
95
+ ## Deploy & CI
96
+ - **Hosting**: [TBD: mis. Vercel (frontend) + Supabase (DB) / Railway / VPS DigitalOcean]
97
+ - **Branch auto-deploy**: [TBD: mis. `main` → production, `staging` → preview]
98
+ - **CI / Quality gate**: [TBD: mis. GitHub Actions — lint + test wajib hijau sebelum merge]
99
+ - **Rollback**: [TBD: mis. Vercel dashboard → Deployments → Promote previous]
100
+
101
+ ---
102
+
103
+ ## Deployment & Release Strategy
104
+
105
+ ### Alur Deploy
106
+
107
+ ```
108
+ branch (feat/*, fix/*)
109
+ → PR di GitHub
110
+ → Vercel Preview Deploy (auto, ~1-3 menit)
111
+ → Review (owner + AI Reviewer bot)
112
+ → Squash Merge ke main
113
+ → Vercel Production Deploy (auto, ~2-5 menit)
114
+ ```
115
+
116
+ `main` = production. Tidak ada manual "promote to production" — merge ke main = langsung deploy.
117
+
118
+ ### Risk Level Strategy (Default — Staging-Only)
119
+
120
+ Default workflow tim TIDAK pakai feature flag. Tiap task diklasifikasi by Risk Level:
121
+
122
+ - **🟢 Low**: UI minor, copy edit, refactor internal — review cepat, merge, deploy.
123
+ - **🟡 Medium**: Fitur baru self-contained — test extensive di Vercel preview sebelum merge.
124
+ - **🔴 High**: Sentuh auth/billing/schema-user-visible/destruktif/eksperimental — owner HOLD MERGE sampai yakin, smoke test prod 5+ menit setelah deploy.
125
+
126
+ Decision tree lengkap: `./.claude-kit/templates/CLAUDE_TEAM_GUIDE.md` section 7b.
127
+
128
+ Feature flag = ADVANCED option (post-launch only): `./.claude-kit/templates/feature-flags-advanced.md`.
129
+
130
+ ### Rollback Strategy
131
+
132
+ Target time-to-rollback **<5 menit** via git revert:
133
+ ```
134
+ git revert HEAD && git push
135
+ ```
136
+ Vercel auto-deploy versi sebelumnya 2-5 menit.
137
+
138
+ Playbook lengkap: `./.claude-kit/templates/CLAUDE_TEAM_GUIDE.md` section 13b.
139
+
140
+ ### Database Backup
141
+
142
+ - Supabase Daily Auto-Backup: aktif, retention 7 hari (Dashboard → Database → Backups).
143
+ - Manual snapshot WAJIB sebelum approve PR yang sentuh migrasi Prisma.
144
+
145
+ ---
146
+
147
+ ## Testing & Quality Gates
148
+ - **Framework test**: [TBD: mis. Vitest / Jest / pytest / go test]
149
+ - **Coverage minimum**: [TBD: mis. 60% pada folder `src/lib/`, atau *"belum di-enforce"*]
150
+ - **Lint / format**: [TBD: mis. ESLint + Prettier, wajib lewat pre-commit hook]
151
+ - **Pre-push check**: [TBD: mis. `npm run check` (lint + typecheck + test)]
152
+
153
+ ---
154
+
155
+ ## Konvensi Penting
156
+ <!-- 3-7 aturan yang KALAU dilanggar = bug atau inkonsistensi. Hapus contoh, isi sesuai proyek. -->
157
+ - [TBD: contoh konvensi route — mis. *"semua handler API harus pakai middleware auth wrapper di `src/lib/<helper>.ts`"*]
158
+ - [TBD: penamaan file — lihat `docs/glossary.md` section "Aturan Penamaan"]
159
+ - [TBD: pola error handling — mis. *"selalu return `{ ok: false, error }` dari API, jangan throw"*]
160
+ - [TBD: format commit — mis. Conventional Commits (`feat:`, `fix:`, `refactor:`)]
161
+
162
+ ---
163
+
164
+ ## Dokumen Terkait
165
+ File lain di folder `docs/` yang melengkapi INDEX ini:
166
+
167
+ | File | Fungsi |
168
+ |---|---|
169
+ | `glossary.md` | Kamus istilah domain, role, status, & aturan penamaan |
170
+ | `<fitur-1>.md` | [TBD: mis. `auth.md` — detail flow login, session, RBAC] |
171
+ | `<fitur-2>.md` | [TBD: mis. `db.md` — skema DB, konvensi migrasi, ERD] |
172
+
173
+ > Aturan dokumentasi: tiap fitur/modul baru wajib punya `.md` pendamping (lihat `CLAUDE.md` global section 4).
174
+
175
+ ---
176
+
177
+ ## Riwayat Perubahan
178
+ | Versi | Tanggal | Author | Ringkasan |
179
+ |---|---|---|---|
180
+ | 1 | `[TBD: YYYY-MM-DD]` | `<nama/handle>` | Inisialisasi architecture.md |
@@ -0,0 +1,61 @@
1
+ # docs/architecture_auto.md — Registry semua file .md pendamping (TOC)
2
+
3
+ > Versi 1 · 2026-05-31 · **AUTO-MAINTAINED OLEH AI**
4
+ > Aturan: `CLAUDE_universal_v1.md` seksi 7.4 ARCHITECTURE REGISTRY
5
+
6
+ ## Pengantar
7
+
8
+ File ini adalah **registry/TOC semua file `.md` pendamping** di folder `docs/`. Tujuannya: AI baca file ini DULU di awal sesi untuk tahu apa yang available, lalu cherry-pick `.md` spesifik sesuai task — **bukan baca semua `docs/*.md`** (cegah boros token saat docs membesar).
9
+
10
+ **Maintainer**: AI auto-maintain. Tiap kali AI tambah / rename / hapus `.md` pendamping (lewat AUTO-SYNC atau LAZY-GENERATE), file ini WAJIB ter-update di sesi yang sama.
11
+
12
+ **Pisah dari `architecture.md`** (yang user-edited): supaya user-edit peta makro tidak konflik dengan AI auto-maintain registry.
13
+
14
+ ---
15
+
16
+ ## Format entri
17
+
18
+ `- [<filename>.md](<path>) — <summary singkat 1 baris, max 80 karakter>`
19
+
20
+ Contoh:
21
+ ```
22
+ - [auth.md](auth.md) — Modul autentikasi (login + session + RBAC)
23
+ - [security/encryption.md](security/encryption.md) — AES-GCM credential vault
24
+ ```
25
+
26
+ ---
27
+
28
+ ## Top-level (`docs/*.md`)
29
+
30
+ <!-- AI tambah baris baru di sini tiap LAZY-GENERATE / BOOTSTRAP -->
31
+ <!-- Format: - [<filename>](<path>) — <summary> -->
32
+
33
+ *(Belum ada `.md` pendamping. Kalau buat file kode CRITICAL, AI akan tawarkan LAZY-GENERATE — terima dengan "y" → entri muncul di sini otomatis.)*
34
+
35
+ ---
36
+
37
+ ## Subfolder (kalau scale > 30 file)
38
+
39
+ <!-- Hanya muncul kalau docs/ sudah pakai subfolder grouping (security/, api/, features/). -->
40
+ <!-- AI auto-add section per subfolder + list file di dalamnya. -->
41
+
42
+ *(Tidak ada subfolder. Default flat di `docs/` sampai docs > 30 file — baru pakai grouping.)*
43
+
44
+ ---
45
+
46
+ ## Pending docs (LAZY-GENERATE skipped)
47
+
48
+ <!-- File kode CRITICAL yang user skip generate. AI tawarin lagi saat sentuh file di sesi berikutnya. -->
49
+ <!-- Format: - <source-path> — kena pattern <kategori>, user skip pada <tanggal> -->
50
+
51
+ *(Belum ada — bagian ini terisi otomatis kalau user pilih "n" saat AI sugest LAZY-GENERATE.)*
52
+
53
+ ---
54
+
55
+ ## Riwayat update registry
56
+
57
+ | Tanggal | Aksi | Catatan |
58
+ |---|---|---|
59
+ | 2026-05-31 | Inisialisasi | Skeleton (registry TOC kosong, AI auto-update saat ada `.md` baru). |
60
+
61
+ <!-- AI tambah baris baru tiap update registry (file baru / rename / hapus). -->
@@ -0,0 +1,108 @@
1
+ # decisions/ — Architecture Decision Records (ADR)
2
+
3
+ > Folder ini menyimpan **catatan keputusan teknis non-sepele** yang diambil di proyek.
4
+ > Tujuannya: kalau 6 bulan lagi ada yang tanya "kenapa dulu pilih X bukan Y?", jawabannya ada di sini — bukan di kepala satu orang.
5
+
6
+ ---
7
+
8
+ ## Apa itu ADR?
9
+
10
+ **ADR (Architecture Decision Record)** = dokumen pendek 1-2 halaman yang mencatat:
11
+ - **Context** — masalah apa yang dihadapi
12
+ - **Decision** — keputusan apa yang diambil
13
+ - **Konsekuensi** — trade-off (pros, cons, risk)
14
+
15
+ Format lengkap ada di [`_TEMPLATE.md`](./_TEMPLATE.md) — copy file itu tiap bikin ADR baru.
16
+
17
+ ---
18
+
19
+ ## Naming convention
20
+
21
+ Nama file: **`ADR-<NNN>-<slug-kebab-case>.md`**
22
+
23
+ Contoh nyata:
24
+ - `ADR-001-pilih-prisma-vs-drizzle.md`
25
+ - `ADR-002-pakai-nextauth-untuk-staff-portal.md`
26
+ - `ADR-003-supabase-rls-policy-per-tenant.md`
27
+ - `ADR-004-vercel-serverless-vs-self-hosted-vps.md`
28
+
29
+ Aturan slug:
30
+ - huruf kecil semua
31
+ - pisah dengan `-` (kebab-case)
32
+ - maksimal ~6 kata, ringkas tapi jelas
33
+
34
+ ---
35
+
36
+ ## Numbering rule
37
+
38
+ - **Sequential:** mulai dari `001`, naik 1 tiap ADR baru (`002`, `003`, ...).
39
+ - **Never reuse:** kalau ADR-005 di-deprecate / di-supersede, **jangan** pakai ulang nomor 005 untuk ADR berbeda. Biarkan tetap ada, tambahkan ADR baru di nomor terbaru.
40
+ - **Padding 3 digit:** pakai `001` bukan `1`, supaya sort by name tetap urut sampai ADR ke-999.
41
+
42
+ ---
43
+
44
+ ## Kapan bikin ADR? (LAZY-DECISION pattern)
45
+
46
+ Ikut prinsip **LAZY-DECISION**: jangan bikin ADR untuk tiap keputusan kecil — cuma yang **non-sepele** dan **susah di-rollback**.
47
+
48
+ AI di kit ini akan **sugest otomatis** "ini decision teknis non-sepele, masuk `decisions/`? y/n" saat mendeteksi salah satu trigger berikut:
49
+
50
+ ### Trigger wajib sugest ADR
51
+
52
+ 1. **Ganti library/framework inti** — mis. ganti ORM (Prisma -> Drizzle), ganti auth provider (NextAuth -> Clerk), ganti UI lib.
53
+ 2. **Ganti arsitektur** — mis. monolith -> microservice, REST -> tRPC, SSR -> ISR, pindah dari Vercel ke VPS.
54
+ 3. **Ganti DB schema fundamental** — mis. ubah primary key strategy, denormalisasi tabel besar, tambah multi-tenancy.
55
+ 4. **Ganti auth strategy** — mis. tambah RLS policy, pindah session-based -> JWT, tambah RBAC layer.
56
+ 5. **Ganti infrastructure** — mis. ganti hosting, ganti DB provider, tambah message queue, tambah cache layer (Redis).
57
+ 6. **Trade-off security vs UX** yang signifikan — mis. relax CORS, pakai service-role key di client.
58
+
59
+ ### Bukan trigger ADR (cukup commit message + docs biasa)
60
+
61
+ - Rename variable / refactor kecil
62
+ - Tambah komponen UI baru
63
+ - Bug fix
64
+ - Tambah env var
65
+ - Update dependency minor/patch
66
+
67
+ ---
68
+
69
+ ## Status lifecycle
70
+
71
+ ADR punya 4 status. Selalu update di file kalau berubah.
72
+
73
+ | Status | Artinya |
74
+ |---------------|--------------------------------------------------------------------------|
75
+ | `Proposed` | Draft, belum disetujui. Masih bisa diubah / dibatalkan. |
76
+ | `Accepted` | Disetujui & sedang/sudah diimplementasi. Default state setelah merge. |
77
+ | `Deprecated` | Tidak dipakai lagi, tapi belum ada penggantinya. Catat alasan. |
78
+ | `Superseded by ADR-YYY` | Digantikan ADR lain. **Wajib** cantumkan nomor ADR pengganti. |
79
+
80
+ **Aturan:** kalau ADR di-supersede, **jangan hapus file lama** — biarkan sebagai riwayat. Cuma update field `Status` di header.
81
+
82
+ ---
83
+
84
+ ## Contoh alur pakai
85
+
86
+ 1. User minta: "ganti Prisma ke Drizzle".
87
+ 2. AI deteksi trigger #1 (ganti library inti) -> sugest: "ini decision non-sepele, bikin ADR di `docs/decisions/`? y/n".
88
+ 3. User: `y`.
89
+ 4. AI copy `_TEMPLATE.md` -> `ADR-001-pilih-prisma-vs-drizzle.md`.
90
+ 5. AI isi Context + Decision + Alternatif + Konsekuensi berdasarkan diskusi.
91
+ 6. Commit bersama PR implementasi.
92
+ 7. Kalau nanti di-rollback ke Prisma -> bikin `ADR-007-rollback-ke-prisma.md` + update ADR-001 status jadi `Superseded by ADR-007`.
93
+
94
+ ---
95
+
96
+ ## FAQ
97
+
98
+ **Q: Bedanya ADR vs comment di code vs commit message?**
99
+ A: Commit message jelasin "apa yang berubah". Comment di code jelasin "gimana cara kerjanya". **ADR jelasin "kenapa pilih ini, bukan yang lain"** — konteks bisnis + trade-off yang tidak muat di commit.
100
+
101
+ **Q: ADR harus panjang?**
102
+ A: Tidak. 1 halaman cukup. Yang penting **Context + Decision + Konsekuensi** terisi jujur. Lebih baik 1 halaman jujur daripada 5 halaman basa-basi.
103
+
104
+ **Q: Boleh edit ADR yang sudah `Accepted`?**
105
+ A: Boleh, tapi **append-only** di tabel Riwayat. Jangan rewrite history — itu menghilangkan jejak audit.
106
+
107
+ **Q: ADR ditulis sebelum atau sesudah implementasi?**
108
+ A: Idealnya **sebelum** (sebagai proposal). Tapi kalau decision sudah terlanjur diimplementasi, tetap tulis ADR retroaktif — lebih baik telat daripada tidak ada.
@@ -0,0 +1,84 @@
1
+ # ADR-XXX: <Judul Singkat Decision>
2
+
3
+ > Ganti `XXX` dengan nomor urut (001, 002, ...). Judul ringkas, gaya kalimat aktif.
4
+ > Contoh nama file: `ADR-001-pilih-prisma-vs-drizzle.md`
5
+
6
+ ---
7
+
8
+ ## Metadata
9
+
10
+ - **Tanggal:** YYYY-MM-DD <!-- tanggal decision diambil, bukan tanggal draft -->
11
+ - **Status:** Proposed <!-- Proposed | Accepted | Deprecated | Superseded by ADR-YYY -->
12
+ - **Author:** <nama / handle / email> <!-- siapa yang mengusulkan -->
13
+ - **Reviewer:** <opsional — siapa yang ikut menyetujui> <!-- kosongkan kalau solo -->
14
+
15
+ ---
16
+
17
+ ## Context
18
+
19
+ > Jelaskan **kenapa** decision ini diperlukan. Tulis seperti cerita singkat ke developer baru.
20
+
21
+ - **Problem statement:** masalah konkret yang sedang dihadapi (1-3 kalimat).
22
+ - **Constraints:** batasan yang memaksa decision ini (budget, deadline, stack existing, skill tim, regulasi).
23
+ - **Asumsi:** hal yang dianggap benar saat decision diambil (penting buat audit di masa depan kalau asumsi berubah).
24
+
25
+ ---
26
+
27
+ ## Decision
28
+
29
+ > Keputusan **apa** yang diambil. Tulis tegas — bukan "mungkin akan pakai X", tapi "pakai X".
30
+
31
+ Contoh: "Pakai Prisma sebagai ORM untuk semua akses DB di sisi server."
32
+
33
+ Kalau perlu, sertakan diagram singkat / pseudo-flow / contoh konfigurasi.
34
+
35
+ ---
36
+
37
+ ## Alternatif yang Ditolak
38
+
39
+ > List opsi lain yang sempat dipertimbangkan + **alasan ditolak**. Bukan untuk gengsi-gengsian, tapi supaya developer di masa depan tahu "ini sudah pernah dipikirkan".
40
+
41
+ - **Alternatif A — <nama>:** ditolak karena <reason singkat>.
42
+ - **Alternatif B — <nama>:** ditolak karena <reason singkat>.
43
+ - **Alternatif C — <nama>:** ditolak karena <reason singkat>.
44
+
45
+ ---
46
+
47
+ ## Konsekuensi
48
+
49
+ > Trade-off real dari decision ini. **Jujur** — kalau ada cons, tulis. Jangan jualan.
50
+
51
+ ### Pros
52
+ - <keuntungan 1>
53
+ - <keuntungan 2>
54
+
55
+ ### Cons
56
+ - <kerugian 1>
57
+ - <kerugian 2>
58
+
59
+ ### Risk
60
+ - <risiko teknis / bisnis / operasional yang harus dipantau ke depan>
61
+ - <mitigasi singkat kalau ada>
62
+
63
+ ---
64
+
65
+ ## Implementation Notes
66
+
67
+ > Opsional. Isi kalau decision ini sudah / sedang diimplementasi.
68
+
69
+ - **PR terkait:** <link PR / commit hash>
70
+ - **File yang berubah:** <path utama, mis. `prisma/schema.prisma`, `lib/db.ts`>
71
+ - **Migration plan:** <kalau breaking — langkah migrasi data / kode lama>
72
+ - **Rollback plan:** <kalau decision gagal — cara balik ke state sebelumnya>
73
+
74
+ ---
75
+
76
+ ## Riwayat
77
+
78
+ > Diisi **hanya kalau ADR ini direvisi** setelah Accepted. Append-only, jangan hapus entry lama.
79
+
80
+ | Tanggal | Status | Oleh | Catatan |
81
+ |-------------|-------------------|--------------|---------------------------------------------------------------|
82
+ | YYYY-MM-DD | Proposed | <author> | Draft awal |
83
+ | YYYY-MM-DD | Accepted | <reviewer> | Disetujui setelah diskusi tim |
84
+ | YYYY-MM-DD | Superseded | <author> | Digantikan ADR-YYY karena <reason> |