@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
@@ -10,449 +10,433 @@ const effects_js_1 = require("../../../schema/effects.js");
10
10
  */
11
11
  exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
12
12
  metadata: {
13
- name: "CorpBoard",
14
- app: "corporate",
15
- type: "board",
16
- version: "1.0.0",
17
- description: "Board of directors state machine managing director seats, meetings, quorum, and formal board actions. Supports staggered boards with classified directors.",
13
+ name: 'CorpBoard',
14
+ app: 'corporate',
15
+ type: 'board',
16
+ version: '1.0.0',
17
+ description: 'Board of directors state machine managing director seats, meetings, quorum, and formal board actions. Supports staggered boards with classified directors.',
18
18
  crossReferences: {
19
19
  entity: {
20
- machine: "corporate-entity",
21
- description: "Parent corporate entity",
22
- foreignKey: "entityId",
20
+ machine: 'corporate-entity',
21
+ description: 'Parent corporate entity',
22
+ foreignKey: 'entityId',
23
23
  },
24
24
  resolutions: {
25
- machine: "corporate-resolution",
26
- description: "Board resolutions",
27
- foreignKey: "boardId",
25
+ machine: 'corporate-resolution',
26
+ description: 'Board resolutions',
27
+ foreignKey: 'boardId',
28
28
  },
29
29
  committees: {
30
- machine: "corporate-committee",
31
- description: "Board committees",
32
- foreignKey: "boardId",
30
+ machine: 'corporate-committee',
31
+ description: 'Board committees',
32
+ foreignKey: 'boardId',
33
33
  },
34
34
  officers: {
35
- machine: "corporate-officers",
36
- description: "Officers appointed by board",
37
- foreignKey: "entityId",
35
+ machine: 'corporate-officers',
36
+ description: 'Officers appointed by board',
37
+ foreignKey: 'entityId',
38
38
  },
39
39
  },
40
40
  },
41
41
  createSchema: {
42
- required: ["boardId", "entityId", "seats", "authorizedRemovers"],
42
+ required: ['boardId', 'entityId', 'seats', 'authorizedRemovers'],
43
43
  properties: {
44
44
  boardId: {
45
- type: "string",
46
- description: "Unique identifier for this board instance",
45
+ type: 'string',
46
+ description: 'Unique identifier for this board instance',
47
47
  immutable: true,
48
48
  },
49
49
  entityId: {
50
- type: "string",
51
- description: "Reference to parent corporate-entity",
50
+ type: 'string',
51
+ description: 'Reference to parent corporate-entity',
52
52
  immutable: true,
53
53
  },
54
54
  authorizedRemovers: {
55
- type: "array",
56
- description: "State-pinned set of DAG addresses authorized to remove a director for cause (board/shareholder authority). A verified signer must be a member; checked against proofs[].address.",
55
+ type: 'array',
56
+ description: 'State-pinned set of DAG addresses authorized to remove a director for cause (board/shareholder authority). A verified signer must be a member; checked against proofs[].address.',
57
57
  immutable: false,
58
- items: { type: "address" },
58
+ items: { type: 'address' },
59
59
  },
60
60
  seats: {
61
- type: "object",
61
+ type: 'object',
62
62
  properties: {
63
63
  authorized: {
64
- type: "integer",
65
- description: "Number of board seats authorized by bylaws",
64
+ type: 'integer',
65
+ description: 'Number of board seats authorized by bylaws',
66
66
  },
67
- filled: { type: "integer" },
68
- vacant: { type: "integer" },
67
+ filled: { type: 'integer' },
68
+ vacant: { type: 'integer' },
69
69
  },
70
70
  },
71
71
  boardStructure: {
72
- type: "object",
72
+ type: 'object',
73
73
  properties: {
74
74
  isClassified: {
75
- type: "boolean",
76
- description: "Whether board has staggered terms",
75
+ type: 'boolean',
76
+ description: 'Whether board has staggered terms',
77
77
  },
78
78
  termYears: {
79
- type: "integer",
79
+ type: 'integer',
80
80
  default: 1,
81
- description: "Director term length",
81
+ description: 'Director term length',
82
82
  },
83
83
  classTerms: {
84
- type: "object",
84
+ type: 'object',
85
85
  properties: {
86
- CLASS_I: { type: "integer" },
87
- CLASS_II: { type: "integer" },
88
- CLASS_III: { type: "integer" },
86
+ CLASS_I: { type: 'integer' },
87
+ CLASS_II: { type: 'integer' },
88
+ CLASS_III: { type: 'integer' },
89
89
  },
90
90
  },
91
91
  },
92
92
  },
93
93
  quorumRules: {
94
- type: "object",
94
+ type: 'object',
95
95
  properties: {
96
96
  type: {
97
- type: "string",
98
- enum: ["MAJORITY", "SUPERMAJORITY", "FIXED_NUMBER"],
99
- default: "MAJORITY",
97
+ type: 'string',
98
+ enum: ['MAJORITY', 'SUPERMAJORITY', 'FIXED_NUMBER'],
99
+ default: 'MAJORITY',
100
100
  },
101
101
  threshold: {
102
- type: "number",
103
- description: "Fraction for majority/super, or count for fixed",
102
+ type: 'number',
103
+ description: 'Fraction for majority/super, or count for fixed',
104
104
  },
105
105
  minimumRequired: {
106
- type: "integer",
107
- description: "Absolute minimum regardless of formula",
106
+ type: 'integer',
107
+ description: 'Absolute minimum regardless of formula',
108
108
  },
109
109
  },
110
110
  },
111
111
  votingRules: {
112
- type: "object",
112
+ type: 'object',
113
113
  properties: {
114
114
  standardApproval: {
115
- type: "string",
116
- enum: ["MAJORITY_PRESENT", "MAJORITY_FULL_BOARD"],
117
- default: "MAJORITY_PRESENT",
115
+ type: 'string',
116
+ enum: ['MAJORITY_PRESENT', 'MAJORITY_FULL_BOARD'],
117
+ default: 'MAJORITY_PRESENT',
118
118
  },
119
119
  supermajorityMatters: {
120
- type: "array",
121
- items: { type: "string" },
122
- description: "Action types requiring supermajority",
120
+ type: 'array',
121
+ items: { type: 'string' },
122
+ description: 'Action types requiring supermajority',
123
123
  },
124
- supermajorityThreshold: { type: "number", default: 0.6667 },
124
+ supermajorityThreshold: { type: 'number', default: 0.6667 },
125
125
  },
126
126
  },
127
127
  },
128
128
  },
