Skip to content

chore(upstream): merge chattocorp/chatto 2f566ffe into main - #105

Merged
tha23rd merged 65 commits into
mainfrom
chatto-agent/9e480c4d-f19
Aug 12, 2026
Merged

chore(upstream): merge chattocorp/chatto 2f566ffe into main#105
tha23rd merged 65 commits into
mainfrom
chatto-agent/9e480c4d-f19

Conversation

@tha23rd

@tha23rd tha23rd commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Why

Catch the fork up from upstream chattocorp/chatto while preserving the public wire contracts already shipped by this distribution and keeping the production-server-before-native-client rollout safe.

  • Upstream range: 80155db5..2f566ffe (57 commits).
  • Fork baseline was requalified through 84ed18f while the upstream candidate stayed fixed at 2f566ffe.
  • Integration/requalification commits: 6bd4add0, 393f3bd5, e1c91bd1, 5f7d41b, df9b26d, and 1a9ca947.

What changed

  • Integrated upstream pinned messages, slow mode, invite links, the Lingua i18n runtime, Electron desktop client, durable asset-processing workers, event-framework hardening, additional locales/RTL preparation, and selectable mutation consistency boundaries.
  • Reconciled fork-owned message actions, webhooks, custom emoji, soundboard, Windows Tauri desktop ownership, deleted-message visibility, CI, ADR/FDR indexes, architecture inventories, release notes, and generated API documentation.
  • Preserved the fork's already-published protobuf tags:
    • Message.webhook_override = 22
    • Message.actions = 23
    • CreateMessageRequest.actions = 11
    • RealtimeProjectionServerState.soundboard = 3
    • RealtimeProjectionServerState.custom_emojis = 4
  • Assigned only newly integrated upstream fields to the distribution-safe range:
    • Message.pinned = 1000
    • CreateMessageRequest.create_thread = 1000
    • RealtimeProjectionServerState.pinned_message_change = 1000
  • Added a descriptor regression test covering all eight published/collision-prone fields.
  • Moved invitation-revocation authorization into every OCC attempt and added a forced-conflict test proving permission loss is honored before retry.
  • Corrected release guidance about the fork-retained discovery capabilities and removed stale Paraglide/Deno+CEF maintenance instructions.
  • Hardened chatto-sync-upstream so 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

  • Public API classification: additive and behavioural relative to the published fork; not breaking. No persisted chatto.core.v1 field was removed, renumbered, or retyped.
  • Older client / newer server: existing webhook, action, soundboard, and custom-emoji fields retain their published meanings; older clients ignore the new high-tag pinned-message fields.
  • Newer client / older server: existing fork fields remain readable. An older server ignores the new high-tag create_thread request, so the supported bundled rollout remains server first; third-party clients should use this distribution's generated schema and supported-version/capability policy.
  • This distribution retains discovery protocol capabilities for fork-specific protocols that the shared software version cannot identify.
  • Binary rollback remains part of the production phase of the upstream-sync run; this PR does not mutate persisted core schemas.

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.
  • Focused regressions:
    • TestPublishedForkFieldNumbersRemainStable — passed.
    • TestRevokeInvitationRechecksPermissionAfterOCCConflict — passed.
  • chatto-sync-upstream structural validation — passed.
  • Independent skill forward test — passed with no remaining findings.
  • Live bundled-app verification — passed for creating and revoking an invite link and creating/rendering a pinned message in the room and Pins pane; relevant application RPCs returned 200.
  • Exact-head GitHub CI (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:

  • Invite link created.
  • Invite link revoked.
  • Pinned message rendered in the room and Pins pane.

Remaining

  • Upload the three captured screenshots to this description (the GitHub CLI cannot create user attachments).
  • Merge approval for exact head a2d41406 using the merge-commit strategy; production and main-native phases remain separately gated by chatto-sync-upstream.

hmans added 30 commits August 4, 2026 19:14
hmans and others added 20 commits August 11, 2026 14:07
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.
@tha23rd tha23rd added the api-breaking-change Intentional pre-1.0 public API breaking change label Aug 12, 2026
… 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
tha23rd marked this pull request as ready for review August 12, 2026 15:48
@tha23rd tha23rd removed the api-breaking-change Intentional pre-1.0 public API breaking change label Aug 12, 2026
@tha23rd
tha23rd merged commit a86f21b into main Aug 12, 2026
20 of 32 checks passed
@tha23rd
tha23rd deleted the chatto-agent/9e480c4d-f19 branch August 12, 2026 18:48
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.

3 participants