Continue phase 2 device ops and dynamic QR lifecycle

This commit is contained in:
2026-05-26 21:25:07 +07:00
parent 5624b92872
commit e0b8f9af9a
22 changed files with 1050 additions and 92 deletions

View File

@ -9,7 +9,11 @@
- endpoint admin `GET /admin/audit-logs` dan `GET /admin/ledger-entries`
- awal Fase 2: capability resolver + `POST /device/transactions/dynamic-qr` API-direct
- lanjutan Fase 2: MQTT dynamic QR simulator/outbox + device config push/ack
- smoke e2e mencakup duplicate callback, invalid signature, ledger, audit, terminal tanpa binding, dynamic QR API-direct, dynamic QR MQTT, dan device config
- lanjutan Fase 2 berikutnya: config drift status + retry push config + MQTT trace untuk config ACK
- health summary device Fase 2 untuk admin list/detail: status, score, age_seconds, reasons
- UI ops Fase 2 di device registry/detail: health score/reasons, config drift, retry config push
- dynamic QR expiry sweep via `POST /admin/transactions/expire-due`
- smoke e2e mencakup duplicate callback, invalid signature, ledger, audit, terminal tanpa binding, dynamic QR API-direct, dynamic QR expiry sweep, dynamic QR MQTT, dan device config push/status/retry/ack
- fix UI lokal:
- CSP Helmet dilonggarkan untuk Tailwind CDN, Google Fonts/Material Symbols, dan image Googleusercontent agar desain render normal
- panel kanan login admin dibuat dark glass supaya teks putih terbaca
@ -42,10 +46,18 @@
- Resolver capability untuk flow dynamic QR API/MQTT.
- [Backend: dynamicQrOrchestrator](/home/wira/work/codex/qris-soundbox-platform/src/shared/services/dynamicQrOrchestrator.ts)
- Membuat transaksi dynamic `awaiting_payment` dan mock QR payload.
- [Backend: dynamicQrExpiry](/home/wira/work/codex/qris-soundbox-platform/src/shared/services/dynamicQrExpiry.ts)
- Sweep transaksi dynamic QR `awaiting_payment` yang sudah melewati `expired_at`.
- [Backend: mqttMessageStore](/home/wira/work/codex/qris-soundbox-platform/src/shared/store/mqttMessageStore.ts)
- Outbox/trace MQTT uplink dan downlink.
- [Backend: deviceConfigStore](/home/wira/work/codex/qris-soundbox-platform/src/shared/store/deviceConfigStore.ts)
- Config versioned dan ACK device.
- [Backend: deviceConfigStatus](/home/wira/work/codex/qris-soundbox-platform/src/shared/services/deviceConfigStatus.ts)
- Derivasi status drift config: `applied`, `pending_ack`, `failed_ack`, `stale_ack`, `never_pushed`.
- [UI: device-registry-monitoring](/home/wira/work/codex/qris-soundbox-platform/ui/device-registry-monitoring/index.html)
- Drawer ops menampilkan health score/reasons, config drift, latest push/ACK, dan retry config push.
- [UI: device-technical-detail](/home/wira/work/codex/qris-soundbox-platform/ui/device-technical-detail/index.html)
- Detail device menampilkan health summary dan config delivery panel dengan retry push.
- [App CSP](/home/wira/work/codex/qris-soundbox-platform/src/app.ts)
- Helmet CSP disesuaikan agar asset desain eksternal dapat dimuat di lokal.
- [UI: admin-login](/home/wira/work/codex/qris-soundbox-platform/ui/admin-login/index.html)
@ -62,7 +74,9 @@
6. Ledger Fase 1 masih placeholder `gross_income`; jangan perluas fee/payable sebelum Fase 3 kecuali diminta eksplisit.
7. Dynamic QR Fase 2 saat ini memakai mock QRIS payload lokal; integrasi partner sungguhan belum dipasang.
8. MQTT Fase 2 saat ini memakai simulator HTTP + `mqtt_messages` outbox; broker sungguhan belum dipasang.
9. Untuk cek UI lokal, gunakan `http://127.0.0.1:3100/ui/admin-login`; credential dev adalah username `admin`, password `admin`.
9. Config retry Fase 2 mengirim ulang config version yang sama; jangan naikkan versi kecuali settings berubah.
10. Dynamic QR expiry sweep saat ini endpoint admin/manual; bisa dinaikkan menjadi scheduler/background worker.
11. Untuk cek UI lokal, gunakan `http://127.0.0.1:3100/ui/admin-login`; credential dev adalah username `admin`, password `admin`.
## Urutan kerja selanjutnya (disarankan)
1. UI/manual sanity lanjut dari titik terakhir:
@ -74,9 +88,10 @@
2. Jalankan lagi `npm run smoke:e2e` sebelum lanjut Fase 2 atau sebelum commit besar.
3. Jika ada regresi, cek log server di `/tmp/qris-smoke-e2e-server.log`.
4. Lanjut Fase 2 berikutnya:
- health score/filter heartbeat yang lebih akurat
- adapter broker MQTT sungguhan dari `mqtt_messages` outbox
- config drift/retry policy untuk device yang belum ACK
- scheduler otomatis untuk dynamic QR expiry sweep
- filter/sorting UI berbasis `health_summary.score` dan `health_summary.reasons`
- manual visual QA device registry/detail untuk layout mobile dan drawer
5. Sebelum wiring UI baru, pastikan halaman tetap mengikuti desain `design/*/code.html` dan cek kontras teks pada panel transparan/overlay.
## Note kalau meneruskan sesi berikutnya