Skip to content

Enforce vesting condition graph integrity - #254

Merged
HardlyDifficult merged 356 commits into
mainfrom
codex/ocf-vesting-graph-integrity
Jul 23, 2026
Merged

Enforce vesting condition graph integrity#254
HardlyDifficult merged 356 commits into
mainfrom
codex/ocf-vesting-graph-integrity

Conversation

@HardlyDifficult

@HardlyDifficult HardlyDifficult commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Summary

Standalone on main.

This enforces the OCF-supported integrity rules for references inside a VESTING_TERMS condition graph:

  • condition IDs are unique so references resolve unambiguously
  • each next_condition_ids array is unique and every ID resolves in the same terms object
  • each relative_to_condition_id resolves in the same terms object
  • neither reference form may reference its own condition
  • the combined navigation/dependency graph is acyclic

It deliberately does not treat the first array item as a universal root or require every condition to be reachable from it. It also does not require a relative anchor to be a direct predecessor or dominate every path, and it does not add a global VESTING_START_DATE cardinality rule. Those assumptions are not universal requirements in the official OCF sources and rejected valid independent acceleration and milestone branches in existing data.

OCF basis

Data audit

The original broader implementation rejected 16/76 development and 2/51 production vesting-terms objects. Fourteen development and both production cases were independent acceleration/milestone branches or array-order patterns that this revision now accepts.

Two development-only objects still contain genuine dangling relative_to_condition_id = "vesting-start" references and should fail until the source data is corrected:

  • portal 0c5d1a65-9826-47fe-9218-b785dca1a874, object 5f79f615-ecb1-4dac-a403-04dc98343e52
  • portal 490ebb25-e314-45d4-bb17-a441f562e73f, object 3583e335-c1f9-4412-9ce0-58fd196b29fd

Adding a missing condition is not an automatic lossless repair because OCF requires that new condition to specify a vesting quantity or portion and its graph placement. No database changes were made.

The exact LocalNet replays linked in the comments ran against the former broader head and must be rerun for this revision before final review.

Package

  • Base: main
  • Mutable candidate: OpenCapTable-v34 0.0.3
  • Exact head: 30bdc521c9f79340147ef3f68336393f0682bae5

Local validation

  • npm run build passed, including compilation of the focused Daml scripts
  • npm run check:dar-version-policy -- --base origin/main passed
  • npm run verify-dars passed (3/3)
  • npm run lint:daml passed with no hints
  • git diff --check passed
  • Direct Daml script execution could not start locally because this machine has no Java runtime; CI is the execution gate

Current standalone readiness evidence

Exact head: 73dadbb794d5d226e1c69ad80c652f59d8d67301
Current base: main at 6ac5d1099104446abfe48b5aac556a90376e3ab7

  • Merged current main normally; the net PR diff remains four files: vesting graph validation, focused tests, the combined undeployed 0.0.3 DAR, and dars.lock.
  • Combined DAR SHA-256: eb42ff84fa27f8d7006f40fef367a5597a90c135f2f27b58a6ccc5a57e70d032.
  • Local full DAML suite, build, DAML lint, DAR integrity/version policy, and 0.0.2 -> 0.0.3 upgrade compatibility pass.
  • Exact-head CI passes in 3m21s.

Read-only data audit

  • Production: 51 vesting-terms objects; 0 violations.
  • Development: 76 vesting-terms objects; 2 violations, both missing the same referenced vesting-start condition:
    • portal 0c5d1a65-9826-47fe-9218-b785dca1a874 (test), object 5f79f615-ecb1-4dac-a403-04dc98343e52
    • portal 490ebb25-e314-45d4-bb17-a441f562e73f (Thresh Power), object 3583e335-c1f9-4412-9ce0-58fd196b29fd

The guarded dev-only repair has now appended version 4 for both objects. Each new version only prepends a zero-quantity VESTING_START_DATE condition named vesting-start, pointing to cliff-vesting; independent read-only verification confirms the prior conditions and all other payload fields are unchanged. The latest data audit now finds 0 violations in development and 0 in production.

