Summary

  • A stock return over a stated window splits into four factors that multiply back to it exactly, by construction rather than by fit.
  • Two of the four are passive, bitcoin's own move and the claims stack shrinking in bitcoin terms. The other two are the company's capital actions and the market's changing multiple.
  • The method publishes now; computed figures ship only after a second lane reproduces a full quarter from filings, with tolerances stated before results.
Return Attribution rearranges figures the measurement layer already publishes. It adds no estimate, no model, and no new data column, and the four factors reproduce the stock return by construction rather than by fit. The split between the passive and the active legs follows a stated ordering convention, and no split renders anywhere without that convention named beside it.

Return Attribution, the layer · BTC, Compression, Engine, Re-rate, the four legs in rendering order · coarse view, the three-factor presentation · interaction magnitude, the section 5.4 disclosure

Status: RULINGS RATIFIED 2026-07-31 (all thirteen, Bobby Tierney). Dated on commit.
Current revision: v1.2, 2026-08-05, claims perimeter. See section 12.
Outputs: GATED on section 8. No computed attribution renders until a reproduction pass is recorded.
Framework: Bobby Tierney, cebetracker.io.

This document publishes the identity, the factor definitions, and the conventions. Computed figures follow separately. Nothing in this document is investment advice; Return Attribution is a measurement construction, and a factor is an arithmetic fact about a stated window rather than a judgment about a decision.

1. Purpose and layer

Return Attribution answers one question: over a stated window, how much of a Bitcoin Treasury Company's stock return came from bitcoin, how much from the senior claims stack shrinking in bitcoin terms as price moved, how much from what the company did with its capital, and how much from the market changing what it will pay for the residual.

It is a decomposition, not a valuation and not a forecast. Every input is a figure the measurement layer already carries, and the arithmetic is exact. The layer adds no assumption about what a share should be worth, and it grades no capital decision. A negative Engine leg is a measurement that per-share exposure fell across the window, and nothing more.

Return Attribution sits beside CEBE and Senior Claims %, in the same register as those objects. It never appears without the window dates and the ordering convention stated on the same surface.

2. The identity

Every published CEBE figure, the Senior Claims % beside it, the BTC price, and the stock price are related by an identity that holds exactly at any single point in time.

Sats conversion, stated exactly: 1 BTC = 100,000,000 sats. CEBE publishes in sats per share, and the / 100,000,000 term appears explicitly in every rendering of the identity. It is never folded into a constant. BTC per share may appear in notes.

At a single endpoint t:

NAV_common(t) = ( Q(t) - Claims_BTC(t) ) x B(t) [USD] CEBE(t) = ( Q(t) - Claims_BTC(t) ) / S(t) [BTC per share] CEBE_sats(t) = CEBE(t) x 100,000,000 [sats per share] mNAV(t) = ( S(t) x P(t) ) / NAV_common(t) [dimensionless]

From which:

P(t) = mNAV(t) x ( CEBE_sats(t) / 100,000,000 ) x B(t)

This is an identity, not an approximation. Substituting the definitions of mNAV and CEBE reduces the right side to P(t) term by term, with the share count and the common bitcoin quantity cancelling. It holds for any values of the inputs for which NAV_common(t) > 0.

Taking the ratio of the identity at two endpoints gives the decomposition:

1 + r_stock = ( 1 + r_BTC ) x ( 1 + r_CEBE ) x ( 1 + r_mNAV )

and the CEBE leg splits further, per section 5:

1 + r_CEBE = ( 1 + r_Compression ) x ( 1 + r_Engine )

giving the four-factor form, in ruled rendering order:

1 + r_stock = ( 1 + r_BTC ) x ( 1 + r_Compression ) x ( 1 + r_Engine ) x ( 1 + r_Rerate )

The four factors multiply to the stock return by construction. Closure is an arithmetic property of the identity, not a fitted result, and the test in section 8 verifies implementation rather than method.

P(t) is the stock price in USD for every issuer. The identity is canonical in USD; see section 3.5 for the optional FX presentation.

