docs(phase659): mark poll unread and idempotent vote items complete

Mark P659-16 and P659-17 complete in roadmap and document desired-state vote
IPC/idempotent apply plus no synthetic unread/mention behavior for poll updates.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-06-02 03:58:05 -04:00
co-authored by Cursor
parent dc95fe057d
commit 8717e848e4
2 changed files with 7 additions and 3 deletions
+5 -1
View File
@@ -12,6 +12,8 @@
**v0.8.638 (Phase 659 slice 6):** Poll option labels now use message markdown/emoji formatting for Discord-style readability, and poll answer rows/totals expose stronger accessibility labels (`aria-label`, `aria-live`).
**v0.8.638 (Phase 659 slice 7):** Poll vote dispatch now carries desired vote state for idempotent apply (`vote-dm-poll` with `voted`), and poll updates are verified not to create artificial unread/mention bumps.
## Commands
- `/poll Question | Option A | Option B` creates a single-choice poll.
@@ -31,7 +33,7 @@ Polls are encoded as normal DM messages (no central service), with option emojis
| Poll edit guard | `pearcord-platform` | `editDmPoll` allows edits only before first vote is recorded |
| Poll close/expiry | `pearcord-platform` | `closeDmPoll` and vote/edit closed-state enforcement (`poll is closed`) |
| Poll delete permissions | `pearcord-platform` | `deleteDmPoll` requires DM-mode modify/delete permission and poll-shape check |
| IPC | `pearcord-ui-flow` | `vote-dm-poll`/`edit-dm-poll`/`close-dm-poll`/`delete-dm-poll` result events |
| IPC | `pearcord-ui-flow` | `vote-dm-poll` (with `voted` desired state)/`edit-dm-poll`/`close-dm-poll`/`delete-dm-poll` result events |
| UI | `apps/pearcord/ui` | Poll card render + vote bars + anonymous label + pre-vote edit/close/delete affordances + optimistic rollback reconcile + composer modal + markdown/emoji option labels + poll a11y labels |
| Agentctl journey | `pearcord-agentctl` | `runDmPollVoteJourney` |
@@ -53,3 +55,5 @@ npm run test:phase659-dm-polls-scheduling
- Thread-scoped DM polls are supported when active channel is `dm_thread` (same DM mode policy path).
- Poll optimistic conflict checks only compare poll-option emojis, allowing unrelated message reactions to coexist without rollback noise.
- Poll totals use `aria-live="polite"` and each answer row provides explicit vote/selection accessibility labels.
- Poll vote apply is idempotent when duplicate desired-state messages arrive, reducing gossip race toggles.
- Poll vote updates do not create synthetic mention/unread alerts by themselves.
+2 -2
View File
@@ -20404,8 +20404,8 @@ P2P-first phase: Hyperswarm guild mesh, `GUILD_SYNC` bundles, join/recovery pipe
| P659-13 | DM polls: compose modal with answer validation + max limits | [x] |
| P659-14 | DM polls: poll markdown/emoji option rendering parity | [x] |
| P659-15 | DM polls: accessibility labels for answer rows + totals | [x] |
| P659-16 | DM polls: unread/mention behavior when poll updates arrive | [ ] |
| P659-17 | DM polls: poll vote gossip RPC and idempotent apply path | [ ] |
| P659-16 | DM polls: unread/mention behavior when poll updates arrive | [x] |
| P659-17 | DM polls: poll vote gossip RPC and idempotent apply path | [x] |
| P659-18 | DM polls: HyperDB storage/index for poll definitions/votes | [ ] |
| P659-19 | DM polls: JsonStore fallback for poll state in non-hyper runs | [ ] |
| P659-20 | DM polls: export/import in agentctl scenario fixtures | [ ] |