@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.
- package/dist/cjs/apps/compute/index.js +33 -0
- package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
- package/dist/cjs/apps/compute/state-machines/index.js +9 -0
- package/dist/cjs/apps/contracts/index.js +1 -1
- package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
- package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
- package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
- package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
- package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
- package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
- package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
- package/dist/cjs/apps/governance/index.js +7 -7
- package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
- package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
- package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
- package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
- package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
- package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
- package/dist/cjs/apps/identity/constants.js +16 -24
- package/dist/cjs/apps/identity/index.js +1 -1
- package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
- package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
- package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
- package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
- package/dist/cjs/apps/index.js +4 -1
- package/dist/cjs/apps/lending/assets.js +41 -17
- package/dist/cjs/apps/lending/credit-scoring.js +4 -4
- package/dist/cjs/apps/lending/eligibility.js +9 -25
- package/dist/cjs/apps/lending/index.js +1 -1
- package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
- package/dist/cjs/apps/markets/index.js +1 -1
- package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
- package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
- package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
- package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
- package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
- package/dist/cjs/apps/oracles/index.js +1 -1
- package/dist/cjs/apps/privacy/index.js +67 -0
- package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
- package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
- package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
- package/dist/cjs/apps/staked-pool/assets.js +103 -0
- package/dist/cjs/apps/staked-pool/base.js +498 -0
- package/dist/cjs/apps/staked-pool/consumer.js +55 -0
- package/dist/cjs/apps/staked-pool/index.js +83 -0
- package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
- package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
- package/dist/cjs/generated/google/protobuf/struct.js +1 -1
- package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
- package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/cjs/generated/ottochain/v1/common.js +1 -1
- package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
- package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
- package/dist/cjs/generated/ottochain/v1/records.js +1 -1
- package/dist/cjs/index.js +21 -3
- package/dist/cjs/ottochain/genesis-manifest.js +6 -0
- package/dist/cjs/ottochain/metagraph-client.js +63 -11
- package/dist/cjs/ottochain/snapshot.js +2 -4
- package/dist/cjs/ottochain/transaction.js +10 -0
- package/dist/cjs/privacy/sealed-bid.js +85 -82
- package/dist/cjs/privacy/shield-app.js +32 -32
- package/dist/cjs/schema/effects.js +145 -1
- package/dist/cjs/schema/fiber-app.js +139 -5
- package/dist/cjs/schema/guard-lint.js +3 -12
- package/dist/cjs/schema/guards.js +38 -38
- package/dist/cjs/templates/asset-policy.js +190 -0
- package/dist/cjs/templates/index.js +86 -0
- package/dist/cjs/templates/machine.js +130 -0
- package/dist/cjs/templates/migration.js +39 -0
- package/dist/cjs/templates/state-shape.js +38 -0
- package/dist/cjs/validation.js +1 -3
- package/dist/esm/apps/compute/index.js +29 -0
- package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
- package/dist/esm/apps/compute/state-machines/index.js +5 -0
- package/dist/esm/apps/contracts/index.js +4 -4
- package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
- package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
- package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
- package/dist/esm/apps/corporate/index.js +2 -2
- package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
- package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
- package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
- package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
- package/dist/esm/apps/governance/index.js +10 -10
- package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
- package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
- package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
- package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
- package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
- package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
- package/dist/esm/apps/identity/constants.js +18 -26
- package/dist/esm/apps/identity/index.js +8 -8
- package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
- package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
- package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
- package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
- package/dist/esm/apps/index.js +9 -6
- package/dist/esm/apps/lending/assets.js +41 -17
- package/dist/esm/apps/lending/credit-scoring.js +6 -6
- package/dist/esm/apps/lending/eligibility.js +10 -26
- package/dist/esm/apps/lending/index.js +5 -5
- package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
- package/dist/esm/apps/markets/index.js +5 -5
- package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
- package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
- package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
- package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
- package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
- package/dist/esm/apps/oracles/index.js +3 -3
- package/dist/esm/apps/privacy/index.js +56 -0
- package/dist/esm/apps/privacy/state-machines/index.js +6 -0
- package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
- package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
- package/dist/esm/apps/staked-pool/assets.js +91 -0
- package/dist/esm/apps/staked-pool/base.js +493 -0
- package/dist/esm/apps/staked-pool/consumer.js +49 -0
- package/dist/esm/apps/staked-pool/index.js +60 -0
- package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
- package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
- package/dist/esm/generated/google/protobuf/struct.js +1 -1
- package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
- package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
- package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
- package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
- package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
- package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
- package/dist/esm/generated/ottochain/v1/common.js +1 -1
- package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
- package/dist/esm/generated/ottochain/v1/messages.js +1 -1
- package/dist/esm/generated/ottochain/v1/records.js +1 -1
- package/dist/esm/index.js +10 -4
- package/dist/esm/ottochain/genesis-manifest.js +6 -0
- package/dist/esm/ottochain/metagraph-client.js +63 -11
- package/dist/esm/ottochain/snapshot.js +2 -4
- package/dist/esm/ottochain/transaction.js +8 -0
- package/dist/esm/privacy/index.js +2 -2
- package/dist/esm/privacy/sealed-bid.js +87 -84
- package/dist/esm/privacy/shield-app.js +33 -33
- package/dist/esm/schema/effects.js +137 -0
- package/dist/esm/schema/fiber-app.js +134 -5
- package/dist/esm/schema/guard-lint.js +3 -12
- package/dist/esm/schema/guards.js +36 -37
- package/dist/esm/templates/asset-policy.js +182 -0
- package/dist/esm/templates/index.js +41 -0
- package/dist/esm/templates/machine.js +125 -0
- package/dist/esm/templates/migration.js +34 -0
- package/dist/esm/templates/state-shape.js +34 -0
- package/dist/esm/validation.js +1 -3
- package/dist/esm/zk/index.js +4 -4
- package/dist/types/apps/compute/index.d.ts +176 -0
- package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
- package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
- package/dist/types/apps/contracts/index.d.ts +14 -14
- package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
- package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
- package/dist/types/apps/corporate/index.d.ts +162 -162
- package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
- package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
- package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
- package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
- package/dist/types/apps/governance/index.d.ts +81 -81
- package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
- package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
- package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
- package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
- package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
- package/dist/types/apps/identity/constants.d.ts +2 -2
- package/dist/types/apps/identity/index.d.ts +70 -70
- package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
- package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
- package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
- package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
- package/dist/types/apps/index.d.ts +9 -6
- package/dist/types/apps/lending/assets.d.ts +2 -2
- package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
- package/dist/types/apps/lending/eligibility.d.ts +2 -2
- package/dist/types/apps/lending/index.d.ts +20 -12
- package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
- package/dist/types/apps/markets/index.d.ts +76 -76
- package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
- package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
- package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
- package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
- package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
- package/dist/types/apps/oracles/index.d.ts +1 -1
- package/dist/types/apps/privacy/index.d.ts +328 -0
- package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
- package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
- package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
- package/dist/types/apps/staked-pool/assets.d.ts +53 -0
- package/dist/types/apps/staked-pool/base.d.ts +80 -0
- package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
- package/dist/types/apps/staked-pool/index.d.ts +51 -0
- package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
- package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
- package/dist/types/generated/openapi.d.ts +13 -0
- package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/openapi.d.ts +4 -2
- package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
- package/dist/types/ottochain/index.d.ts +1 -1
- package/dist/types/ottochain/metagraph-client.d.ts +69 -15
- package/dist/types/ottochain/transaction.d.ts +9 -1
- package/dist/types/ottochain/types.d.ts +1 -1
- package/dist/types/privacy/index.d.ts +2 -2
- package/dist/types/privacy/sealed-bid.d.ts +9 -9
- package/dist/types/privacy/shield-app.d.ts +1 -1
- package/dist/types/schema/effects.d.ts +132 -0
- package/dist/types/schema/fiber-app.d.ts +281 -0
- package/dist/types/schema/guards.d.ts +12 -0
- package/dist/types/templates/asset-policy.d.ts +119 -0
- package/dist/types/templates/index.d.ts +26 -0
- package/dist/types/templates/machine.d.ts +139 -0
- package/dist/types/templates/migration.d.ts +34 -0
- package/dist/types/templates/state-shape.d.ts +30 -0
- package/dist/types/zk/index.d.ts +4 -4
- 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:
|
|
14
|
-
app:
|
|
15
|
-
type:
|
|
16
|
-
version:
|
|
17
|
-
description:
|
|
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:
|
|
21
|
-
description:
|
|
22
|
-
foreignKey:
|
|
20
|
+
machine: 'corporate-entity',
|
|
21
|
+
description: 'Parent corporate entity',
|
|
22
|
+
foreignKey: 'entityId',
|
|
23
23
|
},
|
|
24
24
|
resolutions: {
|
|
25
|
-
machine:
|
|
26
|
-
description:
|
|
27
|
-
foreignKey:
|
|
25
|
+
machine: 'corporate-resolution',
|
|
26
|
+
description: 'Board resolutions',
|
|
27
|
+
foreignKey: 'boardId',
|
|
28
28
|
},
|
|
29
29
|
committees: {
|
|
30
|
-
machine:
|
|
31
|
-
description:
|
|
32
|
-
foreignKey:
|
|
30
|
+
machine: 'corporate-committee',
|
|
31
|
+
description: 'Board committees',
|
|
32
|
+
foreignKey: 'boardId',
|
|
33
33
|
},
|
|
34
34
|
officers: {
|
|
35
|
-
machine:
|
|
36
|
-
description:
|
|
37
|
-
foreignKey:
|
|
35
|
+
machine: 'corporate-officers',
|
|
36
|
+
description: 'Officers appointed by board',
|
|
37
|
+
foreignKey: 'entityId',
|
|
38
38
|
},
|
|
39
39
|
},
|
|
40
40
|
},
|
|
41
41
|
createSchema: {
|
|
42
|
-
required: [
|
|
42
|
+
required: ['boardId', 'entityId', 'seats', 'authorizedRemovers'],
|
|
43
43
|
properties: {
|
|
44
44
|
boardId: {
|
|
45
|
-
type:
|
|
46
|
-
description:
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'Unique identifier for this board instance',
|
|
47
47
|
immutable: true,
|
|
48
48
|
},
|
|
49
49
|
entityId: {
|
|
50
|
-
type:
|
|
51
|
-
description:
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'Reference to parent corporate-entity',
|
|
52
52
|
immutable: true,
|
|
53
53
|
},
|
|
54
54
|
authorizedRemovers: {
|
|
55
|
-
type:
|
|
56
|
-
description:
|
|
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:
|
|
58
|
+
items: { type: 'address' },
|
|
59
59
|
},
|
|
60
60
|
seats: {
|
|
61
|
-
type:
|
|
61
|
+
type: 'object',
|
|
62
62
|
properties: {
|
|
63
63
|
authorized: {
|
|
64
|
-
type:
|
|
65
|
-
description:
|
|
64
|
+
type: 'integer',
|
|
65
|
+
description: 'Number of board seats authorized by bylaws',
|
|
66
66
|
},
|
|
67
|
-
filled: { type:
|
|
68
|
-
vacant: { type:
|
|
67
|
+
filled: { type: 'integer' },
|
|
68
|
+
vacant: { type: 'integer' },
|
|
69
69
|
},
|
|
70
70
|
},
|
|
71
71
|
boardStructure: {
|
|
72
|
-
type:
|
|
72
|
+
type: 'object',
|
|
73
73
|
properties: {
|
|
74
74
|
isClassified: {
|
|
75
|
-
type:
|
|
76
|
-
description:
|
|
75
|
+
type: 'boolean',
|
|
76
|
+
description: 'Whether board has staggered terms',
|
|
77
77
|
},
|
|
78
78
|
termYears: {
|
|
79
|
-
type:
|
|
79
|
+
type: 'integer',
|
|
80
80
|
default: 1,
|
|
81
|
-
description:
|
|
81
|
+
description: 'Director term length',
|
|
82
82
|
},
|
|
83
83
|
classTerms: {
|
|
84
|
-
type:
|
|
84
|
+
type: 'object',
|
|
85
85
|
properties: {
|
|
86
|
-
CLASS_I: { type:
|
|
87
|
-
CLASS_II: { type:
|
|
88
|
-
CLASS_III: { type:
|
|
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:
|
|
94
|
+
type: 'object',
|
|
95
95
|
properties: {
|
|
96
96
|
type: {
|
|
97
|
-
type:
|
|
98
|
-
enum: [
|
|
99
|
-
default:
|
|
97
|
+
type: 'string',
|
|
98
|
+
enum: ['MAJORITY', 'SUPERMAJORITY', 'FIXED_NUMBER'],
|
|
99
|
+
default: 'MAJORITY',
|
|
100
100
|
},
|
|
101
101
|
threshold: {
|
|
102
|
-
type:
|
|
103
|
-
description:
|
|
102
|
+
type: 'number',
|
|
103
|
+
description: 'Fraction for majority/super, or count for fixed',
|
|
104
104
|
},
|
|
105
105
|
minimumRequired: {
|
|
106
|
-
type:
|
|
107
|
-
description:
|
|
106
|
+
type: 'integer',
|
|
107
|
+
description: 'Absolute minimum regardless of formula',
|
|
108
108
|
},
|
|
109
109
|
},
|
|
110
110
|
},
|
|
111
111
|
votingRules: {
|
|
112
|
-
type:
|
|
112
|
+
type: 'object',
|
|
113
113
|
properties: {
|
|
114
114
|
standardApproval: {
|
|
115
|
-
type:
|
|
116
|
-
enum: [
|
|
117
|
-
default:
|
|
115
|
+
type: 'string',
|
|
116
|
+
enum: ['MAJORITY_PRESENT', 'MAJORITY_FULL_BOARD'],
|
|
117
|
+
default: 'MAJORITY_PRESENT',
|
|
118
118
|
},
|
|
119
119
|
supermajorityMatters: {
|
|
120
|
-
type:
|
|
121
|
-
items: { type:
|
|
122
|
-
description:
|
|
120
|
+
type: 'array',
|
|
121
|
+
items: { type: 'string' },
|
|
122
|
+
description: 'Action types requiring supermajority',
|
|
123
123
|
},
|
|
124
|
-
supermajorityThreshold: { type:
|
|
124
|
+
supermajorityThreshold: { type: 'number', default: 0.6667 },
|
|
125
125
|
},
|
|
126
126
|
},
|
|
127
127
|
},
|
|
128
128
|
},
|
|
129
129
|
stateSchema: {
|
|
130
130
|
properties: {
|
|
131
|
-
boardId: { type:
|
|
132
|
-
entityId: { type:
|
|
133
|
-
authorizedRemovers: { type:
|
|
131
|
+
boardId: { type: 'string', immutable: true },
|
|
132
|
+
entityId: { type: 'string', immutable: true },
|
|
133
|
+
authorizedRemovers: { type: 'array', items: { type: 'address' } },
|
|
134
134
|
directors: {
|
|
135
|
-
type:
|
|
136
|
-
items: { $ref:
|
|
135
|
+
type: 'array',
|
|
136
|
+
items: { $ref: '#/definitions/Director' },
|
|
137
137
|
computed: true,
|
|
138
138
|
},
|
|
139
|
-
seats: { type:
|
|
140
|
-
boardStructure: { type:
|
|
141
|
-
quorumRules: { type:
|
|
142
|
-
votingRules: { type:
|
|
139
|
+
seats: { type: 'object' },
|
|
140
|
+
boardStructure: { type: 'object' },
|
|
141
|
+
quorumRules: { type: 'object' },
|
|
142
|
+
votingRules: { type: 'object' },
|
|
143
143
|
currentMeeting: {
|
|
144
|
-
$ref:
|
|
144
|
+
$ref: '#/definitions/Meeting',
|
|
145
145
|
nullable: true,
|
|
146
146
|
computed: true,
|
|
147
147
|
},
|
|
148
148
|
meetingHistory: {
|
|
149
|
-
type:
|
|
150
|
-
items: { $ref:
|
|
149
|
+
type: 'array',
|
|
150
|
+
items: { $ref: '#/definitions/MeetingRecord' },
|
|
151
151
|
computed: true,
|
|
152
152
|
},
|
|
153
153
|
status: {
|
|
154
|
-
type:
|
|
155
|
-
enum: [
|
|
154
|
+
type: 'string',
|
|
155
|
+
enum: ['ACTIVE', 'IN_MEETING', 'QUORUM_LOST'],
|
|
156
156
|
computed: true,
|
|
157
157
|
},
|
|
158
|
-
createdAt: { type:
|
|
159
|
-
updatedAt: { type:
|
|
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:
|
|
162
|
+
pendingRemoval: { type: 'object', nullable: true, computed: true },
|
|
163
163
|
},
|
|
164
164
|
},
|
|
165
165
|
eventSchemas: {
|
|
166
166
|
elect_director: {
|
|
167
|
-
description:
|
|
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:
|
|
178
|
-
name: { type:
|
|
179
|
-
email: { type:
|
|
180
|
-
termStart: { type:
|
|
181
|
-
termEnd: { type:
|
|
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:
|
|
184
|
-
enum: [
|
|
176
|
+
type: 'string',
|
|
177
|
+
enum: ['CLASS_I', 'CLASS_II', 'CLASS_III', 'UNCLASSIFIED'],
|
|
185
178
|
},
|
|
186
|
-
isIndependent: { type:
|
|
179
|
+
isIndependent: { type: 'boolean' },
|
|
187
180
|
electionResolutionRef: {
|
|
188
|
-
type:
|
|
189
|
-
description:
|
|
181
|
+
type: 'string',
|
|
182
|
+
description: 'Shareholder or board resolution',
|
|
190
183
|
},
|
|
191
|
-
isFillingVacancy: { type:
|
|
184
|
+
isFillingVacancy: { type: 'boolean', default: false },
|
|
192
185
|
},
|
|
193
186
|
},
|
|
194
187
|
resign_director: {
|
|
195
|
-
description:
|
|
196
|
-
required: [
|
|
188
|
+
description: 'Director resigns from the board',
|
|
189
|
+
required: ['directorId', 'effectiveDate'],
|
|
197
190
|
properties: {
|
|
198
|
-
directorId: { type:
|
|
199
|
-
effectiveDate: { type:
|
|
200
|
-
reason: { type:
|
|
191
|
+
directorId: { type: 'string' },
|
|
192
|
+
effectiveDate: { type: 'string', format: 'date' },
|
|
193
|
+
reason: { type: 'string' },
|
|
201
194
|
resignationLetter: {
|
|
202
|
-
type:
|
|
203
|
-
description:
|
|
195
|
+
type: 'string',
|
|
196
|
+
description: 'Document reference',
|
|
204
197
|
},
|
|
205
198
|
},
|
|
206
199
|
},
|
|
207
200
|
propose_removal: {
|
|
208
|
-
description:
|
|
209
|
-
required: [
|
|
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:
|
|
212
|
-
cause: { type:
|
|
213
|
-
removalResolutionRef: { type:
|
|
204
|
+
directorId: { type: 'string' },
|
|
205
|
+
cause: { type: 'string' },
|
|
206
|
+
removalResolutionRef: { type: 'string' },
|
|
214
207
|
},
|
|
215
208
|
},
|
|
216
209
|
remove_for_cause: {
|
|
217
|
-
description:
|
|
218
|
-
required: [
|
|
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:
|
|
221
|
-
effectiveDate: { type:
|
|
213
|
+
directorId: { type: 'string' },
|
|
214
|
+
effectiveDate: { type: 'string', format: 'date' },
|
|
222
215
|
},
|
|
223
216
|
},
|
|
224
217
|
designate_chair: {
|
|
225
|
-
description:
|
|
226
|
-
required: [
|
|
218
|
+
description: 'Designate a director as board chair',
|
|
219
|
+
required: ['directorId', 'resolutionRef'],
|
|
227
220
|
properties: {
|
|
228
|
-
directorId: { type:
|
|
229
|
-
resolutionRef: { type:
|
|
221
|
+
directorId: { type: 'string' },
|
|
222
|
+
resolutionRef: { type: 'string' },
|
|
230
223
|
},
|
|
231
224
|
},
|
|
232
225
|
call_meeting: {
|
|
233
|
-
description:
|
|
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:
|
|
229
|
+
meetingId: { type: 'string' },
|
|
243
230
|
type: {
|
|
244
|
-
type:
|
|
245
|
-
enum: [
|
|
231
|
+
type: 'string',
|
|
232
|
+
enum: ['REGULAR', 'SPECIAL', 'ANNUAL', 'ORGANIZATIONAL'],
|
|
246
233
|
},
|
|
247
|
-
scheduledDate: { type:
|
|
248
|
-
location: { type:
|
|
249
|
-
isVirtual: { type:
|
|
234
|
+
scheduledDate: { type: 'string', format: 'date-time' },
|
|
235
|
+
location: { type: 'string' },
|
|
236
|
+
isVirtual: { type: 'boolean', default: false },
|
|
250
237
|
calledBy: {
|
|
251
|
-
type:
|
|
252
|
-
description:
|
|
238
|
+
type: 'string',
|
|
239
|
+
description: 'Director ID or officer title',
|
|
253
240
|
},
|
|
254
|
-
noticeDate: { type:
|
|
255
|
-
agenda: { type:
|
|
241
|
+
noticeDate: { type: 'string', format: 'date' },
|
|
242
|
+
agenda: { type: 'array', items: { type: 'string' } },
|
|
256
243
|
waiverOfNotice: {
|
|
257
|
-
type:
|
|
244
|
+
type: 'boolean',
|
|
258
245
|
default: false,
|
|
259
|
-
description:
|
|
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: [
|
|
252
|
+
required: ['directorId', 'present'],
|
|
266
253
|
properties: {
|
|
267
|
-
directorId: { type:
|
|
268
|
-
present: { type:
|
|
269
|
-
arrivedAt: { type:
|
|
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:
|
|
274
|
-
required: [
|
|
260
|
+
description: 'Officially open the board meeting once quorum is established',
|
|
261
|
+
required: ['openedAt'],
|
|
275
262
|
properties: {
|
|
276
|
-
openedAt: { type:
|
|
263
|
+
openedAt: { type: 'string', format: 'date-time' },
|
|
277
264
|
chairPresiding: {
|
|
278
|
-
type:
|
|
279
|
-
description:
|
|
265
|
+
type: 'string',
|
|
266
|
+
description: 'Director ID presiding',
|
|
280
267
|
},
|
|
281
268
|
},
|
|
282
269
|
},
|
|
283
270
|
director_departs: {
|
|
284
|
-
description:
|
|
285
|
-
required: [
|
|
271
|
+
description: 'Record a director leaving the meeting (may affect quorum)',
|
|
272
|
+
required: ['directorId', 'departedAt'],
|
|
286
273
|
properties: {
|
|
287
|
-
directorId: { type:
|
|
288
|
-
departedAt: { type:
|
|
274
|
+
directorId: { type: 'string' },
|
|
275
|
+
departedAt: { type: 'string', format: 'date-time' },
|
|
289
276
|
},
|
|
290
277
|
},
|
|
291
278
|
quorum_lost: {
|
|
292
|
-
description:
|
|
293
|
-
required: [
|
|
279
|
+
description: 'Automatic transition when quorum is lost during meeting',
|
|
280
|
+
required: ['lostAt'],
|
|
294
281
|
properties: {
|
|
295
|
-
lostAt: { type:
|
|
282
|
+
lostAt: { type: 'string', format: 'date-time' },
|
|
296
283
|
},
|
|
297
284
|
},
|
|
298
285
|
quorum_restored: {
|
|
299
|
-
description:
|
|
300
|
-
required: [
|
|
286
|
+
description: 'Quorum restored after additional director(s) join',
|
|
287
|
+
required: ['restoredAt', 'directorId'],
|
|
301
288
|
properties: {
|
|
302
|
-
restoredAt: { type:
|
|
303
|
-
directorId: { type:
|
|
289
|
+
restoredAt: { type: 'string', format: 'date-time' },
|
|
290
|
+
directorId: { type: 'string', description: 'Joining director' },
|
|
304
291
|
},
|
|
305
292
|
},
|
|
306
293
|
adjourn: {
|
|
307
|
-
description:
|
|
308
|
-
required: [
|
|
294
|
+
description: 'Adjourn the board meeting',
|
|
295
|
+
required: ['closedAt'],
|
|
309
296
|
properties: {
|
|
310
|
-
closedAt: { type:
|
|
297
|
+
closedAt: { type: 'string', format: 'date-time' },
|
|
311
298
|
minutesRef: {
|
|
312
|
-
type:
|
|
313
|
-
description:
|
|
299
|
+
type: 'string',
|
|
300
|
+
description: 'Reference to meeting minutes document',
|
|
314
301
|
},
|
|
315
|
-
resolutionsPassed: { type:
|
|
302
|
+
resolutionsPassed: { type: 'array', items: { type: 'string' } },
|
|
316
303
|
adjournedTo: {
|
|
317
|
-
type:
|
|
318
|
-
format:
|
|
304
|
+
type: 'string',
|
|
305
|
+
format: 'date-time',
|
|
319
306
|
nullable: true,
|
|
320
|
-
description:
|
|
307
|
+
description: 'If adjourning to later date',
|
|
321
308
|
},
|
|
322
309
|
},
|
|
323
310
|
},
|
|
324
311
|
update_seats: {
|
|
325
|
-
description:
|
|
326
|
-
required: [
|
|
312
|
+
description: 'Change the number of authorized board seats (requires bylaw amendment)',
|
|
313
|
+
required: ['newAuthorizedSeats', 'bylawAmendmentRef'],
|
|
327
314
|
properties: {
|
|
328
|
-
newAuthorizedSeats: { type:
|
|
329
|
-
bylawAmendmentRef: { type:
|
|
315
|
+
newAuthorizedSeats: { type: 'integer' },
|
|
316
|
+
bylawAmendmentRef: { type: 'string' },
|
|
330
317
|
},
|
|
331
318
|
},
|
|
332
319
|
},
|
|
333
320
|
definitions: {
|
|
334
321
|
Director: {
|
|
335
|
-
type:
|
|
322
|
+
type: 'object',
|
|
336
323
|
properties: {
|
|
337
|
-
directorId: { type:
|
|
338
|
-
name: { type:
|
|
339
|
-
email: { type:
|
|
340
|
-
termStart: { type:
|
|
341
|
-
termEnd: { type:
|
|
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:
|
|
344
|
-
enum: [
|
|
330
|
+
type: 'string',
|
|
331
|
+
enum: ['CLASS_I', 'CLASS_II', 'CLASS_III', 'UNCLASSIFIED'],
|
|
345
332
|
},
|
|
346
333
|
status: {
|
|
347
|
-
type:
|
|
348
|
-
enum: [
|
|
334
|
+
type: 'string',
|
|
335
|
+
enum: ['ACTIVE', 'RESIGNED', 'REMOVED', 'TERM_EXPIRED'],
|
|
349
336
|
},
|
|
350
337
|
isIndependent: {
|
|
351
|
-
type:
|
|
352
|
-
description:
|
|
338
|
+
type: 'boolean',
|
|
339
|
+
description: 'Independence under applicable rules',
|
|
353
340
|
},
|
|
354
|
-
isChair: { type:
|
|
355
|
-
isLeadIndependent: { type:
|
|
341
|
+
isChair: { type: 'boolean', default: false },
|
|
342
|
+
isLeadIndependent: { type: 'boolean', default: false },
|
|
356
343
|
committees: {
|
|
357
|
-
type:
|
|
358
|
-
items: { type:
|
|
359
|
-
description:
|
|
344
|
+
type: 'array',
|
|
345
|
+
items: { type: 'string' },
|
|
346
|
+
description: 'Committee memberships by committee ID',
|
|
360
347
|
},
|
|
361
348
|
electedBy: {
|
|
362
|
-
type:
|
|
363
|
-
description:
|
|
349
|
+
type: 'string',
|
|
350
|
+
description: 'Resolution reference for election',
|
|
364
351
|
},
|
|
365
|
-
compensationAgreementRef: { type:
|
|
352
|
+
compensationAgreementRef: { type: 'string', nullable: true },
|
|
366
353
|
},
|
|
367
354
|
},
|
|
368
355
|
Meeting: {
|
|
369
|
-
type:
|
|
356
|
+
type: 'object',
|
|
370
357
|
nullable: true,
|
|
371
358
|
properties: {
|
|
372
|
-
meetingId: { type:
|
|
359
|
+
meetingId: { type: 'string' },
|
|
373
360
|
type: {
|
|
374
|
-
type:
|
|
375
|
-
enum: [
|
|
361
|
+
type: 'string',
|
|
362
|
+
enum: ['REGULAR', 'SPECIAL', 'ANNUAL', 'ORGANIZATIONAL'],
|
|
376
363
|
},
|
|
377
|
-
scheduledDate: { type:
|
|
378
|
-
location: { type:
|
|
379
|
-
isVirtual: { type:
|
|
380
|
-
calledBy: { type:
|
|
381
|
-
noticeDate: { type:
|
|
382
|
-
agenda: { type:
|
|
383
|
-
attendees: { type:
|
|
384
|
-
quorumPresent: { type:
|
|
385
|
-
quorumCount: { type:
|
|
386
|
-
openedAt: { type:
|
|
387
|
-
closedAt: { type:
|
|
388
|
-
minutesRef: { type:
|
|
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:
|
|
379
|
+
type: 'object',
|
|
393
380
|
properties: {
|
|
394
|
-
directorId: { type:
|
|
395
|
-
present: { type:
|
|
396
|
-
arrivedAt: { type:
|
|
397
|
-
departedAt: { type:
|
|
398
|
-
viaProxy: { type:
|
|
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:
|
|
389
|
+
type: 'object',
|
|
403
390
|
properties: {
|
|
404
|
-
meetingId: { type:
|
|
405
|
-
type: { type:
|
|
406
|
-
date: { type:
|
|
407
|
-
quorumAchieved: { type:
|
|
408
|
-
attendeeCount: { type:
|
|
409
|
-
resolutionsPassed: { type:
|
|
410
|
-
minutesRef: { type:
|
|
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:
|
|
403
|
+
id: 'ACTIVE',
|
|
417
404
|
isFinal: false,
|
|
418
|
-
description:
|
|
405
|
+
description: 'Board is constituted and able to conduct business. Default state between meetings.',
|
|
419
406
|
},
|
|
420
407
|
IN_MEETING: {
|
|
421
|
-
id:
|
|
408
|
+
id: 'IN_MEETING',
|
|
422
409
|
isFinal: false,
|
|
423
|
-
description:
|
|
410
|
+
description: 'Board meeting is in session with quorum present. Can take formal actions.',
|
|
424
411
|
},
|
|
425
412
|
QUORUM_LOST: {
|
|
426
|
-
id:
|
|
413
|
+
id: 'QUORUM_LOST',
|
|
427
414
|
isFinal: false,
|
|
428
|
-
description:
|
|
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:
|
|
418
|
+
initialState: 'ACTIVE',
|
|
432
419
|
transitions: [
|
|
433
420
|
// ACTIVE -> ACTIVE (elect_director)
|
|
434
421
|
{
|
|
435
|
-
from:
|
|
436
|
-
to:
|
|
437
|
-
eventName:
|
|
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
|
-
{
|
|
442
|
-
{
|
|
428
|
+
{ '>': [{ var: 'state.seats.vacant' }, 0] },
|
|
429
|
+
{ '!=': [{ var: 'event.electionResolutionRef' }, null] },
|
|
443
430
|
{
|
|
444
|
-
|
|
431
|
+
'!': {
|
|
445
432
|
some: [
|
|
446
|
-
{ var:
|
|
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
|
-
{
|
|
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:
|
|
449
|
+
{ var: 'state' },
|
|
466
450
|
{
|
|
467
451
|
directors: {
|
|
468
452
|
merge: [
|
|
469
|
-
{ var:
|
|
453
|
+
{ var: 'state.directors' },
|
|
470
454
|
[
|
|
471
455
|
{
|
|
472
|
-
directorId: { var:
|
|
473
|
-
name: { var:
|
|
474
|
-
email: { var:
|
|
475
|
-
termStart: { var:
|
|
476
|
-
termEnd: { var:
|
|
477
|
-
class: { var:
|
|
478
|
-
status:
|
|
479
|
-
isIndependent: { var:
|
|
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:
|
|
467
|
+
electedBy: { var: 'event.electionResolutionRef' },
|
|
484
468
|
},
|
|
485
469
|
],
|
|
486
470
|
],
|
|
487
471
|
},
|
|
488
472
|
seats: {
|
|
489
473
|
merge: [
|
|
490
|
-
{ var:
|
|
474
|
+
{ var: 'state.seats' },
|
|
491
475
|
{
|
|
492
|
-
filled: {
|
|
493
|
-
vacant: {
|
|
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:
|
|
509
|
-
to:
|
|
510
|
-
eventName:
|
|
490
|
+
from: 'ACTIVE',
|
|
491
|
+
to: 'ACTIVE',
|
|
492
|
+
eventName: 'resign_director',
|
|
511
493
|
guard: {
|
|
512
494
|
some: [
|
|
513
|
-
{ var:
|
|
495
|
+
{ var: 'state.directors' },
|
|
514
496
|
{
|
|
515
497
|
and: [
|
|
516
|
-
{
|
|
517
|
-
{
|
|
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:
|
|
506
|
+
{ var: 'state' },
|
|
525
507
|
{
|
|
526
508
|
directors: {
|
|
527
509
|
map: [
|
|
528
|
-
{ var:
|
|
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:
|
|
542
|
-
termEnd: { var:
|
|
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:
|
|
532
|
+
{ var: 'state.seats' },
|
|
554
533
|
{
|
|
555
|
-
filled: {
|
|
556
|
-
vacant: {
|
|
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:
|
|
571
|
-
to:
|
|
572
|
-
eventName:
|
|
547
|
+
from: 'IN_MEETING',
|
|
548
|
+
to: 'ACTIVE',
|
|
549
|
+
eventName: 'resign_director',
|
|
573
550
|
guard: {
|
|
574
551
|
some: [
|
|
575
|
-
{ var:
|
|
552
|
+
{ var: 'state.directors' },
|
|
576
553
|
{
|
|
577
554
|
and: [
|
|
578
|
-
{
|
|
579
|
-
{
|
|
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:
|
|
563
|
+
{ var: 'state' },
|
|
587
564
|
{
|
|
588
565
|
directors: {
|
|
589
566
|
map: [
|
|
590
|
-
{ var:
|
|
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:
|
|
604
|
-
termEnd: { var:
|
|
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:
|
|
589
|
+
{ var: 'state.seats' },
|
|
616
590
|
{
|
|
617
|
-
filled: {
|
|
618
|
-
vacant: {
|
|
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:
|
|
635
|
-
to:
|
|
636
|
-
eventName:
|
|
606
|
+
from: 'ACTIVE',
|
|
607
|
+
to: 'ACTIVE',
|
|
608
|
+
eventName: 'propose_removal',
|
|
637
609
|
guard: {
|
|
638
610
|
and: [
|
|
639
|
-
(0, guards_js_1.signerInSet)(
|
|
611
|
+
(0, guards_js_1.signerInSet)('state.authorizedRemovers'),
|
|
640
612
|
{
|
|
641
613
|
some: [
|
|
642
|
-
{ var:
|
|
614
|
+
{ var: 'state.directors' },
|
|
643
615
|
{
|
|
644
616
|
and: [
|
|
645
|
-
{
|
|
646
|
-
{
|
|
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:
|
|
627
|
+
{ var: 'state' },
|
|
656
628
|
{
|
|
657
629
|
pendingRemoval: {
|
|
658
|
-
directorId: { var:
|
|
659
|
-
cause: { var:
|
|
660
|
-
resolutionRef: { var:
|
|
661
|
-
proposedAt: { var:
|
|
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:
|
|
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:
|
|
674
|
-
to:
|
|
675
|
-
eventName:
|
|
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)(
|
|
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)(
|
|
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:
|
|
661
|
+
{ var: 'state.directors' },
|
|
693
662
|
{
|
|
694
663
|
and: [
|
|
695
664
|
{
|
|
696
|
-
|
|
665
|
+
'==': [{ var: 'directorId' }, { var: 'event.directorId' }],
|
|
697
666
|
},
|
|
698
|
-
{
|
|
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:
|
|
676
|
+
{ var: 'state' },
|
|
708
677
|
{
|
|
709
678
|
directors: {
|
|
710
679
|
map: [
|
|
711
|
-
{ var:
|
|
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:
|
|
725
|
-
termEnd: { var:
|
|
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:
|
|
702
|
+
{ var: 'state.seats' },
|
|
737
703
|
{
|
|
738
|
-
filled: {
|
|
739
|
-
vacant: {
|
|
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:
|
|
758
|
-
to:
|
|
759
|
-
eventName:
|
|
721
|
+
from: 'ACTIVE',
|
|
722
|
+
to: 'ACTIVE',
|
|
723
|
+
eventName: 'designate_chair',
|
|
760
724
|
guard: {
|
|
761
725
|
some: [
|
|
762
|
-
{ var:
|
|
726
|
+
{ var: 'state.directors' },
|
|
763
727
|
{
|
|
764
728
|
and: [
|
|
765
|
-
{
|
|
766
|
-
{
|
|
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:
|
|
737
|
+
{ var: 'state' },
|
|
774
738
|
{
|
|
775
739
|
directors: {
|
|
776
740
|
map: [
|
|
777
|
-
{ var:
|
|
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:
|
|
800
|
-
to:
|
|
801
|
-
eventName:
|
|
760
|
+
from: 'ACTIVE',
|
|
761
|
+
to: 'ACTIVE',
|
|
762
|
+
eventName: 'call_meeting',
|
|
802
763
|
guard: {
|
|
803
764
|
and: [
|
|
804
765
|
{
|
|
805
766
|
or: [
|
|
806
|
-
{
|
|
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
|
-
{
|
|
823
|
-
{
|
|
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:
|
|
788
|
+
{ var: 'state' },
|
|
831
789
|
{
|
|
832
790
|
currentMeeting: {
|
|
833
|
-
meetingId: { var:
|
|
834
|
-
type: { var:
|
|
835
|
-
scheduledDate: { var:
|
|
836
|
-
location: { var:
|
|
837
|
-
isVirtual: { var:
|
|
838
|
-
calledBy: { var:
|
|
839
|
-
noticeDate: { var:
|
|
840
|
-
agenda: { var:
|
|
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:
|
|
857
|
-
to:
|
|
858
|
-
eventName:
|
|
812
|
+
from: 'ACTIVE',
|
|
813
|
+
to: 'ACTIVE',
|
|
814
|
+
eventName: 'record_attendance',
|
|
859
815
|
guard: {
|
|
860
816
|
and: [
|
|
861
|
-
{
|
|
862
|
-
{
|
|
817
|
+
{ '!=': [{ var: 'state.currentMeeting' }, null] },
|
|
818
|
+
{ '==': [{ var: 'state.currentMeeting.openedAt' }, null] },
|
|
863
819
|
{
|
|
864
820
|
some: [
|
|
865
|
-
{ var:
|
|
821
|
+
{ var: 'state.directors' },
|
|
866
822
|
{
|
|
867
823
|
and: [
|
|
868
824
|
{
|
|
869
|
-
|
|
825
|
+
'==': [{ var: 'directorId' }, { var: 'event.directorId' }],
|
|
870
826
|
},
|
|
871
|
-
{
|
|
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:
|
|
836
|
+
{ var: 'state' },
|
|
881
837
|
{
|
|
882
838
|
currentMeeting: {
|
|
883
839
|
merge: [
|
|
884
|
-
{ var:
|
|
840
|
+
{ var: 'state.currentMeeting' },
|
|
885
841
|
{
|
|
886
842
|
attendees: {
|
|
887
843
|
merge: [
|
|
888
|
-
{ var:
|
|
844
|
+
{ var: 'state.currentMeeting.attendees' },
|
|
889
845
|
[
|
|
890
846
|
{
|
|
891
|
-
directorId: { var:
|
|
892
|
-
present: { var:
|
|
893
|
-
arrivedAt: { var:
|
|
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:
|
|
909
|
-
to:
|
|
910
|
-
eventName:
|
|
864
|
+
from: 'ACTIVE',
|
|
865
|
+
to: 'IN_MEETING',
|
|
866
|
+
eventName: 'open_meeting',
|
|
911
867
|
guard: {
|
|
912
868
|
and: [
|
|
913
|
-
{
|
|
914
|
-
{
|
|
915
|
-
{
|
|
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:
|
|
876
|
+
{ var: 'state' },
|
|
921
877
|
{
|
|
922
|
-
status:
|
|
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:
|
|
941
|
-
to:
|
|
942
|
-
eventName:
|
|
943
|
-
guard: {
|
|
891
|
+
from: 'IN_MEETING',
|
|
892
|
+
to: 'IN_MEETING',
|
|
893
|
+
eventName: 'director_departs',
|
|
894
|
+
guard: { '==': [1, 1] },
|
|
944
895
|
effect: {
|
|
945
896
|
merge: [
|
|
946
|
-
{ var:
|
|
897
|
+
{ var: 'state' },
|
|
947
898
|
{
|
|
948
899
|
currentMeeting: {
|
|
949
900
|
merge: [
|
|
950
|
-
{ var:
|
|
901
|
+
{ var: 'state.currentMeeting' },
|
|
951
902
|
{
|
|
952
903
|
attendees: {
|
|
953
904
|
map: [
|
|
954
|
-
{ var:
|
|
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:
|
|
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:
|
|
987
|
-
to:
|
|
988
|
-
eventName:
|
|
989
|
-
guard: {
|
|
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:
|
|
993
|
-
{ status:
|
|
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:
|
|
1005
|
-
to:
|
|
1006
|
-
eventName:
|
|
1007
|
-
guard: {
|
|
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:
|
|
1011
|
-
{ status:
|
|
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:
|
|
1023
|
-
to:
|
|
1024
|
-
eventName:
|
|
1025
|
-
guard: {
|
|
966
|
+
from: 'IN_MEETING',
|
|
967
|
+
to: 'ACTIVE',
|
|
968
|
+
eventName: 'adjourn',
|
|
969
|
+
guard: { '==': [1, 1] },
|
|
1026
970
|
effect: {
|
|
1027
971
|
merge: [
|
|
1028
|
-
{ var:
|
|
972
|
+
{ var: 'state' },
|
|
1029
973
|
{
|
|
1030
|
-
status:
|
|
974
|
+
status: 'ACTIVE',
|
|
1031
975
|
currentMeeting: null,
|
|
1032
976
|
meetingHistory: {
|
|
1033
977
|
merge: [
|
|
1034
|
-
{ var:
|
|
978
|
+
{ var: 'state.meetingHistory' },
|
|
1035
979
|
[
|
|
1036
980
|
{
|
|
1037
|
-
meetingId: { var:
|
|
1038
|
-
type: { var:
|
|
1039
|
-
date: { var:
|
|
981
|
+
meetingId: { var: 'state.currentMeeting.meetingId' },
|
|
982
|
+
type: { var: 'state.currentMeeting.type' },
|
|
983
|
+
date: { var: 'state.currentMeeting.scheduledDate' },
|
|
1040
984
|
quorumAchieved: {
|
|
1041
|
-
var:
|
|
985
|
+
var: 'state.currentMeeting.quorumPresent',
|
|
1042
986
|
},
|
|
1043
|
-
attendeeCount: { var:
|
|
1044
|
-
resolutionsPassed: { var:
|
|
1045
|
-
minutesRef: { var:
|
|
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:
|
|
1062
|
-
to:
|
|
1063
|
-
eventName:
|
|
1064
|
-
guard: {
|
|
1003
|
+
from: 'QUORUM_LOST',
|
|
1004
|
+
to: 'ACTIVE',
|
|
1005
|
+
eventName: 'adjourn',
|
|
1006
|
+
guard: { '==': [1, 1] },
|
|
1065
1007
|
effect: {
|
|
1066
1008
|
merge: [
|
|
1067
|
-
{ var:
|
|
1009
|
+
{ var: 'state' },
|
|
1068
1010
|
{
|
|
1069
|
-
status:
|
|
1011
|
+
status: 'ACTIVE',
|
|
1070
1012
|
currentMeeting: null,
|
|
1071
1013
|
meetingHistory: {
|
|
1072
1014
|
merge: [
|
|
1073
|
-
{ var:
|
|
1015
|
+
{ var: 'state.meetingHistory' },
|
|
1074
1016
|
[
|
|
1075
1017
|
{
|
|
1076
|
-
meetingId: { var:
|
|
1077
|
-
type: { var:
|
|
1078
|
-
date: { var:
|
|
1018
|
+
meetingId: { var: 'state.currentMeeting.meetingId' },
|
|
1019
|
+
type: { var: 'state.currentMeeting.type' },
|
|
1020
|
+
date: { var: 'state.currentMeeting.scheduledDate' },
|
|
1079
1021
|
quorumAchieved: {
|
|
1080
|
-
var:
|
|
1022
|
+
var: 'state.currentMeeting.quorumPresent',
|
|
1081
1023
|
},
|
|
1082
|
-
attendeeCount: { var:
|
|
1083
|
-
resolutionsPassed: { var:
|
|
1084
|
-
minutesRef: { var:
|
|
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:
|
|
1101
|
-
to:
|
|
1102
|
-
eventName:
|
|
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:
|
|
1048
|
+
{ var: 'state' },
|
|
1112
1049
|
{
|
|
1113
1050
|
seats: {
|
|
1114
1051
|
merge: [
|
|
1115
|
-
{ var:
|
|
1052
|
+
{ var: 'state.seats' },
|
|
1116
1053
|
{
|
|
1117
|
-
authorized: { var:
|
|
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
|
],
|