You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -15,11 +15,11 @@ Developed by [MODN METL LTD](https://modnmetl.com).
15
15
16
16
---
17
17
18
-
## ModNVote 2.0 status
18
+
## ModNVote 2.x status
19
19
20
20
ModNVote 2.0 is the active replacement for the legacy 1.x Yes/No-only plugin.
21
21
22
-
2.0 introduces:
22
+
2.x includes:
23
23
24
24
- GUI-driven poll creation and editing
25
25
- Ranked single-winner polls
@@ -30,6 +30,10 @@ ModNVote 2.0 is the active replacement for the legacy 1.x Yes/No-only plugin.
30
30
- Tamper-evident audit records
31
31
- Java/Bedrock-friendly inventory interfaces
32
32
- Mandatory confirmation before ballots are cast
33
+
- Poll cloning for repeated or template-based poll setup
34
+
- Optional external witness publication via Discord-compatible webhooks
35
+
- Automatic and manual integrity checkpoint publication
36
+
-`/poll` as a short alias for `/modnvote`
33
37
34
38
2.0 is a clean install target. Migration from legacy 1.x databases is not currently supported.
35
39
@@ -57,6 +61,7 @@ This means:
57
61
- Vote content and voter identity are not stored together.
58
62
-`/modnvote verify participation` confirms participation without revealing a vote.
59
63
-`/modnvote verify ballot` uses a proof phrase as a bearer-token style verification mechanism.
64
+
-`/poll` may be used as a shorter alias for `/modnvote`.
60
65
- GUI/session state does not directly write ballots or lifecycle state.
61
66
62
67
---
@@ -98,6 +103,24 @@ This creates a DRAFT Yes/No poll and opens the Poll Builder GUI.
98
103
99
104
---
100
105
106
+
## Command alias
107
+
108
+
All `/modnvote` commands can also be used via the shorter alias:
109
+
110
+
```text
111
+
/poll ...
112
+
```
113
+
114
+
For example:
115
+
116
+
```text
117
+
/poll create ranked_single_winner 5
118
+
/poll open <pollId>
119
+
/poll vote <pollId>
120
+
```
121
+
122
+
---
123
+
101
124
## Admin workflow
102
125
103
126
### Create a ranked poll
@@ -144,6 +167,16 @@ Yes/No polls do not show ranked-only settings such as Max Rankings or Allow Part
144
167
145
168
This reopens the Poll Builder for an existing DRAFT poll.
146
169
170
+
### Clone an existing poll
171
+
172
+
```text
173
+
/modnvote clone <sourcePollId>
174
+
```
175
+
176
+
This creates a new DRAFT poll by copying the source poll’s definition and options, then opens the Poll Builder so the clone can be adjusted.
177
+
178
+
Cloning does not copy ballots, participation records, lifecycle timestamps, proof phrases, or audit history.
179
+
147
180
### Open a poll for voting
148
181
149
182
```text
@@ -181,6 +214,64 @@ For ranked polls:
181
214
182
215
Results are calculated from anonymous ballots only.
183
216
217
+
### Publish a manual integrity checkpoint
218
+
219
+
```text
220
+
/modnvote checkpoint <pollId>
221
+
```
222
+
223
+
This publishes a privacy-safe witness checkpoint to the configured webhook targets.
224
+
225
+
Manual checkpoints include poll-level integrity status only. They do not publish player names, UUIDs, IP addresses, proof phrases, participation receipts, or per-player vote content.
226
+
227
+
---
228
+
229
+
## Witness publication
230
+
231
+
ModNVote can publish public witness events to configured Discord-compatible webhooks.
232
+
233
+
Supported witness events:
234
+
235
+
- Poll opened
236
+
- Poll closed, including a public result summary
237
+
- Automatic integrity checkpoints every configured number of accepted ballots
238
+
- Manual integrity checkpoints via `/modnvote checkpoint <pollId>`
239
+
240
+
Webhook delivery is best-effort and non-blocking. A failed webhook does not cancel voting, poll opening, poll closing, or persistence.
241
+
242
+
Configure webhook publication in `config.yml`:
243
+
244
+
```yaml
245
+
publication:
246
+
# External witness publication targets.
247
+
#
248
+
# Leave this as [] to disable webhook publication:
249
+
# discord_webhooks: []
250
+
#
251
+
# To enable Discord publication, change it to a YAML list:
|`modnvote.admin.poll.open`| Open polls for voting |
262
365
|`modnvote.admin.poll.close`| Close polls |
@@ -355,14 +458,17 @@ Integrity checks include:
355
458
- Ballot hash verification
356
459
- Ballot commitment verification
357
460
- Audit chain validation
461
+
- Optional witness checkpoint publication
358
462
359
463
The goal is not to identify how someone voted. The goal is to verify that the stored election data remains internally consistent and that a voter can verify their own ballot proof phrase.
360
464
465
+
Witness publication can optionally publish poll-level lifecycle and checkpoint events to configured webhooks. These events are privacy-safe and do not include voter identity, proof phrases, participation receipts, IP data, or per-player vote content.
466
+
361
467
---
362
468
363
469
## Installation
364
470
365
-
ModNVote 2.0 currently requires a clean install.
471
+
ModNVote 2.x requires a clean install (No upgrade path from v1.x).
366
472
367
473
1. Stop the server.
368
474
2. Remove any legacy ModNVote 1.x jar.
@@ -408,36 +514,17 @@ The Java source/target level should remain Java 21 unless explicitly changed.
0 commit comments