Compute · Assess & Decide · Analysis & Finance
Compute Founder Vesting Acceleration Payout on Change of Control
A precise breakdown of how many founder shares vest at a change-of-control event under the grant's acceleration terms, so the founder knows their stake before signing.
You receive: A pure function: given total grant, vesting term/cliff, time elapsed at the event, the acceleration type (single/double trigger), the acceleration percentage of remaining unvested shares, and whether the founder is also terminated, it returns sharesVestedBeforeEvent, sharesAcceleratedAtEvent, sharesStillUnvested, and totalVestedAfterEvent.
Part of Choose Business Model
What's verified: STUD verifies the acceleration arithmetic against the grant terms supplied. It does NOT decide whether single- or double-trigger is the right deal, whether the acceleration terms will be accepted by an acquirer or investors, or interpret the actual legal stock agreement; it computes the share counts implied by the parameters the buyer froze.
Opens soon
This objective is verified and ready. It opens soon, once sign-in and payments are live.
Deliverable interface
The exact vocabulary the automated check enforces: keys, tokens, entry points, and worked examples. Generated from the verification source.
{
"constants": {},
"entryName": "compute_vesting_acceleration",
"expectNote": "expect is the comparison-space value (your return value goes through normalize first when one is published)",
"hiddenCaseCount": 18,
"hiddenCaseNames": [
"cover_single_no",
"cover_single_yes",
"cover_double_no",
"cover_double_yes",
"cover_precliff",
"cover_zero_accel",
"gen0",
"gen1",
"gen2",
"gen3",
"gen4",
"gen5",
"gen6",
"gen7",
"gen8",
"gen9",
"gen10",
"gen11"
],
"inputKeys": [
"accelerationPctOfRemaining",
"cliffMonths",
"founderTerminated",
"monthsElapsedAtEvent",
"totalGrantShares",
"triggerType",
"vestingMonths"
],
"normalizeSource": "def _normalize_founder_vesting_acceleration_payout(r):\n if not isinstance(r, dict): return r\n def i(x): return None if x is None else int(round(float(x)))\n return {\"sharesVestedBeforeEvent\": i(r.get(\"sharesVestedBeforeEvent\")), \"sharesAcceleratedAtEvent\": i(r.get(\"sharesAcceleratedAtEvent\")),\n \"sharesStillUnvested\": i(r.get(\"sharesStillUnvested\")), \"totalVestedAfterEvent\": i(r.get(\"totalVestedAfterEvent\"))}\n",
"returnShapes": [
[
"sharesAcceleratedAtEvent",
"sharesStillUnvested",
"sharesVestedBeforeEvent",
"totalVestedAfterEvent"
]
],
"signature": "def compute_vesting_acceleration(inp):",
"submission": "python exposing the entry function; inp is one input object; graded on held-out cases",
"tier": "calculator",
"visibleCases": [
{
"expect": {
"sharesAcceleratedAtEvent": 250000,
"sharesStillUnvested": 250000,
"sharesVestedBeforeEvent": 500000,
"totalVestedAfterEvent": 750000
},
"input": {
"accelerationPctOfRemaining": 50,
"cliffMonths": 12,
"founderTerminated": "no",
"monthsElapsedAtEvent": 24,
"totalGrantShares": 1000000,
"triggerType": "single",
"vestingMonths": 48
},
"name": "single_50pct"
},
{
"expect": {
"sharesAcceleratedAtEvent": 0,
"sharesStillUnvested": 500000,
"sharesVestedBeforeEvent": 500000,
"totalVestedAfterEvent": 500000
},
"input": {
"accelerationPctOfRemaining": 100,
"cliffMonths": 12,
"founderTerminated": "no",
"monthsElapsedAtEvent": 24,
"totalGrantShares": 1000000,
"triggerType": "double",
"vestingMonths": 48
},
"name": "double_notfired"
},
{
"expect": {
"sharesAcceleratedAtEvent": 500000,
"sharesStillUnvested": 0,
"sharesVestedBeforeEvent": 500000,
"totalVestedAfterEvent": 1000000
},
"input": {
"accelerationPctOfRemaining": 100,
"cliffMonths": 12,
"founderTerminated": "yes",
"monthsElapsedAtEvent": 24,
"totalGrantShares": 1000000,
"triggerType": "double",
"vestingMonths": 48
},
"name": "double_fired"
},
{
"expect": {
"sharesAcceleratedAtEvent": 200000,
"sharesStillUnvested": 200000,
"sharesVestedBeforeEvent": 0,
"totalVestedAfterEvent": 200000
},
"input": {
"accelerationPctOfRemaining": 50,
"cliffMonths": 12,
"founderTerminated": "no",
"monthsElapsedAtEvent": 6,
"totalGrantShares": 400000,
"triggerType": "single",
"vestingMonths": 48
},
"name": "precliff_single"
}
],
"vocabulary": [
"1",
"accelerationPctOfRemaining",
"cliffMonths",
"double",
"founderTerminated",
"monthsElapsedAtEvent",
"sharesAcceleratedAtEvent",
"sharesStillUnvested",
"sharesVestedBeforeEvent",
"single",
"totalGrantShares",
"totalVestedAfterEvent",
"triggerType",
"true",
"vestingMonths",
"y",
"yes"
]
}Get early access to STUD the day it goes live.