RATIFIED 2026-07-31, Bobby Tierney | 9: sats per share with the explicit /100,000,000 term as the published unit; BTC per share permitted in notes.

3. Factor definitions

Legs render in the order BTC, Compression, Engine, Re-rate: passive, to active, to market. This order governs every surface, every table, and every export.

3.0 Endpoint inputs

For each endpoint t in {0, 1}, drawn from a single snapshot row per section 4:

SymbolMeaningSource
Q(t)bitcoin heldbtc_holdings
S(t)basic shares outstandingshares_outstanding
B(t)BTC price, USD per BTCbtc_price
K(t)net fiat senior claims, USDdebt_usd + preferred_usd - cash_usd - strc_holdings_usd
X(t)BTC-denominated static claim, BTCbtc_claim_static, via resolveBtcClaimStatic
P(t)stock price in USDstock_price_snapshot x fx_rate

Claims_BTC(t) = max( 0, K(t)/B(t) + X(t) ), floored on the total and never per bucket, per the ratified construction the measurement layer carries. The floored reader governs every leg; the unfloored companion is not used in this layer.

preferred_usd is carried at accrued liquidation preference. Declared but unpaid arrears sit inside that accrued figure, which is why K(t) carries three fiat terms and no standalone payable line. The declared-dividends field is a non-netting disclosure field: it is read through the shared reader for rendering, it never enters K(t), and adding it would double-count the arrears preferred_usd already carries.

v1.2 NOTE, 2026-08-05 | Claims perimeter conformed to the canon three-term K per the v15 terminology-lock ruling; dividends_payable_usd removed from the claims assembly and retained as disclosure. strc_holdings_usd is unchanged and remains in the netting perimeter.

Write A(t) = ( Q(t), K(t), X(t), S(t) ) for the action state, everything set by the balance sheet and the share register, and B(t) for the price state. Define

f( A, B ) = ( Q - max( 0, K/B + X ) ) / S [BTC per share]

so that CEBE(t) = f( A(t), B(t) ).

RATIFIED 2026-07-31, Bobby Tierney | 2: the floored claims reader governs every leg, with flat-Compression cases disclosed per 3.2 rather than left mute.

3.1 BTC leg

1 + r_BTC = B(1) / B(0)

The price move of bitcoin itself over the window, in USD. It is the factor a spot holder earns, and it is the benchmark the other three legs are measured against. It uses each endpoint's own btc_price, never a live price and never a price sourced from a different row.

3.2 Compression leg

The change in CEBE attributable to the senior claims stack shrinking, or growing, in bitcoin terms as the BTC price moves, with the action state held fixed at the opening endpoint. Fiat-denominated claims convert to fewer bitcoin as bitcoin appreciates, so the residual claim on the treasury rises with no action taken.

1 + r_Compression = f( A0, B1 ) / f( A0, B0 )

This is the do-nothing counterfactual: what the window would have done to a shareholder had the company taken no capital action. Compression is the passive leg and requires no decision by the issuer.

Flat-Compression disclosure

Two stack structures produce a Compression leg of exactly 1.0000 at every price. Both render a stated reason rather than a mute 1.0000:

  • Claims floored at zero at both endpoints, meaning net cash exceeds the claim stack: renders "no compressive claims".
  • A stack composed entirely of BTC-denominated claims (K = 0, X > 0): renders "claims are price-indexed, no compression". This is the measurement point of the BTC-denominated claim column, and it is the structurally identical case to the first.

A Compression leg of 1.0000 never renders without one of these reasons attached.

3.3 Engine leg

The change in CEBE attributable to capital actions: common and preferred issuance, debt issuance and retirement, bitcoin purchases and sales, buybacks, conversions, and any other movement of Q, K, X, or S. It is the corporate-action component, the part of the window that required a decision, measured against the do-nothing baseline of 3.2.

1 + r_Engine = f( A1, B1 ) / f( A0, B1 )

The action state moves at the closing price. Engine therefore carries the full incremental effect of every decision taken across the window, including the interaction between those decisions and the price move, which is what the ruled ordering intends.

Sub-split, future scope

