Skip to content

docs: update for PR #1060 (group/community metadata, business hours, signal session APIs) - #418

Merged
jlucaso1 merged 14 commits into
mainfrom
claude/nifty-bohr-17ry6d
Jul 21, 2026
Merged

docs: update for PR #1060 (group/community metadata, business hours, signal session APIs)#418
jlucaso1 merged 14 commits into
mainfrom
claude/nifty-bohr-17ry6d

Conversation

@jlucaso1

@jlucaso1 jlucaso1 commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Documentation updates reflecting oxidezap/whatsapp-rust#1060 ("feat(core): expand protocol metadata and shared primitives"), which merged to main.

Summary

api/groups.mdx

  • Breaking: GroupMetadata/GroupInfoResponseephemeral_expiration/ephemeral_trigger replaced by ephemeral: Option<GroupEphemeralSettings> (distinguishes "no node" from "explicit 0"), with migration note
  • Documented 22 new GroupMetadata fields (creator/owner identity, versioning, suspension/appeal, safety, labeling, etc.) and new GroupAppealStatus enum
  • GroupParticipant gains lid, username, details (new GroupParticipantDetails type)
  • Breaking: promote_participants/demote_participants now return Result<Vec<ParticipantChangeResponse>, GroupError> instead of Result<(), GroupError>
  • New methods: remove_participants_including_linked_groups, update_member_label_with_id

guides/group-management.mdx

  • Updated promote/demote examples for the new return type; added notes on the two new methods

api/community.mdx / guides/communities.mdx

  • New methods documented: create_subgroup (one-call create+link), remove_participants, get_participating
  • CommunitySubgroup gains creation, owner fields
  • New guide walkthroughs for subgroup creation, participant removal, and listing communities

api/business.mdx

  • Breaking: BusinessHoursConfig::open_time/close_time changed from u32 to Option<u32>

api/signal.mdx / advanced/signal-protocol.mdx

  • New session/sender-key APIs documented: session_info, migrate_sessions (+ SignalSessionInfo, SignalSessionMigration types), install_prekey_bundle, sender_key_distribution, process_sender_key_distribution, has_sender_key, delete_sender_key
  • New SignalError::InvalidInput variant
  • Notes that rotate_signed_pre_key and validate_digest_key are now public, plus new refresh_pre_keys_with_count, ensure_pre_keys, add_lid_pn_mappings

api/contacts.mdx

  • Noted new get_profile_picture_with_timeout / ProfilePictureSpec::with_timeout

Out of scope (per standing instructions, changelog entries are human-authored only): no changelog/ or docs.json changes. A few smaller additive items from the PR (Mex::fetch_reachout_timelock, Voip::reject_call, MessageInfo::timestamp JSON serialization) had no corresponding existing doc section to anchor an edit to, so they were left untouched rather than forcing an out-of-place addition.

🤖 Generated with Claude Code


Generated by Claude Code


Summary by cubic

Updates the docs for expanded group/community metadata, new Signal session and sender-key APIs, and business-hours type changes. Also clarifies sender-key concurrency, notes that session_info can migrate PN→LID state, fixes the manual migration example order, and removes stale ephemeral_expiration/display_name references across docs (guides and api/send).

  • New Features

    • Groups: document new GroupMetadata fields; GroupParticipant adds lid, username, details; new remove_participants_including_linked_groups and update_member_label_with_id (masked-number display_name is available via participant.details).
    • Communities: new create_subgroup, remove_participants, get_participating; CommunitySubgroup adds creation, owner; new guide walkthroughs.
    • Signal: new session_info, migrate_sessions, install_prekey_bundle, sender_key_distribution, process_sender_key_distribution, has_sender_key, delete_sender_key; public rotate_signed_pre_key, validate_digest_key; plus refresh_pre_keys_with_count, ensure_pre_keys, add_lid_pn_mappings; SignalError::InvalidInput; clarified per-(group_jid, sender_jid) chain locking for safe concurrent encrypt/decrypt.
    • Contacts: get_profile_picture_with_timeout and ProfilePictureSpec::with_timeout.
  • Migration

    • GroupMetadata: replace ephemeral_expiration/ephemeral_trigger with ephemeral: Option<GroupEphemeralSettings>.
    • promote_participants/demote_participants now return Result<Vec<ParticipantChangeResponse>, GroupError>.
    • BusinessHoursConfig::open_time/close_time are now Option<u32>.

Written for commit debc75f. Summary will update on new commits.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jlucaso1, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 40 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ea77ba03-b228-4ac8-96ad-22fcf411f905

📥 Commits

Reviewing files that changed from the base of the PR and between 204b458 and debc75f.

📒 Files selected for processing (10)
  • advanced/signal-protocol.mdx
  • api/business.mdx
  • api/community.mdx
  • api/contacts.mdx
  • api/groups.mdx
  • api/send.mdx
  • api/signal.mdx
  • guides/communities.mdx
  • guides/group-management.mdx
  • guides/sending-messages.mdx

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mintlify

mintlify Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
whatsapp-rust 🟢 Ready View Preview Jul 21, 2026, 5:30 AM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@greptile-apps

greptile-apps Bot commented Jul 21, 2026

Copy link
Copy Markdown

Greptile Summary

This PR updates the documentation for recently expanded WhatsApp APIs. The main changes are:

  • Expanded group and community metadata and operations.
  • Updated business-hours fields to use optional times.
  • Added Signal session, sender-key, and pre-key APIs.
  • Clarified PN-to-LID session migration behavior.
  • Added profile-picture timeout documentation.

Confidence Score: 5/5