Exact-head LocalNet replay evidence

  • Development: passed. Every source object passed strict raw OCF schema validation and the resulting cap table converged. Replay duration: 12m20s. Traffic: 8.264 MB, equivalent to $137.77 at the observed LocalNet price.
  • Production: only the known baseline phases batch, conversion, and schema failed, identical to the immediately preceding baseline. The read-only graph audit remains 0/51 violations, so this PR adds no production data issue. Replay duration: 4m43s. Traffic: 3.667 MB, equivalent to $61.14.
  • The first dev attempt surfaced two unrelated equity-compensation rows inserted earlier the same day without the OCF-required termination_exercise_windows property. Guarded version 2 rows added the semantically empty value [] and changed no other payload data; a fresh strict-schema audit then found 0 issues across all 7,853 latest dev objects before the passing replay.
  • Exact-head Copilot, Cursor, and Codex reviews are complete; all review threads are resolved.

Note

Medium Risk
Stricter on-ledger validation can block creates/edits that previously passed (e.g. dangling relative refs in dev data); impact is limited to vesting terms integrity, not auth or payments.

Overview
Vesting terms create and edit paths now reject invalid OCF condition graphs via validateOcfVestingConditionGraph wired into validateOcfVestingTermsData (and thus the VestingTerms template ensure).

The new checks require unique condition IDs, unique and resolvable next_condition_ids, resolvable relative_to_condition_id (not self), and an acyclic combined graph built from next_condition_ids plus relative-trigger dependencies. The rules intentionally do not require a single array root, full reachability, relative anchors as direct predecessors, or a global cap on start-date conditions—matching the narrower OCF-aligned scope described in the PR.

Tests add helpers and many Daml scripts for failure cases (duplicates, dangling refs, cycles, bad edits) and for accepted patterns (independent branches, non-root array order, etc.). The OpenCapTable-v34 0.0.3 DAR and dars.lock are updated to ship the change.

Reviewed by Cursor Bugbot for commit 73dadbb. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds graph-level validation to Daml vesting terms, covering condition references, roots, reachability, relative-trigger dominance, and cycles. It also bumps the package to 0.0.13, updates the Test DAR dependency, refreshes DAR metadata, and adds create/edit validation tests.

Changes

Vesting condition graph validation

Layer / File(s) Summary
Graph validation logic and integration
OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml
Adds graph-validation imports, integrates graph validation into vesting-terms validation, and implements reference, reachability, anchor-dominance, edge, and cycle checks.
Test helpers and graph-validity scenarios
Test/daml/OpenCapTable/TestVestingTerms.daml
Adds reusable constructors and submission wrappers, with negative cases for invalid graphs, a positive event-only root case, and an edit that introduces invalid references.
Package version bump and DAR reference
OpenCapTable-v34/daml.yaml, Test/daml.yaml, dars/OpenCapTable-v34/0.0.13/OpenCapTable-v34.dar
Updates the package version, Test project dependency, and DAR LFS pointer metadata to 0.0.13.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant TestVestingTerms
  participant CT.UpdateCapTable
  participant validateOcfVestingTermsData
  participant validateOcfVestingConditionGraph

  TestVestingTerms->>CT.UpdateCapTable: submit vesting terms create or edit
  CT.UpdateCapTable->>validateOcfVestingTermsData: validate vesting_conditions
  validateOcfVestingTermsData->>validateOcfVestingConditionGraph: validate condition graph
  validateOcfVestingConditionGraph->>validateOcfVestingConditionGraph: check references, reachability, dominance, and cycles
  validateOcfVestingConditionGraph-->>validateOcfVestingTermsData: return graph validity
  validateOcfVestingTermsData-->>CT.UpdateCapTable: return overall validation result
  CT.UpdateCapTable-->>TestVestingTerms: succeed or fail
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding vesting condition graph validation and integrity checks.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/ocf-vesting-graph-integrity

Comment @coderabbitai help to get the list of available commands.