A decomposition of the Engine leg into issuance, retirement, and purchase components is deferred to v1.1. It carries its own ordering fork, of the same species as section 5 and with more terms, and that fork gets its own ratification. No v1 surface presents a sub-split, and no v1 surface implies one exists.

RATIFIED 2026-07-31, Bobby Tierney | 11: Engine sub-split deferred to v1.1 with its own ratification; v1 states it as future scope.

3.4 Re-rate leg

The change in what the market pays per unit of common bitcoin exposure. Computed as the exact-multiplication residual:

1 + r_Rerate = ( 1 + r_stock ) / [ ( 1 + r_BTC ) x ( 1 + r_Compression ) x ( 1 + r_Engine ) ]

The residual is a factor with a name, not a plug. It has an independent definition from the identity of section 2:

1 + r_mNAV = mNAV(1) / mNAV(0)

and the two routes are equal in exact arithmetic. Publishing the residual form and computing the direct form as a check is the design: the check has no free parameter, so disagreement beyond floating-point noise is an implementation defect and is treated as one.

What the Re-rate leg contains is stated plainly and is not narrowed by adjective. It carries sentiment, index and flow effects, liquidity, the market's view of instruments and optionality the measurement layer carries at face, and any measurement error present in the other three legs' inputs. A large Re-rate leg is a measurement that the multiple moved, and is not evidence about why.

3.5 FX leg (optional presentation, off by default)

The identity is canonical in USD for every issuer, including non-USD listings. The four legs are always computed against the USD stock price, stock_price_snapshot x fx_rate.

For a non-USD listing, a fifth leg may render, labeled, to bridge the canonical USD decomposition to the return a local-currency shareholder experienced:

1 + r_FX = fx_rate(1) / fx_rate(0) [USD per local unit] 1 + r_stock_local = ( 1 + r_stock ) / ( 1 + r_FX )

Rules, all binding:

  • The FX leg is off by default and renders only where a surface states a local-currency return.
  • It renders labeled as a presentation bridge, never as a fifth factor of the canonical decomposition.
  • Local-currency attribution is a presentation. It is never the canonical decomposition, and a local-currency figure never appears without the USD decomposition on the same surface.
  • USD listings carry fx_rate = 1 and never render an FX leg.

RATIFIED 2026-07-31, Bobby Tierney | 3: USD canonical for every issuer; optional labeled FX leg for non-USD listings, off by default. | 10: names and rendering order, BTC, Compression, Engine, Re-rate, passive to active to market.

4. Window convention

4.1 Point to point on stated dates

A Return Attribution is defined by an ordered pair of dates (D0, D1) with D0 < D1. Both dates render on every surface carrying the attribution. There is no rolling, smoothed, or annualized presentation in v1.

4.2 Endpoint row selection

Each endpoint uses the single snapshot row for that ticker whose snapshot_date is the latest on or before the endpoint date, per the house carry-forward convention. One row supplies every field for that endpoint. Fields are never mixed across rows, and no field is interpolated between rows.

4.3 Marks

The BTC price and the stock price are taken from the same row that supplies the balance sheet fields. A live quote is never substituted for either endpoint, including the recent endpoint. Where the row's snapshot_date differs from the stated endpoint date, the row date is the effective mark date and renders alongside.

4.4 Non-trading endpoint dates

Where a stated endpoint date is not a trading day, the endpoint is the last trading day on or before that date. The effective mark date is printed on the attribution. The stated date and the effective mark date both render; neither replaces the other.

RATIFIED 2026-07-31, Bobby Tierney | 4: last trading day on or before, effective mark date printed.

4.5 Share basis restatement

A split or reverse split changes the share count and the stock price by reciprocal factors and changes CEBE per share, with no capital action behind it.

  • The post-split basis is canonical. Both endpoints are restated to the post-split basis before any leg is computed, so that a split registers in no leg.
  • The authoritative source is the filing that effects the split, and the issuer's own filed restatement governs. No factor is derived from a vendor feed, a price series, or an inference from the share count.
  • Any window crossing a split renders a marker stating the restatement, the factor, and the filing.
  • No unrestated arithmetic across a split, ever. A window crossing a split for which the filed restatement is not in hand does not render.