129
129
  stateSchema: {
130
130
  properties: {
131
- boardId: { type: "string", immutable: true },
132
- entityId: { type: "string", immutable: true },
133
- authorizedRemovers: { type: "array", items: { type: "address" } },
131
+ boardId: { type: 'string', immutable: true },
132
+ entityId: { type: 'string', immutable: true },
133
+ authorizedRemovers: { type: 'array', items: { type: 'address' } },
134
134
  directors: {
135
- type: "array",
136
- items: { $ref: "#/definitions/Director" },
135
+ type: 'array',
136
+ items: { $ref: '#/definitions/Director' },
137
137
  computed: true,
138
138
  },
139
- seats: { type: "object" },
140
- boardStructure: { type: "object" },
141
- quorumRules: { type: "object" },
142
- votingRules: { type: "object" },
139
+ seats: { type: 'object' },
140
+ boardStructure: { type: 'object' },
141
+ quorumRules: { type: 'object' },
142
+ votingRules: { type: 'object' },
143
143
  currentMeeting: {
144
- $ref: "#/definitions/Meeting",
144
+ $ref: '#/definitions/Meeting',
145
145
  nullable: true,
146
146
  computed: true,
147
147
  },
148
148
  meetingHistory: {
149
- type: "array",
150
- items: { $ref: "#/definitions/MeetingRecord" },
149
+ type: 'array',
150
+ items: { $ref: '#/definitions/MeetingRecord' },
151
151
  computed: true,
152
152
  },
153
153
  status: {
154
- type: "string",
155
- enum: ["ACTIVE", "IN_MEETING", "QUORUM_LOST"],
154
+ type: 'string',
155
+ enum: ['ACTIVE', 'IN_MEETING', 'QUORUM_LOST'],
156
156
  computed: true,
157
157
  },
158
- createdAt: { type: "timestamp", computed: true },
159
- updatedAt: { type: "timestamp", computed: true },
158
+ createdAt: { type: 'timestamp', computed: true },
159
+ updatedAt: { type: 'timestamp', computed: true },
160
160
  // Two-phase removal (#24): propose_removal binds the resolution fiber + records the pending
161
161
  // removal here; remove_for_cause asserts the bound resolution is EXECUTED, then clears this.
162
- pendingRemoval: { type: "object", nullable: true, computed: true },
162
+ pendingRemoval: { type: 'object', nullable: true, computed: true },
163
163
  },
164
164
  },
165
165
  eventSchemas: {
166
166
  elect_director: {
167
- description: "Add a new director to the board (election typically done at shareholder meeting or by board to fill vacancy)",
168
- required: [
169
- "directorId",
170
- "name",
171
- "termStart",
172
- "termEnd",
173
- "isIndependent",
174
- "electionResolutionRef",
175
- ],
167
+ description: 'Add a new director to the board (election typically done at shareholder meeting or by board to fill vacancy)',
168
+ required: ['directorId', 'name', 'termStart', 'termEnd', 'isIndependent', 'electionResolutionRef'],
176
169
  properties: {
177
- directorId: { type: "string" },
178
- name: { type: "string" },
179
- email: { type: "string" },
180
- termStart: { type: "string", format: "date" },
181
- termEnd: { type: "string", format: "date" },
170
+ directorId: { type: 'string' },
171
+ name: { type: 'string' },
172
+ email: { type: 'string' },
173
+ termStart: { type: 'string', format: 'date' },
174
+ termEnd: { type: 'string', format: 'date' },
182
175
  class: {
183
- type: "string",
184
- enum: ["CLASS_I", "CLASS_II", "CLASS_III", "UNCLASSIFIED"],
176
+ type: 'string',
177
+ enum: ['CLASS_I', 'CLASS_II', 'CLASS_III', 'UNCLASSIFIED'],
185
178
  },
186
- isIndependent: { type: "boolean" },
179
+ isIndependent: { type: 'boolean' },
187
180
  electionResolutionRef: {
188
- type: "string",
189
- description: "Shareholder or board resolution",
181
+ type: 'string',
182
+ description: 'Shareholder or board resolution',
190
183
  },
191
- isFillingVacancy: { type: "boolean", default: false },
184
+ isFillingVacancy: { type: 'boolean', default: false },
192
185
  },
193
186
  },
194
187
  resign_director: {
195
- description: "Director resigns from the board",
196
- required: ["directorId", "effectiveDate"],
188
+ description: 'Director resigns from the board',
189
+ required: ['directorId', 'effectiveDate'],
197
190
  properties: {
198
- directorId: { type: "string" },
199
- effectiveDate: { type: "string", format: "date" },
200
- reason: { type: "string" },
191
+ directorId: { type: 'string' },
192
+ effectiveDate: { type: 'string', format: 'date' },
193
+ reason: { type: 'string' },
201
194
  resignationLetter: {
202
- type: "string",
203
- description: "Document reference",
195
+ type: 'string',
196
+ description: 'Document reference',
204
197
  },
205
198
  },
206
199
  },
207
200
  propose_removal: {
208
- description: "Phase 1 of for-cause removal: bind the executing resolution fiber (#24 _addDependency) and record the pending removal",
209
- required: ["directorId", "cause", "removalResolutionRef"],
201
+ description: 'Phase 1 of for-cause removal: bind the executing resolution fiber (#24 _addDependency) and record the pending removal',
202
+ required: ['directorId', 'cause', 'removalResolutionRef'],
210
203
  properties: {
211
- directorId: { type: "string" },
212
- cause: { type: "string" },
213
- removalResolutionRef: { type: "string" },
204
+ directorId: { type: 'string' },
205
+ cause: { type: 'string' },
206
+ removalResolutionRef: { type: 'string' },
214
207
  },
215
208
  },
216
209
  remove_for_cause: {
217
- description: "Phase 2 of for-cause removal: execute once the bound removal resolution is EXECUTED",
218
- required: ["directorId", "effectiveDate"],
210
+ description: 'Phase 2 of for-cause removal: execute once the bound removal resolution is EXECUTED',
211
+ required: ['directorId', 'effectiveDate'],
219
212
  properties: {
220
- directorId: { type: "string" },
221
- effectiveDate: { type: "string", format: "date" },
213
+ directorId: { type: 'string' },
214
+ effectiveDate: { type: 'string', format: 'date' },
222
215
  },
223
216
  },
224
217
  designate_chair: {
225
- description: "Designate a director as board chair",
226
- required: ["directorId", "resolutionRef"],
218
+ description: 'Designate a director as board chair',
219
+ required: ['directorId', 'resolutionRef'],
227
220
  properties: {
228
- directorId: { type: "string" },
229
- resolutionRef: { type: "string" },
221
+ directorId: { type: 'string' },
222
+ resolutionRef: { type: 'string' },
230
223
  },
231
224
  },
232
225
  call_meeting: {
233
- description: "Schedule a board meeting (can be called by chair, CEO, or directors per bylaws)",
234
- required: [
235
- "meetingId",
236
- "type",
237
- "scheduledDate",
238
- "calledBy",
239
- "noticeDate",
240
- ],
226
+ description: 'Schedule a board meeting (can be called by chair, CEO, or directors per bylaws)',
227
+ required: ['meetingId', 'type', 'scheduledDate', 'calledBy', 'noticeDate'],
241
228
  properties: {
242
- meetingId: { type: "string" },
229
+ meetingId: { type: 'string' },
243
230
  type: {
244
- type: "string",
245
- enum: ["REGULAR", "SPECIAL", "ANNUAL", "ORGANIZATIONAL"],
231
+ type: 'string',
232
+ enum: ['REGULAR', 'SPECIAL', 'ANNUAL', 'ORGANIZATIONAL'],
246
233
  },
247
- scheduledDate: { type: "string", format: "date-time" },
248
- location: { type: "string" },
249
- isVirtual: { type: "boolean", default: false },
234
+ scheduledDate: { type: 'string', format: 'date-time' },
235
+ location: { type: 'string' },
236
+ isVirtual: { type: 'boolean', default: false },
250
237
  calledBy: {
251
- type: "string",
252
- description: "Director ID or officer title",
238
+ type: 'string',
239
+ description: 'Director ID or officer title',
253
240
  },
254
- noticeDate: { type: "string", format: "date" },
255
- agenda: { type: "array", items: { type: "string" } },
241
+ noticeDate: { type: 'string', format: 'date' },
242
+ agenda: { type: 'array', items: { type: 'string' } },
256
243
  waiverOfNotice: {
257
- type: "boolean",
244
+ type: 'boolean',
258
245
  default: false,
259
- description: "If all directors waive notice",
246
+ description: 'If all directors waive notice',
260
247
  },
261
248
  },
262
249
  },
263
250
  record_attendance: {
264
251
  description: "Record a director's attendance before meeting opens",
265
- required: ["directorId", "present"],
252
+ required: ['directorId', 'present'],
266
253
  properties: {
267
- directorId: { type: "string" },
268
- present: { type: "boolean" },
269
- arrivedAt: { type: "string", format: "date-time" },
254
+ directorId: { type: 'string' },
255
+ present: { type: 'boolean' },
256
+ arrivedAt: { type: 'string', format: 'date-time' },
270
257
  },
271
258
  },
272
259
  open_meeting: {
273
- description: "Officially open the board meeting once quorum is established",
274
- required: ["openedAt"],
260
+ description: 'Officially open the board meeting once quorum is established',
261
+ required: ['openedAt'],
275
262
  properties: {
276
- openedAt: { type: "string", format: "date-time" },
263
+ openedAt: { type: 'string', format: 'date-time' },
277
264
  chairPresiding: {
278
- type: "string",
279
- description: "Director ID presiding",
265
+ type: 'string',
266
+ description: 'Director ID presiding',
280
267
  },
281
268
  },
282
269
  },
283
270
  director_departs: {
284
- description: "Record a director leaving the meeting (may affect quorum)",
285
- required: ["directorId", "departedAt"],
271
+ description: 'Record a director leaving the meeting (may affect quorum)',
272
+ required: ['directorId', 'departedAt'],
286
273
  properties: {
287
- directorId: { type: "string" },
288
- departedAt: { type: "string", format: "date-time" },
274
+ directorId: { type: 'string' },
275
+ departedAt: { type: 'string', format: 'date-time' },
289
276
  },
290
277
  },
291
278
  quorum_lost: {
292
- description: "Automatic transition when quorum is lost during meeting",
293
- required: ["lostAt"],
279
+ description: 'Automatic transition when quorum is lost during meeting',
280
+ required: ['lostAt'],
294
281
  properties: {
295
- lostAt: { type: "string", format: "date-time" },
282
+ lostAt: { type: 'string', format: 'date-time' },
296
283
  },
297
284
  },
298
285
  quorum_restored: {
299
- description: "Quorum restored after additional director(s) join",
300
- required: ["restoredAt", "directorId"],
286
+ description: 'Quorum restored after additional director(s) join',
287
+ required: ['restoredAt', 'directorId'],
301
288
  properties: {
302
- restoredAt: { type: "string", format: "date-time" },
303
- directorId: { type: "string", description: "Joining director" },
289
+ restoredAt: { type: 'string', format: 'date-time' },
290
+ directorId: { type: 'string', description: 'Joining director' },
304
291
  },
305
292
  },
306
293
  adjourn: {
307
- description: "Adjourn the board meeting",
308
- required: ["closedAt"],
294
+ description: 'Adjourn the board meeting',
295
+ required: ['closedAt'],
309
296
  properties: {
310
- closedAt: { type: "string", format: "date-time" },
297
+ closedAt: { type: 'string', format: 'date-time' },
311
298
  minutesRef: {
312
- type: "string",
313
- description: "Reference to meeting minutes document",
299
+ type: 'string',
300
+ description: 'Reference to meeting minutes document',
314
301
  },
315
- resolutionsPassed: { type: "array", items: { type: "string" } },
302
+ resolutionsPassed: { type: 'array', items: { type: 'string' } },
316
303
  adjournedTo: {
317
- type: "string",
318
- format: "date-time",
304
+ type: 'string',
305
+ format: 'date-time',
319
306
  nullable: true,
320
- description: "If adjourning to later date",
307
+ description: 'If adjourning to later date',
321
308
  },
322
309
  },
323
310
  },
324
311
  update_seats: {
325
- description: "Change the number of authorized board seats (requires bylaw amendment)",
326
- required: ["newAuthorizedSeats", "bylawAmendmentRef"],
312
+ description: 'Change the number of authorized board seats (requires bylaw amendment)',
313
+ required: ['newAuthorizedSeats', 'bylawAmendmentRef'],
327
314
  properties: {
328
- newAuthorizedSeats: { type: "integer" },
329
- bylawAmendmentRef: { type: "string" },
315
+ newAuthorizedSeats: { type: 'integer' },
316
+ bylawAmendmentRef: { type: 'string' },
330
317
  },
331
318
  },
332
319
  },
