// kantor v2, yang terjadi di belakang

Di balik layar: mesin kantor v2

Satu sumber hukum di DB VPS. Sesi membaca render/, menulis lewat API dengan gerbang. Bacaan agen dan Arsiparis; Sapta membukanya bila penasaran atau macet.

hidup sejak 2 Sep 2026 render sync_seq 4750 1088 node, 1343 sisi 10 lane diperbarui 2026-09-04 05:39 WIB

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.

Halv1 (sampai 1 Sep 2026)v2 (sejak 2 Sep 2026)
sumber hukummarkdown di repo kantortabel node dan sisi di Postgres, dengan gerbang
cara bacabuka filerender/ di folder kantor, klon baca saja dari render.git VPS
cara tulissunting markdownAPI lewat node.py dan klaim.py; hukum lewat Arsiparis
tiketClickUp sajaClickUp tetap papan, antrean DB memberi klaim, sewa, heartbeat, gerbang scope
scopeSoW dan FRD di kepala PM, sering kelupaannode sow/<lane> dan frd/<lane>; EPIC tanpa D-nn atau User Story tanpa FR-nn ditolak
branchbebas, menumpuk (179 di ALX-TCG)maks 10 branch tiket/* hidup; merge = hapus
markdown lamaaktif_arsip-v1/, beku, baca boleh
role barunolArsiparis: satu-satunya pena untuk hukum, role, playbook, putusan, lane, pengaturan
satu kalimatLu tetap ngobrol sama role seperti biasa. Bedanya, yang mereka baca dan tulis sekarang lewat satu pintu yang punya gerbang.

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.

  1. 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
  2. ~/.kantor/env ada, chmod 600. Isinya API_URL, KANTOR_DIR, RENDER_DIR, dan TOKEN_<ROLE>. Script membacanya sendiri. Nol pernah cat.
    ls -l ~/.kantor/env        # -rw------- = benar
  3. 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
  4. Pemantau hidup. launchd com.ersapta.kantor.cek-vps memeriksa API tiap 5 menit dan menulis status.
    cat ~/.kantor/status.json
    tail -3 ~/.kantor/cek-vps.log
  5. Peluncur kursi. kantor-v2/mac/kantor.sh plus alias kantor di ~/.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.

perintahkursimembacaboleh menulis
/ceoCEOpaket ceo, state/org, pemicu penawaranstate/org, jurnal ceo/*, usulan putusan
/pmPM semua lanepaket pm, state/* semua lane, sow/<lane>, frd/<lane>, proyek/<lane> yang dibahassow/<lane>, frd/<lane>, state/<lane>, jurnal pm/*, tiket: masuk, selesai, buka-ulang, matikan, putus, tutup
/it-lead <LANE>IT Leadpaket it-lead, tiket yang diklaimklaim, heartbeat, review, jurnal it-lead/*. Kerja di worktree repo project, bukan di folder kantor
/designerDesigner, semua lanepaket desainer, hukum desainklaim Task desain lane mana pun, review, jurnal
/kontenContent, semua lanepaket konten, jurnal semua role hari itu, putusan baru, state/kontenstate/konten (bank ide, log terbit), jurnal konten/*. Nol tiket, nol sinyal, nol browser ke platform
/sales (tagihan)SalesGET /tagihan: Task selesai klien per hari (WIB), estimasi, waktu nyatamenit_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, SalesMCP Upwork (masuk sebagai akun Sapta): proposal, job, profil, pesan, kontraksinyal pasar, jurnal. Nol Playwright atau Firecrawl ke upwork.com, nol minta Sapta login
/salesSalespaket sales, jurnal/proof/lembar-buktisinyal pasar (POST /sinyal), jurnal sales/*
/arsiparisArsiparispaket arsiparissemua 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.

ingatRole selain Arsiparis hanya boleh menulis 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.

  1. 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.
  2. PM mengecek SoW dan FRD lane itu, lalu mendiagnosa dampak. Dua node per lane, pena PM: sow/<lane> (deliverable D-nn, change request) dan frd/<lane> (kebutuhan FR-nn). Request di luar D-nn = change request, menunggu ketok lu. FR berubah = dampak dulu, 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
  3. PM menulis di ClickUp, bahasa Inggris. Pakai skill clickup-ops. Judul dan deskripsi Inggris (klien membacanya). EPIC di root WBS bernama NNNN EPIC LANE: outcome, nomor berurut empat digit. Task wajib memuat Done when: (min 20 karakter) dan Estimate: <minutes> (5 sampai 90). User Story memuat Refs: FR-nn, EPIC memuat Refs: D-nn. Bentuk lama Selesai bila: dan Rujuk: masih dikenali gerbang. Lebih dari 90 menit = pecah.
  4. 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 45
    clickup_id adalah kunci anti dobel: kirim ulang id yang sama memperbarui, nol menggandakan.
  5. 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
  6. 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 baris Baca: di uraian Task (semua sudah dibundel di render/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
  7. Bangun sampai selesai_bila terpenuhi, 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
  8. IT Lead menyerahkan ke review. Catatan wajib memuat bukti uji; di lane produksi langsung juga Permukaan: dan Rollback:. Lalu tulis jurnal it-lead/<tanggal>-<id>, dan katakan apakah tab boleh ditutup ($IT sesi kosong).
    $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
  9. PM memeriksa dan memutus. Terima, atau kembalikan dengan alasan. Di lane produksi langsung (prod_langsung, ALX-TCG) catatan terima wajib vonis Deploy: aman atau Deploy: tahan plus alasan; gerbang deploy_vonis menolak 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 "..."
  10. Merge = hapus. Setelah selesai, PM merge branch ke dev (ubah dengan MERGE_TARGET=main). Branch dan worktree lenyap dalam perintah yang sama. Merge ke main, master, atau prod ditolak bila catatan terima tiket nol memuat Deploy: 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
  11. 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 "..."
  12. 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 tick memaksa kursi menjalankan klaim.py --role pm tick (review dan melar semua lane) atau klaim.py --role it_lead tick --lane X (tiket dipegang dan antrean siap lane itu) SEBELUM membaca paket. Kunci kosong: 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 ditolak REM_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-lead memadat di 200k token, kantor pm di 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.

kuncinilaiyang dihentikan
task_maks_menit90Task di atas 90 menit ditolak saat masuk. Pecah dulu.
melar_faktor2kerja lewat 2x estimasi = MELAR. Heartbeat menjawab 409, tiket ke review.
selesai_bila_min20Selesai bila: di bawah 20 karakter ditolak. Task tanpa kriteria nol pernah lahir.
go_nogo_persen70EPIC dengan User Story selesai 70 persen ke atas dan masalah terbuka: klaim Task EPIC itu tertahan sampai PM putus. Obat jebakan 30 persen.
branch_maks10branch tiket/* hidup 10 atau lebih di repo = klaim ditolak (PAGAR branch). Obat 179 branch.
rem_review_n30tiket menunggu review PM 30 atau lebih = klaim baru ditutup (REM_PRODUKSI). Produksi berhenti sampai review turun.
sewa_default_menit90klaim tanpa heartbeat 90 menit = sewa hangus, tiket kembali antre.
klaim_gagal_maks3sewa hangus ke-3 = tiket mati (dead letter). PM hidupkan bila memang perlu.
pemicu_penawaran_n10satu kebutuhan muncul 10 kali atau lebih dalam 30 hari = CEO wajib satu usulan penawaran.
tiket_minimum_usd0semua 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.

gerbangyang ditolak
sow_wajibEPIC tanpa Rujuk: D-nn, D-nn yang nol tertulis di sow/<lane>, atau SoW lane itu belum ada
frd_wajibUser Story tanpa Rujuk: FR-nn, atau FR-nn yang nol tertulis di frd/<lane>
sow_dirujuk, frd_dirujuksuntingan dokumen yang menghilangkan D-nn atau FR-nn yang masih dirujuk tiket hidup; tandai DICABUT, jangan hapus
dok_laneSoW atau FRD tanpa lane, atau id bukan sow/<lane kecil>
story_wajibTask tanpa User Story induk
induk_jenis, induk_lane, induk_tutupinduk salah jenis, beda lane, atau sudah selesai atau mati
selesai_bila, ukuranUser Story atau Task tanpa Selesai bila:; Task tanpa estimasi atau di atas 90 menit
beku_storysuntingan uraian, kriteria, estimasi, induk, atau rujuk pada Task yang sudah bergerak atau User Story yang sudah dikerjakan
klaim_jenisklaim EPIC atau User Story; hanya Task yang diklaim
tutup_story, tutup_epicmenutup induk yang anaknya belum selesai
tagih_status, tagih_model, tagih_batas, tagih_alasan, tagih_terkuncitagihan 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 terkirimSales: tunggu PM menerima Task, minta Arsiparis menetapkan klien, turunkan angka atau tulis alasan; angka terkunci nol diubah
serah_prod, deploy_vonislane produksi langsung: serah tanpa Permukaan: dan Rollback:; terima tanpa Deploy: aman atau Deploy: tahan plus alasan (min 60 karakter)
TERTAHAN_BERGANTUNGklaim Task yang prasyaratnya (bergantung) belum selesai; prasyarat mati ikut menahan
frd_dicabut, premis, hidupkan_ketok, TERTAHAN_MAKNAgerbang 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 kantorhook 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_dirimengurutkan 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_proyekmengarsipkan 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

gejalasebabtindakan
tailnet nol terjangkauTailscale Mac mati, atau VPS matitailscale up --timeout=20s --accept-routes; lalu cat ~/.kantor/status.json
hook: render tertinggalklon lokal di belakang VPSbash kantor-v2/mac/tarik-render.sh
401token role kosong atau salah di ~/.kantor/envminta Arsiparis menyalin ulang token dari VPS lewat pipa (nol pernah dicetak)
403role nol berhak (contoh: IT Lead memasukkan tiket)pakai kursi yang benar
422 GERBANG ...isi melanggar gerbang; pesan menyebut gerbangnyaperbaiki isinya. Gerbangnya nol diubah tanpa ketok lu
422 sow_wajib, frd_wajibEPIC tanpa D-nn di SoW, atau User Story tanpa FR-nn di FRDPM perbarui sow/<lane> atau frd/<lane> dulu (node.py tulis), lalu kirim ulang dengan --rujuk
409 MELARkerja lewat 2x estimasiberhenti; tulis catatan review; PM memutus pecah atau lanjut
PAGAR branch10 branch tiket/* atau lebih hidup di repobash kantor-v2/antrean/sapu_branch.sh <repo> --hapus
REM_PRODUKSI30 tiket atau lebih menunggu review PMbuka /pm, turunkan antrean review
422 GERBANG serah_prod / deploy_vonislane produksi langsung tanpa catatan permukaan, rollback, atau vonis deployIT Lead lengkapi Permukaan: dan Rollback:; PM tulis Deploy: aman atau tahan beserta alasan
gabung.sh DITOLAK: merge ke main = deploytiket tanpa vonis Deploy: aman dimerge ke branch produksimerge ke dev, atau PM tulis vonisnya dulu dan Sapta ketok naik
409 TERTAHAN_BERGANTUNGTask menunggu tiket lain selesaiIT Lead: tunggu atau tanya PM. PM: $PM antre --lane X, lalu urutkan, bergantung, atau matikan
DITOLAK PRA-SPAWN v2agen tambahan atau Workflow di luar jalurPM: satu Agent dengan MODE: baca + LANE:, atau jadikan Task. IT Lead: tambah TIKET: + LANE:
DITOLAK PAGAR UPWORKbrowser atau scraper ke upwork.compakai 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_MEMEGANGsesi ini masih memegang tiket lainreview atau lepas tiket itu dulu
container matiVPS restart atau OOMhidupkan 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.htmlsalinan 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.gitremote satu-satunya repo kantor (Stop hook mendorong otomatis). Nol GitHub
/home/ubuntu/git/render.gitsejarah render; penjadwal mendorong tiap perubahan; Mac dan situs SOP menariknya
/var/www/kantor-guide/halaman ini, statis, publik, noindex, nol script
backupcron 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, jenis bukti, 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, nol cat 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/org dan state/<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.db lama ke tabel sinyal.
  • Halaman render ringkasan sinyal_pemicu untuk 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 .env kantor v1: tangan lu, lewat dashboard tiap layanan.