Channel members: list, invite, remove; accept or decline #371

Closed
littlefox wants to merge 0 commits from issue-350-members into main
Owner

Closes #350

Stacked on #349. Supervisors invite: lyskomd's "Add members by invitation" (on by default) makes a non-admin's add an invitation; direct adds are for admin mode (#355). Devserver test channel_members; members.spec (Klara invites Inez, who accepts, then is removed) passes on all three profiles.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8

Closes #350 Stacked on #349. Supervisors invite: lyskomd's "Add members by invitation" (on by default) makes a non-admin's add an invitation; direct adds are for admin mode (#355). Devserver test `channel_members`; members.spec (Klara invites Inez, who accepts, then is removed) passes on all three profiles. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
"Skapa kanal" in Alla kanaler opens a short form: the name, who can read
it (open, closed, secret), anonymous posts and secret members, and an
optional presentation. The channel is created with create-conf, joined,
and opened; the creator is its supervisor. A taken name, a server that
doesn't allow it, and a presentation that fails are said plainly.

kom-client gets admin.rs (ChannelKind, AdminError, create_channel), and
presentations work for any conference, not only my own person.

Refs #347

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
A channel's supervisor (or a member of the supervising conference) gets
"Hantera kanalen" under its status: rename it, write its presentation,
put up or take down the note on the door, and add or remove FAQs. Others
see the status as before. The server has the last word; a refusal is
said as "you may not change this channel".

The note is written as elisp writes it: a text to the server's motd
conference with the channel's name as subject, then set-etc-motd. A FAQ
is a text to the channel marked with faq-text.

Refs #348

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Test: what the channel status shows; phones open it through ⋯
All checks were successful
ci / desktop (push) Successful in 20m8s
ci / e2e (desktop) (push) Successful in 23m9s
ci / e2e (iphone) (push) Successful in 22m55s
perf / perf (pull_request) Has been skipped
ci / plan (push) Successful in 2m27s
ci / check (push) Successful in 9m57s
ci / e2e (android) (push) Successful in 16m31s
549d5c630c
Refs #347

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Refs #348

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
"Hantera kanalen" gets the rules: open, closed or secret (a stricter
choice asks once more and says what changes), replies to the parent
channel, anonymous posts, secret members; who may post (a person or a
channel's members, empty for everyone); the parent channel; how many
days posts and commented posts are kept; and handing the channel over,
after a warning that you can't change it afterwards. Names are looked up
as typed; none or several matches are said plainly.

set-expire is left out: Protocol A marks it experimental and lyskomd
doesn't act on it.

Refs #349

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Manage a channel: the message stays above the status after a change
All checks were successful
ci / e2e (iphone) (push) Successful in 22m1s
ci / e2e (android) (push) Successful in 19m34s
ci / e2e (desktop) (push) Successful in 19m9s
ci / desktop (push) Successful in 22m32s
perf / perf (pull_request) Has been skipped
ci / plan (push) Successful in 2m38s
ci / check (push) Successful in 10m5s
ab539efc74
open_conf clears the status line on purpose, so the message for a
change was gone before it showed. A change now reloads the view itself.

Refs #348

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Merge issue-348-manage-channel into issue-349-channel-rules
All checks were successful
ci / check (push) Successful in 12m38s
ci / e2e (desktop) (push) Successful in 22m2s
ci / e2e (android) (push) Successful in 17m33s
ci / desktop (push) Successful in 17m46s
perf / perf (pull_request) Has been skipped
ci / plan (push) Successful in 3m5s
ci / e2e (iphone) (push) Successful in 27m25s
f3b8620c35
Under a channel's status, "Visa medlemmarna (N)" lists them (invited and
passive ones tagged). Its supervisor invites a person by name and
removes members, asked once more. An invited person sees "Du är inbjuden
hit" with Tacka ja / Tacka nej where the channel's status is, and going
to the channel shows that choice rather than its posts.

Supervisors invite: lyskomd's "Add members by invitation" (on by
default) makes any add by a non-admin an invitation. Adding directly is
for admin mode (#355).

Refs #350

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Refs #350

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Test: a member opens the channel's status through Om kanalen
All checks were successful
ci / e2e (android) (push) Successful in 23m12s
ci / e2e (iphone) (push) Successful in 24m0s
ci / check (push) Successful in 12m48s
ci / desktop (push) Successful in 19m7s
perf / perf (pull_request) Has been skipped
ci / plan (push) Successful in 2m17s
ci / e2e (desktop) (push) Successful in 22m41s
53cee2cc35
Refs #350

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Author
Owner

Merged into main as part of #377 (the stack's top branch, which contains this one); main green (run #696). Closing.

Merged into main as part of #377 (the stack's top branch, which contains this one); main green (run #696). Closing.
littlefox closed this pull request 2026-10-28 02:25:55 +00:00
All checks were successful
ci / e2e (android) (push) Successful in 23m12s
ci / e2e (iphone) (push) Successful in 24m0s
ci / check (push) Successful in 12m48s
ci / desktop (push) Successful in 19m7s
perf / perf (pull_request) Has been skipped
ci / plan (push) Successful in 2m17s
ci / e2e (desktop) (push) Successful in 22m41s

Pull request closed

Sign in to join this conversation.
No description provided.