feat(keamanan,performa): kompresi yang diwarisi berhenti tak terlihat, dan CodeQL berhenti mengklaim .astro (C3, C16) - #397
Merged
Conversation
`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>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 —
checkResponseCompressionOwnershipdisecurity:readiness:src/middleware.ts,astro.config.mjs,infra/varnish/default.vcl,infra/varnish/docker-compose.varnish.yml,Dockerfile.production);kompresi-tepididocs/awcms/environments.mdmenyebut tier pengompresinya beserta akibatnya di luar CDN;berkas:barisdan 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.ymlmengklaim 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 coveragekini menulis ke ringkasan run berapa berkas dianalisis dan berapa.astroTIDAK, dihitunggit ls-filessaat run — pola yangawcms-astrotetapkan di ADR-0032 §A-nya, kini berlaku di kedua repo.Pemeriksanya (aturan tanpa pemeriksa adalah aturan yang akan dilanggar)
tests/security-readiness-compression.test.ts(12 tes)do_gzipdanVary: Accept-Encodingtidak dihitung sebagai kompresi; satu tes berjalan atas pohon nyatatests/codeql-coverage-statement.test.ts(7 tes)Dokumen yang ikut disinkronkan
v7.0.0mendarat,Validate+Build image + SBOMhijau, jobSign, attest, publishmenunggu approval environmentrelease— GitHub Release terbaru masihv6.4.0).PROJECT_STATE.md: jebakan kompresi dimutakhirkan, dengan batasnya tetap dinyatakan.Gerbang
bun run checkhijau sampaitest; 113 kegagalan yang tersisa adalah tes ber-Postgres yang memang butuh basis data (baselinemainsama persis: 113). Tes baru: +19, seluruhnya lulus.bun run buildhijau (anggaran aset 139.048 B dari 180.000 B).Sisi
awcms-astrodisinkronkan di PR terpisah: ahliweb/awcms-astro#45.🤖 Generated with Claude Code