@HardlyDifficult
HardlyDifficult marked this pull request as ready for review July 9, 2026 04:01
@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@copilot review

Copilot AI commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@copilot review

Addressed in 2bd0754: cycle detection now includes relative_to_condition_id edges, and I added a regression test for relative-trigger cycles.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7e6d657d24

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated
Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated
Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated
Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml`:
- Around line 260-268: `vestingConditionHasCycle` currently only uses the
current path, so shared subgraphs are re-walked across branches and can explode
exponentially. Update the DFS in `VestingTerms.daml` to thread an additional
accumulated visited set alongside `path`, marking nodes that have already been
fully explored with no cycle. Use that visited set in the recursive
`vestingConditionHasCycle`/`conditionById` traversal so each
`OcfVestingCondition` is expanded at most once while still detecting back-edges
via the current path.
- Around line 254-268: The edge construction in vestingConditionEdgeIds is
reversed for OcfVestingScheduleRelativeTrigger.relative_to_condition_id, which
makes valid relative chains look cyclic. Update vestingConditionEdgeIds so the
referenced condition points to the current condition instead of appending
relative_to_condition_id to the current node’s outgoing edges, and keep
vestingConditionHasCycle using the corrected graph shape so
validateOcfVestingConditionGraph no longer flags normal schedules as cycles.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 2de591c1-302a-4c30-b9a2-1920dae126e1

📥 Commits

Reviewing files that changed from the base of the PR and between 572b318 and 2bd0754.

⛔ Files ignored due to path filters (1)
  • dars/dars.lock is excluded by !**/*.lock
📒 Files selected for processing (5)
  • OpenCapTable-v34/daml.yaml
  • OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml
  • Test/daml.yaml
  • Test/daml/OpenCapTable/TestVestingTerms.daml
  • dars/OpenCapTable-v34/0.0.7/OpenCapTable-v34.dar

Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated
Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated
@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@copilot review

Copilot AI commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@copilot review

Addressed in 316c6f9 (follow-up commits: a856cd6, 0d8b82f): relative-trigger edges now flow from relative_to_condition_id to the dependent condition for cycle detection, and the vesting fixture now covers a valid start -> c1 chain with c1.relative_to_condition_id = "start".

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@copilot review

Copilot AI commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@copilot review

Addressed with d8a08e6 and follow-up f0d6e90: vesting graph validation now rejects relative triggers unless relative_to_condition_id is an actual predecessor in the next_condition_ids graph, adds a regression test for the non-predecessor case, and uses a visited set in reachability traversal to keep the check efficient.

@HardlyDifficult
HardlyDifficult marked this pull request as draft July 9, 2026 08:01
@HardlyDifficult
HardlyDifficult marked this pull request as ready for review July 9, 2026 08:37
@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

CI is green on the latest head (40ee048). @copilot review

Copilot AI commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

CI is green on the latest head (40ee048). @copilot review

Reviewed the latest head (40ee048) and re-checked CI status for both the stacked base branch and this branch. No additional actionable issues found, so no code changes were needed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 40ee04830b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated
Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml Outdated
@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

CI is green on the latest head (38bc0db). @copilot review

Copilot AI commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

CI is green on the latest head (38bc0db). @copilot review

Reviewed head 38bc0db and checked workflow runs for both codex/ocf-stock-security-balance and codex/ocf-vesting-graph-integrity. CI and Check DAR Integrity are successful for 38bc0db, and I don’t see additional actionable issues to change in this PR.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

Restacked onto the final reviewed head of #253 (c271839b043ff31f55e56448644eccd4b9765e53).

Exact head: 1591822700805a917da2173f3e87c3d17c2a2c2b

Fresh validation on the combined branch:

  • full DAML suite: 610 scripts (608 behavioral + 2 setup)
  • focused vesting-graph suite: 21 scripts (19 behavioral + 2 setup)
  • build, codegen/package verification, formatting, ESLint (0 errors; 2 pre-existing warnings), DAML lint, and git diff --check
  • OCF schema parity: 55/55 object-type mappings clean
  • all 13 committed DARs verified
  • upgrade compatibility: 0.0.12 -> 0.0.13
  • 0.0.13 DAR: 24923ebd1e8699a23d1e5c23ac94ecfd8fd465655fbd13aaa593079a942d0334, 3,193,070 bytes

Keeping this PR in draft until exact-head CI is green.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

CI is green and all 16 review threads are resolved on exact head 1591822700805a917da2173f3e87c3d17c2a2c2b. @copilot review

Copilot AI commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

CI is green and all 16 review threads are resolved on exact head 1591822700805a917da2173f3e87c3d17c2a2c2b. @copilot review

Reviewed exact head 1591822700805a917da2173f3e87c3d17c2a2c2b with focused checks on vesting graph root reachability, relative-trigger predecessor/dominance, and cycle detection. I also verified Actions on both codex/ocf-stock-security-balance and codex/ocf-vesting-graph-integrity; CI and Check DAR Integrity are green for the current SHA. No additional code changes are needed in this PR.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@codex review exact head 1591822700805a917da2173f3e87c3d17c2a2c2b. Copilot completed this exact revision with no findings. Please focus on vesting graph root reachability, relative-trigger predecessor/dominance rules, and cycle detection after the parent restack.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@cursor review Please review exact head 1591822700805a917da2173f3e87c3d17c2a2c2b, focusing on vesting graph reachability, relative-trigger dominance, and cycle detection after the parent restack. Copilot completed this exact revision with no findings.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review exact head 1591822700805a917da2173f3e87c3d17c2a2c2b. Copilot completed this revision with no findings. Please perform the canonical exact-head review.

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

@HardlyDifficult I'll perform a fresh review on exact head 1591822700805a917da2173f3e87c3d17c2a2c2b, focusing on the vesting-condition graph invariants (root/reachability, relative-trigger predecessor and dominance checks, cycle detection, and the single-VESTING_START constraint).

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 1591822. Configure here.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

Reviewed commit: 1591822700

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Collaborator Author

Preliminary OCF validation-policy audit

Policy: OCF Validation Policy

Appears supported

  • Vesting conditions form a documented directed/acyclic graph.
  • Condition IDs and next_condition_ids/relative-condition references must resolve consistently.
  • Schema-declared condition-ID and array uniqueness rules.

Needs line-by-line evidence or narrowing

  • Anchor-dominance, all-path reachability, predecessor-linkage, or root-shape requirements beyond the documented graph model.
  • Any rule that chooses one graph interpretation where OCF permits more than one.

Proposed next step
Keep the core graph/reference checks and discuss the additional reachability rules individually. No merge recommendation yet.

Copy link
Copy Markdown
Collaborator Author

Read-only data/requirement audit — standalone head 56552966f5bd00d1b157083733d057f670ba03e1

A repeatable-read, read-only audit of all latest VESTING_TERMS rows found that the current implementation would reject 16/76 dev rows and 2/51 production rows.

The failures split into two materially different categories:

Genuine dangling-reference data (dev only: 2 rows)

Both objects use VESTING_SCHEDULE_RELATIVE.relative_to_condition_id = "vesting-start" but contain no condition with that ID:

  • portal 0c5d1a65-9826-47fe-9218-b785dca1a874, object 5f79f615-ecb1-4dac-a403-04dc98343e52
  • portal 490ebb25-e314-45d4-bb17-a441f562e73f, object 3583e335-c1f9-4412-9ce0-58fd196b29fd

These are real semantic reference issues. They are not safe to repair automatically because adding a missing vesting condition requires deciding its vesting quantity/portion and graph placement.

Likely over-broad contract rule (14 dev, 2 production)

The remaining rows fail only because the PR requires every condition to be reachable from the first array item and applies first-root/anchor-dominance rules:

  • 12 dev rows and production object 6c5d8751-3da2-4e61-9284-1165efd9238c contain a separate double-trigger-acceleration event condition.
  • production object d5e4f3a2-b1c0-4d9e-8f7a-6b5c4d3e2f1b contains three independent milestone event branches.
  • 2 dev rows (vesting-terms_8eb6f9a75f50, vesting-terms_b2f5d9f252be) contain a valid referenced start node later in the array rather than first.

The official VestingTerms.v1 schema describes a graph but does not declare a single root or require reachability from array index 0. VestingCondition.next_condition_ids directly requires unique next IDs; the explainer's first-item discussion is tied to its specific VESTING_START example, not stated as a universal graph rule.

Recommendation: remove/narrow the universal first-root, reachability, and dominance requirements; retain directly supported uniqueness, known-reference, self-reference, and acyclicity checks. After that contract correction, the audit leaves only the two genuine dev dangling-anchor rows above for business-guided repair. No production data correction is indicated by this audit.

Exact dev/production replay runs are in progress and will be linked in a follow-up.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

Exact-head LocalNet replay results

Both databases have now been replayed against exact head 56552966f5bd00d1b157083733d057f670ba03e1:

  • Development: run 29968683713 — failed in batch; 750.843s; 7.936 MB traffic (~$132.29 replacement cost).
  • Production: run 29968684551 — failed in batch, conversion, and schema; 281.086s. The conversion/schema categories are the existing production baseline.

The earlier repeatable-read audit explains the new batch failures:

  • Exactly 2 genuine dangling condition references, development only (relative_to_condition_id = "vesting-start" with no matching condition): objects 5f79f615-ecb1-4dac-a403-04dc98343e52 and 3583e335-c1f9-4412-9ce0-58fd196b29fd.
  • The remaining 14 development + 2 production rejections come from this implementation's universal “first condition is the only root and reaches every condition” model. The official OCF schemas describe a condition graph but do not require a single root, array-index-zero root, universal reachability, or dominance. Valid independent acceleration/milestone branches are therefore rejected.

Conclusion: the replay confirms this PR is not ready to merge as written. Narrow it to OCF-supported invariants (unique IDs, existing references, no self-reference, no cycles), then the remaining data issue should be only the two development dangling references, which require an explicit vesting-condition decision rather than an automatic data rewrite.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

Exact-head production replay after narrowing

Tested contract SHA: 30bdc521c9f79340147ef3f68336393f0682bae5

Conclusion: this narrowed PR introduces no new production data issue. Development still has the two documented dangling relative_to_condition_id = "vesting-start" references, whose intended vesting allocation is not deterministic from the stored data.

…ph-integrity

# Conflicts:
#	dars/OpenCapTable-v34/0.0.3/OpenCapTable-v34.dar
#	dars/dars.lock

Copy link
Copy Markdown
Collaborator Author

@copilot review

Please review exact standalone head 73dadbb794d5d226e1c69ad80c652f59d8d67301. It merges current main, keeps the combined undeployed 0.0.3 candidate, and narrows validation to OCF-supported condition-ID/reference/self-reference/cycle integrity. Exact-head CI and local validation are green.

Copy link
Copy Markdown
Collaborator Author

@cursor review

Please review exact standalone head 73dadbb794d5d226e1c69ad80c652f59d8d67301.

Copy link
Copy Markdown
Collaborator Author

@codex review

Please review exact standalone head 73dadbb794d5d226e1c69ad80c652f59d8d67301, focusing on the narrowed OCF graph semantics after merging current main.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 73dadbb. Configure here.

Copilot AI commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@copilot review

Please review exact standalone head 73dadbb794d5d226e1c69ad80c652f59d8d67301. It merges current main, keeps the combined undeployed 0.0.3 candidate, and narrows validation to OCF-...

Reviewed exact standalone head 73dadbb794d5d226e1c69ad80c652f59d8d67301 with focused checks on vesting-condition graph reachability semantics, relative-trigger predecessor/dominance constraints, and cycle detection (including relative dependency edges) after the main merge. I also verified recent Actions runs for this SHA (CI and Check DAR Integrity) are green. No additional actionable code changes are needed in this PR.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 73dadbb794

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml
Comment thread OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/VestingTerms.daml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants