@ottochain/sdk 2.4.0 → 2.6.0

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.
Files changed (227) hide show
  1. package/dist/cjs/apps/compute/index.js +33 -0
  2. package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
  3. package/dist/cjs/apps/compute/state-machines/index.js +9 -0
  4. package/dist/cjs/apps/contracts/index.js +1 -1
  5. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
  6. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
  7. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
  8. package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
  9. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
  10. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
  11. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
  12. package/dist/cjs/apps/governance/index.js +7 -7
  13. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
  14. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
  15. package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
  16. package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
  17. package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
  18. package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
  19. package/dist/cjs/apps/identity/constants.js +16 -24
  20. package/dist/cjs/apps/identity/index.js +1 -1
  21. package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
  22. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
  23. package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
  24. package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
  25. package/dist/cjs/apps/index.js +4 -1
  26. package/dist/cjs/apps/lending/assets.js +41 -17
  27. package/dist/cjs/apps/lending/credit-scoring.js +4 -4
  28. package/dist/cjs/apps/lending/eligibility.js +9 -25
  29. package/dist/cjs/apps/lending/index.js +1 -1
  30. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
  31. package/dist/cjs/apps/markets/index.js +1 -1
  32. package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
  33. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
  34. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
  35. package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
  36. package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
  37. package/dist/cjs/apps/oracles/index.js +1 -1
  38. package/dist/cjs/apps/privacy/index.js +67 -0
  39. package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
  40. package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
  41. package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
  42. package/dist/cjs/apps/staked-pool/assets.js +103 -0
  43. package/dist/cjs/apps/staked-pool/base.js +498 -0
  44. package/dist/cjs/apps/staked-pool/consumer.js +55 -0
  45. package/dist/cjs/apps/staked-pool/index.js +83 -0
  46. package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
  47. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
  48. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
  49. package/dist/cjs/generated/google/protobuf/struct.js +1 -1
  50. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  51. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  52. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  53. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
  54. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  55. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
  56. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
  57. package/dist/cjs/generated/ottochain/v1/common.js +1 -1
  58. package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
  59. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  60. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  61. package/dist/cjs/index.js +21 -3
  62. package/dist/cjs/ottochain/genesis-manifest.js +6 -0
  63. package/dist/cjs/ottochain/metagraph-client.js +63 -11
  64. package/dist/cjs/ottochain/snapshot.js +2 -4
  65. package/dist/cjs/ottochain/transaction.js +10 -0
  66. package/dist/cjs/privacy/sealed-bid.js +85 -82
  67. package/dist/cjs/privacy/shield-app.js +32 -32
  68. package/dist/cjs/schema/effects.js +145 -1
  69. package/dist/cjs/schema/fiber-app.js +139 -5
  70. package/dist/cjs/schema/guard-lint.js +3 -12
  71. package/dist/cjs/schema/guards.js +38 -38
  72. package/dist/cjs/templates/asset-policy.js +190 -0
  73. package/dist/cjs/templates/index.js +86 -0
  74. package/dist/cjs/templates/machine.js +130 -0
  75. package/dist/cjs/templates/migration.js +39 -0
  76. package/dist/cjs/templates/state-shape.js +38 -0
  77. package/dist/cjs/validation.js +1 -3
  78. package/dist/esm/apps/compute/index.js +29 -0
  79. package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
  80. package/dist/esm/apps/compute/state-machines/index.js +5 -0
  81. package/dist/esm/apps/contracts/index.js +4 -4
  82. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
  83. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
  84. package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
  85. package/dist/esm/apps/corporate/index.js +2 -2
  86. package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
  87. package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
  88. package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
  89. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
  90. package/dist/esm/apps/governance/index.js +10 -10
  91. package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
  92. package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
  93. package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
  94. package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
  95. package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
  96. package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
  97. package/dist/esm/apps/identity/constants.js +18 -26
  98. package/dist/esm/apps/identity/index.js +8 -8
  99. package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
  100. package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
  101. package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
  102. package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
  103. package/dist/esm/apps/index.js +9 -6
  104. package/dist/esm/apps/lending/assets.js +41 -17
  105. package/dist/esm/apps/lending/credit-scoring.js +6 -6
  106. package/dist/esm/apps/lending/eligibility.js +10 -26
  107. package/dist/esm/apps/lending/index.js +5 -5
  108. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
  109. package/dist/esm/apps/markets/index.js +5 -5
  110. package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
  111. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
  112. package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
  113. package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
  114. package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
  115. package/dist/esm/apps/oracles/index.js +3 -3
  116. package/dist/esm/apps/privacy/index.js +56 -0
  117. package/dist/esm/apps/privacy/state-machines/index.js +6 -0
  118. package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
  119. package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
  120. package/dist/esm/apps/staked-pool/assets.js +91 -0
  121. package/dist/esm/apps/staked-pool/base.js +493 -0
  122. package/dist/esm/apps/staked-pool/consumer.js +49 -0
  123. package/dist/esm/apps/staked-pool/index.js +60 -0
  124. package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
  125. package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
  126. package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
  127. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  128. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  129. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  130. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  131. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  132. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  133. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
  134. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
  135. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  136. package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
  137. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  138. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  139. package/dist/esm/index.js +10 -4
  140. package/dist/esm/ottochain/genesis-manifest.js +6 -0
  141. package/dist/esm/ottochain/metagraph-client.js +63 -11
  142. package/dist/esm/ottochain/snapshot.js +2 -4
  143. package/dist/esm/ottochain/transaction.js +8 -0
  144. package/dist/esm/privacy/index.js +2 -2
  145. package/dist/esm/privacy/sealed-bid.js +87 -84
  146. package/dist/esm/privacy/shield-app.js +33 -33
  147. package/dist/esm/schema/effects.js +137 -0
  148. package/dist/esm/schema/fiber-app.js +134 -5
  149. package/dist/esm/schema/guard-lint.js +3 -12
  150. package/dist/esm/schema/guards.js +36 -37
  151. package/dist/esm/templates/asset-policy.js +182 -0
  152. package/dist/esm/templates/index.js +41 -0
  153. package/dist/esm/templates/machine.js +125 -0
  154. package/dist/esm/templates/migration.js +34 -0
  155. package/dist/esm/templates/state-shape.js +34 -0
  156. package/dist/esm/validation.js +1 -3
  157. package/dist/esm/zk/index.js +4 -4
  158. package/dist/types/apps/compute/index.d.ts +176 -0
  159. package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
  160. package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
  161. package/dist/types/apps/contracts/index.d.ts +14 -14
  162. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
  163. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
  164. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
  165. package/dist/types/apps/corporate/index.d.ts +162 -162
  166. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
  167. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
  168. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
  169. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
  170. package/dist/types/apps/governance/index.d.ts +81 -81
  171. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
  172. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
  173. package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
  174. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
  175. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
  176. package/dist/types/apps/identity/constants.d.ts +2 -2
  177. package/dist/types/apps/identity/index.d.ts +70 -70
  178. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
  179. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
  180. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
  181. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
  182. package/dist/types/apps/index.d.ts +9 -6
  183. package/dist/types/apps/lending/assets.d.ts +2 -2
  184. package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
  185. package/dist/types/apps/lending/eligibility.d.ts +2 -2
  186. package/dist/types/apps/lending/index.d.ts +20 -12
  187. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
  188. package/dist/types/apps/markets/index.d.ts +76 -76
  189. package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
  190. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
  191. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
  192. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
  193. package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
  194. package/dist/types/apps/oracles/index.d.ts +1 -1
  195. package/dist/types/apps/privacy/index.d.ts +328 -0
  196. package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
  197. package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
  198. package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
  199. package/dist/types/apps/staked-pool/assets.d.ts +53 -0
  200. package/dist/types/apps/staked-pool/base.d.ts +80 -0
  201. package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
  202. package/dist/types/apps/staked-pool/index.d.ts +51 -0
  203. package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
  204. package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
  205. package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
  206. package/dist/types/generated/openapi.d.ts +13 -0
  207. package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
  208. package/dist/types/index.d.ts +3 -3
  209. package/dist/types/openapi.d.ts +4 -2
  210. package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
  211. package/dist/types/ottochain/index.d.ts +1 -1
  212. package/dist/types/ottochain/metagraph-client.d.ts +69 -15
  213. package/dist/types/ottochain/transaction.d.ts +9 -1
  214. package/dist/types/ottochain/types.d.ts +1 -1
  215. package/dist/types/privacy/index.d.ts +2 -2
  216. package/dist/types/privacy/sealed-bid.d.ts +9 -9
  217. package/dist/types/privacy/shield-app.d.ts +1 -1
  218. package/dist/types/schema/effects.d.ts +132 -0
  219. package/dist/types/schema/fiber-app.d.ts +281 -0
  220. package/dist/types/schema/guards.d.ts +12 -0
  221. package/dist/types/templates/asset-policy.d.ts +119 -0
  222. package/dist/types/templates/index.d.ts +26 -0
  223. package/dist/types/templates/machine.d.ts +139 -0
  224. package/dist/types/templates/migration.d.ts +34 -0
  225. package/dist/types/templates/state-shape.d.ts +30 -0
  226. package/dist/types/zk/index.d.ts +4 -4
  227. package/package.json +31 -13
@@ -1,665 +1,613 @@
1
- import { defineFiberApp } from "../../../schema/fiber-app.js";
2
- import { signerIsParty, depInState } from "../../../schema/guards.js";
3
- import { addDependency } from "../../../schema/effects.js";
1
+ import { defineFiberApp } from '../../../schema/fiber-app.js';
2
+ import { signerIsParty, depInState } from '../../../schema/guards.js';
3
+ import { addDependency } from '../../../schema/effects.js';
4
4
  /**
5
5
  * Shareholder meeting state machine managing annual/special meetings, record dates, proxy periods, voting, and certification of results.
6
6
  * Supports multiple share classes and cumulative voting.
7
7
  */
