Wonderkid-flop-analysis harness: tasks 2–5 (growth-disabled probe, PA fit, maturity ratios, W1b projection) - #20
Merged
Conversation
Measurement only, per DEVELOPMENT_MODEL.md §6's filed "flop rate reads 0.00 against ~4%" divergence: no worldgen change, no DevKnobs::default change. - career_arc::Arc now records start_ca (best-role CA at worldgen, before any development tick), so r0 = start_ca / PA can be read per arc. CareerArcReport pools r0 and (attainment - r0) over the wonderkid (PA >= 80) cohort and asserts attainment >= r0 for every cohort arc, reporting any violation instead of panicking through the rest of the report. - run_growth_disabled_probe re-runs the pipeline with growth knobs at k=0, e_base/e_min at floor, calling development::tick_changes / apply_attr_step directly against a worldgen-generated World (no real matches needed, since k=0 zeroes the growth term regardless of the playing-time multiplier, and the aging branch never reads minutes) — the decisive test for whether the observed 0% flop rate is a worldgen floor or a growth-mechanism artifact. - fit_pa_from_ca_age fits PA ~ a*CA + b*age + c over every worldgen player (not just the cohort) and reports the residual sd. - print_maturity_ratios reports env_c(y)/NORM by Role at ages 16/18/20/22, reusing EnvTables/norms_by_role rather than re-deriving the envelope (development.rs gains EnvTables::env_at, a pub(crate) read accessor for the existing table). - bin/career_arc.rs runs all of the above after the normal report. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019sAgu5SWY7V1mvi8QBBBaU
Per the wonderkid-flop-analysis amendment's §5 revised task gating: before touching worldgen, project what an env-consistent reseed would do to the flop/hit rates using data already collected, no new simulation. - Arc now also carries the player's role and recorded bloomer phase (phi, read from DevProfile, never re-drawn), needed to evaluate the maturity table at each arc's own bloomer-shifted seeding age. - SeedingProjectionReport computes, per cohort arc, the gap-closure fraction f = (attainment - r0)/(1 - r0) from the already-traced career, then a hypothetical r0' = maturity(start_age - phi) via the existing role_maturity_ratio/EnvTables machinery, and attainment' = r0' + f*(1-r0'). Reports hit/flop/attainment/sub-0.80-tail actual-vs-projected, both overall and split by start-age band (the split the amendment's pooled arithmetic couldn't do). run_career_arc_with_projection computes this off the same traced arcs the normal report uses, so no pipeline is run twice. - fit_pa_from_ca_age is refactored to share an age-filtered inner implementation; fit_pa_from_ca_age_youth restricts the PA~CA,age fit to age<24, isolating the youth band from headroom's kink at the age-24 boundary. - bin/career_arc.rs prints both additions after the existing report. Measured (16 seeds x 16 seasons): pooled projected flop rate 18.5% (vs 0.1% actual), pooled projected hit rate 31.5% (vs 60.3% actual) -- in the amendment's 10-30% "proceed, but land the seeding change and the DevKnobs re-fit together" band, not the >=30% stop band. The age-band split matters more than the pooled number: bands 16-17 project flop rates of 32%/23% (overshooting badly), while bands 19-20 are already close to target (2.7%/4.3%) -- the overshoot the amendment's arithmetic worried about is concentrated in the youngest prospects, not uniform across the cohort. Youth-only (age<24) PA~CA,age residual sd reads 2.62, tighter than the whole-population 3.18 but not fully down to the predicted 8/sqrt(12)=2.31. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019sAgu5SWY7V1mvi8QBBBaU
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the measurement-only wonderkid-flop-analysis harness from
WONDERKID_FLOP_DIAGNOSIS.md, adding four diagnostic tasks to the career-arc calibration pipeline:Task 2: Growth-disabled probe — traces world seeds with
DevKnobs.k = 0(proportional growth disabled) to test whether the flop rate and attainment distribution are unchanged from the normal run. If they are, the floor comes from worldgen's initial state, not from growth knobs. Addstrace_seed_growth_disabled()andrun_growth_disabled_probe().Task 3: PA fit — fits
PA ~ a*CA + b*age + cby ordinary least squares over every player worldgen generates, reporting residual standard deviation as a measure of how tightly PA is determined by (CA, age) alone at generation time. Includes a youth-only variant (age < 24) to isolate the population before the headroom formula's kink. Addsfit_pa_from_ca_age(),fit_pa_from_ca_age_youth(), and a 3×3 Gaussian-elimination solver.Task 4: Maturity ratios — computes
env_c(y) / NORM(the role-weighted envelope blend at a given age, divided by that role's norm) for each role at key ages (16, 18, 20, 22). This is the scaling factor the W1b projection uses to reseed players env-consistently. Addsrole_maturity_ratio()andprint_maturity_ratios().Task 5: W1b projection — arithmetic projection of what an env-consistent reseed would do to flop/hit rates, using the already-traced arcs' own gap-closure fraction
f = (attainment - r0) / (1 - r0)(which is approximately scale-invariant under the proportional growth law). Reads each arc's recordedbloomer_phaseto apply the same per-player noise draw the traced career used. AddsSeedingProjectionReport,ProjectionBandStats,run_career_arc_with_projection(), andprint_seeding_projection().Arc struct extensions — adds
start_ca,role, andphi(bloomer phase) fields toArcso the projection can reconstruct the env-consistent reseed point and apply the same noise draw.CareerArcReport extensions — adds pooled
r0andattainment - r0distributions over the wonderkid cohort, violation tracking for arcs whereattainment < r0(which should never happen under the pre-peak-only decline model), and a helper to compute the fraction of wonderkids born withr0 < 0.75(already a flop at birth, before any growth).CLI integration — updates
bin/career_arcto run all four tasks and print their results alongside the normal career-arc report. The growth-disabled probe uses a larger seed pool (64 vs. the normal count) because flop rate is a rare-event count that needs wider sampling to read reliably.All measurement code is read-only against the traced arcs; no changes to
worldgen,development, orcommands.rsare needed.https://claude.ai/code/session_019sAgu5SWY7V1mvi8QBBBaU