Skip to content

Enforce instrument temporal eligibility#278

Draft
HardlyDifficult wants to merge 16 commits into
codex/ocf-balance-security-continuityfrom
codex/ocf-instrument-temporal-eligibility
Draft

Enforce instrument temporal eligibility#278
HardlyDifficult wants to merge 16 commits into
codex/ocf-balance-security-continuityfrom
codex/ocf-instrument-temporal-eligibility

Conversation

@HardlyDifficult

@HardlyDifficult HardlyDifficult commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • enforce automatic conversion triggers on their declared date and elective date-range triggers within their inclusive bounds
  • reject duplicate trigger IDs within convertible and warrant issuances so conversion/exercise references resolve unambiguously
  • preserve convertible trigger IDs across transfer, cancellation-balance, and conversion-balance successors
  • require every root convertible and every root non-empty warrant trigger set to retain at least one trigger reachable on or after issuance, while same-instrument successors preserve root-valid trigger terms
  • reject warrant and equity-compensation expiration dates before issuance, trigger terms beyond warrant expiration, exercises after expiration, and successor grants that change inherited expiration
  • validate convertible-note interest schedules for reversed intervals, duplicate starts, explicitly overlapping inclusive intervals, and root accrual before issuance, while preserving OCF's implicit next-rate boundary
  • run these checks against the final cap-table state so later edits cannot invalidate recorded conversions or exercises

OCF requirement references

Validated against Open Cap Format commit dd84bdb6bafb63681c77166f315cea5a2078a4c8:

Coverage

The new behavioral suite covers valid boundaries, duplicate trigger identifiers, unusable root trigger sets, root-valid trigger continuity across convertible and warrant successors, mixed historical/live trigger sets, invalid/overlapping note-rate intervals, OCF-valid implicit next-rate boundaries, input-order independence, edits that would retroactively invalidate historical activity, equity-compensation transfer/cancellation successors that omit or extend the source expiration, and convertible successors that rename inherited trigger IDs. It preserves inherited economic terms and trigger identity across successor securities.

This bumps OpenCapTable-v34 from 0.0.15 to 0.0.16 and includes the versioned DAR plus upgrade verification.

Validation

Exact head: f4eb3714dbf8de2a5de49102db4149fedb874aae

  • npm run build
  • focused temporal-eligibility suite (21 behavioral scripts plus 2 setup scripts passed)
  • focused convertible-balance suite (24 behavioral scripts plus 2 setup scripts passed)
  • npm test (720 DAML scripts passed against Enforce successor security continuity #276 exact head 6925fe65aaee448a1844dd87cc9c9a879447a9f3)
  • npm run lint (0 errors; 2 pre-existing warnings)
  • npm run lint:daml (no hints)
  • npm run format
  • npm run check:schema-gaps -- --ocf-schema-dir /tmp/open-cap-format-ocf-schema-check/schema (55/55 clean)
  • npm run codegen
  • npm run verify-package
  • npm run verify-dars (16 verified; 0.0.16 SHA-256 2556607ba1f16b0df0ed91ef2bbc0877c4250563b8fde0cdc9cb2e99ffbe9928, 3,331,338 bytes; SDK 3.4.10)
  • npm run check-upgrade-compat (0.0.15 -> 0.0.16)
  • git diff --check

Stack

Targets codex/ocf-balance-security-continuity so this PR contains only temporal-consistency enforcement. Retarget to main after the base PR lands.


Note

Medium Risk
Changes cap-table acceptance rules for conversions, exercises, transfers, and edits across multiple instrument types; incorrect edge cases could block valid OCF cap tables or allow bad state until final validation runs.

Overview
Adds temporal eligibility rules across convertibles, warrants, and equity compensation, wired into final cap-table validation so later edits cannot retroactively bless invalid conversions or exercises.

Schema-level validation now rejects duplicate trigger_id values on convertible and warrant issuances, requires elective date ranges to be ordered (start <= end), and validates note interest-rate schedules (sorted non-overlapping intervals, inclusive end before next start, per-rate end ≥ start). Convertible successor continuity compares full trigger lists including IDs (no more stripping trigger_id for equality).

Cap table gains validateInstrumentTemporalEligibility: root convertibles/warrants must keep at least one trigger reachable on or after issuance; trigger terms must respect warrant expiration; conversions/exercises must occur on the correct automatic date or within inclusive elective ranges; equity-compensation successors must preserve source expiration_date. Package bumps to 0.0.16 with tests and versioned DAR.

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

Summary by CodeRabbit

  • New Features

    • Added temporal eligibility checks across convertible instruments, warrants, and equity compensation, including successor continuity and conversion/exercise timing rules.
    • Tightened validation for interest-rate schedules and elective conversion date ranges.
    • Enforced uniqueness of trigger identifiers to prevent duplicate trigger usage.
  • Bug Fixes

    • Rejects invalid interest schedules, out-of-order or overlapping accrual periods, incorrect date boundaries, and renamed triggers during transfers/cancellations.
  • Tests

    • Added new temporal-eligibility test suite and additional success/failure scenarios for conversions, exercises, transfers, cancellations, and trigger uniqueness.
    • Updated the package/version reference to 0.0.16.

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 55 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 0f9e6a53-8b76-442a-ba5f-2004303c79f3

📥 Commits

Reviewing files that changed from the base of the PR and between 0401ec2 and f4eb371.

📒 Files selected for processing (2)
  • Test/daml/OpenCapTable/TestConvertibleSecurityBalances.daml
  • Test/daml/OpenCapTable/TestInstrumentTemporalEligibility.daml
📝 Walkthrough

Walkthrough

The change adds temporal eligibility, trigger uniqueness, interest-rate schedule, and successor-expiration validation for OpenCapTable instruments. It wires these checks into UpdateCapTable, adds Daml script coverage, updates transfer helpers, and publishes version 0.0.16 artifacts.

Changes

Instrument temporal validation

Layer / File(s) Summary
Validation contracts
OpenCapTable-v34/daml/Fairmint/OpenCapTable/Types/Conversion.daml, OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/*
Interest-rate schedules, elective trigger ranges, and issuance trigger identifiers receive stricter validation.
CapTable temporal orchestration
scripts/codegen/templates/CapTable.daml.template
Temporal eligibility checks and equity-compensation successor-expiration checks are added and invoked during UpdateCapTable.
Transfer helpers and existing test updates
Test/daml/OpenCapTable/TestHelpers.daml, Test/daml/OpenCapTable/Test*Transfer.daml, Test/daml/OpenCapTable/TestNonStockSecurityBalances.daml, Test/daml/OpenCapTable/TestSecurityIdValidation.daml, Test/daml/OpenCapTable/TestConvertibleSecurityBalances.daml
Successor issuance helpers accept expiration dates, and related transfer scenarios are updated with expiration arguments, fixed trigger identifiers, and failure cases.
Temporal eligibility test suite
Test/daml/OpenCapTable/TestInstrumentTemporalEligibility.daml
New scripts cover trigger timing, range boundaries, interval consistency, uniqueness, expiration, immutability, and successor behavior.
Versioned build artifacts
OpenCapTable-v34/daml.yaml, Test/daml.yaml, dars/OpenCapTable-v34/0.0.16/OpenCapTable-v34.dar
Project and test dependency versions are updated to 0.0.16, along with the DAR pointer.

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

Sequence Diagram(s)

sequenceDiagram
  participant UpdateCapTable
  participant validateInstrumentTemporalEligibility
  participant ConversionValidation
  participant SuccessorValidation
  UpdateCapTable->>validateInstrumentTemporalEligibility: validate finalMaps
  validateInstrumentTemporalEligibility->>ConversionValidation: validate triggers and interest-rate schedules
  validateInstrumentTemporalEligibility->>SuccessorValidation: validate successor expiration and trigger continuity
  validateInstrumentTemporalEligibility-->>UpdateCapTable: validation result
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 temporal eligibility validation for instruments.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/ocf-instrument-temporal-eligibility

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

@HardlyDifficult HardlyDifficult marked this pull request as ready for review July 11, 2026 11:16

Copy link
Copy Markdown
Collaborator Author

@copilot review

Copy link
Copy Markdown
Collaborator Author

@codex review

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

Copy link
Copy Markdown
Collaborator Author

@cursor review

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown
✅ 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 4bd233d. Configure here.

@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: 4bd233d315

ℹ️ 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 scripts/codegen/templates/CapTable.daml.template

Copilot AI 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.

Pull request overview

Enforces OCF-aligned temporal eligibility rules for conversions/exercises and validates convertible-note interest schedules, with checks executed against the final cap-table state to prevent retroactive invalidation from later edits.

Changes:

  • Adds final-state validations for conversion trigger eligibility, warrant/equity-comp expiration constraints, and exercise/conversion date validity.
  • Tightens OCF shape validation for elective date-range triggers and interest-rate schedules (sorted, no duplicate starts, no inclusive overlaps).
  • Introduces a new DAML script test suite covering boundary conditions and invalidating-edit scenarios; bumps OpenCapTable-v34 to 0.0.16.

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
Test/daml/OpenCapTable/TestInstrumentTemporalEligibility.daml Adds script-based behavioral coverage for trigger eligibility, expirations, interest schedules, and invalidating edits.
Test/daml.yaml Updates test package data-dependency to the new OpenCapTable-v34 0.0.16 DAR.
scripts/codegen/templates/CapTable.daml.template Adds final-state temporal eligibility validation across issuance terms and exercise/conversion events.
OpenCapTable-v34/daml/Fairmint/OpenCapTable/Types/Conversion.daml Strengthens interest rate and trigger field validations (range ordering, schedule consistency).
OpenCapTable-v34/daml.yaml Bumps package version to 0.0.16.
dars/OpenCapTable-v34/0.0.16/OpenCapTable-v34.dar Adds the new versioned DAR artifact (Git LFS pointer).
dars/dars.lock Registers the new DAR in the lockfile.

@HardlyDifficult HardlyDifficult marked this pull request as ready for review July 11, 2026 11:44
@HardlyDifficult HardlyDifficult requested a review from Copilot July 11, 2026 11:45

Copy link
Copy Markdown
Collaborator Author

@copilot review

Please review exact head 91daec073c7b161fa697719ab6de5d467abd28ca, including the successor-expiration continuity fix from the prior Codex finding. CI is green, the branch is merge-clean, all 705 scripts pass locally, and no review threads remain unresolved.

Copy link
Copy Markdown
Collaborator Author

@codex review

Please re-review exact head 91daec073c7b161fa697719ab6de5d467abd28ca; the prior successor-expiration finding is addressed with transfer, cancellation-balance, and edit regression coverage.

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

Please review exact head 91daec073c7b161fa697719ab6de5d467abd28ca.

Copy link
Copy Markdown
Collaborator Author

@cursor review

Please review exact head 91daec073c7b161fa697719ab6de5d467abd28ca.

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

@HardlyDifficult I'll review the changes at head 91daec073c7b161fa697719ab6de5d467abd28ca.

✅ 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 91daec0. Configure here.

Copilot AI 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.

Pull request overview

Copilot reviewed 10 out of 11 changed files in this pull request and generated 1 comment.

Comment thread scripts/codegen/templates/CapTable.daml.template Outdated

Copy link
Copy Markdown
Collaborator Author

@copilot The review session for exact head 0401ec232616b83664c4e2906eb55969c093777e started and finished, but no submitted review or explicit findings/no-findings response was posted to the pull request. Please inspect that exact head and explicitly state here whether you found any actionable issues. Focus on root-only convertible and warrant trigger reachability, nested child triggers, and exact successor-term continuity.

Copy link
Copy Markdown
Collaborator Author

@coderabbitai Your 2026-07-11T23:42Z response said the exact-head review for 0401ec232616b83664c4e2906eb55969c093777e was being triggered, and the action now reports "Review finished," but no final verdict followed. Please explicitly state whether that completed exact-head review found any actionable issues. If it did, list them; if it did not, confirm no findings.

Copilot AI commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

@copilot The review session for exact head 0401ec232616b83664c4e2906eb55969c093777e started and finished, but no submitted review or explicit findings/no-findings response was posted to the pull req...

Reviewed exact head 0401ec232616b83664c4e2906eb55969c093777e and checked all current review threads. I found no actionable issues in the focused areas: root-only convertible/warrant trigger reachability, nested child-trigger rejection behavior, and exact successor-term continuity.

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
REPO="Fairmint/open-captable-protocol-daml"
PR=278

echo "=== PR head sha now ==="
gh pr view $PR --repo $REPO --json headRefOid,mergeable,state -q .

echo "=== All reviews with commit_id ==="
gh api repos/$REPO/pulls/$PR/reviews --paginate | jq -r '.[] | "\(.id) | \(.user.login) | \(.commit_id) | \(.state) | \(.submitted_at)"'

echo "=== coderabbitai reviews full bodies for commit 0401ec2 ==="
gh api repos/$REPO/pulls/$PR/reviews --paginate | jq -r '.[] | select(.user.login=="coderabbitai[bot]") | "id=\(.id) commit=\(.commit_id) state=\(.state) time=\(.submitted_at)\nBODY:\n\(.body)\n===END==="'

echo "=== inline review comments by coderabbitai on commit 0401ec2 ==="
gh api repos/$REPO/pulls/$PR/comments --paginate | jq -r '.[] | select(.user.login=="coderabbitai[bot]") | select(.commit_id=="0401ec232616b83664c4e2906eb55969c093777e" or .original_commit_id=="0401ec232616b83664c4e2906eb55969c093777e") | "id=\(.id) path=\(.path)\n\(.body)\n---"'

echo "=== all issue comments by coderabbitai after 2026-07-11T23:42Z ==="
gh api repos/$REPO/issues/$PR/comments --paginate | jq -r '.[] | select(.user.login=="coderabbitai[bot]") | select(.created_at > "2026-07-11T23:42:00Z") | "\(.created_at)\n\(.body)\n---"'

Length of output: 12620


@HardlyDifficult I checked directly again via the GitHub API, and I need to be fully transparent: there is still no CodeRabbit review record posted against commit 0401ec232616b83664c4e2906eb55969c093777e.

Specifics:

  • The PR head is confirmed unchanged at 0401ec232616b83664c4e2906eb55969c093777e.
  • The only CodeRabbit review after that commit was pushed is the one at 41066cf2bd36ddfc5a0ca94f989c34aaa10e7162 (submitted 2026-07-11 21:35:30 UTC), which has an empty body — an explicit no-findings result, but for 41066cf2, not for 0401ec2.
  • My prior reply at 23:42Z said I was "triggering a fresh review" for 0401ec2, and the action report said "Review finished," but no new review object with commit_id=0401ec232616b83664c4e2906eb55969c093777e was actually created. So that prior "Review finished" status did not correspond to a completed, posted review of that exact commit — I was incorrect to imply otherwise, and I don't have an explicit findings/no-findings verdict for 0401ec2 to give you right now.

I'm triggering the review again below. Once it completes and posts (either as a review with actionable comments, or a review with an empty body indicating no findings), I will report back here with the explicit verdict tied specifically to commit 0401ec232616b83664c4e2906eb55969c093777e.

✅ 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.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.


You're currently rate limited under our Fair Usage Limits Policy. Your recent PR review activity is in the 95th percentile or higher among CodeRabbit users, so adaptive limits apply. Your next review will be available in 39 minutes.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@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 `@Test/daml/OpenCapTable/TestHelpers.daml`:
- Around line 346-351: Update the three conversion test cases in
TestConvertibleSecurityBalances, including
testConvertibleSecurityBalance_ConversionWithBalanceRetiresSource,
testConvertibleSecurityBalance_ConversionWithoutBalanceRetiresSource, and
testConvertibleSecurityBalance_ConversionCannotCreateZeroBalance, so their
explicit convertibleConversion trigger-id arguments use
"TRIGGER-CONVERTIBLE-SUCCESSOR" instead of the obsolete issuance-derived id.
Keep the submitMustFail assertions and balance/retirement scenarios unchanged.

In `@Test/daml/OpenCapTable/TestInstrumentTemporalEligibility.daml`:
- Around line 413-430: The test
testInstrumentTemporalEligibility_FinalStateTriggerIdChecksRejectDuplicates only
validates duplicate-detection predicates directly; add an end-to-end final-state
validation scenario that constructs a corrupted CapTable via direct createCmd
with duplicate convertible and/or warrant trigger IDs, then asserts the actual
final-state check rejects it, following the pattern of
testSecurityIssuance_FinalStateDuplicateSecurityIdsFail.
🪄 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: 9cf7a762-dcc1-4b13-879c-21ed8bb689b0

📥 Commits

Reviewing files that changed from the base of the PR and between 6925fe6 and 0401ec2.

⛔ Files ignored due to path filters (1)
  • dars/dars.lock is excluded by !**/*.lock
📒 Files selected for processing (14)
  • OpenCapTable-v34/daml.yaml
  • OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/ConvertibleIssuance.daml
  • OpenCapTable-v34/daml/Fairmint/OpenCapTable/OCF/WarrantIssuance.daml
  • OpenCapTable-v34/daml/Fairmint/OpenCapTable/Types/Conversion.daml
  • Test/daml.yaml
  • Test/daml/OpenCapTable/TestConvertibleSecurityBalances.daml
  • Test/daml/OpenCapTable/TestConvertibleTransfer.daml
  • Test/daml/OpenCapTable/TestEquityCompensationTransfer.daml
  • Test/daml/OpenCapTable/TestHelpers.daml
  • Test/daml/OpenCapTable/TestInstrumentTemporalEligibility.daml
  • Test/daml/OpenCapTable/TestNonStockSecurityBalances.daml
  • Test/daml/OpenCapTable/TestSecurityIdValidation.daml
  • dars/OpenCapTable-v34/0.0.16/OpenCapTable-v34.dar
  • scripts/codegen/templates/CapTable.daml.template

Comment thread Test/daml/OpenCapTable/TestHelpers.daml
Comment thread Test/daml/OpenCapTable/TestInstrumentTemporalEligibility.daml Outdated
@HardlyDifficult HardlyDifficult marked this pull request as draft July 12, 2026 01:16
@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

Addressed the exact-head CodeRabbit review in f4eb371: the three convertible balance regressions now use the successor issuance's real trigger ID, and the legacy-state uniqueness predicates are explicitly documented as upgrade guards because current issuance-template ensure checks make direct duplicate-trigger corruption impossible. Both review threads are resolved. Local validation is green: the two focused modules, all 720 DAML scripts, build, formatting, and DAML lint. The PR remains draft pending exact-head CI and fresh automated reviews.

@HardlyDifficult HardlyDifficult marked this pull request as ready for review July 12, 2026 01:26
@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@copilot review exact head f4eb3714dbf8de2a5de49102db4149fedb874aae. Please verify the CodeRabbit-driven test fixes: the three convertible balance regressions now use the actual successor trigger ID, and the final-state duplicate-trigger predicate tests are accurately scoped as legacy upgrade guards. CI and all 720 local scripts are green, and all review threads are resolved.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@codex review exact head f4eb3714dbf8de2a5de49102db4149fedb874aae. Focus on whether the review-driven test changes preserve their intended failure paths without weakening temporal eligibility coverage.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@cursor review exact head f4eb3714dbf8de2a5de49102db4149fedb874aae. Copilot was requested first; exact-head CI and all 720 local scripts are green.

@HardlyDifficult

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review\n\nPlease review exact head f4eb3714dbf8de2a5de49102db4149fedb874aae, which addresses both findings from your full review. Focus on whether the repaired trigger IDs restore the intended balance-test paths and whether the documented upgrade-guard scope is accurate.

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

@HardlyDifficult I'll perform a review of the changes at head f4eb3714dbf8de2a5de49102db4149fedb874aae, focusing on whether the repaired trigger IDs restore the intended balance-test failure paths and whether the documented upgrade-guard scope for the duplicate-trigger predicates is accurate.

✅ 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 f4eb371. Configure here.

Copilot AI commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

@copilot review exact head f4eb3714dbf8de2a5de49102db4149fedb874aae. Please verify the CodeRabbit-driven test fixes: the three convertible balance regressions now use the actual successor trigger ID...

Reviewed exact head f4eb3714dbf8de2a5de49102db4149fedb874aae with focus on the CodeRabbit follow-ups. No actionable issues found: the three convertible balance regressions now reference the successor issuance trigger ID consistently, and the duplicate-trigger predicate coverage is correctly scoped/documented as a legacy upgrade guard.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: f4eb3714db

ℹ️ 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

@coderabbitai full review

Please perform a substantive full review of exact head f4eb3714dbf8de2a5de49102db4149fedb874aae. This head addresses both findings from your prior full review: the three convertible balance regressions now use the actual successor trigger ID, and the duplicate-trigger predicate test is explicitly scoped as an upgraded legacy-state guard because duplicate IDs cannot be created through the current templates. All 9 GitHub review threads are resolved, exact-head CI is green, and all 720 local DAML scripts pass. Please return an explicit findings or no-findings verdict for this exact head.

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
REPO="Fairmint/open-captable-protocol-daml"
PR=278

echo "=== PR head sha now ==="
gh pr view $PR --repo $REPO --json headRefOid,mergeable,state -q .

echo "=== All reviews with commit_id ==="
gh api repos/$REPO/pulls/$PR/reviews --paginate | jq -r '.[] | "\(.id) | \(.user.login) | \(.commit_id) | \(.state) | \(.submitted_at)"'

echo "=== coderabbitai reviews full bodies for commit f4eb3714 ==="
gh api repos/$REPO/pulls/$PR/reviews --paginate | jq -r '.[] | select(.user.login=="coderabbitai[bot]") | select(.commit_id=="f4eb3714dbf8de2a5de49102db4149fedb874aae") | "id=\(.id) state=\(.state) time=\(.submitted_at)\nBODY:\n\(.body)\n===END==="'

echo "=== recent issue comments by coderabbitai ==="
gh api repos/$REPO/issues/$PR/comments --paginate | jq -r '.[] | select(.user.login=="coderabbitai[bot]") | "\(.created_at)\n\(.body[0:400])\n---"' | tail -60

Length of output: 6757


@HardlyDifficult I checked directly via the GitHub API, and I can now give you the explicit verdict you asked for.

Two CodeRabbit reviews are recorded against the exact head f4eb3714dbf8de2a5de49102db4149fedb874aae (review IDs 4679135712 submitted 2026-07-12 01:22:20 UTC and 4679136721 submitted 2026-07-12 01:23:34 UTC), both with empty bodies and no inline comments attached. An empty-body review with no inline comments is CodeRabbit's explicit no-findings result.

So: No actionable findings for exact head f4eb3714dbf8de2a5de49102db4149fedb874aae. This covers the areas you asked about — the three convertible balance regressions now using the actual successor trigger ID, and the duplicate-trigger predicate test scoped as a legacy upgrade guard — no issues were flagged in either pass.

For completeness: the later @coderabbitai full review request from you did complete successfully (submitted 2026-07-12 01:02:12 UTC, before the head moved to f4eb3714), and the two most recent reviews at the current head are also clean. There's no rate-limit block currently applied to your account based on the reviews returned.

✅ 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.

@HardlyDifficult HardlyDifficult self-assigned this Jul 12, 2026
@HardlyDifficult HardlyDifficult marked this pull request as draft July 13, 2026 19:06

Copy link
Copy Markdown
Collaborator Author

Preliminary OCF validation-policy audit

Policy: OCF Validation Policy

Appears supported

  • Automatic conversion dates, inclusive elective-conversion ranges, and declared warrant/equity-compensation expirations.
  • Trigger timing that follows directly from the documented trigger type.

Needs line-by-line evidence or narrowing

  • Trigger reachability propagated across successor chains.
  • Requirements that successor instruments preserve or inherit trigger IDs beyond what OCF documents.
  • Interest-schedule or ambiguity rules derived from one implementation rather than the official model.

Proposed next step
Retain direct date/range/expiration checks and discuss successor propagation separately. No merge recommendation yet.

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