Skip to content

Wonderkid-flop-analysis harness: tasks 2–5 (growth-disabled probe, PA fit, maturity ratios, W1b projection) - #20

Merged
lm98 merged 2 commits into
masterfrom
claude/wonderkid-flop-analysis-hajvta
Aug 24, 2026
Merged

Wonderkid-flop-analysis harness: tasks 2–5 (growth-disabled probe, PA fit, maturity ratios, W1b projection)#20
lm98 merged 2 commits into
masterfrom
claude/wonderkid-flop-analysis-hajvta

Conversation

@lm98

@lm98 lm98 commented Aug 24, 2026

Copy link
Copy Markdown
Owner

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. Adds trace_seed_growth_disabled() and run_growth_disabled_probe().

Task 3: PA fit — fits PA ~ a*CA + b*age + c by 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. Adds fit_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. Adds role_maturity_ratio() and print_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 recorded bloomer_phase to apply the same per-player noise draw the traced career used. Adds SeedingProjectionReport, ProjectionBandStats, run_career_arc_with_projection(), and print_seeding_projection().

Arc struct extensions — adds start_ca, role, and phi (bloomer phase) fields to Arc so the projection can reconstruct the env-consistent reseed point and apply the same noise draw.

CareerArcReport extensions — adds pooled r0 and attainment - r0 distributions over the wonderkid cohort, violation tracking for arcs where attainment < r0 (which should never happen under the pre-peak-only decline model), and a helper to compute the fraction of wonderkids born with r0 < 0.75 (already a flop at birth, before any growth).

CLI integration — updates bin/career_arc to 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, or commands.rs are needed.

https://claude.ai/code/session_019sAgu5SWY7V1mvi8QBBBaU

claude added 2 commits July 31, 2026 21:04
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
@lm98
lm98 merged commit 8781661 into master Aug 24, 2026
2 checks passed
@lm98
lm98 deleted the claude/wonderkid-flop-analysis-hajvta branch August 24, 2026 18:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants