The management room is end-to-end encrypted, but Draupnir ran with
experimentalRustCrypto: false and Pantalaimon off, so it could post there
(its own messages are unencrypted) but never saw commands: its last reply
to a command was ~57 days ago, and `!draupnir rooms add …` sent from Lotus
on 2026-10-13 was ignored. The same command sent unencrypted worked at
once (✅, joined dco-memes-minecraft).
Merging deploys via lxc110-draupnir.sh, which restarts draupnir.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
devdesk-notify-matrix on CT 126 posts here when a Claude session waits for
input and no browser tab or SSH client is attached. Deploying this transform
creates the Devdesk hook in Spam and Stuff.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Ci-Alert hook existed (created when ci-alert.js was deployed) but its URL
was never set in Gitea, so every repo's notify-failure job skipped. The org
secret MATRIX_WEBHOOK_URL now points at it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds `statusPages` for matrix.lotusguild.org → the Kuma status page
https://isitup.lotusguild.org/status/matrix (groups Homeserver, Voice
calls, Login). The banner code (cinny #255) and the CSP (#16) are already
live; production's config.json comes from this file, so without this entry
the client never asks Kuma. The LXC 106 deploy merges it into the live file
and keeps server-only values.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
Add https://isitup.lotusguild.org to connect-src so the client can fetch
the public status JSON (GET /api/status-page/matrix and
/api/status-page/heartbeat/matrix) for the homeserver status banner.
Read-only public JSON, no credentials; nothing else changes.
The live snippet (/etc/nginx/snippets/cinny-security-headers.conf on
LXC 106) was identical to this file before the change; install it by hand
with a backup and `nginx -t` (the deploy script only handles
cinny/nginx.conf).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
| Devdesk | `4a3ccfc9-e1fe-4124-b014-7842fe51b9dc` | DevDesk "Claude needs you" (CT 126 `devdesk-notify-matrix`, URL in `/etc/devdesk/matrix-webhook`); transform `hookshot/devdesk.js`; avatar set via the appservice token |
**Hookshot notes:**
- Spam and Stuff is intentionally **unencrypted** — hookshot bridges cannot join E2EE rooms
- NPM proxies `/sfu/get` and `/get_token` → `http://10.10.10.29:8070` (lk-jwt-service). Both paths are in `/data/nginx/proxy_host/49.conf` on LXC 139 — **NPM will overwrite these if proxy host 49 is re-saved via the UI; re-add both location blocks after any NPM save**
- Transform functions are stored as Matrix room state (`uk.half-shot.matrix-hookshot.generic.hook`) and deployed via `hookshot/deploy.sh`
- Hook UUIDs are **not** in that state. Hookshot creates them and keeps a `{uuid: name}` map in the `@hookshot` bot's room account data (same event type). Deploying a new transform creates the hook. To look a UUID up on LXC 151, use the appservice token from `/etc/matrix-synapse/hookshot-registration.yaml`: `GET /_matrix/client/v3/user/@hookshot:matrix.lotusguild.org/rooms/<room>/account_data/uk.half-shot.matrix-hookshot.generic.hook?user_id=@hookshot:matrix.lotusguild.org`
// m.text, not m.notice: notices are muted by default push rules, and this one
// exists to reach your phone.
result={
version:'v2',
plain:'🔔 Claude needs you in '+session+': '+message+(url?' — '+url:''),
html:'🔔 <b>Claude needs you</b> in <code>'+esc(session)+'</code>: '+esc(message)
+(url?' — <a href="'+esc(url)+'">open in DevDesk</a>':''),
msgtype:'m.text',
};
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.