RATIFIED 2026-07-31, Bobby Tierney | 5: post-split basis canonical, issuer's filed restatement authoritative, marker on every crossing window, no unrestated arithmetic.

4.6 Basis grade

v1 renders attributions for windows where both endpoints are VERIFIED. An EST endpoint blocks the window, and the block renders with its reason naming the endpoint and the field or fields carrying EST. No graded or caveated attribution renders in v1. The restriction is revisited when ledger depth across the fleet makes VERIFIED-both a real constraint rather than a convenience.

RATIFIED 2026-07-31, Bobby Tierney | 12: VERIFIED both endpoints only in v1; an EST endpoint blocks the window with a stated reason.

4.7 Disclosure-transition rule

A field governed by an absence-not-zero contract reports a fact about disclosure as well as a fact about the balance sheet. The declared-unpaid preferred dividends field was the first such field, and as of v1.2 it no longer enters K(t), so it no longer triggers this rule. The rule is general and stands, governing every field of the same contract that enters the computation. The issuer-held senior securities field carries the contract today, and the worked example below is retained as written because it illustrates the mechanism.

Where such a field reports at one endpoint and is absent at the other, the change between endpoints is a change in disclosure, not a change in claims, and it is neither an Engine effect nor a claims effect.

The treatment:

  • The window is computed on the consistent basis: the field is excluded from both endpoints.
  • The window renders the note, with the field name, date, and figure substituted: "declared-dividends claim enters disclosure [date]; window computed ex-field for comparability; level effect stated separately as [x] sats."
  • The level effect is computed at the reporting endpoint as CEBE with the field included minus CEBE with the field excluded, in sats per share, and publishes as a labeled one-time re-basing beside the attribution.
  • The level effect never enters a return leg, under any presentation, including the coarse view.

Once both endpoints of a window report the field, the field is included normally and no note renders.

RATIFIED 2026-07-31, Bobby Tierney | 13: disclosure transitions are neither Engine nor claims change; consistent-basis computation, stated note, level effect published as a labeled one-time re-basing, general to every future field of the same contract.

4.8 Domain

An attribution is defined only where common NAV and CEBE are positive at both endpoints, and where the stock price is positive at both endpoints. Outside that domain the multiplicative form is undefined, not zero, and no attribution renders. See section 10.1.

4.9 Coverage precondition

Both endpoint rows must carry a non-empty snapshot stock price and FX rate. Coverage of the snapshot stock price is the binding constraint on which windows are computable and is not uniform across the universe.

5. The Compression and Engine split

5.1 The ruled convention

The BTC leg, the fused CEBE leg, and the Re-rate leg are convention-free: each is a ratio of two published quantities, and no choice enters. The split of the CEBE leg into Compression and Engine is not convention-free, because the action state and the price state interact inside f. The claims term K/B contains both. Moving the action state first and moving the price first give different intermediate values, and the difference has to land somewhere.

Ruled 2026-07-31: Compression-first.

1 + r_Compression = f( A0, B1 ) / f( A0, B0 ) 1 + r_Engine = f( A1, B1 ) / f( A0, B1 )

The passive leg carries the do-nothing counterfactual, and Engine reads as the incremental effect of decisions measured against it. The interaction between actions and the price move lands on Engine, which is the intent: an effect that exists only because an action was taken belongs to the leg that measures actions, not to the leg that measures price.

5.2 Alternatives considered

Recorded for the audit trail. All are exact and all close to the identity.

  • Engine-first. Engine = f(A1,B0)/f(A0,B0), Compression = f(A1,B1)/f(A1,B0). Not ruled: it credits price with an effect that exists only because an action was taken.
  • Symmetric. The geometric mean of the two orderings, exact because each ordering's legs multiply to the same total. Not ruled: it splits the interaction evenly at the cost of leaving neither leg with a counterfactual a reader can state in one sentence.
  • Five factors. Both pure legs plus a named interaction term. Not ruled: the most transparent of the options and the least legible, with a fifth factor whose plain-language meaning is the hardest to state on a surface.

