Skip to content

feat(keamanan,performa): kompresi yang diwarisi berhenti tak terlihat, dan CodeQL berhenti mengklaim .astro (C3, C16) - #397

Merged
ahliweb merged 2 commits into
mainfrom
feat/kompresi-dinyatakan-dan-cakupan-codeql
Aug 5, 2026
Merged

feat(keamanan,performa): kompresi yang diwarisi berhenti tak terlihat, dan CodeQL berhenti mengklaim .astro (C3, C16)#397
ahliweb merged 2 commits into
mainfrom
feat/kompresi-dinyatakan-dan-cakupan-codeql

Conversation

@ahliweb

@ahliweb ahliweb commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Kenapa

Dua celah §9 ditutup, masing-masing dengan pemeriksanya — dan keduanya adalah kelas cacat yang sama: sebuah kalimat yang lebih besar daripada kenyataannya, bukan sebuah kontrol yang hilang.

C3 — kompresi diwarisi dari lapisan yang repo ini tak miliki

Cabang pertama resep C3 (memindahkan kompresi ke sini) sudah dicabut asesmen §9.3: Cloudflare sudah mengompresi, jadi kompresor kedua di sini adalah persis "dua tempat yang memutuskan hal yang sama". Yang mendarat adalah cabang kedua — checkResponseCompressionOwnership di security:readiness:

  • memindai lima lapisan yang repo ini KIRIM (src/middleware.ts, astro.config.mjs, infra/varnish/default.vcl, infra/varnish/docker-compose.varnish.yml, Dockerfile.production);
  • karena tak satu pun mengompresi, ia menuntut blok bertanda kompresi-tepi di docs/awcms/environments.md menyebut tier pengompresinya beserta akibatnya di luar CDN;
  • bila kompresi kelak menyala di lapisan yang repo kirim, ia menyebut berkas:baris dan menuntut blok itu ditulis ulang — gerbang tidak diam pada saat deklarasinya berubah jadi bohong.

Batasnya ditulis, bukan disamarkan: repo ini tetap tidak mengompresi apa pun, dan yang digerbangi adalah deklarasinya, bukan lapisan luarnya. Tidak ada gerbang di sini yang merah bila Cloudflare berhenti mengompresi.

C16 — codeql.yml mengklaim memindai "TypeScript/Astro source"

Temuan baru dari sinkronisasi lintas-repo. CodeQL sudah berjalan berbulan-bulan; yang salah adalah kalimat di sebelahnya — CodeQL tak punya ekstraktor Astro, jadi 42 berkas .astro (22.328 baris — permukaan yang sama yang C4 sebut) berada di luar setiap pemindaian sementara komentar repo menyatakan sebaliknya.

Langkah State coverage kini menulis ke ringkasan run berapa berkas dianalisis dan berapa .astro TIDAK, dihitung git ls-files saat run — pola yang awcms-astro tetapkan di ADR-0032 §A-nya, kini berlaku di kedua repo.

Pemeriksanya (aturan tanpa pemeriksa adalah aturan yang akan dilanggar)

Berkas Yang dibuktikan MERAH
tests/security-readiness-compression.test.ts (12 tes) blok dihapus, dikosongkan, penandanya separuh, atau dokumennya hilang; komentar do_gzip dan Vary: Accept-Encoding tidak dihitung sebagai kompresi; satu tes berjalan atas pohon nyata
tests/codeql-coverage-statement.test.ts (7 tes) langkah hilang, angka ditulis tangan alih-alih diinterpolasi, klaim Astro kembali, atau action tidak ber-SHA

Dokumen yang ikut disinkronkan

  • §9: baris C3 dan C16; C13 dinyatakan persis (tag v7.0.0 mendarat, Validate + Build image + SBOM hijau, job Sign, attest, publish menunggu approval environment release — GitHub Release terbaru masih v6.4.0).
  • §2 dan §11: C15 berhenti ditulis sebagai terbuka (ADR-0069), dan catatan "repo sana belum mengenal ADR-0065/0068" dikoreksi — PR #40 di sana sudah menyerapnya.
  • §11 bertambah empat baris paritas keluarga: analisis statik, SBOM rilis, CWV lab, pin SHA action.
  • PROJECT_STATE.md: jebakan kompresi dimutakhirkan, dengan batasnya tetap dinyatakan.

Gerbang

