Troubleshooting

Start with rizmi doctor run -a <App> — it answers most tickets in one shot.

Support workflow that actually works

# customer machine:
rizmi doctor run --app-name MyApp --json > doctor.json
rizmi app status --app-name MyApp --db "$(rizmi doctor path 2>/dev/null)" # or default location

# send both files to support.

Symptoms → causes → fixes

Symptom / codeCauseFix
missingNo license activated yet and trial data absent.Normal on first contact — the app should have started a trial; if not, check DB permissions at the platformdirs path shown by doctor.
expiredPast exp + grace days.Issue a new license: rizmi license issue …, then activate in-app or via CLI.
hwid_mismatchLicense bound to another machine (OS reinstall also changes the ID).Get the new rizmi machine-id --raw and re-issue.
tamperedA row/file failed its HMAC or the JWT signature broke.Re-activate from the original .lic file. If it recurs, the disk may be corrupt — run doctor --strict.
clock_tamperingClock rolled back past the last observed time.Correct the system clock (NTP). The ratchet only moves forward.
revokedLicense ID on your published CRL.Remove the ID and publish a fresh list, or re-issue under a new ID.
decode_errorPublic key doesn't match the issuing private key.Verify with rizmi keys verify; re-embed the right public key.
licensed_invalidA license exists but fails validation (tamper/expiry).Deliberate behavior: apps never fall back to an active trial once a real license was seen. Deactivate then re-activate a good license.
Doctor: machine-id ✗Container/VM without OS machine ID.py-rizmi can't bind HWID here; provide a custom FingerprintProvider.
Doctor: integrity ✗ (state rows)DB edited outside the app, or copied between machines/apps.Rows are quarantined automatically. Restore from backup or deactivate/re-activate.
KeyPinError at startupEmbedded key constant and fingerprint disagree — build tampered or developer updated one side only.Regenerate fingerprint via rizmi keys fingerprint and rebuild both constants together.
Windows: DB "database is locked"Two processes / AV scanner holding the file.Connections are short-lived by design; exclude state.db from AV real-time scanning if persistent.

Collecting a support bundle

rizmi doctor run -a MyApp -P pub.pem --fingerprint FP --json > doctor.json
rizmi app status -a MyApp --json > status.json   # add --db for non-default paths

Both files contain no secrets: the public key is public, tokens are hardware-bound, and HMAC values are useless off-machine.