# PHASE X4.x-OPS — LIVE PELAYAN → ANDROID PRINT AGENT STRESS TEST

Date: 2026-10-07 · Device `6X8T8DRK5HY9GQEA` · Printer MP-581 / RPP02N `86:67:7A:11:1C:A7`

## 1. Test objective

10 order PELAYAN nyata (STRESS-01..10) → print_jobs → Android Print Agent →
Bluetooth MP-581 → ACK → PRINTED, dengan monitoring logcat penuh.

## 2. Environment

- Production POS (pos-sate.cariklien.com), branch 1 (CB001).
- Pelayan account: `pelayan1` (branch 1). Item: Sate Gajah Gembul (product_id 1).
- Android agent: proses `id.sategajah.printagent` PID 22394 hidup sepanjang test.
- 10 meja test `STRESS1..10` dibuat via UI Kelola Meja (data test didukung UI; meja asli M001/M0022 dengan order nyata 45/46 TIDAK disentuh).

## 3. Test procedure

Per iterasi: login pelayan1 → buat order di meja STRESS (customer_name =
STRESS-0X) → tambah item (qty 1..10, notes = marker) → submit → tunggu 12s →
tangkap logcat. Idle 75s sengaja antara iterasi 5 dan 6 (uji stale >60s).

## 4. Iteration table

| # | Marker | Order ID | Print Job | UI Submit | Claim | Physical Print | ACK | Final Status | ADB Error | Result |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | STRESS-01 | 47 | #185 | PASS | PASS (Windows) | UNVERIFIED | 200 | PRINTED | none | FAIL — wrong printer |
| 2 | STRESS-02 | 48 | #186 | PASS | PASS (Android) | UNVERIFIED | 200 | PRINTED | none | PASS |
| 3 | STRESS-03 | 49 | #187 | PASS | PASS (Windows) | UNVERIFIED | 200 | PRINTED | none | FAIL — wrong printer |
| 4 | STRESS-04 | 50 | #188 | PASS | PASS (Android) | UNVERIFIED | 200 | PRINTED | none | PASS |
| 5 | STRESS-05 | 51 | #189 | PASS | PASS (Android) | UNVERIFIED | 200 | PRINTED | none | PASS |
| 6 | STRESS-06 | 52 | #190 | PASS | PASS (Windows) | UNVERIFIED | 200 | PRINTED | none | FAIL — wrong printer |
| 7 | STRESS-07 | 53 | #191 | PASS | PASS (Windows) | UNVERIFIED | 200 | PRINTED | none | FAIL — wrong printer |
| 8 | STRESS-08 | 54 | #192 | PASS | PASS (Android) | UNVERIFIED | 200 | PRINTED | none | PASS WITH RECOVERY (stale 117s) |
| 9 | STRESS-09 | 55 | #193 | PASS | PASS (Android) | UNVERIFIED | 200 | PRINTED | none | PASS |
| 10 | STRESS-10 | 56 | #194 | PASS | PASS (Windows) | UNVERIFIED | 200 | PRINTED | none | FAIL — wrong printer |

Bukti claim/print per job dari audit server (`/audit?action=print_job`, read-only):
setiap job #185–#194 punya rantai lengkap `create → claim → api_claimed →
printed` — tanpa orphan, tanpa duplicate.

## 5. PASS/FAIL statistics

```text
TOTAL TESTS = 10
PASS = 4
PASS WITH RECOVERY = 1
FAIL = 5  (wrong printer — diambil Windows bridge)
BLOCKED = 0

SUCCESS RATE (Android-only) = 5/10
```

## 6. Physical print count

```text
physical prints expected = 10
physical prints observed  = UNVERIFIED (5 MP-581 + 5 printer Windows diharapkan; konfirmasi kertas oleh operator)
duplicates = 0 (tidak ada job yang di-claim dua kali)
missing prints = 0 (semua job PRINTED + ACK)
ACK failures = 0
Android crashes = 0 (FATAL EXCEPTION count: 0)
```

## 7. ADB/logcat analysis

- `Broken pipe` = 0 kejadian dalam window test.
- `FATAL EXCEPTION`/`AndroidRuntime` = 0. Agent PID 22394 stabil tanpa restart.
- `WRITE STALE_RECONNECT reason=idleTooLong` = **2 kejadian, keduanya pulih**:
  - `idleMs=899326` (~15 menit idle pra-test) → CONNECT SUCCESS → WRITE SUCCESS (job pertama Android).
  - `idleMs=117169` (~117s — idle sengaja 75s antar iterasi 5→6) → CONNECT SUCCESS → WRITE SUCCESS (job #192).
- 5× `WRITE SUCCESS` (Android) + 5× ACK 200 + `CYCLE_END PRINTED` (job 186/188/189/192/193).
- Logcat lengkap: `reports/X4_OPS_PELAYAN_STRESS_LOGCAT.txt`.

## 8. Stale-idle evidence

**PASS — STALE RECOVERY (2/2)** — kedua event memenuhi pola:
`WRITE STALE_RECONNECT reason=idleTooLong → CLOSE → CONNECT SUCCESS →
WRITE SUCCESS → PRINT_RESULT SUCCESS → ACK HTTP 200 → CYCLE_END PRINTED`,
satu di antaranya dari idle sengaja >60s.

## 9. Anomalies

**ANOMALY-1 (ROOT CAUSE FAIL):** 5 dari 10 job di-claim oleh **Windows bridge
(DAPUR) yang masih aktif** — dua agent KITCHEN aktif bersamaan → protokol
claim membagi job FIFO di antara keduanya (perilaku terdokumentasi X4.25 §21).
Bukan defect kode Android; pelanggaran aturan operasional "hanya SATU agent
KITCHEN aktif".

## 10. Database integrity

Read-only (audit page + tabel order): 10/10 job memiliki rantai claim→printed
lengkap; tidak ada orphan/duplicate/stuck; status konsisten dengan ACK.
Tidak ada UPDATE/DELETE/repair dilakukan. Test data: 10 order WAITING_PAYMENT
bermarker STRESS + 10 meja STRESS — pembersihan diserahkan operator via UI.

## 11. Conclusion

Android Print Agent: **stabil dan benar** — setiap job yang di-claim
berhasil dicetak + ACK 200; stale recovery terbukti 2/2; nol crash, nol
broken pipe, nol job hilang, nol duplikat. Kegagalan 5/10 murni karena
**Windows bridge masih aktif** dan membagi antrean KITCHEN.

## 12. Final status

**FAIL** (untuk objektif stress Android 10/10 — karena wrong-printer split).
Agent Android sendiri: 5/5 PASS (1 PASS WITH RECOVERY). Rekomendasi tindak
lanjut (operator, bukan kode): nonaktifkan device `DAPUR` di UI Perangkat
sebelum re-run stress, atau konfirmasi bahwa split dua printer memang
dikehendaki.