bun run check hijau sampai test; 113 kegagalan yang tersisa adalah tes ber-Postgres yang memang butuh basis data (baseline main sama persis: 113). Tes baru: +19, seluruhnya lulus. bun run build hijau (anggaran aset 139.048 B dari 180.000 B).

Sisi awcms-astro disinkronkan di PR terpisah: ahliweb/awcms-astro#45.

🤖 Generated with Claude Code

ahliweb and others added 2 commits August 5, 2026 17:08
`tx.array(values, "text")` tidak bisa membawa SQL NULL — Bun menyerialkan
elemen `null` menjadi teks empat karakter "null", dan bentuk tanpa tipe pun
tidak menghasilkan NULL (diprobe terhadap PostgreSQL 18.4 di Bun 1.3.14:
`x IS NULL` mengembalikan false untuk keduanya).

Ditemukan pada impor NYATA ke staging, bukan dengan membaca: ke-38 provinsi
mendarat ber-`parent_code` = 'null', dan seluruh 7.285 kecamatan ber-`local_term`
= 'null' — teks yang dirender apa adanya oleh konsumen, sekaligus membuat setiap
filter `IS NULL` mengembalikan nol baris. Delapan kolom nullable terdampak;
nol SQL NULL di seluruh tabel.

Null kini melintas sebagai sentinel string kosong dan dipulihkan
`NULLIF(t.col, '')` di SELECT. Sentinel aman karena tak satu pun kode, nama,
atau local term wilayah yang sah bernilai kosong, dan pemulihannya tetap benar
bila Bun kelak mengirim NULL sungguhan.

Digerbangi test integrasi: cacat ini hidup di batas serialisasi, jadi typecheck
dan test murni tidak bisa melihatnya.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…, dan CodeQL berhenti mengklaim .astro (C3, C16)

C3 ditutup lewat cabang KEDUA resepnya, karena cabang pertama sudah dicabut
asesmen §9.3: Cloudflare sudah mengompresi, jadi kompresor kedua di sini adalah
persis "dua tempat yang memutuskan hal yang sama". `checkResponseCompressionOwnership`
memindai lima lapisan yang repo ini KIRIM dan — karena tak satu pun mengompresi
— menuntut blok bertanda `kompresi-tepi` di environments.md menyebut tier
pengompresi beserta akibatnya di luar CDN. Yang ditutup adalah
ketidakterlihatannya; repo ini tetap tidak mengompresi apa pun, dan batas itu
ditulis, bukan disamarkan: tidak ada gerbang di sini yang melihat lapisan luar
berhenti mengompresi.

C16 adalah temuan baru dari sinkronisasi lintas-repo, dan bukan tentang gerbang
yang hilang melainkan kalimat yang terlalu besar: komentar matriks codeql.yml
menulis "TypeScript/Astro source" padahal CodeQL tak punya ekstraktor Astro,
sehingga 42 berkas .astro (22.328 baris — permukaan yang sama yang C4 sebut)
berada di luar setiap pemindaian sementara repo menyatakan sebaliknya. Langkah
`State coverage` kini menghitungnya dengan `git ls-files` saat run dan
menuliskannya ke ringkasan — pola yang awcms-astro tetapkan di ADR-0032 §A-nya.

Keduanya membawa pemeriksanya: security-readiness-compression.test.ts (blok
dihapus/dikosongkan/penanda separuh → MERAH; kompresi menyala di lapisan yang
dikirim → pemeriksa menyebut berkas:baris; komentar do_gzip dan
Vary: Accept-Encoding tidak dihitung sebagai kompresi) dan
codeql-coverage-statement.test.ts (langkah hilang, angka ditulis tangan, atau
klaim Astro kembali → MERAH).

Dokumen standar §2/§9/§11 dan PROJECT_STATE ikut dimutakhirkan: C15 berhenti
ditulis sebagai terbuka, catatan "repo sana belum mengenal ADR-0065/0068"
dikoreksi (PR #40 di sana sudah menyerapnya), C13 dinyatakan persis — tag
v7.0.0 mendarat, dua job Release hijau, job "Sign, attest, publish" menunggu
approval environment `release` — dan empat baris paritas keluarga baru
ditambahkan (analisis statik, SBOM, CWV lab, pin SHA).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@ahliweb
ahliweb merged commit 5a085df into main Aug 5, 2026
10 checks passed
@ahliweb
ahliweb deleted the feat/kompresi-dinyatakan-dan-cakupan-codeql branch August 5, 2026 12:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant