2026-05-11 - 2026-11-11

Overview

213 Active Pull Requests
24 Active Issues
Excluding merges, 1 author has pushed 1 commit to main and 300 commits to all branches. On main, 41 files have changed and there have been 4195 additions and 0 deletions.

213 Pull requests merged by 2 users

Merged #237 ci: clean up after image builds and demo wipes 2026-11-04 06:16:09 -06:00

Merged #236 fix(events): core.lease keeps a module's retry: false on read/apply refusals 2026-11-02 05:21:54 -06:00

Merged #234 fix(safety): team notifications skip members who block the author 2026-11-02 05:14:57 -06:00

Merged #233 feat(safety): report, block and hide, MODULE_API 1.21.0 2026-10-30 07:24:39 -05:00

Merged #232 feat(account): self-service account deletion, MODULE_API 1.20.0 2026-10-29 20:34:55 -05:00

Merged #231 fix(demo): switch on the actions the seeded events use (DM28) 2026-10-28 04:55:26 -05:00

Merged #230 feat(demo): seed the default set's events, NPCs and chat titles 2026-10-27 21:21:06 -05:00

Merged #229 feat(demo): refuse a data: URI in any write body (DM25) 2026-10-27 20:28:30 -05:00

Merged #228 fix(demo): chown modules/ and logs/ from a root container in the wipe 2026-10-27 13:15:26 -05:00

Merged #226 fix(docker): move the app and bot images to Node 22.23.4 (Node2Shell) 2026-10-27 12:40:04 -05:00

Merged #227 feat(demo): deploy/demo and the wipe + baseline workflows (step 5) 2026-10-27 12:31:48 -05:00

Merged #225 fix(demo): refuse publishing the homepage hero (DM21) 2026-10-26 09:50:57 -05:00

Merged #224 feat(demo): refuse an event step at save with demoRefuses (MODULE_API 1.19.0) 2026-10-26 05:52:10 -05:00

Merged #223 feat(demo): DEMO_MODE lock, seed:demo and the demo banner (MODULE_API 1.18.0) 2026-10-23 19:05:10 -05:00

Merged #221 fix(teams): say "game server", not "shard", on the never-synced Teams panel 2026-10-22 14:59:40 -05:00

Merged #220 chore(release): cut edge over to main — Steam sign-in (MODULE_API 1.17.0) and the last fixes' core half 2026-10-22 05:29:23 -05:00

Merged #219 fix(core): the last fixes' core half (W1 W2 W5 W19) 2026-10-22 01:18:26 -05:00

Merged #218 feat(auth): sign in with Steam (MODULE_API 1.17.0) 2026-10-20 10:26:02 -05:00

Merged #217 feat(events): a dry run carries a module's advice (MODULE_API 1.16.0) 2026-10-17 01:32:13 -05:00

Merged #216 feat(events): a trigger can start a run (Rust §14.3 stage 9, D370) 2026-10-16 02:08:02 -05:00

Merged #215 feat(events): a failed step may say when to retry (MODULE_API 1.15.0) 2026-10-15 02:47:49 -05:00

Merged #213 feat(events): a param that holds several values (MODULE_API 1.14.0) 2026-10-12 20:03:22 -05:00

Merged #212 feat(events): the step editor reworked, and event templates (MODULE_API 1.13.0) 2026-10-12 04:53:45 -05:00

Merged #211 fix(events): the public phase label finds the phase by key (runicnpc D314) 2026-10-06 21:50:17 -05:00

Merged #210 feat(events): an event action's progress() on a live run's public page (MODULE_API 1.12.0) 2026-10-06 07:59:01 -05:00

Merged #209 feat(events): an expired ledger status and ctx.events.expired (MODULE_API 1.11.0) 2026-09-27 01:10:46 -05:00

Merged #204 fix(modules): a site runs one module; the installer refuses a second 2026-09-26 17:28:59 -05:00

Merged #208 feat(events): publish runId on a public calendar run entry (Rust D125) 2026-09-25 12:43:53 -05:00

Merged #203 fix(admin): stop a long action name printing over the activity row beside it 2026-09-21 17:24:31 -05:00

Merged #202 chore(tools): delete the cliloc converter the Asset Bridge replaced (Asset Bridge cutover, 2 of 5) 2026-09-15 05:20:32 -05:00

Merged #201 chore(tools): delete the cliloc converter the Asset Bridge replaced (Phase 2) 2026-09-10 11:20:27 -05:00

Merged #199 feat(events): the Event System — core (Phase 16b cutover, 2 of 6) 2026-09-09 19:43:49 -05:00

Merged #200 fix(events): midnight in an announcement is 12:00 am on the Node we ship 2026-09-09 19:28:05 -05:00

Merged #198 fix(events): the public calendar, a stranded revert, and three dropped facts (Phase 16a) 2026-09-09 08:47:27 -05:00

Merged #197 fix(events): carry a module's own account of a successful step 2026-09-08 19:22:39 -05:00

Merged #196 feat(events): the public calendar, event pages and participation history (Phase 14a) 2026-09-08 12:04:55 -05:00

Merged #195 feat(events): the authoring UI proper (Phase 13) 2026-09-07 17:12:47 -05:00

Merged #194 feat(events): targeted leases, value sets and searchable sources (Phase 12b) 2026-09-07 11:22:46 -05:00

Merged #193 fix(events): give a lease's ledger row a reconcile path (Phase 11b) 2026-09-04 23:10:51 -05:00

Merged #192 feat(events): the integrations — lifecycle triggers, participants, results (Phase 10) 2026-09-04 13:24:46 -05:00

Merged #191 fix(engagement): the trigger manifest was stale, and its check was crying wolf 2026-09-04 03:37:17 -05:00

Merged #190 feat(events): the resource ledger, leases and cleanup (Phase 8) 2026-09-04 00:12:21 -05:00

Merged #189 feat(events): open the event contract to modules (Phase 7) 2026-09-03 14:37:36 -05:00

Merged #188 feat(events): enablement, per-run caps and mayInvoke (Phase 6) 2026-09-03 09:36:44 -05:00

Merged #187 feat(events): conditions, phase advancement and the diagnosis panel (Phase 5) 2026-09-02 22:26:41 -05:00

Merged #186 feat(events): schedule, recurrence and the calendar (Phase 4) 2026-09-02 20:58:08 -05:00

Merged #185 feat(events): the minimal admin surface (Phase 3) 2026-09-02 10:47:33 -05:00

Merged #184 feat(events): the runner (Phase 2) 2026-09-02 06:35:24 -05:00

Merged #183 feat(events): schema, CRUD and the core action registry (Phase 1) 2026-09-01 23:38:56 -05:00

Merged #182 feat(engagement): retention — three sweeps and one recorded refusal (Phase 14) 2026-09-01 15:57:09 -05:00

Merged #181 fix(engagement): claim the seed guard atomically, and let a rule name a digest body 2026-09-01 14:40:00 -05:00

Merged #180 feat(engagement): the engagement system — cutover 3 of 7 (edge → main) 2026-09-01 08:56:56 -05:00

Merged #179 fix(engagement): two defects the Phase 11b live walk found in core 2026-09-01 07:32:31 -05:00

Merged #178 feat(engagement): let a module ship its own templates and rules (Phase 11b) 2026-09-01 01:35:36 -05:00

Merged #177 feat(engagement): the admin ceiling and core's news.post emitter (Phase 11a) 2026-09-01 00:05:58 -05:00

Merged #176 feat(engagement): deliverability — suppression, bounces and the verification gate (Phase 9) 2026-08-31 10:52:50 -05:00

Merged #175 feat(engagement): the in-app channel, core and web (engagement Phase 7) 2026-08-31 02:22:27 -05:00

Merged #174 feat(engagement): the email channel on the engine, and the Teams migration (engagement Phase 6) 2026-08-31 01:07:17 -05:00

Merged #173 feat(engagement): the template editor, the trigger catalog and the send log (engagement Phase 5b) 2026-08-29 18:37:42 -05:00

Merged #172 feat(engagement): templates — the email block family, renderer and seeded set (engagement Phase 5a) 2026-08-29 13:14:47 -05:00

Merged #171 feat(engagement): Admin → Engagement → Rules and Audiences (engagement Phase 4b) 2026-08-29 12:28:56 -05:00

Merged #170 feat(engagement): the rules engine, cooldowns and outbox (engagement Phase 4a) 2026-08-29 08:24:16 -05:00

Merged #169 feat(notifications): per-channel preferences and the delivery-channel registry (engagement Phase 3) 2026-08-29 07:12:03 -05:00

Merged #168 feat(modules): event triggers, audiences and the ceiling lattice (engagement Phase 2) 2026-08-29 06:48:25 -05:00

Merged #167 feat(auth): unique, changeable, verifiable email addresses (engagement Phase 1b) 2026-08-29 02:08:46 -05:00

Merged #166 refactor(api): collapse /admin/account and /player/account onto /auth/me/account 2026-08-29 00:54:28 -05:00

Merged #165 feat(email): engagement Phase 1 — remove Gmail OAuth2, SMTP behind a transport registry 2026-08-28 21:09:46 -05:00

Merged #164 fix(swagger): hoist the one inline predicate that makes the generator run away 2026-08-28 21:09:29 -05:00

Merged #163 fix(env): the documented Compose deploy could not boot 2026-08-24 11:31:14 -05:00

Merged #162 fix(admin): style the Teams admin screen with the site's own classes 2026-08-19 14:35:09 -05:00

Merged #161 feat(teams): Teams as a platform primitive — MODULE_API 1.6.0 (Teams cutover 4/6) 2026-08-19 03:57:13 -05:00

Merged #160 fix(modules): core offers a contribution, never a slot name 2026-08-19 01:19:41 -05:00

Merged #159 feat(teams): phase 9 — one voice channel per Team, granted by a role 2026-08-19 00:21:18 -05:00

Merged #158 feat(teams): phase 8 — the notifications bridge, and the gate §7.2 could not check 2026-08-18 20:33:15 -05:00

Merged #157 feat(teams): phase 7 — the slash-command seam, and the bot's first tests 2026-08-18 19:16:31 -05:00

Merged #156 feat(teams): phase 6 — notifications, and the email sink the web never had 2026-08-18 18:10:22 -05:00

Merged #155 feat(teams): phase 5 — Forum 5b, discussion + moderation + reports 2026-08-18 13:36:52 -05:00

Merged #154 fix(teams): four defects the live rig found in the phase 4 forum 2026-08-18 10:21:57 -05:00

Merged #153 feat(teams): phase 4 — the forum access model, announcements and the operator's controls 2026-08-18 09:18:11 -05:00

Merged #152 feat(teams): the activity feed, the roster projection, and the inverted slot 2026-08-17 21:11:08 -05:00

Merged #151 feat(teams): Team core — the reconciler, the four authority paths, and the impersonation controls 2026-08-17 17:20:34 -05:00

Merged #150 feat(modules)!: the module system cutover — a game-agnostic core reaches main 2026-08-12 18:10:31 -05:00

Merged #149 chore(modules): declare the UO module for the UOMysticmoon instance 2026-08-12 17:57:44 -05:00

Merged #148 feat(modules): PublicLayout takes a shell, MODULE_API_VERSION 1.5.0 2026-08-12 14:26:44 -05:00

Merged #147 chore(modules): bump MODULE_API_VERSION to 1.4.0 — the sidecar rule 2026-08-12 09:41:29 -05:00

Merged #146 fix(modules): stop a module before purging its tables 2026-08-12 09:18:50 -05:00

Merged #145 test(login): stop the backoff-guard test racing its own one-second lock 2026-08-12 08:39:52 -05:00

Merged #144 feat(modules): the declarative Docker path (phase 4, slice 3) 2026-08-12 08:02:25 -05:00

Merged #143 feat(admin): the Modules screen (phase 4, slice 2) 2026-08-12 03:52:25 -05:00

Merged #142 feat(modules): install, uninstall, purge and restart (phase 4, slice 1) 2026-08-12 03:31:40 -05:00

Merged #141 feat(modules): merge module OpenAPI fragments into /api/docs.json (phase 3, slice 5) 2026-08-11 23:12:10 -05:00

Merged #140 refactor(modules)!: de-UO core's copy, and enforce it (phase 3, slice 4) 2026-08-11 22:02:40 -05:00

Merged #139 refactor(client): delete the UO client half (phase 3, slice 3) 2026-08-11 19:35:53 -05:00

Merged #138 feat(modules): client extension slots (phase 3, slice 2) 2026-08-11 16:53:44 -05:00

Merged #137 refactor(modules)!: move the UO server half out to module-uo (phase 3, slice 1) 2026-08-11 16:06:25 -05:00

Merged #136 feat(modules): mount the modules directory as a volume (phase 2, PR 9) 2026-08-11 00:58:20 -05:00

Merged #135 feat(modules): interleave module nav items and derive moderator confinement (phase 2, PR 8) 2026-08-11 00:29:42 -05:00

Merged #134 feat(modules): the client registry, window.__rg and the chunk's script injection 2026-08-10 23:02:01 -05:00

Merged #133 feat(modules): publish the installed-module list at /api/v1/public/modules 2026-08-10 22:16:52 -05:00

Merged #132 feat(modules): boot/shutdown hook dispatch and the installed_modules reconcile 2026-08-10 21:34:49 -05:00

Merged #131 feat(modules): the three de-entanglement registries, with core as the registrant 2026-08-10 18:18:59 -05:00

Merged #130 feat(modules): replay module schema fragments after core's (phase 2, PR 3) 2026-08-10 17:06:46 -05:00

Merged #129 feat(modules): the filesystem module loader (phase 2, PR 2) 2026-08-10 16:31:26 -05:00

Merged #128 feat(modules): installed_modules and the module state machine (phase 2, PR 1) 2026-08-10 14:05:00 -05:00

Merged #127 ci: run PR checks on pull requests into edge as well as main 2026-08-10 02:42:16 -05:00

Merged #126 feat(theming): admin-configurable theme, brand assets and navigation (edge → main) 2026-08-08 01:19:37 -05:00

Merged #125 feat(theming): dropdown sections and added links in the public header (phase 10) 2026-08-08 01:07:17 -05:00

Merged #124 feat(theming): nav wiring and the admin nav builder (phases 6-8) 2026-08-08 00:11:35 -05:00

Merged #123 feat(theming): brand-asset overrides and a cached, settings-aware HTML shell (phase 5) 2026-08-07 21:12:48 -05:00

Merged #122 feat(theming): server-resolved theme engine and admin appearance UI (phases 3-4) 2026-08-07 19:22:33 -05:00

Merged #121 feat(theming): settings-store, nav merge util and radius tokens (phases 0-2) 2026-08-07 18:25:27 -05:00

Merged #120 docs(readme): say how to get a sidecar before explaining how it is used 2026-08-07 16:31:19 -05:00

Merged #118 feat(shard)!: Protocol 3.0 cutover — visibility framework, spawn atlas, marketplace 2026-08-01 02:19:35 -05:00

Merged #119 fix(shard): answer with the instance name when the shard is unnamed 2026-08-01 01:04:23 -05:00

Merged #117 feat(shard)!: declare wire protocol 3 2026-07-29 22:02:26 -05:00

Merged #116 feat(shard): the player-vendor marketplace 2026-07-29 15:03:24 -05:00

Merged #115 feat(shard): resolve cliloc names for items and reward titles 2026-07-29 06:58:56 -05:00

Merged #114 feat(shard): ingest points.board and publish the leaderboards 2026-07-29 02:52:54 -05:00

Merged #113 feat(atlas): serve the spawn atlas and give operators a panel for it 2026-07-28 19:53:23 -05:00

Merged #112 feat(atlas): derive a spawn atlas from the shard tree on every boot 2026-07-28 16:51:30 -05:00

Merged #111 feat(shard): ingest world.ruleset and publish it at /site/rules 2026-07-28 15:50:37 -05:00

Merged #110 fix(shard): enforce visibility on the REST reads that bypassed it 2026-07-28 10:58:31 -05:00

Merged #109 feat(shard): admin-configurable visibility for every shard surface 2026-07-28 10:08:14 -05:00

Merged #108 feat(auth): honor and establish trusted devices on the SSO login paths 2026-07-28 01:13:00 -05:00

Merged #107 fix(shard): stop an undecryptable uo-link token 500ing every live-shard route 2026-07-28 00:33:35 -05:00

Merged #106 refactor(server): split public, player and residual auth into capability routers (PR 5) 2026-07-27 21:04:59 -05:00

Merged #105 refactor(server): split admin shard, uo-link, email, discord-bot, settings and dashboard into capability routers (PR 4) 2026-07-27 20:33:48 -05:00

Merged #104 refactor(server): split admin posts, uploads, wiki and pages into capability routers (PR 3) 2026-07-27 19:36:29 -05:00

Merged #103 refactor(server): split admin moderation, bot-activity and activity into capability routers (PR 2) 2026-07-27 19:12:04 -05:00

Merged #101 build(swagger): normalize and sort generated OpenAPI path keys 2026-07-27 16:00:59 -05:00

Merged #102 refactor(server): split admin users, account, invites and auth providers into capability routers 2026-07-27 16:00:07 -05:00

Merged #100 feat(security): soak the tightened CSP on report-only, with a same-origin sink 2026-07-27 15:31:33 -05:00

Merged #99 chore(server): freeze the URL surface with a generated route manifest (PR 0) 2026-07-27 15:07:32 -05:00

Merged #98 ci(docs): auto-sync PROJECT_TREE.md to the docs repo on push to main 2026-07-22 16:31:50 -05:00

Merged #97 fix(moderation): windowValue must not fall back to the 30d total on a null column 2026-07-22 13:15:48 -05:00

Merged #96 fix(admin): restore digit match in discordId route validation 2026-07-22 13:11:44 -05:00

Merged #95 fix(ntfy): publish ntfy host port so the external reverse proxy can reach it 2026-07-22 04:08:15 -05:00

Merged #94 fix(player): open the player self-service surface to staff 2026-07-22 03:36:15 -05:00

Merged #93 feat(auth): trusted devices, recovery codes, and admin MFA management 2026-07-22 00:09:06 -05:00

Merged #92 docs(readme): add architecture mermaid diagram 2026-07-21 21:17:19 -05:00

Merged #91 chore(dev): stub OAuth IdP tooling for local mobile SSO testing 2026-07-21 16:43:01 -05:00

Merged #90 fix(footer): point Shard Status link to /site/shard 2026-07-21 14:10:50 -05:00

Merged #89 refactor(server): dedupe shard-state shaping, upsert builder, and config DB models 2026-07-21 12:49:33 -05:00

Merged #88 chore(quality): resolve SonarQube code smells across website 2026-07-21 09:28:00 -05:00

Merged #87 ci(sonarqube): populate the "Unit Tests" measure via a test-execution report 2026-07-21 01:26:43 -05:00

Merged #86 test: meaningful unit tests for server models/controllers + client logic 2026-07-21 00:55:49 -05:00

Merged #85 ci(sonarqube): generate and report server test coverage 2026-07-20 23:57:08 -05:00

Merged #84 fix(security): add SPA CSP, drop x-powered-by, strengthen dedupe hash 2026-07-20 23:13:43 -05:00

Merged #83 ci(sonarqube): non-blocking SonarQube analysis on push to main 2026-07-20 21:54:16 -05:00

Merged #82 fix(db): strip inline -- comments before splitting schema statements 2026-07-20 19:31:15 -05:00

Merged #81 feat(mobile-sso): serve assetlinks.json + App Links redirect allowlist 2026-07-20 18:57:55 -05:00

Merged #80 feat(auth): native SSO authorization bridge for the Android app (M9 Part 1) 2026-07-20 17:27:24 -05:00

Merged #79 feat(settings): surface push.ntfyUrl in /public/settings for the app 2026-07-20 15:55:58 -05:00

Merged #78 feat(push): M7 backend — opt-in push notifications via self-hosted ntfy 2026-07-20 10:28:01 -05:00

Merged #77 feat(public): version/health surfacing + typed brand block 2026-07-19 12:38:22 -05:00

Merged #76 feat(auth): role-agnostic self-service surface under /auth/me 2026-07-19 11:34:42 -05:00

Merged #75 feat(auth): self-service password reset (backend + web) 2026-07-19 04:36:37 -05:00

Merged #74 Moderation appeals (Phase 6c) + Discord auto-reversal (Phase 6d) 2026-07-19 00:18:20 -05:00

Merged #73 docs: generalize deployment section to any reverse proxy 2026-07-18 22:20:03 -05:00

Merged #72 fix(shard): restrict staff in-game location to admins/moderators 2026-07-18 21:39:25 -05:00

Merged #71 chore: add open-source governance files (GPLv3 + contributing docs) 2026-07-18 19:31:05 -05:00

Merged #70 fix(brand): link "Runic Gateway" footer badge to Gitea org 2026-07-18 18:36:48 -05:00

Merged #69 feat(brand): default emblem — favicon, hero medallion, footer credit 2026-07-18 17:20:29 -05:00

Merged #68 feat(brand): BRAND_* env scheme — instance branding without a rebuild 2026-07-18 02:40:07 -05:00

Merged #67 docs: move design docs to RunicGateway/docs 2026-07-18 00:51:32 -05:00

Merged #66 chore(org): retarget org paths to RunicGateway 2026-07-18 00:06:46 -05:00

Merged #65 Protocol 2.0/2.1 uo-link integration — boards, cross-links, news gump, account provisioning 2026-07-17 21:34:27 -05:00

Merged #64 ci(deploy): correct deploy runner label to uom-deploy-runner 2026-07-17 05:52:02 -05:00

Merged #63 ci(deploy): auto-deploy prod stack after image build on merge to main 2026-07-17 05:29:06 -05:00

Merged #62 fix(bot): retry boot-time config fetch so bot self-heals on cold start 2026-07-15 14:17:25 -05:00

Merged #61 fix(public): always show real hero + drop nav from landing page 2026-07-15 06:03:53 -05:00

Merged #58 feat(shard): admin write plane, help-page queue, and public champion board 2026-07-14 13:46:52 -05:00

Merged #57 ci: gate PRs into main on server tests + client build 2026-07-12 10:40:19 -05:00

Merged #56 feat(admin): view a user's shard footprint at /admin/users/:id 2026-07-12 09:42:01 -05:00

Merged #55 deploy: split build into docker-compose.dev.yml (prod compose pulls only) 2026-07-11 18:45:42 -05:00

Merged #54 deploy: pull prebuilt registry images in compose (IMAGE_TAG) + dev/prod split 2026-07-11 18:36:57 -05:00

Merged #53 ci: build & publish app + bot images to Gitea registry on merge 2026-07-11 18:01:05 -05:00

Merged #52 News post → town crier + Discord announcement pipeline 2026-07-11 16:58:34 -05:00

Merged #51 Homepage teaser: rich text editor 2026-07-11 11:09:53 -05:00

Merged #50 Frontend theme redo: player portal → Admin sidebar shell + stat-tile My Characters 2026-07-11 11:00:18 -05:00

Merged #49 uo-link: staff-only public presence + admin character access 2026-07-11 09:32:50 -05:00

Merged #47 CMS Page Builder (Wave 1): block-based Pages content type 2026-07-09 21:15:06 -05:00

Merged #46 Modernize email: Gmail OAuth2 sending + admin sidebar redesign 2026-07-07 22:33:44 -05:00

Merged #45 Redesign admin/staff sidebar: collapsible categories, icons, role-accurate nav 2026-07-07 21:56:18 -05:00

Merged #44 Gate /admin to staff roles; role-aware login redirects for players 2026-07-06 20:02:54 -05:00

Merged #43 Player accounts: self-service player role, registration, and portal 2026-07-06 15:29:45 -05:00

Merged #42 Moderation dashboard: staff dashboard, user history, notes, event capture (Phase 6a + 6b) 2026-07-05 15:51:40 -05:00

Merged #41 Fix bot container inheriting site PORT/LOG_FILE from shared .env 2026-07-05 00:40:31 -05:00

Merged #40 Audit and fix Swagger/OpenAPI accuracy; regenerate served spec 2026-07-04 23:33:38 -05:00

Merged #39 Enforce TOTP second factor on SSO login (#31) 2026-07-04 22:34:51 -05:00

Merged #38 Fix SSO flow-token / session type confusion (#32) 2026-07-04 21:56:33 -05:00

