class: center, middle, inverse, title-slide .title[ # Using Transparency and AI to Understand the Two Main Analyses of California’s Wealth Tax Proposal ] .subtitle[ ## An Open Policy Analysis of Proposition 40 ] .author[ ### Fernando Hoces de la Guardia ] --- name: prop40 # California's Proposition 40 On the ballot on 3 November 2026: a one-time tax of 5% on the net worth of Californians worth $1 billion or more, payable over five years, with the revenue mainly for health care. .quote-box[ "Control of Congress is the biggest issue at stake in November’s elections. A close second might be the fight over a ballot initiative in California, Proposition 40, that seeks to impose a wealth tax on the state’s roughly 250 billionaires." .quote-src[*The New York Times Magazine*, [14 October 2026](https://www.nytimes.com/2026/10/14/magazine/california-billionaires-tax.html)] ] <div class="camp"> <div class="camp-col" style="--c:#6a2f86"> <div class="camp-head"><img class="camp-logo" src="figs/prop40/clean/yes-logo.png" alt="Yes on 40"><div><div class="camp-k">For: cites the BSZ estimate</div><div class="camp-n">“about $100 billion” in revenue</div></div></div> <div class="camp-shot"><img class="camp-panel" src="figs/prop40/clean/yes-panel.png" alt="The Yes on 40 facts page, with a rectangle round its Keep hospitals and ERs open column, enlarged: research estimates Prop 40 could raise about $100 billion to replace funds lost to federal healthcare cuts (highlight added)."></div> </div> <div class="camp-col" style="--c:#1f6b3b"> <div class="camp-head"><img class="camp-logo" src="figs/prop40/clean/no-logo.png" alt="No on 40"><div><div class="camp-k">Against: cites the JR analysis (March 2026)</div><div class="camp-n">“$25 billion in lost revenue”</div></div></div> <div class="camp-shot"><img class="camp-panel" src="figs/prop40/clean/no-panel.png" alt="The No on 40 Get the Facts grid, with a rectangle round its first card, enlarged: will cost $25 billion in lost revenue; Prop 40 would leave California worse off by an estimated $25 billion once lost income tax revenue is considered, according to research from the Hoover Institution at Stanford University, March 2026 (highlight added)."></div> </div> </div> .footnote[Arguments from the official voter guide: California Secretary of State, *Official Voter Information Guide*, general election of 3 November 2026, Proposition 40, [argument in favor (p.56) and argument against (p.57)](https://voterguide.sos.ca.gov/propositions/40/arguments-rebuttals.htm). Campaign pages [yeson40.com/facts](https://yeson40.com/facts/) and [votenoon40.org](https://votenoon40.org/), captured 18 October 2026; highlights added.] --- name: why-opa # Why do we need Open Policy Analysis? .beside[ - Researchers, government agencies and think tanks produce **policy analyses**. These estimate the costs and benefits of a proposed policy from the best available research. - A policy analysis reports positive (empirical) quantities. It does not judge whether those costs and benefits are good or bad. - Decision makers can use the same analysis and still decide differently, because they value the same facts differently. ] .fig-pinned[<img src="../../../assets/figures/evidence-to-policy-from-analysis.svg" alt="One policy analysis leads one decision maker to support a policy and another to oppose it.">] --- name: why-opa-2 # Why do we need Open Policy Analysis? .beside[Often there are **competing analyses**, and each decision maker cites the one that fits. Proposition 40 has two, and they disagree on the sign: one finds a gain in revenue, the other a loss. A reader sees two conflicting results and cannot tell which assumptions produce the gap. An Open Policy Analysis makes each one checkable, from the output to the code.] .fig-pinned[<img src="../../../assets/figures/evidence-to-policy-competing-from-analysis.svg" alt="Two competing policy analyses of the same policy: one shows only gains and leads Decision Maker 1 to support it; the other shows only losses and leads Decision Maker 2 to oppose it.">] --- name: why-opa-3 # How do we move from many analyses to one? .pull-left[ Each decision maker picks the analysis that fits. We see which facts they chose, but we learn nothing about what they value. .center[<img src="../../../assets/figures/evidence-to-policy-competing-from-analysis.svg" style="width:85%;" alt="Two competing policy analyses of the same policy: one shows only gains and leads Decision Maker 1 to support it; the other shows only losses and leads Decision Maker 2 to oppose it.">] ] .pull-right[ One analysis gives every decision maker the same starting facts. Their choices then show what each of them truly values. .center[<img src="../../../assets/figures/evidence-to-policy-from-analysis.svg" style="width:85%;" alt="One policy analysis leads one decision maker to support a policy and another to oppose it.">] ] --- name: why-opa-4 class: head-beside # How do we move from alternative facts<sup>1</sup> to one common estimate? .fig-pinned.fig-split[<img class="half-bottom" src="../../../assets/figures/evidence-to-policy-competing-from-analysis-blackbox.svg" aria-hidden="true" alt="Two competing policy analyses of the same policy, drawn as black boxes: one shows only gains and leads Decision Maker 1 to support it; the other shows only losses and leads Decision Maker 2 to oppose it."><img class="half-top" src="../../../assets/figures/evidence-to-policy-competing-from-analysis-blackbox.svg" alt="Two competing policy analyses of the same policy, drawn as black boxes: one shows only gains and leads Decision Maker 1 to support it; the other shows only losses and leads Decision Maker 2 to oppose it.">] .footnote.beside[<sup>1</sup> What Manski calls *dueling certitudes*: rival analyses that each report one number with confidence and reach opposite conclusions (Charles F. Manski, ["Policy Analysis with Incredible Certitude"](https://doi.org/10.1111/j.1468-0297.2011.02457.x), *The Economic Journal*, 2011).] --- name: why-opa-5 class: head-beside, head-small # With transparency: Open Policy Analysis<sup>1</sup> .beside.mid[ - <b style="color:#d4880f">Open output</b>: one main estimate, with each assumption as a dial a reader can move. - <b style="color:#1484c5">Open analysis</b>: every step from the inputs to that estimate, written out, with the guesswork marked. - <b style="color:#0b4a7c">Open materials</b>: the data, code and tests that rerun it. ] .fig-pinned.fig-split[<img class="half-bottom" src="../../../assets/figures/evidence-to-policy-competing-from-analysis-opa.svg" aria-hidden="true" alt="The same two competing analyses, each now an Open Policy Analysis with its output, assumptions, details and materials open; one shows only gains and leads Decision Maker 1 to support the policy, the other only losses and leads Decision Maker 2 to oppose it."><img class="half-top" src="../../../assets/figures/evidence-to-policy-competing-from-analysis-opa.svg" alt="The same two competing analyses, each now an Open Policy Analysis with its output, assumptions, details and materials open; one shows only gains and leads Decision Maker 1 to support the policy, the other only losses and leads Decision Maker 2 to oppose it.">] .footnote.beside[<sup>1</sup> Hoces de la Guardia, F., Grant, S. and Miguel, E. (2021), ["A framework for open policy analysis"](https://doi.org/10.1093/scipol/scaa067), *Science and Public Policy*.] --- name: why-opa-6 class: head-beside # With transparency .beside[Once we can thoroughly appraise each policy analysis, we can understand their differences and build a third OPA that bridges the two, one input at a time. This lays the foundations for resolving the differences and moving closer to a common reality.] .fig-pinned.fig-split.fig-tall[<img src="../../../assets/figures/evidence-to-policy-competing-from-analysis-opa-third.svg" alt="The two competing analyses, each an Open Policy Analysis, and a third Open Policy Analysis between them, drawn from both.">] --- name: why-opa-7 class: head-beside # This is what this project does .beside[ - This project seeks to move policy analysis in this direction, using the example of a wealth tax proposal for California known as Proposition 40. - It builds three Open Policy Analyses on top of the two main original analyses used in the debate on this policy: Boll, Saez and Zucman (2026), **BSZ**, and Jaros and Rauh (2026), **JR**.<sup>1</sup> - The comparison does not pick the most credible estimate. It shows which components drive the gap. ] .footnote.beside[<sup>1</sup> Boll, J., Saez, E. and Zucman, G. (2026), ["California Billionaires: Wealth, Taxes, and Wealth Tax Revenue Estimates"](https://www.nber.org/papers/w35218), NBER Working Paper 35218, August. Jaros, B. and Rauh, J. (2026), ["The Net Present Value of the California Billionaire Tax Act"](https://www.nber.org/system/files/chapters/c15504/c15504.pdf), NBER chapter c15504, *Tax Policy and the Economy* 41, September.] .fig-pinned.fig-split.fig-tall[<img src="../../../assets/figures/evidence-to-policy-competing-from-analysis-opa-third.svg" alt="The two analyses, each an Open Policy Analysis, feed a third Open Policy Analysis, the comparison, which informs both decision makers.">] <div class="opa-labels"> <a class="opa-label" style="left:46.4%; top:37%;" href="../../../bsz-analysis/site/">The BSZ analysis</a> <a class="opa-label" style="left:46.4%; bottom:31%;" href="../../../rjkdc-analysis/site/">The JR analysis</a> <a class="opa-label opa-label-left" style="right:45%; top:53%;" href="../../../index.html">The comparison</a> </div> --- name: contents # Contents .toc[ 1. <span class="toc-done">Motivation</span> 2. [Artificial intelligence and Open Policy Analysis](#ai-opa) 3. [A brief description of each OPA](#opa-bsz) 4. [A summary of where the main differences are](#pseudo-eq) ] --- name: ai-opa class: big-bullets <style type="text/css"> .remark-code, .remark-inline-code { font-size: 80%; } .remark-slide-content { padding: 1em 2em; } .small { font-size: 80%; } /* A figure at a fixed height, so it stays in place when the heading above wraps (slides why-opa, why-opa-2 and why-opa-4 to why-opa-6, so the decision makers stay in place). */ .fig-pinned { position: absolute; top: 27%; bottom: 4%; right: 3%; text-align: right; } .fig-pinned img { height: 100%; width: auto; } /* Slides why-opa-4 and why-opa-5: the figure drawn twice, its top half raised by 30% of the figure's height and its bottom half lowered by 5%, so the two rows sit further apart. */ .fig-split img { position: absolute; top: 0; right: 0; } .fig-split img.half-bottom { clip-path: inset(50% 0 0 0); transform: translateY(5%); } .fig-split img.half-top { clip-path: inset(0 0 50% 0); transform: translateY(-30%); } .fig-split { left: 0; } .fig-split img { max-width: none; } /* why-opa-6: the third-OPA figure already has slide why-opa-5's rows; its image is 135% as tall and starts 30% higher (rows placed by the figure's build to match), so it is drawn at that size and offset to line up with why-opa-5. */ .fig-tall img { height: 135%; top: -30%; } /* why-opa-7: a link label on each OPA of the figure, to that OPA's overview page. Positions are measured on the rendered slide: under the top icon, over the bottom one, left of the middle one. */ .opa-labels { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .opa-label { position: absolute; transform: translateX(-50%); pointer-events: auto; white-space: nowrap; font-size: 0.8em; font-weight: 600; } .opa-label-left { transform: translateY(-50%); } /* A button in the lower-right corner, above the slide number: links to appendix slides and back. */ .corner-btn { position: absolute; right: 2em; bottom: 48px; font-size: 75%; font-weight: 600; padding: 0.3em 0.8em; border: 1px solid #1d4e89; border-radius: 4px; text-decoration: none; } /* contents: the deck's table of contents; parts already covered are greyed. */ .toc { font-size: 130%; margin-top: 1.2em; } .toc li { margin-bottom: 0.7em; } .toc-done { color: #999; } .toc-note { color: #999; font-size: 75%; } /* opa-bsz, opa-jr, opa-comparison: text left, the overview's before-and-after figures right. */ .opa-card .pull-left { font-size: 85%; } .cmp { display: flex; align-items: center; gap: 6px; margin-top: 30px; } .cmp-fig { flex: 1 1 0; text-align: center; } .cmp-fig svg { width: 100%; height: auto; } .cmp-kicker { display: block; font-size: 70%; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: #666; margin-bottom: 4px; } .cmp-arrow { font-size: 160%; color: #999; } /* one figure alone (the comparison card): the size of one of a pair */ .cmp-one .cmp-fig { flex: 0 1 50%; margin: 0 auto; } /* disclosure: the overview's credit table at slide size. */ .ai-badge.inline { font-size: 0.72em; margin-left: 0.1em; vertical-align: 0.05em; } /* pseudo-eq: the four terms, one slide each. */ .eq-list { margin: -0.6em 0 0.2em 1.2em; line-height: 1.3; } /* verification: the strategies by OPA. */ .verif { width: 100%; font-size: 80%; margin-top: 10px; } table.dt.verif th { vertical-align: bottom; text-align: left; } table.dt.verif td { vertical-align: top; text-align: left; padding: 8px 10px; } /* layer-*: the appendix's layer slides, the layer figure and text left, a screenshot right (figs/layers/, taken by screenshots.sh). */ .layer-slide .pull-left { width: 31%; font-size: 80%; } .layer-slide .pull-right { width: 65%; } .layer-fig { display: block; height: 150px; margin: 0 auto 6px; } .layer-shot img { width: 100%; border: 1px solid #ccc; box-shadow: 0 1px 4px rgba(0,0,0,.15); } .ai-use-slide table.ai-use { width: 100%; font-size: 70%; border-collapse: collapse; } .ai-use-slide table.ai-use th, .ai-use-slide table.ai-use td { text-align: left; padding: 4px 8px; border-bottom: 1px solid #e4e4e4; } .ai-use-slide .table-subhead { font-size: 75%; color: #666; } .ai-use-slide .sq { display: inline-block; width: 13px; height: 13px; margin-right: 3px; border-radius: 2px; vertical-align: -1px; } .ai-use-slide .sq.h { background: var(--credit-h); } .ai-use-slide .sq.ai { background: var(--credit-ai); } .ai-use-slide .sq.eq { background: linear-gradient(135deg, var(--credit-h) 50%, var(--credit-ai) 50%); } .ai-use-slide .sqs { display: block; white-space: nowrap; } .ai-use-slide .meter { display: inline-block; margin-right: 6px; white-space: nowrap; } .ai-use-slide .pip { display: inline-block; width: 10px; height: 10px; margin-right: 2px; border-radius: 50%; border: 1.5px solid #666; vertical-align: 0; } .ai-use-slide .pip.on { background: #111; border-color: #111; } .ai-use-slide .ai-key { font-size: 60%; color: #444; margin: 8px 0 0; line-height: 1.7; } .ai-use-slide .ai-key span { margin-right: 14px; white-space: nowrap; } /* ai-opa: larger bullets, a little apart. */ .big-bullets ul { font-size: 125%; } .big-bullets li { margin-bottom: 0.5em; } .big-bullets ul ul, .mid-bullets ul ul { font-size: 100%; } /* ai-challenges: a little larger than the default, with sub-bullets. */ .mid-bullets > ul, .mid-bullets .remark-slide-content > ul { font-size: 105%; } .mid-bullets li { margin-bottom: 0.3em; } /* The verification slide: three small OPA icons in a row. */ .opa-trio { display: flex; justify-content: center; gap: 7%; margin: 0.2em 0 0.6em; } .opa-trio figure { margin: 0; text-align: center; } .opa-trio img { height: 120px; } .opa-trio figcaption { font-size: 70%; margin-top: 0.2em; } /* prop40: the newspaper quote, set apart from the bullets. */ .quote-box { margin-top: 0.6em; padding: 0.2em 0.9em; border-left: 4px solid #999; color: #444; font-style: italic; font-size: 80%; } .quote-box p { margin: 0.2em 0; } .quote-src { font-style: normal; font-size: 85%; } /* prop40: each campaign's claim over a panel built from clean captures of its page (figs/prop40/clean/make_clean_panels.py, captured 2026-10-18): logo and voter-guide quote on top, the page small with a rectangle round the quoted block, the block enlarged beside it, the sentence marked with a highlighter band added before the capture. */ .camp { display: flex; gap: 22px; margin-top: 12px; } .camp-col { flex: 1 1 0; display: flex; flex-direction: column; } .camp-head { display: flex; align-items: center; gap: 10px; border-top: 4px solid var(--c); padding-top: 6px; margin-bottom: 7px; } .camp-logo { height: 33px; width: auto; border-radius: 2px; } .camp-k { font-size: 9px; letter-spacing: .12em; text-transform: uppercase; color: #555; font-weight: 700; } .camp-n { font-size: 17px; font-weight: 700; line-height: 1.15; } .camp-shot { display: flex; justify-content: center; } .camp-panel { display: block; max-width: 100%; max-height: 225px; width: auto; height: auto; } /* On why-opa-4 the heading wraps in the left column, clear of the raised top row. */ .head-beside h1 { width: 36%; } .head-beside .beside, .head-beside .footnote.beside { width: 35%; } /* Text beside a right-justified pinned figure: a left column that stops short of it. */ .beside { width: 40%; } .footnote.beside { width: 40%; } /* why-opa-5: the bullets centred vertically on the slide, one blank line apart. */ .beside.mid { position: absolute; top: 50%; transform: translateY(-50%); left: 3.3%; } .beside.mid li { margin-bottom: 1em; } .beside.mid li:last-child { margin-bottom: 0; } /* why-opa-5: its title wraps to four lines in the column, so the bullets sit below it. */ .remark-slide-content.head-small h1 { font-size: 44px; } .head-beside .beside.mid { top: 63%; } /* The summary slide: a heading and four bullets, centred between the title and the bottom. */ .summary .beside.mid { top: 58%; } .tiny { font-size: 65%; } .highlight-box { border-left: 1px solid #666666; padding: 0.5em 1em; margin: 0.5em 0; } .blue-box { border-left: 1px solid #666666; padding: 0.5em 1em; margin: 0.5em 0; } .site-nav { font-size: 11px; color: #5b6873; margin: 0 0 14px; } .site-nav a { color: #1d4e89; text-decoration: none; } .site-nav a:hover { text-decoration: underline; } .remark-slide-content.opa-slide { position: relative; z-index: 0; overflow: hidden; } /* Author credit, pinned near the slide's lower-left corner, above the fixed "Overview" link that the header script places in that corner. */ .opa-slide .credit { position: absolute; left: 2em; bottom: 48px; font-size: 65%; color: #5b6873; } .opa-slide .credit a { color: #1d4e89; } .opa-intro { font-size: 92%; max-width: 30em; margin: 0 auto 1.1em; } .opa-legend { font-size: 85%; line-height: 1.75; max-width: 34em; margin: 0 auto; text-align: left; } .opa-intro a, .opa-legend a { color: #1d4e89; } .opa-mark { position: absolute; top: 26px; right: 34px; height: 190px; width: auto; opacity: 0.218; z-index: -1; pointer-events: none; } .two { display: flex; gap: 2em; } .two > div { flex: 1; } .big { font-size: 180%; font-weight: 600; margin: 0.1em 0; } table.dt { border-collapse: collapse; width: 100%; font-size: 80%; margin-top: 0.5em; } table.dt td, table.dt th { padding: 4px 8px; border-bottom: 1px solid #e2e7ec; text-align: right; } table.dt td:first-child, table.dt th:first-child { text-align: left; } table.dt tr.tot td { font-weight: 600; border-top: 2px solid #5b6873; } table.dt th { background: none; } .og { font-size: 80%; padding: 1px 6px; border: 1px dashed #444444; color: #444444; white-space: nowrap; } .og.data { border-style: solid; } .og.scenario { border-color: transparent; font-style: italic; } .footnote { font-size: 60%; color: #5b6873; bottom: 3.6em; left: 3.4em; padding-right: 6em; } .pseudo-eq { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: center; gap: 6px 8px; margin: 0.8em 0 0.6em; } .pseudo-eq .term { display: inline-flex; flex-direction: column; align-items: center; min-width: 4.5em; max-width: 7.2em; text-align: center; padding: 4px 6px; } .pseudo-eq .term b { font-size: 120%; font-weight: 600; } .pseudo-eq .term small { font-size: 62%; color: #5b6873; line-height: 1.3; } .pseudo-eq .op { font-size: 130%; color: #5b6873; padding-top: 8px; } .pseudo-eq .run { font-size: 58%; color: #5b6873; white-space: nowrap; } .pseudo-eq .eq-step { display: inline-flex; align-items: flex-start; gap: 8px; } .claims { font-size: 85%; } .claims td, .claims th { vertical-align: top; text-align: left !important; } table.dt td.l, table.dt th.l { text-align: left; } .nb { white-space: nowrap; } /* The smaller-steps slide: a tighter table so its four notes fit under it. */ .remark-slide-content.tight-table table.dt { font-size: 72%; margin-top: 0.3em; } .remark-slide-content.tight-table table.dt td, .remark-slide-content.tight-table table.dt th { padding: 2px 6px; } </style> # Artificial intelligence and Open Policy Analysis - Open Policy Analysis has been around for several years (Hoces de la Guardia, 2017; Hoces de la Guardia, Grant and Miguel, 2021).<sup>1</sup> - Several organizations have moved to increase transparency in documentation, materials and visualizations, but none to the degree proposed in the original framework. - One explanation could be the cost of generating an OPA. Previous prototypes took **several months of work to generate one** OPA. - With the help of agentic coding, the cost of generating an OPA has dropped substantially. This project created **three OPAs in about a week** of work. .footnote[<sup>1</sup> Hoces de la Guardia, F. (2017), "How Transparency and Reproducibility Can Connect Research and Policy: A Case Study of the Minimum Wage Policy Estimates", PhD dissertation, Pardee RAND Graduate School. Hoces de la Guardia, F., Grant, S. and Miguel, E. (2021), ["A framework for open policy analysis"](https://doi.org/10.1093/scipol/scaa067), *Science and Public Policy*.] --- name: ai-challenges class: mid-bullets # The challenges of AI for OPA - Agentic coding tools can substantially reduce the cost of generating fully reproducible and transparent policy analysis. But can we trust the final output? - Two challenges: **reliability** (did it make up a result?) and **intelligibility** (are the exposition, methods and code easy to digest for different audiences?). - Reliability verification is key. When an OPA is built by the same authors or organization, verification is much easier. When it is built by outside analysts (as in this case), different strategies can be taken: - A thorough review of each layer, to confirm that the output is accurate. - Running the paper's robustness cases through the OPA, to see if it generates the same results. - Generating a set of tests where the OPA estimates under conditions that are not in the original paper, and asking the authors to run those scenarios in their model to verify that they obtain the same results. - Here we adopt a combination of the three strategies above, and disclose for each component of the OPA what has been AI generated, what has been reviewed and what has been verified. Each analysis's pages carry a badge that says how far they have been reviewed. --- name: verification # Verification: what was checked, and how <div class="opa-trio"> <figure><img src="../../../assets/opa/opa-all.png" alt="The OPA icon: four stacked layers."><figcaption>The BSZ analysis</figcaption></figure> <figure><img src="../../../assets/opa/opa-all.png" alt="The OPA icon: four stacked layers."><figcaption>The JR analysis</figcaption></figure> <figure><img src="../../../assets/opa/opa-all.png" alt="The OPA icon: four stacked layers."><figcaption>The comparison</figcaption></figure> </div> - **Three OPAs, five objects each**: an explorer, a report, slides, a repository and an overview page. With 15 objects in all, human verification was limited. - **Two tests** check the output: - *Results the papers print*, rerun in each OPA: all match ([BSZ 7 of 7](../../../bsz-analysis/site/checks.html#results), [JR 4 of 4](../../../rjkdc-analysis/site/checks.html#results)). - *Estimates the papers do not print*, sent to the authors to run in their own models: 10 settings to the BSZ team, 9 to the JR team. - **Next, an approach to disclose and verify**: an attribution table for each OPA shows what was human generated, what was human reviewed and what was neither. Readers can weigh each piece accordingly. --- name: disclosure # Disclosure and verification: the BSZ analysis <div class="ai-use-slide"> <table class="ai-use"> <thead><tr><th>Object</th><th>Ideas and<br>direction</th><th>Doing<br>the work</th><th>Writing</th><th>Human<br>verification</th></tr></thead> <tbody> <tr><td>Explorer<br><span class="table-subhead">Open Output</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization, supervision; Claude led methodology; not applicable: project administration" title="Ideas and direction: author led conceptualization, supervision; Claude led methodology; not applicable: project administration"><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft; author led review & editing" title="Writing: Claude led original draft; author led review & editing"><i class="sq h"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Reviewed" title="Reviewed"><i class="pip on"></i><i class="pip on"></i></span></td></tr> <tr><td>Report<br><span class="table-subhead">Open Analysis</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization; Claude led methodology, supervision; not applicable: project administration" title="Ideas and direction: author led conceptualization; Claude led methodology, supervision; not applicable: project administration"><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Lightly reviewed" title="Lightly reviewed"><i class="pip on"></i><i class="pip"></i></span></td></tr> <tr><td>Slides<br><span class="table-subhead">Open Analysis</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization, supervision; Claude led methodology; not applicable: project administration" title="Ideas and direction: author led conceptualization, supervision; Claude led methodology; not applicable: project administration"><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation; author led visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation; author led visualization"><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft; shared equally: review & editing" title="Writing: Claude led original draft; shared equally: review & editing"><i class="sq eq"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Reviewed" title="Reviewed"><i class="pip on"></i><i class="pip on"></i></span></td></tr> <tr><td>Repository<br><span class="table-subhead">Open Materials</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization; Claude led methodology, supervision; not applicable: project administration" title="Ideas and direction: author led conceptualization; Claude led methodology, supervision; not applicable: project administration"><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Lightly reviewed" title="Lightly reviewed"><i class="pip on"></i><i class="pip"></i></span></td></tr> <tr><td>Overview page<br><span class="table-subhead">the overview</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization; Claude led methodology, supervision; not applicable: project administration" title="Ideas and direction: author led conceptualization; Claude led methodology, supervision; not applicable: project administration"><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Lightly reviewed" title="Lightly reviewed"><i class="pip on"></i><i class="pip"></i></span></td></tr> </tbody> </table> <div class="ai-key"> <div><span><i class="sq h"></i> led by the author</span> <span><i class="sq ai"></i> led by Claude</span> <span><i class="sq eq"></i> shared equally</span></div> <div>One square per CRediT role in the group; roles that do not apply to an object are left out.</div> <div>Human verification: <span><span class="meter"><i class="pip"></i><i class="pip"></i></span>not reviewed</span> <span><span class="meter"><i class="pip on"></i><i class="pip"></i></span>lightly reviewed</span> <span><span class="meter"><i class="pip on"></i><i class="pip on"></i></span>reviewed</span></div> </div> </div> An example from the [BSZ analysis OPA](../../../bsz-analysis/site/). The columns group the 14 roles of the [CRediT contributor taxonomy](https://credit.niso.org/) (ANSI/NISO Z39.104-2022) into three: ideas and direction, doing the work, and writing. The last column, **human verification**, is this OPA's addition: how closely the author has checked each part. When an object is lightly reviewed or not reviewed, its title carries a badge: <span class="ai-badge ai-badge-yellow inline">AI generated, partially reviewed</span> or <span class="ai-badge ai-badge-red inline">AI generated, not reviewed yet</span>. <a class="corner-btn" href="#credit-jr">The other two OPAs’ tables →</a> --- name: contents-2 # Contents .toc[ 1. <span class="toc-done">Motivation</span> 2. <span class="toc-done">Artificial intelligence and Open Policy Analysis</span> 3. [A brief description of each OPA](#opa-bsz) 4. [A summary of where the main differences are](#pseudo-eq) ] --- name: opa-bsz class: opa-card # The BSZ analysis OPA .pull-left[ Boll, Saez and Zucman estimate the one-time tax at about $100 billion of wealth tax. This OPA rebuilds their Table 5 from the authors' public workbook, in R with a Python twin and tests, and nets the income tax effects into one main estimate of <span class="nb">$106.8B</span>. **What reproduces.** The authors' workbook and this code reproduce the published results. Seven notes on where the paper's text, tables and workbook describe a step differently are kept for transparency; none is a failure to reproduce. Every variation the paper prints reproduces (7 of 7). Ten settings the paper does not print have been sent to the authors to test. [Checks](../../../bsz-analysis/site/checks.html) [The BSZ analysis overview](../../../bsz-analysis/site/) <a class="corner-btn" href="#layer-bsz-output">Its layers, with screenshots →</a> ] .pull-right[ <div class="cmp"><div class="cmp-fig"><span class="cmp-kicker">The original analysis</span><svg viewBox="0 0 300 290" role="img" aria-label="The original analysis: an output layer and a details layer, apart from each other, and a materials layer apart from both whose front half is solid and whose back half is a dashed outline" xmlns="http://www.w3.org/2000/svg"><polygon points="0,216 92,170 138,193 46,239 46,265 0,242" fill="none" stroke="currentColor" stroke-width="1.5" stroke-dasharray="5 4" opacity="0.55"/><polyline points="0,216 46,239" fill="none" stroke="currentColor" stroke-width="1.5" stroke-dasharray="5 4" opacity="0.55"/><polygon points="46,239 92,262 92,288 46,265" fill="#002547"/><polygon points="92,262 184,216 184,242 92,288" fill="#003262"/><polygon points="46,239 138,193 184,216 92,262" fill="#0b4a7c"/><text transform="matrix(0.894 -0.447 0 1 138.0 257.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="10" letter-spacing="1.5" fill="#fff">MATERIALS</text><polygon points="116,138 208,184 208,210 116,164" fill="#1581ab"/><polygon points="208,184 300,138 300,164 208,210" fill="#1582b8"/><polygon points="208,92 300,138 208,184 116,138" fill="#1484c5"/><text transform="matrix(0.894 -0.447 0 1 254.0 179.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">DETAILS</text><polygon points="0,52 92,98 92,124 0,78" fill="#da9516"/><polygon points="92,98 184,52 184,78 92,124" fill="#eca516"/><polygon points="92,6 184,52 92,98 0,52" fill="#fcb415"/><text transform="matrix(0.894 -0.447 0 1 138.0 93.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">OUTPUT</text></svg></div><span class="cmp-arrow">→</span><div class="cmp-fig"><span class="cmp-kicker">This OPA</span><svg viewBox="0 0 300 290" role="img" aria-label="This OPA: output, assumptions, details and materials stacked tightly in one vertical plane; the output and assumptions layers together make the open output" xmlns="http://www.w3.org/2000/svg"><polygon points="58,181 150,227 150,253 58,207" fill="#002547"/><polygon points="150,227 242,181 242,207 150,253" fill="#003262"/><polygon points="150,135 242,181 150,227 58,181" fill="#0b4a7c"/><text transform="matrix(0.894 -0.447 0 1 196.0 222.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="10" letter-spacing="1.5" fill="#fff">MATERIALS</text><polygon points="58,150 150,196 150,222 58,176" fill="#1581ab"/><polygon points="150,196 242,150 242,176 150,222" fill="#1582b8"/><polygon points="150,104 242,150 150,196 58,150" fill="#1484c5"/><text transform="matrix(0.894 -0.447 0 1 196.0 191.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">DETAILS</text><polygon points="58,110 150,156 150,182 58,136" fill="#c97f0a"/><polygon points="150,156 242,110 242,136 150,182" fill="#e08e0b"/><polygon points="150,64 242,110 150,156 58,110" fill="#f39c12"/><text transform="matrix(0.894 -0.447 0 1 196.0 151.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="9" letter-spacing="1.2" fill="#fff">ASSUMPTIONS</text><polygon points="58,80 150,126 150,152 58,106" fill="#da9516"/><polygon points="150,126 242,80 242,106 150,152" fill="#eca516"/><polygon points="150,34 242,80 150,126 58,80" fill="#fcb415"/><text transform="matrix(0.894 -0.447 0 1 196.0 121.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">OUTPUT</text></svg></div></div> ] --- name: opa-jr class: opa-card # The JR analysis OPA .pull-left[ Jaros and Rauh find a mean net present value of <span class="nb">−$38.9B</span>: the wealth tax minus the income tax lost for ever when billionaires leave. This OPA reruns the authors' own code as shipped, in R with a Python twin and tests, and computes the exact average of their Monte Carlo, <span class="nb">−$38.98B</span>. **What reproduces.** The authors' code reproduces the published results. Ten notes on where their text, READMEs and code describe a step differently are kept for transparency; none is a failure to reproduce. Every variation the papers print reproduces (4 of 4). Nine settings the papers do not print have been sent to the authors to test. [Checks](../../../rjkdc-analysis/site/checks.html) [The JR analysis overview](../../../rjkdc-analysis/site/) <a class="corner-btn" href="#layer-jr-output">Its layers, with screenshots →</a> ] .pull-right[ <div class="cmp"><div class="cmp-fig"><span class="cmp-kicker">The original analysis</span><svg viewBox="0 0 300 290" role="img" aria-label="The original analysis: output, details and materials layers, all solid, apart from each other and not lined up" xmlns="http://www.w3.org/2000/svg"><polygon points="0,216 92,262 92,288 0,242" fill="#002547"/><polygon points="92,262 184,216 184,242 92,288" fill="#003262"/><polygon points="92,170 184,216 92,262 0,216" fill="#0b4a7c"/><text transform="matrix(0.894 -0.447 0 1 138.0 257.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="10" letter-spacing="1.5" fill="#fff">MATERIALS</text><polygon points="116,138 208,184 208,210 116,164" fill="#1581ab"/><polygon points="208,184 300,138 300,164 208,210" fill="#1582b8"/><polygon points="208,92 300,138 208,184 116,138" fill="#1484c5"/><text transform="matrix(0.894 -0.447 0 1 254.0 179.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">DETAILS</text><polygon points="0,52 92,98 92,124 0,78" fill="#da9516"/><polygon points="92,98 184,52 184,78 92,124" fill="#eca516"/><polygon points="92,6 184,52 92,98 0,52" fill="#fcb415"/><text transform="matrix(0.894 -0.447 0 1 138.0 93.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">OUTPUT</text></svg></div><span class="cmp-arrow">→</span><div class="cmp-fig"><span class="cmp-kicker">This OPA</span><svg viewBox="0 0 300 290" role="img" aria-label="This OPA: output, assumptions, details and materials stacked tightly in one vertical plane; the output and assumptions layers together make the open output" xmlns="http://www.w3.org/2000/svg"><polygon points="58,181 150,227 150,253 58,207" fill="#002547"/><polygon points="150,227 242,181 242,207 150,253" fill="#003262"/><polygon points="150,135 242,181 150,227 58,181" fill="#0b4a7c"/><text transform="matrix(0.894 -0.447 0 1 196.0 222.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="10" letter-spacing="1.5" fill="#fff">MATERIALS</text><polygon points="58,150 150,196 150,222 58,176" fill="#1581ab"/><polygon points="150,196 242,150 242,176 150,222" fill="#1582b8"/><polygon points="150,104 242,150 150,196 58,150" fill="#1484c5"/><text transform="matrix(0.894 -0.447 0 1 196.0 191.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">DETAILS</text><polygon points="58,110 150,156 150,182 58,136" fill="#c97f0a"/><polygon points="150,156 242,110 242,136 150,182" fill="#e08e0b"/><polygon points="150,64 242,110 150,156 58,110" fill="#f39c12"/><text transform="matrix(0.894 -0.447 0 1 196.0 151.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="9" letter-spacing="1.2" fill="#fff">ASSUMPTIONS</text><polygon points="58,80 150,126 150,152 58,106" fill="#da9516"/><polygon points="150,126 242,80 242,106 150,152" fill="#eca516"/><polygon points="150,34 242,80 150,126 58,80" fill="#fcb415"/><text transform="matrix(0.894 -0.447 0 1 196.0 121.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">OUTPUT</text></svg></div></div> ] --- name: opa-comparison class: opa-card # The comparison OPA .pull-left[ The comparison puts both analyses on one common output, the net fiscal effect (the wealth tax, plus income tax from asset sales, minus the present value of income tax lost), and moves from one main estimate to the other one disputed input at a time.<sup>1</sup> Its explorer lets a reader set each input to either analysis's value. **What reproduces.** Both main estimates are rebuilt on the common output from the two analyses' exported files, <span class="nb">$106.8B</span> and <span class="nb">−$39.0B</span>. Each step of the bridge is the change from moving one explorer dial, in R and in the browser (the steps add up to the gap by construction). The R and Python versions agree. [The comparison overview](../../../index.html) <a class="corner-btn" href="#layer-cmp-output">Its layers, with screenshots →</a> ] .pull-right[ <div class="cmp cmp-one"><div class="cmp-fig"><span class="cmp-kicker">This OPA</span><svg viewBox="0 0 300 290" role="img" aria-label="This OPA: output, assumptions, details and materials stacked tightly in one vertical plane; the output and assumptions layers together make the open output" xmlns="http://www.w3.org/2000/svg"><polygon points="58,181 150,227 150,253 58,207" fill="#002547"/><polygon points="150,227 242,181 242,207 150,253" fill="#003262"/><polygon points="150,135 242,181 150,227 58,181" fill="#0b4a7c"/><text transform="matrix(0.894 -0.447 0 1 196.0 222.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="10" letter-spacing="1.5" fill="#fff">MATERIALS</text><polygon points="58,150 150,196 150,222 58,176" fill="#1581ab"/><polygon points="150,196 242,150 242,176 150,222" fill="#1582b8"/><polygon points="150,104 242,150 150,196 58,150" fill="#1484c5"/><text transform="matrix(0.894 -0.447 0 1 196.0 191.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">DETAILS</text><polygon points="58,110 150,156 150,182 58,136" fill="#c97f0a"/><polygon points="150,156 242,110 242,136 150,182" fill="#e08e0b"/><polygon points="150,64 242,110 150,156 58,110" fill="#f39c12"/><text transform="matrix(0.894 -0.447 0 1 196.0 151.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="9" letter-spacing="1.2" fill="#fff">ASSUMPTIONS</text><polygon points="58,80 150,126 150,152 58,106" fill="#da9516"/><polygon points="150,126 242,80 242,106 150,152" fill="#eca516"/><polygon points="150,34 242,80 150,126 58,80" fill="#fcb415"/><text transform="matrix(0.894 -0.447 0 1 196.0 121.7)" text-anchor="middle" font-family="IBM Plex Sans, Segoe UI, sans-serif" font-weight="600" font-size="11" letter-spacing="1.5" fill="#fff">OUTPUT</text></svg></div></div> ] .footnote.beside[<sup>1</sup> A previous comparison, Hoopes, J. L. (2026), ["Galle v Rauh: Comparing Two Revenue Estimates for California Billionaire Taxation"](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6428578), SSRN Working Paper 6428578, uses earlier versions of both analyses. [The appendix](#hoopes) sets its steps beside this bridge.] --- name: contents-3 # Contents .toc[ 1. <span class="toc-done">Motivation</span> 2. <span class="toc-done">Artificial intelligence and Open Policy Analysis</span> 3. <span class="toc-done">A brief description of each OPA</span> 4. [A summary of where the main differences are](#pseudo-eq) ] --- name: pseudo-eq # What separates the two numbers .small[ Both estimates are on one measure, output (b), the net fiscal effect. It is the wealth tax, plus income tax from assets sold to pay it, minus income tax lost to people who leave. The equation moves the explorer's BSZ panel dials one at a time to the JR values, in the order shown (the dial path). Each amount is what its dials change. ] <div class="pseudo-eq"><span class="term"><b>$106.80B</b><small>BSZ estimate</small></span><span class="eq-step"><span class="op">−</span><span class="term"><b>$29.89B</b><small>Billionaires who moved out in time (i)</small></span></span><span class="eq-step"><span class="op">−</span><span class="term"><b>$39.44B</b><small>Chance the tax does not survive litigation (ii)</small></span></span><span class="eq-step"><span class="op">−</span><span class="term"><b>$81.34B</b><small>Lost income tax (iii)</small></span></span><span class="eq-step"><span class="op">+</span><span class="term"><b>$4.89B</b><small>Other inputs together (iv)</small></span></span><span class="eq-step"><span class="op">=</span><span class="term"><b>−$38.98B</b><small>JR estimate</small></span></span></div> .small[ The D and q terms are single steps of the dial path. Lost income tax is the four loss-box dials of the path added up (H, f, C and r). The last term is the other three steps added up (W, a and the minor switch). At two decimals the terms add up exactly. The JR estimate here is the exact average of the authors' Monte Carlo; their seeded run prints <span class="nb">−$38.9B</span>. ] Next, we analyze each component, one at a time: .eq-list[ (i) Who moved out in time?<br> (ii) Is the revenue discounted for court risk?<br> (iii) How long is the lost income tax counted? Then *f*, *C* and *r*<br> (iv) The other inputs together ] .small[ Each slide labels the kind of claim. **data**: settled by observable facts (lists, filings, tax statistics). **research**: a parameter taken from published studies. **guesswork**: an assumption with no data or study behind it, legal judgements included. **scenario**: a choice of which world to estimate, which neither data nor studies settle. **derived**: computed from the analysis's own inputs. ] --- name: diff-departed # (i) Who moved out in time? <table class="dt claims"><tr><th style="width:50%">The BSZ analysis</th><th>The JR analysis</th></tr><tr><td><b>No named departure is removed.</b> The benchmark taxes everyone resident in California on 1 January 2026. No one is counted by name without evidence of a change of legal residence before 1 January (BSZ PDF p.23 fn.30). Its 10% avoidance already counts 5% of billionaires who left in time (BSZ PDF p.24). Its Table 5 row 3 scenario counts four named billionaires as having moved in time: Page, Thiel, Hankey and Kalanick.</td><td><b>Seven billionaires are counted as having moved in time</b>, on public reports of their moves (Page, Brin, Thiel, Hankey, Spielberg, Kalanick and Sacks), and taken out of the base before the tax: 28.6% of its wealth (NPV_dist_v8.R:19).</td></tr></table> .pull-left[ **Kind of claim:** <span class="og guesswork">guesswork</span> on <span class="og data">data</span>. Who announced a move is observed. Whether that move ended legal residence before 1 January is a legal judgement. **Why it is large:** the 5% tax falls only on wealth still in the state, and the seven hold 28.6% of it. *D* moves first on the path, while *q* is still 1, so that share of the revenue is lost in full. ] .pull-right[ .highlight-box[ **Dollars moved, on (b):** <span class="nb">−$29.9B</span>, step 1 of the dial path. ] ] --- name: diff-litigation # (ii) Is the revenue discounted for court risk? <table class="dt claims"><tr><th style="width:50%">The BSZ analysis</th><th>The JR analysis</th></tr><tr><td><b>No discount (<i>q</i> = 100%).</b> The Act as written, collected in full. Neither BSZ nor the expert report it builds on (GGSS: Galle, Gamage, Saez and Shanske) discounts the revenue for litigation risk (BSZ Table 5; GGSS p.4). The authors' expert report judges the Act drafted to stay clear of constitutional issues (GGSS p.11).</td><td><b>A discount (<i>q</i> = 50%).</b> The revenue is multiplied by the chance the Act survives a court challenge, which the authors set at the "more likely than not" threshold of ASC 740-10 (NBER README; chapter Secs. 4.2 and 4.4, PDF pp.19-23, eqs. 3 and 6). The Monte Carlo draws the revenue anywhere between zero (struck down) and the <span class="nb">$72B</span> ceiling; its average is half the ceiling.</td></tr></table> .pull-left[ **Kind of claim:** <span class="og guesswork">guesswork</span>, a legal judgement. No data or study gives the chance a court upholds this Act. **Why it is large:** *q* multiplies the whole revenue, so halving it halves what the other inputs leave. ] .pull-right[ .highlight-box[ **Dollars moved, on (b):** <span class="nb">−$39.4B</span>, step 2 of the dial path. ] .small[The lost income tax is not scaled by *q*: people who left do not come back if the Act is struck down.] ] --- name: diff-horizon class: wide-right # (iii) How long is the lost income tax counted? <style type="text/css"> /* diff-horizon: both claim cells run five lines, so the dollars box takes the wider column (fewer lines) and the slide fits. */ .wide-right .pull-left { width: 36%; } .wide-right .pull-right { width: 60%; } </style> <table class="dt claims"><tr><th style="width:50%">The BSZ analysis</th><th>The JR analysis</th></tr><tr><td><b>5 years.</b> BSZ argue the losses should be temporary, since a one-time tax should cause only temporary departures (BSZ PDF p.22), and give five years, the payment period, as an example ("If they last say only 5 years", PDF p.27). Table 5 takes no stand on how long they last. The five years are this OPA's reading of that example.</td><td><b>For Ever.</b> Departed billionaires are assumed not to return, because the Act permanently removes the constitutional cap on intangible property taxes and lets the Legislature amend it by a two-thirds vote (chapter PDF p.32, Sec. 6). The lost stream is valued as a growing perpetuity, 1/(r − g) (chapter Sec. 5.2, eqs. 13-14, PDF pp.30-31).</td></tr></table> <table class="dt"><tr><th>Income tax lost, in today's dollars, at 3%</th><th>5 years</th><th>For ever</th><th>Moving to for ever</th></tr><tr><td>BSZ yearly loss, <span class="nb">$0.15B</span></td><td><span class="nb">$0.7B</span></td><td><span class="nb">$5.1B</span></td><td><span class="nb">−$4.4B</span></td></tr><tr><td>JR yearly loss, <span class="nb">$2.05B</span></td><td><span class="nb">$9.4B</span></td><td><span class="nb">$68.3B</span></td><td><span class="nb">−$58.9B</span></td></tr></table> .pull-left[ **Kind of claim:** <span class="og scenario">scenario</span>. Neither data nor studies settle how long a departure lasts. ] .pull-right[ .highlight-box[ **Dollars moved, on (b):** <span class="nb">−$65.4B</span>, step 5 of the dial path, the largest. The horizon moves after the share lost and the yearly tax, but before *a*. So the yearly loss is the JR one plus <span class="nb">$0.23B</span> from the BSZ avoidance allowance, still in place. The step is larger than the JR row's last column. The rate dial moves next. ] ] --- name: diff-loss-rest class: tight-table # (iii), continued: *f*, *C* and *r* <table class="dt"><tr><th>Input</th><th>BSZ value</th><th>JR value</th><th class="l">Kind of claim</th><th>Step on the path, (b)</th></tr><tr><td><i>f</i>, Share of billionaires' income tax lost</td><td>the share of wealth assumed to leave, except named leavers, who take only their own tax</td><td>45% of all, more than the share of wealth counted as gone</td><td class="l">guesswork</td><td>−$5.0B</td></tr><tr><td><i>C</i>, Billionaires' yearly California income tax</td><td>$3.06B/yr</td><td>$4.55B/yr</td><td class="l">research vs guesswork</td><td>−$3.4B</td></tr><tr><td><i>r</i>, Discount rate for the lost income tax</td><td>3%</td><td>2.73%</td><td class="l">scenario vs derived</td><td>−$7.5B</td></tr><tr class="tot"><td>These three together</td><td></td><td></td><td></td><td>−$15.9B</td></tr><tr class="tot"><td>With the horizon: the equation's lost income tax</td><td></td><td></td><td></td><td>−$81.3B</td></tr></table> .small[ - **Share of income tax lost**: in the BSZ analysis the movers in *a* take the same share of the income tax as of the wealth (5% at the BSZ values; BSZ PDF p.24), and named leavers take only their own income tax, which is small for their wealth (BSZ Table 4). The JR analysis loses a flat 45% of all billionaires' income tax, more than the 28.6% of wealth reported to have left, because income tax need not leave in step with wealth and some moves go unreported (chapter PDF pp.31, 33). The step is small here because it comes before the horizon, while the loss is counted for 5 years. Averaged over every order it is among the three largest. - **Yearly income tax**: both start from California tax data on the highest earners. BSZ take billionaires to have about half their income, as a study of top wealth holders finds. JR take them to be among the 212 to 500 highest earners and use the middle of the range. - **Discount rate**: 3% at the BSZ end, a scenario (BSZ give no rate). 2.73% at the JR end, derived: worth the same as the authors' draw of r − g, the interest rate minus the loss's yearly growth, from 1.5% to 4.5%. It moves after the horizon, on a loss counted for ever. ] --- name: smaller class: tight-table # (iv) The other inputs together <table class="dt"><tr><th>Input</th><th>BSZ value</th><th>JR value</th><th class="l">Kind of claim</th><th>Step on the path, (b)</th></tr><tr><td><i>W</i>, Forbes source: which list and valuation date</td><td>Forbes 2026, $2,157B</td><td>Forbes 2025 grown 7%, $2,027.4B</td><td class="l">data vs guesswork on data</td><td>−$2.2B</td></tr><tr><td><i>a</i>, Avoidance and evasion allowance</td><td>10.0%</td><td>0.0%</td><td class="l">guesswork</td><td>+$12.5B</td></tr><tr><td>Three minor inputs</td><td>$150B; 0.0%; 1/3</td><td>$0B; 0.5%; 0%</td><td class="l">data vs guesswork, guesswork vs data, guesswork</td><td>−$5.4B</td></tr><tr class="tot"><td>The three together</td><td></td><td></td><td></td><td>+$4.9B</td></tr></table> .small[ - **Avoidance and evasion allowance** is the one step that raises the estimate: the JR analysis applies no allowance beyond departures. ] --- name: next class: head-beside, summary # Summary .beside.mid[ **Go and [explore](../explorer/).** - The comparison does not pick the most credible values. - It lays out the key empirical quantities behind the gap, so experts and voters can inspect them. - Everyone is invited to [record their views](../survey/) on which values are most credible today. - For Proposition 40, this project does not settle the facts, but it narrows the dispute to a few inspectable quantities. More broadly, it is a prototype of how policy analysis can combine transparency and AI to move toward a shared evidence base. ] .fig-pinned.fig-split.fig-tall[<img src="../../../assets/figures/evidence-to-policy-competing-from-analysis-opa-third.svg" alt="The two analyses, each an Open Policy Analysis, feed a third Open Policy Analysis, the comparison, which informs both decision makers.">] <div class="opa-labels"> <a class="opa-label" style="left:46.4%; top:37%;" href="../../../bsz-analysis/site/">The BSZ analysis</a> <a class="opa-label" style="left:46.4%; bottom:31%;" href="../../../rjkdc-analysis/site/">The JR analysis</a> <a class="opa-label opa-label-left" style="right:45%; top:53%;" href="../../../index.html">The comparison</a> </div> --- name: appendix class: center, middle # Appendix The method behind the comparison: the two main estimates, the common output, the one estimating function, and the bridge with its waterfall. --- name: estimates # Two analyses, two main estimates .pull-left[ **The BSZ analysis** (Boll, Saez and Zucman, NBER Working Paper 35218, August 2026) .big[<span class="nb">$106.8B</span>] Net total over 5 years, in today's dollars. It is the wealth tax collected (<span class="nb">$103.8B</span>; the paper prints <span class="nb">$104B</span>, Table 5 row 1), plus the income tax from assets sold to pay it, minus the income tax lost to those who leave.<sup>1</sup> ] .pull-right[ **The JR analysis** (Jaros and Rauh, NBER chapter c15504, September 2026) .big[<span class="nb">−$39.0B</span>] Mean net present value. It is the wealth tax minus the income tax lost for ever, averaged over the authors' Monte Carlo (a simulation that draws the uncertain inputs at random many times and averages the results).<sup>2</sup> ] .blue-box[ **Net present value**: all gains minus all losses, each future dollar of lost income tax converted to its value today. Both analyses count the wealth tax at face value. On the common definition, the BSZ analysis's inputs give a gain of about <span class="nb">$107B</span> and the JR analysis's a loss of about <span class="nb">$39B</span>. ] .footnote[<sup>1</sup> BSZ's own headline is the wealth tax alone. The net total is this OPA's choice, so both main estimates answer the same question. The BSZ overview discounts at 3%, and so does this deck's BSZ end ([the common output](#common-output)): both give <span class="nb">$106.8B</span>. <sup>2</sup> The paper prints <span class="nb">−$38.9B</span>, the average of one seeded run of 100,000 draws. The exact average of the same formula is <span class="nb">−$38.98B</span>, used throughout this deck.] --- name: common-output # Why the printed numbers are not comparable The BSZ paper asks **how much the tax collects**. The JR paper asks **whether the state is better off**, once income tax lost to departures is subtracted. So the comparison defines two common outputs and estimates both analyses on each: .highlight-box[ **(a) gross revenue** = the one-time wealth tax collected<br> **(b) net fiscal effect** = (a) + extra income tax from assets sold to pay the tax − income tax lost to departures, counted for H years and discounted ] <table class="dt"><tr><th>Analysis</th><th>(a) gross revenue</th><th>(b) net fiscal effect</th><th>What the authors print</th></tr><tr><td>BSZ analysis</td><td><span class="nb">$103.8B</span></td><td><b><span class="nb">$106.8B</span></b></td><td><span class="nb">$104B</span> revenue (Table 5 row 1); no net figure</td></tr><tr><td>JR analysis</td><td><span class="nb">$36.0B</span></td><td><b><span class="nb">−$39.0B</span></b></td><td>mean NPV <span class="nb">−$38.9B</span> from one seeded run; revenue "approximately <span class="nb">$30B</span>"</td></tr></table> .small[ The horizon H is itself disputed: 5 years for the BSZ analysis (this OPA's reading of BSZ's example, PDF p.27), for ever for the JR analysis. So is the discount rate r. The BSZ analysis gives none, and this OPA uses 3%, the rate of the BSZ overview. The JR analysis draws r − g, the interest rate minus the loss's yearly growth, at random between 1.5% and 4.5%, which is worth the same as one rate of 2.73% ([term 2](#term-loss)). Output (b) is the one both main estimates answer, so the rest of the deck uses it. For the JR analysis, both outputs are the exact average of the authors' Monte Carlo. ] --- name: term-wealth # One function, term 1: the wealth tax collected .highlight-box[ **Wealth tax collected** = 5% × the base × (1 − share that moved out in time) × (1 − avoidance allowance) × chance the tax survives litigation ] <table class="dt"><tr><th>Step</th><th>BSZ factor</th><th>BSZ running total</th><th>JR factor</th><th>JR running total</th></tr><tr><td> Wealth on the list</td><td><span class="nb">$2,307B</span></td><td><span class="nb">$2,307B</span></td><td><span class="nb">$2,027B</span></td><td><span class="nb">$2,027B</span> </td></tr><tr><td> × tax rate</td><td>5%</td><td><span class="nb">$115.4B</span></td><td>5%</td><td><span class="nb">$101.4B</span> </td></tr><tr><td> × (1 − real-estate deduction)</td><td>100%</td><td><span class="nb">$115.4B</span></td><td>99.5%</td><td><span class="nb">$100.9B</span> </td></tr><tr><td> × (1 − share that moved out in time)</td><td>100%</td><td><span class="nb">$115.4B</span></td><td>71.4%</td><td><span class="nb">$72.0B</span> </td></tr><tr><td> × (1 − avoidance allowance)</td><td>90%</td><td><span class="nb">$103.8B</span></td><td>100%</td><td><span class="nb">$72.0B</span> </td></tr><tr><td> × chance it survives litigation, <i>q</i></td><td>100%</td><td><span class="nb">$103.8B</span></td><td>50%</td><td><span class="nb">$36.0B</span> </td></tr><tr class="tot"><td>= (a) wealth tax collected</td><td></td><td><span class="nb">$103.8B</span></td><td></td><td><span class="nb">$36.0B</span></td></tr></table> .small[ The BSZ base is California's billionaires on 1 July 2026, non-US citizens included. The JR base is the 2025 Forbes list grown 7% to 31 December 2026, net of real estate, after seven publicly reported moves. The **litigation weight *q*** is the chance the Act survives a court challenge; the revenue is multiplied by it. ] --- name: term-loss # One function, term 2: the income tax lost .highlight-box[ **Income tax lost** = share lost × yearly income tax × value today of 1 dollar a year for H years at the rate r ] <table class="dt"><tr><th>Step</th><th>BSZ analysis</th><th>JR analysis</th></tr><tr><td>Share of billionaires' income tax lost</td><td>5%</td><td>45%</td></tr><tr><td>× billionaires' yearly California income tax</td><td><span class="nb">$3.06B</span></td><td><span class="nb">$4.55B</span></td></tr><tr><td>= yearly loss</td><td><span class="nb">$0.15B</span></td><td><span class="nb">$2.05B</span></td></tr><tr><td>× value today of 1 dollar a year, 5 years at 3% for BSZ, for ever at 2.73% for JR</td><td>4.58</td><td>36.62</td></tr><tr class="tot"><td>= income tax lost, in today's dollars</td><td><span class="nb">$0.70B</span></td><td><span class="nb">$74.98B</span></td></tr></table> .small[ - **Share lost**: the share of billionaires' yearly California income tax that leaves with those who move. BSZ: 50% of their 10% avoidance allowance is people moving, so 5% of the income tax leaves. JR: a flat 45%, the middle of a random draw between 30% and 60%. - **Value today of 1 dollar a year**: at 3%, a dollar a year for 5 years is worth 4.58 dollars today. A **perpetuity**, a dollar every year for ever, is worth 1/r at the rate r. The JR analysis draws r − g between 1.5% and 4.5%, so its perpetuity is worth 36.62 dollars on average, the same as one rate of 2.73%. ] --- name: two-ends # The two ends on output (b) .highlight-box[ **Net fiscal effect (b)** = wealth tax collected + income tax from assets sold to pay − income tax lost ] <table class="dt"><tr><th></th><th>BSZ analysis</th><th>JR analysis</th></tr><tr><td>Wealth tax collected, (a)</td><td><span class="nb">$103.82B</span></td><td><span class="nb">$36.00B</span></td></tr><tr><td>+ income tax from assets sold to pay the tax</td><td><span class="nb">$3.68B</span></td><td><span class="nb">$0.00B</span></td></tr><tr><td>− income tax lost, in today's dollars</td><td><span class="nb">$0.70B</span></td><td><span class="nb">$74.98B</span></td></tr><tr class="tot"><td>= (b) net fiscal effect</td><td><span class="nb">$106.80B</span></td><td><span class="nb">−$38.98B</span></td></tr></table> .small[ - **Assets sold to pay.** BSZ assume 1/3 of the tax is paid by selling assets, 80% of each sale is a taxable gain, and California taxes gains at 13.3%. The JR analysis does not model it. - **The JR end** is <span class="nb">−$38.98B</span>, the exact average of the authors' Monte Carlo. They print <span class="nb">−$38.9B</span> from one seeded run of it. ] .blue-box[ The same function gives both ends. The gap to explain is <span class="nb">$106.80B</span> − (<span class="nb">−$38.98B</span>) = **<span class="nb">$145.78B</span>**. ] --- name: one-at-a-time # The bridge: switch one input at a time A toy. Revenue = $100.0B × (1 − share departed) × *q*. One analysis has nobody departed and *q* = 1: $100.0B. The other has 30% departed and *q* = 0.5: $35.0B. The gap is −$65.0B. How much of it is each input? <table class="dt"><tr><th>Order of the switches</th><th>Departures step</th><th>Litigation step</th><th>Sum</th></tr><tr><td>Departures first, then litigation</td><td>−$30.0B</td><td>−$35.0B</td><td>−$65.0B</td></tr><tr><td>Litigation first, then departures</td><td>−$15.0B</td><td>−$50.0B</td><td>−$65.0B</td></tr></table> .small[ The inputs multiply, so each step's size depends on what was switched before it. Litigation halves $100.0B if it goes first, but only $70.0B if it goes second. ] .blue-box[ So the deck fixes one order, the **dial path**: the explorer's BSZ panel dials moved in the order of the equation, each to its far end. That order is *D*, *q*, the four loss-box dials, then the rest. Its 9 steps add up to the whole gap. ] --- name: waterfall # The bridge on (b): the dial path, step by step <img src="data:image/png;base64,#slides_files/figure-html/waterfall-1.png" style="display: block; margin: auto;" /> .small[ Each bar moves one dial of the BSZ panel to its JR end, in the equation's order. The equation on [What separates the two numbers](#pseudo-eq) shows *D* and *q* on their own. It adds up the four loss-box steps, *f*, *C*, *H* and *r*, into one term, and the other inputs (W, a and the minor switch) into another. Only dropping the BSZ 10% avoidance allowance raises the estimate, because the JR analysis applies none. ] --- name: hoopes # A previous comparison: Hoopes (2026) .small[ Jeffrey L. Hoopes (2026), ["Galle v Rauh: Comparing Two Revenue Estimates for California Billionaire Taxation"](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=6428578), SSRN Working Paper 6428578, compares **earlier versions**: the February 2026 GGSS expert report, on which the BSZ analysis builds, and the March 2026 version by Rauh, Jaros, Kearney, Doran and Cosso. His Figure 2 is a waterfall that prints no values, so his column is read off the chart. This OPA's bridge follows his order and ends at the September 2026 version's exact mean. ] <table class="dt"><tr><th>Hoopes Figure 2 bar</th><th>Hoopes (read off the chart)</th><th>This OPA, his order</th></tr><tr><td>Galle estimate</td><td>$100.0B</td><td>$100.0B</td></tr><tr><td>(no bar: GGSS's own rounding of their estimate)</td><td>none</td><td>+$3.8B</td></tr><tr><td>Residency correction</td><td>−$12.6B</td><td>−$12.6B</td></tr><tr><td>Confirmed departures</td><td>−$17.0B</td><td>−$26.0B</td></tr><tr><td>Additional movers</td><td>−$12.5B</td><td>none</td></tr><tr><td>Additional behavioral response</td><td>−$9.2B</td><td>−$29.0B</td></tr><tr><td>Real estate exclusion</td><td>−$1.1B</td><td>−$0.2B</td></tr><tr><td>Income tax loss</td><td>−$71.5B</td><td>−$75.0B</td></tr><tr class="tot"><td>Where the waterfall ends</td><td>−$23.8B</td><td>−$39.0B</td></tr></table> .small[ The residency bars agree. The income tax bars differ by <span class="nb">$3.5B</span>. The departures and behaviour bars differ because the versions differ: September counts seven departures on a grown base and adds the litigation weight; March used an elasticity response and ten "expanded" departures, which September does not. This project's own waterfall, on the September version, is [the previous slide](#waterfall). [Back to the comparison OPA](#opa-comparison) ] --- name: credit-jr # Disclosure and verification: the JR analysis <div class="ai-use-slide"> <table class="ai-use"> <thead><tr><th>Object</th><th>Ideas and<br>direction</th><th>Doing<br>the work</th><th>Writing</th><th>Human<br>verification</th></tr></thead> <tbody> <tr><td>Explorer<br><span class="table-subhead">Open Output</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration" title="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration"><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: author led visualization; shared equally: investigation; Claude led data curation, formal analysis, software, validation" title="Doing the work: author led visualization; shared equally: investigation; Claude led data curation, formal analysis, software, validation"><i class="sq h"></i><i class="sq eq"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: shared equally: original draft, review & editing" title="Writing: shared equally: original draft, review & editing"><i class="sq eq"></i><i class="sq eq"></i></span></td><td><span class="meter" role="img" aria-label="Reviewed" title="Reviewed"><i class="pip on"></i><i class="pip on"></i></span></td></tr> <tr><td>Report<br><span class="table-subhead">Open Analysis</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration" title="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Not reviewed" title="Not reviewed"><i class="pip"></i><i class="pip"></i></span></td></tr> <tr><td>Slides<br><span class="table-subhead">Open Analysis</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration" title="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Lightly reviewed" title="Lightly reviewed"><i class="pip on"></i><i class="pip"></i></span></td></tr> <tr><td>Repository<br><span class="table-subhead">Open Materials</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration" title="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Not reviewed" title="Not reviewed"><i class="pip"></i><i class="pip"></i></span></td></tr> <tr><td>Overview page<br><span class="table-subhead">the overview</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration" title="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Lightly reviewed" title="Lightly reviewed"><i class="pip on"></i><i class="pip"></i></span></td></tr> </tbody> </table> <div class="ai-key"> <div><span><i class="sq h"></i> led by the author</span> <span><i class="sq ai"></i> led by Claude</span> <span><i class="sq eq"></i> shared equally</span></div> <div>One square per CRediT role in the group; roles that do not apply to an object are left out.</div> <div>Human verification: <span><span class="meter"><i class="pip"></i><i class="pip"></i></span>not reviewed</span> <span><span class="meter"><i class="pip on"></i><i class="pip"></i></span>lightly reviewed</span> <span><span class="meter"><i class="pip on"></i><i class="pip on"></i></span>reviewed</span></div> </div> </div> From the [JR analysis OPA](../../../rjkdc-analysis/site/). Columns and key as on [the BSZ table](#disclosure). <a class="corner-btn" href="#disclosure">← Back</a> --- name: credit-comparison # Disclosure and verification: the comparison <div class="ai-use-slide"> <table class="ai-use"> <thead><tr><th>Object</th><th>Ideas and<br>direction</th><th>Doing<br>the work</th><th>Writing</th><th>Human<br>verification</th></tr></thead> <tbody> <tr><td>Explorer<br><span class="table-subhead">Open Output</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration" title="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration"><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: author led data curation, formal analysis, investigation, validation; Claude led software, visualization" title="Doing the work: author led data curation, formal analysis, investigation, validation; Claude led software, visualization"><i class="sq h"></i><i class="sq h"></i><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: author led review & editing; Claude led original draft" title="Writing: author led review & editing; Claude led original draft"><i class="sq h"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Reviewed" title="Reviewed"><i class="pip on"></i><i class="pip on"></i></span></td></tr> <tr><td>Report<br><span class="table-subhead">Open Analysis</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration" title="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Not reviewed" title="Not reviewed"><i class="pip"></i><i class="pip"></i></span></td></tr> <tr><td>Slides<br><span class="table-subhead">Open Analysis</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration" title="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration"><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: author led data curation, formal analysis, investigation, validation; Claude led software, visualization" title="Doing the work: author led data curation, formal analysis, investigation, validation; Claude led software, visualization"><i class="sq h"></i><i class="sq h"></i><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: author led review & editing; shared equally: original draft" title="Writing: author led review & editing; shared equally: original draft"><i class="sq h"></i><i class="sq eq"></i></span></td><td><span class="meter" role="img" aria-label="Reviewed" title="Reviewed"><i class="pip on"></i><i class="pip on"></i></span></td></tr> <tr><td>Repository<br><span class="table-subhead">Open Materials</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration" title="Ideas and direction: Claude led conceptualization, methodology, supervision, project administration"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization" title="Doing the work: Claude led data curation, formal analysis, investigation, software, validation, visualization"><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: Claude led original draft, review & editing" title="Writing: Claude led original draft, review & editing"><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Not reviewed" title="Not reviewed"><i class="pip"></i><i class="pip"></i></span></td></tr> <tr><td>Overview page<br><span class="table-subhead">the overview</span></td><td><span class="sqs" role="img" aria-label="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration" title="Ideas and direction: author led conceptualization, supervision; Claude led methodology, project administration"><i class="sq h"></i><i class="sq h"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Doing the work: author led formal analysis; shared equally: investigation, validation; Claude led data curation, software, visualization" title="Doing the work: author led formal analysis; shared equally: investigation, validation; Claude led data curation, software, visualization"><i class="sq h"></i><i class="sq eq"></i><i class="sq eq"></i><i class="sq ai"></i><i class="sq ai"></i><i class="sq ai"></i></span></td><td><span class="sqs" role="img" aria-label="Writing: author led review & editing; Claude led original draft" title="Writing: author led review & editing; Claude led original draft"><i class="sq h"></i><i class="sq ai"></i></span></td><td><span class="meter" role="img" aria-label="Reviewed" title="Reviewed"><i class="pip on"></i><i class="pip on"></i></span></td></tr> </tbody> </table> <div class="ai-key"> <div><span><i class="sq h"></i> led by the author</span> <span><i class="sq ai"></i> led by Claude</span> <span><i class="sq eq"></i> shared equally</span></div> <div>One square per CRediT role in the group; roles that do not apply to an object are left out.</div> <div>Human verification: <span><span class="meter"><i class="pip"></i><i class="pip"></i></span>not reviewed</span> <span><span class="meter"><i class="pip on"></i><i class="pip"></i></span>lightly reviewed</span> <span><span class="meter"><i class="pip on"></i><i class="pip on"></i></span>reviewed</span></div> </div> </div> From [the comparison OPA](../../../index.html). Columns and key as on [the BSZ table](#disclosure). <a class="corner-btn" href="#disclosure">← Back</a> --- name: layer-bsz-output class: layer-slide # The BSZ analysis OPA: Open Output .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-assumptions-solo.png" alt="The four OPA layers, with the Open Output layer highlighted."> **Open Output**: one main estimate, with each assumption as a dial a reader can move. Here it is the BSZ analysis explorer. Its dials are the inputs of BSZ’s Table 5, such as the avoidance share and the share of it that is leaving. Each dial is tagged with the kind of claim it is, such as data or guesswork. [Open the explorer](../../../bsz-analysis/site/explorer/) · [Back to the BSZ analysis OPA](#opa-bsz) ] .pull-right.layer-shot[ [<img src="figs/layers/bsz-output.png" alt="Screenshot of the Open Output layer of the BSZ analysis OPA.">](../../../bsz-analysis/site/explorer/) ] --- name: layer-bsz-analysis class: layer-slide # The BSZ analysis OPA: Open Analysis .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-details.png" alt="The four OPA layers, with the Open Analysis layer highlighted."> **Open Analysis**: every step from the inputs to the main estimate, written out, with the guesswork marked. Here it is the report. It rebuilds BSZ’s tables step by step from the authors’ public workbook, with the R and Python code for each step beside it. The BSZ analysis deck is part of this layer too. [Open the report](../../../bsz-analysis/site/repro.html) · [Back to the BSZ analysis OPA](#opa-bsz) ] .pull-right.layer-shot[ [<img src="figs/layers/bsz-analysis.png" alt="Screenshot of the Open Analysis layer of the BSZ analysis OPA.">](../../../bsz-analysis/site/repro.html) ] --- name: layer-bsz-materials class: layer-slide # The BSZ analysis OPA: its README .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-materials.png" alt="The four OPA layers, with the Open Materials layer highlighted."> **Open Materials**: the data, code and tests that rerun it. Here it is the bsz-analysis folder of the public repository. Its README says what the folder holds and how to rerun it, and its first link is the code review on the next slide. [Open the README](https://github.com/fhoces/opa-prop40/blob/main/bsz-analysis/README.md) · [Back to the BSZ analysis OPA](#opa-bsz) ] .pull-right.layer-shot[ [<img src="figs/layers/bsz-readme.png" alt="Screenshot of the README of the bsz-analysis folder on GitHub.">](https://github.com/fhoces/opa-prop40/blob/main/bsz-analysis/README.md) ] --- name: layer-bsz-review class: layer-slide # The BSZ analysis OPA: its code review .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-materials.png" alt="The four OPA layers, with the Open Materials layer highlighted."> **Open Materials**: a code review page to appraise the code. It walks the code behind the main estimate one layer at a time, from the number on the page down to the raw data. Each layer shows its R or Python code, what goes in and out, whether the method matches the source, and how far it has been reviewed. Work in progress. [Open the code review](https://claude.ai/artifact/6VZEezoAsCNACjmgPLEvah) · [Back to the BSZ analysis OPA](#opa-bsz) ] .pull-right.layer-shot[ [<img src="figs/layers/bsz-review.png" alt="Screenshot of the code review page, showing the BSZ chain.">](https://claude.ai/artifact/6VZEezoAsCNACjmgPLEvah) ] --- name: layer-jr-output class: layer-slide # The JR analysis OPA: Open Output .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-assumptions-solo.png" alt="The four OPA layers, with the Open Output layer highlighted."> **Open Output**: one main estimate, with each assumption as a dial a reader can move. Here it is the JR analysis explorer. Its dials are the inputs of the authors’ Monte Carlo, such as the range the wealth tax draw can pick, plus two dials of this OPA. Each dial is tagged with the kind of claim it is. [Open the explorer](../../../rjkdc-analysis/site/explorer/) · [Back to the JR analysis OPA](#opa-jr) ] .pull-right.layer-shot[ [<img src="figs/layers/jr-output.png" alt="Screenshot of the Open Output layer of the JR analysis OPA.">](../../../rjkdc-analysis/site/explorer/) ] --- name: layer-jr-analysis class: layer-slide # The JR analysis OPA: Open Analysis .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-details.png" alt="The four OPA layers, with the Open Analysis layer highlighted."> **Open Analysis**: every step from the inputs to the main estimate, written out, with the guesswork marked. Here it is the report. It reruns the authors’ code as shipped, section by section of the chapter, with the R and Python code beside each step. It records where the text, the READMEs and the code disagree. [Open the report](../../../rjkdc-analysis/site/repro.html) · [Back to the JR analysis OPA](#opa-jr) ] .pull-right.layer-shot[ [<img src="figs/layers/jr-analysis.png" alt="Screenshot of the Open Analysis layer of the JR analysis OPA.">](../../../rjkdc-analysis/site/repro.html) ] --- name: layer-jr-materials class: layer-slide # The JR analysis OPA: its README .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-materials.png" alt="The four OPA layers, with the Open Materials layer highlighted."> **Open Materials**: the data, code and tests that rerun it. Here it is the rjkdc-analysis folder of the public repository. Its README says what the folder holds and how to rerun it, and its first link is the code review on the next slide. [Open the README](https://github.com/fhoces/opa-prop40/blob/main/rjkdc-analysis/README.md) · [Back to the JR analysis OPA](#opa-jr) ] .pull-right.layer-shot[ [<img src="figs/layers/jr-readme.png" alt="Screenshot of the README of the rjkdc-analysis folder on GitHub.">](https://github.com/fhoces/opa-prop40/blob/main/rjkdc-analysis/README.md) ] --- name: layer-jr-review class: layer-slide # The JR analysis OPA: its code review .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-materials.png" alt="The four OPA layers, with the Open Materials layer highlighted."> **Open Materials**: a code review page to appraise the code. It walks the code behind the main estimate one layer at a time, from the number on the page down to the raw data. Each layer shows its R or Python code, what goes in and out, whether the method matches the source, and how far it has been reviewed. Work in progress. [Open the code review](https://claude.ai/artifact/MykX5F4qRYF9gzCAbxBQUL) · [Back to the JR analysis OPA](#opa-jr) ] .pull-right.layer-shot[ [<img src="figs/layers/jr-review.png" alt="Screenshot of the code review page, showing the JR chain.">](https://claude.ai/artifact/MykX5F4qRYF9gzCAbxBQUL) ] --- name: layer-cmp-output class: layer-slide # The comparison OPA: Open Output .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-assumptions-solo.png" alt="The four OPA layers, with the Open Output layer highlighted."> **Open Output**: one main estimate, with each assumption as a dial a reader can move. Here it is the comparison explorer. Each disputed input is a dial that can take either analysis’s value, and the equation shows how the dials take one estimate to the other. [Open the explorer](../../../comparison/site/explorer/) · [Back to the comparison OPA](#opa-comparison) ] .pull-right.layer-shot[ [<img src="figs/layers/cmp-output.png" alt="Screenshot of the Open Output layer of the comparison OPA.">](../../../comparison/site/explorer/) ] --- name: layer-cmp-analysis class: layer-slide # The comparison OPA: Open Analysis .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-details.png" alt="The four OPA layers, with the Open Analysis layer highlighted."> **Open Analysis**: every step from the inputs to the main estimate, written out, with the guesswork marked. Here it is the report, and this deck. The report puts both analyses on one common output and walks from one main estimate to the other, one disputed input at a time. [Open the report](../../../comparison/site/repro.html) · [Back to the comparison OPA](#opa-comparison) ] .pull-right.layer-shot[ [<img src="figs/layers/cmp-analysis.png" alt="Screenshot of the Open Analysis layer of the comparison OPA.">](../../../comparison/site/repro.html) ] --- name: layer-cmp-materials class: layer-slide # The comparison OPA: its README .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-materials.png" alt="The four OPA layers, with the Open Materials layer highlighted."> **Open Materials**: the data, code and tests that rerun it. Here it is the comparison folder of the public repository. Its README says what the folder holds and how to rerun it, and its first link is the code review on the next slide. [Open the README](https://github.com/fhoces/opa-prop40/blob/main/comparison/README.md) · [Back to the comparison OPA](#opa-comparison) ] .pull-right.layer-shot[ [<img src="figs/layers/cmp-readme.png" alt="Screenshot of the README of the comparison folder on GitHub.">](https://github.com/fhoces/opa-prop40/blob/main/comparison/README.md) ] --- name: layer-cmp-review class: layer-slide # The comparison OPA: its code review .pull-left[ <img class="layer-fig" src="../../../assets/opa/opa-materials.png" alt="The four OPA layers, with the Open Materials layer highlighted."> **Open Materials**: a code review page to appraise the code. It walks the code behind the main estimate one layer at a time, from the number on the page down to the raw data. Each layer shows its R or Python code, what goes in and out, whether the method matches the source, and how far it has been reviewed. Work in progress. [Open the code review](https://claude.ai/artifact/RyHG9pVfrp3ZTxq2KJic4C) · [Back to the comparison OPA](#opa-comparison) ] .pull-right.layer-shot[ [<img src="figs/layers/cmp-review.png" alt="Screenshot of the code review page, showing the comparison chain.">](https://claude.ai/artifact/RyHG9pVfrp3ZTxq2KJic4C) ]