27 Commits
Author SHA1 Message Date
jared a73afea6b9 Merge pull request 'minecraft: show players online as the bridge bot's status' (#62) from feat/mc-player-status into main
Lint / Shell (shellcheck) (push) Successful in 15s
Lint / JS (eslint) (push) Successful in 14s
Lint / No Hookshot webhook IDs in README (push) Successful in 10s
Lint / No secrets in webhook configs (push) Successful in 9s
Lint / Landing page is rendered (matrix (push) Successful in 13s
Lint / Python (ruff) (push) Successful in 12s
Lint / Secret scan (gitleaks) (push) Successful in 8s
Lint / Python deps (pip-audit) (push) Successful in 1m11s
2026-11-04 22:42:03 -05:00
jaredandClaude Opus 5.5 2d2ebf64a5 minecraft: show players online as the bridge bot's status
Lint / Shell (shellcheck) (pull_request) Successful in 26s
Lint / JS (eslint) (pull_request) Successful in 23s
Lint / No secrets in webhook configs (pull_request) Successful in 9s
Lint / No Hookshot webhook IDs in README (pull_request) Successful in 11s
Lint / Landing page is rendered (matrix (pull_request) Successful in 13s
Lint / Python (ruff) (pull_request) Successful in 12s
Lint / Secret scan (gitleaks) (pull_request) Successful in 24s
Lint / Shell (shellcheck) (push) Successful in 27s
Lint / JS (eslint) (push) Successful in 23s
Lint / No Hookshot webhook IDs in README (push) Successful in 5s
Lint / Python deps (pip-audit) (pull_request) Successful in 1m43s
Lint / No secrets in webhook configs (push) Successful in 6s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 7s
Lint / Secret scan (gitleaks) (push) Successful in 8s
Lint / Python deps (pip-audit) (push) Successful in 56s
A small service on CT 154 pings the Lotus Minecraft server and sets the result
as the Matrix status of @lotus-mc-bridge, re-sent every 20 s because the mod
syncs with set_presence=offline and Synapse would otherwise drop it to offline.
Uses the mod's own token, so no new account or secret.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
2026-11-04 22:37:55 -05:00
jared c793d4fb29 Merge pull request 'cinny: point the status banner at Kuma's public page' (#61) from fix/status-banner-public-page into main
Lint / Shell (shellcheck) (push) Successful in 30s
Lint / JS (eslint) (push) Successful in 13s
Lint / No Hookshot webhook IDs in README (push) Successful in 9s
Lint / No secrets in webhook configs (push) Successful in 15s
Lint / Landing page is rendered (matrix (push) Successful in 15s
Lint / Python (ruff) (push) Successful in 9s
Lint / Secret scan (gitleaks) (push) Successful in 17s
Lint / Python deps (pip-audit) (push) Successful in 1m44s
2026-11-04 22:21:53 -05:00
jaredandClaude Opus 5.5 5268156e48 cinny: point the status banner at Kuma's public page
Lint / JS (eslint) (pull_request) Successful in 30s
Lint / No Hookshot webhook IDs in README (pull_request) Successful in 15s
Lint / No secrets in webhook configs (pull_request) Successful in 15s
Lint / Landing page is rendered (matrix (pull_request) Successful in 5s
Lint / Python (ruff) (pull_request) Successful in 8s
Lint / Python deps (pip-audit) (pull_request) Successful in 1m9s
Lint / Secret scan (gitleaks) (pull_request) Successful in 9s
Lint / Shell (shellcheck) (push) Successful in 13s
Lint / JS (eslint) (push) Successful in 11s
Lint / No Hookshot webhook IDs in README (push) Successful in 16s
Lint / Landing page is rendered (matrix (push) Successful in 6s
Lint / Python (ruff) (push) Successful in 6s
Lint / Shell (shellcheck) (pull_request) Successful in 22s
Lint / Python deps (pip-audit) (push) Successful in 1m34s
Lint / No secrets in webhook configs (push) Successful in 7s
Lint / Secret scan (gitleaks) (push) Successful in 7s
The "matrix" status page was merged into "public" on 2026-10-11, so the banner
has read a 404 and stayed silent since. Kuma's Matrix group on "public" is now
split into Homeserver / Voice calls / Discord, and notices are scoped with
noticePrefix "Matrix:" (cinny #486, already live), so other services'
maintenance and incidents don't reach Lotus users.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
2026-11-04 21:53:23 -05:00
jared dde36cdcd2 Merge pull request 'discord-bridge: Discord presence into Matrix ghosts' (#60) from feat/discord-presence into main
Lint / Shell (shellcheck) (push) Successful in 29s
Lint / JS (eslint) (push) Successful in 27s
Lint / No Hookshot webhook IDs in README (push) Successful in 17s
Lint / No secrets in webhook configs (push) Successful in 15s
Lint / Landing page is rendered (matrix (push) Successful in 17s
Lint / Python (ruff) (push) Successful in 21s
Lint / Secret scan (gitleaks) (push) Successful in 8s
Lint / Python deps (pip-audit) (push) Successful in 1m15s
2026-11-04 19:41:07 -05:00
jaredandClaude Opus 5.5 f8f0ca4549 discord-bridge: Discord presence into Matrix ghosts
Lint / JS (eslint) (pull_request) Successful in 10s
Lint / Shell (shellcheck) (pull_request) Successful in 11s
Lint / No Hookshot webhook IDs in README (pull_request) Successful in 6s
Lint / No secrets in webhook configs (pull_request) Successful in 6s
Lint / Landing page is rendered (matrix (pull_request) Successful in 6s
Lint / Python (ruff) (pull_request) Successful in 7s
Lint / Secret scan (gitleaks) (pull_request) Successful in 13s
Lint / Shell (shellcheck) (push) Successful in 26s
Lint / JS (eslint) (push) Successful in 18s
Lint / No Hookshot webhook IDs in README (push) Successful in 21s
Lint / No secrets in webhook configs (push) Successful in 12s
Lint / Python deps (pip-audit) (pull_request) Successful in 1m54s
Lint / Landing page is rendered (matrix (push) Successful in 17s
Lint / Python (ruff) (push) Successful in 16s
Lint / Secret scan (gitleaks) (push) Successful in 31s
Lint / Python deps (pip-audit) (push) Successful in 1m37s
mautrix-discord doesn't bridge presence. lotus_presence.py watches the Discord
server (a second gateway session on the bridge's own bot, Guilds + Presence
intents only) and sets presence and a status message on each @discord_* ghost:
online / idle / DND / offline -> online / unavailable / msc3026 busy / offline;
custom status and the first activity become the status message.

Its own appservice registration is non-exclusive on the ghost namespace, so it
can update ghosts but not create them. Synapse drops an unrefreshed user to
offline after about a minute, so live states are re-sent every 20 s; if the
service dies, ghosts go offline rather than stale. The installer generates the
credentials on the server and doesn't restart Synapse. Statuses and activities
are never logged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
2026-11-04 19:36:38 -05:00
jared ed1300f146 Merge pull request 'feat(synapse): nightly state compression on CT 109' (#59) from feat/synapse-state-compressor into main
Lint / Shell (shellcheck) (push) Successful in 9s
Lint / JS (eslint) (push) Successful in 8s
Lint / No Hookshot webhook IDs in README (push) Successful in 6s
Lint / No secrets in webhook configs (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 5s
Lint / Landing page is rendered (matrix (push) Successful in 6s
Lint / Secret scan (gitleaks) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 39s
2026-11-03 19:10:33 -05:00
jared ded4a30530 Merge pull request 'docs: all 13 Hookshot webhooks rotated' (#58) from docs/rotated-remaining-webhooks into main
Lint / JS (eslint) (push) Successful in 13s
Lint / Shell (shellcheck) (push) Successful in 14s
Lint / No secrets in webhook configs (push) Successful in 8s
Lint / No Hookshot webhook IDs in README (push) Successful in 8s
Lint / Landing page is rendered (matrix (push) Successful in 7s
Lint / Python (ruff) (push) Successful in 10s
Lint / Secret scan (gitleaks) (push) Successful in 25s
Lint / Python deps (pip-audit) (push) Successful in 1m10s
2026-11-03 17:03:09 -05:00
jared 7b01a9fcdc Merge pull request 'docs: call stack upgraded (lk-jwt-service 0.9.0, LiveKit 1.13.11)' (#57) from docs/call-stack-upgraded into main
Lint / Shell (shellcheck) (push) Successful in 18s
Lint / JS (eslint) (push) Successful in 24s
Lint / No Hookshot webhook IDs in README (push) Successful in 17s
Lint / No secrets in webhook configs (push) Successful in 17s
Lint / Landing page is rendered (matrix (push) Successful in 17s
Lint / Python (ruff) (push) Successful in 23s
Lint / Secret scan (gitleaks) (push) Successful in 20s
Lint / Python deps (pip-audit) (push) Successful in 1m11s
2026-11-03 16:42:04 -05:00
jared 89291f8707 Merge pull request 'docs: note the 2026-11-03 webhook rotation' (#56) from docs/rotated-webhook-prefixes into main
Lint / JS (eslint) (push) Successful in 12s
Lint / Shell (shellcheck) (push) Successful in 18s
Lint / No secrets in webhook configs (push) Successful in 10s
Lint / No Hookshot webhook IDs in README (push) Successful in 10s
Lint / Python (ruff) (push) Successful in 6s
Lint / Landing page is rendered (matrix (push) Successful in 6s
Lint / Secret scan (gitleaks) (push) Successful in 14s
Lint / Python deps (pip-audit) (push) Successful in 55s
2026-11-03 00:57:42 -05:00
jared a06ebfe6f6 Merge pull request 'docs: stop publishing Hookshot webhook IDs; record Hookshot + call-stack upgrades' (#55) from docs/hookshot-ids-and-upgrades into main
Lint / JS (eslint) (push) Successful in 12s
Lint / Shell (shellcheck) (push) Successful in 13s
Lint / No secrets in webhook configs (push) Successful in 10s
Lint / No Hookshot webhook IDs in README (push) Successful in 12s
Lint / Landing page is rendered (matrix (push) Successful in 7s
Lint / Python (ruff) (push) Successful in 5s
Lint / Secret scan (gitleaks) (push) Successful in 8s
Lint / Python deps (pip-audit) (push) Successful in 39s
2026-11-03 00:36:18 -05:00
jared 8a0e16cabd Merge pull request 'fix(livekit): graceful restart could restart LiveKit in the middle of a call' (#54) from fix/livekit-graceful-restart-detection into main
Lint / JS (eslint) (push) Successful in 9s
Lint / Shell (shellcheck) (push) Successful in 10s
Lint / No secrets in webhook configs (push) Successful in 5s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 6s
Lint / Secret scan (gitleaks) (push) Successful in 7s
Lint / Python deps (pip-audit) (push) Successful in 49s
2026-11-03 00:28:12 -05:00
jared d32c74052c Merge pull request 'voice-bridge: leave Discord within ~8-18 s of the last Matrix person leaving' (#53) from voice-bridge-timing into main
Lint / JS (eslint) (push) Successful in 7s
Lint / Shell (shellcheck) (push) Successful in 7s
Lint / Landing page is rendered (matrix (push) Successful in 4s
Lint / No secrets in webhook configs (push) Successful in 4s
Lint / Python (ruff) (push) Successful in 6s
Lint / Secret scan (gitleaks) (push) Successful in 4s
Lint / Python deps (pip-audit) (push) Failing after 5m4s
2026-10-29 21:12:00 -04:00
jared 8eb3201b38 Merge pull request 'docs: voice bridge live — bot profile, room setup, upgrade steps' (#52) from docs/voice-bridge-live into main
Lint / JS (eslint) (push) Successful in 9s
Lint / Shell (shellcheck) (push) Successful in 9s
Lint / No secrets in webhook configs (push) Successful in 5s
Lint / Landing page is rendered (matrix (push) Successful in 4s
Lint / Python (ruff) (push) Successful in 5s
Lint / Secret scan (gitleaks) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 34s
2026-10-29 13:24:35 -04:00
jared b2cab883d6 voice-bridge: Discord voice ↔ Lotus voice room (patched nether-voicebridge)
Lint / JS (eslint) (push) Successful in 10s
Lint / Shell (shellcheck) (push) Successful in 10s
Lint / No secrets in webhook configs (push) Successful in 4s
Lint / Landing page is rendered (matrix (push) Successful in 4s
Lint / Python (ruff) (push) Successful in 6s
Lint / Secret scan (gitleaks) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 32s
2026-10-29 12:56:04 -04:00
jared db2f523028 Merge pull request 'docs: bot profiles (names, avatars, where each is set)' (#50) from docs/bot-profiles into main
Lint / JS (eslint) (push) Successful in 6s
Lint / Shell (shellcheck) (push) Successful in 7s
Lint / No secrets in webhook configs (push) Successful in 4s
Lint / Landing page is rendered (matrix (push) Successful in 4s
Lint / Python (ruff) (push) Successful in 11s
Lint / Secret scan (gitleaks) (push) Successful in 8s
Lint / Python deps (pip-audit) (push) Successful in 42s
2026-10-29 01:32:54 -04:00
jared f2d8a12aa7 Merge pull request 'docs: the Discord bot login stays on @jared' (#49) from docs/discord-login-owner into main
Lint / Shell (shellcheck) (push) Successful in 15s
Lint / JS (eslint) (push) Successful in 12s
Lint / No secrets in webhook configs (push) Successful in 5s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 5s
Lint / Python deps (pip-audit) (push) Successful in 1m53s
Lint / Secret scan (gitleaks) (push) Successful in 6s
2026-10-28 22:19:19 -04:00
jared 894dd5277e Merge pull request 'discord-bridge: bot profile, down alert, login-owner account' (#48) from discord-bridge-profile into main
Lint / JS (eslint) (push) Successful in 8s
Lint / Shell (shellcheck) (push) Successful in 8s
Lint / No secrets in webhook configs (push) Successful in 8s
Lint / Landing page is rendered (matrix (push) Successful in 8s
Lint / Python (ruff) (push) Successful in 15s
Lint / Secret scan (gitleaks) (push) Successful in 7s
Lint / Python deps (pip-audit) (push) Successful in 55s
2026-10-28 22:00:30 -04:00
jared b8a088d2a6 Merge pull request 'discord-bridge: Matrix avatars on Discord, catch up missed messages' (#47) from discord-bridge-avatars into main
Lint / Shell (shellcheck) (push) Successful in 11s
Lint / JS (eslint) (push) Successful in 11s
Lint / No secrets in webhook configs (push) Successful in 6s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 7s
Lint / Secret scan (gitleaks) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 52s
2026-10-28 21:53:34 -04:00
jared 1e4922d6a3 Merge pull request 'docs: Discord bridge is live; linking notes' (#46) from docs/discord-bridge-live into main
Lint / Shell (shellcheck) (push) Successful in 9s
Lint / JS (eslint) (push) Successful in 9s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / No secrets in webhook configs (push) Successful in 6s
Lint / Python (ruff) (push) Successful in 8s
Lint / Secret scan (gitleaks) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 47s
2026-10-28 21:48:00 -04:00
jared 7c10c9591e Merge pull request 'Add mautrix-discord bridge config and installer' (#44) from discord-bridge into main
Lint / JS (eslint) (push) Successful in 10s
Lint / Shell (shellcheck) (push) Successful in 12s
Lint / No secrets in webhook configs (push) Successful in 7s
Lint / Landing page is rendered (matrix (push) Successful in 6s
Lint / Python (ruff) (push) Successful in 17s
Lint / Secret scan (gitleaks) (push) Successful in 10s
Lint / Python deps (pip-audit) (push) Successful in 1m47s
2026-10-28 21:25:52 -04:00
jared 3ad2fef28e Merge branch 'main' into discord-bridge
Lint / Shell (shellcheck) (push) Successful in 14s
Lint / JS (eslint) (push) Successful in 31s
Lint / No secrets in webhook configs (push) Successful in 7s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 5s
Lint / Secret scan (gitleaks) (push) Successful in 7s
Lint / Shell (shellcheck) (pull_request) Successful in 10s
Lint / JS (eslint) (pull_request) Successful in 12s
Lint / No secrets in webhook configs (pull_request) Successful in 8s
Lint / Landing page is rendered (matrix (pull_request) Successful in 7s
Lint / Python (ruff) (pull_request) Successful in 7s
Lint / Python deps (pip-audit) (push) Successful in 1m19s
Lint / Secret scan (gitleaks) (pull_request) Successful in 10s
Lint / Python deps (pip-audit) (pull_request) Successful in 1m19s
2026-10-28 21:21:59 -04:00
jared e16ce42785 Merge pull request 'ci(pip-audit): audit on Python 3.13 instead of ignoring filelock CVEs' (#45) from ci/pip-audit-py313 into main
Lint / JS (eslint) (push) Successful in 10s
Lint / Shell (shellcheck) (push) Successful in 10s
Lint / Landing page is rendered (matrix (push) Successful in 6s
Lint / No secrets in webhook configs (push) Successful in 6s
Lint / Python (ruff) (push) Successful in 12s
Lint / Secret scan (gitleaks) (push) Successful in 14s
Lint / Python deps (pip-audit) (push) Successful in 1m31s
2026-10-28 21:21:37 -04:00
jared 3213f8c41b Merge pull request 'docs: Synapse 1.164.1' (#43) from docs/synapse-1.164.1 into main
Lint / JS (eslint) (push) Successful in 15s
Lint / Shell (shellcheck) (push) Successful in 15s
Lint / Landing page is rendered (matrix (push) Successful in 11s
Lint / No secrets in webhook configs (push) Successful in 13s
Lint / Python (ruff) (push) Successful in 12s
Lint / Secret scan (gitleaks) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 49s
2026-10-28 15:05:11 -04:00
jared 6b39bd931e Merge pull request 'fix: explicit m.mentions for ticket notifications and roasts (ahead of Synapse 1.164)' (#42) from fix/explicit-mentions into main
Lint / JS (eslint) (push) Successful in 10s
Lint / Shell (shellcheck) (push) Successful in 10s
Lint / Landing page is rendered (matrix (push) Successful in 5s
Lint / No secrets in webhook configs (push) Successful in 5s
Lint / Python (ruff) (push) Successful in 8s
Lint / Secret scan (gitleaks) (push) Successful in 6s
Lint / Python deps (pip-audit) (push) Successful in 42s
2026-10-27 20:06:14 -04:00
jared 54bdada04d Merge pull request 'docs: Synapse 1.163.2 (Pillow 13 security update)' (#41) from docs/synapse-1.163.2 into main
Lint / JS (eslint) (push) Successful in 14s
Lint / Shell (shellcheck) (push) Successful in 16s
Lint / No secrets in webhook configs (push) Successful in 11s
Lint / Landing page is rendered (matrix (push) Successful in 11s
Lint / Python (ruff) (push) Successful in 22s
Lint / Secret scan (gitleaks) (push) Successful in 9s
Lint / Python deps (pip-audit) (push) Successful in 50s
2026-10-26 19:30:06 -04:00
jared 2e6e8e72b8 Merge pull request 'fix(cinny-nginx): own rate budget for content-hashed app files' (#40) from fix/asset-rate-limit into main
Lint / Shell (shellcheck) (push) Successful in 11s
Lint / JS (eslint) (push) Successful in 7s
Lint / No secrets in webhook configs (push) Successful in 4s
Lint / Landing page is rendered (matrix (push) Successful in 4s
Lint / Python (ruff) (push) Successful in 7s
Lint / Python deps (pip-audit) (push) Successful in 37s
Lint / Secret scan (gitleaks) (push) Successful in 5s
2026-10-24 17:39:18 -04:00