Spec · Cross-Listing MathBuilding next

The ledger that makes multi-listing composable and safe

A human can list multiple claims on their future TEB simultaneously — a Covenant Phase 1, the linked Phase 2, a Direct Listing, a second Direct Listing years later. Without a ledger there is no way to guarantee the sum of those claims stays coherent or the issuer retains enough TEB to live. Preflop enforces the constraint algorithmically, cross-validated by two independent algorithms, and stress-tested by 75 passing tests.

Why a ledger has to exist

Every existing venue for human-capital claims is either single-instrument (ISAs, athlete revenue advances) or single-listing(music-catalog auctions on Royalty Exchange). None supports the natural human lifecycle: a founder raises a covenant at age 26, builds a company, IPO’s, eventually takes a direct listing to monetize the trajectory separately, and ten years later a second direct listing because new evidence justifies a different price.

Every one of those events is a new claim on the same underlying — the issuer’s future Total Economic Benefit. Without a ledger the system has three failure modes:

  • 1.Over-commitment.The issuer sells 30% of a 100% TEB across listings and can’t live on the remainder. Existing instruments fail silently here — the overhang isn’t visible to the underwriter.
  • 2.Impaired prior holders.A new listing with overlapping windows dilutes earlier holders’ claims, but because the claims share an underlying rather than an issuer balance-sheet, dilution doesn’t show up until cash distributes.
  • 3.Arithmetic divergence.Without a single source of truth, the underwriter’s model, the issuer’s understanding, and the auditor’s reconstruction can all differ on what the total committed share actually is.

The Obligation Ledger closes all three. Every listing application updates a single per-issuer data structure. Every pricing request reads from that structure. Every cap-check runs against it. If the ledger math is clean, every downstream product composes.

The unifying abstraction

Every token class on Preflop — Covenant Phase 1 dividend stream, Covenant Phase 2 perpetual claim, Direct Listing, a second Direct Listing on the same person, and any future class — is the same three-element tuple on an issuer’s future TEB:

classi  =  (srate,i,  tstart,i,  tend,i)\text{class}_i \;=\; \bigl(\,s_{\text{rate},\,i}\,,\; t_{\text{start},\,i}\,,\; t_{\text{end},\,i}\,\bigr)

The token claim is a slice of TEB parameterized by those three:

Tokeni(t)  =  (αiNi)srate,iTEB(t),t[tstart,i,tend,i)\text{Token}_i(t) \;=\; \left(\tfrac{\alpha_i}{N_i}\right)\,s_{\text{rate},\,i}\,\text{TEB}(t),\quad t \in [t_{\text{start},\,i},\,t_{\text{end},\,i})

αi\alpha_iis the fraction of the issuer’s TEB the class claims (e.g. 2% for a Direct Listing perpetuity). srate,is_{\text{rate},\,i} is the per-window payout rate. Ni=10,000N_i = 10{,}000 is the fixed token supply per class. Windows are half-openso back-to-back listings can’t double-count the boundary instant.

Classshare_ratet_startt_end
Covenant Phase 1 dividend streamsscovenant startyear TT
Covenant Phase 2 perpetual claimecove_{\text{cov}}year TT
Direct Listing perpetual claimedire_{\text{dir}}listing day
Second DL on same personedir,2e_{\text{dir},\,2}listing day 2
Sector-index exposure (Layer 4)aggregateindex effectiveindex termination

Why it mattersThe asymmetry of human-capital claims is that they stack on a single denominator. A share of Google and a share of Amazon don’t interact. Two share-of-TEB claims on the same person absolutely do. The tuple abstraction + cap invariant is what makes the stack coherent.

The 25% invariant

At every moment tt, the sum of all active claim rates on a single issuer is bounded by a platform-wide constant CmaxC_{\max}:

i  srate,i1 ⁣[tstart,it<tend,i]    Cmax=25%\sum_{i}\; s_{\text{rate},\,i}\,\mathbf{1}\!\left[\,t_{\text{start},\,i} \le t < t_{\text{end},\,i}\,\right] \;\le\; C_{\max} = 25\%

