chore(upstream): merge chattocorp/chatto 2f566ffe into main - #105
Merged
Conversation
Catch-up merge of upstream main (2f566ff, 57 commits since 80155db) into the fork, resolving 91 conflicts. Highlights and material decisions: - i18n: adopt upstream's Lingua runtime (ADR-065) replacing Paraglide. Upstream's key-based facade replaces the fork's generated property facade; 679 fork call sites converted with the exact tracked-facade mapping; fork keys filled into the 8 upstream-only complete locales (ar, cs-CZ, et-EE, he-IL, it-IT, lv-LV, ru-RU, tr-TR); soundboard section added to catalogSections; de-AT/de-CH kept as sparse regional overlays (fork's Swiss/Austrian orthography is a documented fork feature enforced by messages.spec.ts). - proto: upstream took tags 22 (Message.pinned) and 3 (RealtimeProjectionServerState.pinned_message_change) that the fork's webhook_override and soundboard/custom_emojis fields occupied. Fork-only fields renumbered to the documented 1000+ range. - desktop: upstream's Electron app (apps/desktop) and the fork's Tauri client (apps/desktop-tauri) both named chatto-desktop; fork package renamed chatto-desktop-tauri and root desktop scripts updated. - core: upstream's mutation-authorization flow adopted; the fork's dropped message-edit timer preserved (enforceEditWindow stays false; ErrEditWindowExpired/MessageEditWindow retained for upstream's helpers and advertised runtime config). Dead reconcile helper removed. - realtime: upstream's pinned-message projection + room-marker fence (chattocorp#1959) adopted; catch-up admission slot now released before the CaughtUp frame so a client's next socket is never rejected while the previous catch-up's final frame is in flight. - ci: fork's pull_request branch filter retained (main/main-native/ release-*); recursive workspace check/test exclude the Tauri package (its cargo steps run in the dedicated Windows CI job). - docs: upstream ADRs 065-070 and FDRs 034-037 indexed; fork 9xx rows preserved; architecture inventories reconciled. Verified locally: go build/vet, test-cli, test-events, frontend check, pnpm check/lint/test, 3206+1887+184 frontend tests, license-check, codegen-proto regeneration, bundle-size guards. Video e2e tests need ffmpeg (installed by CI); websocket catch-up race fixed and verified 10x.
Origin/main advanced to 5d9701f (feat(messages): add generic message actions) while the upstream catch-up was in flight. Merged the new fork main into the integration branch so the PR is mergeable, preserving the fixed upstream candidate 2f566ff. Resolutions: - proto: Message.actions and PostMessageRequest.actions were shipped by PR #104 at tags 23 and 11, inside upstream's tag space; renumbered to 1001 and 1000 per the documented fork-only-field convention. - core: WithMessageActions/WithEditedMessageActions unioned with upstream's thread-creation and commit-authorization options; edited actions re-seated into upstream's publishMessageEditWithAuthorization callback; HasActions added to authorizationInputForPost (upstream's commit-time authorize closure) so action-only posts pass. - frontend: PR #104's bracket-style i18n calls converted to the Lingua key facade; api-client post/update payloads union create_thread with the actions mapping. - docs: MessageActionService added to the api.v1 interface inventory. Verified: go build/vet, core+connectapi+http_server tests, frontend check/lint, 3207 unit tests.
Upstream renamed test-frontend-unit to test-workspace in this range; the fork's publish-main-native-installer still declared needs: test-frontend-unit, which made the whole ci workflow fail to load (no PR checks, failing push validation runs).
…he upstream mutation path Upstream's mutation-consistency refactor (chattocorp#1962) made ReactionModel AddReaction/RemoveReaction route through mutateAuthorizedReaction, which dropped two fork behaviors the old addReaction path carried: - notifyMessageReaction was never called, so message authors stopped receiving reaction notifications (reaction e2e regressed). - resolveEmojiInput only accepts gemoji shortcodes; the fork's resolveReactionEmoji also accepts server custom-emoji names. Re-seat both into the new path after a committed add. The stale e2e fixture binary masked this locally (built from pre-merge main); the notification and reactions e2e suites now pass against a fresh binary.
The frontend now imports @chatto/lingua (upstream's i18n runtime), whose exports point at the built dist. The Windows desktop CI job runs mise test-desktop/check-desktop without the workspace check/test scripts that normally build lingua first, so fresh runners failed the vitest client project imports (desktopUpdates, eventBus, voiceCall specs) with 'could not be resolved: @chatto/lingua'. Add build-lingua to the desktop-setup dependency chain shared by every desktop task.
… sync branch Adopts the owner's immediate tombstone-hide behavior: tombstoneVisibility code+spec, deletion e2e, and FDR-004/018/INDEX reconciled; sync-era grace timer removed; UserKeyShreddingRequestedEvent mechanics text retained (matches merged cli/internal/core/user_key_shredding.go).
tha23rd
marked this pull request as ready for review
August 12, 2026 15:48
This was referenced Aug 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Catch the fork up from upstream
chattocorp/chattowhile preserving the public wire contracts already shipped by this distribution and keeping the production-server-before-native-client rollout safe.80155db5..2f566ffe(57 commits).84ed18fwhile the upstream candidate stayed fixed at2f566ffe.6bd4add0,393f3bd5,e1c91bd1,5f7d41b,df9b26d, and1a9ca947.What changed
Message.webhook_override = 22Message.actions = 23CreateMessageRequest.actions = 11RealtimeProjectionServerState.soundboard = 3RealtimeProjectionServerState.custom_emojis = 4Message.pinned = 1000CreateMessageRequest.create_thread = 1000RealtimeProjectionServerState.pinned_message_change = 1000chatto-sync-upstreamso future integrations audit published client/server descriptors and cross-decoding, mutable retry preconditions, stale fork documentation, and both integration PRs' UI/CI evidence.Compatibility and rollout
chatto.core.v1field was removed, renumbered, or retyped.create_threadrequest, so the supported bundled rollout remains server first; third-party clients should use this distribution's generated schema and supported-version/capability policy.Test plan
mise codegen-proto— passed; regenerated Go, TypeScript, and ConnectRPC reference outputs.mise test-cli— passed, including all core, ConnectRPC, HTTP-server, event-stream, search, and supporting Go packages.mise build-api-types— passed.mise license-check— passed with 0 missing or invalid SPDX entries.TestPublishedForkFieldNumbersRemainStable— passed.TestRevokeInvitationRechecksPermissionAfterOCCConflict— passed.chatto-sync-upstreamstructural validation — passed.a2d41406, run 31619562727) — passed all 11 applicable checks; three out-of-scope jobs and both publisher jobs were correctly skipped.Screenshots
Captured locally for upload as GitHub user attachments:
Remaining
a2d41406using the merge-commit strategy; production andmain-nativephases remain separately gated bychatto-sync-upstream.