5.3 Counterfactual intermediates

The mixed states f(A1,B0) and f(A0,B1) are values no snapshot ever reports: the ending balance sheet at the opening price, and the opening balance sheet at the closing price. The ruled convention uses f(A0,B1); the disclosure of 5.4 also computes f(A1,B0).

Both are counterfactual intermediates. Neither is a published CEBE figure, and both are labeled as intermediates wherever they appear.

5.4 Interaction magnitude

Every published split states the interaction magnitude as a figure. It is the signed gap between the two orderings' Engine legs, in basis points:

interaction_bp = 10000 x [ ( 1 + r_Engine_EngineFirst ) / ( 1 + r_Engine_Ruled ) - 1 ]

One figure describes the whole ordering gap, because the two orderings' legs multiply to the same total and therefore the ratio of the Engine legs is the reciprocal of the ratio of the Compression legs.

Where the interaction magnitude exceeds 25 basis points in absolute value, the Engine-first split renders alongside the ruled split, labeled. Below the threshold the magnitude still renders as a figure; the alternate split does not.

The disclosure is what keeps the ruled convention honest. It does not soften the ruling: Compression-first is the published split in every case.

RATIFIED 2026-07-31, Bobby Tierney | 1: Compression-first ordering, alternatives recorded at 5.2. | 8: interaction magnitude publishes on every split; the alternate split renders alongside above 25 basis points.

5.5 Binding regardless of magnitude

  • The ordering name renders on every surface carrying a split, in the same register as the basis grade. A split without its ordering label is a defect.
  • The fused CEBE leg, f(A1,B1)/f(A0,B0), is identical under every option in 5.2. This is what makes section 6 available.

6. Coarse view clause

A three-factor presentation is spec-conformant:

1 + r_stock = ( 1 + r_BTC ) x ( 1 + r_CEBE ) x ( 1 + r_Rerate )

where the CEBE leg fuses Compression and Engine, on one condition: the fusion is labeled. The leg renders as the CEBE leg or the per-share exposure leg, with a stated note that it combines claims compression and capital actions, and it never renders under the name Engine.

The clause exists because the fused leg is ordering-invariant. Section 5's convention touches only the split, so the coarse view carries no convention risk. A surface with no room to state an ordering convention, a social card, a table cell, a summary line, should prefer the coarse view over an unlabeled split. Choosing three factors is a presentation decision, not a reduced-fidelity one.

The reverse substitution is not conformant: a four-factor presentation that omits the ordering label is a defect, and is corrected rather than footnoted. The one-time re-basing of section 4.7 stays outside the coarse view as it stays outside the four-factor view.

7. Data requirements

Every input is an existing snapshot column. This layer requires no new column, no new tab, and no new write path.

Required per endpoint row: snapshot_date (and period where present) for the effective mark date, ticker for the canonical readers' override lookups, btc_holdings, shares_outstanding, btc_price, debt_usd, preferred_usd, cash_usd, strc_holdings_usd, btc_claim_static, stock_price_snapshot, and fx_rate.

Conditionally required where the issuer carries EUR-denominated preferred: stre_face_eur and eurusd_rate, so that the endpoint's preferred figure is read on the same FX basis the rest of the framework uses at that endpoint.

Required readers, called and never re-derived: the shared BTC-denominated claim reader, which honors an explicit zero, and the shared floored claims quantity. Both live in the authoritative claims module the measurement layer uses, and this layer adds no copy of either. The shared declared-dividends reader is no longer among them, since that field left the claims assembly at v1.2; where a surface renders it as disclosure it still calls that reader and never re-derives it.

Computation calls each reader with that endpoint's own BTC price, never a live price and never the other endpoint's price, except where a leg's definition explicitly evaluates a mixed state per section 5.

8. Verification gate

No computed Return Attribution publishes on any tracker surface until the protocol below records a pass. The definitions and the method in this document publish independent of the gate, as with the Adjusted Claims specification. What the gate holds is every number.

8.1 The second lane

The reproduction is performed by a fresh session with no project mount, commissioned with this specification and the primary filings only. The fresh-eyes property is the point: the second lane has no access to the computing lane's code, intermediate values, or working notes, and no access to the tree.