333
320
  definitions: {
334
321
  Director: {
335
- type: "object",
322
+ type: 'object',
336
323
  properties: {
337
- directorId: { type: "string" },
338
- name: { type: "string" },
339
- email: { type: "string" },
340
- termStart: { type: "string", format: "date" },
341
- termEnd: { type: "string", format: "date" },
324
+ directorId: { type: 'string' },
325
+ name: { type: 'string' },
326
+ email: { type: 'string' },
327
+ termStart: { type: 'string', format: 'date' },
328
+ termEnd: { type: 'string', format: 'date' },
342
329
  class: {
343
- type: "string",
344
- enum: ["CLASS_I", "CLASS_II", "CLASS_III", "UNCLASSIFIED"],
330
+ type: 'string',
331
+ enum: ['CLASS_I', 'CLASS_II', 'CLASS_III', 'UNCLASSIFIED'],
345
332
  },
346
333
  status: {
347
- type: "string",
348
- enum: ["ACTIVE", "RESIGNED", "REMOVED", "TERM_EXPIRED"],
334
+ type: 'string',
335
+ enum: ['ACTIVE', 'RESIGNED', 'REMOVED', 'TERM_EXPIRED'],
349
336
  },
350
337
  isIndependent: {
351
- type: "boolean",
352
- description: "Independence under applicable rules",
338
+ type: 'boolean',
339
+ description: 'Independence under applicable rules',
353
340
  },
354
- isChair: { type: "boolean", default: false },
355
- isLeadIndependent: { type: "boolean", default: false },
341
+ isChair: { type: 'boolean', default: false },
342
+ isLeadIndependent: { type: 'boolean', default: false },
356
343
  committees: {
357
- type: "array",
358
- items: { type: "string" },
359
- description: "Committee memberships by committee ID",
344
+ type: 'array',
345
+ items: { type: 'string' },
346
+ description: 'Committee memberships by committee ID',
360
347
  },
361
348
  electedBy: {
362
- type: "string",
363
- description: "Resolution reference for election",
349
+ type: 'string',
350
+ description: 'Resolution reference for election',
364
351
  },
365
- compensationAgreementRef: { type: "string", nullable: true },
352
+ compensationAgreementRef: { type: 'string', nullable: true },
366
353
  },
367
354
  },
368
355
  Meeting: {
369
- type: "object",
356
+ type: 'object',
370
357
  nullable: true,
371
358
  properties: {
372
- meetingId: { type: "string" },
359
+ meetingId: { type: 'string' },
373
360
  type: {
374
- type: "string",
375
- enum: ["REGULAR", "SPECIAL", "ANNUAL", "ORGANIZATIONAL"],
361
+ type: 'string',
362
+ enum: ['REGULAR', 'SPECIAL', 'ANNUAL', 'ORGANIZATIONAL'],
376
363
  },
377
- scheduledDate: { type: "string", format: "date-time" },
378
- location: { type: "string" },
379
- isVirtual: { type: "boolean" },
380
- calledBy: { type: "string" },
381
- noticeDate: { type: "string", format: "date" },
382
- agenda: { type: "array", items: { type: "string" } },
383
- attendees: { type: "array", items: { $ref: "#/definitions/Attendee" } },
384
- quorumPresent: { type: "boolean" },
385
- quorumCount: { type: "integer" },
386
- openedAt: { type: "string", format: "date-time", nullable: true },
387
- closedAt: { type: "string", format: "date-time", nullable: true },
388
- minutesRef: { type: "string", nullable: true },
364
+ scheduledDate: { type: 'string', format: 'date-time' },
365
+ location: { type: 'string' },
366
+ isVirtual: { type: 'boolean' },
367
+ calledBy: { type: 'string' },
368
+ noticeDate: { type: 'string', format: 'date' },
369
+ agenda: { type: 'array', items: { type: 'string' } },
370
+ attendees: { type: 'array', items: { $ref: '#/definitions/Attendee' } },
371
+ quorumPresent: { type: 'boolean' },
372
+ quorumCount: { type: 'integer' },
373
+ openedAt: { type: 'string', format: 'date-time', nullable: true },
374
+ closedAt: { type: 'string', format: 'date-time', nullable: true },
375
+ minutesRef: { type: 'string', nullable: true },
389
376
  },
390
377
  },
391
378
  Attendee: {
392
- type: "object",
379
+ type: 'object',
393
380
  properties: {
394
- directorId: { type: "string" },
395
- present: { type: "boolean" },
396
- arrivedAt: { type: "string", format: "date-time", nullable: true },
397
- departedAt: { type: "string", format: "date-time", nullable: true },
398
- viaProxy: { type: "boolean", default: false },
381
+ directorId: { type: 'string' },
382
+ present: { type: 'boolean' },
383
+ arrivedAt: { type: 'string', format: 'date-time', nullable: true },
384
+ departedAt: { type: 'string', format: 'date-time', nullable: true },
385
+ viaProxy: { type: 'boolean', default: false },
399
386
  },
400
387
  },
401
388
  MeetingRecord: {
402
- type: "object",
389
+ type: 'object',
403
390
  properties: {
404
- meetingId: { type: "string" },
405
- type: { type: "string" },
406
- date: { type: "string", format: "date" },
407
- quorumAchieved: { type: "boolean" },
408
- attendeeCount: { type: "integer" },
409
- resolutionsPassed: { type: "array", items: { type: "string" } },
410
- minutesRef: { type: "string" },
391
+ meetingId: { type: 'string' },
392
+ type: { type: 'string' },
393
+ date: { type: 'string', format: 'date' },
394
+ quorumAchieved: { type: 'boolean' },
395
+ attendeeCount: { type: 'integer' },
396
+ resolutionsPassed: { type: 'array', items: { type: 'string' } },
397
+ minutesRef: { type: 'string' },
411
398
  },
412
399
  },
413
400
  },
