Standar rekayasa portabel: satu folder berisi aturan ber-ID, gate yang menegakkannya, dan tooling generator — disalin utuh ke proyek lain. Dokumen tanpa tooling diabaikan; tooling tanpa dokumen disalahpakai; keduanya tanpa gate menyimpang dalam hitungan minggu. Paket ini mengirim ketiganya.
| Berkas / folder | Untuk siapa |
|---|---|
STANDARD.md |
Pintu masuk manusia — naratif, alasan tiap aturan |
AGENTS.md |
Pintu masuk agen — imperatif, berdaftar-periksa |
rules/ |
Aturan ber-ID, satu sumber kebenaran — rules/README.md untuk skema |
tooling/ |
Config, generator, gate — jalan lewat bin/standard |
bin/standard |
Satu-satunya entry point CLI |
INSTALL.md |
Prosedur pemasangan — lima langkah, prasyarat, dan kontrak paket platform |
- Rantai sumber kebenaran (
S-) — satu arah tertulis dari skema data sampai ke klien, dan prosedur saat dua lapis berbeda pendapat. [[S-01]] - Kontrak, backend, frontend sebagai satu rantai turunan (
C-,B-,W-) — kontrak mengikat, server menyesuaikan, klien menurunkan diri; tidak ada lapis yang menafsirkan sendiri. - Gate: aturan jadi mesin (
G-) — opt-in allowlist yang hanya bertambah, baseline shrink-only untuk utang lama, pesan gagal yang menyitir ID, buku besar dua arah, test sabotase untuk tiap batas keamanan. - Tenancy dan orkestrasi agen (
T-,I-,O-) — tenancy satu-satunya kelas yang tidak diturunkan dari kontrak dan wajib ditulis tangan di tiap repo; idempotensi untuk alur upload→stage→execute; pelajaran orkestrasi untuk proyek mana pun yang dikerjakan agen otonom.
Rincian tiap pilar dan mengapa ia berbentuk begitu ada di STANDARD.md.
Salin folder ini ke proyek target, lalu ikuti INSTALL.md: isi
standard.config.json, jalankan standard doctor sampai hijau, pasang gate dengan allowlist
kosong, pindahkan modul satu per satu. Ketat sejak hari pertama — bukan big-bang.
Dua bagian INSTALL.md yang tidak bisa disimpulkan dari kode dan karena itu wajib dibaca lebih
dulu: tiga modul pihak ketiga yang generator tulis harfiah ke dalam kode hasil
(gin, gorm, runtime oapi-codegen — prasyarat yang sengaja dipilih, bukan kelalaian), dan
kontrak keempat paket platform yang konsumen wajib tulis sendiri. Yang terakhir itu menyangkut
keamanan: guard adalah mesin otorisasinya, dan Mount yang dipasang sebagai adaptor tipis
membuang seluruh rantai izin sementara komentar di kode generated tetap menjanjikannya ada.
Semuanya lewat bin/standard; tidak ada pemanggil yang memanggil biner alat langsung.
standard doctor # config vs repo nyata
standard gen common # katalog permission, kode error, schema bersama
standard gen wiring --tag <TAG> --pkg <PKG> # wiring rute + manifest isi satu tag
standard gen dto # cermin dto privat per fitur
standard gen module --tag <TAG> --pkg <PKG> # kerangka modul feature
standard freeze --pkg <PKG> # akhiri masa regenerasi sebuah modul
standard gate [--lapis contract|backend] [--only <langkah>]Dry-run adalah default: tanpa --apply tak satu berkas pun ditulis.
tooling/Makefile.template membungkus perintah-perintah ini jadi target make, dan
ci/*.yml.template memasangnya sebagai workflow per lapis — keduanya disalin dan placeholder-nya
diisi saat pemasangan (INSTALL.md).
pnpm test # suite paket ini: parsing aturan, lint, konfigurasi
./bin/standard rules-lint # 0 temuan diharapkan
./bin/standard verify # self-test penuh: enam tahap, semuanya dijalankan
./bin/standard verify --update-golden # tulis ULANG golden, saat generatornya memang berubahstandard verify menjalankan seluruh pipa generator lewat sebuah proyek fixture kecil dan
membandingkan keluarannya dengan berkas golden — ini yang membuktikan tooling-nya jalan lewat
config, bukan cuma jalan di proyek asalnya. Enam tahapnya: rules-lint, paritas katalog pesan
(kunci dan nama variabel per kunci), doctor atas fixture, pipa fixture vs
tooling/testdata/golden/, lari dwibahasa, dan pemindai nama asal + inventaris
INSTALL.md.
Tahap terakhir itu ada karena tiga tahap sebelumnya pernah hijau bersama-sama untuk katalog yang kalimatnya campur: kata bermuatan bahasa disuntikkan sebagai NILAI variabel, jadi keluaran Inggrisnya berbunyi "nullable request bodies NAIK to 1" sementara paritas kunci DAN paritas nama variabel keduanya lolos. Nilai variabel lahir di kode, bukan di katalog — satu-satunya penjaganya adalah benar-benar menjalankan alat dan gate-nya dalam bahasa kedua lalu membaca keluarannya, termasuk kalimat GAGAL-nya (fixture yang sehat tidak pernah merender kalimat gagal, jadi tahap ini menyabotase salinan sementaranya sampai satu gate benar-benar merah).
Tahap keenam adalah pemindai portabilitas, dan ia ada di verify — bukan di suite — karena
pemeriksaan yang hanya hidup di suite paket ini tidak ikut terbawa ke salinan yang dipasang orang.
Ia melaporkan tiga hal: kemunculan nama proyek asal di berkas mana pun, tanpa pengecualian
(nol yang diharapkan); pengecualian pemindai yang tidak pernah dipakai (pemeriksaan yang diam-diam
tidak berjalan); dan ketiga inventaris INSTALL.md diadu dua arah dengan kenyataan yang
dipindai — modul pihak ketiga yang terpaku di sumber alat, simbol keempat paket platform yang generator
pancarkan, dan daftar placeholder template. Yang terpaku tanpa terdaftar adalah kejutan di mesin
pemakai; yang terdaftar tanpa terpaku adalah dokumen yang berbohong.
Tanpa --update-golden, verify tidak menulis satu berkas pun di luar direktori sementaranya.
Dengan bendera itu ia menulis ulang golden dan tetap keluar 0 — diffnya yang jadi bahan review,
jadi jangan menjalankannya untuk membuat merahnya hilang tanpa membaca apa yang berubah.
Suite ini menuntut git, make, dan toolchain Go ada di mesin, dan ketiganya gagal keras
kalau tidak ada — bukan dilewati. Alasannya sama untuk ketiganya: git membangun salinan paket
"terpasang" yang dipakai menguji apa yang benar-benar terkirim, make mengurai
tooling/Makefile.template, dan Go membangun kedua alat Go untuk membuktikan kode keluarnya lolos
utuh. Melewatinya berarti mengirim ketiga artefak itu tanpa pernah sekali pun dijalankan — dan
"tidak diperiksa" terlihat persis seperti "lulus". Ini syarat KONTRIBUTOR paket ini, bukan syarat
proyek yang memasangnya.
Delapan prefix, satu berkas per lapis — lihat rules/README.md. ID tidak
pernah dipakai ulang; aturan yang dicabut tetap di berkasnya, ditandai USANG beserta alasan dan
tanggal.