@openvtc/trust-tasks 0.26.26 → 0.26.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -11,6 +11,72 @@ The package versions over **its own API** — what a consumer compiles against
11
11
  not over `SPEC.md`. Below 1.0 a breaking change bumps the leading non-zero
12
12
  component.
13
13
 
14
+ ## 0.26.28 — 2026-10-21
15
+
16
+
17
+ ### Fixed
18
+
19
+ - **voting**: Each trustee step on the board is the trustee's signed request (#853)
20
+
21
+ The board recorded each step of the trustees' ceremony as its payload alone, so nothing on it
22
+ showed who took a step. A ballot box could enrol or deal in a trustee's name — a polynomial of its
23
+ own choosing, with matching shares sealed to that trustee's transport key — and every check the
24
+ community, the trustees and certification run would pass while the ballot box held the election
25
+ key, able to open sealed ballots before close. The defence was only that the ballot box runs
26
+ honestly, which VTI-VOT-062 does not let a deployment assume.
27
+
28
+ - A new board entry, `trusteeStep` (appended), carries the trustee's `voting/trustees/enrol`,
29
+ `deal`, `confirm` or `justify` request exactly as the ballot box received it, proof included.
30
+ The `transportKey`, `dealing`, `confirmation` and `justification` kinds are no longer appended,
31
+ and a consumer refuses a board holding one.
32
+ - CONVENTIONS §9.6: whoever replays the ceremony takes a step only when its type, community and
33
+ election are right, its issuer is the trustee the manifest names at the payload's index, and
34
+ its proof is the issuer's. A `partials` entry needs no signature: its Chaum–Pedersen proofs
35
+ already tie it to the trustee's share. `voting/trustees/status` is never evidence of who took a
36
+ step.
37
+ - `vtc/elections/show` item 6: the community forms the key itself by replaying the ceremony from
38
+ the board (open to it on any board), never from `voting/trustees/status`.
39
+ - `vtc/elections/certify` item 8 states the encrypted levels' recount: ceremony, casts and
40
+ partials, from the board alone.
41
+
42
+ ## 0.26.27 — 2026-10-21
43
+
44
+
45
+ ### Added
46
+
47
+ - **vtc/config**: Did-hosting/list 0.1 — the hosting servers the community's VTA can publish its identities through (#849)
48
+
49
+ A community's administrator chooses where the identities it mints (its groups'
50
+ and its own rooms') are published. The community either serves each `did:webvh`
51
+ log itself, or has its VTA publish it on a hosting server registered there.
52
+ Without a list of those servers the choice is typed blind.
53
+
54
+ - vtc/config/did-hosting/list/0.1: for holders of `vtc.config.admin`. The
55
+ community asks its own VTA (`vta/webvh/servers/list`), as itself, over the
56
+ link it keeps to it. It answers with each server's `id`, `did` and `label`,
57
+ and nothing else of the VTA's record. A server whose id the configuration
58
+ could not name is left out.
59
+ - Codes: noKeyHolder (no VTA link), keyHolderUnavailable (no answer,
60
+ retryable), keyHolderRefused (the VTA's own code and message in `details`).
61
+
62
+
63
+
64
+ ### Fixed
65
+
66
+ - **voting**: Encrypted elections on a private board — trustees read their ceremony, voters get the key from vtc/elections/show (#852)
67
+
68
+ On a private board the ballot box answered voting/trustees/status only to the community and
69
+ its auditors, so no trustee could take its next step (transport keys, dealings and targets are
70
+ read from status) and no voter could obtain the election key: a sealed or tallied-encrypted
71
+ election on a private board could not run.
72
+
73
+ - CONVENTIONS §4 gains the rows the trustee tasks were missing; voting/trustees/status
74
+ answers every trustee the manifest names on any board. Nothing the ceremony publishes is
75
+ secret (§9.6, "Who reads the ceremony").
76
+ - vtc/elections/show carries electionKey (optional, appended) once formed, read from the
77
+ ballot box and refused unless the qualified dealings in the same answer form it. A voter
78
+ gets it from the community it already asks for its ticket.
79
+
14
80
  ## 0.26.26 — 2026-10-20
15
81
 
16
82
 
@@ -388,7 +388,7 @@ export type BlobRef = DigestMultibase;
388
388
  /**
389
389
  * One leaf of a board. A leaf's hash is the RFC 9162 leaf hash of the JCS canonicalization of this object. Entries carry no time of arrival: the order is the board's, and a timestamp would hand anyone who reads the board the timing the registrar's log would need to pair a ticket with its cast.
390
390
  */
391
- export type BoardEntry = CastEntry | ReplacementEntry | LifecycleEntry | ResultEntry | EncryptedCastEntry | TransportKeyEntry | DealingEntry | ConfirmationEntry | JustificationEntry | ElectionKeyEntry | PartialDecryptionsEntry | UnsealedEntry | SpoiledEntry;
391
+ export type BoardEntry = CastEntry | ReplacementEntry | LifecycleEntry | ResultEntry | EncryptedCastEntry | TransportKeyEntry | DealingEntry | ConfirmationEntry | JustificationEntry | ElectionKeyEntry | PartialDecryptionsEntry | UnsealedEntry | SpoiledEntry | TrusteeStepEntry;
392
392
  /**
393
393
  * `public`: anyone reads the board. `private`: the community, the auditors the manifest names and, for one cast's inclusion, the holder of its receipt (VTI-VOT-052).
394
394
  */
@@ -4574,14 +4574,23 @@ export interface EncryptedCastEntry {
4574
4574
  kind: "encryptedCast";
4575
4575
  cast: EncryptedCast;
4576
4576
  }
4577
+ /**
4578
+ * Not appended: each enrolment, dealing, confirmation and justification is a `trusteeStep` entry carrying the trustee's signed request (CONVENTIONS §9.6). A consumer MUST refuse a board holding this kind.
4579
+ */
4577
4580
  export interface TransportKeyEntry {
4578
4581
  kind: "transportKey";
4579
4582
  transportKey: TransportKey;
4580
4583
  }
4584
+ /**
4585
+ * Not appended: each enrolment, dealing, confirmation and justification is a `trusteeStep` entry carrying the trustee's signed request (CONVENTIONS §9.6). A consumer MUST refuse a board holding this kind.
4586
+ */
4581
4587
  export interface DealingEntry {
4582
4588
  kind: "dealing";
4583
4589
  dealing: Dealing;
4584
4590
  }
4591
+ /**
4592
+ * Not appended: each enrolment, dealing, confirmation and justification is a `trusteeStep` entry carrying the trustee's signed request (CONVENTIONS §9.6). A consumer MUST refuse a board holding this kind.
4593
+ */
4585
4594
  export interface ConfirmationEntry {
4586
4595
  kind: "confirmation";
4587
4596
  trustee: TrusteeIndex;
@@ -4590,6 +4599,9 @@ export interface ConfirmationEntry {
4590
4599
  */
4591
4600
  complaints: TrusteeIndex[];
4592
4601
  }
4602
+ /**
4603
+ * Not appended: each enrolment, dealing, confirmation and justification is a `trusteeStep` entry carrying the trustee's signed request (CONVENTIONS §9.6). A consumer MUST refuse a board holding this kind.
4604
+ */
4593
4605
  export interface JustificationEntry {
4594
4606
  kind: "justification";
4595
4607
  dealer: TrusteeIndex;
@@ -4621,6 +4633,13 @@ export interface SpoiledEntry {
4621
4633
  kind: "spoiled";
4622
4634
  leafIndex: number;
4623
4635
  }
4636
+ /**
4637
+ * One step of the trustees' ceremony — an enrolment, a dealing, a confirmation or a justification — as the trustee's own signed request, so that anyone reading the board can tell who took it (CONVENTIONS §9.6).
4638
+ */
4639
+ export interface TrusteeStepEntry {
4640
+ kind: "trusteeStep";
4641
+ request: SignedRequest;
4642
+ }
4624
4643
  /**
4625
4644
  * A board's tree head (RFC 9162 §2.1). A head is signed by being carried in a document the ballot box signs; whoever keeps a head keeps that whole document.
4626
4645
  */
@@ -9998,6 +10017,11 @@ export interface SigmaProof {
9998
10017
  c: GroupScalar;
9999
10018
  z: GroupScalar;
10000
10019
  }
10020
+ /**
10021
+ * A whole Trust Task request document — `id`, `type`, `issuer`, `payload` and every other member, `proof` included — exactly as the ballot box received it, never re-serialised: its proof is taken over its members, and a re-serialised copy does not reliably reproduce them. Typed as an open object so every member survives; CONVENTIONS §9.6 gives the checks that make it a trustee's step.
10022
+ */
10023
+ export interface SignedRequest {
10024
+ }
10001
10025
  /**
10002
10026
  * One signing-key delegation, as its holder sees it. A delegation confers nothing of its own: it names an identity that already holds whatever standing it holds, and a document signed by the key is authorized by that identity's standing read at execution time.
10003
10027
  */