414
401
  states: {
415
402
  ACTIVE: {
416
- id: "ACTIVE",
403
+ id: 'ACTIVE',
417
404
  isFinal: false,
418
- description: "Board is constituted and able to conduct business. Default state between meetings.",
405
+ description: 'Board is constituted and able to conduct business. Default state between meetings.',
419
406
  },
420
407
  IN_MEETING: {
421
- id: "IN_MEETING",
408
+ id: 'IN_MEETING',
422
409
  isFinal: false,
423
- description: "Board meeting is in session with quorum present. Can take formal actions.",
410
+ description: 'Board meeting is in session with quorum present. Can take formal actions.',
424
411
  },
425
412
  QUORUM_LOST: {
426
- id: "QUORUM_LOST",
413
+ id: 'QUORUM_LOST',
427
414
  isFinal: false,
428
- description: "Meeting in progress but quorum lost due to departures. No further action until quorum restored or adjourned.",
415
+ description: 'Meeting in progress but quorum lost due to departures. No further action until quorum restored or adjourned.',
429
416
  },
430
417
  },
431
- initialState: "ACTIVE",
418
+ initialState: 'ACTIVE',
432
419
  transitions: [
433
420
  // ACTIVE -> ACTIVE (elect_director)
434
421
  {
435
- from: "ACTIVE",
436
- to: "ACTIVE",
437
- eventName: "elect_director",
422
+ from: 'ACTIVE',
423
+ to: 'ACTIVE',
424
+ eventName: 'elect_director',
438
425
  guard: {
439
426
  and: [
440
427
  // vacancy gated solely on verified state — the forgeable event.isFillingVacancy disjunct was removed
441
- { ">": [{ var: "state.seats.vacant" }, 0] },
442
- { "!=": [{ var: "event.electionResolutionRef" }, null] },
428
+ { '>': [{ var: 'state.seats.vacant' }, 0] },
429
+ { '!=': [{ var: 'event.electionResolutionRef' }, null] },
443
430
  {
444
- "!": {
431
+ '!': {
445
432
  some: [
446
- { var: "state.directors" },
433
+ { var: 'state.directors' },
447
434
  {
448
435
  and: [
449
436
  {
450
- "==": [
451
- { var: "directorId" },
452
- { var: "event.directorId" },
453
- ],
437
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
454
438
  },
455
- { "==": [{ var: "status" }, "ACTIVE"] },
439
+ { '==': [{ var: 'status' }, 'ACTIVE'] },
456
440
  ],
457
441
  },
458
442
  ],
@@ -462,168 +446,156 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
462
446
  },
463
447
  effect: {
464
448
  merge: [
465
- { var: "state" },
449
+ { var: 'state' },
466
450
  {
467
451
  directors: {
468
452
  merge: [
469
- { var: "state.directors" },
453
+ { var: 'state.directors' },
470
454
  [
471
455
  {
472
- directorId: { var: "event.directorId" },
473
- name: { var: "event.name" },
474
- email: { var: "event.email" },
475
- termStart: { var: "event.termStart" },
476
- termEnd: { var: "event.termEnd" },
477
- class: { var: "event.class" },
478
- status: "ACTIVE",
479
- isIndependent: { var: "event.isIndependent" },
456
+ directorId: { var: 'event.directorId' },
457
+ name: { var: 'event.name' },
458
+ email: { var: 'event.email' },
459
+ termStart: { var: 'event.termStart' },
460
+ termEnd: { var: 'event.termEnd' },
461
+ class: { var: 'event.class' },
462
+ status: 'ACTIVE',
463
+ isIndependent: { var: 'event.isIndependent' },
480
464
  isChair: false,
481
465
  isLeadIndependent: false,
482
466
  committees: [],
483
- electedBy: { var: "event.electionResolutionRef" },
467
+ electedBy: { var: 'event.electionResolutionRef' },
484
468
  },
485
469
  ],
486
470
  ],
487
471
  },
488
472
  seats: {
489
473
  merge: [
490
- { var: "state.seats" },
474
+ { var: 'state.seats' },
491
475
  {
492
- filled: { "+": [{ var: "state.seats.filled" }, 1] },
493
- vacant: { "-": [{ var: "state.seats.vacant" }, 1] },
476
+ filled: { '+': [{ var: 'state.seats.filled' }, 1] },
477
+ vacant: { '-': [{ var: 'state.seats.vacant' }, 1] },
494
478
  },
495
479
  ],
496
480
  },
497
481
  },
498
482
  {
499
- _emit: [
500
- { name: "DIRECTOR_ELECTED", data: { var: "event" }, destination: "external" },
501
- ],
483
+ _emit: [{ name: 'DIRECTOR_ELECTED', data: { var: 'event' }, destination: 'external' }],
502
484
  },
503
485
  ],
504
486
  },
505
487
  },
506
488
  // ACTIVE -> ACTIVE (resign_director) and IN_MEETING -> ACTIVE (resign_director)
507
489
  {
508
- from: "ACTIVE",
509
- to: "ACTIVE",
510
- eventName: "resign_director",
490
+ from: 'ACTIVE',
491
+ to: 'ACTIVE',
492
+ eventName: 'resign_director',
511
493
  guard: {
512
494
  some: [
513
- { var: "state.directors" },
495
+ { var: 'state.directors' },
514
496
  {
515
497
  and: [
516
- { "==": [{ var: "directorId" }, { var: "event.directorId" }] },
517
- { "==": [{ var: "status" }, "ACTIVE"] },
498
+ { '==': [{ var: 'directorId' }, { var: 'event.directorId' }] },
499
+ { '==': [{ var: 'status' }, 'ACTIVE'] },
518
500
  ],
519
501
  },
520
502
  ],
521
503
  },
522
504
  effect: {
523
505
  merge: [
524
- { var: "state" },
506
+ { var: 'state' },
525
507
  {
526
508
  directors: {
527
509
  map: [
528
- { var: "state.directors" },
510
+ { var: 'state.directors' },
529
511
  {
530
512
  if: [
531
513
  {
532
- "==": [
533
- { var: "directorId" },
534
- { var: "event.directorId" },
535
- ],
514
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
536
515
  },
537
516
  {
538
517
  merge: [
539
- { var: "" },
518
+ { var: '' },
540
519
  {
541
- status: "RESIGNED",
542
- termEnd: { var: "event.effectiveDate" },
520
+ status: 'RESIGNED',
521
+ termEnd: { var: 'event.effectiveDate' },
543
522
  },
544
523
  ],
545
524
  },
546
- { var: "" },
525
+ { var: '' },
547
526
  ],
548
527
  },
549
528
  ],
550
529
  },
551
530
  seats: {
552
531
  merge: [
553
- { var: "state.seats" },
532
+ { var: 'state.seats' },
554
533
  {
555
- filled: { "-": [{ var: "state.seats.filled" }, 1] },
556
- vacant: { "+": [{ var: "state.seats.vacant" }, 1] },
534
+ filled: { '-': [{ var: 'state.seats.filled' }, 1] },
535
+ vacant: { '+': [{ var: 'state.seats.vacant' }, 1] },
557
536
  },
558
537
  ],
559
538
  },
560
539
  },
561
540
  {
562
- _emit: [
563
- { name: "DIRECTOR_RESIGNED", data: { var: "event" }, destination: "external" },
564
- ],
541
+ _emit: [{ name: 'DIRECTOR_RESIGNED', data: { var: 'event' }, destination: 'external' }],
565
542
  },
566
543
  ],
567
544
  },
568
545
  },
569
546
  {
570
- from: "IN_MEETING",
571
- to: "ACTIVE",
572
- eventName: "resign_director",
547
+ from: 'IN_MEETING',
548
+ to: 'ACTIVE',
549
+ eventName: 'resign_director',
573
550
  guard: {
574
551
  some: [
575
- { var: "state.directors" },
552
+ { var: 'state.directors' },
576
553
  {
577
554
  and: [
578
- { "==": [{ var: "directorId" }, { var: "event.directorId" }] },
579
- { "==": [{ var: "status" }, "ACTIVE"] },
555
+ { '==': [{ var: 'directorId' }, { var: 'event.directorId' }] },
556
+ { '==': [{ var: 'status' }, 'ACTIVE'] },
580
557
  ],
581
558
  },
582
559
  ],
583
560
  },
584
561
  effect: {
585
562
  merge: [
586
- { var: "state" },
563
+ { var: 'state' },
587
564
  {
588
565
  directors: {
589
566
  map: [
590
- { var: "state.directors" },
567
+ { var: 'state.directors' },
591
568
  {
592
569
  if: [
593
570
  {
594
- "==": [
595
- { var: "directorId" },
596
- { var: "event.directorId" },
597
- ],
571
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
598
572
  },
599
573
  {
600
574
  merge: [
601
- { var: "" },
575
+ { var: '' },
602
576
  {
603
- status: "RESIGNED",
604
- termEnd: { var: "event.effectiveDate" },
577
+ status: 'RESIGNED',
578
+ termEnd: { var: 'event.effectiveDate' },
605
579
  },
606
580
  ],
607
581
  },
608
- { var: "" },
582
+ { var: '' },
609
583
  ],
610
584
  },
611
585
  ],
612
586
  },
613
587
  seats: {
614
588
  merge: [
615
- { var: "state.seats" },
589
+ { var: 'state.seats' },
616
590
  {
617
- filled: { "-": [{ var: "state.seats.filled" }, 1] },
618
- vacant: { "+": [{ var: "state.seats.vacant" }, 1] },
591
+ filled: { '-': [{ var: 'state.seats.filled' }, 1] },
592
+ vacant: { '+': [{ var: 'state.seats.vacant' }, 1] },
619
593
  },
620
594
  ],
621
595
  },
622
596
  },
623
597
  {
624
- _emit: [
625
- { name: "DIRECTOR_RESIGNED", data: { var: "event" }, destination: "external" },
626
- ],
598
+ _emit: [{ name: 'DIRECTOR_RESIGNED', data: { var: 'event' }, destination: 'external' }],
627
599
  },
628
600
  ],
629
601
  },
@@ -631,19 +603,19 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
631
603
  // ACTIVE -> ACTIVE (propose_removal) — phase 1 (#24): bind the executing resolution fiber and
632
604
  // record the pending removal, so the next transition can read the resolution's state.
633
605
  {
634
- from: "ACTIVE",
635
- to: "ACTIVE",
636
- eventName: "propose_removal",
606
+ from: 'ACTIVE',
607
+ to: 'ACTIVE',
608
+ eventName: 'propose_removal',
637
609
  guard: {
638
610
  and: [
639
- (0, guards_js_1.signerInSet)("state.authorizedRemovers"),
611
+ (0, guards_js_1.signerInSet)('state.authorizedRemovers'),
640
612
  {
641
613
  some: [
642
- { var: "state.directors" },
614
+ { var: 'state.directors' },
643
615
  {
644
616
  and: [
645
- { "==": [{ var: "directorId" }, { var: "event.directorId" }] },
646
- { "==": [{ var: "status" }, "ACTIVE"] },
617
+ { '==': [{ var: 'directorId' }, { var: 'event.directorId' }] },
618
+ { '==': [{ var: 'status' }, 'ACTIVE'] },
647
619
  ],
648
620
  },
649
621
  ],
@@ -652,17 +624,17 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
652
624
  },
653
625
  effect: {
654
626
  merge: [
655
- { var: "state" },
627
+ { var: 'state' },
656
628
  {
657
629
  pendingRemoval: {
658
- directorId: { var: "event.directorId" },
659
- cause: { var: "event.cause" },
660
- resolutionRef: { var: "event.removalResolutionRef" },
661
- proposedAt: { var: "$ordinal" },
630
+ directorId: { var: 'event.directorId' },
631
+ cause: { var: 'event.cause' },
632
+ resolutionRef: { var: 'event.removalResolutionRef' },
633
+ proposedAt: { var: '$ordinal' },
662
634
  },
663
635
  },
664
636
  // bind the resolution fiber so remove_for_cause can assert its state next transition
665
- (0, effects_js_1.addDependency)({ var: "event.removalResolutionRef" }),
637
+ (0, effects_js_1.addDependency)({ var: 'event.removalResolutionRef' }),
666
638
  ],
667
639
  },
668
640
  dependencies: [],
@@ -670,32 +642,29 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
670
642
  // ACTIVE -> ACTIVE (remove_for_cause) — phase 2 (#24): execute once the bound removal resolution is
671
643
  // EXECUTED. depInState replaces the dropped object-form dependency (which silently never gated).
672
644
  {
673
- from: "ACTIVE",
674
- to: "ACTIVE",
675
- eventName: "remove_for_cause",
645
+ from: 'ACTIVE',
646
+ to: 'ACTIVE',
647
+ eventName: 'remove_for_cause',
676
648
  // authority gate — a member of the pinned authorizedRemovers set must sign; an identity role
677
649
  // attestation (BOARD_MEMBER/...) layers on additively when the identity registry lands (§4.2).
678
650
  guard: {
679
651
  and: [
680
- (0, guards_js_1.signerInSet)("state.authorizedRemovers"),
652
+ (0, guards_js_1.signerInSet)('state.authorizedRemovers'),
681
653
  // the proposal must target this director, and its bound resolution must be EXECUTED
682
654
  {
683
- "==": [
684
- { var: "state.pendingRemoval.directorId" },
685
- { var: "event.directorId" },
686
- ],
655
+ '==': [{ var: 'state.pendingRemoval.directorId' }, { var: 'event.directorId' }],
687
656
  },
688
- (0, guards_js_1.depInState)("state.pendingRemoval.resolutionRef", "EXECUTED"),
657
+ (0, guards_js_1.depInState)('state.pendingRemoval.resolutionRef', 'EXECUTED'),
689
658
  // event.directorId is the lookup key only — the director must exist and be ACTIVE
690
659
  {
691
660
  some: [
692
- { var: "state.directors" },
661
+ { var: 'state.directors' },
693
662
  {
694
663
  and: [
695
664
  {
696
- "==": [{ var: "directorId" }, { var: "event.directorId" }],
665
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
697
666
  },
698
- { "==": [{ var: "status" }, "ACTIVE"] },
667
+ { '==': [{ var: 'status' }, 'ACTIVE'] },
699
668
  ],
700
669
  },
701
670
  ],
@@ -704,39 +673,36 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
704
673
  },
705
674
  effect: {
706
675
  merge: [
707
- { var: "state" },
676
+ { var: 'state' },
708
677
  {
709
678
  directors: {
710
679
  map: [
711
- { var: "state.directors" },
680
+ { var: 'state.directors' },
712
681
  {
713
682
  if: [
714
683
  {
715
- "==": [
716
- { var: "directorId" },
717
- { var: "event.directorId" },
718
- ],
684
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
719
685
  },
720
686
  {
721
687
  merge: [
722
- { var: "" },
688
+ { var: '' },
723
689
  {
724
- status: "REMOVED",
725
- termEnd: { var: "event.effectiveDate" },
690
+ status: 'REMOVED',
691
+ termEnd: { var: 'event.effectiveDate' },
726
692
  },
727
693
  ],
728
694
  },
729
- { var: "" },
695
+ { var: '' },
730
696
  ],
731
697
  },
732
698
  ],
733
699
  },
734
700
  seats: {
735
701
  merge: [
736
- { var: "state.seats" },
702
+ { var: 'state.seats' },
737
703
  {
738
- filled: { "-": [{ var: "state.seats.filled" }, 1] },
739
- vacant: { "+": [{ var: "state.seats.vacant" }, 1] },
704
+ filled: { '-': [{ var: 'state.seats.filled' }, 1] },
705
+ vacant: { '+': [{ var: 'state.seats.vacant' }, 1] },
740
706
  },
741
707
  ],
742
708
  },
@@ -744,9 +710,7 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
744
710
  pendingRemoval: null,
745
711
  },
746
712
  {
747
- _emit: [
748
- { name: "DIRECTOR_REMOVED", data: { var: "event" }, destination: "external" },
749
- ],
713
+ _emit: [{ name: 'DIRECTOR_REMOVED', data: { var: 'event' }, destination: 'external' }],
750
714
  },
751
715
  ],
752
716
  },
@@ -754,36 +718,33 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
754
718
  },
755
719
  // ACTIVE -> ACTIVE (designate_chair)
756
720
  {
757
- from: "ACTIVE",
758
- to: "ACTIVE",
759
- eventName: "designate_chair",
721
+ from: 'ACTIVE',
722
+ to: 'ACTIVE',
723
+ eventName: 'designate_chair',
760
724
  guard: {
761
725
  some: [
762
- { var: "state.directors" },
726
+ { var: 'state.directors' },
763
727
  {
764
728
  and: [
765
- { "==": [{ var: "directorId" }, { var: "event.directorId" }] },
766
- { "==": [{ var: "status" }, "ACTIVE"] },
729
+ { '==': [{ var: 'directorId' }, { var: 'event.directorId' }] },
730
+ { '==': [{ var: 'status' }, 'ACTIVE'] },
767
731
  ],
768
732
  },
769
733
  ],
770
734
  },
771
735
  effect: {
772
736
  merge: [
773
- { var: "state" },
737
+ { var: 'state' },
774
738
  {
775
739
  directors: {
776
740
  map: [
777
- { var: "state.directors" },
741
+ { var: 'state.directors' },
778
742
  {
779
743
  merge: [
780
- { var: "" },
744
+ { var: '' },
781
745
  {
782
746
  isChair: {
783
- "==": [
784
- { var: "directorId" },
785
- { var: "event.directorId" },
786
- ],
747
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
787
748
  },
788
749
  },
789
750
  ],
@@ -796,21 +757,18 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
796
757
  },
797
758
  // ACTIVE -> ACTIVE (call_meeting)
798
759
  {
799
- from: "ACTIVE",
800
- to: "ACTIVE",
801
- eventName: "call_meeting",
760
+ from: 'ACTIVE',
761
+ to: 'ACTIVE',
762
+ eventName: 'call_meeting',
802
763
  guard: {
803
764
  and: [
804
765
  {
805
766
  or: [
806
- { "==": [{ var: "event.waiverOfNotice" }, true] },
767
+ { '==': [{ var: 'event.waiverOfNotice' }, true] },
807
768
  {
808
- ">=": [
769
+ '>=': [
809
770
  {
810
- "-": [
811
- { var: "event.scheduledDate" },
812
- { var: "event.noticeDate" },
813
- ],
771
+ '-': [{ var: 'event.scheduledDate' }, { var: 'event.noticeDate' }],
814
772
  },
815
773
  172800000, // 2 days in ms
816
774
  ],
@@ -819,56 +777,54 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
819
777
  },
820
778
  {
821
779
  or: [
822
- { "==": [{ var: "state.currentMeeting" }, null] },
823
- { "!=": [{ var: "state.currentMeeting.closedAt" }, null] },
780
+ { '==': [{ var: 'state.currentMeeting' }, null] },
781
+ { '!=': [{ var: 'state.currentMeeting.closedAt' }, null] },
824
782
  ],
825
783
  },
826
784
  ],
827
785
  },
828
786
  effect: {
829
787
  merge: [
830
- { var: "state" },
788
+ { var: 'state' },
831
789
  {
832
790
  currentMeeting: {
833
- meetingId: { var: "event.meetingId" },
834
- type: { var: "event.type" },
835
- scheduledDate: { var: "event.scheduledDate" },
836
- location: { var: "event.location" },
837
- isVirtual: { var: "event.isVirtual" },
838
- calledBy: { var: "event.calledBy" },
839
- noticeDate: { var: "event.noticeDate" },
840
- agenda: { var: "event.agenda" },
791
+ meetingId: { var: 'event.meetingId' },
792
+ type: { var: 'event.type' },
793
+ scheduledDate: { var: 'event.scheduledDate' },
794
+ location: { var: 'event.location' },
795
+ isVirtual: { var: 'event.isVirtual' },
796
+ calledBy: { var: 'event.calledBy' },
797
+ noticeDate: { var: 'event.noticeDate' },
798
+ agenda: { var: 'event.agenda' },
841
799
  attendees: [],
842
800
  quorumPresent: false,
843
801
  quorumCount: 0,
844
802
  },
845
803
  },
846
804
  {
847
- _emit: [
848
- { name: "BOARD_MEETING_SCHEDULED", data: { var: "event" }, destination: "external" },
849
- ],
805
+ _emit: [{ name: 'BOARD_MEETING_SCHEDULED', data: { var: 'event' }, destination: 'external' }],
850
806
  },
851
807
  ],
852
808
  },
853
809
  },
854
810
  // ACTIVE -> ACTIVE (record_attendance)
855
811
  {
856
- from: "ACTIVE",
857
- to: "ACTIVE",
858
- eventName: "record_attendance",
812
+ from: 'ACTIVE',
813
+ to: 'ACTIVE',
814
+ eventName: 'record_attendance',
859
815
  guard: {
860
816
  and: [
861
- { "!=": [{ var: "state.currentMeeting" }, null] },
862
- { "==": [{ var: "state.currentMeeting.openedAt" }, null] },
817
+ { '!=': [{ var: 'state.currentMeeting' }, null] },
818
+ { '==': [{ var: 'state.currentMeeting.openedAt' }, null] },
863
819
  {
864
820
  some: [
865
- { var: "state.directors" },
821
+ { var: 'state.directors' },
866
822
  {
867
823
  and: [
868
824
  {
869
- "==": [{ var: "directorId" }, { var: "event.directorId" }],
825
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
870
826
  },
871
- { "==": [{ var: "status" }, "ACTIVE"] },
827
+ { '==': [{ var: 'status' }, 'ACTIVE'] },
872
828
  ],
873
829
  },
874
830
  ],
@@ -877,20 +833,20 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
877
833
  },
878
834
  effect: {
879
835
  merge: [
880
- { var: "state" },
836
+ { var: 'state' },
881
837
  {
882
838
  currentMeeting: {
883
839
  merge: [
884
- { var: "state.currentMeeting" },
840
+ { var: 'state.currentMeeting' },
885
841
  {
886
842
  attendees: {
887
843
  merge: [
888
- { var: "state.currentMeeting.attendees" },
844
+ { var: 'state.currentMeeting.attendees' },
889
845
  [
890
846
  {
891
- directorId: { var: "event.directorId" },
892
- present: { var: "event.present" },
893
- arrivedAt: { var: "event.arrivedAt" },
847
+ directorId: { var: 'event.directorId' },
848
+ present: { var: 'event.present' },
849
+ arrivedAt: { var: 'event.arrivedAt' },
894
850
  viaProxy: false,
895
851
  },
896
852
  ],
@@ -905,71 +861,63 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
905
861
  },
906
862
  // ACTIVE -> IN_MEETING (open_meeting)
907
863
  {
908
- from: "ACTIVE",
909
- to: "IN_MEETING",
910
- eventName: "open_meeting",
864
+ from: 'ACTIVE',
865
+ to: 'IN_MEETING',
866
+ eventName: 'open_meeting',
911
867
  guard: {
912
868
  and: [
913
- { "!=": [{ var: "state.currentMeeting" }, null] },
914
- { "==": [{ var: "state.currentMeeting.openedAt" }, null] },
915
- { "==": [{ var: "state.currentMeeting.quorumPresent" }, true] },
869
+ { '!=': [{ var: 'state.currentMeeting' }, null] },
870
+ { '==': [{ var: 'state.currentMeeting.openedAt' }, null] },
871
+ { '==': [{ var: 'state.currentMeeting.quorumPresent' }, true] },
916
872
  ],
917
873
  },
918
874
  effect: {
919
875
  merge: [
920
- { var: "state" },
876
+ { var: 'state' },
921
877
  {
922
- status: "IN_MEETING",
878
+ status: 'IN_MEETING',
923
879
  currentMeeting: {
924
- merge: [
925
- { var: "state.currentMeeting" },
926
- { openedAt: { var: "event.openedAt" } },
927
- ],
880
+ merge: [{ var: 'state.currentMeeting' }, { openedAt: { var: 'event.openedAt' } }],
928
881
  },
929
882
  },
930
883
  {
931
- _emit: [
932
- { name: "BOARD_MEETING_OPENED", data: { var: "event" }, destination: "external" },
933
- ],
884
+ _emit: [{ name: 'BOARD_MEETING_OPENED', data: { var: 'event' }, destination: 'external' }],
934
885
  },
935
886
  ],
936
887
  },
937
888
  },
938
889
  // IN_MEETING -> IN_MEETING (director_departs)
939
890
  {
940
- from: "IN_MEETING",
941
- to: "IN_MEETING",
942
- eventName: "director_departs",
943
- guard: { "==": [1, 1] },
891
+ from: 'IN_MEETING',
892
+ to: 'IN_MEETING',
893
+ eventName: 'director_departs',
894
+ guard: { '==': [1, 1] },
944
895
  effect: {
945
896
  merge: [
946
- { var: "state" },
897
+ { var: 'state' },
947
898
  {
948
899
  currentMeeting: {
949
900
  merge: [
950
- { var: "state.currentMeeting" },
901
+ { var: 'state.currentMeeting' },
951
902
  {
952
903
  attendees: {
953
904
  map: [
954
- { var: "state.currentMeeting.attendees" },
905
+ { var: 'state.currentMeeting.attendees' },
955
906
  {
956
907
  if: [
957
908
  {
958
- "==": [
959
- { var: "directorId" },
960
- { var: "event.directorId" },
961
- ],
909
+ '==': [{ var: 'directorId' }, { var: 'event.directorId' }],
962
910
  },
963
911
  {
964
912
  merge: [
965
- { var: "" },
913
+ { var: '' },
966
914
  {
967
915
  present: false,
968
- departedAt: { var: "event.departedAt" },
916
+ departedAt: { var: 'event.departedAt' },
969
917
  },
970
918
  ],
971
919
  },
972
- { var: "" },
920
+ { var: '' },
973
921
  ],
974
922
  },
975
923
  ],
@@ -983,143 +931,129 @@ exports.corpBoardDef = (0, fiber_app_js_1.defineFiberApp)({
983
931
  },
984
932
  // IN_MEETING -> QUORUM_LOST
985
933
  {
986
- from: "IN_MEETING",
987
- to: "QUORUM_LOST",
988
- eventName: "quorum_lost",
989
- guard: { "==": [{ var: "state.currentMeeting.quorumPresent" }, false] },
934
+ from: 'IN_MEETING',
935
+ to: 'QUORUM_LOST',
936
+ eventName: 'quorum_lost',
937
+ guard: { '==': [{ var: 'state.currentMeeting.quorumPresent' }, false] },
990
938
  effect: {
991
939
  merge: [
992
- { var: "state" },
993
- { status: "QUORUM_LOST" },
940
+ { var: 'state' },
941
+ { status: 'QUORUM_LOST' },
994
942
  {
995
- _emit: [
996
- { name: "BOARD_QUORUM_LOST", data: { var: "event" }, destination: "external" },
997
- ],
943
+ _emit: [{ name: 'BOARD_QUORUM_LOST', data: { var: 'event' }, destination: 'external' }],
998
944
  },
999
945
  ],
1000
946
  },
1001
947
  },
1002
948
  // QUORUM_LOST -> IN_MEETING
1003
949
  {
1004
- from: "QUORUM_LOST",
1005
- to: "IN_MEETING",
1006
- eventName: "quorum_restored",
1007
- guard: { "==": [{ var: "state.currentMeeting.quorumPresent" }, true] },
950
+ from: 'QUORUM_LOST',
951
+ to: 'IN_MEETING',
952
+ eventName: 'quorum_restored',
953
+ guard: { '==': [{ var: 'state.currentMeeting.quorumPresent' }, true] },
1008
954
  effect: {
1009
955
  merge: [
1010
- { var: "state" },
1011
- { status: "IN_MEETING" },
956
+ { var: 'state' },
957
+ { status: 'IN_MEETING' },
1012
958
  {
1013
- _emit: [
1014
- { name: "BOARD_QUORUM_RESTORED", data: { var: "event" }, destination: "external" },
1015
- ],
959
+ _emit: [{ name: 'BOARD_QUORUM_RESTORED', data: { var: 'event' }, destination: 'external' }],
1016
960
  },
1017
961
  ],
1018
962
  },
1019
963
  },
1020
964
  // IN_MEETING -> ACTIVE (adjourn)
1021
965
  {
1022
- from: "IN_MEETING",
1023
- to: "ACTIVE",
1024
- eventName: "adjourn",
1025
- guard: { "==": [1, 1] },
966
+ from: 'IN_MEETING',
967
+ to: 'ACTIVE',
968
+ eventName: 'adjourn',
969
+ guard: { '==': [1, 1] },
1026
970
  effect: {
1027
971
  merge: [
1028
- { var: "state" },
972
+ { var: 'state' },
1029
973
  {
1030
- status: "ACTIVE",
974
+ status: 'ACTIVE',
1031
975
  currentMeeting: null,
1032
976
  meetingHistory: {
1033
977
  merge: [
1034
- { var: "state.meetingHistory" },
978
+ { var: 'state.meetingHistory' },
1035
979
  [
1036
980
  {
1037
- meetingId: { var: "state.currentMeeting.meetingId" },
1038
- type: { var: "state.currentMeeting.type" },
1039
- date: { var: "state.currentMeeting.scheduledDate" },
981
+ meetingId: { var: 'state.currentMeeting.meetingId' },
982
+ type: { var: 'state.currentMeeting.type' },
983
+ date: { var: 'state.currentMeeting.scheduledDate' },
1040
984
  quorumAchieved: {
1041
- var: "state.currentMeeting.quorumPresent",
985
+ var: 'state.currentMeeting.quorumPresent',
1042
986
  },
1043
- attendeeCount: { var: "state.currentMeeting.quorumCount" },
1044
- resolutionsPassed: { var: "event.resolutionsPassed" },
1045
- minutesRef: { var: "event.minutesRef" },
987
+ attendeeCount: { var: 'state.currentMeeting.quorumCount' },
988
+ resolutionsPassed: { var: 'event.resolutionsPassed' },
989
+ minutesRef: { var: 'event.minutesRef' },
1046
990
  },
1047
991
  ],
1048
992
  ],
1049
993
  },
1050
994
  },
1051
995
  {
1052
- _emit: [
1053
- { name: "BOARD_MEETING_ADJOURNED", data: { var: "event" }, destination: "external" },
1054
- ],
996
+ _emit: [{ name: 'BOARD_MEETING_ADJOURNED', data: { var: 'event' }, destination: 'external' }],
1055
997
  },
1056
998
  ],
1057
999
  },
1058
1000
  },
1059
1001
  // QUORUM_LOST -> ACTIVE (adjourn)
1060
1002
  {
1061
- from: "QUORUM_LOST",
1062
- to: "ACTIVE",
1063
- eventName: "adjourn",
1064
- guard: { "==": [1, 1] },
1003
+ from: 'QUORUM_LOST',
1004
+ to: 'ACTIVE',
1005
+ eventName: 'adjourn',
1006
+ guard: { '==': [1, 1] },
1065
1007
  effect: {
1066
1008
  merge: [
1067
- { var: "state" },
1009
+ { var: 'state' },
1068
1010
  {
1069
- status: "ACTIVE",
1011
+ status: 'ACTIVE',
1070
1012
  currentMeeting: null,
1071
1013
  meetingHistory: {
1072
1014
  merge: [
1073
- { var: "state.meetingHistory" },
1015
+ { var: 'state.meetingHistory' },
1074
1016
  [
1075
1017
  {
1076
- meetingId: { var: "state.currentMeeting.meetingId" },
1077
- type: { var: "state.currentMeeting.type" },
1078
- date: { var: "state.currentMeeting.scheduledDate" },
1018
+ meetingId: { var: 'state.currentMeeting.meetingId' },
1019
+ type: { var: 'state.currentMeeting.type' },
1020
+ date: { var: 'state.currentMeeting.scheduledDate' },
1079
1021
  quorumAchieved: {
1080
- var: "state.currentMeeting.quorumPresent",
1022
+ var: 'state.currentMeeting.quorumPresent',
1081
1023
  },
1082
- attendeeCount: { var: "state.currentMeeting.quorumCount" },
1083
- resolutionsPassed: { var: "event.resolutionsPassed" },
1084
- minutesRef: { var: "event.minutesRef" },
1024
+ attendeeCount: { var: 'state.currentMeeting.quorumCount' },
1025
+ resolutionsPassed: { var: 'event.resolutionsPassed' },
1026
+ minutesRef: { var: 'event.minutesRef' },
1085
1027
  },
1086
1028
  ],
1087
1029
  ],
1088
1030
  },
1089
1031
  },
1090
1032
  {
1091
- _emit: [
1092
- { name: "BOARD_MEETING_ADJOURNED", data: { var: "event" }, destination: "external" },
1093
- ],
1033
+ _emit: [{ name: 'BOARD_MEETING_ADJOURNED', data: { var: 'event' }, destination: 'external' }],
1094
1034
  },
1095
1035
  ],
1096
1036
  },
1097
1037
  },
1098
1038
  // ACTIVE -> ACTIVE (update_seats)
1099
1039
  {
1100
- from: "ACTIVE",
1101
- to: "ACTIVE",
1102
- eventName: "update_seats",
1040
+ from: 'ACTIVE',
1041
+ to: 'ACTIVE',
1042
+ eventName: 'update_seats',
1103
1043
  guard: {
1104
- ">=": [
1105
- { var: "event.newAuthorizedSeats" },
1106
- { var: "state.seats.filled" },
1107
- ],
1044
+ '>=': [{ var: 'event.newAuthorizedSeats' }, { var: 'state.seats.filled' }],
1108
1045
  },
1109
1046
  effect: {
1110
1047
  merge: [
1111
- { var: "state" },
1048
+ { var: 'state' },
1112
1049
  {
1113
1050
  seats: {
1114
1051
  merge: [
1115
- { var: "state.seats" },
1052
+ { var: 'state.seats' },
1116
1053
  {
1117
- authorized: { var: "event.newAuthorizedSeats" },
1054
+ authorized: { var: 'event.newAuthorizedSeats' },
1118
1055
  vacant: {
1119
- "-": [
1120
- { var: "event.newAuthorizedSeats" },
1121
- { var: "state.seats.filled" },
1122
- ],
1056
+ '-': [{ var: 'event.newAuthorizedSeats' }, { var: 'state.seats.filled' }],
1123
1057
  },
1124
1058
  },
1125
1059
  ],