Repository navigation
Promote edge to stable: remove POST participants, delete unused toxicity code, console refusal message, full CLI client - #3089
Merged
Merged
Conversation
The moderation test seeded its conversation with the helper's default account, which is not the conversation's owner or on the owner's site. Seeds from such an account are now held for moderation like any other statement, so the test seeds as the account that created the conversation, as the neighbouring specs do. The seed helpers say so in their docs, and a server test pins the owner path: an owner's bearer token creates a conversation and seeds it, and the seeds are approved at once. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
`polis join <conversation>` prepares anonymous participation the way the web client does: it checks the conversation through participationInit and reports whether this profile is already enrolled; the participant itself is created by the first vote or comment, as on the web. `--invite CODE` accepts an invite-tree invite and stores the returned login code; `--login-code` signs a returning participant back in. Participant tokens and codes are kept per profile, site and conversation in the owner-only credentials store and are never printed. No server change. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
POST /api/v3/participants has no caller in any client, test helper, tool or doc, and given any bearer token it created a participant past the invite-only, external-id and closed-conversation gates; a signed-in account could then vote in an invite-only conversation. The route and its handler are removed; GET /api/v3/participants stays. Observable change: POST /api/v3/participants answers 404 and writes nothing. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… module (#3084) The three harness entry points waited for the comment moderation module to load its prompt before starting. The comment path no longer uses that check, so the wait is dropped; nothing the harnesses record changes. This lands on its own so the module itself can be removed in a following change. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
When the server refuses a change on the Participant Management screen, the console now shows a short line under that setting. For the external-id allow-list once participants have joined it reads: "This setting can't change once participants have joined. Start a new conversation to use a different setting." Any other refusal reads "Couldn't save this change." The checkbox keeps the server's value, as before. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
`polis vote <conversation>` shows the next statement and records agree, disagree or pass, then the next one, until the participant stops or nothing is left. `--statement N --agree|--disagree|--pass` records one vote, for scripts and agents, with --json output. In an open conversation no join step is needed: the first vote creates the anonymous participant exactly as the web client does, and its token is kept for the following votes. Every vote value goes through the shared vote convention. No server change. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The comment toxicity check was switched off on the comment path. This removes its now-unused code: the language-model moderation module and its prompt, the profanity word list and its helper, and the moderation function in the comment routes, along with the two packages only they used. The report-narrative code keeps its own model client. Observable change: none on the comment path; the server no longer loads the moderation prompt at start-up. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
`polis comment <conversation> "text"` submits a statement as the participant. In an open conversation the first comment, like the first vote, creates the anonymous participant the way the web client does, and its token is kept; invited participants use the token from `polis join --invite`. The command never sends the seed flag, and the submitted text is never echoed in errors. No server change. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…de (#3086) `polis conversation new` walks an owner through starting a conversation: who can take part (open, anonymous, invite codes, external ids and their allow-list, sign-in), what participants can do, moderation and seed statements. `--from setup.json` applies the same typed setup for scripts and agents, `--dry-run` explains what would happen, and the wizard can `--save` the file. The setup is a typed model in polis-contracts in which combinations the server would not honour cannot be expressed, with one mapping onto the conversation settings. Applying runs in order (create, settings, invite waves, allow-list, seed statements) and reads back after each step; a partial failure reports exactly what was done. docs/conversation-setup.md describes every option and the admission behaviour behind it. No server change. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* cli: a Node-vs-Rust comparison of every CLI command scripts/test-polis-cli-differential.sh runs every CLI command against the same fixture data twice, once with the Rust routes switched off (Node) and once on, and requires identical --json data. It covers participant flows (join, vote, comment) as well as admin reads, records which backend served each request, and runs on its own in seconds, separate from the byte-level recordings. Commands backed by a route that exists only in Rust are listed separately: with Rust off they must fail cleanly as unavailable, and they are judged by their own contract tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s * ci: keep the differential results inside the runner's temp directory The upload step refuses a path that starts with '..'. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…da (#3088) Adds CLI commands for the remaining Node routes that an owner, moderator or participant uses: moderation, conversation management, invites and external-id lists, reports and exports, topics and Delphi results, and the topic agenda (`polis agenda list | add | replace | remove | priorities`). Each command calls an existing route, validates its input before any request, reports through the CLI's exit codes, and is covered by the Node-vs-Rust comparison. Unsafe legacy routes have no command (the removed join routes), participant commands never send the seed flag, and the external-id map download signs in as an owner or moderator. No server change. Claude-Session: https://claude.ai/code/session_018NVGBuYCk4EZmiz4csUv9s Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Delphi Coverage Report
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Server: POST /api/v3/participants removed (404; it admitted people past invite-only and external-id gates); the unused comment toxicity code deleted (no behaviour change); the admin console explains a refused setting change. Also the full CLI client (join, vote, comment, setup wizard, admin commands, topic agenda) and the Node-vs-Rust CLI comparison. No schema change.