Skip to content

Update dependencies (Go + webapp) - #28

Merged
fmartingr merged 10 commits into
masterfrom
dep-update-2026-06-16
Jun 25, 2026
Merged

Update dependencies (Go + webapp)#28
fmartingr merged 10 commits into
masterfrom
dep-update-2026-06-16

Conversation

@fmartingr

@fmartingr fmartingr commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Update Go and webapp (npm) dependencies to latest compatible versions, fixing security vulnerabilities and adopting build tooling improvements from the starter template.

Go dependencies (go get -u ./... + go mod tidy):

  • Updated all direct Go dependencies to their latest versions
  • Upgraded Go toolchain 1.25 → 1.26.3
  • Added go.uber.org/mock v0.6.0 (replaces deprecated github.com/golang/mock)
  • Regenerated mocks after mattermost/server/public added CountPropertyFields to plugin.API

Webapp dependencies (npm):

  • @babel/* 7.25.x → 7.29.7: fixes arbitrary file read and ReDoS vulnerabilities
  • @typescript-eslint/parser 7.0.2 → 7.18.0: fixes minimatch ReDoS, aligns with eslint-plugin version
  • webpack 5.95.0 → 5.107.2: fixes SSRF vulnerability
  • 23 remaining advisories require jest or jest-junit major version bumps (skipped — test tooling only, not production code)

Starter template sync (separate commit):

  • Updated golangci-lint to v2, gotestsum, Node.js to 24.x, Go to 1.25
  • Adopted new linters: bodyclose, gocritic, gosec, modernize, nakedret, unconvertvet
  • Replaced os.MkdirAll + //nolint:gosec with os.OpenRoot-based secure directory creation in logr.go
  • Added unit tests for modernized code paths

Bug fixes found during local integration testing:

  • Fixed inverted condition in OnConfigurationChange that caused the plugin to refuse loading in any correctly configured environment (Connected Workspaces shared channels check was backwards)
  • Fixed Matrix room alias sanitization: alias local parts were not stripped of characters invalid in the Matrix spec (only [a-z0-9-] are allowed), producing malformed aliases like #_mattermost_"name":server when room names contained quotes or other special characters
  • Fixed /matrix create argument parsing: strings.Fields does not strip shell-style quotes, so room names passed as "my room" retained their surrounding quotes and ended up in the alias

Ticket Link

- Update golangci-lint to v2.9.0, gotestsum to v1.13.0
- Update Node.js to 24.13.1 (from 20.11)
- Update Go to 1.25 (from 1.23.0), run go mod tidy
- Adopt new linters from template: bodyclose, gocritic, gosec, modernize, nakedret, unqueryvet
- Add gofmt and gofumpt formatters to golangci.yml
- Update mock tool from golang/mock to go.uber.org/mock
- Update semver Makefile targets with LATEST_RELEASE_TAG logic
- Fix .editorconfig glob syntax (remove spaces in patterns)
- Update build/manifest/main.go: use strings.FieldsSeq, url.JoinPath, fmt.Appendf
- Fix all linter issues: modernize loops, gosec permissions, gocritic patterns
- Upgrade mattermost/server/public v0.1.10 → v0.4.2 and regenerate mocks
  (plugin.API gained CountPropertyFields; switch mock tool import to
  go.uber.org/mock/gomock in matrix_util_test and thread_mapping_test)
- Upgrade testcontainers-go v0.37.0 → v0.42.0
- Upgrade Go toolchain 1.25 → 1.26.3 (via go get -u)
- Upgrade various transitive deps (grpc, otel, x/crypto, x/net, x/sys, …)
- Fix flaky rate-limit timing test: measure total elapsed from first call
  start instead of second call start, matching the rate limiter's own clock
- Babel 7.25.x → 7.29.7: fixes arbitrary file read (CVE) and ReDoS
- @typescript-eslint/parser 7.0.2 → 7.18.0: fixes minimatch ReDoS,
  aligns with eslint-plugin version
- webpack 5.95.0 → 5.107.2: fixes SSRF vulnerability
- Remaining 23 vulns require jest/jest-junit major version bumps (skip)
@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d0bf4bfb-6178-43fb-b7ed-52e62a3d1f4e

📥 Commits

Reviewing files that changed from the base of the PR and between e055112 and b4b1f19.

📒 Files selected for processing (2)
  • docker-compose.yml
  • server/matrix/client.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • server/matrix/client.go

📝 Walkthrough

Walkthrough

This PR upgrades the Go toolchain to 1.26.3, Node.js to 24.13.1, and numerous direct and indirect dependencies. It migrates the mock library from github.com/golang/mock to go.uber.org/mock, overhauls golangci-lint configuration to enable stricter linters and additional formatters, and applies comprehensive linter-driven code fixes: path traversal hardening in logger setup, strings.Cut replacements for ghost-user ID parsing, switch statement rewrites for command and webhook logic, for range loop modernization, explicit parameter naming in mocks, and octal literal standardization throughout.

Changes

Tooling Upgrade, Linter Compliance, and Go Modernization

Layer / File(s) Summary
Dependency and tooling version upgrades
go.mod, .nvmrc, webapp/package.json
Updates Go directive to 1.26.3 and removes explicit toolchain line; adds go.uber.org/mock as a direct dependency; bumps mattermost/server/public to v0.4.2, testify to v1.11.1, testcontainers-go to v0.42.0, and mattermost/logr/v2 to v2.0.22. Refreshes the full indirect dependency graph across Docker, OpenTelemetry, and golang.org/x modules. Updates Node.js to 24.13.1 and bumps @babel/* (7.29.7), @typescript-eslint/parser (7.18.0), and webpack (5.107.2).
golangci-lint and editorconfig reconfiguration
.golangci.yml, .editorconfig
Reconfigures .golangci.yml with 5-minute timeout and readonly module mode; switches linters from preset-based defaults to explicit set (gosec, gocritic, revive, staticcheck, unqueryvet) with per-linter settings (govet enables all checks, disables fieldalignment/shadow; revive disables exported/unused-parameter). Reworks exclusions to use path- and regex-based rules; expands formatters (gofmt, gofumpt, goimports with local-prefixes for matrix-bridge). Fixes .editorconfig glob patterns by removing stray spaces.
Makefile release versioning and tooling targets
Makefile
Enhances release version computation by introducing LATEST_RELEASE_TAG computation (excluding -rc tags) with fallback to CURRENT_VERSION; updates patch/minor/major bump targets to recompute MAJOR/MINOR/PATCH from LATEST_RELEASE_TAG via BASE_VERSION before applying increments. Bumps golangci-lint to v2.9.0, gotestsum to v1.13.0; adds rm -rf server/dist to server target; migrates mock target to go.uber.org/mock/mockgen@v0.6.0.
Build tools and manifest generation security
build/manifest/main.go, build/pluginctl/main.go, tools/emoji_generator.go, testcontainers/matrix/container.go, testcontainers/matrix/utils.go
Hardens build/manifest/main.go with net/url import for url.JoinPath release notes URL construction; switches manifest template rendering from fmt.Sprintf to fmt.Appendf; updates file modes from 0600 to 0o600. Adds //nolint:gosec to os.Open(manifestFilePath) and os.Open(bundlePath) in pluginctl. Updates emoji_generator.go permissions from 0755 to 0o750; adds //nolint:gocritic and //nolint:gosec annotations. Updates testcontainer file mount modes to 0o644.
Mock library migration to go.uber.org/mock
server/command/mocks/mock_commands.go, server/mocks/mock_kvstore.go, server/matrix_util_test.go, server/thread_mapping_test.go
Regenerates MockCommand and MockKVStore with go.uber.org/mock/gomock import; adds isgomock struct{} marker field; updates recorder method signatures from interface{} to any with explicit parameter names (args, key, value, userID, page, perPage, prefix). Updates all test files to import gomock from the new path.
Logger security hardening and comprehensive tests
server/logr.go, server/logr_test.go
Refactors CreateTransactionLogger to normalize MM_MATRIX_LOG_FILESPEC via filepath.Clean, reject path traversal via os.OpenRoot/MkdirAll, and use 0750 permissions. Returns errors directly with logger.Shutdown() invoked on error paths; switches file target to cleanedFilespec. Adds five test cases covering no-filespec, absolute/relative/bare-filename paths, and relative traversal rejection with assertion that outside directories are not created.
Import organisation for goimports compliance
server/*.go, server/**/ test files, testcontainers/matrix/, testcontainers/matrix/utils.go
Reorders import blocks across 25+ files to satisfy golangci-lint goimports local-prefixes rule, grouping Mattermost public packages (model, plugin, pluginapi, cluster) and external packages before project-internal imports (command, matrix, kvstore). No functional changes.
Ghost-user ID extraction refactor and tests
server/matrix_util.go, server/bridge_utils.go, server/bridge_utils_test.go
Replaces strings.Index + substring slicing with strings.Cut in extractMattermostUserIDFromGhost (both locations), returning "" when ":" delimiter is absent. Adds TestBridgeUtils_ExtractMattermostUserIDFromGhost covering valid ghost user IDs, non-ghost users, wrong prefixes, malformed IDs, and server domains with ports.
handleMatrixMemberDM switch routing and comprehensive tests
server/matrix_webhook.go, server/matrix_webhook_test.go
Refactors if/else if ghost-user detection chain in handleMatrixMemberDM to a boolean switch statement. Adds TestHandleMatrixMemberDM_EarlyExits (nil content, non-join membership, missing membership, nil StateKey) and TestHandleMatrixMemberDM_SwitchRouting (ghost-as-target, ghost-as-actor, non-ghost, invite scenarios).
Command parsing and status selection switch rewrites
server/command/command.go, server/command/command_test.go, server/configuration.go
Converts memberSyncStatus and joinStatus if/else if chains to switch statements on joinedCount and totalMembers. Rewrites /matrix create argument parsing to switch on len(fields), handling len==2 (default), len==3 (publish flag or room name), and multi-field cases via strings.CutPrefix. Strips surrounding quotes from roomName before room creation. Mirrors identical refactor in test command handler. Updates EnableSharedChannels guard logic in configuration.
Matrix room alias sanitisation and server logic updates
server/matrix/client.go, server/sync_to_matrix.go, server/plugin_integration_test.go
Enhances CreateRoom to sanitise the generated Matrix room alias local part by filtering to lowercase letters, digits, and hyphens, trimming leading/trailing hyphens, and defaulting to "room" if the result is empty. Replaces nested else with else if in updatePostInMatrix for improved readability. Converts membership counting if/else if/else to switch in integration test.
Rate limiting and idiomatic Go modernisation
server/matrix/ratelimit.go, server/matrix/client_ratelimit_test.go, server/matrix/ratelimit_test.go, server/matrix/ratelimit_load_test.go, server/migrations_test.go, server/post_tracker_test.go, server/testhelpers_test.go
Replaces manual loop in ValidateRateLimitingMode with slices.Contains. Converts indexed for loops to for range across rate-limit unit/load/client tests. Replaces wg.Add/wg.Done patterns with wg.Go() in concurrent test workers. Simplifies MemoryKVStore pagination with min(). Updates rate-limit timing baselines to measure from shared start times.
Documentation and infrastructure updates
README.md, docker-compose.yml
Expands README "Quick Start" section with explicit download/upload steps, reformats the "Configuration" table, restructures "Starting the Matrix Synapse Server" instructions with explicit bullet points and code blocks, and refines "Troubleshooting" section layout. Updates docker-compose.yml to bump postgres from 13 to 14 and clarifies Synapse container initialisation and mounting configuration.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 28.89% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'Update dependencies (Go + webapp)' is partially related to the changeset; it highlights a key change (dependency updates) but omits critical context about bug fixes and template synchronization that constitute substantial portions of the PR.
Description check ✅ Passed The PR description comprehensively details all major changes: Go/npm dependency updates with security context, starter template synchronization, and significant bug fixes discovered during integration testing.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dep-update-2026-06-16

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
Makefile (1)

