Gambar: dibuat AI
toulmin menghitung kontrak. Aturan adalah fungsi Go, pengecualian dideklarasikan sebagai graf defeat, dan sebuah h-Categoriser mengubah graf menjadi keputusan. Masalahnya adalah orang yang sebenarnya perlu mengaudit kontrak itu biasanya tidak bisa membaca Go.
Seorang akuntan pajak yang mengaudit kebijakan pinjaman. Pemilik usaha kecil yang memeriksa aturan kontrol akses. Seorang teller bank yang meninjau logika kompensasi sebuah transfer. Tak satu pun dari mereka dapat melihat func(ctx Context, specs Specs) (bool, any) dan berkata “ya, ini benar.” Sesolid apa pun matematika mesinnya, jika pembaca tidak dapat membaca kodenya, audit itu hanyalah sandiwara.
AI menulisnya, manusia membacanya
TANGL (Toulmin Amgoud Nute Graph Language) menutup celah itu. Anda menulis kalimat markdown, dan kalimat-kalimat itu adalah kode yang dapat dieksekusi.
## tangl:Cases
- in case of `can access`
- `user` is required
- `authenticate` is a general rule
- `block ip` is a counter rule using `policy`.`IsIPBlocked` with `blocklist`
- don't `authenticate` when `block ip`
- do `policy`.`Allow` when `authenticate`
Kelima baris ini adalah keseluruhan graf toulmin — Rule, Counter, Attacks, dan sisi eksekusi. Tidak ada langkah kompilasi terpisah yang harus dipikirkan penulis: rantai peralatan tangl mengurai markdown ini langsung menjadi *ast.Document, dan validate/effects/gen berjalan di atasnya tanpa perubahan. Penulisnya adalah AI, pemverifikasinya adalah manusia — asimetri itulah inti seluruhnya. AI hanya perlu mengikuti satu tata bahasa kanonis yang ketat; manusia hanya perlu membaca satu kalimat dalam bahasanya sendiri.
Satu semantik, banyak permukaan
Semantik TANGL didefinisikan sekali, dalam tata bahasa Inggris: dualitas Evaluate/Run, once (idempotensi tick), undo (kompensasi), pengaturan waktu cascade, urutan eksekusi deterministik. Edisi lokal mana pun — Korea, atau mana pun yang berikutnya — tidak mendefinisikan ulang semua ini. Ia hanya menukar tabel kata kunci dan urutan kata yang bertengger di atas AST yang sama. Satu kalimat Korea memetakan 1:1 ke satu kalimat Inggris, dan keduanya terurai menjadi simpul AST yang identik.
Itu bukan lapisan terjemahan yang dipasang demi kenyamanan — itu menahan beban. Pembaca sesungguhnya TANGL di Korea adalah auditor non-pengembang: 소상공인, 세무사. Kata kunci Inggris seperti don't X when Y atau is a general rule tidak memungkinkan non-pengembang memastikan “ya, ini terbaca dengan benar.” Jika pembacanya orang Korea, permukaannya harus berbahasa Korea agar auditnya benar-benar berfungsi — dan hal sebaliknya berlaku secara simetris bagi pembaca Inggris.
Membangun edisi Korea memunculkan sesuatu yang tidak tampak jelas dari tata bahasa Inggris saja: urutan SOV bahasa Korea bukanlah beban terjemahan, melainkan lebih cocok untuk aturan kondisional. `Y`면 `X` 실행한다 (kira-kira, “ketika Y, lakukan X”) terbaca lebih alami daripada do X when Y dalam bahasa Korea — kondisi-dahulu, predikat-terakhir memang begitulah bahasa itu terstruktur sejak awal. Kebijakan partikel Korea mendorong ini lebih jauh: partikel (은/는/이/가/을/를 …) adalah token opsional yang dibuang lexer, tetapi bentuk kanonis yang ditulis AI selalu menyertakannya — untuk pembaca manusia, bukan parser. Karena AI adalah satu-satunya penulis, parser tidak pernah harus menerima urutan kata bebas atau variasi lisan; ia hanya harus mengurai satu bentuk kanonis. Asimetri itulah yang membuat permukaan bahasa-alami yang tidak sepele menjadi dapat ditangani sama sekali.
Tujuh bagian
Subject → See → Definitions → Rules → Cases → Provides → Internal
| Bagian | Peran | Wajib |
|---|---|---|
| Subject | mendeklarasikan tentang apa dokumen ini | wajib |
| See | mereferensikan simbol paket eksternal | opsional |
| Definitions | istilah dan struct | opsional |
| Rules | predikat kondisi inline | opsional |
| Cases | penilaian + eksekusi (graf itu sendiri) | wajib |
| Provides | endpoint | opsional |
| Internal | kerja internal berbasis tick/event | opsional |
Setiap konstruk hanya valid dalam bagiannya sendiri — disiplin pelingkupan yang sama yang diwarisi setiap edisi lokal tanpa perubahan. Pernyataan terbaca sebagai kalimat lengkap yang menamai jenisnya sendiri: is a general rule, don't ... when, do ... once when, undo ... when, run ... when.
Contoh: robot kopi
Berikut cara semantik eksekusi TANGL — dualitas Evaluate/Run, once, cascading — muncul sebagai kalimat markdown biasa.
## tangl:Cases
- in case of `can place cup`
- `order received` is a general rule using `sensor`.`isOrdered`
- `no cup` is a counter rule using `sensor`.`noCupAvailable`
- don't `order received` when `no cup`
- do `arm`.`placeCup` once when `order received`
- run `can pour water` when `order received`
- in case of `can pour water`
- `cup placed` is a general rule using `sensor`.`cupIsPlaced`
- do `arm`.`pourWater` once when `cup placed`
- run `can brew espresso` when `cup placed`
## tangl:Provides
- provides `make coffee`
- run `can place cup`
## tangl:Internal
- every 1s until `can serve coffee`
- run `can place cup`
Seorang auditor membaca ini sebagai: “Begitu cangkir dapat ditempatkan — jika pesanan telah diterima, tempatkan cangkir sekali dan lanjut ke penuangan air. Jika tidak ada cangkir, pesanan batal. Untuk membuat kopi, mulai dari menempatkan cangkir, dan coba ulang setiap detik sampai kopi dapat disajikan.”
Tanpa once, lengan akan menempatkan cangkir baru pada setiap tick selama pesanan masih aktif — kata itulah satu-satunya alasan pembaruan sensor yang lambat tidak berubah menjadi pengulangan yang berbahaya secara fisik. Seorang auditor memastikan keamanan pengulangan dari satu kalimat ini, tanpa pernah membaca klausa guard Go.
Contoh: kompensasi — dunia tetap utuh bahkan saat gagal
undo tidak sama dengan penolakan. Penolakan adalah cabang normal dari graf; undo adalah kompensasi untuk eksekusi yang mati di tengah jalan.
- do `bank`.`withdraw` once when `balance sufficient`
- undo `bank`.`refund` when `balance sufficient`
- run `can deposit` when `balance sufficient`
“Jika saldo mencukupi, tarik sekali; jika ada sesuatu di hilir yang gagal, gulung balik lewat refund; dan lanjutkan ke deposit.” Saat terjadi kegagalan, urutannya deterministik:
1. withdraw succeeds → refund is armed on the compensation stack
2. deposit errors → the Run aborts immediately
3. stack unwinds LIFO → refund fires, the money comes back
4. the original error is reported — the transfer failed, and the world looks like it never happened
Jika refund sendiri gagal, kompensasi yang tersisa berhenti dan seluruh transaksi dieskalasi ke gerbang peninjauan manusia (REVIEW) — sistem memutuskan sendiri bahwa transfer yang setengah tereksekusi bukanlah sesuatu yang boleh ditutupi secara otomatis.
Ketika teks berhenti menjadi sumber kebenaran — TANGEUL
Segala hal di atas adalah TANGL: teks markdown yang diurai dan dieksekusi langsung. Tetapi teks sebagai input eksekusi adalah kenyamanan, bukan keharusan. Begitu sebuah bahasa memiliki dua permukaan — Inggris dan Korea — muncullah pertanyaan “yang mana yang kanonis?” Saat ini jawabannya adalah “Inggris, menurut konvensi.” Itu adalah keputusan, bukan jaminan struktural.
TANGEUL menghapus pertanyaan itu, dan ia sudah dikirimkan sebagai sumber kebenaran tunggal biner pkg/tangeul untuk rantai peralatan tangl. Artefak eksekusi kanonis adalah sebuah aliran graf biner (.tangeul) yang dijalankan langsung oleh check/ast/effects/gen; berkas markdown Inggris dan Korea adalah codec permukaan yang menyerap ke dalam, dan merender kembali dari, graf yang sama itu.
EN .md ──[EN codec]──┐ ┌──[mode 1]── verbatim byte-identical round trip
├──> .tangeul (SSOT) ────┤
KO .md ──[KO codec]──┘ └──[mode 2]── normalized EN/KO rendering
- Mode 1 (verbatim): memutar ulang byte yang ditulis penulis persis, sehingga keluaran decode identik byte dengan
.mdasli — diperiksa oleh tes round-trip CLI. - Mode 2 (regenerated):
decode --locale en|komerender ulang setiap pernyataan melalui codec locale target, memutar ulang rentang prosa secara verbatim. Sebuah dokumen yang ditulis dalam bahasa Korea dapat dirender untuk auditor Inggris, dan sebaliknya.
Permukaan penulisan sebuah dokumen dikunci ke satu locale (mencampur bagian Inggris dan Korea dalam satu berkas ditolak), tetapi aliran .tangeul itu sendiri tidak tahu locale mana yang menulisnya. Ia dapat dirender ke bahasa mana pun sesuai permintaan justru karena artefak kanonisnya adalah graf, bukan paragraf.
Semua pengetahuan tingkat-bit dikarantina dalam dua paket — word (kata 16-bit, header frame) dan codebook (nilai kode append-only) — sehingga lapisan-lapisan di atasnya (paket, aliran, kontainer dokumen) tetap stabil tak peduli bagaimana pengodean berkembang:
pkg/tangeul/
├── word/ // 16-bit words, frame headers — bit-level knowledge stops here
├── codebook/ // NodeType/PropCode/Control codes, append-only
├── packet/ // Node/Edge/Control/Text packets
├── stream/ // Doc ↔ .tangeul serialization
└── doc/ // Doc container + VerifyTiling + the surface Codec interface
VerifyTiling adalah gerbang integritas: blok-blok yang terekam harus menyusun ubin teks sumber secara persis, dan ia berjalan pada setiap pemuatan dan setiap keluaran encoder. Tes paritas menegaskan bahwa AST yang dimuat dari aliran .tangeul sama dengan AST yang dihasilkan parser dari .md asli (hingga nomor baris). Menargetkan ulang ke biner bukan tentang mengubah apa yang dilakukan kode — grafnya, dan karenanya keluaran yang dihasilkan, identik; ini tentang secara struktural menghapus kemungkinan drift antara banyak salinan teks yang sama.
Kontrak yang dapat diaudit
Kesimpulan toulmin adalah bahwa sebuah keputusan dihitung oleh rumus, bukan diputuskan oleh seseorang. TANGL menambahkan satu baris lagi pada itu: komputasi itu dapat dibaca oleh seseorang yang tidak pernah menulis rumusnya.
- Warrant (sebuah aturan) = satu kalimat,
`n` is a ... rule - Rebuttal = satu kalimat,
don't `X` when `Y` - Ground (bukti) = satu panggilan ke fungsi paket yang direferensikan
- Verdict = rumus h-Categoriser
Dan TANGEUL adalah pekerjaan untuk menjamin, pada tingkat byte, bahwa kalimat-kalimat ini menunjuk ke graf yang sama tak peduli dalam bahasa mana ia ditulis. Orang yang menulis aturan dan orang yang mengauditnya tidak lagi harus berbagi bahasa yang sama.
MIT License. github.com/park-jun-woo/toulmin — pkg/tangl, pkg/tangeul, cmd/tangl.
Referensi
- TANGL — tata bahasa markdown yang dapat dieksekusi (TANGEUL.en.md)
- pkg/tangeul — format SSOT biner (README)
- park-jun-woo/toulmin — mesin aturan dan rantai peralatan tangl
Changelog
- 2026-07-03: Edisi pertama