278 Matching Annotations
  1. Last 7 days
    1. — processed products made from ground, mixed, or extruded ingredients rather than whole-muscle cuts (e.g., breakfast links, nuggets, burger patties) —

      this "dashed interruption definition" doesn't scan well. It's very confusing. Just make it another sentence in parentheses. "(Reformed/Comminuted formats are ... )"

    2. Each footnote in the dashboard links to a numbered row here. The full quote (or specific evidence) is shown in italics. URLs are direct links to the cited page or PDF where available.

      some numbers are missing -- e.g., where is 36-39?

    3. here someone has published

      "where someone has published" -- this language is a bit too informal and amateurish. Improve it ... something like "where we could find a published cross-tabulation..."

    4. Whether these patterns would extrapolate to higher-quality conditions is the key open question — and assessing that is what this note is for.

      Rephrase: This note considers these numbers in detail, and their implication whether we can measure substitution patterns now in a way that be relevant for future higher-quality, higher volume PBA products.

    5. the natural and specialty channel — stores like Whole Foods and similar, focused on natural and organic products — reaches roughly 8% of US packaged-meat dollars³⁶,

      this is phrased wrong;y -- you meant "within the natural and specialty channel, PBM reaches roughly 8%"

    6. in formats, channels, and geographies to study?

      not sure we need this type of variation .. more like 'is there sufficient available relevant data to permit meaningful statistical analysis.

    1. r: how much do plant-based products actually replace animal products? This is the focus of The Unjournal's Plant-Based Substitution Pivotal Question.

      We are expanding this focus a bit for the workshop to consider substitution issues more generally, and perhaps more.

    2. Background note: a first-pass Claude summary of evidence on PBA penetration and taste-comparability is available for sharing. It is exploratory rather than a vetted literature review.

      "Background: Is the PBA market mature enough for substitution measures to matter" -- make that the italiicized header for this but

    3. ROI and Research Gaps (~20 min) — Is PBA funding competitive with corporate campaigns given current evidence? What research would most reduce uncertainty?

      This is only going to work if we have people involved with animal welfare funding and modeling it on board

    4. rticipants share updated beliefs

      Belief elicitation and updating probably cannot occur in real time. Too much thinking is needed. As in, the previous workshops will encourage people to submit their beliefs before the workshop, and then talk them through it during the workshop, and then ask them to submit their beliefs after the workshop. Finally, share what others thought and ask them to update their beliefs.

    5. live discussion of disagreements

      We're probably going to need to structure this live discussion. It's not clear what an organic discussion of this would look like. Do we have specific computing models? Will people be citing certain papers? Will it just be vibes?

      Also don't use the word "disagreements" here?

    6. credibility and limitations of each

      I don't think you need this bit at the end. I think that's kind of obvious. Instead, we could frame it in terms of ~'which approaches are (more) reliable for the practical questions?'

    7. Methods Debate (~30 min) — Structured exchange between demand-estimation approaches and experimental/survey approaches; credibility and limitations of each

      This should be longer if we get participation from researchers in this area.

    8. he empirical finding that most PBA purchasers are omnivores;

      This is stated too strongly. We don't have this as a finding yet. It was just an initial literature review.

    1. packaged patties reach 6–7%

      Don't put this in the lead claim because of the issue with patties we discussed elsewhere, as these can be made from ground products as well. (Both for plant-based and animal-based hamburgers, although I suspect that pre-made patties are a larger share of the plant-based hamburger world. )

    2. most PBM buyers (85–88%) are omnivores or flexitarians

      Needs more caveating. See the discussion elsewhere about purchasing by an omnivore household which might include vegetarians and vegetarian friends.

    3. frequency more consistent with regular personal dietary variety than occasional guest catering

      is it? 6x/year seems reasonable for guests and visitng family

    4. The welfare mapping is unresolved

      this is a complication but not an insurmountable barrier. Some products are indeed individually distinguished in the relevant data.

    5. Market share is at best a ceiling on displacement.

      this is true but it doesn't justify "not studying discplacement through scanner data, experiments, etc." The market share we're looking at here is meant to help us understand how plausible it is that substitution patterns currently matter.

    6. r nothing that would otherwise have been eaten

      rephrase or explain this better ... the idea is that it might simply be bought as an addition ... e.g., more food consumed or served at a meal than otherwise would have been

    7. large enough to

      That's a bit unsubstantiated. "Large enough" in what sense? What are the constraints? Probably this is about whethere there's enough data for statistical power? How does it compare with the market shares and data available for other highly valued research in related areas?

    8. 85–88% of US PBM buyers

      I. By "ever bought" by "regularly buy" or by volume? 2. Does the evidence suggest they are mostly buying it for veg*n friends and family?

    9. First: PBM's market share is so low and product quality so poor that current evidence tells us little about future substitution patterns. Second: the people currently buying PBM are mostly prior vegetarians, so the category cannot be expected to displace animal-product consumption at scale.

      Put these in quotes and "Some claim" -- as stated this could be taken as us making the claim or providing evidence for this!

    10. displacement ratio × displaced animal mix

      This 'X' is not quite clear ... it would have to be some sort of vector multiplication or summed multiplication for the 'mix' part

    11. Consumer surveys and purchase panels consistently show that the large majority of PBM buyers are omnivores or flexitarians who also purchase conventional meat. The category is not, and has never been, predominantly a vegetarian market.

      Dig in on this more carefully -- are we sure these are 1. 'regular PBM buyers?' and 2. They are not just buying it for veg*n friends and relatives ?

    12. Europe (13 countries, 2022)¹⁴

      are these simple averages across country (not very interesting) or population-weighted? And which countries (tooltip the list)

    13. A dollar or kilogram of displaced beef, chicken, egg, finfish, or shrimp has very different animal-welfare implications. The page should not infer that "whole-cut" is the welfare-relevant margin; for welfare prioritization, high-animal-count categories such as chicken, eggs, fish, and shrimp may dominate depending on weights.

      OK but can you say anything tangible about this? -- see my previous queries. EAlso, no onw mentioned 'whole cut' yet

    14. households would have bought on the specific PB occasions.

      "Would have bought otherwise, over the relevant period". Note that displacement need not occur in the exact same shopping trip. Intertemporal concerns could cut both ways. E.g., the 'within-trip substitution' would overstate the total substitution if people commpensate for having purchased PBM on one trip with "now let's eat more real meat" on the next trip or in a restaurant.

    15. Rough conventional meat + aquatic-animal food flow, before a retail price conversion³¹³²

      Do the rough price conversion, and also give the 'food flow' for the PBA -- we need a like-for-like comparison

    16. No public source here gives a like-for-like global conventional retail denominator. A rough calibration is still possible: 365 Mt of global meat plus roughly 165 Mt of aquatic animals used for direct human consumption implies about 530 Mt of conventional animal-product flow before retail conversion. At illustrative retail-equivalent prices of $3, $5, and $8/kg, the denominator would be about $1.6T, $2.7T, and $4.2T, making the $6.6B PB meat/seafood category roughly 0.4%, 0.25%, or 0.16% of that broad scale. This is not a matched market-share estimate.

      make this estimate a bit more prominent

    17. s where most of the value and animal-suffering of conventional meat sits,

      Can you provide a source for 'where most of the animal-suffering of conventional meat sits'? E.g., what share of chicken consumption is 'whole cut'? What share is on-bone? What about shrimp consumption globally -- whole vs ground up/paste.

    18. Current PB buyers are mostly dual-buyers, not substituters. GFI/SPINS data shows 96% of US plant-based meat buyer households also buy conventional meat, and they buy conventional meat far more frequently. Plant-based meat is functioning as an addition to existing diets in most cases, not a replacement. This complicates the welfare arithmetic: each dollar of PB sold may displace much less than a dollar of conventional.

      See previous discussion. This actually makes it MORE interesting to study, and offers more potential for displacement, the case in which it seemed that only prior vegetarians were buying this stuff

    19. Trajectories from current data may be misleading for projecting future adoption with better products.

      this doesn't seem to follow from the previous sentence

    20. Quality at parity hasn't unlocked majority adoption. Plant-based nuggets — the format that has reached sensory parity in blinded testing — still hold only 2 to 3% of the conventional nugget category. If matching taste isn't sufficient, then taste investments alone may have lower returns than the parity-headroom argument suggests.

      Think about this more and state in a a more reasoned logical way. Note that we're largely thinking about price here (as well as taste, nutrition and availability). We're largely focused on the the impact of cost and price on consumption and substitution. In fact, skeptics were saying that "we don't care too much about substitution and price impacts because 1. it has such a low market share and 2. it's not taste or nutrition comparable."

    21. Foodservice growth is real where products work. EU plant-based burger servings grew 90% from 2019 to 2023 in the Big 5 according to Circana. In channels where the product fits the use case and the price gap is hidden in menu pricing, adoption looks very different from retail. This is itself a quality-of-format finding.

      Looks like circular reasoning here. I'm not sure that this 'finding' is meaningful. It might need rephrasing

    22. because most PB buyers are dual-buyers, but the category is not literally too small to matter.

      At the end, it doesn't quite make sense. If all PBM buyers (or consumers) were previously vegetarians, then the displacement would be close to zero. If they all only ate meat or PBM and consumed the exact same amount of protein every day, the displacement would be 100%. So it's not the 'dual buyers' that makes displacement less than 100% per se. The question is to what extent consumers, whether vegetarians or omnivores, are buying PBM 'instead of meat' or 'instead of other vegetarian/vegan food'.

    23. evidence that taste is one binding constraint.

      I'd say "evidence suggesting that it may be a binding constraint" ... people may report one thing, but actually something else could be fundamentally behind their decision, perhaps even something ~subliminal that they can't identify themselves.

    24. NECTAR 2024 sensory study: category-level parity with conventional²⁰ Nuggets only

      An important fact, but a little bit strange to mix in here. It really belongs in the section below. ... tit's not quantitative either

    25. US plant-based beef price premium vs conventional beef (2025)²¹

      I would like to also see the statistics for the premium-quality plant-based beef in the U.S. - Impossible beef and Beyond beef. This would take cheaper (gardein etc) versions into account

    26. Germany (2024)⁸

      do we have any reasonable evidence/good estimates on the PB share of each category (e.g., PB sausages/total sausages) in Germany, EU, or any important coungtries other than USA?

    27. closest international analogu

      ? Have you really checked all other countries? Are you saying the US is a leader as well as Germany? That doesn't comport with my casual empiricism.

    28. but the cleanest topline is not the 6 to 7% US patty figure; it is the combination of low overall share with selective format-level strength and partial taste parity.

      skip This last bit, it's tpo AI, "not this but that" and the patties are a distraction.

      Consider whether this is really overlapping the bit in italics just after the title.

    29. Public format-level summaries suggest much higher penetration in a few reformed categorie

      "reformed categories" Is not clear here. Give an example number (other than patties)

    30. Germany at 3.1% with similar product quality to the US's 1.4% shows that non-product factors (sausage culture, retailer strategy, private-label investment)

      "Shows" It is too strong. Maybe quotes suggest, but even then you're not really providing transparent reasoning here.

    31. Current displacement is non-trivial in absolute terms.

      This is too strong. It's a bit of an objective statement to say "non-trivial". The one-to-one substitution seems like a rather strong claim. You haven't presented much evidence about this. In fact, I'd like to see more evidence about the dual buyers and studies on the likelihood that this is attracting people who would otherwise be buying vegan or dairy products rather than animal products.

    32. Roughly 9% of US households tried plant-based meat and stopped.

      That's just a simple subtraction of 20% -11%? Because it's also possible that more than 9% stopped but some new users entered.

    33. hese are compositional shares of plant-based meat sales, not shares of conventional.

      What about the ladder? Do we have any data on the ladder that would be particularly interesting?

    34. Europe (13 countries, 2022)¹⁴

      I'm puzzled why this is so much higher than Germany -- this should be investigated and discussed. 6% is surprisingly high, and I would expect Germany to be among the highest for European countries.

    35. n the US it reaches 6 to 7% of conventional packaged patty dollar sales². The category-average understates penetration in the formats where taste and texture gaps are smallest, but the patty figure is itself an overstatement of plant-based meat's share of all hamburger consumption (see caveat below).

      Leave the 'patty' figure out -- put that whole discussion in a tooltip. Add back some numbers about EU or German share of some other relevant categories like sausage (or what's the highest penetration category other than patties?)

  2. May 2026
    1. What share of cultured meat companies (those with capex over $10 million) will design and build their own bioreactors by 2036?

      Consider: is this more about fit-for-purpose equipment vs. pharma-grade-- the former could also include CM-specific B2B offerings.

    1. Achievable densities in a 20kL bioreactor2420,000L used as reference scale for industrial production in most TEAs. Smaller facilities are R&D-scale. by 2036 (CM_16); binding constraints; and trade-offs in custom-built vs. off-the-shelf bioreactor design25Off-the-shelf: pharma-grade bioreactors, expensive but proven. Custom-built: fabricated to reduce capex (some claim under $1M for 20kL). The choice significantly affects capex in TEAs. Learn: bioreactor types →. Discussion space — unfold & annotate via Hypothes.is

      20k L or 10k L?

    1. Other Pivotal Questions Workshops 🥩 Cultivated Meat (Apr 2026) 🥗 Plant-Based Alternatives (May 2026)

      PBM workshop probably deferred to June -- update

  3. Apr 2026
    1. New to this model? Start with the Simplest Model → — a shorter version with only the biggest levers, line-of-sight explanations, and no jargon. You can carry your settings over to this Advanced Model when you’re ready.

      skip the 'and no jargon' ... and it's "focusing on some key levers"

    2. Save / share this scenario:

      The ability to do this should be a bit more prominent and signposted perhaps at the top and the very bottom as well. Ideally there should be a way to save this and then have a page that gives a side-by-side comparison of the results from two scenarios without extra clutter ... This would be particularly useful if it's something that's easy to develop.

      For now you can explain (tooltip) how you could do something like this by copying two shareable links and looking them in side-by-side browsers, or saving the results somewhere and feeding it into an LLM to ask it to give a comparative analysis

    1. Earlier versions of this model carried a separate

      Make it clearer here initially that these micronutrients seems to be only a tiny cost, anyways.

      Also you don't need to make the quote "April 2026" change part of the header - perhaps just make that a note or a tooltip. This is too much discussion of our process

    2. he CDMO toll is sampled from a lognormal distribution (default p5 = $4/kg, p95 = $40/kg) representing the range of per-kg fees a future food-grade contract manufacturer might charge. See the CDMO mode section below for a full description.

      Is it reasonable to think of the CDMO total as being per kilogram? Or is that just the result of other computations? Look for references in discussion about this to verify

    3. Return to: Interactive Cost Model | New to this topic? How Cultured Chicken is Made | Audio Review (MP3) | Workshop (May 2026)

      Let's update the audio review with new content

    4. Sensitivity check: Users can explore partially-correlated scenarios by: - Setting maturity high but technology probabilities low (tests “scale-up succeeds, tech fails”) - Setting maturity low but one technology probability high (tests “isolated breakthrough”)

      itemized list not rendering

    1. Cell Density / Media-Use Override Code viewof override_mode_constraints = Inputs.toggle({ label: html`Override process mode constraints <abbr style="cursor:help;text-decoration:underline dotted;font-size:0.85em;color:#888;" title="When ON: process-mode sampling is bypassed and you can specify density and media-use ranges directly. Useful for experts wanting to model specific bioreactor configurations.">(?)</abbr>`, value: urlBool("override_mode_constraints", false) }) Override process mode constraints (?)override_mode_constraints = false Code viewof density_lo = Inputs.range([10, 100], { value: urlNum("density_lo", 30), step: 10, label: "Cell Density Low (g/L)" }) viewof density_hi = Inputs.range([50, 300], { value: urlNum("density_hi", 200), step: 10, label: "Cell Density High (g/L)" }) Cell Density Low (g/L) density_lo = 30 Cell Density High (g/L) density_hi = 200 What is cell density and why does it matter so much? (click to expand) Cell density (g/L at harvest) determines how much meat you get per liter of bioreactor volume. Higher density means less media per kilogram of product, which directly reduces the largest variable cost. Density Media per kg Typical context 10 g/L ~100 L/kg Current lab scale 50 g/L ~20 L/kg Near-term commercial target 200 g/L ~5 L/kg Optimistic TEA projection This is multiplicative. If media costs $1/L, going from 10 to 50 g/L cuts media cost from $100/kg to $20/kg. Going to 200 g/L cuts it to $5/kg. Cell density is arguably the single most important technical parameter for cost reduction. Current state: Most published data shows 10-50 g/L. Some companies claim higher, but these claims are difficult to verify independently. Lever VC’s 2025 report claims 60-90 g/L has been achieved by “second generation” companies. Whether 200 g/L is achievable by 2036 is a genuine open question. What about bioreactor volume / tank size? (click to expand) Bioreactor volume is another major uncertainty that is currently implicit in this model rather than a direct parameter. The model computes total working volume as: total_volume = annual_output / (density × productivity × 365). It then applies a power-law scaling for CAPEX. But individual bioreactor tank size matters for several reasons: Factor Small tanks (2,000-5,000L) Large tanks (20,000-50,000L) Cost per liter Higher Lower (economies of scale) Contamination risk Lower Higher (single failure = large loss) Mixing/O2 transfer Easier Harder at scale Flexibility More modular Less redundancy Industry precedent Pharma standard Requires new engineering Key debate: Some companies (e.g., Vow) claim to have built 20,000L bioreactors for under $1M in 14 weeks using custom food-grade designs. If true, this dramatically changes the CAPEX picture. Humbird’s analysis assumed pharma-grade bioreactors at $50-500/L. Why it’s not a direct slider (yet): Adding individual tank size would require modeling the number of tanks, contamination batch-failure rates, and the trade-off between scale and reliability. This is a planned enhancement. For now, the Plant Capacity and Cell Density parameters together determine total working volume, and the custom reactor ratio (in full view) captures the pharma-vs-food-grade cost difference. Workshop discussion: This is one of the key cruxes for the upcoming CM workshop — what bioreactor scale is realistic, and what does it cost? Advanced: Media-use multiplier (×) What is this — and why can it be below 1? (click to expand) The model computes media volume per kg as (1000 / density) × multiplier. A value of 1 is traditional batch mode (fill reactor once, harvest); >1 is perfusion (multiple media-volume equivalents flow through during the run); <1 represents media recycling, fed-batch with concentrated feeds, or harvest-side cell concentration. The Learn page walks through all three mechanisms. Why the range changed (April 2026): the default p5–p95 was tightened from 1–10× to 0.5–3.0×. The old floor of 1.0 was too restrictive — the GFI 2023 cost-competitive scenarios assume 8–13 L/kg, which at 60–90 g/L density implies a multiplier of roughly 0.5–1.2. A floor of 1.0 mechanically excluded those scenarios no matter how high you pushed density. The new range covers both recycled/fed-batch (<1) and standard perfusion (up to ~3×); values of 5–10× remain plausible for heavily media-intensive processes but are now a stress-test region rather than the default. Show multiplier sliders Code viewof media_turnover_lo = Inputs.range([0.25, 2], { value: urlNum("media_turnover_lo", 0.5), step: 0.05, label: "Media-use multiplier p5 (low end)" }) viewof media_turnover_hi = Inputs.range([1, 10], { value: urlNum("media_turnover_hi", 3.0), step: 0.1, label: "Media-use multiplier p95 (high end)" }) Media-use multiplier p5 (low end) media_turnover_lo = 0.5 Media-use multiplier p95 (high end) media_turnover_hi = 3 Code // URL state writer: serialize every viewof value that DIFFERS FROM ITS // DEFAULT into ?key=val pairs, then debounce-write to the URL via // history.replaceState. Critical invariant: if every slider is at its // default, the URL stays bare (pathname + hash only) — no query string. // This is required so Hypothes.is can find annotations on the canonical // bare URL; a polluted URL breaks annotation lookup for every visitor. // The writer depends on every viewof name below so OJS re-runs it // whenever any input changes. Reads nothing from urlParams. { // Hard-coded defaults must stay in sync with each Inputs.range() / // Inputs.toggle() declaration above and with the reset_adoption button. const defaults = { simpleMode: true, include_blending: false, blending_share: 0.25, filler_cost: 3, include_capex: true, include_fixed_opex: true, include_downstream: false, cdmo_mode: false, cdmo_toll_p5: 4, cdmo_toll_p95: 40, bundled_media: false, bundled_media_p5: 50, bundled_media_p95: 500, plant_capacity: 20, uptime: 0.90, maturity: 0.5, target_year: 2036, p_fedbatch: 0.20, p_perfusion: 0.50, p_continuous: 0.30, override_mode_constraints: false, p_hydro: 0.75, p_recfactors: 0.5, gf_progress: 50, wacc_lo: 8, wacc_hi: 20, asset_life_lo: 8, asset_life_hi: 20, density_lo: 30, density_hi: 200, media_turnover_lo: 0.5, media_turnover_hi: 3.0 }; const state = { simpleMode, include_blending, blending_share, filler_cost, include_capex, include_fixed_opex, include_downstream, cdmo_mode, cdmo_toll_p5, cdmo_toll_p95, bundled_media, bundled_media_p5, bundled_media_p95, plant_capacity, uptime, maturity, target_year, p_fedbatch, p_perfusion, p_continuous, override_mode_constraints, p_hydro, p_recfactors, gf_progress, wacc_lo, wacc_hi, asset_life_lo, asset_life_hi, density_lo, density_hi, media_turnover_lo, media_turnover_hi }; const usp = new URLSearchParams(); let hasDiff = false; for (const [k, v] of Object.entries(state)) { const def = defaults[k]; let matches; if (typeof v === "boolean") matches = (v === def); else if (typeof v === "number") matches = Math.abs(v - def) < 1e-9; else matches = (v === def); if (!matches) { hasDiff = true; if (typeof v === "boolean") usp.set(k, v ? "1" : "0"); else if (typeof v === "number" && Number.isFinite(v)) usp.set(k, String(v)); } } if (window._urlWriteTimer) clearTimeout(window._urlWriteTimer); window._urlWriteTimer = setTimeout(() => { try { const newUrl = hasDiff ? (location.pathname + "?" + usp.toString() + location.hash) : (location.pathname + location.hash); history.replaceState(null, "", newUrl); } catch (e) { console.warn("URL state update failed:", e); } }, 300); return null; } null

      This bit at the bottom seems to have generated some sort of error. It says "null"

    2. In our sensitivity analysis,

      A little bit more cagey about this. I'm not sure this holds in a robust way, not sure we fully checked. Say something like, "In our preliminary sensitivity analysis these seem to contribute less ..."

    3. doption, reactor costs, and financing. High maturity = correlated improvements.

      I'm going to link the fuller explanation in the formula and explainers page

    1. How is this cost calculated?

      I think we need a bit more explanation here, perhaps even including some unfolded quick points about what kind of model this is, how the uncertainty comes in through simulations, etc., and what we're assuming about correlation or lack thereof between the different elements. We don't want to keep this simple and short but people should have some idea of what exactly they're looking at

    2. Full formula documentation → Model formulas & metrics Code html`<div style="margin-top:1.5rem; padding:0.8rem; background:#f0f8ff; border:1px solid #3498db; border-radius:6px; font-size:0.88em;"> <strong>Want more control?</strong> The <a href="index.html">Advanced Model</a> exposes all parameters: financing (WACC, asset life), plant capacity, cell density, media-use multiplier, CDMO mode, bundled media pricing, and more. <div style="margin-top:0.5rem;"> <a href="${(() => { const cont=Math.max(0,100-p_fedbatch_s-p_perfusion_s); const p=new URLSearchParams({target_year:target_year_s,p_hydro:(p_hydro_s/100).toFixed(2),p_recfactors:(p_recfactors_s/100).toFixed(2),p_fedbatch:(p_fedbatch_s/100).toFixed(2),p_perfusion:(p_perfusion_s/100).toFixed(2),p_continuous:(cont/100).toFixed(2),include_blending:include_blending_s?1:0,blending_share:(blending_share_s/100).toFixed(2)}); return 'index.html?'+p.toString(); })()}" style="font-weight:600;">→ Open Advanced Model with these settings</a> </div> </div>`

      I think those formula explanations pertain to the full model. Perhaps it would be better to have this linked directly to a new page or part of the page that just explains this simpler model

    3. Standard equipment life range

      Give a bit more reference for this. I'm actually a bit confused as to which equipment we're talking about. Sourced reference would give more credibility.

    4. 8–20% range Typical food/biotech financing range

      Explain this more. Are we drawing this from this particular distribution? Make a note or a tool tip about how the results are generally not particularly sensitive to this parameter, given the explanation you gave before, where the capital costs are really a rather small component in this context.

    5. Parameter Value Why fixed Industry Maturity 0.5 (neutral) At 0.5 the maturity factor has zero net effect on probabilities or financing

      This explanation is incomplete or it just doesn't make sense. Can you elaborate, and why is this the baseline you think maturity should matter for something?

    6. Probability Thresholds Code { function card(thresh, prob, label, color, bprob) { const bc = prob > 30 ? color : '#ddd'; const blend = include_blending_s && bprob !== undefined ? `<div style="font-size:0.8em; color:#1a5276; background:#f0f8ff; border-radius:3px; padding:2px 5px; margin-top:4px;"> Blended: <strong>${bprob.toFixed(1)}%</strong> chance &lt; $${thresh}/kg </div>` : ''; return `<div style="border:2px solid ${bc}; padding:0.9rem; border-radius:8px; text-align:center;"> <h5 style="margin:0 0 0.2rem;">P(Pure cells &lt; $${thresh}/kg)</h5> <h2 style="color:${color}; margin:0.2rem 0;">${prob.toFixed(1)}%</h2> <small style="color:#666;">${label}</small> ${blend} </div>`; } const grid = `<div class="grid" style="grid-template-columns:repeat(4,1fr); gap:0.75rem; margin-bottom:1.5rem;"> ${card(10, stats_s.prob_10, 'could approach conventional chicken (~$5-10/kg retail)', '#27ae60', stats_s.bprob_10)} ${card(25, stats_s.prob_25, 'range where premium cultured products may be viable', '#3498db', stats_s.bprob_25)} ${card(50, stats_s.prob_50, 'potential niche/specialty market', '#f39c12', null)} ${card(100, stats_s.prob_100, 'substantially below current lab-scale costs', '#e74c3c', null)} </div>`; const blendRow = include_blending_s ? ` <p style="font-size:0.88em; color:#1a5276; font-weight:500; margin:0.5rem 0 0.3rem;"> Blended product (${stats_s.bs*100|0}% CM + ${((1-stats_s.bs)*100)|0}% filler at $3/kg) — consumer-relevant prices: </p> <div class="grid" style="grid-template-columns:repeat(3,1fr); gap:0.6rem; margin-bottom:1.5rem;"> <div style="border:2px solid ${stats_s.bprob_5>20?'#27ae60':'#ddd'}; padding:0.8rem; border-radius:8px; text-align:center;"> <h5 style="font-size:0.85em; margin:0 0 0.2rem;">P(Blend &lt; $5/kg)</h5> <h2 style="color:#27ae60; margin:0.2rem 0;">${stats_s.bprob_5.toFixed(1)}%</h2> <small>competitive with conventional chicken</small> </div> <div style="border:2px solid ${stats_s.bprob_8>30?'#3498db':'#ddd'}; padding:0.8rem; border-radius:8px; text-align:center;"> <h5 style="font-size:0.85em; margin:0 0 0.2rem;">P(Blend &lt; $8/kg)</h5> <h2 style="color:#3498db; margin:0.2rem 0;">${stats_s.bprob_8.toFixed(1)}%</h2> <small>competitive with premium chicken/beef</small> </div> <div style="border:2px solid ${stats_s.bprob_12>50?'#f39c12':'#ddd'}; padding:0.8rem; border-radius:8px; text-align:center;"> <h5 style="font-size:0.85em; margin:0 0 0.2rem;">P(Blend &lt; $12/kg)</h5> <h2 style="color:#f39c12; margin:0.2rem 0;">${stats_s.bprob_12.toFixed(1)}%</h2> <small>affordable specialty market</small> </div> </div>` : ''; return html([grid + blendRow]); } TypeError: Cannot read properties of null (reading 'toFixed')

      The probability thresholds yield this error when you select that you want to show blended product.

    7. TypeError: Cannot read properties of null (reading 'toFixed')

      I'm getting "TypeError: Cannot read properties of null (reading 'toFixed')" for the probability thresholds here

    8. Blended Product Code viewof include_blending_s = Inputs.toggle({ label: "Show blended product analysis", value: urlBool_s("include_blending", false) })

      A bit more signposting here, please. Tooltip, if it will fit nicely. Maybe move this one to the top. And make it selected by default.

    9. Projected 2036 Cost Distribution:where(.plot-d6a7b5) { --plot-background: white; display: block; height: auto; height: intrinsic; max-width: 100%; } :where(.plot-d6a7b5 text), :where(.plot-d6a7b5 tspan) { white-space: pre; }

      Make it easier to expand this or zoom in on it, perhaps making it full screen. However, type tool tips within the graph could also be helpful, to be able to see the lower percentiles better. I'm not seeing the P80 here.

    10. Year

      Important. Nothing seems to be changing when I change the projection year! I would think that this model allows for technological change, even if they don't explicitly set the equitment maturity parameter"!

    11. Continuous (auto): 35%

      Let them set all three, but still have them automatically add up.

      These parameters need a lot more explanation.

      I think we can use this space better here. If you're only going to be showing a small set of "results" tables (maybe with others in folding boxes), you could just put these below the results, allowing a more fleshed out and spacious explanation of what the parameters mean, rather than this sidebar.

    12. xposes only the biggest levers on cultured chicken

      that's potentially too strong a claim. yes, some of the most important levers are here, but we also focused on the ~'simpler' elements requiring less explanation #implement.

      I'd say something like "the simplest model lets you adjust some of the more important levers..."

    1. 38.7% chance blended product (25% CM, $3/kg filler) < $10/kg

      This is basically also given in the boxes below, but with slightly different thresholds, which is confusing.We only need one or the other, as far as I understand it. Simplify (if this is also the case in the intermediate sluttage advanced model, fix it there too. )

    1. Parameter Sensitivity: Dollar Swing in Mean Unit Cost :where(.plot-d6a7b5) { --plot-background: white; display: block; height: auto; height: intrinsic; max-width: 100%; } :where(.plot-d6a7b5 text), :where(.plot-d6a7b5 tspan) { white-space: pre; }

      financing cost should be here too

    1. Simplified view: Less pivotal parameters (plant capacity, uptime, financing costs, media-use multiplier) are set to reasonable defaults. In our sensitivity analysis, these contribute less than 10% of the variance in cost estimates. Switch off to adjust all parameters. Code // Reactive style block to hide/show full-mode-only and cdmo-only inputs html`<style> .full-mode-only { display: ${simpleMode ? 'none' : 'block'}; } .cdmo-only { display: ${cdmo_mode ? 'block' : 'none'}; } .override-mode-only { display: ${override_mode_constraints ? 'block' : 'none'}; } .separable-only { display: ${bundled_media ? 'none' : 'block'}; } .bundled-only { display: ${bundled_media ? 'block' : 'none'}; } .blending-only { display: ${include_blending ? 'block' : 'none'}; } </style>` .full-mode-only { display: none; } .cdmo-only { display: none; } .override-mode-only { display: none; } .separable-only { display: block; } .bundled-only { display: none; } .blending-only { display: none; }

      even the 'nonsimplified view' should have some baseline capital cost, w a reasonable default ... and does it enter into the tornado table?

    1. Cultured Chicken Production Cost Model CodeShow All CodeHide All CodeView Source

      Should we make a page for a "much simpler model" that is much more legible ... and that can be an introduction to this more complicated model --- potential nest

    2. P(Scalable Growth Factor (GF)

      This needs more signposting, explaining, and opening. It seems like it must be making some very ad hoc decisions here as to what scalable growth factor technology means.

    1. Cell Density (g/L)

      This is very much determined by which process we are using. It's not that you can adjust the cell density on its own. -- should it/can it switch to being the sensitivity to 'process choice'

    2. Which parameters have the most impact on the final cost? Each bar shows the dollar swing in mean unit cost between simulations where the parameter is in its top 10% versus its bottom 10%. Larger bars = bigger levers on cost. Code { const uc = results.unit_cost; // Deduplicated parameter list. // Removed vs. previous version (see explainer below for details): // • L/kg (volume) — deterministic function of density × media-use multiplier // • Uses Hydrolysates — regime-switch subsumed into Media $/L // • Has Cheap GFs — regime-switch subsumed into GF Price / GF Quantity const params = [ {name: "Cell Density (g/L)", data: results.density_samples, kind: "primitive"}, {name: "Media-use multiplier (×)", data: results.media_turnover_samples, kind: "primitive"}, {name: "Media $/L (incl. hydrolysate regime)", data: results.media_cost_L_samples, kind: "mixture"}, {name: "GF Price ($/g, incl. regime)", data: results.price_recf_samples, kind: "mixture"}, {name: "GF Quantity (g/kg, incl. regime)", data: results.g_recf_samples, kind: "mixture"}, {name: "Industry Maturity (latent — see note)", data: results.maturity_samples, kind: "latent"}, {name: "Plant Capacity (kTA)", data: results.plant_kta_samples, kind: "primitive"}, {name: "Utilization Rate", data: results.uptime_samples, kind: "primitive"} ]; const swings = params.map(p => ({ name: p.name, kind: p.kind, swing: conditionalSwing(p.data, uc, 0.10) })); const sorted = swings .map(s => ({...s, absSwing: Math.abs(s.swing)})) .sort((a, b) => b.absSwing - a.absSwing); const maxAbs = Math.max(...sorted.map(s => s.absSwing), 1); const pad = maxAbs * 0.30; const tornadoPlot = Plot.plot({ width: 900, height: 440, marginLeft: 290, marginRight: 100, x: { label: "Δ mean unit cost ($/kg): top 10% − bottom 10% of parameter", domain: [-maxAbs - pad, maxAbs + pad], grid: true, labelOffset: 40, tickFormat: d => (d >= 0 ? "+$" : "−$") + Math.abs(d).toFixed(0) }, y: { label: null, tickFormat: d => d, tickSize: 0 }, color: { domain: ["Increases cost", "Decreases cost"], range: ["#e74c3c", "#27ae60"] }, style: { fontSize: "13px" }, marks: [ Plot.barX(sorted, { y: "name", x: "swing", fill: d => d.swing > 0 ? "Increases cost" : "Decreases cost", sort: {y: "-x", reduce: d => Math.abs(d)} }), Plot.ruleX([0], {stroke: "black", strokeWidth: 1}), Plot.text(sorted, { y: "name", x: d => d.swing > 0 ? d.swing + maxAbs * 0.025 : d.swing - maxAbs * 0.025, text: d => (d.swing > 0 ? "+$" : "−$") + Math.abs(d.swing).toFixed(1) + "/kg", textAnchor: d => d.swing > 0 ? "start" : "end", fontSize: 12, fontWeight: 500 }) ] }); return html`<div style="font-size: 1em;"> <div style="font-weight: normal; font-size: 1.05em; margin-bottom: 0.5rem; color: #333;">Parameter Sensitivity: Dollar Swing in Mean Unit Cost</div> ${tornadoPlot} </div>`; }

      Make it clearer, explain better that this is about parameters not just the cost inputs.

    3. Sensitivity Analysis (Tornado Chart)

      Adjust this chart so everything is in absolute value outcome -- no need for positive vs negative (unless these switch sighns, I doubt it) #implement

    4. Technology Adoption & Process Mode (Realized) Code { const isOverride = results.mode_is_override; const pct_fb = (results.pct_fedbatch * 100).toFixed(0); const pct_pf = (results.pct_perfusion * 100).toFixed(0); const pct_ct = (results.pct_continuous * 100).toFixed(0); const modeCard = isOverride ? html`<div class="card" style="border: 1px solid #ddd; padding: 1rem; border-radius: 8px; text-align: center; grid-column: 1 / -1;"> <h5>Process Mode</h5> <div style="color: #888; font-size: 0.9em;">Override — using manual density / media-use ranges</div> </div>` : html`<div class="card" style="border: 1px solid #16a085; padding: 1rem; border-radius: 8px; grid-column: 1 / -1;"> <h5 style="margin-bottom:0.5rem;">Process Mode (realized)</h5> <div style="display:flex; gap:1.5rem; justify-content:center; font-size:1.1em;"> <span>Fed-batch <strong style="color:#e67e22;">${pct_fb}%</strong></span> <span>Perfusion <strong style="color:#16a085;">${pct_pf}%</strong></span> <span>Continuous <strong style="color:#2980b9;">${pct_ct}%</strong></span> </div> </div>`; return html`<div class="grid" style="grid-template-columns: repeat(2, 1fr); gap: 1rem; margin: 2rem 0;"> <div class="card" style="border: 1px solid #ddd; padding: 1rem; border-radius: 8px; text-align: center;"> <h5>Hydrolysates Adopted</h5> <h2 style="color: #27ae60;">${(results.pct_hydro * 100).toFixed(0)}%</h2> <small>of simulations use hydrolysates</small> </div> <div class="card" style="border: 1px solid #ddd; padding: 1rem; border-radius: 8px; text-align: center;"> <h5>Cheap Growth Factors</h5> <h2 style="color: #9b59b6;">${(results.pct_recf_cheap * 100).toFixed(0)}%</h2> <small>of simulations have cheap factors</small> </div> ${modeCard} </div>`; }

      this needs a reminder ... what generated it

    5. Where does the cost come from? This chart shows the average contribution of each cost component across all simulations. The largest bars are the cost drivers to focus on — these are where technological progress or parameter uncertainty has the most impact. Code { const mediaLabel = bundled_media ? "Complete Media (incl. GFs)" : "Media (incl. basal micros)"; const allComponents = [ {name: mediaLabel, value: mean(results.cost_media), color: "#27ae60"}, {name: "Growth Factors", value: mean(results.cost_recf), color: "#9b59b6"}, {name: "Other VOC", value: mean(results.cost_other_var), color: "#7f8c8d"}, {name: "CAPEX (annualized)", value: mean(results.cost_capex), color: "#e74c3c"}, {name: "Plant overhead OPEX", value: mean(results.cost_fixed), color: "#f39c12"}, {name: "CDMO Toll", value: mean(results.cost_cdmo_toll), color: "#e67e22"}, {name: "Downstream", value: mean(results.cost_downstream), color: "#1abc9c"} ]; // Filter out zero-value components (e.g., downstream when not included) const components = allComponents.filter(c => c.value > 0.001).sort((a, b) => b.value - a.value); const total = components.reduce((s, c) => s + c.value, 0); const chartContainer = document.createElement("div"); chartContainer.style.position = "relative"; // Expand/collapse button const expandBtn = document.createElement("button"); expandBtn.textContent = "Expand Chart"; expandBtn.style.cssText = "padding: 0.3rem 0.7rem; font-size: 0.8rem; cursor: pointer; border: 1px solid #ccc; border-radius: 4px; background: #f8f9fa; margin-bottom: 0.5rem;"; let expanded = false; expandBtn.onclick = () => { expanded = !expanded; expandBtn.textContent = expanded ? "Collapse Chart" : "Expand Chart"; chartEl.replaceWith(makeChart(expanded)); chartEl = chartContainer.querySelector(".cost-breakdown-plot"); }; chartContainer.appendChild(expandBtn); function makeChart(large) { const w = large ? 1200 : 1000; const h = large ? 700 : 580; const fontSize = large ? 14 : 13; const p = Plot.plot({ width: w, height: h, marginLeft: 200, marginRight: 140, x: { label: "Average Cost ($/kg)", grid: true }, y: { label: null }, marks: [ Plot.barX(components, { y: "name", x: "value", fill: "color", sort: {y: "-x"} }), Plot.text(components, { y: "name", x: d => d.value + 0.5, text: d => `$${d.value.toFixed(2)} (${(d.value/total*100).toFixed(0)}%)`, textAnchor: "start", fontSize: fontSize }) ], title: `Cost Breakdown by Component (Total: $${Math.round(total)}/kg)` }); p.classList.add("cost-breakdown-plot"); return p; } let chartEl = makeChart(false); chartContainer.appendChild(chartEl); return chartContainer; } Expand Chart

      collapse/expand not doing much here

    1. Why it matters: If production costs for pure cells reach ~$10/kg, even 100% cultured products could compete with conventional chicken. At $25-50/kg, hybrid products with moderate cell inclusion rates may still reach price parity. If costs remain >$100/kg, even hybrid products face significant price premiums. These thresholds inform whether animal welfare interventions should prioritize supporting this industry. Code html`<div class="grid" style="grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-bottom: 2rem;"> <div class="card" style="background: linear-gradient(135deg, #3498db, #2980b9); color: white; padding: 1.5rem; border-radius: 8px;"> <h4 style="margin: 0; opacity: 0.9;">Median Pure Cell Mass Cost (p50)</h4> <h2 style="margin: 0.5rem 0;">$${Math.round(stats.p50)}/kg</h2> <small>$/kg pure cell mass (wet weight) — half of simulations above, half below</small> </div> <div class="card" style="background: linear-gradient(135deg, #27ae60, #1e8449); color: white; padding: 1.5rem; border-radius: 8px;"> <h4 style="margin: 0; opacity: 0.9;">Optimistic (p5)</h4> <h2 style="margin: 0.5rem 0;">$${Math.round(stats.p5)}/kg</h2> <small>Only 5% of simulations cheaper</small> </div> <div class="card" style="background: linear-gradient(135deg, #e74c3c, #c0392b); color: white; padding: 1.5rem; border-radius: 8px;"> <h4 style="margin: 0; opacity: 0.9;">Pessimistic (p95)</h4> <h2 style="margin: 0.5rem 0;">$${Math.round(stats.p95)}/kg</h2> <small>95% of simulations cheaper</small> </div> </div> ${include_blending ? html`<div style="background: #eaf7ea; border-left: 4px solid #27ae60; padding: 0.8rem 1rem; margin-top: 0.5rem; font-size: 0.9em;"> <strong>Blended product estimate (${Math.round(blending_share * 100)}% CM, ${Math.round((1-blending_share)*100)}% filler at $${filler_cost}/kg):</strong> Median <strong>$${stats.blended_p50.toFixed(1)}/kg</strong> · 90% CI: $${stats.blended_p5.toFixed(1)} – $${stats.blended_p95.toFixed(1)}/kg </div>` : html`<div style="background: #fef9e7; border-left: 4px solid #f39c12; padding: 0.8rem 1rem; margin-top: 0.5rem; font-size: 0.9em;"> <strong>Hybrid product estimate:</strong> At a CM inclusion rate of ~25% with plant-based filler at ~$3/kg, the blended ingredient cost would be approximately <strong>$${(stats.p50 * 0.25 + 3 * 0.75).toFixed(1)}/kg</strong> (median). Enable "Show blended product cost" in the sidebar to adjust these assumptions. </div>`} </div>`

      use tooltips for more for parts of this explanation to save some space

    2. Results Summary Code html`<div style="background: #f8f9fa; padding: 1rem 1.25rem; border-left: 4px solid #3498db; margin-bottom: 1.5rem; font-size: 0.95em; line-height: 1.6;"> <strong>What these numbers represent:</strong> Simulated <strong>production cost per kilogram of pure cultured chicken cells</strong> (<span title="Wet weight = the mass of cells as harvested from the bioreactor, including water content (~70-80%). This is the standard output basis used in most TEAs (Humbird 2021, Pasitka 2024). It does NOT include downstream processing into structured products, blending with plant-based ingredients, or retail margins. For comparison: Humbird reports $37/kg wet cell mass; Pasitka reports $13.75/kg wet cell mass (large perfusion). The widely-cited ~$6/lb Pasitka figure is for a 50/50 hybrid product, not pure cell mass. See our TEA Comparison page for details." style="text-decoration: underline dotted; cursor: help;">wet weight, unprocessed &#9432;</span>) in <strong>${target_year}</strong>, based on ${stats.n.toLocaleString()} Monte Carlo simulations. This is the cost to produce cell mass in a bioreactor — not the cost of a consumer product, and not retail price. <a href="compare.html" style="font-size: 0.9em;">[Compare to published TEAs →]</a> <br><br> <strong><span title="UPSIDE Foods' chicken cutlet is a blend of cultured chicken cells and plant-based ingredients. SuperMeat's chicken burger used ~30% cultured cells. The GFI State of the Industry 2024 report notes that 'hybrid products combining cultivated and plant-based ingredients are the most likely near-term path to market.' Eat Just/GOOD Meat's Singapore-approved product uses cultured chicken in a plant-protein matrix.">Pure cells vs. consumer products:</span></strong> Most cultivated meat products on the market or in development are <em>hybrid products</em> — blending a fraction of cultured cells with plant-based or mycoprotein ingredients. A product with (say) 20% cultured cells and 80% plant-based filler at $3/kg would have a blended ingredient cost far below the pure-cell cost shown here. The "price parity with conventional meat" threshold may therefore be achievable at higher per-kg cell costs than these numbers suggest. <br><br> <strong>Why it matters:</strong> If production costs for pure cells reach <strong>~$10/kg</strong>, even 100% cultured products could compete with conventional chicken. At <strong>$25-50/kg</strong>, hybrid products with moderate cell inclusion rates may still reach price parity. If costs remain <strong>>$100/kg</strong>, even hybrid products face significant price premiums. These thresholds inform whether animal welfare interventions should prioritize supporting this industry. </div>`

      Make this 'results summary' more prominent -- it should be at the top

    1. Process Mode Mix Code viewof p_fedbatch = Inputs.range([0, 1], { value: urlNum("p_fedbatch", 0.20), step: 0.05, label: html`Fed-batch weight <abbr style="cursor:help;text-decoration:underline dotted;font-size:0.85em;color:#888;" title="Low density (5–30 g/L), moderate media use (1–2×). Semi-continuous: nutrient-concentrated feeds added periodically. Less efficient than perfusion.">(?)</abbr>` }) viewof p_perfusion = Inputs.range([0, 1], { value: urlNum("p_perfusion", 0.50), step: 0.05, label: html`Perfusion weight <abbr style="cursor:help;text-decoration:underline dotted;font-size:0.85em;color:#888;" title="Medium-high density (30–150 g/L), higher media throughput (1–5×). Continuous media exchange with cell retention. Currently the industry standard for high-density CM production.">(?)</abbr>` }) viewof p_continuous = Inputs.range([0, 1], { value: urlNum("p_continuous", 0.30), step: 0.05, label: html`Continuous weight <abbr style="cursor:help;text-decoration:underline dotted;font-size:0.85em;color:#888;" title="Highest density (50–200 g/L), efficient media use (0.5–3×). Near-steady-state operation; cells grown and harvested continuously with optimized recycling.">(?)</abbr>` })

      needs more explanation

    1. Process Mode Mix Code viewof p_fedbatch = Inputs.range([0, 1], { value: urlNum("p_fedbatch", 0.20), step: 0.05, label: html`Fed-batch weight <abbr style="cursor:help;text-decoration:underline dotted;font-size:0.85em;color:#888;" title="Low density (5–30 g/L), moderate media use (1–2×). Semi-continuous: nutrient-concentrated feeds added periodically. Less efficient than perfusion.">(?)</abbr>` }) viewof p_perfusion = Inputs.range([0, 1], { value: urlNum("p_perfusion", 0.50), step: 0.05, label: html`Perfusion weight <abbr style="cursor:help;text-decoration:underline dotted;font-size:0.85em;color:#888;" title="Medium-high density (30–150 g/L), higher media throughput (1–5×). Continuous media exchange with cell retention. Currently the industry standard for high-density CM production.">(?)</abbr>` }) viewof p_continuous = Inputs.range([0, 1], { value: urlNum("p_continuous", 0.30), step: 0.05, label: html`Continuous weight <abbr style="cursor:help;text-decoration:underline dotted;font-size:0.85em;color:#888;" title="Highest density (50–200 g/L), efficient media use (0.5–3×). Near-steady-state operation; cells grown and harvested continuously with optimized recycling.">(?)</abbr>` })

      better explanation not only in tooltip

    1. The beliefs form is at uj-cm-workshop.netlify.app/beliefs.html. A short pre-workshop version goes out ~May 1. The in-workshop portion is lightweight: we'll orient you to the form at the breaks, and ask for a live response on CM_01 (the focal cost question) and one or two subquestions.

      This discussion of belief elicitation should not be within this S3 box. You can put it somewhere else, perhaps at the top or between S1 and S2? ()Folded box, folded by default.

    2. What should The Unjournal evaluate next — which papers, which questions, which specialists? [Suggested discussants]Suggested discussants:Matt McNulty (Tufts CCA) — wants to discuss tea_review + business_environment; strategic view of research priorities from an academic CM centerDavid Manheim (Technion/ALTER) — evaluator; wants to discuss modeling_hack; systematic view on what would be most informative to evaluate

      As I said in previous hypothesis comments, I don't want to make this so much about the Unjournal. To the extent that this is related to the Unjournal, it should be focused on the pivotal question ellipses. Which papers/projects best informs this ... Building on the framework and resources we've put together so far?

    3. Believer Meats published favorable TEA results in Nature Food yet shut down in late 2025.

      I don't like posing this contrast so specifically. It seems like casting aspersions. There must be a better way of expressing this.

    4. EU/CET participants likely available (15:00–16:00 CET):Aleksandra Fuchs (ACIB, Graz) — presenting in S1; likely joining earlyJordi Morales-Dalmau (Cultimate Foods, Berlin) — CET; indicated flexible availabilityMirjam Capuder (Univ Maribor) — indicated 15:00 CET availability on May 8Tom Bry-Chevalier (Univ de Lorraine) — CET; indicated May 8 availableJakub Kozlowski (Zurich

      no bold is needed here

    5. Claude: Implemented 6 items on /agenda (April 29): 1. All [Suggested discussants] tooltip triggers renamed from [suggested] to [Suggested discussants] 2. European drop-in row: added [likely attendees] tooltip listing EU/CET participants likely available at 15:00-16:00 CET (Aleksandra Fuchs, Jordi Morales-Dalmau, Mirjam Capuder, Tom Bry-Chevalier, Jakub Kozlowski + Bruno Cell, S2AQUAcoLAB, Cell Ag UK) 3. S1 intro: 'Pivotal Questions initiative' now links to GitBook page; 'Overview of cultivated meat biology...' links to learn.html 4. S1 intro: '(ideally presented by a participant with direct CM expertise)' parenthetical converted to a [note] tooltip 5. S3 public label: sharing rules inline text converted to [sharing rules] tooltip linking to recording-policy fold 6. S3 off-record label: same conversion with full S2 rules summary Replied to: Oana/gene-editing annotation (already in tooltip), European RSVP confirmation

    6. (ideally presented by a participant with direct CM expertise; otherwise DR will walk through the key model inputs and assumptions).

      make process parentheticals like this tooltips

    7. Claude: Implemented ~15 new annotations on /agenda (April 27): 1. S1 intro description updated: UJ/PQ/workshop intro, TEA overview by CM-expert participant 2. Aleksandra timing: '~10 min presentation + ~5 min comments/Q&A' 3. S1 Q&A slot: structured bullet list of proposed discussion topics (bioreactor scale, gene editing, etc.), note these are indicative not exhaustive 4. Timings note: overall session times fixed, within-session will be firmed up 5. Both break rows: '~5 min beliefs form orientation then ~10 min break' 6. S2 description: softer 'reduces barriers to frank exchange' framing; CDMO tooltip added 7. S2 discussion: CDMO bullet softened; push-back bullet expanded to emphasize ground-level knowledge 8. S2 opt-in sharing: clarified that others' comments need their approval too 9. S3 public/off-record: sharing rules labelled (S1 rules / S2 rules respectively) 10. S3 off-record text: revised away from 'what should UJ prioritize' to 'what follow-up is most valuable' 11. Post-workshop timing: made tentative ('still being finalized') 12. Attribution promise: softened to 'intended to remain confidential, policy still being worked out' 13. CM_12 discussion question rewritten (broader than just regulatory barriers); links to beliefs form CM_12 14. Process choice question: added 'which most likely at commercial scale' + model link tooltip 15. Cell line technology: added tooltip definition Still open: peHeekJx (cell line technology wording query), ttWCXkJx (RSVP check for European session — need form access), 68dkPEJx (additional structure/speakers for Q&A — needs David input).

    8. Claude: Implemented 5 annotations on /agenda (April 27): 1. Recording & sharing policy is now a collapsible fold, closed by default 2. Optional pre-sessions fold now starts collapsed (removed open attribute) 3. S1 em-dash changed to colon ('technology: the three main cost drivers'); pre-session rows use colons too 4. Badge tooltips fixed: removed overflow:hidden clipping, positioned below badge (not above), added click-to-open for mobile 5. Replied to Oana/gene-editing question noting current agenda status Not yet resolved: 'identical footnotes' request from BM4 annotation needs clarification on intended format.

    9. Claude: Done — 7 annotations implemented on /agenda: 1. Pre-sessions wrapped in a collapsible fold (starts open) — 'Optional pre-sessions & alternate slots' 2. 'Public · Recorded' badge on S1 now has a hover tooltip explaining recording, sharing, and opt-out 3. 'Internal · Off-record' badge on S2 now has tooltip explaining no-recording policy and opt-in sharing 4. Off-record fold renamed to 'Why this session is off the record — and what will be shared' 5. S2 sharing paragraph expanded to include the self-recording option (record your own, no other participants' audio) 6. S1 confirmed presentation fold now shows rough timings (11:00/11:30/11:50 ET) + gene editing context 7. Footnote updated from 'subject to minor adjustment' to honest 'still being finalized'

    10. If you are presenting slides in S2 and would like them shared more widely, just let us know and we will circulate them separately.

      Or would you like to record your own presentation to share on our channel

      implement

    1. Claude: Implemented all 16 of Oana Kubinyecz's Apr 9 annotations on learn.qmd:

      • 'rare natural trait' → 'rare spontaneous mutational event' (spontaneous immortalization row)
      • Cell source: added 'or from tissue at slaughter (more common at scale)' in two places
      • Cell line abbr: 'derived from a single cell' → 'derived from a selected population of cells'
      • Immortalized abbr: 'naturally or artificially' → 'spontaneously or through targeted genetic modification'
      • Cell types table: split Immortalized lines into spontaneous vs gene-edited rows; each with appropriate pros/cons
      • Added Embryonic stem cells (ESCs) row (naturally immortal, consumer acceptance concerns)
      • iPSCs: 'Can become any cell type' → 'Can differentiate into many cell types'
      • Cell banking: clarified that a proper bank maintains consistent performance; replacement is when vials run out or performance unexpectedly degrades
      • Cycle time: added abbr noting '5-10 days' is for fed-batch; true batch would be shorter
      • GF technology column: 'Technology breakthrough?' → 'Multiple strategies in development' with abbr listing precision fermentation, autocrine, gene editing to reduce GF dependence, cell adaptation
      • GM restriction note: corrected to explain GFs as processing aids are NOT restricted in EU; the jurisdictional fork concerns gene-edited cells in the final product, not GF production method
    1. Against this, Kalkar argued the opposite — that the contested empirical picture creates an opening: it may make sense to be a first-mover and evaluate now, given Ord's reframed 2027+ predictions"it may actually make sense to be a 'first-mover' and evaluate it now. Given that Toby Ord's reframed his predictions to 2027+, there's a window of opportunity"— Uma Kalkar.

      In spite of the mixed/negative opinions I'm slightly tempted to commission some sort of (limited) evaluation of this or of the Khatri et al. paper, to get our hands dirty in what seems to be an important space that we might be well suited for. -- David Reinstein

    2. I think engage with funders of AI and catastrophic risk, alignment etc. (I think Schmidt is interested, but are only funding research right now) -- it might be useful to reach out to them to provide an open evaluation of the work that they are commissioning / providing grants to. This way we also get to engage with AI researchers working at the forefront (at least in economics, broadly).

      @anirudh -- that sounds promising. Do you have a contact there?

    3. Claude: Implemented all 10 annotations from David's Apr 26 review:

      1. Tagat 'warning' reframed — it's a positive signal (lots to evaluate), not a deterrent. Section and tensions entry updated.
      2. NBER-track: added Tagat's actual quote + clarification that this is about a faster UJ evaluation pipeline, not that NBER is overlooked.
      3. Model cards tension noted — reviewing model cards/tech reports overlaps with technical AI safety territory; tension with anti-expansion consensus flagged.
      4. Habermacher realpolitik: marked as underspecified; further discussion needed.
      5. Governance cluster differentiated by tractability: risk parameters (quantitative, fits UJ) vs. middle-power/IR work (step beyond current empirical approach).
      6. Pre-booking: David's endorsement added + extension (evaluators choosing from a set).
      7. Technical AI safety: David's nuance added — not convinced the space is fully covered; Alignment Journal example.
      8. GCR relevance question added to labor/economics framing.
      9. Hypothes.is embed added with openSidebar:true — sidebar now opens by default for all visitors.
  4. Mar 2026
    1. The NBER format implies a working-paper stage

      not necessarily, it could also be published in a journal and still on NBER ... Sometimes you can see that in NBER, and sometimes not.

    2. here Animal welfare & food systems High Priority Mar 24, 2026 |EAFORUM gpt-5.4-mini ▾ Details This looks l

      the EA forum linked papers are not showing the actual paper titles

    1. Pure wet cell mass vs. cultivated ingredient vs. hybrid product vs. retail-equivalent

      quick tooltip and also link to an explainer (in the 'learn') section detailing these differences between these definitions of output ... Also, which papers do what here? If it's complicated, do that in a tooltip.

    2. Basis

      Column widths are off. Make the columns with more text wider than the columns with little text. Make that a skill or a sort of general instruction. It comes up a lot whenever you generate these HTML documents. !

    Annotators

    1. A latent factor (0=nascent, 1=mature) that affects all technology adoption, reactor costs, and financing. High maturity = correlated improvements.

      better explanation (or link) how this particular modeling was chosen, as well as the defaults here

    2. Cell Density Range Code viewof density_lo = Inputs.range([10, 100], { value: 30, step: 10, label: "Cell Density Low (g/L)" }) viewof density_hi = Inputs.range([50, 300], { value: 200, step: 10, label: "Cell Density High (g/L)" })

      allow 'reset defailt' here too

    3. Model Parameters Code viewof simpleMode = Inputs.toggle({label: "Simplified view (recommended)", value: true})

      A button to 'hide parameter setting' and 'show parameter setting/ could help, then whin it's hidden, the rest of the page content could be bigger so we can see chart sbetter