원클릭으로
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 직업 분류 기준
| 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).
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