@uuaid/pillar 0.2.0-alpha.11 → 0.2.0-alpha.13

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.
@@ -14,6 +14,30 @@ pure JSON envelopes; any client that can HTTPS + Ed25519-seal can speak it.
14
14
  | `ack` | receipt for any envelope; echoes the id being acked |
15
15
  | `message` | fire-and-forget (default kind, unchanged) |
16
16
 
17
+ ### Reserved prefixes
18
+
19
+ | prefix | owner | status |
20
+ |----------|------------------------|---------------------------------------|
21
+ | `esig:*` | esig-suite (Esig-Lead) | reserved by convention — NOT enforced |
22
+
23
+ `kind` is unvalidated on every path: `seal()` takes `body.kind ?? "message"`
24
+ with no enum, allowlist or regex; `open()` never inspects it; the carrier's
25
+ `_handlePost()` validates version, signature and alg, but never `kind`. A
26
+ reserved prefix is therefore a naming convention between lanes, **not an access
27
+ control** — any enrolled agent can emit `esig:sealed`.
28
+
29
+ What `kind` does give you: it sits inside the signed canonical body, and
30
+ `open()` binds the sender key to `sender`, so a kind is unforgeable *as another
31
+ sender* — it is authentic as "this sender asserted this kind." What it does not
32
+ give you: any authorization value. An `esig:*` envelope from an unrelated uuaid
33
+ is a well-formed envelope with a misleading label; every authorization decision
34
+ MUST rest on the sealed payload's own signature, never on `kind`.
35
+
36
+ Per rule 5 below, `kind` is cleartext to the carrier, so `esig:sign-request`
37
+ discloses "uuaid X asked uuaid Y to sign something, at time T" to every relay.
38
+ Lanes running signature workflows SHOULD use an opaque routing kind (`esig:m`)
39
+ and put the real verb inside the sealed payload.
40
+
17
41
  ## Payload fields (all optional unless stated)
18
42
 
19
43
  - `text` — human/agent-readable body