Author the theme once in apps/web/element.io/healthchat/HealthChat-Light-Theme.json
and sync it into the web (apps/web/config.json) and desktop
(apps/desktop/element.io/healthchat/config.json) configs via
scripts/healthchat-sync-theme.mjs, removing the drifted duplicate.
`pnpm healthchat:theme` writes it; `pnpm lint` runs healthchat:theme:check to
fail on drift.
The canonical palette is the reviewed desktop theme, which reverts the web-only
contrast tweak (f64923ea1a) so web and desktop match.
The macOS frameless-titlebar CSS marks .mx_RoomView_wrapper as a
-webkit-app-region drag handle, which swallows all mouse/keyboard input
for its descendants. Module location renderers (the HealthChat Angular
custom elements like hc-user-browser / hc-admin-dashboard) are mounted
there but match none of the no-drag exclusions, so their inputs and
buttons were dead in the desktop app while working in the web app.
Exclude the room-view wrapper's direct children from the drag region so
the mounted page receives pointer events; the existing .mx_RoomView child
and the ::before drag strips are unaffected.
The native About panel and macOS app menu derived their name from
Electron's app.name and ignored the configured brand, so they still
showed "Element". Set the About panel options from vectorConfig.brand
and use the brand for the macOS app/About menu labels.
Add a config-driven matrix_to_url option so Share dialog links and QR
codes resolve against a matrix.to-compatible resolver instead of the
hardcoded public matrix.to. MatrixToPermalinkConstructor now reads the
base URL lazily from config (default https://matrix.to), keeping the
matrix.to URL format. HealthChat configs point it at the in-house fork
https://to.healthchat.ch and drop the conflicting permalink_prefix
(which routes to the Element-format constructor a matrix.to fork can't
parse).
The desktop variant config hardcoded ch.healthchat.api_base_url as
https://healthchat.ch, which is the wrong host. The fork's widget
auto-approval logic keys on the api.healthchat.ch origin, so the bare
domain bypassed it and pointed API traffic at the wrong host.
Stale since the desktop build pipeline was introduced (5f09f58a82).
The schedule triggers on build-and-test.yaml and build_desktop_and_deploy.yaml
fired nightly from the default branch (release/healthchat) and failed at startup,
since the repo gate only skips jobs, not the cron-spawned runs. Remove the
schedule triggers; pull_request/merge_group/push/release/workflow_dispatch are
untouched.
Publish HEALTHCHAT_CHANGES.md release notes into the update feeds so users
see what changed. macOS gets them natively via releases.json's notes field;
Windows fetches a published notes.txt, since Squirrel.Windows only delivers
releaseName through the update-downloaded event.
Add the same repo guard applied to sibling upstream workflows in
bd6241ad9d. On the private fork this job failed at checkout because
permissions: {} leaves GITHUB_TOKEN without contents:read, so
actions/checkout 404s on the private repo.
The Electron auto-updater (Squirrel.Mac / Squirrel.Windows) was already
implemented but switched off for HealthChat because the variant config
omitted update_base_url, and CI published only installers (no update feed),
to a private GitHub Release that can't serve end users or the updater.
- config.json: set update_base_url to https://healthchat.ch/packages/desktop/update/
so electron-main starts the updater.
- build-healthchat-desktop.yaml: pass base-url to the macOS job so releases.json
is generated; extend the release job to stage the update feed + public
installers and mirror them to healthchat.ch over FTPS (lftp, no-delete to
preserve prior nupkgs; password via LFTP_PASSWORD).
- Document the feed/install layout, FTP secrets, and the two caveats (first
install is manual; Windows auto-update needs the Setup.exe path, not .msi)
in the healthchat README and the releasing-healthchat skill.
Requires repo secrets FTP_SERVER / FTP_USERNAME / FTP_PASSWORD.
Remove the Linux desktop build from the release pipeline. It could never
succeed in this fork: the upstream Linux reusable pulls a build-env Docker
image keyed by the building commit's SHA from the upstream element-hq
registry, where the fork's SHA does not exist, so every tagged build failed
with `manifest unknown`. Desktop releases now ship macOS and Windows only.
- Drop the linux job + its release artifacts from build-healthchat-desktop.yaml
- Bump apps/desktop/package.json to 1.1.2
- Update releasing-healthchat skill + desktop README docs
The reusable build jobs ran with permissions: {} (fine for upstream's public
repo, which checks out with no token). This fork is internal, so checkout failed
with 'Repository not found'. Grant contents:read on the linux/macos/windows
caller jobs and the reusable build jobs, mirroring the prepare job.
pnpm/action-setup@v4 errored 'No pnpm version specified' because this repo
declares pnpm via devEngines.packageManager, not the top-level packageManager
field. Bump to v6.0.8 (as the shared desktop reusables use), which reads it.