بنقرة واحدة
awcms-mini-usage-metering
Kerjakan bagian mana pun dari modul usage_metering AWCMS-Mini (Issue
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Kerjakan bagian mana pun dari modul usage_metering AWCMS-Mini (Issue
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Kelola/konsumsi sistem Module Management AWCMS-Mini (registry, validasi komposisi registry base, tenant lifecycle enable/disable, settings, permission sync/status, navigation, job registry, health/readiness). Gunakan saat menambah field descriptor baru (permissions/navigation/settings/jobs/health) di modul lain, saat menambah modul domain baru langsung di `src/modules/` dan perlu memverifikasi registry base tetap valid (`bun run modules:compose:check`), saat menyelidiki kenapa suatu modul terlihat degraded/orphaned, atau saat mengubah perilaku enable/disable/settings/health module_management sendiri. Sesuai src/modules/module-management/README.md, epic
Pilih dan jalankan profil deployment AWCMS-Mini (development/staging/production/offline-LAN). Gunakan saat menyiapkan deployment baru, memutuskan LAN-first vs registry-based, atau deploy ke Coolify. Sesuai doc 18 dan deployment-profiles.md/deploy-coolify.md.
Kelola sistem log/audit/metrics AWCMS-Mini yang sudah aktif — correlation ID lintas hop, retensi/purge audit log, extension point untuk consumer eksternal (alerting/export/SIEM), dan metrics port (counter/histogram/gauge berkardinalitas rendah untuk request/pool/job/provider). Gunakan saat menambah endpoint baru (correlation ID otomatis), menjadwalkan purge audit log, memasang consumer log/audit di aplikasi turunan, atau menambah/mengonsumsi metrik operasional. Berbeda dari awcms-mini-audit-log (APA yang wajib diaudit) — skill ini tentang BAGAIMANA sistem log/audit/metrics itu sendiri dikelola, sesuai Issue
Kerjakan bagian mana pun dari modul tenant_provisioning AWCMS-Mini (Issue
Triase dan perbaiki temuan CodeQL code scanning AWCMS-Mini (github.com/ahliweb/awcms-mini/security/code-scanning). Gunakan saat diminta "analisis code scanning"/"perbaiki CodeQL", saat sebuah PR gagal check CodeQL, atau saat menemukan alert baru. Mendokumentasikan satu TRUE-positive terkonfirmasi (password sungguhan → digest cepat yang dipersist = oracle cracking offline, plus dua "fix" yang membungkam alert tanpa memperbaiki apa pun) dan lima false-positive nyata (name-heuristic password, incompatible-types typeof/null, URL substring-sanitization di test mock, dua kasus dismiss resmi tanpa reformulasi kode, dan Bun.SQL tagged-template null-cast) plus pola "unused-local-variable di test kadang menandai coverage gap" — supaya tidak diinvestigasi ulang dari nol.
Daftarkan tabel bervolume tinggi ke registry lifecycle AWCMS-Mini (retensi/partisi/arsip/legal hold/purge), atau kerjakan bagian mana pun modul data_lifecycle sendiri. Gunakan saat menambah tabel baru yang tumbuh besar (log, telemetry, outbox, queue, provider attempt) dan butuh kebijakan retensi/purge aman, saat membuat/melepas legal hold, atau saat mengubah engine dry-run/archive/purge/archive-port. Sesuai Issue
| name | awcms-mini-usage-metering |
| description | Kerjakan bagian mana pun dari modul usage_metering AWCMS-Mini (Issue |
usage_metering (src/modules/usage-metering, Issue #875, epic #868 SaaS
control plane Wave 1, ADR-0022) adalah modul control-plane KETIGA —
Official Optional Business Foundation, opt-in per tenant, default-disabled,
dan tenant-scoped. Ia adalah fondasi metering provider-neutral: modul
pemilik mengemit meter EVENT numeric-only (idempotent, privacy-minimized) di
commit-nya sendiri lewat port usage_append; worker async resumable
memMATERIALISASI usage WINDOW secara DETERMINISTIK dari event immutable + koreksi
bertanda; reconciliation menghitung ulang window dari sumber dan menandai drift;
port usage_aggregate mengekspos usage efektif + keputusan quota FAIL-CLOSED
yang dibaca billing (#876). Baca src/modules/usage-metering/README.md +
docs/adr/0022-*.md sebelum mengubah. BUKAN pricing invoice (#876), BUKAN
telemetry aplikasi.
quantity bigint
(JANGAN float) + map dimensi ADMITTED kecil (domain/dimension-admission.ts
— kunci/nilai skalar pendek, fail-closed) — JANGAN raw body/dokumen/secret/
JSON arbitrer. Payload event domain & audit numeric-only — JANGAN free-text
reason koreksi.(tenant, producer, meter, source_event_id, source_version) UNIQUE. Append & koreksi INSERT ON CONFLICT DO NOTHING RETURNING lalu replay row pemenang. Route high-risk pakai
Idempotency-Key + replayConcurrentIdempotentWinner untuk balapan same-key.
Hash idempotency WAJIB sertakan resource id (event id / shard) — memory
idempotency-hash-missing-resource-id-recurring.source_watermark
monotonik, window_closed one-way); cursor floor checkpoint_xid8 (commit-order
safe-watermark, sql/099 #900) + informational checkpoint_seq maju saja. Ditegakkan
trigger BEFORE (sql/087+sql/099) + REVOKE least-privilege (sql/088). JANGAN hard-delete
data tenant; DELETE hanya jalur purge retention (worker-only, hormati legal hold).event_time-nya jatuh di window — BUKAN urutan ingest/terima. Maka rebuild
(recompute-from-source) mereproduksi nilai tersimpan, replay tak pernah
double-count, late/out-of-order recompute window-nya (tambah late counter), dan
reconciliation menandai aggregate yang drift. Bucket window pakai
windowStartFor UTC (JANGAN SQL date_trunc — timezone sesi).getQuotaDecision gabung limit
effective_entitlement (#871, fail-closed) + usage window SAAT INI yang
dihitung ULANG LIVE dari event immutable (BUKAN aggregate materialized yang bisa
basi). Recompute gagal → usage_unavailable → quota hard DENY. Entitlement !=
permission — keputusan positif fakta komersial, bukan otorisasi._shared/saas-contract-registry.ts (via
application/meter-registry.ts) — JANGAN hardcode set meter. Meter tak dikenal
→ fail closed (null/unknown_meter). Kontribusi meter = deklarasikan meter
descriptor di module.ts modul domain terkait di src/modules/ (registry base);
jangan edit base registry._shared/ports/usage-append-port.ts /
usage-aggregate-port.ts; adapter konkret diwire di composition root
(route/job), BUKAN impor lintas-modul langsung.effective_entitlement (#871) DIKONSUMSI lewat port di composition root,
fail-closed, JANGAN impor domain/application tenant_entitlement langsung.awcms_mini_usage_* HANYA ditulis modul ini (no-shared-table-write).Di transaksi bisnismu sendiri: createUsageAppendPort(registry)(tx, tenantId, input) — event usage commit ATOMIK dengan transaksi bisnis (outbox pattern, tabel
usage_events = outbox yang di-drain worker di LUAR transaksi). tenantId dari
konteks tenant pemanggil — producer tak bisa submit usage tenant lain.
Jalankan bun run db:migrate, bun run api:spec:check, bun test, bun run build. Migration schema/permission baru → foundation.test.ts count + doc 13.
Event baru → AsyncAPI + event-type-registry.ts. Route baru → OpenAPI. Ubah
perilaku → changeset. Regen inventory (repo:inventory, composition inventory,
api docs, i18n POT).