Spec · Adjustment Elasticities v1Building next

Anchoring the 15-adjustment table to literature-derived elasticities

The forecast engine’s 15 adjustments shift cohort baselines based on issuer evidence. v1 of the engine seeded each adjustment’s elasticity from first principles. This spec replaces those seeds with regression-anchored coefficients where the literature supports them, and explicitly declares which coefficients remain policy choices pending a calibration regression. Three adjustments here (#1, #2, #3); remaining twelve in subsequent sessions.

Adjustment Elasticities v1 — Design Specification

Implementation pending. Live engine v2.1.0 uses first-principles seed elasticities.

This page is the published methodology for elasticity calibration. The library (lib/conviction-engine-v2/adjustments.ts) currently ships first-principles slopes and breakpoints, with TBD-pending-* tags marking where regression-derived coefficients are queued. Calibrated elasticities ship in a future engine version (likely v2.4.0) once the per-adjustment anchor literature is settled.

Adjustment #2 was migrated from a stream-concentration (HHI) basis to a realized-CV-of-historical-TEB basis in 2026-04 — the methodology fix is live in v2.1.x; the slope coefficient is pending (saturation-anchored placeholder). See §3 for the split-anchor calibration.

This spec covers all 15 adjustments end-to-end. Two coefficients are shipped to the config file: ADJ_1_PERSONAL_CAGR_SLOPE = 0.50 (Guvenen 2007 AER) and ADJ_6_EMPLOYMENT_GAP_PENALTY = -0.02 (JLS 1993 AER + Davis-Wachter 2011 BPEA). Adj #2 has a split-anchor (M-P breakpoints shipped, slope saturation-anchored pending forward-variance regression). The remaining adjustments split into: curation signals (Adj #3, #5, #8, #9, #10, #11), structural design-anchored (Adj #12 Mincer-residual, Adj #13 Bayesian-shrinkage), structural mismatches with fix queued (Adj #14 industry refinement, Adj #15 reporting aggregate), Adj #4 split-cohort partial (founder anchored, non-founder curation, cohort-dispatch refactor queued), and Adj #7 untenable until custom analysis. The credibility boundary is preserved: every β quoted in §2–§10 carries an explicit state tag — Shipped, Design-pending, Curation, or Fix-queued — and we do not paper over first-principles seeds with fabricated citations.

§1 — Methodology framework

Each adjustment in the 15-adjustment table carries an elasticity — the slope (or set of slopes) at which issuer evidence translates into a forecast shift. v1 of the engine seeded these from first principles. This spec replaces them with literature-anchored values where defensible, and declares — without fabricating — where the literature does not yet support a clean coefficient.

The pattern, applied to every adjustment

StepWhat it asksWhat it produces
Empirical questionWhat does this adjustment claim about evidence and forecast outcome?A precise sentence of the form 'evidence X predicts outcome Y, conditional on cohort.'
DatasetWhere would we run a regression to anchor the elasticity?A primary dataset (typically PSID, SSA MEF, SOI, BLS CPS) with rationale; secondary cross-checks; fallback if primary is access-restricted.
Regression specificationWhat is the regression in formal terms?An equation in KaTeX with named coefficients, controls, and cluster-robust standard errors implied.
Calibrated coefficientWhat is the literature-anchored range of β?A point estimate plus a literature-derived range, with explicit hedges where the literature is thin.
CitationWhat is the canonical paper?Author(s), title, journal, volume, year, pages. Hedged when uncertain. Never fabricated.
Consistency checkDoes this adjustment double-count any DR-v1 or CP-v2 mechanism?A pairwise orthogonality argument against r_c components and against cohort-prior layers.

Implementation status — shipped vs design-pending

Every coefficient on this page falls into one of three states. Reviewers can verify the live engine matches the spec by checking this table against lib/conviction-engine-v2/adjustment-elasticities.config.ts.

Adj #StateAnchor / cite
#1Shippedβ = 0.50; Guvenen 2007 AER 97(3):687–712
#2 (breakpoints)Shipped0.20 / 0.50 / 1.50; Meghir-Pistaferri 2004 Econometrica 72(1):1–32
#2 (slope)Design-pending — slope0.30/unit saturation-anchored placeholder; TBD-pending-Guvenen-style-forward-variance-regression
#3Curation — declaredBLS Table A-16 + IRS SOI as descriptive context only; +5% / +2.5% magnitudes are selection prior
#4 (founder cohort)Split-cohort partialGompers, Kovner, Lerner, Scharfstein 2010 JFE 96(1):18–32 (cite spot-check pending); design-pending until cohort-conditional dispatch is wired
#4 (other cohorts)Curation — declaredNo cross-cohort literature; +4%/event is curation magnitude until per-cohort anchors emerge
#5Curation — policyAttestation-discipline magnitudes (-20% / -5%); no academic cite
#6Shippedβ = -0.02/year; JLS 1993 AER 83(4):685–709 + Davis-Wachter 2011 BPEA
#7Untenable / custom analysis neededNo individual-level pipeline-realization literature; firm-level analogs only; magnitude is policy
#8Curation — verifiabilityVerifiability mechanism, not volatility coefficient; no cite
#9Curation — F₅ inheritanceInherits weak intent-signal literature; magnitude is quality filter, not anchored
#10Curation — update-frequency-5% bands; firm-level disclosure literature does not generalize to individual-level; magnitude is policy
#11Curation — attestation discipline-4% bands; platform-design feature with no academic empirical analog; magnitude is policy
#12Structural — design-anchored0.5pp/year residual lifecycle slope; Mincer 1974 + Murphy-Welch 1990 JOLE 8(2):202–229 motivate; not regression β
#13Structural — Bayesian shrinkage±20% self-declaration cap; Bound-Brown-Mathiowetz 2001 Handbook of Econometrics ch. 59 motivates measurement-error tolerance; not regression β
#14Structural mismatch — fix queuedImplementation is fashionable-sector keyword tilt; partial double-count with cohort selection; recommend drop or cohort-conditional dispatch
#15Redundant aggregator — fix queuedPartial double-count with #8/#10/#11 on same evidence; recommend drop

The credibility boundaryA reviewer reading this spec should never have to guess whether a quoted coefficient reflects live engine behavior. Every β quoted in §2-§4 below carries an explicit state tag — Shipped, Design-pending, or Curation signal — and the config file is the single source of truth for Shipped values.

Three discipline rules

  1. Breakpoints and slopes are anchored separately. A piecewise elasticity has both regime breakpoints (where to start shifting) and slopes (how much per unit of evidence). Breakpoints typically come from variance-decomposition or quantile-cut literature; slopes come from forward-prediction regressions. They often live in differentpapers and require separate citations. Adj #2’s split-anchor (M-P-anchored breakpoints, saturation-anchored slope) is the canonical example.
  2. Curation signals are not magnitudes.Some adjustments act as quality filters rather than calibration shifts. Anchoring a curation signal to a regression coefficient is calibration theater — the empirical sign is selection-dependent and won’t replicate. Such adjustments are declared as curation signals with a defensible selection-prior magnitude, not as regression-derived elasticities. Adj #3 is the canonical example.
  3. Orthogonality across DR-v1, CP-v2, and elasticities. Every adjustment must be checked against the discount-rate decomposition and the cohort-prior re-anchoring to ensure it doesn’t duplicate a mechanism modeled elsewhere. Same shift-equivalence test as the discount-rate spec (§5): if you removed this adjustment and added an equivalent shift elsewhere, would the engine output be the same?

The credibility moveA market-maker reads any adjustment’s subsection and concludes one of three things: (a) the elasticity is regression-anchored to a named paper with named magnitude, (b) the elasticity is policy with a stated design constraint (and the regression that would replace it is queued), or (c) the elasticity is a declared curation signal with stated selection-prior reasoning. There is no fourth category — first-principles seeds without a source are not defensible, and we do not paper over them with fake citations.

§2 — Adj #1: Personal CAGR vs cohort growth

Empirical question

Does an issuer’s trailing log-earnings growth, net of cohort growth, predict their forward log-earnings growth net of cohort growth? Equivalently: how much weight should the engine put on personal-CAGR deviation from cohort when projecting S1 segment growth?

Dataset

  • Primary. Panel Study of Income Dynamics (PSID), University of Michigan, 1968– annual. ~5,000 families with within-person earnings panels of 30+ years for retained households. Public access.
  • Higher-power alternative. SSA Master Earnings File (W-2 records, ~50M workers, 1978–). Restricted access via SSA data agreement. Used in Guvenen-Karahan-Ozkan-Song.
  • Public-access fallback. SOI Public-Use Sample of Individual Returns (IRS, 5-year intervals, ~150K returns per year). Cross-sectional moments only; no panel structure for forward-prediction regressions.

Regression specification

ΔlogYi,tt+5  =  α  +  βΔlogYi,t5t  +  γc1[cohorti=c]  +  δXi  +  εi,t\Delta \log Y_{i,\,t \to t+5} \;=\; \alpha \;+\; \beta \cdot \Delta \log Y_{i,\,t-5 \to t} \;+\; \gamma_c \cdot \mathbf{1}[\text{cohort}_i = c] \;+\; \delta \cdot X_i \;+\; \varepsilon_{i,t}

where ΔlogYi,tt+5\Delta \log Y_{i,\,t \to t+5} is the forward 5-year log-earnings growth, ΔlogYi,t5t\Delta \log Y_{i,\,t-5 \to t} is the trailing 5-year growth, γc1[cohorti=c]\gamma_c \cdot \mathbf{1}[\text{cohort}_i = c] absorbs cohort-level mean growth, and XiX_i includes age, education, and occupation fixed effects. Cluster-robust standard errors at the household level; β\beta is the elasticity of forward growth on trailing growth net of cohort.

Calibrated coefficient

The labor-economics persistence literature finds β\beta in the range 0.30 – 0.65 for 5-year-window log-earnings growth deviations, varying by occupation and cohort. Guvenen (2007) decomposes earnings into a heterogeneous-income-profile component (level-deviation persistence ρ0.95+\rho \approx 0.95+) plus an AR(1) shock component (transitory deviation persistence ρ0.200.40\rho \approx 0.20 – 0.40). Translated to growth-rate deviations over a 5-year window, the implied β\beta centers around 0.45 – 0.55.

SpecificationImplied β on 5-yr growth deviationSource
Pure AR(1) on log levels, ρ ≈ 0.950.55 – 0.65Standard income-process literature
HIP + AR(1), Guvenen (2007) decomposition0.40 – 0.55Guvenen 2007 AER
High-frequency variance-components model0.30 – 0.45M-P 2004 + Guvenen et al. 2021
Engine v2.1.0 implementation (de facto slope)1.0 (clamped)First-principles seed; no anchor

Calibrated elasticity — shipped

β = 0.50 with the existing per-adjustment bounds [-10pp, +15pp]. Implementation:

shiftS1  =  clip(β(gpersonalgcohort),    0.10,    +0.15),β=0.50\text{shift}_{\text{S1}} \;=\; \text{clip}(\beta \cdot (g_{\text{personal}} - g_{\text{cohort}}),\;\; -0.10,\;\; +0.15),\quad \beta = 0.50

The clamps remain unchanged; the slope dropped from an effective 1.0 to 0.50. In practice this means a 30% trailing-CAGR deviation maps to a 15% forecast shift (hits the upper bound), not 30%, which aligns with literature. After composition damping βdamp=1/(1+0.5knz)\beta_{\text{damp}} = 1/(1 + 0.5 k_{\text{nz}}), a typical 5-active-adjustment stack contributes ~3pp to S1 growth from this adjustment alone — a defensible magnitude.

Shipped — config and codeThe constant lives in lib/conviction-engine-v2/adjustment-elasticities.config.ts as ADJ_1_PERSONAL_CAGR_SLOPE = 0.50, imported by adjustments.ts. The config file’s comment block carries the full Guvenen 2007 AER citation, the literature-derived range (0.30 – 0.65), and the spec section reference. Single source of truth: when the coefficient updates, update the config; the spec page’s β quote references the same constant.

Citation

Guvenen, F. “Learning Your Earning: Are Labor Income Shocks Really Very Persistent?” American Economic Review 97(3):687–712, 2007.

Hedge —Guvenen, F., Karahan, F., Ozkan, S., Song, J. “What Do Data on Millions of U.S. Workers Reveal about Lifecycle Earnings Dynamics?” Econometrica (volume / page count uncertain — NBER WP version published ~2015, Econometrica publication believed ~2021). Verify before final.

Consistency with DR-v1 and CP-v2

  • DR-v1. βcERP\beta_c \cdot \text{ERP} captures the systematic component of forward-growth uncertainty at cohort level (covariance with market). Adj #1 captures the idiosyncratic deviation within cohort. Different objects; orthogonal by construction.
  • CP-v2. Cohort growth segments describe conditional-on-still-in-cohort trajectory. Adj #1 modifies S1 growth based on personal evidence within that cohort. Independent layers; the survival-mixture in CP-v2 doesn’t change Adj #1’s mechanism. Shift-equivalence test passes.

§3 — Adj #2: Income volatility (CV of historical TEB)

Empirical question

Does an issuer’s realized 5-year coefficient of variation of TEB predict the forward forecast band width? Equivalently: how aggressively should the engine narrow bands for stable issuers and widen for volatile ones?

Dataset

  • Primary (variance components). PSID, education-stratified panel. M-P 2004’s estimates of ση2\sigma^2_\eta and σε2\sigma^2_\varepsilon live here.
  • Higher-power (forward variance). SSA MEF or PSID for the realized-vs-forward variance regression that would anchor the slope. The exact regression we want has not — to our knowledge — been published.
  • Cross-source decomposition. SOI Schedule SE filings (IRS) for stream-level variance attribution. Useful for understanding which components of TEB drive realized CV in upper-decile issuers.

Regression specifications (variance components, then forward)

Income process (M-P canonical):

logYi,t  =  μi  +  pi,t  +  εi,t,pi,t  =  ρpi,t1  +  ηi,t,ηN(0,ση2),εN(0,σε2)\log Y_{i,t} \;=\; \mu_i \;+\; p_{i,t} \;+\; \varepsilon_{i,t}, \quad p_{i,t} \;=\; \rho \cdot p_{i,t-1} \;+\; \eta_{i,t}, \quad \eta \sim \mathcal{N}(0,\,\sigma^2_\eta), \quad \varepsilon \sim \mathcal{N}(0,\,\sigma^2_\varepsilon)

Forward band-width regression (the regression we do not yet have a citation for):

Var(logYi,tt+5)  =  α  +  βslopeCV^(Yi,t5t)  +  γXi  +  ui\text{Var}(\log Y_{i,\,t \to t+5}) \;=\; \alpha \;+\; \beta_{\text{slope}} \cdot \widehat{\text{CV}}(Y_{i,\,t-5 \to t}) \;+\; \gamma \cdot X_i \;+\; u_i

Calibrated coefficient — split anchor

The piecewise has three breakpoints (0.20 / 0.50 / 1.50) and one slope (0.30 per unit of CV above the upper breakpoint). They anchor to different sources:

Breakpoints — M-P-anchored

With M-P central estimates for college-educated workers (ση20.018\sigma^2_\eta \approx 0.018, σε20.030\sigma^2_\varepsilon \approx 0.030), the implied 5-year-window cross-sectional variance of log-earnings is ~0.12, giving a level-space CV near 0.36 for a typical worker.

BreakpointM-P anchorEngine semantics
0.20 (lower, stable)Below typical worker CV (~0.36); selects 'more stable than typical'Max band-narrowing (-10%) when CV ≤ 0.20
0.50 (upper, volatile)Approximate upper-quartile cut of college-educated CV distributionStart of widening regime
1.50 (saturation)Beyond M-P education-group estimates; reserved for athletes (bonus years), founders (exit years), quants (carry years)Max band-widening (+30%) when CV ≥ 1.50; aligned with B₂ saturation

Slope — saturation-anchored, NOT regression-derived

The 0.30/unit slope is policy. It is set by the design constraint “engine reaches max widening (+30%) at the M-P-extreme CV (1.50).” To replace this with a regression βslope\beta_{\text{slope}}, we would need the forward-variance regression specified above on PSID or SSA panel data. Closest related literature (Guvenen 2007; Guvenen, Karahan, Ozkan, Song 2021) does not run this exact regression. Out of scope until a paper or custom run anchors it.

Shared-input dependency with B₂ — declared, not double-countedAdj #2 and conviction signal B2 (signals/volatility.ts) consume the same input field — historicalTEB — and compute the same statistic (sample CV with n-1 denominator, μ>0\mu > 0 guard). They emit orthogonal outputs: B2 feeds the conviction composite, which in turn drives the GBM drift μ\mu in Stage 4 of pricing; Adj #2 feeds the forecast band width. Same evidence, two channels. The saturation point at CV = 1.5 is intentionally aligned across the two so they share a regime boundary. This is by design, not a double-count: the covariance structure is explicit, and the downstream effects compose multiplicatively (drift × band-width) rather than additively. Cross-references: /spec/conviction#ci-band and /spec/forecast-engine#adjustments.

Citation

Meghir, C. & Pistaferri, L. “Income Variance Dynamics and Heterogeneity.” Econometrica 72(1):1–32, 2004.

For the slope, the closest related literature is Guvenen (2007, AER, see Adj #1 above) and Guvenen-Karahan-Ozkan-Song (2021 Econometrica, hedged on bib). Neither runs the realized-CV → forward-variance regression directly.

Consistency with DR-v1 and CP-v2

  • DR-v1. βcERP\beta_c \cdot \text{ERP} captures cohort-level co-movement with market (systematic volatility). Adj #2 captures idiosyncratic realized volatility at the individual level. Different objects.
  • CP-v2. Cohort growth segments encode within-cohort career-cliff dynamics; Adj #2 encodes individual deviation from cohort-typical volatility. Independent.
  • Within-engine. Shared input with B2 declared above; orthogonal output channels.

§4 — Adj #3: Income diversification credit

Up front: this is a curation signal, not a regression-derived magnitudeThe empirical evidence on stream count vs. expected income is sign-mixed and selection-dependent. Anchoring Adj #3 to a literature β\beta would be calibration theater. We declare it as a curation signalwith a stated selection prior; the +5% magnitude is defensible as a small surface for sophisticated multi-source filers, not as an empirical estimate of diversification’s causal contribution to forward TEB.

Empirical question (and why it doesn’t have a clean β)

Does the number of income streams predict higher expected future TEB, conditional on cohort? The empirical evidence splits into two regimes that prevent a clean coefficient:

RegimeSign on stream count vs incomeSource
BLS multiple-jobholders patternNegative (moonlighters skew lower-income; multi-jobholding correlated with financial necessity)BLS Current Population Survey, Table A-16, monthly
SOI multi-source upper-decile patternPositive (consulting, board fees, royalties stack on top of primary salary in upper-income brackets)IRS Statistics of Income, Public-Use Sample

The +5% credit in the engine is implicitly claiming the issuer is in the upper-end SOI regime, not the BLS-moonlighter regime. That claim is plausible — Preflop issuers self-select for sophistication, audit-readiness, and the willingness to sign a personal covenant — but it is a selection prior, not a regression coefficient.

Dataset (descriptive context, not regression source)

  • BLS Multiple Jobholders. Current Population Survey, monthly. Headline: ~5% of US workforce holds multiple jobs (May 2024: 5.4%, BLS Table A-16). Demographic breakdowns show concentration in service occupations; correlation with financial necessity rather than sophistication.
  • IRS SOI Public-Use Sample. Annual cross-section of individual returns. Source-decomposed (Schedule C + 1099 + K-1 + W-2). Upper-decile multi-source filers earn meaningfully more than single-source filers in the same age × occupation cell; this is the regime the +5% credit indexes against.
  • Survey of Consumer Finances. Triennial. Joint distribution of income sources and total income; used for cross-validation of SOI patterns.

Regression spec (for a future calibration session)

If a future session anchors a real β\beta, the regression to run is restricted to upper income deciles (filters out the BLS-moonlighter regime):

logE[Yi,t+5]  =  α  +  β1[streamsi3]  +  γlog(primary streami)  +  δagei  +  θXi  +  ui\log E[Y_{i,\,t+5}] \;=\; \alpha \;+\; \beta \cdot \mathbf{1}[\text{streams}_i \geq 3] \;+\; \gamma \cdot \log(\text{primary stream}_i) \;+\; \delta \cdot \text{age}_i \;+\; \theta \cdot X_i \;+\; u_i

Until that regression runs, the magnitude stays as a declared selection prior.

Recommended posture

Keep the implementation as-is (+5% if ≥4 streams & HHI<0.30; +2.5% if ≥3 streams & HHI<0.45; else 0). Re-label internally as a curation signal. Do not quote a regression coefficient or paper for the magnitude; quote BLS and SOI as descriptive context for the selection prior. Update the spec card on /spec/forecast-engine to reflect this posture.

Citations (descriptive only)

  • US Bureau of Labor Statistics, Current Population Survey, multiple-jobholders data series. Reference: BLS Employment Situation report, Table A-16, monthly. Public, administrative — not a single canonical academic cite.
  • US IRS Statistics of Income Division, Public-Use Sample of Individual Income Tax Returns. Annual. Public, administrative.

Hedged candidates not quoted —Lalé and Hirsch-Husain-Winters have published descriptive work on multiple jobholding in Labour Economics and adjacent venues; we do not have confident bibliographic information for either and decline to cite from memory. A reviewer wanting academic context should commission a short literature review rather than relying on this spec.

Consistency with DR-v1 and CP-v2

  • DR-v1. No overlap. The discount-rate decomposition has no diversification term; βcERP\beta_c \cdot \text{ERP} is cohort-level systematic risk, not stream-count.
  • CP-v2. No overlap. Cohort-prior anchor depends on entry-pool demographics, not on issuer-level stream count.
  • Within-engine. No shared input with a conviction signal that produces a magnitude — Adj #3 is selection-prior in nature, not estimable.

§5 — Adj #6: Employment-gap penalty (earnings scarring)

Empirical question

Do trailing employment gaps predict lower forward earnings growth at the individual level? Equivalently: how much should the engine discount S1 segment growth per year of cumulative gap in the trailing window?

Dataset

  • Primary (long panel). Panel Study of Income Dynamics (PSID), 1968– annual. Long earnings + employment histories enable within-person event studies. Public access.
  • Higher-power (administrative). SSA Master Earnings File matched to firm-level mass-layoff records. Used in JLS 1993 and Davis-Wachter 2011 to identify the canonical event-study estimates. Restricted access.
  • Public-access cross-validation. CPS Displaced Worker Supplement (biennial, since 1984). Self-reported displacement events with subsequent earnings; cleaner identification of the displacement timing than PSID.

Regression specification (event-study form)

The cleanest identification is the JLS event study around mass layoffs:

logYi,t  =  αi  +  λt  +  k=3+6βk1[t=ti+k]  +  γXi,t  +  εi,t\log Y_{i,t} \;=\; \alpha_i \;+\; \lambda_t \;+\; \sum_{k=-3}^{+6} \beta_k \cdot \mathbf{1}[t = t^{*}_i + k] \;+\; \gamma \cdot X_{i,t} \;+\; \varepsilon_{i,t}

where tit^{*}_i is the year of displacement for worker ii, βk\beta_k traces out the earnings-impact path from 3 years pre-displacement to 6+ years post-displacement, αi\alpha_i is a worker fixed effect, and λt\lambda_t is a year fixed effect. The identifying assumption is that mass-layoff timing is exogenous to individual ability conditional on fixed effects (the firm closes, everyone loses their job).

For per-year-of-gap translation (which is what the engine consumes via the issuer-declared employmentGapYears field), the relevant statistic is the average post-displacement earnings depression, divided by the gap duration:

βper-year    1Kk=1Kβk\beta_{\text{per-year}} \;\approx\; \frac{1}{K}\sum_{k=1}^{K}\beta_k

Calibrated coefficient

SpecificationImplied β (forward CAGR / gap year)Source
Mass-layoff event study, full sample-3 to -4pp per displacement event (~ -2pp per gap year averaged)JLS 1993 AER 83(4)
Same identification, recession-conditional-5 to -8pp per displacement (recession amplification 2-3×)Davis-Wachter 2011 BPEA
Multiple-displacement compoundingApproximately linear in gap yearsStevens 1997 JOLE 15(1)
Engine v2.1.0 prior literal-0.02 / year (first-principles seed)Coincidentally within literature range; now anchored

Calibrated elasticity — shipped

β = -0.02 per yearwith the existing per-adjustment bound [-8pp, 0pp]. The conservative end of the literature range — using the recession-amplified upper bound (-0.08) would push the bound floor and over-discount stable-cohort issuers (surgeons, BigLaw partners) where gap years are uncommon and the recession-amplification mechanism doesn’t apply uniformly.

shiftS1  =  clip(βNgap-years,    0.08,    0),β=0.02\text{shift}_{\text{S1}} \;=\; \text{clip}(\beta \cdot N_{\text{gap-years}},\;\; -0.08,\;\; 0),\quad \beta = -0.02

Shipped — config and codeThe constant lives in lib/conviction-engine-v2/adjustment-elasticities.config.ts as ADJ_6_EMPLOYMENT_GAP_PENALTY = -0.02, imported by adjustments.ts. The config file’s comment block carries the JLS 1993 + Davis-Wachter 2011 citations and the literature range. Note: the prior inline -0.02/year literal coincidentally landed within the literature range, so this migration formalizes the anchor without changing engine output.

Citations

Jacobson, L., LaLonde, R., Sullivan, D. “Earnings Losses of Displaced Workers.” American Economic Review 83(4):685–709, 1993.

Davis, S. & von Wachter, T. “Recessions and the Costs of Job Loss.” Brookings Papers on Economic Activity, Fall 2011 issue.

Stevens, A. H. “Persistent Effects of Job Displacement: The Importance of Multiple Job Losses.” Journal of Labor Economics 15(1):165–188, 1997.

Hedge —Davis-Wachter 2011 page numbers in the published BPEA issue uncertain; the paper is widely cited and the substantive findings (recession amplification of scarring effects) are robust. Verify page range before final.

Consistency with DR-v1 and CP-v2

  • DR-v1. βcERP\beta_c \cdot \text{ERP} captures cohort-level cyclical co-movement with the market. Adj #6 captures individual-level scarring from a personally-experienced gap, which is idiosyncratic conditional on cohort. The recession-amplification mechanism in Davis-Wachter is partially captured by βcERP\beta_c \cdot \text{ERP} at the cohort level (cyclical cohorts have higher β); the residual amplification per individual gap year is what Adj #6 measures.
  • CP-v2. Cohort growth segments describe trajectory conditional on still being in the cohort. Adj #6 modifies S1 growth based on personal gap history within that cohort. Independent layers; survival mixture in CP-v2 doesn’t change Adj #6’s mechanism.
  • Within-engine. No shared input with a conviction signal. Adj #6 reads employmentGapYears directly; no signal layer consumes the same field.

§6 — Curation signals: Adj #5, #8, #9, #10, #11

Five adjustments share the curation-signal postureAdj #5 (tax-compliance penalty), #8 (brand-momentum / proof links), #9 (narrative depth), #10 (quarterly-reporting commitment), and #11 (commit-letter signed) are structurally not regression coefficients. Their magnitudes are policy or selection-prior values that surface a quality signal (attestation discipline, verifiability, reporting cadence, narrative effort) without claiming an empirical elasticity on forward TEB. Same posture as Adj #3 in §4. We do not fabricate citations; we declare the curation framing and document what data would (in a future round) support a real anchor.

The shared framing

Each of these adjustments fails the regression-anchor test for the same structural reason: the empirical sign is selection- dependent, the magnitude is policy, and the literature does not identify a clean β. Anchoring a curation signal to a fabricated coefficient is calibration theater — the headline number would not replicate, and the cite would not survive a spot-check.

The recommended posture for all three: keep the implementation as-is, relabel internally as a curation/policy signal, do not migrate into the config file. The config file is reserved for regression-anchored coefficients (Shipped state); curation signals stay as inline literals in adjustments.ts with an explanatory comment block.

Adj #5 — Tax-compliance penalty

Magnitudes: -20% on anchor if taxStatus = “none”; -5% if “self-assessed”; 0 if “clean”. The right empirical question is not “do tax-noncompliant issuers earn less,” it is “should the engine trust an issuer’s self-attested anchor TEB if it is not corroborated by tax filings?” That is an attestation-discipline question, not an estimable elasticity. The -20% floor is a design statement: the engine will not list a tax-noncompliant issuer above 80% of cohort median. Closest related literature: IRS NRP / Tax Compliance Measurement Program data, but that work measures audit incidence, not forward TEB. No defensible academic citation; we do not cite from memory.

Adj #8 — Brand-momentum credit (proof links)

Magnitudes: -8% on bands if ≥5 proof links; -4% if ≥3. The mechanism is verifiability, not volatility reduction: an issuer with multiple public proof points (GitHub, LinkedIn, portfolio, citations) is more verifiable, so the engine is more confident in its forecast and tightens bands. This is a confidence signal, not a coefficient on realized variance. Platform-internal data could in principle test “does proof-link count predict CV(Y) at the cohort level” — but no published academic literature exists. No citation; magnitude is policy.

Adj #9 — Narrative depth

Magnitudes: +3% on anchor if narrative ≥1500 characters; +1.5% if ≥800. This is the adjustment-level inheritance of conviction signal F5 (stated intent), which the conviction spec already weights at 0.15 — the lowest weight in the forward block — on the principle that stated-intent signals have low predictive validity for realized outcomes. The +3% / +1.5% magnitudes are quality filters (“the issuer bothered to write something real”), not anchored elasticities. Closest literature on entrepreneur narrative → outcome (Hu, Ma, and adjacent management-science work on pitch evaluation) measures investor decisions, not realized TEB. No citation; magnitude is policy.

Adj #10 — Quarterly-reporting commitment

Magnitude: -5% on bands if willReportQuarterly is set; 0 otherwise. The mechanism is update-frequency discipline, not earnings-dynamics — committed quarterly reporting gives the engine a higher-frequency channel for refreshing forecasts, so band width can tighten because re-anchoring is more frequent. Corporate disclosure literature on disclosure quality → cost of equity (Welker 1995 Contemporary Accounting Research; Botosan 1997 The Accounting Review; Healy & Palepu 2001 Journal of Accounting and Economics) finds 50–200bp cost-of-equity reduction for high-disclosure firms — but this is firm-level, not individual-level, and the generalization is hand-wavy. No citation; magnitude is policy.

Adj #11 — Commit-letter signed

Magnitude: -4% on bands if commitLetterSigned is set; 0 otherwise. The mechanism is attestation-discipline binding— issuer signs a written commitment to TEB attestation accuracy, which lowers the engine’s residual uncertainty about the input quality. This is a platform-design feature, not an empirical relationship; there is no “commit-letter → forward earnings volatility” literature because the commitment instrument doesn’t exist outside the platform. No citation; magnitude is policy.

Consistency with DR-v1 and CP-v2

None of these five adjustments duplicates a mechanism in DR-v1 (no overlap with rfr_f, βcERP\beta_c \cdot \text{ERP}, or πilliq\pi_{\text{illiq}}) or CP-v2 (no overlap with cohort-prior anchor, Pstay, or exit-fallback). They operate strictly at the within-cohort issuer level on attestation, verifiability, reporting cadence, and narrative dimensions. Orthogonality is trivial across DR-v1 and CP-v2 because the curation framing is structurally distinct from the calibration mechanisms in those specs.

Within-engine: Adj #10, #11, and #15 partially double-count. Same evidence (willReportQuarterly, commitLetterSigned, proofLinks ≥ 3) fires into bands from #10 / #11 / #8 and again from #15. Documented in §10 as a structural issue queued for fix-then-anchor.

§7 — Adj #4: Documented event-capture history (split-cohort)

Split-cohort treatment — design-pending until cohort dispatchAdj #4 is regression-anchorable for the founder cohort only. For non-founder cohorts (athletes, creators, medicine, BigLaw), the adjustment is a curation signal until cohort-specific event-conversion literature emerges. The current engine’s computeMagnitude does not branch on cohort, so we cannot ship a split coefficient without a small refactor to add cohort-conditional dispatch. The founder-cohort coefficient is therefore design-pending even though the literature anchor is solid.

Empirical question

Do issuers with documented past upside-event monetization (IPOs, exits, contract renewals, equity realizations) have higher forward anchor TEB than otherwise-similar peers? The mechanism is performance persistence — issuers who have converted past events into income exhibit forward TEB premia conditional on cohort baseline.

Dataset (founder cohort)

  • Primary. Crunchbase / PitchBook for founder-exit cash realization timestamps. SEC Form 4 (insider stock sales) for executive-event monetization.
  • Identification. Gompers et al. 2010 use a panel of VC-backed firms with known founder identities, tracking next-venture outcomes conditional on first-venture success. Cleanest available identification of performance persistence at the founder level.

Regression specification (founder cohort)

logYi,t+1  =  α  +  βNevents,i,t5t  +  γlogYi,t  +  δagei  +  θXi  +  ui\log Y_{i,\,t+1} \;=\; \alpha \;+\; \beta \cdot N_{\text{events},\,i,\,t-5 \to t} \;+\; \gamma \cdot \log Y_{i,\,t} \;+\; \delta \cdot \text{age}_i \;+\; \theta \cdot X_i \;+\; u_i

where NeventsN_{\text{events}} is the count of monetized upside events in the trailing 5 years and XiX_i includes venture-stage and sector controls. β\beta picks up the forward anchor premium per documented monetized event.

Calibrated coefficient — founder cohort only

Gompers et al. (2010) find prior-success founders are 1.4–1.5× more likely to succeed on next venture (vs ~21% baseline for first-time founders). Translated to anchor TEB premium: each successful prior event ≈ +5 to +8% on expected anchor for the founder cohort. The current engine’s +4% per event (capped at +15%) sits at the conservative end of this range — defensible.

SpecificationImplied premium per monetized eventSource
Founder success persistence (VC-backed sample)+5 to +8% on anchor (1.4–1.5× outcome multiplier)Gompers, Kovner, Lerner, Scharfstein 2010 JFE
Engine v2.1.0 implementation (current)+4% / event, capped +15%First-principles seed; conservative end of literature range

Cite spot-check requested —Gompers, P., Kovner, A., Lerner, J., Scharfstein, D. “Performance Persistence in Entrepreneurship.” Journal of Financial Economics 96(1):18–32, 2010. Author lineup, journal, and year believed correct (~90% confident); volume/page exact range to verify before shipping the coefficient. Headline finding (1.4–1.5× success multiplier for prior-success founders) is robust across summaries.

Non-founder cohorts — curation only

Cross-cohort generalization of Gompers et al. is uncertain. The performance-persistence finding is well-identified for VC-backed founders; equivalent panel evidence for athletes, creators, medicine, or BigLaw cohorts is not available at the published- literature level. For these cohorts, Adj #4 should be treated as a curation signal— the issuer’s documented event history surfaces a quality dimension, but the +4%/event magnitude is not regression-anchored outside the founder cohort.

Engine refactor required to ship

The current adjustments.ts signature applies the same computeMagnitude across all cohorts. Shipping a split-cohort Adj #4 requires adding cohort-conditional dispatch — the function should return the regression-anchored magnitude when cohort.id.startsWith(“founder-”) and the curation magnitude otherwise. Until that refactor, Adj #4 stays as design-pending — the spec is published and reviewable, the coefficient is not yet in the config file, and the engine continues to apply the +4%/event uniformly with a first-principles seed label.

Consistency with DR-v1 and CP-v2

  • DR-v1. No overlap. Performance persistence is an idiosyncratic forward-anchor effect, not systematic.
  • CP-v2. Cohort priors anchor against entry-pool data; Adj #4 modifies within-cohort position based on documented event capture. Survival mixture in CP-v2 doesn’t interact with this — events are realized within the still-in-cohort portion of the trajectory.
  • Engine architecture. Cohort-conditional dispatch (queued) doesn’t conflict with any current orthogonality argument; it adds a new branch within Adj #4’s computeMagnitude only.

§8 — Adj #7: Pipeline scale (anchor gap)

No individual-level pipeline-realization literature existsAdj #7 is the adjustment most in need of custom analysis in the 15-table. The conceptually correct regression — “does a signed forward contract pipeline predict realized future income at the individual level?” — has, to our knowledge, not been published in the academic literature. The closest analogs are firm-level (construction backlog → revenue, oil & gas reserves → production) and don’t generalize cleanly to individual issuers. The current engine magnitude (ratio · 5%, capped +20%) is policy.

Empirical question

Do signed-but-unrealized forward contracts (book deals, sponsorship arrangements, signed term sheets, equity vesting schedules, guaranteed contract years for athletes) predict realized future income, conditional on cohort?

Closest available evidence (firm-level analogs)

DomainPipeline → realization rateGeneralizes to individual?
Construction industry backlog → 1-yr revenue~85–95% (firm-level, large public-construction sample)No — backlog is firm-level commitment
Oil & gas reserves → annual production~10–20% per year of proved-developed reservesNo — geological vs human-capital dynamics
Athlete guaranteed contracts (NBA, MLB, NHL)~95% (cap-related cuts and injury exclusions only)Partial — applies to guaranteed-contract athletes only
Athlete non-guaranteed contracts (NFL)~60% (cut risk before signing bonus or year-end)Partial — NFL specific
Creator sponsorship dealsHighly variable; platform-internal data onlyPartial — requires per-platform data
Founder term sheets / signed LOIsVariable by stage (seed: ~70% close, Series A: ~85%)Partial — pre-money financing, not income

Regression specification (for a future custom analysis)

realizedYi,t+1  =  α  +  βsigned pipeline EVi,t  +  γlogYi,t  +  δagei  +  θc1[cohorti=c]  +  ui\text{realized}\,Y_{i,\,t+1} \;=\; \alpha \;+\; \beta \cdot \text{signed pipeline EV}_{i,\,t} \;+\; \gamma \cdot \log Y_{i,\,t} \;+\; \delta \cdot \text{age}_i \;+\; \theta_c \cdot \mathbf{1}[\text{cohort}_i = c] \;+\; u_i

where signed pipeline EVi,t\text{signed pipeline EV}_{i,t}is the probability-weighted expected value of the issuer’s signed forward contracts as of time tt. β\beta would be the pipeline-realization elasticity. This regression has not been run at the individual level in any literature we could verify; running it would require a custom dataset stitched from per-cohort sources (Spotrac for athlete contracts, talent- agency book-of-business for entertainment, Crunchbase term sheets for founders, platform-internal data for creators).

No defensible citation

We decline to cite firm-level backlog-conversion literature (construction, oil & gas) as if it anchored an individual-level pipeline coefficient — the mechanisms are too different (firm- level commitments vs human-capital realization, capital-asset dynamics vs labor-income dynamics). Citing it would be calibration theater of the worst kind: a real cite attached to a coefficient it doesn’t support.

The honest declaration: no academic literature presently anchors Adj #7’s slope or breakpoints at the individual level. The current 5%-of-pipeline-ratio coefficient is policy — defensible only as a curation signal that surfaces documented forward-pipeline evidence.

Recommended posture

Treat Adj #7 as untenable for regression anchoring until a custom per-cohort realization-rate analysis is commissioned. Two paths:

  • Demote to curation signal. Same posture as Adj #5, #8, #9. Magnitude stays as policy; documented pipeline serves as a verifiability/quality filter, not a forward-income coefficient.
  • Commission custom analysis. Per-cohort realization-rate study using Spotrac (athletes), Crunchbase (founders), platform-internal data (creators), entertainment-industry book-of-business (talent). Output: cohort-conditional βpipeline\beta_{\text{pipeline}} with realization-rate confidence intervals.

Until either path is taken, Adj #7 is the most fragile coefficient in the 15-table, and the spec records that fragility honestly.

Consistency with DR-v1 and CP-v2

  • DR-v1. No overlap. Pipeline-realization is forward anchor adjustment, not systematic risk premium.
  • CP-v2. Pipeline evidence is per-issuer, not cohort-prior. Independent layer.

§9 — Structural design-anchored: Adj #12, #13

Two adjustments motivated by literature, not regression-anchoredAdj #12 (age-vs-cohort runway) and Adj #13 (TEB-bucket override anchor scaling) are structural adjustments— their coefficients are residuals or policy bounds rather than directly estimated regression slopes. The literature motivates the form (Mincer’s lifecycle earnings function for #12; the self-report-vs-administrative-record measurement-error literature for #13), but the engine’s magnitudes are not regression β values. Both stay as inline literals in adjustments.ts; neither migrates to the config file.

Adj #12 — Age-vs-cohort runway (lifecycle residual)

Magnitude: 0.5pp/year applied to (cohort age-peak − issuer age), clamped ±5pp on segment growth (all segments). Positive when issuer is younger than the cohort age-peak (runway remaining); negative when older (declining phase).

Empirical question.Does an issuer’s distance from the cohort earnings peak predict S1 growth rate, conditional on the cohort growth segments?

Dataset.PSID for lifecycle earnings panels; CPS for cross-sectional age-earnings (used by Murphy-Welch). Cohort peak ages drawn from the engine’s per-cohort age-curve (cohort-baseline data; see CP-v2).

Regression spec (Mincer earnings function).

logYi,t  =  α  +  β1expi,t  +  β2expi,t2  +  γschoolingi  +  δXi  +  ε\log Y_{i,t} \;=\; \alpha \;+\; \beta_1 \cdot \text{exp}_{i,t} \;+\; \beta_2 \cdot \text{exp}^2_{i,t} \;+\; \gamma \cdot \text{schooling}_i \;+\; \delta \cdot X_i \;+\; \varepsilon

The lifecycle slope at experience xx is β1+2β2x\beta_1 + 2\beta_2 x; peaks at x=β1/(2β2)2535x^* = \beta_1 / (-2\beta_2) \approx 25 - 35 years depending on cohort.

Magnitude reasoning.Mincer’s classic estimates (β10.10,β20.0017\beta_1 \approx 0.10, \beta_2 \approx -0.0017) imply ±10 years from peak gives ±3.4pp/year absolute lifecycle slope. But the engine’s cohort growth segments already encode this lifecycle shape.Adj #12’s coefficient is the residual slope after cohort segments capture the cohort-typical age trajectory — empirically in the range 0.3–0.7pp/year, depending on how tightly cohort segments fit the personal age curve. The engine’s 0.5pp/year sits in this range — defensible as a structural residual.

Citations.

  • Mincer, J. Schooling, Experience, and Earnings. NBER / Columbia University Press, 1974. Foundational Mincer earnings function.
  • Murphy, K. M. & Welch, F. “Empirical Age-Earnings Profiles.” Journal of Labor Economics 8(2):202–229, 1990. Modern cross-section estimates of the lifecycle profile.

Cite spot-check —Mincer 1974 NBER monograph: high confidence (~95%); foundational and widely cited. Murphy-Welch 1990 JOLE 8(2): ~90% confident on journal/volume/year; pages 202–229 to verify before final.

Recommendation. Design-anchored, not regression-anchored. Coefficient stays inline in adjustments.ts with a Mincer-motivation comment. Do not migrate to the config file — the 0.5pp/year is a residual, not a regression β. If a future calibration session wants a regression anchor, the relevant fit is a panel residual after cohort growth segments (custom run, no published exact analog).

Consistency with DR-v1 and CP-v2. No overlap with rfr_f, βcERP\beta_c \cdot \text{ERP}, or πilliq\pi_{\text{illiq}}. CP-v2 cohort growth segments carry the cohort-typical age trajectory; Adj #12 is the orthogonal personal-residual on top. Shift-equivalence test passes.

Adj #13 — TEB-bucket override anchor scaling (Bayesian shrinkage)

Magnitude: (issuer-declared TEB bucket midpoint / cohort p50) − 1, clamped ±20% on anchor. Issuer can shift the cohort-prior anchor up to ±20% with a self-declaration; beyond that, cohort prior dominates.

Empirical question.How much weight should the engine give an issuer’s self-declared TEB bucket against the cohort-prior anchor?

Dataset. Self-reported earnings vs administrative records (W-2, IRS) — the canonical synthesis is Bound-Brown- Mathiowetz 2001, Handbook of Econometrics chapter, drawing on PSID + SIPP + matched administrative records.

Regression spec (validation regression).

logYiadmin  =  α  +  βlogYiself-report  +  γXi  +  ui\log Y^{\text{admin}}_i \;=\; \alpha \;+\; \beta \cdot \log Y^{\text{self-report}}_i \;+\; \gamma \cdot X_i \;+\; u_i

Bound-Brown-Mathiowetz find correlation 0.85–0.92 at the individual level, implying ~10–15% measurement error in self-reports. The ±20% engine cap is more generous than typical self-report error — it lets the issuer move the anchor inside a stated tolerance, with cohort prior dominating beyond the cap. The cap is a Bayesian-shrinkage discipline, not a regression β.

Citation.

Bound, J., Brown, C., Mathiowetz, N. “Measurement Error in Survey Data.” In Handbook of Econometrics, Vol. 5, Heckman, J. & Leamer, E. (eds.), Elsevier, 2001, pages 3705–3843.

Cite spot-check —Bound-Brown-Mathiowetz Handbook of Econometrics chapter, Vol. 5, 2001: ~85% confident on bibliographic details. Author lineup and general handbook citation are robust; exact volume/year/page range to verify before final. Substantive findings (0.85–0.92 self-report-vs-admin correlation, 10–15% measurement error) are widely cited.

Recommendation. Design-anchored / Bayesian- shrinkage policy. Coefficient stays inline; no migration to the config file. Cite Bound-Brown-Mathiowetz 2001 as motivation for the ±20% bound width.

Consistency with DR-v1 and CP-v2.No overlap. The self-declaration mechanism is per-issuer and operates on the cohort-prior anchor; DR-v1 components don’t touch the anchor, and CP-v2’s cohort-prior re-anchoring sets the p50 that #13’s ratio is computed against. The two specs are input-output adjacent: CP-v2 sets the cohort p50, #13 lets the issuer shift up to ±20% from it.

§10 — Structural mismatches and double-counts: Adj #14, #15

Two adjustments need fix-then-anchorAdj #14 (industry-specificity refinement) and Adj #15 (reporting transparency aggregate) are structurally problematic — same category as the Adj #2 HHI/CV mismatch we resolved in 2026-04. For both, the fix is a small refactor; we flag the issues here and queue them for a follow-up sprint rather than anchoring the current implementations to literature that doesn’t describe what the code computes.

Adj #14 — Industry-specificity refinement (mismatch + brittle keyword match)

Current implementation: hardcoded keyword string match on input.industry: AI/ML +5pp, crypto/blockchain +3pp, biotech +2pp, retail/brick -2pp on segment growth (S1+S2). Bound [-5%, +10%].

Three structural problems.

  1. Cohort selection already does sector-specificity. The cohort registry differentiates founder-pre-seed-bb-saas-us from medicine-surgical-private etc., with cohort-specific growth segments. Adj #14 layers another sector tilt on top — partial double-count with cohort selection.
  2. Keyword match is brittle. Lowercase substring “ai” matches industry strings containing the substring (false positives easy to construct); misses “machine learning” (no “ml” substring on word boundary). Coverage is fashionable-only — zero coverage of services, manufacturing, finance, education, government, healthcare-non-surgical, etc.
  3. Magnitudes are seeds, not anchored. +5/+3/+2/-2pp on growth aren’t tied to any sector-growth dataset. Sector wage-growth literature (BLS sector indices) and equity-sector-beta data exist, but the engine’s hardcoded values aren’t derived from them.

Recommended fix-then-anchor (queued). Two options:

  • (a)Drop entirely. Cohort selection already handles sector specificity. Cleanest path. The +4/+3/+2/-2 hardcoded values were design seeds for a 5-cohort registry; once cohort granularity expands (CP-v2 v1.1 → ~30 cohorts), the per-issuer sector tilt becomes structurally redundant.
  • (b)Replace with cohort-conditional dispatch. Same refactor pattern as Adj #4 founder-cohort dispatch. The function branches on cohort.id to apply sector-specific growth refinements where the cohort registry doesn’t already capture them.

Citation.None defensiblefor the current implementation. We do not anchor a fashionable-sector keyword tilt to sector-growth literature it doesn’t describe.

Adj #15 — Reporting transparency aggregate (redundant aggregator)

Current implementation: -2% on bands per signal, floor -6%. Signals: willReportQuarterly, commitLetterSigned, proofLinks ≥ 3.

Structural problem — partial double-count. Same evidence already fires in standalone adjustments:

EvidenceStandalone adjustmentAdj #15 contributionCombined raw
willReportQuarterly#10: -5% bands-2% bands-7% bands
commitLetterSigned#11: -4% bands-2% bands-6% bands
proofLinks ≥ 3#8: -4% bands (≥3) / -8% (≥5)-2% bands-6% bands (≥3) / -10% (≥5)

With all three signals present, the same evidence fires four times into bands (#8 + #10 + #11 + #15). Combined raw band-shift: -19pp before damping. After damping βdamp=1/(1+0.5knz)0.22\beta_{\text{damp}} = 1/(1 + 0.5 k_{\text{nz}}) \approx 0.22 with 5 active adjustments, damped contribution ≈ -4.2pp on bands. Bounded by composition damping but structurally redundant — the single evidence willReportQuarterly = true should not produce two separate band-shifting magnitudes.

Recommended fix-then-anchor (queued). Three options:

  • (a)Drop #15 entirely. It is a sum of subsets of #10, #11, #8 with different magnitudes. Simplest fix; preserves orthogonality across band-shift adjustments. Recommended.
  • (b)Reframe #15 as the canonical aggregate. Remove #10 and #11 as standalone adjustments; #15 carries the combined attestation-band-narrowing logic with -6% floor. Breaks existing tests; requires fixture regeneration.
  • (c)Soft-cap restructuring. Convert #15 from an additive aggregator to a soft cap on combined attestation-band-narrowing across {#8, #10, #11}. Most complex; preserves the existing per-adjustment magnitudes but enforces a combined floor.

Citation.None defensiblefor the current implementation. We do not anchor a redundant aggregator to disclosure-discipline literature it doesn’t cleanly describe.

Cross-reference to §6. Adj #15 also appears in the curation-signals discussion in §6 (consistency-with-DR-v1-and- CP-v2 paragraph) where the within-engine double-count is flagged but not derived. Section 10 here is the derivation; §6 is the curation-side declaration.

§11 — What's not in this spec

This page now covers all 15 adjustments end-to-end across three calibration rounds. Subsequent work flows from it but lives in separate sessions:

  • Cohort-conditional dispatch in adjustments.ts. Required to ship Adj #4’s founder-cohort coefficient and to fix Adj #14’s structural mismatch. Small refactor: computeMagnitude branches on cohort.id to return regression-anchored magnitude for founder-*cohorts (Adj #4) and to either drop or cohort-route Adj #14’s sector tilt.
  • Drop Adj #15 (or restructure to soft-cap). Partial double-count with #8/#10/#11 on the same evidence (will-report, commit-letter, ≥3 proof links). Recommended: drop entirely. Test fixtures will need regeneration; band-shift contributions for issuers with attestation evidence will tighten by ~1pp post-damping. Behavioral change is minor; the structural cleanup is the point.
  • Custom pipeline-realization analysis (Adj #7). Per-cohort realization-rate study using Spotrac (athletes), Crunchbase (founders), platform-internal data (creators), entertainment-industry book-of-business (talent). The most fragile coefficient in the table; spec records the fragility honestly.
  • Forward-variance regression for Adj #2 slope. Custom run on PSID or SSA panel data to anchor βslope\beta_{\text{slope}}. Out of scope until commissioned; the saturation-anchored 0.30/unit slope ships in the meantime with explicit TBD-pending-Guvenen-style-forward-variance-regression tag in the code.
  • Calibration against PreFlop’s own outcomes. Requires realized issuer outcomes; same cold-start posture as DR-v1 and CP-v2. First refit fires once each cohort accrues ≥ 50 issuer-quarters of observed data. Once fired, every regression-anchored constant in the config file is candidate for re-fitting against PreFlop data; literature anchors become priors for the empirical refit.

Round summary — three rounds, all 15 adjustments addressed

RoundAdjustments addressedOutcome
Round 1 (Adj #1, #2, #3)Methodology framework + first three adjustmentsAdj #1 shipped (Guvenen 2007 AER); Adj #2 split-anchor (M-P breakpoints shipped, slope saturation-anchored pending); Adj #3 declared curation. HHI/CV mismatch in Adj #2 fixed and code-spec-name reconciled.
Round 2 (Adj #4 – #9)Earnings scarring + curation grouping + split-cohort + anchor gapAdj #6 shipped (JLS 1993 AER + Davis-Wachter 2011 BPEA); Adj #5/#8/#9 declared curation/policy; Adj #4 split-cohort partial (Gompers et al. 2010 JFE for founder cohort, design-pending until cohort dispatch); Adj #7 untenable until custom analysis.
Round 3 (Adj #10 – #15)Curation grouping extension + structural adjustments + structural mismatchesAdj #10/#11 added to curation grouping; Adj #12/#13 declared structural design-anchored (Mincer 1974 + Murphy-Welch 1990 JOLE; Bound-Brown-Mathiowetz 2001 Handbook of Econometrics); Adj #14/#15 flagged as structural mismatches with fix queued. No new config-file constants this round.

Final state — by category

CategoryAdjustmentsAction
Shipped (regression-anchored, in config)#1, #6Live engine reads from config file; spec quote and code constant identical
Shipped (M-P breakpoints) + design-pending slope#2Breakpoints in code; slope is placeholder pending forward-variance regression
Structural — design-anchored, not regression-derived#12, #13Stays inline with literature-motivation comment; Mincer 1974 + BBM 2001 anchor the form, not the slope
Split-cohort partial#4 (founder)Gompers et al. 2010 JFE anchor for founder cohort; queued behind cohort-dispatch refactor
Curation signals (no academic anchor)#3, #5, #8, #9, #10, #11Stay inline with curation-signal comment; magnitudes are policy / selection prior
Untenable / custom analysis required#7No individual-level pipeline-realization literature; recommend custom analysis
Structural mismatches / fix queued#14, #15Implementation issues (mismatch / double-count); recommend drop or refactor

The bar restatedA reviewer reads any adjustment’s subsection and concludes one of three things — regression-anchored to a named paper with named magnitude, policy with stated design constraint and queued regression, or declared curation signal. There is no fourth category. We do not paper over first-principles seeds with fake citations.

Related specs