8
8
  export const corpShareholdersDef = defineFiberApp({
9
9
  metadata: {
10
- name: "CorpShareholders",
11
- app: "corporate",
12
- type: "shareholders",
13
- version: "1.0.0",
14
- description: "Shareholder meeting state machine managing annual/special meetings, record dates, proxy periods, voting, and certification of results. Supports multiple share classes and cumulative voting.",
10
+ name: 'CorpShareholders',
11
+ app: 'corporate',
12
+ type: 'shareholders',
13
+ version: '1.0.0',
14
+ description: 'Shareholder meeting state machine managing annual/special meetings, record dates, proxy periods, voting, and certification of results. Supports multiple share classes and cumulative voting.',
15
15
  crossReferences: {
16
16
  entity: {
17
- machine: "corporate-entity",
18
- description: "Parent corporate entity",
19
- foreignKey: "entityId",
17
+ machine: 'corporate-entity',
18
+ description: 'Parent corporate entity',
19
+ foreignKey: 'entityId',
20
20
  },
21
21
  proxies: {
22
- machine: "corporate-proxy",
23
- description: "Proxy grants for this meeting",
24
- foreignKey: "meetingId",
22
+ machine: 'corporate-proxy',
23
+ description: 'Proxy grants for this meeting',
24
+ foreignKey: 'meetingId',
25
25
  },
26
26
  resolutions: {
27
- machine: "corporate-resolution",
28
- description: "Resolutions resulting from meeting votes",
29
- foreignKey: "meetingId",
27
+ machine: 'corporate-resolution',
28
+ description: 'Resolutions resulting from meeting votes',
29
+ foreignKey: 'meetingId',
30
30
  },
31
31
  securities: {
32
- machine: "corporate-securities",
33
- description: "Share records for determining voting rights",
34
- foreignKey: "entityId",
32
+ machine: 'corporate-securities',
33
+ description: 'Share records for determining voting rights',
34
+ foreignKey: 'entityId',
35
35
  },
36
36
  },
37
37
  },
38
38
  createSchema: {
39
- required: ["meetingId", "entityId", "registrar"],
39
+ required: ['meetingId', 'entityId', 'registrar'],
40
40
  properties: {
41
41
  meetingId: {
42
- type: "string",
43
- description: "Unique identifier for this shareholder meeting",
42
+ type: 'string',
43
+ description: 'Unique identifier for this shareholder meeting',
44
44
  immutable: true,
45
45
  },
46
46
  entityId: {
47
- type: "string",
48
- description: "Reference to parent corporate-entity",
47
+ type: 'string',
48
+ description: 'Reference to parent corporate-entity',
49
49
  immutable: true,
50
50
  },
51
51
  registrar: {
52
- type: "address",
53
- description: "State-pinned DAG address of the transfer agent / registrar authorized to register the eligible-shareholder roster of record. Verified against proofs[].address.",
52
+ type: 'address',
53
+ description: 'State-pinned DAG address of the transfer agent / registrar authorized to register the eligible-shareholder roster of record. Verified against proofs[].address.',
54
54
  immutable: true,
55
55
  },
56
56
  meetingType: {
57
- type: "string",
58
- enum: ["ANNUAL", "SPECIAL"],
59
- description: "Annual meetings are required; special meetings called for specific purposes",
57
+ type: 'string',
58
+ enum: ['ANNUAL', 'SPECIAL'],
59
+ description: 'Annual meetings are required; special meetings called for specific purposes',
60
60
  },
61
61
  fiscalYear: {
62
- type: "integer",
63
- description: "Fiscal year for annual meetings",
62
+ type: 'integer',
63
+ description: 'Fiscal year for annual meetings',
64
64
  },
65
65
  scheduledDate: {
66
- type: "string",
67
- format: "date-time",
66
+ type: 'string',
67
+ format: 'date-time',
68
68
  },
69
69
  location: {
70
- type: "object",
70
+ type: 'object',
71
71
  properties: {
72
- physical: { type: "string", nullable: true },
73
- virtualUrl: { type: "string", nullable: true },
74
- isHybrid: { type: "boolean", default: false },
72
+ physical: { type: 'string', nullable: true },
73
+ virtualUrl: { type: 'string', nullable: true },
74
+ isHybrid: { type: 'boolean', default: false },
75
75
  },
76
76
  },
77
77
  },
78
78
  },
79
79
  stateSchema: {
80
80
  properties: {
81
- meetingId: { type: "string", immutable: true },
82
- entityId: { type: "string", immutable: true },
83
- registrar: { type: "address", immutable: true },
84
- meetingType: { type: "string" },
85
- fiscalYear: { type: "integer" },
86
- scheduledDate: { type: "string", format: "date-time" },
87
- location: { type: "object" },
88
- calledBy: { $ref: "#/definitions/CalledBy", computed: true },
89
- noticeInfo: { $ref: "#/definitions/NoticeInfo", computed: true },
81
+ meetingId: { type: 'string', immutable: true },
82
+ entityId: { type: 'string', immutable: true },
83
+ registrar: { type: 'address', immutable: true },
84
+ meetingType: { type: 'string' },
85
+ fiscalYear: { type: 'integer' },
86
+ scheduledDate: { type: 'string', format: 'date-time' },
87
+ location: { type: 'object' },
88
+ calledBy: { $ref: '#/definitions/CalledBy', computed: true },
89
+ noticeInfo: { $ref: '#/definitions/NoticeInfo', computed: true },
90
90
  recordDate: {
91
- $ref: "#/definitions/RecordDate",
91
+ $ref: '#/definitions/RecordDate',
92
92
  nullable: true,
93
93
  computed: true,
94
94
  },
95
95
  eligibleVoters: {
96
- type: "array",
97
- items: { $ref: "#/definitions/EligibleVoter" },
96
+ type: 'array',
97
+ items: { $ref: '#/definitions/EligibleVoter' },
98
98
  computed: true,
99
99
  },
100
100
  quorumRequirements: {
101
- $ref: "#/definitions/QuorumRequirements",
101
+ $ref: '#/definitions/QuorumRequirements',
102
102
  computed: true,
103
103
  },
104
104
  agenda: {
105
- type: "array",
106
- items: { $ref: "#/definitions/AgendaItem" },
105
+ type: 'array',
106
+ items: { $ref: '#/definitions/AgendaItem' },
107
107
  computed: true,
108
108
  },
109
109
  proxyPeriod: {
110
- $ref: "#/definitions/ProxyPeriod",
110
+ $ref: '#/definitions/ProxyPeriod',
111
111
  nullable: true,
112
112
  computed: true,
113
113
  },
114
114
  votes: {
115
- type: "array",
116
- items: { $ref: "#/definitions/Vote" },
115
+ type: 'array',
116
+ items: { $ref: '#/definitions/Vote' },
117
117
  computed: true,
118
118
  },
119
119
  voteTallies: {
120
- type: "array",
121
- items: { $ref: "#/definitions/VoteTally" },
120
+ type: 'array',
121
+ items: { $ref: '#/definitions/VoteTally' },
122
122
  computed: true,
123
123
  },
124
124
  inspectorOfElections: {
125
- $ref: "#/definitions/Inspector",
125
+ $ref: '#/definitions/Inspector',
126
126
  nullable: true,
127
127
  computed: true,
128
128
  },
129
129
  sessionInfo: {
130
- $ref: "#/definitions/SessionInfo",
130
+ $ref: '#/definitions/SessionInfo',
131
131
  nullable: true,
132
132
  computed: true,
133
133
  },
134
134
  certification: {
135
- $ref: "#/definitions/Certification",
135
+ $ref: '#/definitions/Certification',
136
136
  nullable: true,
137
137
  computed: true,
138
138
  },
139
139
  status: {
140
- type: "string",
141
- enum: [
142
- "SCHEDULED",
143
- "RECORD_DATE_SET",
144
- "PROXY_PERIOD",
145
- "IN_SESSION",
146
- "VOTING",
147
- "CLOSED",
148
- ],
140
+ type: 'string',
141
+ enum: ['SCHEDULED', 'RECORD_DATE_SET', 'PROXY_PERIOD', 'IN_SESSION', 'VOTING', 'CLOSED'],
149
142
  computed: true,
150
143
  },
151
- createdAt: { type: "timestamp", computed: true },
152
- updatedAt: { type: "timestamp", computed: true },
144
+ createdAt: { type: 'timestamp', computed: true },
145
+ updatedAt: { type: 'timestamp', computed: true },
153
146
  // Two-phase scheduling (#24): propose_schedule_annual binds the board-resolution fiber + records the
154
147
  // pending meeting here; schedule_annual asserts the bound resolution is EXECUTED, then clears this.
155
- pendingschedule_annual: { type: "object", nullable: true, computed: true },
148
+ pendingschedule_annual: { type: 'object', nullable: true, computed: true },
156
149
  },
157
150
  },
158
151
  eventSchemas: {
159
152
  propose_schedule_annual: {
160
- description: "Phase 1 of annual-meeting scheduling: bind the executing board-resolution fiber (#24 _addDependency) and record the pending meeting",
161
- required: [
162
- "meetingId",
163
- "entityId",
164
- "fiscalYear",
165
- "scheduledDate",
166
- "boardResolutionRef",
167
- ],
153
+ description: 'Phase 1 of annual-meeting scheduling: bind the executing board-resolution fiber (#24 _addDependency) and record the pending meeting',
154
+ required: ['meetingId', 'entityId', 'fiscalYear', 'scheduledDate', 'boardResolutionRef'],
168
155
  properties: {
169
- meetingId: { type: "string" },
170
- entityId: { type: "string" },
171
- fiscalYear: { type: "integer" },
172
- scheduledDate: { type: "string", format: "date-time" },
173
- location: { type: "object" },
174
- boardResolutionRef: { type: "string" },
156
+ meetingId: { type: 'string' },
157
+ entityId: { type: 'string' },
158
+ fiscalYear: { type: 'integer' },
159
+ scheduledDate: { type: 'string', format: 'date-time' },
160
+ location: { type: 'object' },
161
+ boardResolutionRef: { type: 'string' },
175
162
  },
176
163
  },
177
164
  schedule_annual: {
178
- description: "Phase 2 of annual-meeting scheduling: execute once the bound board resolution is EXECUTED",
179
- required: [
180
- "meetingId",
181
- "entityId",
182
- "fiscalYear",
183
- "scheduledDate",
184
- ],
165
+ description: 'Phase 2 of annual-meeting scheduling: execute once the bound board resolution is EXECUTED',
166
+ required: ['meetingId', 'entityId', 'fiscalYear', 'scheduledDate'],
185
167
  properties: {
186
- meetingId: { type: "string" },
187
- entityId: { type: "string" },
188
- fiscalYear: { type: "integer" },
189
- scheduledDate: { type: "string", format: "date-time" },
190
- location: { type: "object" },
168
+ meetingId: { type: 'string' },
169
+ entityId: { type: 'string' },
170
+ fiscalYear: { type: 'integer' },
171
+ scheduledDate: { type: 'string', format: 'date-time' },
172
+ location: { type: 'object' },
191
173
  },
192
174
  },
193
175
  schedule_special: {
194
- description: "Schedule a special shareholder meeting",
195
- required: [
196
- "meetingId",
197
- "entityId",
198
- "scheduledDate",
199
- "purpose",
200
- "calledByType",
201
- ],
176
+ description: 'Schedule a special shareholder meeting',
177
+ required: ['meetingId', 'entityId', 'scheduledDate', 'purpose', 'calledByType'],
202
178
  properties: {
203
- meetingId: { type: "string" },
204
- entityId: { type: "string" },
205
- scheduledDate: { type: "string", format: "date-time" },
206
- location: { type: "object" },
179
+ meetingId: { type: 'string' },
180
+ entityId: { type: 'string' },
181
+ scheduledDate: { type: 'string', format: 'date-time' },
182
+ location: { type: 'object' },
207
183
  purpose: {
208
- type: "string",
209
- description: "Specific purpose for special meeting",
184
+ type: 'string',
185
+ description: 'Specific purpose for special meeting',
210
186
  },
211
187
  calledByType: {
212
- type: "string",
213
- enum: ["BOARD", "SHAREHOLDERS", "COURT"],
188
+ type: 'string',
189
+ enum: ['BOARD', 'SHAREHOLDERS', 'COURT'],
214
190
  },
215
- resolutionRef: { type: "string" },
216
- petitionRef: { type: "string" },
191
+ resolutionRef: { type: 'string' },
192
+ petitionRef: { type: 'string' },
217
193
  },
218
194
  },
219
195
  set_record_date: {
220
- description: "Board sets the record date for determining eligible shareholders",
221
- required: ["recordDate", "resolutionRef"],
196
+ description: 'Board sets the record date for determining eligible shareholders',
197
+ required: ['recordDate', 'resolutionRef'],
222
198
  properties: {
223
- recordDate: { type: "string", format: "date" },
224
- resolutionRef: { type: "string" },
199
+ recordDate: { type: 'string', format: 'date' },
200
+ resolutionRef: { type: 'string' },
225
201
  },
226
202
  },
227
203
  register_eligible_shareholders: {
228
- description: "Register shareholders of record as of record date",
229
- required: ["shareholders", "totalSharesOutstanding"],
204
+ description: 'Register shareholders of record as of record date',
205
+ required: ['shareholders', 'totalSharesOutstanding'],
230
206
  properties: {
231
207
  shareholders: {
232
- type: "array",
208
+ type: 'array',
233
209
  items: {
234
- type: "object",
210
+ type: 'object',
235
211
  properties: {
236
- shareholderId: { type: "string" },
237
- name: { type: "string" },
212
+ shareholderId: { type: 'string' },
213
+ name: { type: 'string' },
238
214
  address: {
239
- type: "address",
240
- description: "DAG wallet address of record for this shareholder; the only key a verified signer can vote under.",
215
+ type: 'address',
216
+ description: 'DAG wallet address of record for this shareholder; the only key a verified signer can vote under.',
241
217
  },
242
- shareholdings: { type: "array" },
218
+ shareholdings: { type: 'array' },
243
219
  },
244
220
  },
245
221
  },
246
- totalSharesOutstanding: { type: "integer" },
222
+ totalSharesOutstanding: { type: 'integer' },
247
223
  },
248
224
  },
249
225
  open_proxy_period: {
250
- description: "Distribute proxy materials and open proxy solicitation period",
251
- required: [
252
- "startDate",
253
- "proxyStatementRef",
254
- "formOfProxyRef",
255
- "agenda",
256
- ],
226
+ description: 'Distribute proxy materials and open proxy solicitation period',
227
+ required: ['startDate', 'proxyStatementRef', 'formOfProxyRef', 'agenda'],
257
228
  properties: {
258
- startDate: { type: "string", format: "date" },
259
- proxyStatementRef: { type: "string" },
260
- formOfProxyRef: { type: "string" },
261
- annualReportRef: { type: "string" },
262
- agenda: { type: "array" },
229
+ startDate: { type: 'string', format: 'date' },
230
+ proxyStatementRef: { type: 'string' },
231
+ formOfProxyRef: { type: 'string' },
232
+ annualReportRef: { type: 'string' },
233
+ agenda: { type: 'array' },
263
234
  },
264
235
  },
265
236
  add_agenda_item: {
266
- description: "Add an item to the meeting agenda (e.g., shareholder proposal)",
267
- required: ["itemId", "title", "type", "voteRequired"],
237
+ description: 'Add an item to the meeting agenda (e.g., shareholder proposal)',
238
+ required: ['itemId', 'title', 'type', 'voteRequired'],
268
239
  properties: {
269
- itemId: { type: "string" },
270
- title: { type: "string" },
271
- description: { type: "string" },
272
- type: { type: "string" },
273
- voteRequired: { type: "string" },
274
- eligibleClasses: { type: "array", items: { type: "string" } },
275
- allowCumulativeVoting: { type: "boolean", default: false },
240
+ itemId: { type: 'string' },
241
+ title: { type: 'string' },
242
+ description: { type: 'string' },
243
+ type: { type: 'string' },
244
+ voteRequired: { type: 'string' },
245
+ eligibleClasses: { type: 'array', items: { type: 'string' } },
246
+ allowCumulativeVoting: { type: 'boolean', default: false },
276
247
  },
277
248
  },
278
249
  open_meeting: {
279
- description: "Convene the shareholder meeting",
280
- required: [
281
- "openedAt",
282
- "chairPerson",
283
- "secretaryPresent",
284
- "initialQuorumCount",
285
- ],
250
+ description: 'Convene the shareholder meeting',
251
+ required: ['openedAt', 'chairPerson', 'secretaryPresent', 'initialQuorumCount'],
286
252
  properties: {
287
- openedAt: { type: "string", format: "date-time" },
288
- chairPerson: { type: "string" },
289
- secretaryPresent: { type: "string" },
290
- inspectorOfElections: { type: "object" },
291
- initialQuorumCount: { type: "integer" },
253
+ openedAt: { type: 'string', format: 'date-time' },
254
+ chairPerson: { type: 'string' },
255
+ secretaryPresent: { type: 'string' },
256
+ inspectorOfElections: { type: 'object' },
257
+ initialQuorumCount: { type: 'integer' },
292
258
  },
293
259
  },
294
260
  open_polls: {
295
- description: "Open polls for voting on agenda items",
296
- required: ["pollsOpenedAt"],
261
+ description: 'Open polls for voting on agenda items',
262
+ required: ['pollsOpenedAt'],
297
263
  properties: {
298
- pollsOpenedAt: { type: "string", format: "date-time" },
264
+ pollsOpenedAt: { type: 'string', format: 'date-time' },
299
265
  },
300
266
  },
301
267
  cast_vote: {
302
- description: "Record a vote from a shareholder or proxy holder",
303
- required: [
304
- "voteId",
305
- "agendaItemId",
306
- "voterId",
307
- "shareholderId",
308
- "shareClass",
309
- ],
268
+ description: 'Record a vote from a shareholder or proxy holder',
269
+ required: ['voteId', 'agendaItemId', 'voterId', 'shareholderId', 'shareClass'],
310
270
  properties: {
311
- voteId: { type: "string" },
312
- agendaItemId: { type: "string" },
313
- voterId: { type: "string" },
314
- shareholderId: { type: "string" },
315
- shareClass: { type: "string" },
316
- votesFor: { type: "integer", default: 0 },
317
- votesAgainst: { type: "integer", default: 0 },
318
- votesAbstain: { type: "integer", default: 0 },
319
- votesWithhold: { type: "integer", default: 0 },
320
- cumulativeVoteAllocation: { type: "object", nullable: true },
321
- viaProxy: { type: "boolean", default: false },
271
+ voteId: { type: 'string' },
272
+ agendaItemId: { type: 'string' },
273
+ voterId: { type: 'string' },
274
+ shareholderId: { type: 'string' },
275
+ shareClass: { type: 'string' },
276
+ votesFor: { type: 'integer', default: 0 },
277
+ votesAgainst: { type: 'integer', default: 0 },
278
+ votesAbstain: { type: 'integer', default: 0 },
279
+ votesWithhold: { type: 'integer', default: 0 },
280
+ cumulativeVoteAllocation: { type: 'object', nullable: true },
281
+ viaProxy: { type: 'boolean', default: false },
322
282
  },
323
283
  },
324
284
  close_polls: {
325
- description: "Close polls and begin vote tabulation",
326
- required: ["pollsClosedAt"],
285
+ description: 'Close polls and begin vote tabulation',
286
+ required: ['pollsClosedAt'],
327
287
  properties: {
328
- pollsClosedAt: { type: "string", format: "date-time" },
288
+ pollsClosedAt: { type: 'string', format: 'date-time' },
329
289
  },
330
290
  },
331
291
  certify_results: {
332
- description: "Inspector of elections certifies vote results",
333
- required: ["certifiedAt", "certifiedBy", "certificateRef"],
292
+ description: 'Inspector of elections certifies vote results',
293
+ required: ['certifiedAt', 'certifiedBy', 'certificateRef'],
334
294
  properties: {
335
- certifiedAt: { type: "string", format: "date-time" },
336
- certifiedBy: { type: "string" },
337
- certificateRef: { type: "string" },
295
+ certifiedAt: { type: 'string', format: 'date-time' },
296
+ certifiedBy: { type: 'string' },
297
+ certificateRef: { type: 'string' },
338
298
  results: {
339
- type: "array",
299
+ type: 'array',
340
300
  items: {
341
- type: "object",
301
+ type: 'object',
342
302
  properties: {
343
- agendaItemId: { type: "string" },
303
+ agendaItemId: { type: 'string' },
344
304
  result: {
345
- type: "string",
346
- enum: ["APPROVED", "REJECTED"],
305
+ type: 'string',
306
+ enum: ['APPROVED', 'REJECTED'],
347
307
  },
348
308
  },
349
309
  },
350
310
  },
351
- minutesRef: { type: "string" },
311
+ minutesRef: { type: 'string' },
352
312
  },
353
313
  },
354
314
  adjourn_without_action: {
355
- description: "Adjourn meeting without completing agenda (e.g., quorum lost)",
356
- required: ["adjournedAt", "reason"],
315
+ description: 'Adjourn meeting without completing agenda (e.g., quorum lost)',
316
+ required: ['adjournedAt', 'reason'],
357
317
  properties: {
358
- adjournedAt: { type: "string", format: "date-time" },
359
- reason: { type: "string" },
360
- adjournedTo: { type: "string", format: "date-time", nullable: true },
318
+ adjournedAt: { type: 'string', format: 'date-time' },
319
+ reason: { type: 'string' },
320
+ adjournedTo: { type: 'string', format: 'date-time', nullable: true },
361
321
  },
362
322
  },
363
323
  },
364
324
  definitions: {
365
325
  CalledBy: {
366
- type: "object",
326
+ type: 'object',
367
327
  properties: {
368
328
  type: {
369
- type: "string",
370
- enum: ["BOARD", "SHAREHOLDERS", "COURT"],
329
+ type: 'string',
330
+ enum: ['BOARD', 'SHAREHOLDERS', 'COURT'],
371
331
  },
372
- resolutionRef: { type: "string", nullable: true },
373
- shareholderPetitionRef: { type: "string", nullable: true },
374
- courtOrderRef: { type: "string", nullable: true },
332
+ resolutionRef: { type: 'string', nullable: true },
333
+ shareholderPetitionRef: { type: 'string', nullable: true },
334
+ courtOrderRef: { type: 'string', nullable: true },
375
335
  },
376
336
  },
377
337
  NoticeInfo: {
378
- type: "object",
338
+ type: 'object',
379
339
  properties: {
380
- noticeSentDate: { type: "string", format: "date" },
340
+ noticeSentDate: { type: 'string', format: 'date' },
381
341
  noticeMethod: {
382
- type: "string",
383
- enum: ["MAIL", "EMAIL", "ELECTRONIC_ACCESS"],
342
+ type: 'string',
343
+ enum: ['MAIL', 'EMAIL', 'ELECTRONIC_ACCESS'],
384
344
  },
385
- minimumNoticeDays: { type: "integer", default: 10 },
386
- maximumNoticeDays: { type: "integer", default: 60 },
345
+ minimumNoticeDays: { type: 'integer', default: 10 },
346
+ maximumNoticeDays: { type: 'integer', default: 60 },
387
347
  },
388
348
  },
389
349
  RecordDate: {
390
- type: "object",
350
+ type: 'object',
391
351
  nullable: true,
392
352
  properties: {
393
- date: { type: "string", format: "date" },
394
- setByBoardOn: { type: "string", format: "date" },
395
- resolutionRef: { type: "string" },
353
+ date: { type: 'string', format: 'date' },
354
+ setByBoardOn: { type: 'string', format: 'date' },
355
+ resolutionRef: { type: 'string' },
396
356
  },
397
357
  },
398
358
  EligibleVoter: {
399
- type: "object",
359
+ type: 'object',
400
360
  properties: {
401
- shareholderId: { type: "string" },
402
- name: { type: "string" },
361
+ shareholderId: { type: 'string' },
362
+ name: { type: 'string' },
403
363
  address: {
404
- type: "address",
405
- description: "State-pinned DAG wallet address of record; cast_vote requires this address ∈ proofs[].address.",
364
+ type: 'address',
365
+ description: 'State-pinned DAG wallet address of record; cast_vote requires this address ∈ proofs[].address.',
406
366
  },
407
367
  shareholdings: {
408
- type: "array",
368
+ type: 'array',
409
369
  items: {
410
- type: "object",
370
+ type: 'object',
411
371
  properties: {
412
- shareClass: { type: "string" },
413
- shares: { type: "integer" },
372
+ shareClass: { type: 'string' },
373
+ shares: { type: 'integer' },
414
374
  votes: {
415
- type: "integer",
416
- description: "Votes this holding represents",
375
+ type: 'integer',
376
+ description: 'Votes this holding represents',
417
377
  },
418
378
  },
419
379
  },
420
380
  },
421
- totalVotes: { type: "integer" },
381
+ totalVotes: { type: 'integer' },
422
382
  proxyGrantedTo: {
423
- type: "string",
383
+ type: 'string',
424
384
  nullable: true,
425
- description: "Proxy holder ID if proxied",
385
+ description: 'Proxy holder ID if proxied',
426
386
  },
427
- hasVoted: { type: "boolean", default: false },
387
+ hasVoted: { type: 'boolean', default: false },
428
388
  },
429
389
  },
430
390
  QuorumRequirements: {
431
- type: "object",
391
+ type: 'object',
432
392
  properties: {
433
393
  type: {
434
- type: "string",
435
- enum: ["SHARES_REPRESENTED", "SHARES_OUTSTANDING"],
394
+ type: 'string',
395
+ enum: ['SHARES_REPRESENTED', 'SHARES_OUTSTANDING'],
436
396
  },
437
397
  threshold: {
438
- type: "number",
398
+ type: 'number',
439
399
  default: 0.5,
440
- description: "Fraction required for quorum",
400
+ description: 'Fraction required for quorum',
441
401
  },
442
- sharesRequired: { type: "integer" },
443
- sharesRepresented: { type: "integer", default: 0 },
444
- quorumMet: { type: "boolean", default: false },
402
+ sharesRequired: { type: 'integer' },
403
+ sharesRepresented: { type: 'integer', default: 0 },
404
+ quorumMet: { type: 'boolean', default: false },
445
405
  },
446
406
  },
447
407
  AgendaItem: {
448
- type: "object",
408
+ type: 'object',
449
409
  properties: {
450
- itemId: { type: "string" },
451
- itemNumber: { type: "integer" },
452
- title: { type: "string" },
453
- description: { type: "string" },
410
+ itemId: { type: 'string' },
411
+ itemNumber: { type: 'integer' },
412
+ title: { type: 'string' },
413
+ description: { type: 'string' },
454
414
  type: {
455
- type: "string",
415
+ type: 'string',
456
416
  enum: [
457
- "DIRECTOR_ELECTION",
458
- "AUDITOR_RATIFICATION",
459
- "SAY_ON_PAY",
460
- "CHARTER_AMENDMENT",
461
- "MERGER",
462
- "STOCK_PLAN",
463
- "SHAREHOLDER_PROPOSAL",
464
- "OTHER",
417
+ 'DIRECTOR_ELECTION',
418
+ 'AUDITOR_RATIFICATION',
419
+ 'SAY_ON_PAY',
420
+ 'CHARTER_AMENDMENT',
421
+ 'MERGER',
422
+ 'STOCK_PLAN',
423
+ 'SHAREHOLDER_PROPOSAL',
424
+ 'OTHER',
465
425
  ],
466
426
  },
467
427
  voteRequired: {
468
- type: "string",
469
- enum: [
470
- "PLURALITY",
471
- "MAJORITY_CAST",
472
- "MAJORITY_OUTSTANDING",
473
- "SUPERMAJORITY",
474
- "UNANIMOUS",
475
- ],
476
- description: "Vote threshold for approval",
428
+ type: 'string',
429
+ enum: ['PLURALITY', 'MAJORITY_CAST', 'MAJORITY_OUTSTANDING', 'SUPERMAJORITY', 'UNANIMOUS'],
430
+ description: 'Vote threshold for approval',
477
431
  },
478
- supermajorityThreshold: { type: "number", nullable: true },
432
+ supermajorityThreshold: { type: 'number', nullable: true },
479
433
  eligibleClasses: {
480
- type: "array",
481
- items: { type: "string" },
482
- description: "Share classes that can vote on this item",
434
+ type: 'array',
435
+ items: { type: 'string' },
436
+ description: 'Share classes that can vote on this item',
483
437
  },
484
438
  allowCumulativeVoting: {
485
- type: "boolean",
439
+ type: 'boolean',
486
440
  default: false,
487
- description: "For director elections",
441
+ description: 'For director elections',
488
442
  },
489
443
  status: {
490
- type: "string",
491
- enum: [
492
- "PENDING",
493
- "VOTING",
494
- "CLOSED",
495
- "APPROVED",
496
- "REJECTED",
497
- ],
444
+ type: 'string',
445
+ enum: ['PENDING', 'VOTING', 'CLOSED', 'APPROVED', 'REJECTED'],
498
446
  },
499
447
  },
500
448
  },
501
449
  ProxyPeriod: {
502
- type: "object",
450
+ type: 'object',
503
451
  nullable: true,
504
452
  properties: {
505
- startDate: { type: "string", format: "date" },
453
+ startDate: { type: 'string', format: 'date' },
506
454
  endDate: {
507
- type: "string",
508
- format: "date-time",
509
- description: "Usually meeting start time",
455
+ type: 'string',
456
+ format: 'date-time',
457
+ description: 'Usually meeting start time',
510
458
  },
511
459
  proxyMaterials: {
512
- type: "object",
460
+ type: 'object',
513
461
  properties: {
514
- proxyStatementRef: { type: "string" },
515
- formOfProxyRef: { type: "string" },
516
- annualReportRef: { type: "string", nullable: true },
462
+ proxyStatementRef: { type: 'string' },
463
+ formOfProxyRef: { type: 'string' },
464
+ annualReportRef: { type: 'string', nullable: true },
517
465
  },
518
466
  },
519
467
  },
520
468
  },
521
469
  Vote: {
522
- type: "object",
470
+ type: 'object',
523
471
  properties: {
524
- voteId: { type: "string" },
525
- agendaItemId: { type: "string" },
472
+ voteId: { type: 'string' },
473
+ agendaItemId: { type: 'string' },
526
474
  voterId: {
527
- type: "string",
528
- description: "Shareholder or proxy holder ID",
475
+ type: 'string',
476
+ description: 'Shareholder or proxy holder ID',
529
477
  },
530
- shareholderId: { type: "string", description: "Beneficial owner" },
531
- shareClass: { type: "string" },
532
- votesFor: { type: "integer", default: 0 },
533
- votesAgainst: { type: "integer", default: 0 },
534
- votesAbstain: { type: "integer", default: 0 },
478
+ shareholderId: { type: 'string', description: 'Beneficial owner' },
479
+ shareClass: { type: 'string' },
480
+ votesFor: { type: 'integer', default: 0 },
481
+ votesAgainst: { type: 'integer', default: 0 },
482
+ votesAbstain: { type: 'integer', default: 0 },
535
483
  votesWithhold: {
536
- type: "integer",
484
+ type: 'integer',
537
485
  default: 0,
538
- description: "For director elections",
486
+ description: 'For director elections',
539
487
  },
540
488
  cumulativeVoteAllocation: {
541
- type: "object",
542
- additionalProperties: { type: "integer" },
489
+ type: 'object',
490
+ additionalProperties: { type: 'integer' },
543
491
  nullable: true,
544
- description: "For cumulative voting: candidate ID -> votes allocated",
492
+ description: 'For cumulative voting: candidate ID -> votes allocated',
545
493
  },
546
- viaProxy: { type: "boolean", default: false },
547
- timestamp: { type: "string", format: "date-time" },
494
+ viaProxy: { type: 'boolean', default: false },
495
+ timestamp: { type: 'string', format: 'date-time' },
548
496
  },
549
497
  },
550
498
  VoteTally: {
551
- type: "object",
499
+ type: 'object',
552
500
  properties: {
553
- agendaItemId: { type: "string" },
554
- forVotes: { type: "integer", default: 0 },
555
- againstVotes: { type: "integer", default: 0 },
556
- abstainVotes: { type: "integer", default: 0 },
557
- withholdVotes: { type: "integer", default: 0 },
558
- brokerNonVotes: { type: "integer", default: 0 },
501
+ agendaItemId: { type: 'string' },
502
+ forVotes: { type: 'integer', default: 0 },
503
+ againstVotes: { type: 'integer', default: 0 },
504
+ abstainVotes: { type: 'integer', default: 0 },
505
+ withholdVotes: { type: 'integer', default: 0 },
506
+ brokerNonVotes: { type: 'integer', default: 0 },
559
507
  candidateVotes: {
560
- type: "object",
561
- additionalProperties: { type: "integer" },
508
+ type: 'object',
509
+ additionalProperties: { type: 'integer' },
562
510
  nullable: true,
563
- description: "For director elections: candidate ID -> total votes",
511
+ description: 'For director elections: candidate ID -> total votes',
564
512
  },
565
513
  result: {
566
- type: "string",
567
- enum: ["APPROVED", "REJECTED", "PENDING"],
514
+ type: 'string',
515
+ enum: ['APPROVED', 'REJECTED', 'PENDING'],
568
516
  },
569
- certified: { type: "boolean", default: false },
517
+ certified: { type: 'boolean', default: false },
570
518
  },
571
519
  },
572
520
  Inspector: {
573
- type: "object",
521
+ type: 'object',
574
522
  nullable: true,
575
523
  properties: {
576
- name: { type: "string" },
577
- company: { type: "string", nullable: true },
578
- appointedBy: { type: "string" },
579
- appointmentDate: { type: "string", format: "date" },
524
+ name: { type: 'string' },
525
+ company: { type: 'string', nullable: true },
526
+ appointedBy: { type: 'string' },
527
+ appointmentDate: { type: 'string', format: 'date' },
580
528
  },
581
529
  },
582
530
  SessionInfo: {
583
- type: "object",
531
+ type: 'object',
584
532
  nullable: true,
585
533
  properties: {
586
- openedAt: { type: "string", format: "date-time" },
587
- chairPerson: { type: "string" },
588
- secretaryPresent: { type: "string" },
589
- pollsOpenedAt: { type: "string", format: "date-time", nullable: true },
590
- pollsClosedAt: { type: "string", format: "date-time", nullable: true },
591
- adjournedAt: { type: "string", format: "date-time", nullable: true },
592
- minutesRef: { type: "string", nullable: true },
534
+ openedAt: { type: 'string', format: 'date-time' },
535
+ chairPerson: { type: 'string' },
536
+ secretaryPresent: { type: 'string' },
537
+ pollsOpenedAt: { type: 'string', format: 'date-time', nullable: true },
538
+ pollsClosedAt: { type: 'string', format: 'date-time', nullable: true },
539
+ adjournedAt: { type: 'string', format: 'date-time', nullable: true },
540
+ minutesRef: { type: 'string', nullable: true },
593
541
  },
594
542
  },
595
543
  Certification: {
596
- type: "object",
544
+ type: 'object',
597
545
  nullable: true,
598
546
  properties: {
599
- certifiedAt: { type: "string", format: "date-time" },
600
- certifiedBy: { type: "string" },
601
- certificateRef: { type: "string" },
547
+ certifiedAt: { type: 'string', format: 'date-time' },
548
+ certifiedBy: { type: 'string' },
549
+ certificateRef: { type: 'string' },
602
550
  },
603
551
  },
604
552
  },
605
553
  states: {
606
554
  SCHEDULED: {
607
- id: "SCHEDULED",
555
+ id: 'SCHEDULED',
608
556
  isFinal: false,
609
- description: "Meeting has been scheduled but record date not yet set",
557
+ description: 'Meeting has been scheduled but record date not yet set',
610
558
  },
611
559
  RECORD_DATE_SET: {
612
- id: "RECORD_DATE_SET",
560
+ id: 'RECORD_DATE_SET',
613
561
  isFinal: false,
614
- description: "Record date established; eligible shareholders determined",
562
+ description: 'Record date established; eligible shareholders determined',
615
563
  },
616
564
  PROXY_PERIOD: {
617
- id: "PROXY_PERIOD",
565
+ id: 'PROXY_PERIOD',
618
566
  isFinal: false,
619
- description: "Proxy materials distributed; shareholders may submit proxies",
567
+ description: 'Proxy materials distributed; shareholders may submit proxies',
620
568
  },
621
569
  IN_SESSION: {
622
- id: "IN_SESSION",
570
+ id: 'IN_SESSION',
623
571
  isFinal: false,
624
- description: "Meeting is convened and in progress",
572
+ description: 'Meeting is convened and in progress',
625
573
  },
626
574
  VOTING: {
627
- id: "VOTING",
575
+ id: 'VOTING',
628
576
  isFinal: false,
629
- description: "Polls are open for voting on agenda items",
577
+ description: 'Polls are open for voting on agenda items',
630
578
  },
631
579
  CLOSED: {
632
- id: "CLOSED",
580
+ id: 'CLOSED',
633
581
  isFinal: true,
634
- description: "Meeting concluded; results certified",
582
+ description: 'Meeting concluded; results certified',
635
583
  },
636
584
  },
637
- initialState: "SCHEDULED",
585
+ initialState: 'SCHEDULED',
638
586
  transitions: [
639
587
  // Initial creation transitions (from: null means creation)
640
588
  // SCHEDULED -> SCHEDULED (propose_schedule_annual) — phase 1 (#24): bind the executing board-resolution
641
589
  // fiber and record the pending meeting, so the next transition can read the resolution's state.
642
590
  {
643
- from: "SCHEDULED",
644
- to: "SCHEDULED",
645
- eventName: "propose_schedule_annual",
646
- guard: { "==": [1, 1] },
591
+ from: 'SCHEDULED',
592
+ to: 'SCHEDULED',
593
+ eventName: 'propose_schedule_annual',
594
+ guard: { '==': [1, 1] },
647
595
  effect: {
648
596
  merge: [
649
- { var: "state" },
597
+ { var: 'state' },
650
598
  {
651
599
  pendingschedule_annual: {
652
- meetingId: { var: "event.meetingId" },
653
- entityId: { var: "event.entityId" },
654
- fiscalYear: { var: "event.fiscalYear" },
655
- scheduledDate: { var: "event.scheduledDate" },
656
- location: { var: "event.location" },
657
- ref: { var: "event.boardResolutionRef" },
658
- proposedAt: { var: "$ordinal" },
600
+ meetingId: { var: 'event.meetingId' },
601
+ entityId: { var: 'event.entityId' },
602
+ fiscalYear: { var: 'event.fiscalYear' },
603
+ scheduledDate: { var: 'event.scheduledDate' },
604
+ location: { var: 'event.location' },
605
+ ref: { var: 'event.boardResolutionRef' },
606
+ proposedAt: { var: '$ordinal' },
659
607
  },
660
608
  },
661
609
  // bind the resolution fiber so schedule_annual can assert its state next transition
662
- addDependency({ var: "event.boardResolutionRef" }),
610
+ addDependency({ var: 'event.boardResolutionRef' }),
663
611
  ],
664
612
  },
665
613
  dependencies: [],
@@ -667,42 +615,37 @@ export const corpShareholdersDef = defineFiberApp({
667
615
  // SCHEDULED -> SCHEDULED (schedule_annual) — phase 2 (#24): execute once the bound board resolution is
668
616
  // EXECUTED. depInState replaces the dropped object-form dependency (which silently never gated).
669
617
  {
670
- from: "SCHEDULED",
671
- to: "SCHEDULED",
672
- eventName: "schedule_annual",
618
+ from: 'SCHEDULED',
619
+ to: 'SCHEDULED',
620
+ eventName: 'schedule_annual',
673
621
  guard: {
674
622
  and: [
675
623
  // the proposal must target this meeting, and its bound resolution must be EXECUTED
676
624
  {
677
- "==": [
678
- { var: "state.pendingschedule_annual.meetingId" },
679
- { var: "event.meetingId" },
680
- ],
625
+ '==': [{ var: 'state.pendingschedule_annual.meetingId' }, { var: 'event.meetingId' }],
681
626
  },
682
- depInState("state.pendingschedule_annual.ref", "EXECUTED"),
627
+ depInState('state.pendingschedule_annual.ref', 'EXECUTED'),
683
628
  ],
684
629
  },
685
630
  effect: {
686
631
  merge: [
687
- { var: "state" },
632
+ { var: 'state' },
688
633
  {
689
- meetingId: { var: "event.meetingId" },
690
- entityId: { var: "event.entityId" },
691
- meetingType: "ANNUAL",
692
- fiscalYear: { var: "event.fiscalYear" },
693
- scheduledDate: { var: "event.scheduledDate" },
694
- location: { var: "event.location" },
634
+ meetingId: { var: 'event.meetingId' },
635
+ entityId: { var: 'event.entityId' },
636
+ meetingType: 'ANNUAL',
637
+ fiscalYear: { var: 'event.fiscalYear' },
638
+ scheduledDate: { var: 'event.scheduledDate' },
639
+ location: { var: 'event.location' },
695
640
  calledBy: {
696
- type: "BOARD",
697
- resolutionRef: { var: "state.pendingschedule_annual.ref" },
641
+ type: 'BOARD',
642
+ resolutionRef: { var: 'state.pendingschedule_annual.ref' },
698
643
  },
699
644
  // clear the consumed proposal
700
645
  pendingschedule_annual: null,
701
646
  },
702
647
  {
703
- _emit: [
704
- { name: "SHAREHOLDER_MEETING_SCHEDULED", data: { var: "event" }, destination: "external" },
705
- ],
648
+ _emit: [{ name: 'SHAREHOLDER_MEETING_SCHEDULED', data: { var: 'event' }, destination: 'external' }],
706
649
  },
707
650
  ],
708
651
  },
@@ -710,73 +653,69 @@ export const corpShareholdersDef = defineFiberApp({
710
653
  },
711
654
  // schedule_special -> SCHEDULED
712
655
  {
713
- from: "SCHEDULED",
714
- to: "SCHEDULED",
715
- eventName: "schedule_special",
716
- guard: { "==": [1, 1] },
656
+ from: 'SCHEDULED',
657
+ to: 'SCHEDULED',
658
+ eventName: 'schedule_special',
659
+ guard: { '==': [1, 1] },
717
660
  effect: {
718
661
  merge: [
719
- { var: "state" },
662
+ { var: 'state' },
720
663
  {
721
- meetingId: { var: "event.meetingId" },
722
- entityId: { var: "event.entityId" },
723
- meetingType: "SPECIAL",
724
- scheduledDate: { var: "event.scheduledDate" },
664
+ meetingId: { var: 'event.meetingId' },
665
+ entityId: { var: 'event.entityId' },
666
+ meetingType: 'SPECIAL',
667
+ scheduledDate: { var: 'event.scheduledDate' },
725
668
  calledBy: {
726
- type: { var: "event.calledByType" },
669
+ type: { var: 'event.calledByType' },
727
670
  },
728
671
  },
729
672
  {
730
- _emit: [
731
- { name: "SPECIAL_MEETING_SCHEDULED", data: { var: "event" }, destination: "external" },
732
- ],
673
+ _emit: [{ name: 'SPECIAL_MEETING_SCHEDULED', data: { var: 'event' }, destination: 'external' }],
733
674
  },
734
675
  ],
735
676
  },
736
677
  },
737
678
  // SCHEDULED -> RECORD_DATE_SET
738
679
  {
739
- from: "SCHEDULED",
740
- to: "RECORD_DATE_SET",
741
- eventName: "set_record_date",
742
- guard: { "==": [1, 1] }, // validRecordDateTiming simplified
680
+ from: 'SCHEDULED',
681
+ to: 'RECORD_DATE_SET',
682
+ eventName: 'set_record_date',
683
+ guard: { '==': [1, 1] }, // validRecordDateTiming simplified
743
684
  effect: {
744
685
  merge: [
745
- { var: "state" },
686
+ { var: 'state' },
746
687
  {
747
- status: "RECORD_DATE_SET",
688
+ status: 'RECORD_DATE_SET',
748
689
  recordDate: {
749
- date: { var: "event.recordDate" },
750
- setByBoardOn: { var: "$ordinal" },
751
- resolutionRef: { var: "event.resolutionRef" },
690
+ date: { var: 'event.recordDate' },
691
+ setByBoardOn: { var: '$ordinal' },
692
+ resolutionRef: { var: 'event.resolutionRef' },
752
693
  },
753
694
  },
754
695
  {
755
- _emit: [
756
- { name: "RECORD_DATE_SET", data: { var: "event" }, destination: "external" },
757
- ],
696
+ _emit: [{ name: 'RECORD_DATE_SET', data: { var: 'event' }, destination: 'external' }],
758
697
  },
759
698
  ],
760
699
  },
761
700
  },
762
701
  // RECORD_DATE_SET -> RECORD_DATE_SET (register_eligible_shareholders)
763
702
  {
764
- from: "RECORD_DATE_SET",
765
- to: "RECORD_DATE_SET",
766
- eventName: "register_eligible_shareholders",
703
+ from: 'RECORD_DATE_SET',
704
+ to: 'RECORD_DATE_SET',
705
+ eventName: 'register_eligible_shareholders',
767
706
  // authority gate — only the pinned registrar may set the roster of record; an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
768
- guard: signerIsParty("state.registrar"),
707
+ guard: signerIsParty('state.registrar'),
769
708
  effect: {
770
709
  merge: [
771
- { var: "state" },
710
+ { var: 'state' },
772
711
  {
773
- eligibleVoters: { var: "event.shareholders" },
712
+ eligibleVoters: { var: 'event.shareholders' },
774
713
  quorumRequirements: {
775
714
  merge: [
776
- { var: "state.quorumRequirements" },
715
+ { var: 'state.quorumRequirements' },
777
716
  {
778
717
  sharesRequired: {
779
- "*": [{ var: "event.totalSharesOutstanding" }, 0.5],
718
+ '*': [{ var: 'event.totalSharesOutstanding' }, 0.5],
780
719
  },
781
720
  },
782
721
  ],
@@ -787,66 +726,61 @@ export const corpShareholdersDef = defineFiberApp({
787
726
  },
788
727
  // RECORD_DATE_SET -> PROXY_PERIOD
789
728
  {
790
- from: "RECORD_DATE_SET",
791
- to: "PROXY_PERIOD",
792
- eventName: "open_proxy_period",
793
- guard: { "==": [1, 1] },
729
+ from: 'RECORD_DATE_SET',
730
+ to: 'PROXY_PERIOD',
731
+ eventName: 'open_proxy_period',
732
+ guard: { '==': [1, 1] },
794
733
  effect: {
795
734
  merge: [
796
- { var: "state" },
735
+ { var: 'state' },
797
736
  {
798
- status: "PROXY_PERIOD",
737
+ status: 'PROXY_PERIOD',
799
738
  proxyPeriod: {
800
- startDate: { var: "event.startDate" },
801
- endDate: { var: "state.scheduledDate" },
739
+ startDate: { var: 'event.startDate' },
740
+ endDate: { var: 'state.scheduledDate' },
802
741
  proxyMaterials: {
803
- proxyStatementRef: { var: "event.proxyStatementRef" },
804
- formOfProxyRef: { var: "event.formOfProxyRef" },
805
- annualReportRef: { var: "event.annualReportRef" },
742
+ proxyStatementRef: { var: 'event.proxyStatementRef' },
743
+ formOfProxyRef: { var: 'event.formOfProxyRef' },
744
+ annualReportRef: { var: 'event.annualReportRef' },
806
745
  },
807
746
  },
808
- agenda: { var: "event.agenda" },
747
+ agenda: { var: 'event.agenda' },
809
748
  noticeInfo: {
810
- merge: [
811
- { var: "state.noticeInfo" },
812
- { noticeSentDate: { var: "event.startDate" } },
813
- ],
749
+ merge: [{ var: 'state.noticeInfo' }, { noticeSentDate: { var: 'event.startDate' } }],
814
750
  },
815
751
  },
816
752
  {
817
- _emit: [
818
- { name: "PROXY_PERIOD_OPENED", data: { var: "event" }, destination: "external" },
819
- ],
753
+ _emit: [{ name: 'PROXY_PERIOD_OPENED', data: { var: 'event' }, destination: 'external' }],
820
754
  },
821
755
  ],
822
756
  },
823
757
  },
824
758
  // add_agenda_item (can be from multiple states)
825
759
  {
826
- from: "SCHEDULED",
827
- to: "SCHEDULED",
828
- eventName: "add_agenda_item",
829
- guard: { "==": [1, 1] },
760
+ from: 'SCHEDULED',
761
+ to: 'SCHEDULED',
762
+ eventName: 'add_agenda_item',
763
+ guard: { '==': [1, 1] },
830
764
  effect: {
831
765
  merge: [
832
- { var: "state" },
766
+ { var: 'state' },
833
767
  {
834
768
  agenda: {
835
769
  merge: [
836
- { var: "state.agenda" },
770
+ { var: 'state.agenda' },
837
771
  [
838
772
  {
839
- itemId: { var: "event.itemId" },
840
- itemNumber: { "+": [{ length: [{ var: "state.agenda" }] }, 1] },
841
- title: { var: "event.title" },
842
- description: { var: "event.description" },
843
- type: { var: "event.type" },
844
- voteRequired: { var: "event.voteRequired" },
845
- eligibleClasses: { var: "event.eligibleClasses" },
773
+ itemId: { var: 'event.itemId' },
774
+ itemNumber: { '+': [{ length: [{ var: 'state.agenda' }] }, 1] },
775
+ title: { var: 'event.title' },
776
+ description: { var: 'event.description' },
777
+ type: { var: 'event.type' },
778
+ voteRequired: { var: 'event.voteRequired' },
779
+ eligibleClasses: { var: 'event.eligibleClasses' },
846
780
  allowCumulativeVoting: {
847
- var: "event.allowCumulativeVoting",
781
+ var: 'event.allowCumulativeVoting',
848
782
  },
849
- status: "PENDING",
783
+ status: 'PENDING',
850
784
  },
851
785
  ],
852
786
  ],
@@ -856,30 +790,30 @@ export const corpShareholdersDef = defineFiberApp({
856
790
  },
857
791
  },
858
792
  {
859
- from: "RECORD_DATE_SET",
860
- to: "RECORD_DATE_SET",
861
- eventName: "add_agenda_item",
862
- guard: { "==": [1, 1] },
793
+ from: 'RECORD_DATE_SET',
794
+ to: 'RECORD_DATE_SET',
795
+ eventName: 'add_agenda_item',
796
+ guard: { '==': [1, 1] },
863
797
  effect: {
864
798
  merge: [
865
- { var: "state" },
799
+ { var: 'state' },
866
800
  {
867
801
  agenda: {
868
802
  merge: [
869
- { var: "state.agenda" },
803
+ { var: 'state.agenda' },
870
804
  [
871
805
  {
872
- itemId: { var: "event.itemId" },
873
- itemNumber: { "+": [{ length: [{ var: "state.agenda" }] }, 1] },
874
- title: { var: "event.title" },
875
- description: { var: "event.description" },
876
- type: { var: "event.type" },
877
- voteRequired: { var: "event.voteRequired" },
878
- eligibleClasses: { var: "event.eligibleClasses" },
806
+ itemId: { var: 'event.itemId' },
807
+ itemNumber: { '+': [{ length: [{ var: 'state.agenda' }] }, 1] },
808
+ title: { var: 'event.title' },
809
+ description: { var: 'event.description' },
810
+ type: { var: 'event.type' },
811
+ voteRequired: { var: 'event.voteRequired' },
812
+ eligibleClasses: { var: 'event.eligibleClasses' },
879
813
  allowCumulativeVoting: {
880
- var: "event.allowCumulativeVoting",
814
+ var: 'event.allowCumulativeVoting',
881
815
  },
882
- status: "PENDING",
816
+ status: 'PENDING',
883
817
  },
884
818
  ],
885
819
  ],
@@ -889,30 +823,30 @@ export const corpShareholdersDef = defineFiberApp({
889
823
  },
890
824
  },
891
825
  {
892
- from: "PROXY_PERIOD",
893
- to: "PROXY_PERIOD",
894
- eventName: "add_agenda_item",
895
- guard: { "==": [1, 1] },
826
+ from: 'PROXY_PERIOD',
827
+ to: 'PROXY_PERIOD',
828
+ eventName: 'add_agenda_item',
829
+ guard: { '==': [1, 1] },
896
830
  effect: {
897
831
  merge: [
898
- { var: "state" },
832
+ { var: 'state' },
899
833
  {
900
834
  agenda: {
901
835
  merge: [
902
- { var: "state.agenda" },
836
+ { var: 'state.agenda' },
903
837
  [
904
838
  {
905
- itemId: { var: "event.itemId" },
906
- itemNumber: { "+": [{ length: [{ var: "state.agenda" }] }, 1] },
907
- title: { var: "event.title" },
908
- description: { var: "event.description" },
909
- type: { var: "event.type" },
910
- voteRequired: { var: "event.voteRequired" },
911
- eligibleClasses: { var: "event.eligibleClasses" },
839
+ itemId: { var: 'event.itemId' },
840
+ itemNumber: { '+': [{ length: [{ var: 'state.agenda' }] }, 1] },
841
+ title: { var: 'event.title' },
842
+ description: { var: 'event.description' },
843
+ type: { var: 'event.type' },
844
+ voteRequired: { var: 'event.voteRequired' },
845
+ eligibleClasses: { var: 'event.eligibleClasses' },
912
846
  allowCumulativeVoting: {
913
- var: "event.allowCumulativeVoting",
847
+ var: 'event.allowCumulativeVoting',
914
848
  },
915
- status: "PENDING",
849
+ status: 'PENDING',
916
850
  },
917
851
  ],
918
852
  ],
@@ -923,66 +857,58 @@ export const corpShareholdersDef = defineFiberApp({
923
857
  },
924
858
  // PROXY_PERIOD -> IN_SESSION
925
859
  {
926
- from: "PROXY_PERIOD",
927
- to: "IN_SESSION",
928
- eventName: "open_meeting",
860
+ from: 'PROXY_PERIOD',
861
+ to: 'IN_SESSION',
862
+ eventName: 'open_meeting',
929
863
  guard: {
930
- ">=": [
931
- { var: "event.initialQuorumCount" },
932
- { var: "state.quorumRequirements.sharesRequired" },
933
- ],
864
+ '>=': [{ var: 'event.initialQuorumCount' }, { var: 'state.quorumRequirements.sharesRequired' }],
934
865
  },
935
866
  effect: {
936
867
  merge: [
937
- { var: "state" },
868
+ { var: 'state' },
938
869
  {
939
- status: "IN_SESSION",
870
+ status: 'IN_SESSION',
940
871
  sessionInfo: {
941
- openedAt: { var: "event.openedAt" },
942
- chairPerson: { var: "event.chairPerson" },
943
- secretaryPresent: { var: "event.secretaryPresent" },
872
+ openedAt: { var: 'event.openedAt' },
873
+ chairPerson: { var: 'event.chairPerson' },
874
+ secretaryPresent: { var: 'event.secretaryPresent' },
944
875
  },
945
- inspectorOfElections: { var: "event.inspectorOfElections" },
876
+ inspectorOfElections: { var: 'event.inspectorOfElections' },
946
877
  quorumRequirements: {
947
878
  merge: [
948
- { var: "state.quorumRequirements" },
879
+ { var: 'state.quorumRequirements' },
949
880
  {
950
- sharesRepresented: { var: "event.initialQuorumCount" },
881
+ sharesRepresented: { var: 'event.initialQuorumCount' },
951
882
  quorumMet: true,
952
883
  },
953
884
  ],
954
885
  },
955
886
  },
956
887
  {
957
- _emit: [
958
- { name: "SHAREHOLDER_MEETING_OPENED", data: { var: "event" }, destination: "external" },
959
- ],
888
+ _emit: [{ name: 'SHAREHOLDER_MEETING_OPENED', data: { var: 'event' }, destination: 'external' }],
960
889
  },
961
890
  ],
962
891
  },
963
892
  },
964
893
  // IN_SESSION -> VOTING
965
894
  {
966
- from: "IN_SESSION",
967
- to: "VOTING",
968
- eventName: "open_polls",
969
- guard: { "==": [1, 1] },
895
+ from: 'IN_SESSION',
896
+ to: 'VOTING',
897
+ eventName: 'open_polls',
898
+ guard: { '==': [1, 1] },
970
899
  effect: {
971
900
  merge: [
972
- { var: "state" },
901
+ { var: 'state' },
973
902
  {
974
- status: "VOTING",
903
+ status: 'VOTING',
975
904
  sessionInfo: {
976
- merge: [
977
- { var: "state.sessionInfo" },
978
- { pollsOpenedAt: { var: "event.pollsOpenedAt" } },
979
- ],
905
+ merge: [{ var: 'state.sessionInfo' }, { pollsOpenedAt: { var: 'event.pollsOpenedAt' } }],
980
906
  },
981
907
  agenda: {
982
908
  map: [
983
- { var: "state.agenda" },
909
+ { var: 'state.agenda' },
984
910
  {
985
- merge: [{ var: "" }, { status: "VOTING" }],
911
+ merge: [{ var: '' }, { status: 'VOTING' }],
986
912
  },
987
913
  ],
988
914
  },
@@ -992,50 +918,38 @@ export const corpShareholdersDef = defineFiberApp({
992
918
  },
993
919
  // VOTING -> VOTING (cast_vote)
994
920
  {
995
- from: "VOTING",
996
- to: "VOTING",
997
- eventName: "cast_vote",
921
+ from: 'VOTING',
922
+ to: 'VOTING',
923
+ eventName: 'cast_vote',
998
924
  // authority gate — the roster entry identified by event.shareholderId must carry an address that signed (address ∈ proofs[].address), so the recorded shareholderId is provably the matched entry's, not a forged one; an identity attestation layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
999
925
  guard: {
1000
926
  and: [
1001
927
  {
1002
928
  some: [
1003
- { var: "state.eligibleVoters" },
929
+ { var: 'state.eligibleVoters' },
1004
930
  {
1005
931
  and: [
1006
932
  {
1007
- "==": [
1008
- { var: "shareholderId" },
1009
- { var: "event.shareholderId" },
1010
- ],
933
+ '==': [{ var: 'shareholderId' }, { var: 'event.shareholderId' }],
1011
934
  },
1012
935
  {
1013
- in: [
1014
- { var: "address" },
1015
- { map: [{ var: "proofs" }, { var: "address" }] },
1016
- ],
936
+ in: [{ var: 'address' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
1017
937
  },
1018
938
  ],
1019
939
  },
1020
940
  ],
1021
941
  },
1022
942
  {
1023
- "!": {
943
+ '!': {
1024
944
  some: [
1025
- { var: "state.votes" },
945
+ { var: 'state.votes' },
1026
946
  {
1027
947
  and: [
1028
948
  {
1029
- "==": [
1030
- { var: "shareholderId" },
1031
- { var: "event.shareholderId" },
1032
- ],
949
+ '==': [{ var: 'shareholderId' }, { var: 'event.shareholderId' }],
1033
950
  },
1034
951
  {
1035
- "==": [
1036
- { var: "agendaItemId" },
1037
- { var: "event.agendaItemId" },
1038
- ],
952
+ '==': [{ var: 'agendaItemId' }, { var: 'event.agendaItemId' }],
1039
953
  },
1040
954
  ],
1041
955
  },
@@ -1046,46 +960,43 @@ export const corpShareholdersDef = defineFiberApp({
1046
960
  },
1047
961
  effect: {
1048
962
  merge: [
1049
- { var: "state" },
963
+ { var: 'state' },
1050
964
  {
1051
965
  votes: {
1052
966
  merge: [
1053
- { var: "state.votes" },
967
+ { var: 'state.votes' },
1054
968
  [
1055
969
  {
1056
- voteId: { var: "event.voteId" },
1057
- agendaItemId: { var: "event.agendaItemId" },
1058
- voterId: { var: "event.voterId" },
1059
- shareholderId: { var: "event.shareholderId" },
1060
- shareClass: { var: "event.shareClass" },
1061
- votesFor: { var: "event.votesFor" },
1062
- votesAgainst: { var: "event.votesAgainst" },
1063
- votesAbstain: { var: "event.votesAbstain" },
1064
- votesWithhold: { var: "event.votesWithhold" },
970
+ voteId: { var: 'event.voteId' },
971
+ agendaItemId: { var: 'event.agendaItemId' },
972
+ voterId: { var: 'event.voterId' },
973
+ shareholderId: { var: 'event.shareholderId' },
974
+ shareClass: { var: 'event.shareClass' },
975
+ votesFor: { var: 'event.votesFor' },
976
+ votesAgainst: { var: 'event.votesAgainst' },
977
+ votesAbstain: { var: 'event.votesAbstain' },
978
+ votesWithhold: { var: 'event.votesWithhold' },
1065
979
  cumulativeVoteAllocation: {
1066
- var: "event.cumulativeVoteAllocation",
980
+ var: 'event.cumulativeVoteAllocation',
1067
981
  },
1068
- viaProxy: { var: "event.viaProxy" },
1069
- timestamp: { var: "$ordinal" },
982
+ viaProxy: { var: 'event.viaProxy' },
983
+ timestamp: { var: '$ordinal' },
1070
984
  },
1071
985
  ],
1072
986
  ],
1073
987
  },
1074
988
  eligibleVoters: {
1075
989
  map: [
1076
- { var: "state.eligibleVoters" },
990
+ { var: 'state.eligibleVoters' },
1077
991
  {
1078
992
  if: [
1079
993
  {
1080
- "==": [
1081
- { var: "shareholderId" },
1082
- { var: "event.shareholderId" },
1083
- ],
994
+ '==': [{ var: 'shareholderId' }, { var: 'event.shareholderId' }],
1084
995
  },
1085
996
  {
1086
- merge: [{ var: "" }, { hasVoted: true }],
997
+ merge: [{ var: '' }, { hasVoted: true }],
1087
998
  },
1088
- { var: "" },
999
+ { var: '' },
1089
1000
  ],
1090
1001
  },
1091
1002
  ],
@@ -1096,26 +1007,23 @@ export const corpShareholdersDef = defineFiberApp({
1096
1007
  },
1097
1008
  // VOTING -> IN_SESSION (close_polls)
1098
1009
  {
1099
- from: "VOTING",
1100
- to: "IN_SESSION",
1101
- eventName: "close_polls",
1102
- guard: { "==": [1, 1] },
1010
+ from: 'VOTING',
1011
+ to: 'IN_SESSION',
1012
+ eventName: 'close_polls',
1013
+ guard: { '==': [1, 1] },
1103
1014
  effect: {
1104
1015
  merge: [
1105
- { var: "state" },
1016
+ { var: 'state' },
1106
1017
  {
1107
- status: "IN_SESSION",
1018
+ status: 'IN_SESSION',
1108
1019
  sessionInfo: {
1109
- merge: [
1110
- { var: "state.sessionInfo" },
1111
- { pollsClosedAt: { var: "event.pollsClosedAt" } },
1112
- ],
1020
+ merge: [{ var: 'state.sessionInfo' }, { pollsClosedAt: { var: 'event.pollsClosedAt' } }],
1113
1021
  },
1114
1022
  agenda: {
1115
1023
  map: [
1116
- { var: "state.agenda" },
1024
+ { var: 'state.agenda' },
1117
1025
  {
1118
- merge: [{ var: "" }, { status: "CLOSED" }],
1026
+ merge: [{ var: '' }, { status: 'CLOSED' }],
1119
1027
  },
1120
1028
  ],
1121
1029
  },
@@ -1125,86 +1033,74 @@ export const corpShareholdersDef = defineFiberApp({
1125
1033
  },
1126
1034
  // IN_SESSION -> CLOSED (certify_results)
1127
1035
  {
1128
- from: "IN_SESSION",
1129
- to: "CLOSED",
1130
- eventName: "certify_results",
1131
- guard: { "==": [1, 1] },
1036
+ from: 'IN_SESSION',
1037
+ to: 'CLOSED',
1038
+ eventName: 'certify_results',
1039
+ guard: { '==': [1, 1] },
1132
1040
  effect: {
1133
1041
  merge: [
1134
- { var: "state" },
1042
+ { var: 'state' },
1135
1043
  {
1136
- status: "CLOSED",
1044
+ status: 'CLOSED',
1137
1045
  certification: {
1138
- certifiedAt: { var: "event.certifiedAt" },
1139
- certifiedBy: { var: "event.certifiedBy" },
1140
- certificateRef: { var: "event.certificateRef" },
1046
+ certifiedAt: { var: 'event.certifiedAt' },
1047
+ certifiedBy: { var: 'event.certifiedBy' },
1048
+ certificateRef: { var: 'event.certificateRef' },
1141
1049
  },
1142
1050
  sessionInfo: {
1143
1051
  merge: [
1144
- { var: "state.sessionInfo" },
1052
+ { var: 'state.sessionInfo' },
1145
1053
  {
1146
- adjournedAt: { var: "event.certifiedAt" },
1147
- minutesRef: { var: "event.minutesRef" },
1054
+ adjournedAt: { var: 'event.certifiedAt' },
1055
+ minutesRef: { var: 'event.minutesRef' },
1148
1056
  },
1149
1057
  ],
1150
1058
  },
1151
1059
  },
1152
1060
  {
1153
- _emit: [
1154
- { name: "MEETING_RESULTS_CERTIFIED", data: { var: "event" }, destination: "external" },
1155
- ],
1061
+ _emit: [{ name: 'MEETING_RESULTS_CERTIFIED', data: { var: 'event' }, destination: 'external' }],
1156
1062
  },
1157
1063
  ],
1158
1064
  },
1159
1065
  },
1160
1066
  // IN_SESSION -> CLOSED (adjourn_without_action)
1161
1067
  {
1162
- from: "IN_SESSION",
1163
- to: "CLOSED",
1164
- eventName: "adjourn_without_action",
1165
- guard: { "==": [1, 1] },
1068
+ from: 'IN_SESSION',
1069
+ to: 'CLOSED',
1070
+ eventName: 'adjourn_without_action',
1071
+ guard: { '==': [1, 1] },
1166
1072
  effect: {
1167
1073
  merge: [
1168
- { var: "state" },
1074
+ { var: 'state' },
1169
1075
  {
1170
- status: "CLOSED",
1076
+ status: 'CLOSED',
1171
1077
  sessionInfo: {
1172
- merge: [
1173
- { var: "state.sessionInfo" },
1174
- { adjournedAt: { var: "event.adjournedAt" } },
1175
- ],
1078
+ merge: [{ var: 'state.sessionInfo' }, { adjournedAt: { var: 'event.adjournedAt' } }],
1176
1079
  },
1177
1080
  },
1178
1081
  {
1179
- _emit: [
1180
- { name: "MEETING_ADJOURNED", data: { var: "event" }, destination: "external" },
1181
- ],
1082
+ _emit: [{ name: 'MEETING_ADJOURNED', data: { var: 'event' }, destination: 'external' }],
1182
1083
  },
1183
1084
  ],
1184
1085
  },
1185
1086
  },
1186
1087
  // VOTING -> CLOSED (adjourn_without_action)
1187
1088
  {
1188
- from: "VOTING",
1189
- to: "CLOSED",
1190
- eventName: "adjourn_without_action",
1191
- guard: { "==": [1, 1] },
1089
+ from: 'VOTING',
1090
+ to: 'CLOSED',
1091
+ eventName: 'adjourn_without_action',
1092
+ guard: { '==': [1, 1] },
1192
1093
  effect: {
1193
1094
  merge: [
1194
- { var: "state" },
1095
+ { var: 'state' },
1195
1096
  {
1196
- status: "CLOSED",
1097
+ status: 'CLOSED',
1197
1098
  sessionInfo: {
1198
- merge: [
1199
- { var: "state.sessionInfo" },
1200
- { adjournedAt: { var: "event.adjournedAt" } },
1201
- ],
1099
+ merge: [{ var: 'state.sessionInfo' }, { adjournedAt: { var: 'event.adjournedAt' } }],
1202
1100
  },
1203
1101
  },
1204
1102
  {
1205
- _emit: [
1206
- { name: "MEETING_ADJOURNED", data: { var: "event" }, destination: "external" },
1207
- ],
1103
+ _emit: [{ name: 'MEETING_ADJOURNED', data: { var: 'event' }, destination: 'external' }],
1208
1104
  },
1209
1105
  ],
1210
1106
  },