The issuer and the quarter are selected and stated before the computing lane runs. Neither lane chooses its own test.

8.2 The protocol

  • Every endpoint input is reconstructed from named primary sources: the issuer's periodic and current filings for the balance sheet fields and the share count, and named market sources for the BTC price, the stock price, and the FX rate. Each reconstructed field carries its citation.
  • The second lane computes all four legs, under both orderings of section 5, from its own inputs.
  • The second lane submits its figures before seeing the computing lane's figures.

8.3 The checks

  • Input reproduction: exact. Each reconstructed endpoint field must match the computing lane's field exactly. Snapshot inputs are recorded figures, not estimates: they match, or the row is wrong. A discrepancy is a data defect and fails the check. It is resolved by correcting the row and naming the source, never by widening a tolerance.
  • Identity closure. For each lane independently, the absolute difference between the stock return and the product of the four legs is at most 1e-4. This tests implementation, since closure is guaranteed by the arithmetic.
  • Residual agreement. The Re-rate leg computed as the residual agrees with the directly computed mNAV ratio to floating-point noise. Any material gap is an implementation defect and blocks the pass.
  • Cross-lane leg agreement: 1e-3 per leg. Stated blind, before the run, and not revisable.
  • Ordering disclosure. Both orderings are computed and the interaction magnitude is reported per section 5.4.

8.4 Conditions and consequences

  • Tolerances are fixed by this document and are not adjusted after the reproduction is run. Closure 1e-4, per-field input exact, cross-lane per-leg 1e-3. A tolerance changed in response to a result voids the run.
  • Pass requires all five checks. A pass is recorded with its date, the issuer, the quarter, and both lanes named.
  • Fail blocks publication. The failure, its cause, and its resolution are logged to the public correction log at cebetracker.io/methodology/#changelog, and the protocol is re-run in full after the fix. A partial re-run does not clear a fail.
  • The reproduction packet, inputs with citations, both lanes' legs, and the check results, is preserved dated in the verification record, on the same standard as the calibration write-ups.
  • A pass covers the method. Subsequent changes to any leg's definition, to the ordering convention, or to any reader this layer calls, re-arm the gate.

RATIFIED 2026-07-31, Bobby Tierney | 6: closure 1e-4, per-field input exact, cross-lane per-leg 1e-3, stated blind and not revisable. | 7: second lane is a fresh session with no project mount, commissioned with the spec and the filings only; issuer and quarter selected in the governing thread before the computing lane runs.

9. Worked example structure

No live figures appear in this document. Figures enter only through the anchor lane. The tokens below are placeholders and the structure is what ratification fixes. A worked example populated outside the anchor lane is a defect regardless of whether its figures are correct.

Return Attribution, <TICKER> Window: <D0> to <D1> (effective marks <MARK_0>, <MARK_1>) Ordering: Compression-first Basis: VERIFIED both endpoints Share basis: post-split, <BASIS_LABEL> [marker line only where 4.5 applies]
Endpoint inputt0t1
btc_holdings<Q0><Q1>
shares_outstanding<S0><S1>
btc_price<B0><B1>
net fiat claims K<K0><K1>
btc_claim_static<X0><X1>
stock price USD P<P0><P1>
Derived endpointt0t1
Claims in BTC<C0><C1>
Senior Claims %<SC0><SC1>
CEBE, sats per share<CEBE_SATS_0><CEBE_SATS_1>
mNAV<M0><M1>

Counterfactual intermediates, labeled as intermediates and never as CEBE figures:

f( A0, B1 ) = <MIXED_A0B1> [ruled ordering] f( A1, B0 ) = <MIXED_A1B0> [disclosure only, section 5.4]
LegFactorAs return
BTC<F_BTC><R_BTC>
Compression<F_CMP><R_CMP>
Engine<F_ENG><R_ENG>
Re-rate (residual)<F_RER><R_RER>
Product<F_PROD><R_PROD>
Stock return<F_STOCK><R_STOCK>
Closure, absolute difference<CLOSURE>tolerance 1e-4
Re-rate check: residual <F_RER> vs mNAV ratio <F_MNAV_DIRECT> delta <D_RER> Interaction magnitude: <INTERACTION_BP> bp [where above 25 bp] Engine-first split renders alongside: Compression <F_CMP_ALT>, Engine <F_ENG_ALT> Coarse view: BTC <F_BTC> x CEBE <F_CEBE_FUSED> x Re-rate <F_RER>

Conditional lines, rendered only where the condition holds:

Compression flat: 1.0000, no compressive claims [or] 1.0000, claims are price-indexed, no compression Disclosure transition: declared-dividends claim enters disclosure <DATE>; window computed ex-field for comparability; level effect stated separately as <X> sats Split marker: window crosses <SPLIT_DATE> <FACTOR> split; both endpoints restated to post-split basis per <FILING> FX presentation: FX leg <F_FX>; local-currency return <R_STOCK_LOCAL>

10. Stated limitations

10.1 Behavior near the zero crossing

As net senior claims approach the value of the bitcoin held, CEBE approaches zero and every ratio built on it degenerates. A multiplicative decomposition through a leg that approaches zero produces arbitrarily large factors in the other legs, and through a sign change it is undefined. Return Attribution therefore does not render inside the degenerate region and does not render across a window in which CEBE or common NAV crosses zero. The correct objects in that region are absolute per-share residual deltas and the break-even price, consistent with the treatment in the Adjusted Claims specification, section 5.1.

10.2 The split does not chain

The three-factor coarse view chains exactly: multiplying the legs of consecutive sub-windows reproduces the whole-window legs, because each is a ratio of endpoint quantities and the intermediate terms cancel. The Compression and Engine split does not chain. Its intermediate state depends on the endpoints, so the split of a year is not the product of the splits of its four quarters. This holds under the ruled convention and under every alternative in 5.2; the gap is the interaction, redistributed at a different frequency.

This is a property of the object and is stated rather than corrected. A published split is specific to its window, and splits at different frequencies are not combined.

10.3 The residual absorbs error

The Re-rate leg is exact by construction, which means it carries every measurement error present in the other three legs' inputs. A stale share count, a mis-stated claim, or an off-date mark does not surface as a closure failure. It surfaces as a Re-rate leg wrong by exactly the amount of the error, with the identity still closing to the fourth decimal. Closure is a test of arithmetic, not of inputs, and section 8 exists because of this. It is why the gate reproduces inputs from filings rather than only recomputing legs, and why the per-field input tolerance is exact rather than banded.

10.4 Attribution is not causation

The Engine leg measures the change in per-share exposure across a set of capital actions. It does not measure whether those actions were sound, whether an alternative would have done better, or what the actions were intended to achieve. A window in which an issuance funded purchases at a price that later fell renders exactly as its arithmetic, and the framework offers no judgement on it.

10.5 Compression is not a company action

The Compression leg moves with no decision by the issuer. Presenting it beside the Engine leg risks reading it as performance. Surface copy states, wherever both render, that Compression is a price effect on a fixed stack. The ruled leg order places Compression before Engine so that the passive leg is read first.

10.6 Measurement is not recommendation

Consistent with the framework: the legs are arithmetic facts about a stated window. They are not recommendations to buy, sell, issue, or retire. Forward views belong to the reader.

11. Vocabulary

Canonical names: Return Attribution (the layer), BTC leg, Compression leg, Engine leg, Re-rate leg (the four factors), coarse view (the three-factor presentation), ordering convention (the section 5 parameter, ruled Compression-first), interaction magnitude (the section 5.4 disclosure), disclosure-transition rule (section 4.7).

Public surfaces:

  • render the legs in the order BTC, Compression, Engine, Re-rate, passive to active to market
  • never use a retired label; the claims object is Senior Claims %, per standing canon
  • never render a split without its ordering convention named
  • never render a counterfactual intermediate as a CEBE figure
  • never render the fused CEBE leg under the name Engine
  • never render a Compression leg of 1.0000 without its stated reason
  • state both window dates and the effective mark dates on every attribution
  • render only VERIFIED-both-endpoint windows in v1, with blocks stating their reason
  • keep the section 4.7 level effect outside every return leg, labeled as a one-time re-basing

