Apa yang berubah
Kantor v1 hidup di markdown yang disunting tangan. Graph-nya nol konsisten, role lambat membaca. Kantor v2 memindahkan sumber hukum ke Postgres di VPS. Markdown yang lu baca sekarang adalah hasil render, bukan sumber.
| Hal | v1 (sampai 1 Sep 2026) | v2 (sejak 2 Sep 2026) |
|---|---|---|
| sumber hukum | markdown di repo kantor | tabel node dan sisi di Postgres, dengan gerbang |
| cara baca | buka file | render/ di folder kantor, klon baca saja dari render.git VPS |
| cara tulis | sunting markdown | API lewat node.py dan klaim.py; hukum lewat Arsiparis |
| tiket | ClickUp saja | ClickUp tetap papan, antrean DB memberi klaim, sewa, heartbeat, gerbang scope |
| scope | SoW dan FRD di kepala PM, sering kelupaan | node sow/<lane> dan frd/<lane>; EPIC tanpa D-nn atau User Story tanpa FR-nn ditolak |
| branch | bebas, menumpuk (179 di ALX-TCG) | maks 10 branch tiket/* hidup; merge = hapus |
| markdown lama | aktif | _arsip-v1/, beku, baca boleh |
| role baru | nol | Arsiparis: satu-satunya pena untuk hukum, role, playbook, putusan, lane, pengaturan |
Prasyarat di Mac
Lima hal. Empat pertama terpasang 2 Sep 2026, kelima 4 Sep; ini cara memeriksanya. Role menjalankan langkah 3 sendiri di protokol pembuka.
- Tailscale Mac nyala. API dan DB hanya terbuka di alamat tailnet. Mati = semua tulis gagal, render lokal tetap terbaca.
tailscale status | head -3 # kalau mati: tailscale up --timeout=20s --accept-routes ~/.kantor/envada, chmod 600. IsinyaAPI_URL,KANTOR_DIR,RENDER_DIR, danTOKEN_<ROLE>. Script membacanya sendiri. Nol pernahcat.ls -l ~/.kantor/env # -rw------- = benar- Render terbaru. Hook prompt menarik otomatis bila tertinggal. Tarik tangan kapan saja:
cd ~/Downloads/0000-ersapta-office bash kantor-v2/mac/tarik-render.sh # mencetak STEMPEL: sync_seq, node, akar, tiket - Pemantau hidup. launchd
com.ersapta.kantor.cek-vpsmemeriksa API tiap 5 menit dan menulis status.cat ~/.kantor/status.json tail -3 ~/.kantor/cek-vps.log - Peluncur kursi.
kantor-v2/mac/kantor.shplus aliaskantordi~/.zshrc(4 Sep 2026).kantor it-lead CS=claude --autocompact 200k --effort ultracode -n it-lead-CS;kantor pm= 300k; kursi lain hanya effort dan nama. Bendera berlaku per tab, bukan per skill, karena semua kursi hidup di satu folder.KANTOR_DRY=1 kantor it-lead CS # cetak perintah claude tanpa meluncurkan
Membuka sesi role
Selalu dari folder kantor. Satu sesi = satu role. IT Lead satu sesi satu lane (lane-lock); PM dan Designer satu sesi semua lane, nol lane-lock. Lane kedua = tab IT Lead baru.
cd ~/Downloads/0000-ersapta-office
claude # atau codex; keduanya membaca aturan yang sama (CLAUDE.md, AGENTS.md)
Lalu panggil kursinya. Tiap role menjalankan protokol pembuka sendiri: tarik render, baca render/akar/<akar>/PAKET.md, klaim tiket bila role produksi.
| perintah | kursi | membaca | boleh menulis |
|---|---|---|---|
| /ceo | CEO | paket ceo, state/org, pemicu penawaran | state/org, jurnal ceo/*, usulan putusan |
| /pm | PM semua lane | paket pm, state/* semua lane, sow/<lane>, frd/<lane>, proyek/<lane> yang dibahas | sow/<lane>, frd/<lane>, state/<lane>, jurnal pm/*, tiket: masuk, selesai, buka-ulang, matikan, putus, tutup |
| /it-lead <LANE> | IT Lead | paket it-lead, tiket yang diklaim | klaim, heartbeat, review, jurnal it-lead/*. Kerja di worktree repo project, bukan di folder kantor |
| /designer | Designer, semua lane | paket desainer, hukum desain | klaim Task desain lane mana pun, review, jurnal |
| /konten | Content, semua lane | paket konten, jurnal semua role hari itu, putusan baru, state/konten | state/konten (bank ide, log terbit), jurnal konten/*. Nol tiket, nol sinyal, nol browser ke platform |
| /sales (tagihan) | Sales | GET /tagihan: Task selesai klien per hari (WIB), estimasi, waktu nyata | menit_tagih lewat tiket_tagih (batas terbesar dari estimasi dan waktu nyata, alasan wajib bila di atas estimasi), kunci lewat tagihan_kunci. Sheet klien = turunan |
| /ceo, /sales (data Upwork) | CEO, Sales | MCP Upwork (masuk sebagai akun Sapta): proposal, job, profil, pesan, kontrak | sinyal pasar, jurnal. Nol Playwright atau Firecrawl ke upwork.com, nol minta Sapta login |
| /sales | Sales | paket sales, jurnal/proof/lembar-bukti | sinyal pasar (POST /sinyal), jurnal sales/* |
| /arsiparis | Arsiparis | paket arsiparis | semua node: hukum, role, playbook, putusan, lane baru, pengaturan (hanya dengan ketok lu) |
Lane sah (10): CS, HP, ALX-TCG, ASF, BIP-ERP, WSMPP, CPP, DLPP, YETPP, RAACEPP. Di luar itu ditolak. Lane baru lewat Arsiparis.
state dan jurnal; PM juga sow dan frd per lane. Kalau sebuah sesi ingin mengubah hukum, dia menulis USULAN HUKUM: di jurnalnya dan lu buka /arsiparis.Alur satu tiket, ujung ke ujung
Perintah di bawah dijalankan role (PM, IT Lead), bukan Sapta. Jalur ini menutup jebakan 30 persen dan kasus 179 branch: SoW dan FRD sebelum tiket, kriteria selesai sebelum kode, ukuran Task dibatasi, branch hilang saat merge.
- Lu lempar kebutuhan mentah ke
/pm, sebut lane-nya. PM memperkecil scope: SoW, FRD, EPIC, User Story, Task. Kriteria terima milestone ditulis SEBELUM bangun. Kriteria itu yang lu bawa ke klien sampai align. - PM mengecek SoW dan FRD lane itu, lalu mendiagnosa dampak. Dua node per lane, pena PM:
sow/<lane>(deliverable D-nn, change request) danfrd/<lane>(kebutuhan FR-nn). Request di luar D-nn = change request, menunggu ketok lu. FR berubah =dampakdulu, baru tiket disentuh.PM="python3 kantor-v2/antrean/klaim.py --role pm" python3 kantor-v2/mac/node.py --role pm dok-baru sow CS --file sow.md # pertama kali, dari templat/sow python3 kantor-v2/mac/node.py --role pm tulis frd/cs --file frd.md # perbarui FRD: FR baru atau berubah $PM dampak --lane CS --rujuk FR-07 # tiket hidup yang terganggu bila FR-07 berubah $PM cakupan --lane CS # D-nn dan FR-nn yang belum punya tiket - PM menulis di ClickUp, bahasa Inggris. Pakai skill
clickup-ops. Judul dan deskripsi Inggris (klien membacanya). EPIC di root WBS bernamaNNNN EPIC LANE: outcome, nomor berurut empat digit. Task wajib memuatDone when:(min 20 karakter) danEstimate: <minutes>(5 sampai 90). User Story memuatRefs: FR-nn, EPIC memuatRefs: D-nn. Bentuk lamaSelesai bila:danRujuk:masih dikenali gerbang. Lebih dari 90 menit = pecah. - PM memasukkan ke antrean. Urutan wajib epic, story, task. Task tanpa User Story induk ditolak; EPIC tanpa D-nn di SoW dan User Story tanpa FR-nn di FRD ditolak. Contoh lane CS:
$PM masuk --clickup-id <id epic> --lane CS --judul "..." --jenis epic --rujuk D-01 $PM masuk --clickup-id <id story> --lane CS --judul "..." --jenis story \ --induk-clickup <id epic> --selesai-bila "..." --rujuk FR-03 FR-04 \ --uraian "Sebagai ..., gue bisa ..., sehingga ..." $PM masuk --clickup-id <id task> --lane CS --judul "..." --jenis task \ --induk-clickup <id story> --selesai-bila "..." --estimasi 45clickup_idadalah kunci anti dobel: kirim ulang id yang sama memperbarui, nol menggandakan. - PM merapikan antrean sebelum IT Lead dipanggil, dan tiap kali rencana berubah. IT Lead mengklaim dari atas antrean: urutan PM, lalu prioritas, lalu umur. Task yang prasyaratnya belum selesai dilewati. Prasyarat yang mati tetap menahan sampai PM meninjau.
$PM antre --lane CS # urutan klaim + penahan, rencana yang dibaca mesin $PM matikan 7 --alasan "digantikan 15 dan 16" # tiket batal mati saat itu juga $PM urutkan --lane CS 21 18 15 16 # yang disebut diklaim lebih dulu $PM bergantung 7 --pada 15 16 # 7 nol bisa diklaim sebelum 15 dan 16 selesai - Tab baru:
/it-lead <LANE>. IT Lead klaim dari repo project (bukan folder kantor). Satu sesi memegang satu tiket. Bacaannya hemat: paket peran kecil (hukum inti), pembuka proyek, bagian yang ditunjuk PM lewat barisBaca:di uraian Task (semua sudah dibundel dirender/tiket/<id>/PAKET.md), plus hukum stack (Next, Bun, Playwright) hanya bila lane memakainya.cd ~/path/repo-project IT="python3 ~/Downloads/0000-ersapta-office/kantor-v2/antrean/klaim.py --role it_lead" $IT klaim --lane CS --repo . # keluaran: id, sesi, worktree, branch, selesai_bila, estimasi_menit, rujuk, langkah export KANTOR_SESI=<sesi dari keluaran> git worktree add ../CS-working-space-<id> -b tiket/<id> echo <id> > ../CS-working-space-<id>/.tiket - Bangun sampai
selesai_bilaterpenuhi, nol lebih. Hal di luar itu = satu baris tanya di catatan review, nol kode. Heartbeat tiap maks 30 menit.$IT heartbeat <id> # 409 MELAR = kerja lewat 2x estimasi; tiket otomatis ke review; berhenti, tulis catatan - IT Lead menyerahkan ke review. Catatan wajib memuat bukti uji; di lane produksi langsung juga
Permukaan:danRollback:. Lalu tulis jurnalit-lead/<tanggal>-<id>, dan katakan apakah tab boleh ditutup ($IT sesikosong).$IT review <id> --catatan "apa yang diuji, di mana, hasilnya. Permukaan: edge function admin-data, nol migrasi. Rollback: revert commit." $IT sesi # kosong = nol tiket dipegang, tab boleh ditutup - PM memeriksa dan memutus. Terima, atau kembalikan dengan alasan. Di lane produksi langsung (
prod_langsung, ALX-TCG) catatan terima wajib vonisDeploy: amanatauDeploy: tahanplus alasan; gerbangdeploy_vonismenolak tanpa itu.$PM tiket <id> # detail + riwayat $PM selesai <id> --catatan "Deploy: aman. Permukaan action baru admin-data, nol migrasi, blast radius halaman cert; verifikasi sesudah naik: ...; rollback: redeploy versi sebelumnya." $PM buka-ulang <id> --catatan "..." - Merge = hapus. Setelah
selesai, PM merge branch kedev(ubah denganMERGE_TARGET=main). Branch dan worktree lenyap dalam perintah yang sama. Merge kemain,master, atauprodditolak bila catatan terima tiket nol memuatDeploy: aman: di lane tanpa staging, merge ke main = deploy, dan naik ke produksi = ketok Sapta.bash kantor-v2/antrean/gabung.sh <repo> <id> origin bash kantor-v2/antrean/sapu_branch.sh <repo> # laporan harian bash kantor-v2/antrean/sapu_branch.sh <repo> --hapus # eksekusi - Arsip dipanggil PM. Yang merge tahu kapan konteks lama pensiun. Bagian proyek yang sudah jadi sejarah diberi tanda arsip: tetap terender dan bisa di-grep, tapi nol lagi dimuat ke paket akar maupun paket tiket. Pembuka
00-*, SoW, FRD, dan hukum nol bisa diarsipkan lewat jalur ini.python3 kantor-v2/mac/node.py --role pm arsip --lane CS # daftar bagian + tanda arsip python3 kantor-v2/mac/node.py --role pm arsipkan proyek/cs/03-log-agustus --alasan "..." # nol dimuat lagi python3 kantor-v2/mac/node.py --role pm hidupkan-arsip proyek/cs/03-log-agustus --alasan "..." - Tutup User Story dan EPIC. Semua anak selesai, PM menutup induknya dengan bukti kriteria diperiksa. EPIC yang 70 persen User Story-nya selesai tapi masih ada masalah terbuka menunggu putusan PM sebelum Task berikutnya boleh diklaim.
$PM tutup <id story> --catatan "Selesai bila diperiksa: ..." $PM epic --lane CS --putuskan $PM putus <id epic> --keputusan rilis_sebagian --catatan "Plan B: ..." # keputusan: lanjut | rilis_sebagian | potong | nego_waktu
Loop: satu tick = satu prompt
/loop <jarak> /pm tick dan /loop <jarak> /it-lead <lane> tick memakai penjadwal Claude Code: tiap jarak, prompt yang sama masuk ke sesi sebagai giliran baru. Hook UserPromptSubmit tetap jalan (jam kantor, stempel dengan git pull di latar, STATE dari cache hash), skill kursi dimuat ulang, lalu langkah nol.
- Tick kosong murah. Kata
tickmemaksa kursi menjalankanklaim.py --role pm tick(review dan melar semua lane) atauklaim.py --role it_lead tick --lane X(tiket dipegang dan antrean siap lane itu) SEBELUM membaca paket. Kuncikosong: true= satu baris laporan, sesi berhenti, paket nol dibaca. - Papan, bukan ingatan. Tick pertama yang ada isinya menjalankan langkah nol penuh (tarik render, paket, state); tick berikutnya langsung klaim dan membaca paket tiket saja (audit 4 Sep 2026: mengulang langkah nol tiap tick menambah 25 sampai 56 ribu token). Ingatan sesi dari tick sebelumnya hanya konteks, nol sumber; hook prompt memberi tahu bila skill atau paket akar berubah.
- Nol tumpang tindih. Penjadwal menembak di antara giliran. Agen sibuk = tick menunggu; beberapa jarak terlewat = ditembak sekali. Jarak di bawah satu menit dibulatkan; jarak yang nol rapi (7m, 90m) dibulatkan dan dilaporkan.
- Sewa dan rem. Tab loop mati di tengah Task: sewa habis, tiket kembali ke antrean, tercatat di riwayat. Antrean review melebihi
rem_review_n: klaim ditolakREM_PRODUKSI, tick IT Lead melapor dan diam sampai PM menilai. - Umur dan henti. Loop terikat sesi: tutup tab = mati; umur maksimal 7 hari. Henti: Esc saat menunggu (loop tanpa angka) atau kalimat "stop loop" (loop berangka). Kursi CEO, Sales, Content, Arsiparis nol dirancang ber-loop: bahan mereka berubah per hari, bukan per menit.
- Konteks memadat, loop hidup. Tab dari
kantor it-leadmemadat di 200k token,kantor pmdi 300k: dua menit, konteks turun ke 60 sampai 100k. Tanpa itu pemadatan baru terjadi di 1 juta, dan latensi per panggilan naik dari 1,6 ke 6,9 detik (audit 4 Sep 2026, 37.891 panggilan)./clear= percakapan baru = semua loop sesi itu hilang.
Angka gerbang
Semua hidup di tabel pengaturan. Berubah hanya dengan ketok lu tertulis, satu UPDATE oleh Arsiparis, dicatat di jurnal. Nol ada di kode.
| kunci | nilai | yang dihentikan |
|---|---|---|
| task_maks_menit | 90 | Task di atas 90 menit ditolak saat masuk. Pecah dulu. |
| melar_faktor | 2 | kerja lewat 2x estimasi = MELAR. Heartbeat menjawab 409, tiket ke review. |
| selesai_bila_min | 20 | Selesai bila: di bawah 20 karakter ditolak. Task tanpa kriteria nol pernah lahir. |
| go_nogo_persen | 70 | EPIC dengan User Story selesai 70 persen ke atas dan masalah terbuka: klaim Task EPIC itu tertahan sampai PM putus. Obat jebakan 30 persen. |
| branch_maks | 10 | branch tiket/* hidup 10 atau lebih di repo = klaim ditolak (PAGAR branch). Obat 179 branch. |
| rem_review_n | 30 | tiket menunggu review PM 30 atau lebih = klaim baru ditutup (REM_PRODUKSI). Produksi berhenti sampai review turun. |
| sewa_default_menit | 90 | klaim tanpa heartbeat 90 menit = sewa hangus, tiket kembali antre. |
| klaim_gagal_maks | 3 | sewa hangus ke-3 = tiket mati (dead letter). PM hidupkan bila memang perlu. |
| pemicu_penawaran_n | 10 | satu kebutuhan muncul 10 kali atau lebih dalam 30 hari = CEO wajib satu usulan penawaran. |
| tiket_minimum_usd | 0 | semua penawaran dihitung; fixed price diberi bobot lewat kolom jumlah_fixed. |
Gerbang bentuk
Nol angka di sini; bentuknya yang ditolak. Pesan error menyebut nama gerbangnya, agen memperbaiki isinya.
| gerbang | yang ditolak | |
|---|---|---|
| sow_wajib | EPIC tanpa Rujuk: D-nn, D-nn yang nol tertulis di sow/<lane>, atau SoW lane itu belum ada | |
| frd_wajib | User Story tanpa Rujuk: FR-nn, atau FR-nn yang nol tertulis di frd/<lane> | |
| sow_dirujuk, frd_dirujuk | suntingan dokumen yang menghilangkan D-nn atau FR-nn yang masih dirujuk tiket hidup; tandai DICABUT, jangan hapus | |
| dok_lane | SoW atau FRD tanpa lane, atau id bukan sow/<lane kecil> | |
| story_wajib | Task tanpa User Story induk | |
| induk_jenis, induk_lane, induk_tutup | induk salah jenis, beda lane, atau sudah selesai atau mati | |
| selesai_bila, ukuran | User Story atau Task tanpa Selesai bila:; Task tanpa estimasi atau di atas 90 menit | |
| beku_story | suntingan uraian, kriteria, estimasi, induk, atau rujuk pada Task yang sudah bergerak atau User Story yang sudah dikerjakan | |
| klaim_jenis | klaim EPIC atau User Story; hanya Task yang diklaim | |
| tutup_story, tutup_epic | menutup induk yang anaknya belum selesai | |
| tagih_status, tagih_model, tagih_batas, tagih_alasan, tagih_terkunci | tagihan hourly (db/013): Task belum selesai; lane tanpa klien hourly; menit di atas terbesar dari estimasi dan waktu nyata; di atas estimasi tanpa alasan 20 karakter; Task sudah masuk tagihan terkirim | Sales: tunggu PM menerima Task, minta Arsiparis menetapkan klien, turunkan angka atau tulis alasan; angka terkunci nol diubah |
| serah_prod, deploy_vonis | lane produksi langsung: serah tanpa Permukaan: dan Rollback:; terima tanpa Deploy: aman atau Deploy: tahan plus alasan (min 60 karakter) | |
| TERTAHAN_BERGANTUNG | klaim Task yang prasyaratnya (bergantung) belum selesai; prasyarat mati ikut menahan | |
| frd_dicabut, premis, hidupkan_ketok, TERTAHAN_MAKNA | gerbang makna (db/015, insiden 4 Sep): Task yang merujuk FR berstatus DICABUT, Task yang dilepas IT Lead dengan PREMIS:, atau Task yang mati karena ketok Sapta nol bisa diklaim, diserahkan, diterima, atau dihidupkan. Kuncinya satu: PM mencatat kalimat Sapta apa adanya lewat klaim.py ketok; tercatat di riwayat sebagai "ketok Sapta: ..." | |
| PAGAR KANTOR: DB kantor | hook Mac menolak sesi role yang menyentuh DB kantor lewat ssh atau psql, psql superuser di server mana pun, dan paket council. Pena DB kantor = API lewat klaim.py dan node.py; tiket_riwayat.login mencatat jalur tulisnya | |
| urutan_lane, bergantung_lane, bergantung_siklus, bergantung_diri | mengurutkan atau memasang prasyarat lintas lane, melingkar, atau pada diri sendiri | |
| PRA-SPAWN (hook) | Agent tanpa baris MODE: baca + LANE: atau TIKET: + LANE:; Workflow di luar tiket IT Lead | |
| PAGAR UPWORK (hook) | Playwright, Firecrawl, WebFetch, atau curl ke upwork.com; data Upwork hanya lewat MCP | |
| arsip_jenis, arsip_akar_proyek | mengarsipkan selain bagian proyek atau rujukan; mengarsipkan indeks lane proyek/<lane> |
Membaca kantor tanpa sesi
Render adalah markdown biasa. Buka pakai editor apa pun, baca saja.
~/Downloads/0000-ersapta-office/render/
INDEKS.md # daftar semua node per jenis
STEMPEL # sync_seq, node, akar, tiket
akar/<akar>/PAKET.md # bacaan wajib tiap role: pm, it-lead, desainer, ceo, sales, arsiparis, arsip
node/<jenis>/<slug>.md # jenis: hukum, role, playbook, proyek, sow, frd, state, jurnal, putusan, kamus, templat
node/<jenis>/<slug>/ # bagian-bagian node panjang (contoh: node/proyek/cs/00-pembuka/01-....md)
grep -rn "kata kunci" ~/Downloads/0000-ersapta-office/render/node/
python3 kantor-v2/mac/node.py --role ceo cari --q gotchas --jenis hukum
python3 kantor-v2/mac/node.py --role ceo baca state/org
- Situs SOP di tailnet (alamat lama yang sudah lu bookmark) kini dibangun dari
render.git. Perubahan render tampil paling lama 10 menit kemudian. Hanya terbuka saat Tailscale nyala. - Markdown v1 utuh di
~/Downloads/0000-ersapta-office/_arsip-v1/. Beku. Kalau ada yang masih lu butuhkan dari sana, minta Arsiparis memindahkannya jadi node. - Menyunting file di
render/percuma: hook menolak, dan render berikutnya menimpanya.
Kalau macet
| gejala | sebab | tindakan |
|---|---|---|
| tailnet nol terjangkau | Tailscale Mac mati, atau VPS mati | tailscale up --timeout=20s --accept-routes; lalu cat ~/.kantor/status.json |
| hook: render tertinggal | klon lokal di belakang VPS | bash kantor-v2/mac/tarik-render.sh |
| 401 | token role kosong atau salah di ~/.kantor/env | minta Arsiparis menyalin ulang token dari VPS lewat pipa (nol pernah dicetak) |
| 403 | role nol berhak (contoh: IT Lead memasukkan tiket) | pakai kursi yang benar |
| 422 GERBANG ... | isi melanggar gerbang; pesan menyebut gerbangnya | perbaiki isinya. Gerbangnya nol diubah tanpa ketok lu |
| 422 sow_wajib, frd_wajib | EPIC tanpa D-nn di SoW, atau User Story tanpa FR-nn di FRD | PM perbarui sow/<lane> atau frd/<lane> dulu (node.py tulis), lalu kirim ulang dengan --rujuk |
| 409 MELAR | kerja lewat 2x estimasi | berhenti; tulis catatan review; PM memutus pecah atau lanjut |
| PAGAR branch | 10 branch tiket/* atau lebih hidup di repo | bash kantor-v2/antrean/sapu_branch.sh <repo> --hapus |
| REM_PRODUKSI | 30 tiket atau lebih menunggu review PM | buka /pm, turunkan antrean review |
| 422 GERBANG serah_prod / deploy_vonis | lane produksi langsung tanpa catatan permukaan, rollback, atau vonis deploy | IT Lead lengkapi Permukaan: dan Rollback:; PM tulis Deploy: aman atau tahan beserta alasan |
| gabung.sh DITOLAK: merge ke main = deploy | tiket tanpa vonis Deploy: aman dimerge ke branch produksi | merge ke dev, atau PM tulis vonisnya dulu dan Sapta ketok naik |
| 409 TERTAHAN_BERGANTUNG | Task menunggu tiket lain selesai | IT Lead: tunggu atau tanya PM. PM: $PM antre --lane X, lalu urutkan, bergantung, atau matikan |
| DITOLAK PRA-SPAWN v2 | agen tambahan atau Workflow di luar jalur | PM: satu Agent dengan MODE: baca + LANE:, atau jadikan Task. IT Lead: tambah TIKET: + LANE: |
| DITOLAK PAGAR UPWORK | browser atau scraper ke upwork.com | pakai MCP upwork: list_accounts dulu, lalu alat yang sesuai (playbook/upwork-mcp) |
| GO_NO_GO: ... | epic menunggu putusan PM | $PM putus <id> --keputusan lanjut --catatan "..." (langkah 11) |
| SESI_SUDAH_MEMEGANG | sesi ini masih memegang tiket lain | review atau lepas tiket itu dulu |
| container mati | VPS restart atau OOM | hidupkan lagi lewat compose; baris terakhir di blok bawah |
Cek kesehatan langsung (alamat dibaca dari env, nol ditulis di sini):
set -a; . ~/.kantor/env; set +a
curl -s "$API_URL/sehat" # ok, postgres, falkordb, kepala, stempel, tertinggal, render_terakhir
ssh portfolio-vps 'cd /home/ubuntu/kantor/prasyarat/vps && docker compose --env-file .env ps'
ssh portfolio-vps 'cd /home/ubuntu/kantor/prasyarat/vps && docker compose --env-file .env up -d' # hidupkan lagi yang mati
Peta tempat
Mac
| ~/Downloads/0000-ersapta-office/ | kantor. CLAUDE.md, AGENTS.md, .claude/skills/ (cermin di .agents/skills/), kantor-v2/ runtime, render/ baca saja, _arsip-v1/ beku, scripts/ lama yang masih dipakai |
| ~/.kantor/ | env (rahasia, chmod 600), status.json, cek-vps.log, cek_vps.py (di sini karena launchd nol boleh membaca Downloads) |
| ~/Downloads/ersapta-private-project/ersapta-council/draft/prasyarat/ | kode server: db/, api/, antrean/, mac/, migrasi/, vps/, guide/ (halaman ini). Pena Arsiparis, mulai dari MULAI-ARSIPARIS.md |
| ~/Downloads/0000-ersapta-office/KANTOR-GUIDE.html | salinan lokal halaman ini, terbuka tanpa internet |
VPS (ssh portfolio-vps)
| /home/ubuntu/kantor/prasyarat/ | kode terpasang; vps/.env rahasia chmod 600; compose project kantor: postgres, falkordb, api, penjadwal. Port hanya di alamat tailnet |
| /home/ubuntu/git/office.git | remote satu-satunya repo kantor (Stop hook mendorong otomatis). Nol GitHub |
| /home/ubuntu/git/render.git | sejarah render; penjadwal mendorong tiap perubahan; Mac dan situs SOP menariknya |
| /var/www/kantor-guide/ | halaman ini, statis, publik, noindex, nol script |
| backup | cron 03:20 tiap hari: dump Postgres, salinan render.git |
Hukum yang tetap
- Bahasa Indonesia kasual (gue/lu). Dilarang em dash, en dash, arrow chain. Commit bersih tanpa AI attribution.
- Lembar bukti (
bukti/lembar-bukti, jenisbukti, db/013): registri klaim, bukan jurnal. PM menulis klaim PENDING sesudah verifikasi produksi, APPROVED hanya sesudah ketok Sapta; Arsiparis merawat; Sales dan CEO baca. Dipindah dari folder jurnal 3 Sep karena jurnal hanya tambah dan memblokir semua pena. - Istilah teknis bahasa Inggris: EPIC, User Story, Task, branch, merge, file, script, browser. Istilah org tetap canon: gerbang, pagar, pena, ketok, lane, tiket, antrean. Konten publik (LinkedIn, X, Threads) seluruhnya Inggris, klien anonim tanpa ketok per konten.
- Nol push ke GitHub untuk data kantor. Remote hanya bare repo di VPS.
- Rahasia: nol
cat .env, nolcat akun-test/*, nol nilai kredensial di node, jurnal, tiket, transkrip, atau halaman ini. - Fitur Artifact dan layanan publish luar HARAM untuk materi org. Deliverable = file lokal.
- Docker lokal di MacBook dilarang. Container hidup di VPS.
render/dan_arsip-v1/baca saja. Hukum berubah hanya lewat Arsiparis dengan ketok lu.- Angka volatile (cash, pipeline) di Notion dan ClickUp. Pengecualian:
state/orgdanstate/<lane>, maks 8000 karakter, suntikan ke prompt maks 2 KB. - Klaim pengalaman untuk proposal hanya dari
jurnal/proof/lembar-bukti.
Belum hidup (jujur)
Terdaftar sebagai pekerjaan rawat Arsiparis di MULAI-ARSIPARIS.md. Kantor sudah bisa dipakai tanpa semuanya.
- Relay ClickUp ke antrean lewat n8n + HMAC. Sampai hidup, PM memakai
klaim.py --role pm masuk. Saat hidup, perintah itu tetap sah. - Header standar tiap node proyek (Repo, Workspace, Cara jalan di tiga baris pertama) dan peta kode
kode/<lane>. Tanpa itu IT Lead masih meraba repo saat ditanya. login.py: login Playwright ke akun klien tanpa sandi lewat argumen.- Impor
upwork.dblama ke tabelsinyal. - Halaman render ringkasan
sinyal_pemicuuntuk CEO tanpa API. - Digest transkrip dari hook kantor ke DB.
- Empat paket akar di atas 60000 karakter (ceo, sales, it-lead, desainer). Hanya peringatan; dipecah dengan mengubah rujukan panjang jadi
merujuk. - Putar ulang 11 kunci layanan
.envkantor v1: tangan lu, lewat dashboard tiap layanan.