Commit graph

22 commits

Author SHA1 Message Date
veg
6799a57405 feat: party knock asks an invite-only party's host for an invite
party list already shows invite-only parties; knock closes the loop.
The knocker can't run any tmux command against the server, so the
channel is write(1), the same one invite uses toward guests, except
here delivery failure is surfaced: the ping is the whole feature.
2026-07-11 12:24:31 +00:00
veg
7770289d85 feat: auto-select the gating group; 'party' becomes the fallback
Bare 'party host' now walks staff, users, wheel, party and gates on
the first group the caller belongs to, announcing the pick. Boxes
where people already share a system group need no setup; the curated
'party' group remains the fallback and the explicit --group /
TMUX_PARTY_GROUP paths are unchanged. Caller membership is the only
probe (id -nG, portable everywhere); whether a guest is a member stays
an invite-time warning, where it can actually be answered.
2026-07-11 12:20:35 +00:00
veg
22606ea55d docs: drop shipped liveness consolidation from roadmap 2026-07-11 12:07:23 +00:00
veg
6b94255245 refactor: fold is_party_alive into party_conn_state
One liveness primitive instead of two. The PID argument was a vestige
(format-checked, never probed, since the kill -0 removal); dropping it
means a roster with a garbage SERVER_PID can no longer mask a live
socket in host/moderation/role resolution.
2026-07-11 12:07:13 +00:00
veg
be3fb049d2 style: reword em-dashes; put colons inside bold run-in labels
Punctuation sweep across README, ROADMAP, and the script's comments:
em-dashes become colons, commas, or parentheses; bold list labels take
the colon inside the bold with lowercase text after. Comments only in
the script, no code changes.
2026-07-11 11:57:04 +00:00
veg
ff92d812ad docs: state the accidents-not-adversaries threat model; add ROADMAP
The gates in front of destructive operations exist to stop mistakes
(stale rosters, typos, racing hosts); stopping a malicious group
member is a side effect, not the design goal. Written into README
§Security and the man page so future checks are judged by that bar.
ROADMAP.md captures the direction: social features (knock, log,
clean) over further hardening, plus the explicit resist list.
2026-07-04 14:41:43 +00:00
veg
938491df1e fix: classify unauthorized by stderr presence, not denial wording
Review flagged the 'access not allowed' substring:
if tmux's denial text drifts while keeping exit 0, unauthorized
connections would classify as ok and the false-joined status/leave
misreporting would silently return. A clean authorized list-clients
writes nothing to stderr (verified 3.3a/3.5a/3.6-SunOS, incl. invited
read-only clients), so rc 0 plus any stderr output now classifies as
unauthorized: no message text consulted. Drift in any direction
degrades to a hidden party, never to a false ok.
2026-07-04 14:03:53 +00:00
veg
b44a3b705f fix: harden party_self_path; pin (U,R) ACL format; widen breakage comments 2026-07-04 10:42:58 +00:00
veg
2dc9285433 docs: repair README and deploy.sh drift
README: tmux requirement wording, invite-only list marker, name
charset, --party on moderation rows, PARTY_SOCKET_DIR whitespace note,
read-only join fallback. deploy.sh: drop phantom tests/run-remote.sh
include (file lives under legacy/ only) and fix the ship-list comment.
SERVERS.md and HISTORY.md were refreshed too but stay local-only per
.git/info/exclude ("Local docs — never published").
2026-07-04 10:33:14 +00:00
veg
44b97e9d6b docs: sync usage() and man page with actual CLI surface 2026-07-04 10:26:44 +00:00
veg
587a462e3c fix: read-only invitees auto-join passive
tmux refuses new-session from read-only clients ('client is
read-only'), so an active join for an -r invitee died under set -eu
with a raw tmux error. Detect the R flag on the caller's ACL line in
the existing preflight and fall back to the mirrored view.
2026-07-04 10:00:01 +00:00
veg
f3209e39d1 fix: classify unauthorized tmux connections; stop misreporting membership
tmux answers non-allowlisted users with 'access not allowed' on stderr
and exit 0 for every command (verified 3.3a/3.5a, two users), so
has-session reports any target as existing. party status claimed
uninvited group members were joined, party leave silently 'succeeded',
and party list printed bogus '0 attendee(s)' rows. New party_conn_state
(ok/unauthorized/dead) classifies by message content; list now shows
'invite-only (ask <host>)'.
2026-07-04 09:55:47 +00:00
veg
6cac86bb15 fix: guard non-tty join picker; refuse whitespace PARTY_SOCKET_DIR 2026-07-04 09:50:35 +00:00
veg
0d1b5ef796 fix: exec join attach with quoted args, not an unquoted string 2026-07-04 09:47:04 +00:00
veg
e174226651 fix: quote embedded paths in status-right widget 2026-07-04 09:44:32 +00:00
veg
2ef4eb49ce fix: pin absolute script path in status-right widget
The #() body runs with the tmux server's PATH; a bare 'party' silently
broke the widget for uninstalled or non-standard-prefix hosts.
2026-07-04 09:39:45 +00:00
veg
7d95850461 fix: .party-notify uses PARTY_TMUX, not bare tmux from PATH 2026-07-04 09:25:27 +00:00
veg
fc366f48fa fix: let voice/mute/kick/detach take --party
A host of two or more parties was told 'pass a name' by commands that
accepted no name flag, making moderation impossible. Mirrors the
--party flag invite already had.
2026-07-04 09:14:19 +00:00
veg
9117f73423 fix: track the executable bit on party
The script was committed mode 100644; a fresh clone could not run
./party, and the bats suite fails with EACCES 126 wherever it invokes
"$PARTY_BIN" directly. Makefile installs masked this via install -m 0755.
2026-07-04 08:34:12 +00:00
veg
f06c599ea7 fix: reject '.' and leading '-' in party names
tmux session_check_name() silently rewrites '.' to '_', so a dotted
party name desyncs from its tmux session and every -t lookup fails
(verified on tmux 3.3a through 3.6b). Leading-dash names can never be
addressed through the CLI parsers.
2026-07-04 07:51:38 +00:00
veg
a4e6dbe672 l'esprit de la fête ! 2026-06-01 18:01:26 +02:00
veg
6be0ac1877 Initial pre-release
tmux-party: share a tmux session with people on the same UNIX host.
Single-file POSIX shell (party) with a filesystem + tmux server-access
trust model. See README.md.
2026-06-01 15:31:54 +00:00