The layer's figures are measurement-layer rearrangements and are never blended into an Adjusted Claims presentation without both layers labeled, per the standing rule on layer mixing.

12. Versioning and corrections

This specification is versioned. Changes arrive as dated revisions with the prior text preserved. Errors route through the public correction log at cebetracker.io/methodology/#changelog, same standard as all tracker figures. Any revision touching a leg definition, the ordering convention, or a reader this layer calls re-arms the section 8 gate.

Known scope for v1.1: the Engine sub-split of section 3.3, which carries its own ordering fork and its own ratification. That version number stays reserved for it, and this revision therefore lands as v1.2.

Revisions

v1.2, 2026-08-05, claims perimeter. Section 3.0 K(t) conformed to the canon three-term form, debt_usd + preferred_usd - cash_usd - strc_holdings_usd, per the v15 terminology-lock ruling of record. Core CEBE carries no standalone dividends-payable term: preferred_usd is carried at accrued liquidation preference and the arrears case lands inside that accrued figure, so a separate payable line double-counts it. dividends_payable_usd is retained as a non-netting disclosure field and removed from the claims assembly in the shared claims module. Section 4.7 is unchanged as a general rule and no longer names this field as a live trigger. strc_holdings_usd is unchanged and remains in the netting perimeter. This revision touches a reader the layer calls, so the section 8 gate is re-armed per the paragraph above. Effect on published figures: Strategy only, Senior Claims % 34.0 to 33.7 and CEBE 143,392 to 144,023 sats at the 2026-08-02 snapshot basis; every other issuer carries a blank column and does not move.

13. Ratification record

All thirteen rulings issued by Bobby Tierney, 2026-07-31. Recorded here as the audit trail; the authoritative text is the body of this specification.

  • 1. Ordering convention. Compression-first. Alternatives considered and recorded at section 5.2.
  • 2. Claims reader in the Compression leg. Floored, with flatness disclosed rather than left mute. Section 3.2.
  • 3. FX. USD canonical for every issuer; optional labeled FX leg for non-USD listings, off by default. Local-currency attribution is a presentation, never the canonical decomposition. Section 3.5.
  • 4. Non-trading endpoint dates. Last trading day on or before, effective mark date printed. Section 4.4.
  • 5. Split restatement. Post-split basis canonical, restated per the issuer's own filed restatement, marker on any window crossing a split, no unrestated arithmetic across a split. Section 4.5.
  • 6. Tolerances, fixed now. Closure 1e-4; per-field input exact; cross-lane per-leg 1e-3, stated blind, not revisable. Sections 8.3 and 8.4.
  • 7. Second lane. Fresh session, no project mount, commissioned with the spec and the filings only. Issuer and quarter selected and stated before the computing lane runs. Section 8.1.
  • 8. Interaction disclosure. Magnitude publishes on every split; the Engine-first split renders alongside above 25 basis points. Section 5.4.
  • 9. Presentation unit. Sats per share with the explicit /100,000,000 term; BTC per share permitted in notes. Section 2.
  • 10. Names and order. Return Attribution; BTC, Compression, Engine, Re-rate; rendered in that order, passive to active to market. Sections 3 and 11.
  • 11. Engine sub-split. Deferred to v1.1 with its own ratification; v1 states it as future scope. Sections 3.3 and 12.
  • 12. Basis grade. VERIFIED both endpoints only in v1; an EST endpoint blocks the window with a stated reason. Section 4.6.
  • 13. Disclosure-transition rule. A field with an absence-not-zero contract reporting at one endpoint only is excluded from both endpoints; the window computes on the consistent basis with a stated note; the level effect publishes as a labeled one-time re-basing and never inside a return leg. General to every future field addition of the same contract. Section 4.7.
CEBE framework by Bobby Tierney (@chcbearsfan). cebetracker.io. The measurement layer lives on the methodology page; the valuation layer lives at the Adjusted Claims specification.