436-436: ⚡ Quick win

Use $(GO) for mockgen install to keep toolchain selection consistent.

Line 436 bypasses the configured GO variable and can break environments that override GO.

Suggested patch
-	go install go.uber.org/mock/mockgen@v0.6.0
+	$(GO) install go.uber.org/mock/mockgen@v0.6.0
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Makefile` at line 436, The mockgen installation command on line 436 uses the
direct go command instead of the configured GO variable, which breaks
environments that override the GO toolchain variable for consistency. Replace
the direct go install command with $(GO) install to use the same Go toolchain
variable that is configured elsewhere in the Makefile. This ensures that the
mockgen@v0.6.0 installation respects the toolchain selection configuration.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.golangci.yml:
- Around line 42-45: The mock exclusion regex pattern in the paths section is
incorrectly specified as "mock.*", which only matches files at the root level
starting with "mock" and fails to exclude the actual mock files stored in
server/mocks/ and server/command/mocks/ directories. Replace the "mock.*"
pattern with a regex that correctly matches these nested mock directories, such
as "server/.*/mocks/" or ".*mocks/.*" to ensure the linter properly excludes all
generated mock files from the repository.

In `@go.mod`:
- Around line 7-12: Remove the unused legacy dependency github.com/golang/mock
v1.6.0 from the go.mod file. This dependency is no longer used in the codebase
and has been replaced by go.uber.org/mock v0.6.0. Delete the line containing
github.com/golang/mock v1.6.0 to eliminate unnecessary dependency bloat and
avoid migration confusion.

---

Nitpick comments:
In `@Makefile`:
- Line 436: The mockgen installation command on line 436 uses the direct go
command instead of the configured GO variable, which breaks environments that
override the GO toolchain variable for consistency. Replace the direct go
install command with $(GO) install to use the same Go toolchain variable that is
configured elsewhere in the Makefile. This ensures that the mockgen@v0.6.0
installation respects the toolchain selection configuration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ab424e70-4afc-46ed-b97e-d3642400d88d

📥 Commits

Reviewing files that changed from the base of the PR and between ee791bf and 1334045.

⛔ Files ignored due to path filters (2)
  • go.sum is excluded by !**/*.sum
  • webapp/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (45)
  • .editorconfig
  • .golangci.yml
  • .nvmrc
  • Makefile
  • build/manifest/main.go
  • build/pluginctl/main.go
  • go.mod
  • server/bridge_utils.go
  • server/bridge_utils_test.go
  • server/command/command.go
  • server/command/command_test.go
  • server/command/mocks/mock_commands.go
  • server/configuration.go
  • server/dm_room_creation_test.go
  • server/logr.go
  • server/matrix/client_ratelimit_test.go
  • server/matrix/ratelimit.go
  • server/matrix/ratelimit_load_test.go
  • server/matrix/ratelimit_test.go
  • server/matrix/test/client_test.go
  • server/matrix/test/ratelimit_test.go
  • server/matrix_mentions_integration_test.go
  • server/matrix_util.go
  • server/matrix_util_test.go
  • server/matrix_webhook.go
  • server/matrix_webhook_test.go
  • server/migrations.go
  • server/migrations_test.go
  • server/mocks/mock_kvstore.go
  • server/mocks/mock_plugin_api.go
  • server/plugin.go
  • server/plugin_integration_test.go
  • server/post_tracker_test.go
  • server/sync_to_matrix.go
  • server/sync_to_matrix_integration_test.go
  • server/sync_to_matrix_test.go
  • server/sync_to_mattermost.go
  • server/sync_to_mattermost_test.go
  • server/testhelpers_test.go
  • server/thread_mapping_test.go
  • server/user_remote_detection_test.go
  • testcontainers/matrix/container.go
  • testcontainers/matrix/utils.go
  • tools/emoji_generator.go
  • webapp/package.json

Comment thread .golangci.yml
Comment thread go.mod Outdated
- Remove github.com/golang/mock from go.mod (migrated to go.uber.org/mock)
- Fix goroutine leak in CreateTransactionLogger: call logger.Shutdown() on
  all error paths after logr.New() to avoid orphaned background goroutines
- Add unit tests for CreateTransactionLogger covering no-op (empty env),
  absolute path, relative path, bare filename, and relative ".." traversal
  rejection via os.Root.MkdirAll
- Fix golangci.yml mock exclusion regex: mock.* only matched root-level
  paths; replace with .*/mocks/.* to cover server/mocks/ and
  server/command/mocks/ directories
- Use $(GO) instead of go in mockgen install target for consistent
  toolchain selection in environments that override the GO variable
@fmartingr
fmartingr requested a review from wiggin77 June 17, 2026 14:12
@fmartingr fmartingr self-assigned this Jun 17, 2026
Strip characters invalid in Matrix alias local parts (only [a-z0-9-] are
allowed) so room names with quotes or other special characters don't
produce malformed aliases like #_mattermost_"name":server.

Also strip surrounding quotes from the /matrix create roomName argument
since users may wrap room names in quotes when the name contains spaces.
The condition was backwards: it returned an error when shared channels
was enabled rather than when it was disabled, so the plugin refused to
load in any correctly configured environment.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
docker-compose.yml (2)

3-3: Pin container images to specific versions instead of latest.

Using latest for alpine and Synapse makes local environments non-reproducible and increases supply-chain drift risk. Pin explicit versions so updates remain intentional.

Suggested change
-        image: alpine:latest
+        image: alpine:3.23
...
-        image: matrixdotorg/synapse:latest
+        image: matrixdotorg/synapse:v1.154.0
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docker-compose.yml` at line 3, In the docker-compose.yml file, replace the
`alpine:latest` image tag with a specific version number (for example,
`alpine:3.18` or `alpine:3.19`) to ensure reproducible builds and reduce supply
chain drift risk. Using pinned versions makes the local environment predictable
and keeps image updates intentional rather than automatic.