The choice of Cmax=25%C_{\max} = 25\%isn’t arbitrary. It’s calibrated against three ceilings:

  • Living cost. The issuer must retain ≥75% of their TEB to live, pay taxes (federal + state ~35% combined at the relevant income band), save, and invest.
  • Behavioral incentive. Well-studied labor economics shows the effort-elasticity of work declines sharply above ~30% of marginal income taxed or claimed. Below 25%, the incentive to grow TEB (and therefore holder payouts) is preserved.
  • Creditor precedent.US wage-garnishment caps for unsecured debt sit at 25% of disposable income. Preflop’s claim sits inside the same envelope.

CmaxC_{\max} is a platform parameter, not a per-issuer parameter — uniformity is a feature, not a limitation. Every issuer operates under the same ceiling, so every listing price is comparable across issuers without a per-issuer leverage correction.

The cap theorem — flow ⟹ stock

The 25% invariant restricts flow. The natural question is whether it also bounds the aggregate stock of fractional ownership a market can hold. Theorem: it does, with the same constant.

Theorem. If for all τt\tau \geq t, kA(τ)sk(τ)C\sum_{k \in \mathcal{A}(\tau)} s_k(\tau) \leq C, then keeffkC\sum_{k} e_{\text{eff}}^{\,k} \leq C.

Proof (Fubini). Sum the claim-PV definitions across classes and swap \sum with \int (justified — the integrand is nonnegative):

kVclaimk(t)  =  Et ⁣[t ⁣(kA(τ)sk(τ))TEB(τ)er(τt)dτ]\sum_{k} V_{\text{claim}}^{\,k}(t) \;=\; \mathbb{E}_t\!\left[\int_{t}^{\infty}\!\Bigl(\sum_{k \in \mathcal{A}(\tau)} s_k(\tau)\Bigr)\,\text{TEB}(\tau)\,e^{-r(\tau-t)}\,d\tau\right]

Bound the inner sum by CC pointwise (the hypothesis), pull the constant out, divide by VHC(t)>0V_{\text{HC}}(t) > 0:

keeffk  =  kVclaimkVHC    CVHCVHC  =  C      \sum_{k}\,e_{\text{eff}}^{\,k} \;=\; \frac{\sum_k V_{\text{claim}}^{\,k}}{V_{\text{HC}}} \;\leq\; \frac{C \cdot V_{\text{HC}}}{V_{\text{HC}}} \;=\; C \;\;\;\square

Why it mattersPlain English: the 25% pointwise flow-cap automatically bounds the 25% aggregate stock-ownership. The founder always retains 75%\geq 75\% of themselves — mathematically guaranteed, not just policy-constrained. There is no obligation stack that violates this. Full derivation in the human-capital spec.

Numerical cross-check (Maya year 8 with covenant + DL)

Maya carries a covenant (s1=3%,s2=1%,T=10)(s_1=3\%, s_2=1\%, T=10) and adds a Direct Listing at edir=3%e_{\text{dir}} = 3\% at year 4. At year 8 the active flow is 3%+3%=6%25%3\% + 3\% = 6\% \leq 25\% ✓. Aggregate eeffe_{\text{eff}} at year 0 (engine evaluation): covenant ≈ 1.66%, DL = 3.00% (exact for DL window matching VHC). Total ≈ 4.66% — well under 25%. Both flow and stock invariants hold with significant headroom.

Two independent cap-check algorithms

Every new listing application runs through both algorithms below; the application is accepted only if both return OK\text{OK}. Using two algorithms with different implementations provides a mechanical safeguard against a single bug cascading into a silent over-commitment.

Algorithm 1 · Analytic transition-point scan

The sum-of-active-rates function is a step function: its value only changes at transition points (the tstartt_{\text{start}} and tendt_{\text{end}} boundaries of every listing). Between transitions the sum is constant. The algorithm:

function capCheck_analytic(existing, proposed):
  boundaries = sort(union(
    { t_start for class in existing ∪ { proposed } },
    { t_end   for class in existing ∪ { proposed } }
  ))
  for τ in boundaries:
    active = { c ∈ existing ∪ { proposed } : c.t_start ≤ τ < c.t_end }
    if sum(c.s_rate for c in active) > C_max:
      return REJECT with violation point τ
  return OK

Correct by construction: every transition point is evaluated. Complexity: O(nlogn)O(n \log n) from the sort, linear per transition.

Algorithm 2 · Monthly-bucket scan

Discretize time into monthly buckets over the shared horizon. At every bucket, compute the sum of active rates directly. Accept only if every bucket is under CmaxC_{\max}. The algorithm:

function capCheck_buckets(existing, proposed, horizon_months = 900):
  for m in 0..horizon_months:
    t = now() + months(m)
    total = sum(c.s_rate for c in existing ∪ { proposed }
                if c.t_start ≤ t < c.t_end)
    if total > C_max:
      return REJECT with violation month m
  return OK

Obviously correct (you evaluate every month). Finite but large (75 years × 12 months ≈ 900 buckets per issuer). Complexity: O(nH)O(n \cdot H) where HH is the horizon bucket count.

Why it mattersWhy both: the analytic scan is fast but depends on correct sorting and strict half-open-interval handling; the bucket scan is slow but mechanically transparent. A discrepancy between them at any transition point is a signal that something in the implementation has drifted, and the listing is held until the discrepancy is resolved.

Pricing integral + Gordon collapse

The price of any class is the present value of its slice of future TEB. General form:

Pi(t)  =  1Nimax(t,tstart,i)tend,i ⁣ ⁣srate,iαiE[TEB(τ)]er(τt)dτP_i(t) \;=\; \frac{1}{N_i}\int_{\max(t,\,t_{\text{start},\,i})}^{t_{\text{end},\,i}}\!\! s_{\text{rate},\,i}\,\alpha_i\,\mathbb{E}[\text{TEB}(\tau)]\,e^{-r(\tau-t)}\,d\tau

In the pure-perpetuity case (Direct Listing, or a post-T Covenant Phase 2), tend=t_{\text{end}} = \infty and E[TEB(τ)]=TEB0eg(τt)\mathbb{E}[\text{TEB}(\tau)] = \text{TEB}_0 \cdot e^{g(\tau-t)}. The integral collapses:

Pi  =  1Nisrate,iαiTEB0rgP_i \;=\; \frac{1}{N_i} \cdot \frac{s_{\text{rate},\,i}\,\alpha_i\,\text{TEB}_0}{r - g}

That’s the Gordon anchor from Stage 2 of the pricing spec. Every class uses the same machinery. No per-class pricing exception; no special cases.

Worked examples

Example 1 · Covenant adds a Direct Listing (accepted)

Issuer Z is year 3 of a s = 5%, T = 7, ecov = 2% covenant (already IPO’d, tokens trading). Z applies for a Direct Listing at edir = 3%.

Analytic transition scan:

boundaries: {t=0 (cov start), t=3 (DL start, today), t=7 (cov Phase 1 end), t=∞}
t ∈ [0, 3): active = {cov.Phase1=5%} → 5%  ✓ ≤ 25%
t ∈ [3, 7): active = {cov.Phase1=5%, DL=3%} → 8%  ✓ ≤ 25%
t ∈ [7, ∞): active = {cov.Phase2=2%, DL=3%} → 5%  ✓ ≤ 25%

Monthly-bucket scan: all 900 buckets return the same answer. Both algorithms agree. Listing accepted.

The Direct Listing mints 10,000 tokens at Pref,dir$30/tokenP_{\text{ref,dir}} \approx \$30/\text{token}. Existing covenant tokens are unaffected. Two markets on Z from now on — covenant tokens (dual-character, phase-decaying) and Direct Listing tokens (pure perpetual). At year 7, covenant tokens transition to pure Phase 2, economically equivalent to the Direct Listing class.

Example 2 · Second DL on same person (rejected)

Two years later, Z has IPO’d, TEB is up, and the first DL tokens trade at $120/token\$120/\text{token}. Z wants a second DL at edir,2 = 20% to monetize the trajectory uplift.

Analytic scan:

t ∈ [7, 9): active = {cov.Phase2=2%, DL=3%} → 5%  
t ∈ [9, ∞): active = {cov.Phase2=2%, DL=3%, DL2=20%}25%  ✓ at ceiling

Bucket scan agrees. Listing accepted at exactly the ceiling— but in practice the Direct Listing review process flags any class that pushes utilization above ~22% for counsel review before onboarding. The math allows it; the process asks “are you sure?”

If Z had proposed edir,2 = 21% instead, total utilization would be 26% — rejected. Both algorithms return the same rejection with the same violation point (year 9).

Example 3 · Overlapping windows on a delisted covenant

Covenant K was delisted in year 5 under the deficiency framework. Its Phase 1 stream (active years 0–7) was not extinguished — the claim persists in a grace window where holders retain pro-rata distributions but can’t trade.

Y proposes a new Direct Listing at edir = 22% in year 6. Does the grace window count?

Yes. A delisted claim during its grace window is still an active obligation for cap-check purposes. Total in year 6 = 5% (K.Phase1 active) + 22% (new DL) = 27%. Both algorithms reject. The listing is offered a counter at edir = 19%, pushing utilization to exactly 24%.

Audit trail & ledger data structure

Each issuer has a single ledger document. Example shape (abbreviated for clarity):

{
  "issuer_id": "priya-chandra",
  "cap_ceiling": 0.25,
  "content_hash": "sha256:8a3c4f21…",
  "obligations": [
    {
      "class_id": "cov_prycA",
      "kind": "covenant",
      "phase_1": { "s_rate": 0.05, "t_start": "2025-06-01", "t_end": "2032-06-01" },
      "phase_2": { "e_rate": 0.02, "t_start": "2032-06-01", "t_end": null },
      "tokens_outstanding": 10000,
      "status": "active"
    },
    {
      "class_id": "dir_prycA",
      "kind": "direct-listing",
      "e_rate": 0.03,
      "t_start": "2028-04-15",
      "t_end": null,
      "tokens_outstanding": 9800,
      "status": "active"
    }
  ],
  "history": [ /* append-only audit log */ ]
}

Three properties the ledger guarantees:

  • Append-only history. Every mutation (new listing accepted, deficiency triggered, delisting recorded) appends a record. Past entries are never rewritten.
  • Content-hash chaining. Every record includes a SHA-256 hash of the prior state. A tamper at any point breaks the chain from that point forward — auditors can detect retroactive edits mechanically.
  • Single source of truth. Pricing, governance, and delisting reviews all read from the ledger. Nothing maintains a parallel obligation list.

Test coverage

The ledger library ships with 75 passing tests covering the full state-space of cap-check behavior. High-level categories:

CategoryTestsCovers
Single-listing basics10Ceiling-exactly, under, over, zero-rate, zero-duration, infinite t_end
Multi-listing stacks18Back-to-back, overlapping, nested, disjoint, identical, boundary-instant half-open
Phase transitions12Covenant Phase 1 → Phase 2 handoff, DL added mid-Phase 1, DL added post-Phase 1
Delisting + grace8Grace window counts, post-grace excluded, re-listing after grace
Algorithm cross-check15Analytic vs. bucket agreement across generated random stacks
Audit trail integrity7Append-only enforced, content hash chain, tamper detection
Regression (bug-prevention)5Locked-in scenarios from production incidents

The full suite lives at lib/obligation-ledger/__tests__/ and runs on every build via Vitest. The same library prices every real listing on the site.

Why it mattersRigour-per-dollar-of-market-infrastructure is the fair yardstick for a new pricing rail. The ledger is a small piece of code — under 1,000 LOC. 75 tests against 1,000 lines is a ratio you’d expect from an exchange engine, not an early-stage product. It’s there because the invariant is load-bearing: if the ledger is wrong, every price above it is wrong.

Related specs