Skip to content

26.5 -> develop - #6440

Merged
Geenz merged 72 commits into
developfrom
geenz/26.5-develop
Oct 13, 2026
Merged

Geenz merged 72 commits into
developfrom
geenz/26.5-develop

Conversation

@Geenz

@Geenz Geenz commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

Merge 26.5 into develop

rohvani and others added 30 commits August 13, 2026 12:17
Synchronize eligible direct IM conversations through the ChatService
capabilities into durable per-resident CSV archives. Validate deterministic
conversation IDs, UUIDv1 ordering, complete discovery and history payloads,
and the account-wide deletion cutoff before a bounded pass can append or
rebuild an archive.

Run discovery, pacing, retries, metadata resolution, and participant paging
through one account-scoped manager. Immediately prioritize new Direct
sessions, P2P previews, and accepted inbound IMs while honoring transcript
consent, authoritative mute state, capability changes, and fail-closed
account state.

Stitch ordinary and monthly legacy plaintext before the oldest accumulated
service row, keep normal plaintext logging active, and merge the first
validated service page in memory while older backfill continues. Drive
Direct and Preview reloads and their nonmodal loading status from shared
resident snapshots.

Maintain the human-readable chat_service_index.csv manifest and protect
archive updates with strict validation, torn-tail repair, corrupt-file
preservation, private file stamps, and atomic replacement. Extend Delete
Transcripts with a durable TimeUUID boundary and an asynchronous sweep that
suppresses every historical source until cleanup completes safely.

Add core coverage for deterministic IDs, UUIDv1 and timestamp validation,
strict page and list contracts, RFC 4180 CSV quoting, archive scanning, torn
tails, and corrupt records.
Add phase-oriented comments around history synchronization, archive validation, asynchronous view updates, and transcript deletion.

Expand dense control flow and restore readable spacing throughout the ChatService implementation and its integration points without changing behavior. Restore unrelated end-of-file formatting so it drops out of the overall PR diff.
Arm a bounded discovery confirmation when the first direct IM is sent to a resident absent from the validated conversation list. Preserve the existing priority placeholder across the first validated miss, then retry the shared list path after the manager-wide delay.

Leave listed conversations and inbound priority behavior unchanged, and retire the unresolved candidate after a second miss so no general live-message debounce or parallel scheduler is introduced.

Validated with the RelWithDebInfo secondlife-bin build and the LLChatServiceHistoryCore test suite.
Recover missing sender UUIDs for plaintext transcript rows from existing name caches while normalizing stitched history. Preserve explicit ChatService and system IDs so resident headers regain icons and profile actions without scheduling name lookups.

Validated with the RelWithDebInfo secondlife-bin build and the LLChatServiceHistoryCore test suite (11 tests).
Replace exact legacy transcript occurrences with canonical ChatService rows while preserving local ordering and consuming repeated messages one-for-one. Carry service timestamps into normalized IM history and keep system sender identity null.

Filter authoritative P2P history refreshes against same-minute live rows so open sessions do not display duplicate messages after asynchronous reloads.
Track one resettable quiet deadline for each direct-message resident so multiple outgoing messages coalesce into one head refresh after the last send. Preserve immediate bounded discovery for new conversations and reuse the existing priority and follow-up path at pacing, response, and archive-preparation boundaries.

Retire deadlines when consent, blocking, or deletion makes work ineligible, preventing a failed deletion from leaving a rapid wake loop. Leave inbound priority and tab switching unchanged.

Validated with the RelWithDebInfo secondlife-bin build and the LLChatServiceHistoryCore test suite.
Keep authoritative mute-list source classification in one testable predicate so full, empty, and server-validated cache responses remain eligible while fallback cache stays gated.

Log compact gate, list, history, and archive publication outcomes so device-specific synchronization failures can be diagnosed without recording message content.
Compare fallback sender identities as canonical resident usernames when either stitched source lacks a UUID. This lets legacy First Last ChatService names match viewer first.last names, preventing the first outbound live IM from retaining a duplicate history row.

Cover legacy-to-resident matching and distinct-resident rejection in the LLChatServiceHistoryCore tests.

Validated with the Release secondlife-bin build and the LLChatServiceHistoryCore test suite (13 tests).
Create P2P conversation metadata when the first durable service archive is published, so history downloaded on a new device is discoverable without a live IM session. Preserve Conversation Log consent, deduplicate existing rows, and persist through the existing observer contract.

Add focused coverage for cross-device discovery, duplicate publication, retained metadata, and disabled logging.

Validated with the Release secondlife-bin build, the LLConversationLog test suite (2 tests), and the LLChatServiceHistoryCore test suite (13 tests).
Defer IM transcript replay until the frame after clearing chat history, allowing deferred inline notification panels to finish destruction before replacements are embedded.

Keep message updates paused during that interval so existing live rows and all notification-backed offers are rebuilt through the normal generic path.

Validated with the Release secondlife-bin build.
Detach chat-owned inline views before clearing and rebuild the transcript synchronously so an empty editor never reaches draw.

Track notification panels as concurrent instances while deferred deletion overlaps old and replacement projections. Route offer updates to the live IM panel and ignore retiring friendship panels during deduplication.

Validated with the RelWithDebInfo secondlife-bin build and the existing LLInstanceTracker test suite.
Compare normalized historical overlays before replacing the visible transcript, and retain the current bounded history when durable live rows only roll the oldest entries out of the 200-message window.

Let an active history read observe newer archive generations and restart itself instead of scheduling overlapping reads from snapshot callbacks.

Validated with the RelWithDebInfo secondlife-bin build and the LLChatServiceHistoryCore test suite.
Publish Conversation Log metadata after both replace and append ChatService archive changes. Upsert existing P2P rows only from newer archive timestamps so mobile conversations become discoverable and dates refresh before a live IM session opens, while preserving retained metadata and consent.

Notify and persist only real timestamp advances, leaving equal or older history as a no-op. Add coverage for exact archive times, monotonic updates, observer behavior, metadata retention, deduplication, and disabled logging.

Validated with the Release secondlife-bin build, the LLConversationLog test suite (3 tests), and the LLChatServiceHistoryCore test suite (13 tests).
Match exact dated legacy and ChatService overlaps before applying the durable archive seam, so canonical replacements retain their legacy positions ahead of undated rows. Continue dropping unmatched post-boundary plaintext and append only remaining service rows after the undated seam.

Validated with the RelWithDebInfo secondlife-bin build and the LLChatServiceHistoryCore test suite (13 tests).
Treat an existing actionable friendship panel as a duplicate only when its
notification belongs to the same resident. This preserves same-sender
suppression and dead-panel replay behavior while allowing simultaneous offline
requests from different residents to render in their own sessions.

Validated with the RelWithDebInfo secondlife-bin build.
Apply the durable archive boundary before reconciling dated legacy overlaps so post-boundary messages stay in canonical service order and survive consumer caps.

Name the offset-less SLT conversion at the seam and cover capped archive summaries and UTC-7/UTC-8 boundary cases.

Validated with the RelWithDebInfo secondlife-bin build, the LLChatServiceHistoryCore suite (14 tests), the LLConversationLog suite (3 tests), and all 19 newview CTest targets.
various fixes for chat modernization project viewer
Merge archives, plaintext and head previews by service ID and occurrence
before applying history limits. Keep loaded history and visible context in
ChatService so IM sessions and previews share one composer, with ordinary
live appends remaining independent of history replay.

Preserve original bodies and send-versus-receipt timing through offline
delivery and translation. Match known send times exactly and online receipt
times within a rolling 60-second window. Consume eligible occurrences once
in chronological order so repeated messages survive reconciliation across
minute boundaries.

Link offer fallback text to its notification ID and advance the replay
cursor for each actual row. Missing or delayed fallback rows can no longer
cause the following live IM to be skipped.

Dispatch ChatService presentation through the main-loop queue with runtime
and current-state checks. This prevents login deadlocks from reentering
font initialization in another coroutine. Await deletion invalidation
before continuing cleanup so a delayed clear cannot erase later messages.

Validated with the Release viewer build, all 34 LLChatServiceHistoryCore
cases, and native delivery, archive, offer replay and coroutine-deadlock
fixtures. The deadlock fixtures reproduce the original hangs and pass with
deferred presentation.
Match newest live deliveries to newest eligible service occurrences so an
older repeated message keeps its historical position after its session is
recreated. Retain one-for-one matching within the rolling delivery window.

Cover late head publication, repeated refreshes and reopening with an
earlier offline message sharing the live message's body. All 116 Windows
Release test targets pass, including 35 ChatService cases. GCC also
compiles the test source with warnings treated as errors.
Apply the existing per-resident 15-second quiet deadline to accepted
incoming direct IMs as well as sends. This prevents each received IM from
immediately starting history reconciliation during an active exchange.

Keep live delivery, conversation opens and first-contact discovery
immediate. Rename outbound scheduler terms to activity terms while reusing
the existing queue, cooldown and cancellation paths.

Validated with the Windows Release viewer build, all 116 configured
Windows tests and an 80-check native scheduler fixture. The scheduler
fixture also compiles with GCC warnings treated as errors.
A stored Second Life notification can appear as a direct conversation with
an all-zero participant UUID. Validate that entry but exclude it from
resident history so it no longer rejects the entire conversation list and
prevents other archives from downloading.

Cover lists containing only a system entry and mixed system/resident
entries in either order. Validated with the Release viewer build, all 116
Windows tests including 36 ChatService core cases, and GCC warning-as-error
checks of the portable core and tests.
Allow ChatService timestamps up to five seconds after online receipt
while retaining the existing 60-second delivery-delay limit. Forwarding
can finish before the service records a message, so requiring receipt to
follow created_at left a historical copy beside the live reply.

Keep newest-first one-for-one matching and cover delayed recording,
calendar boundaries, translations, and partial repeated-message histories.

Validated with the Windows Release ChatService core target: six regression
cases failed before the fix and all 38 cases pass afterward.
additional fixes/cleanup for chat modernization project viewer
Preserve the history reader's page position while incorporating the focused page-selector refresh fix.
Validated with a targeted Windows Release compilation of llviewerwindow.cpp and the file hooks.
Merge `release/26.5` into `project/chat-modernization`
Give both consumers one history owner for subscriptions, asynchronous reads
and publication. Retain weak handles, request tokens, account epochs,
archive serials, consent changes and delayed-name reloads while removing
the duplicated consumer state machines.

Check LogShowHistory before model publication and stop the IM owner before
voice teardown. Preserve plaintext fallback when dispatch is unavailable.
rohvani and others added 22 commits September 23, 2026 15:24
Use the trailing separator supplied by LLDir for an expanded directory
with an empty filename. Remove the custom path joiner, duplicate delimiter
state and delimiter parameters passed through workers.

Workers retain their captured account prefix. Native filesystem checks
cover archive, index and cutoff operations under a Unicode directory.
Replace the Windows-only LLUniqueFile with std::unique_ptr and the
existing LLFile::close deleter. This fixes the macOS compile failure
while retaining automatic file closure on every exit.

Windows Release build, 41 history tests, and repository hooks passed.
macOS CI still needs to be rerun.
consolidate Chat Service history loading and storage
Add Join floater for in-client sign up
Wire the nearby-history menu to its enable callback so history suppression
disables the action. Cache the IM history setting and loading panel, and
update panel visibility only when it changes.

Use XUI for the loading label while retaining all ten existing translations.

Validated with targeted Windows C++ compilation, XML validation, and
pre-commit checks.
Fix chat history menu and loading indicator updates
@Geenz
Geenz enabled auto-merge October 13, 2026 18:40
@Geenz
Geenz merged commit 9b292bd into develop Oct 13, 2026
14 checks passed
@Geenz
Geenz deleted the geenz/26.5-develop branch October 13, 2026 18:41
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants