Files
fn_registry/dev/issues/0149-matrix-client-pc-composer.md
egutierrez daef7ea190 feat(matrix): MAS migration helpers + 2 flows + 15 issues + capability group
Helper functions (matrix-mas capability group):
- mas_client_register_bash_infra: register/sync OAuth clients via mas-cli
- mas_syn2mas_migration_bash_infra: dry-run + apply user migration to MAS
- synapse_msc3861_enable_go_infra: edit homeserver.yaml MSC3861 block (with diff)
- wellknown_oidc_patch_go_infra: patch well-known JSON with msc2965.authentication
- synapse_login_flows_check_go_infra: health-check post-migration login flows

Flows + issues for custom Matrix clients (PC + Android):
- 0010 matrix-client-pc: Wails + React+Mantine (issues 0147-0153)
- 0011 matrix-client-android: Kotlin + Compose (issues 0154-0161)
- 0162 enable MAS as auth provider (Synapse delegate) — EXECUTED on VPS
- 0163 custom admin panel propio (sustituye synapse-admin)

Production state (organic-machine.com):
- Synapse migrated SQLite -> Postgres
- MSC3861 active, password_config disabled
- 21 users + 41 access_tokens migrated via syn2mas
- 4 MAS clients registered (element, matrix_pc, matrix_android, admin_panel)
- synapse-admin container removed + Coolify route deleted
- well-known patched with org.matrix.msc2965.authentication

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 22:53:33 +02:00

2.7 KiB

id, title, status, priority, created, related_flows, related_issues, dependencies, tags
id title status priority created related_flows related_issues dependencies tags
0149 matrix-client-pc composer: markdown, reply, edit, reactions, media pending high 2026-05-24
0010
0148
0150
0148
matrix
composer
markdown
media
reactions
threads

Objetivo

Composer del room: markdown rendering, replies con quote, edits, reactions emoji, threads (Matrix MSC3440), upload de media (imagenes, files, voice msg). Drag&drop archivos. Slash commands placeholder (/me, /shrug, /widget — este ultimo para issue 0152).

Tareas

  1. Backend Go:
    • MatrixService.SendMessage(roomID, body, format) — text + markdown -> HTML via goldmark.
    • MatrixService.SendReply(roomID, parentEventID, body).
    • MatrixService.EditMessage(roomID, eventID, newBody).
    • MatrixService.SendReaction(roomID, eventID, key).
    • MatrixService.UploadMedia(roomID, filePath) -> mxc://.
    • MatrixService.SendThreadReply(roomID, threadRootID, body).
  2. Frontend React:
    • Componente Composer con Mantine Textarea + toolbar markdown.
    • Hotkeys: Cmd+B/I/K, Cmd+Enter para enviar, Esc cancel edit.
    • Drag&drop zone over Composer + paste image desde clipboard.
    • EmojiPicker (reusar @emoji-mart/react o componente propio @fn_library).
    • ReactionBar debajo de EventBubble con aggregates.
    • Thread panel lateral (abrir click en evento "X replies").
    • Voice messages: graba con MediaRecorder (opus codec), upload + send con org.matrix.msc3245.voice flag.
  3. Tests:
    • e2e/test_send_markdown.sh**bold** aparece negrita en otro cliente.
    • e2e/test_edit_message.sh — edicion aparece in-place en Element Web.
    • e2e/test_reaction.sh — reaccion emoji propagada bidireccional.

Funciones del registry a crear

  • markdown_to_matrix_html_go_coregoldmark con sanitizer Matrix-compatible.
  • Composer_ts_ui — componente Mantine + dropzone.
  • EmojiPicker_ts_ui — wrapper picker emoji.
  • ReactionBar_ts_ui — componente reactions aggregadas.

Acceptance

  • Mensaje markdown **negrita** _cursiva_ se ve formateado en Element Web.
  • Reply quote aparece referenciando el msg padre.
  • Edit cambia el msg in-place en ambos clientes.
  • Reaccion emoji con click aparece como counter agregado.
  • Upload imagen (PNG 2MB) se ve thumbnail + click abre full.
  • Voice msg grabado 5s reproduce OK en Element Web.
  • Thread: 5 replies anidados se muestran en panel lateral.

Notas

  • Sanitizer HTML: usar allowlist Matrix (b, i, em, strong, a[href], code, pre, blockquote, ul, ol, li, br, p, h1-h6). NO permitir <script>, <iframe>, event handlers.
  • mxc:// uploads: validar size limit (Synapse default 50MB).
  • Voice msg: encode opus 32kbps, max 5min.