27-29: Gate Synapse startup on Postgres health, not just container start.

depends_on without health conditions can still race DB readiness and cause transient startup failures. Add a Postgres healthcheck and depend on service_healthy. The service_completed_successfully and service_healthy conditions are officially supported in current Docker Compose versions and align with best practices for startup orchestration.

Suggested change
     synapse:
@@
-        depends_on:
-            - synapse-init
-            - postgres
+        depends_on:
+            synapse-init:
+                condition: service_completed_successfully
+            postgres:
+                condition: service_healthy
@@
     postgres:
         image: postgres:14
@@
         environment:
@@
             - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
+        healthcheck:
+            test: ["CMD-SHELL", "pg_isready -U synapse -d synapse"]
+            interval: 10s
+            timeout: 5s
+            retries: 10
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docker-compose.yml` around lines 27 - 29, The depends_on section in the
docker-compose.yml file currently lacks health conditions, which can cause
Synapse to start before Postgres is actually ready. Convert the depends_on list
format to an object format with explicit conditions: change synapse-init to use
service_completed_successfully condition and postgres to use service_healthy
condition. Additionally, ensure the postgres service in the docker-compose.yml
includes a healthcheck definition that Docker Compose can monitor (such as
checking if the database port is responding) so that the service_healthy
condition can be properly evaluated before Synapse attempts to connect.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docker-compose.yml`:
- Around line 4-8: The chmod -R 755 command applies overly permissive
world-readable and executable permissions to all files and directories under
/data, which exposes sensitive Synapse signing keys and configuration files.
Replace the recursive chmod 755 with more restrictive permissions that align
with Synapse's security design (such as 0750 for directories and 0640 for
sensitive files, or remove the chmod entirely if Synapse properly sets
permissions during initialization). Ensure the chown command to 991:991 remains
in place to set the correct ownership, but tighten the permission model to
prevent unauthorized access to sensitive configuration and signing key files.

