Open-Cap-Table-Coalition / Open-Cap-Format-OCF

Open Cap Format (OCF) - The Open Source Company Capitalization Data Standard. OCF can be used to structure and track the complex data structures necessary to build and maintain accurate capitalization (cap) tables.
https://opencaptablecoalition.com
Other
143 stars 28 forks source link

[Enhancement]: Proposal to Make `current_relationship` on Stakeholder a list #373

Open JSv4 opened 1 year ago

JSv4 commented 1 year ago

Description of Enhancement :

This was discussed quite some time ago (over a year). We debated making relationship a multi-select and decided against it. I'm remembering now that it may have been related to not having the version history for changes to that field and concerns about the list going stale. Think there was also some concern with not all vendors having this information and, if they export a single relationship, it would not be clear whether this is the entirety of the relationships a given stakeholder has or whether the vendor just doesn't track it. Anyway, there is a lot of interest in the legal working group having a list for this field, possibly making it a list of objects with start and end dates for the various relationship objs.

Why is this Needed?

Lot of interest in having more data in this field, particularly because current approach is known to be unable to capture common situations - e.g. ex-employee who becomes an adviser or someone who is a board member and then becomes an investor. An issue here, again, is all vendors may not have this.

Anything else we need to know?

pjohnmeyer commented 1 year ago

In order to make this change in a non-breaking way, we would change the Stakeholder model to allow one field or the other:

  1. The existing field, current_relationship OR
  2. A new array field, relationships which will contain 1 or more StakeholderRelationship entries with the shape: a. type: StakeholderRelationshipType enum b. start_date c. end_date

Neither 1 or 2 will be required, although 2 will be necessary for high-quality OCX output.

We would then desire a way to "remember" to eliminate 1 when we make a 2.0 release.

JSv4 commented 1 year ago

To track the deprecations, let's use a GitHub issue.

Versioning we're planning to use major changes for breaking changes.

Some questions:

  1. How often do we release breaking changes?
    1. How do we define a breaking change? Validations fail.
  2. Do we issue breaking changes periodically? Based on volume?
  3. Do we want to have versions on an object level? This would be more advantageous for maintaining backwards compatibility.
    1. Where would we put the version codes?
      1. We should only do this for objects.
    2. would we put the versions in API endpoints?

TODO - build this change with mind towards fleshing out what object-level versioning looks like.

naveedn commented 1 year ago

I have some thoughts on a potential approach we could take:

I'll edit this comment later with a hypothetical schema for how this transaction could look like.

JSv4 commented 1 year ago

Per TWG discussion, it doesn't seem like this is actually required for OCX at all. If not, let's punt this to when we do version control / change logs for all objects (which we intentionally decided not to add to v 1.0.0).

Full list of discussion points from the meeting:

  1. We might want to update enum to track employees of subs
  2. @naveedn's proposal still doesn't engage with we might want to track multiple positions at once so a list here probably makes sense
  3. @naveedn's proposal makes sense IF this is in support of OCX. If not, let's revisit changes 2 and 3. Per @arthur-clara's point, though, 1 is pretty simple and may make sense as a very simple update now (just update the enums)
JSv4 commented 1 year ago

Discussion re: supporting multiple positions simultaneously:

JSv4 commented 1 year ago

Revisiting this after a long while... since we've opened up issuer events, I'd say let's just go with stakeholder events too and do this right. An event-based system an ADD_RELATIONSHIP and REMOVE_RELATIONSHIP event seems right to me.

pjohnmeyer commented 1 year ago

Unassigning myself for now; I may return to this but I don't want to be perceived as a blocker.

JSv4 commented 2 weeks ago

Will also be relevant for ISO/NSO split.