The handle-issue job capped at 25 turns, which only covered the
early-exit spam/duplicate paths. Real bug reports went through the full
flow (categorize + Read/Grep the code + post an answer) and hit the cap
mid-step 5, leaving the issue labeled but with no reply. Raise to 45 to
match the heavier path; the mention job already uses 40.
@
The handle-issue job uses claude-code-action, which by default refuses
to run unless the triggering user has write access. Public issue authors
never do, so the job failed on essentially every real issue. Set
allowed_non_write_users: "*" on the triage job (mention job left gated).
Two PostgreSQL gaps on the panel:
1. x-ui setting and other CLI subcommands read XUI_DB_TYPE/XUI_DB_DSN from
the process environment, which systemd injects via EnvironmentFile but a
plain shell invocation does not. On a PostgreSQL install the CLI silently
fell back to SQLite, so changes made from the management menu never
reached the panel's database. Load the systemd EnvironmentFile
(/etc/default/x-ui and distro equivalents) at startup; godotenv.Load does
not override existing vars, so it stays a no-op for the managed service.
2. DB backup/restore (panel endpoints and the Telegram bot) only handled the
SQLite file, so on PostgreSQL Back Up returned a stale/absent x-ui.db and
Restore silently did nothing. Add pg_dump/pg_restore based backup/restore:
- GetDb/ImportDB run pg_dump (custom format) / pg_restore, passing
credentials via the PG* environment instead of argv.
- getDb downloads x-ui.dump on Postgres, x-ui.db on SQLite.
- Telegram backup sends the matching file via GetDb.
- BackupModal shows a Postgres note and accepts .dump; the dist page
injects window.X_UI_DB_TYPE; new strings translated for all locales.
- install.sh installs postgresql-client for the external-DSN path and
points the user to in-panel Backup & Restore.
Closes#4658