In `@server/configuration.go`:
- Line 88: The condition at line 88 dereferences the pointer
ConnectedWorkspacesSettings without first checking if it is nil, which will
cause a panic. Add a nil check for ConnectedWorkspacesSettings before attempting
to access its EnableSharedChannels field. Modify the condition to first verify
that p.GetPluginAPI().GetConfig().ConnectedWorkspacesSettings is not nil, then
check if EnableSharedChannels is nil or false within that guard.

In `@server/matrix/client.go`:
- Around line 841-843: The fallback alias assignment in the block where alias is
empty (if alias == "") uses a static value "room" which causes collisions when
multiple sanitized aliases result in empty strings. Replace this static fallback
with a deterministic unique identifier by appending a sanitized fragment of the
mattermostChannelID to the fallback string, ensuring each room gets a unique
alias even when the original alias sanitizes to empty.

---

Nitpick comments:
In `@docker-compose.yml`:
- Line 3: In the docker-compose.yml file, replace the `alpine:latest` image tag
with a specific version number (for example, `alpine:3.18` or `alpine:3.19`) to
ensure reproducible builds and reduce supply chain drift risk. Using pinned
versions makes the local environment predictable and keeps image updates
intentional rather than automatic.
- Around line 27-29: The depends_on section in the docker-compose.yml file
currently lacks health conditions, which can cause Synapse to start before
Postgres is actually ready. Convert the depends_on list format to an object
format with explicit conditions: change synapse-init to use
service_completed_successfully condition and postgres to use service_healthy
condition. Additionally, ensure the postgres service in the docker-compose.yml
includes a healthcheck definition that Docker Compose can monitor (such as
checking if the database port is responding) so that the service_healthy
condition can be properly evaluated before Synapse attempts to connect.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 192eb91a-fb72-485e-8912-ec8722bea8be

📥 Commits

Reviewing files that changed from the base of the PR and between 1132ff2 and e055112.

📒 Files selected for processing (8)
  • .golangci.yml
  • Makefile
  • README.md
  • docker-compose.yml
  • server/command/command.go
  • server/command/command_test.go
  • server/configuration.go
  • server/matrix/client.go
✅ Files skipped from review due to trivial changes (1)
  • README.md
🚧 Files skipped from review as they are similar to previous changes (3)
  • .golangci.yml
  • server/command/command.go
  • Makefile

Comment thread docker-compose.yml
Comment thread server/configuration.go
Comment thread server/matrix/client.go
…to empty

Use mattermostChannelID as a deterministic suffix instead of the static
"room" fallback, preventing alias-in-use errors when multiple channels
produce an empty sanitized alias.

@wiggin77 wiggin77 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

@fmartingr
fmartingr merged commit dfc0fd0 into master Jun 25, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants