Skip to content

Improve Skychat on UI, Groups and Channel feature - #3670

Merged
mrpalide merged 5 commits into
skycoin:developfrom
mrpalide:feat/improve-skychat-on-ui-group-channels-contacts
Aug 3, 2026
Merged

Improve Skychat on UI, Groups and Channel feature#3670
mrpalide merged 5 commits into
skycoin:developfrom
mrpalide:feat/improve-skychat-on-ui-group-channels-contacts

Conversation

@mrpalide

@mrpalide mrpalide commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Did you run make format && make check? Yes

Fixes #_

Changes:

  • Replaced the sidebar PK input and the two group icons with a single button opening Add by address / New group / New channel — in the header on desktop, a floating button at the bottom on a phone.
  • Added an Add by address dialog: one field takes a public key, a skychat:// address, an invite link, or a scanned QR code, resolves it, then offers exactly one action — Start Chat, Join Group, Send Request, or Join Channel.
  • Added the skychat:// / skychat:/// address grammar as a new pkg/skychat/address package (100% covered).
  • Added a describe-only probe on a new well-known dmsg port so a short address can be resolved and joined; it decides nothing, and a real join request sent there is refused.
  • Added GroupResolve RPC, a /group/resolve route, and join-by-address through the visor, the app's HTTP proxy, and the CLI (group address, group resolve, --kind).
  • Added channels as a real group kind — open to join, admins-only to post, permanently rather than via the reversible read-only flag; carried through invites and join responses so a joined channel can't degrade into an ordinary group.
  • Added a QR view for the open conversation, with the address underneath as selectable text plus a copy button; scanning works from the camera or a chosen image, and says so plainly where the browser lacks the API.
  • Made the layout one-pane below 760px: the list is the screen, opening a chat replaces it and grows a back button, and the device back button returns to the list.
  • Documented all of it in the app README.
  • Locked a channel's kind at the store boundary — it can never become a group, including via a write that merely omits the kind.
  • Rewrote the subscription topology for channels so cost is flat in audience size instead of growing with every subscriber.
  • Made channels serve history and files from their admins only, and refused the peer-backfill setting there rather than accepting it and doing nothing.
  • Added a backward history cursor to both storage backends, threaded through the RPC and HTTP layers.
  • Made the UI load a group or channel's backlog a chunk at a time — newest page on open, older pages as you scroll back.
  • Made channel attachments reference-only: an unrequested file is refused even from an admin, so bytes arrive only when someone opens the card.
  • Added an opt-in discovery catalog — a new wire frame on the existing probe port, plus RPC, HTTP route, CLI commands, a create-time checkbox and an admin toggle.
  • Surfaced discovery where it's useful: entering a public key in Add by address also lists the channels that visor publishes.
  • Added tests for the channel invariants and the page cursor, and documented all of it in the app README.

How to test this PR:

make e2e-build
make e2e-run
make e2e-skychat

then open http://localhost:8001 and http://localhost:8002 on different browser and check new changes.

…only topology, chunked backfill, request-only files, and an opt-in discovery catalog
- **Linux / Darwin / Windows:** `RegisterApp` is intentionally idempotent after visor resume support was added, but `TestRegistry` still expected duplicate registration to panic.
  - Synchronized the registry and aligned it byte-for-byte with the target branch implementation in `pkg/app/launcher/registry.go`.
  - Updated the stale test to verify replacement semantics in `pkg/app/launcher/launcher_test.go`.

- **E2E:** restarting `visor-b` briefly raced DMSG reconnection. The first address-resolver `/health` request failed, permanently disabling SUDPH for that visor.
  - Added retries for transient transport errors within the existing 10-second timeout in `pkg/transport/network/addrresolver/client.go`.
  - Added a regression test in `pkg/transport/network/addrresolver/client_extra_test.go`.

Passed:

- `go test -race -count=1 ./pkg/app/launcher`
- `go test -count=1 ./pkg/transport/network/addrresolver`
- `go test -count=1 ./pkg/transport/network/...`
- `git diff --check`
- Editor diagnostics for all changed files

The full Docker E2E suite was not rerun locally. The four attached log files remain untracked and untouched.
@mrpalide
mrpalide merged commit 92fa81f into skycoin:develop Aug 3, 2026
24 of 25 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