This looks safe to merge.

  • The updated API reference clearly states that session_info can migrate persistent session and identity state.
  • The manual example now performs explicit migration before inspecting the LID session.
  • No blocking issues remain in the updated documentation.

Important Files Changed

Filename Overview
api/signal.mdx Documents the expanded Signal APIs and clearly explains the state-changing behavior of session inspection.
advanced/signal-protocol.mdx Adds migration and session-inspection guidance to the Signal protocol overview.
api/groups.mdx Documents expanded group metadata, participant details, return types, and member-management methods.
api/community.mdx Documents community discovery, subgroup creation, participant removal, and expanded subgroup metadata.

Reviews (5): Last reviewed commit: "docs: fix stale ephemeral_expiration/dis..." | Re-trigger Greptile

Comment thread api/signal.mdx Outdated
…ack)

Addresses greptile-apps review comment on PR #418: session_info is not
a purely read-only inspection when it triggers legacy PN→LID migration.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0465df70d1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread api/signal.mdx Outdated

### session_info

Inspect an existing pairwise Signal session without mutating it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Describe session_info's migration side effect

For a PN JID with a known LID mapping and only a legacy PN-addressed session, session_info is not read-only: as the paragraph below explains, it moves the session and identity state into the LID namespace before returning. Describing the method as non-mutating can mislead callers who use it only for inspection but need the original storage namespace preserved.

Useful? React with 👍 / 👎.

Comment thread api/signal.mdx Outdated
### Manually migrate a session to LID addressing

```rust
if let Some(info) = client.signal().session_info(&pn_jid).await? {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid pre-migrating the manual migration example

When the PN-to-LID mapping is already known, this session_info(&pn_jid) call resolves the address and migrates the legacy PN session itself, as documented earlier in this page. The following migrate_sessions call therefore sees no state left to move, so has_state_changes() is false and the example does not demonstrate or report the advertised manual migration; call migrate_sessions first or use an inspection path that does not migrate.

Useful? React with 👍 / 👎.

…o side effect

Addresses chatgpt-codex-connector review comment on PR #418: calling
session_info(&pn_jid) before migrate_sessions would already perform the
migration as a side effect, making migrate_sessions report no changes.
Reordered to migrate first, then inspect the result under the LID address.
greptile-apps[bot]
greptile-apps Bot previously approved these changes Jul 21, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b12d8c3213

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread api/groups.mdx
- `limit_sharing_trigger: Option<u32>` - Source trigger for limit-sharing enablement

<Note>
`ephemeral_expiration: u32` and `ephemeral_trigger: Option<u32>` were replaced by the single `ephemeral: Option<GroupEphemeralSettings>` field. Migrate reads like `metadata.ephemeral_expiration` to `metadata.ephemeral.as_ref().and_then(|e| e.expiration).unwrap_or(0)`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update the remaining GroupMetadata timer examples

After documenting the removal of GroupMetadata.ephemeral_expiration, the docs still use that field in guides/sending-messages.mdx:693 and direct readers to it in api/send.mdx:346. Anyone copying the disappearing-message example against the documented v0.6 API gets a compile error, so update those references to read metadata.ephemeral and handle its nested optional expiration.

Useful? React with 👍 / 👎.

Comment thread api/groups.mdx
- `lid: Option<Jid>` - Participant's LID JID, when the server includes one
- `username: Option<CompactString>` - Participant's Meta username, when present
- `participant_type: ParticipantType` - Participant role (member, admin, or super admin)
- `details: Option<Box<GroupParticipantDetails>>` - Less-common participant metadata (label, join time, display name, etc.); boxed and only populated when at least one field is present

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reconcile display-name guidance with participant details

Adding GroupParticipantDetails::display_name makes this page's existing statements at lines 232 and 1546—that display_name is available only on event-side GroupParticipantInfo and not on GroupMetadata participants—incorrect. Readers can now obtain it through participant.details, so update those notes to describe the nested access path rather than claiming the value is unavailable.

Useful? React with 👍 / 👎.

Comment thread api/signal.mdx
- `group_jid` - Group JID
- `sender_jid` - Sender's JID within the group

The deletion waits for any in-flight chain mutation (e.g. a concurrent `encrypt_group_message` ratchet advance) to finish before removing the chain, and is flushed to the persistent backend before returning.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the stale no-lock warnings for sender-key operations

For callers using the low-level group APIs concurrently, this new guarantee says deletion waits for an encrypt_group_message chain mutation, while the warnings at lines 113 and 151 still say sender-key state is not internally locked. The new guarantee also matches the chain locks documented in advanced/signal-protocol.mdx:703-707 and concepts/architecture.mdx:573-580, so update those warnings to describe the keyed locking contract instead of presenting the operations as categorically unsafe together.

Useful? React with 👍 / 👎.

@greptile-apps
greptile-apps Bot dismissed their stale review July 21, 2026 05:52

Dismissed because a newer commit was pushed; Greptile will re-review the current head.

greptile-apps[bot]
greptile-apps Bot previously approved these changes Jul 21, 2026
@greptile-apps
greptile-apps Bot dismissed their stale review July 21, 2026 05:55

Dismissed because a newer commit was pushed; Greptile will re-review the current head.

greptile-apps[bot]
greptile-apps Bot previously approved these changes Jul 21, 2026
@greptile-apps
greptile-apps Bot dismissed their stale review July 21, 2026 05:57

Dismissed because a newer commit was pushed; Greptile will re-review the current head.

@jlucaso1
jlucaso1 merged commit 198f79e into main Jul 21, 2026
3 of 4 checks passed
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.

1 participant