Merged #37 Implement web session/token revocation (#30) 2026-07-04 21:08:17 -05:00

Merged #36 Isolate internal bot-config route from the public listener (#33) 2026-07-04 17:50:08 -05:00

Merged #29 Add Discord bot: moderation, filters, scheduling, roles, invites, site integration 2026-07-04 16:19:43 -05:00

Merged #28 Hero editor: fullscreen landing, remove two-card row, quick links into hero 2026-07-03 21:55:52 -05:00

Merged #27 Add Swagger/OpenAPI API docs (swagger-ui + swagger-autogen) 2026-07-03 15:30:16 -05:00

Merged #26 Hero editor: scale text-block fonts with the resize handle (#25) 2026-07-03 15:01:52 -05:00

Merged #24 Add session abstraction, mobile bearer auth, and pluggable SSO (Google/Discord/OIDC) 2026-07-03 10:35:46 -05:00

Merged #23 Add Bot Activity admin panel: banned-IP view + recent events + emergency unban 2026-07-03 03:29:56 -05:00

Merged #22 Update README for today's security hardening and 2FA work 2026-07-03 01:09:56 -05:00

Merged #21 Fail fast when JWT_SECRET is missing in production (closes #14) 2026-07-03 00:58:18 -05:00

Merged #20 Make the hero Moon image configurable (src/alt), backwards-compatible 2026-07-02 23:45:26 -05:00

Merged #19 Admin login hardening: RBAC-safe controls, optional TOTP, bot-scoring + IP ban (closes #9) 2026-07-02 23:27:52 -05:00

Merged #18 Derive uploaded file extension from mimetype, not originalname (fixes #11) 2026-07-02 21:44:30 -05:00

Merged #17 Validate and uniqueness-check username on user update (fixes #13) 2026-07-02 21:39:44 -05:00

Merged #16 Re-validate JWT against the DB in isLoggedIn (fixes #12) 2026-07-02 21:32:08 -05:00

Merged #15 Enforce role-based authorization on admin-only routes (fixes #10) 2026-07-02 21:31:09 -05:00

Merged #8 Fix #6: larger RTE toolbar buttons + bigger, both-axis-scrolling editor 2026-06-30 13:49:24 -05:00

Merged #7 RTE Posts upgrade: TipTap rich-text editing + sanitization for posts 2026-06-30 13:34:04 -05:00

Merged #4 hero-feature 2026-06-28 09:22:43 -05:00

Merged #3 Wiki upgrade: rich-text editing, categories, drafts, links/backlinks, tags, search, revisions 2026-06-27 16:22:48 -05:00

Merged #2 Document full-stack setup; fix dev proxy; drop stray temp script 2026-06-27 02:24:26 -05:00

Merged #1 Frontend update 2026-06-26 21:55:48 -05:00

20 Issues closed from 3 users

Closed #206 events: core.lease drops a module's retry: false from read/apply refusals 2026-11-02 05:21:55 -06:00

Closed #214 Sign in with Steam (a built-in provider, as Google and Discord) 2026-10-20 10:26:03 -05:00

Closed #35 [SECURITY AUDIT] Username enumeration via login timing side-channel (bcrypt runs only for existing users) 2026-08-04 14:03:19 -05:00

Closed #60 side ways scrolling section on hero page. 2026-08-04 14:02:24 -05:00

Closed #34 [SECURITY AUDIT] No Content-Security-Policy — stored-HTML XSS defense rests entirely on sanitization 2026-08-04 14:02:12 -05:00

Closed #59 hero page layout 2026-07-17 04:45:05 -05:00

Closed #48 Homepage Teaser 2026-07-11 11:09:54 -05:00

Closed #31 [SECURITY AUDIT] SSO login bypasses TOTP two-factor for accounts that have 2FA enabled 2026-07-04 22:34:52 -05:00

Closed #32 [SECURITY AUDIT] SSO flow token (sso_tx) validates as a session — token-type confusion in sessionFromDecoded 2026-07-04 21:56:34 -05:00

Closed #30 [SECURITY AUDIT] Session/token revocation is a non-functional stub — logout and password change do not invalidate existing JWTs 2026-07-04 21:08:18 -05:00

Closed #33 [SECURITY AUDIT] Decrypted Discord bot token served from an endpoint on the public API router, guarded only by a shared secret 2026-07-04 17:50:08 -05:00

Closed #25 On the front page/hero page 2026-07-03 15:01:52 -05:00

Closed #14 [Bug][Medium] Server boots with no JWT_SECRET (only a warning) 2026-07-03 00:58:18 -05:00

Closed #5 Hero button bug 2026-07-02 23:45:27 -05:00

Closed #9 Admin path security 2026-07-02 23:27:53 -05:00

Closed #11 [Security][High] Uploaded file extension is attacker-controlled → stored XSS 2026-07-02 21:44:30 -05:00

Closed #13 [Bug][Medium] username unvalidated and not uniqueness-checked on user update 2026-07-02 21:39:44 -05:00

Closed #12 [Security][Medium] Stale JWT: demoted/deleted users keep access until token expiry 2026-07-02 21:32:09 -05:00

Closed #10 [Security][High] No role-based authorization — editor role is never enforced 2026-07-02 21:31:09 -05:00

Closed #6 wiki editor. 2026-06-30 13:49:24 -05:00

24 Issues created by 1 user

Opened #5 Hero button bug 2026-06-29 18:21:13 -05:00

Opened #6 wiki editor. 2026-06-29 18:24:02 -05:00

Opened #9 Admin path security 2026-06-30 23:17:54 -05:00

Opened #10 [Security][High] No role-based authorization — editor role is never enforced 2026-07-01 20:20:44 -05:00

Opened #11 [Security][High] Uploaded file extension is attacker-controlled → stored XSS 2026-07-01 20:20:45 -05:00

Opened #12 [Security][Medium] Stale JWT: demoted/deleted users keep access until token expiry 2026-07-01 20:20:45 -05:00

Opened #13 [Bug][Medium] username unvalidated and not uniqueness-checked on user update 2026-07-01 20:20:46 -05:00

Opened #14 [Bug][Medium] Server boots with no JWT_SECRET (only a warning) 2026-07-01 20:20:46 -05:00

Opened #25 On the front page/hero page 2026-07-03 11:21:29 -05:00

Opened #30 [SECURITY AUDIT] Session/token revocation is a non-functional stub — logout and password change do not invalidate existing JWTs 2026-07-04 17:00:33 -05:00

Opened #31 [SECURITY AUDIT] SSO login bypasses TOTP two-factor for accounts that have 2FA enabled 2026-07-04 17:00:49 -05:00

Opened #32 [SECURITY AUDIT] SSO flow token (sso_tx) validates as a session — token-type confusion in sessionFromDecoded 2026-07-04 17:01:08 -05:00

Opened #33 [SECURITY AUDIT] Decrypted Discord bot token served from an endpoint on the public API router, guarded only by a shared secret 2026-07-04 17:01:30 -05:00

Opened #34 [SECURITY AUDIT] No Content-Security-Policy — stored-HTML XSS defense rests entirely on sanitization 2026-07-04 17:01:47 -05:00

Opened #35 [SECURITY AUDIT] Username enumeration via login timing side-channel (bcrypt runs only for existing users) 2026-07-04 17:02:02 -05:00

Opened #48 Homepage Teaser 2026-07-11 02:28:10 -05:00

Opened #59 hero page layout 2026-07-14 16:00:38 -05:00

Opened #60 side ways scrolling section on hero page. 2026-07-14 16:26:45 -05:00

Opened #205 events: cleanup restores an orphaned lease row, and can write an old baseline over a later run's value 2026-09-24 00:16:30 -05:00

Opened #206 events: core.lease drops a module's retry: false from read/apply refusals 2026-09-24 00:16:31 -05:00

Opened #207 events: core.lease makes two module round trips under the default 10 s budget 2026-09-24 00:16:31 -05:00

Opened #214 Sign in with Steam (a built-in provider, as Google and Discord) 2026-10-14 05:09:11 -05:00

Opened #222 Demo mode for a public demo.runicgateway.com deployment 2026-10-23 03:37:56 -05:00

Opened #235 demo: keep the demo rig's uMod plugins current (auto-update between wipes) 2026-11-01 01:45:29 -06:00