name: mirror_v1
intent: >
  Every curriculum result so far points one way: a \@{schedule} that starts at
  high pairing concentration and moves toward low concentration builds the
  agreement rule, and time spent at low \@[α]{alpha} erodes it, the
  build-and-erode account assembled by
  \@[curriculum\_v1]{curriculum-build-and-erode} and
  \@[burst\_v1]{burst-build-erode-balance}.
  This experiment tests the mirror image directly. Each mirror pair runs the
  same α values for the same number of \@{steps} with the same \@{seeds}, once
  descending and once ascending; each \@{segment} draws its training pool
  fresh at its own α, so direction is the only systematic difference. The grid
  covers every pair of integer endpoints from 0 to 5 in two shapes: the smooth
  24-stage linear ramp of \@[slopesweep\_v1]{slopesweep-ramp}, and a jagged
  ladder with one rung per integer between the endpoints, so an
  adjacent pair degenerates to a single abrupt switch. Flat arms at each grid
  value calibrate what no direction looks like. All arms use the
  \@{with-replacement} data setting. Design:
  \href{https://github.com/ClaireHobbs/imagining-syntax/blob/main/docs/superpowers/specs/2026-07-16-mirror-schedules-design.md}{the
  mirror\_v1 spec}.
hypothesis: >
  For symmetric shapes, the higher-to-lower direction always wins on
  \@{unseen-mismatch}: in every mirror pair, in both shape families, the
  descending arm's cohort mean beats the ascending arm's at its peak
  \@{waypoint} and at the end of training, with a 95\% bootstrap interval on
  the difference that excludes zero. Spread is a separate competition: the
  descending arm is expected to be no less consistent, its peak standard
  deviation at most the ascending arm's, which matters because the collapsing
  arms of \@[slopesweep\_v1]{slopesweep-collapse} showed \@{seed-bimodality},
  its \texttt{s5\_e0} finishing at 32.1 ±27.4 with seeds spanning 0.4 to 85.3.
  The exposed flank is the pairs ending at 0: the descending arms to 0 of
  \@[slopesweep\_v1]{slopesweep-collapse} collapse by the end of
  training, finals between 19.0 and 32.1 from every start, and an ascending
  mirror finishes its training at high α with a freshly built rule. If ascent
  wins there at final, the operative variable is the final α, not the
  direction.
seed: 42
base_args: [curriculum, --with-replacement, --dataset-sentence-count, "48000",
            --schedule-shape, linear, --n-stages, "24", --total-iters, "1200",
            --n-iterations, "10",
            --waypoints, "50", "100", "150", "200", "250", "300", "350", "400", "450", "500", "550", "600", "650", "700", "750", "800", "850", "900", "950", "1000", "1050", "1100", "1150", "1200"]
compare:
  metric: unseen_mismatch

runs:
  # smooth 24-stage ramps: descending and flat
  - {label: s5_e5, args: [--alpha-start, "5", --alpha-end, "5"]}
  - {label: s5_e4, args: [--alpha-start, "5", --alpha-end, "4"]}
  - {label: s5_e3, args: [--alpha-start, "5", --alpha-end, "3"]}
  - {label: s5_e2, args: [--alpha-start, "5", --alpha-end, "2"]}
  - {label: s5_e1, args: [--alpha-start, "5", --alpha-end, "1"]}
  - {label: s5_e0, args: [--alpha-start, "5", --alpha-end, "0"]}
  - {label: s4_e4, args: [--alpha-start, "4", --alpha-end, "4"]}
  - {label: s4_e3, args: [--alpha-start, "4", --alpha-end, "3"]}
  - {label: s4_e2, args: [--alpha-start, "4", --alpha-end, "2"]}
  - {label: s4_e1, args: [--alpha-start, "4", --alpha-end, "1"]}
  - {label: s4_e0, args: [--alpha-start, "4", --alpha-end, "0"]}
  - {label: s3_e3, args: [--alpha-start, "3", --alpha-end, "3"]}
  - {label: s3_e2, args: [--alpha-start, "3", --alpha-end, "2"]}
  - {label: s3_e1, args: [--alpha-start, "3", --alpha-end, "1"]}
  - {label: s3_e0, args: [--alpha-start, "3", --alpha-end, "0"]}
  - {label: s2_e2, args: [--alpha-start, "2", --alpha-end, "2"]}
  - {label: s2_e1, args: [--alpha-start, "2", --alpha-end, "1"]}
  - {label: s2_e0, args: [--alpha-start, "2", --alpha-end, "0"]}
  - {label: s1_e1, args: [--alpha-start, "1", --alpha-end, "1"]}
  - {label: s1_e0, args: [--alpha-start, "1", --alpha-end, "0"]}
  - {label: s0_e0, args: [--alpha-start, "0", --alpha-end, "0"]}
  # smooth 24-stage ramps: ascending mirrors
  - {label: s0_e1, args: [--alpha-start, "0", --alpha-end, "1"]}
  - {label: s0_e2, args: [--alpha-start, "0", --alpha-end, "2"]}
  - {label: s0_e3, args: [--alpha-start, "0", --alpha-end, "3"]}
  - {label: s0_e4, args: [--alpha-start, "0", --alpha-end, "4"]}
  - {label: s0_e5, args: [--alpha-start, "0", --alpha-end, "5"]}
  - {label: s1_e2, args: [--alpha-start, "1", --alpha-end, "2"]}
  - {label: s1_e3, args: [--alpha-start, "1", --alpha-end, "3"]}
  - {label: s1_e4, args: [--alpha-start, "1", --alpha-end, "4"]}
  - {label: s1_e5, args: [--alpha-start, "1", --alpha-end, "5"]}
  - {label: s2_e3, args: [--alpha-start, "2", --alpha-end, "3"]}
  - {label: s2_e4, args: [--alpha-start, "2", --alpha-end, "4"]}
  - {label: s2_e5, args: [--alpha-start, "2", --alpha-end, "5"]}
  - {label: s3_e4, args: [--alpha-start, "3", --alpha-end, "4"]}
  - {label: s3_e5, args: [--alpha-start, "3", --alpha-end, "5"]}
  - {label: s4_e5, args: [--alpha-start, "4", --alpha-end, "5"]}
  # block integer ladders: descending, then ascending
  - {label: s5_e4_blk, args: [--alpha-start, "5", --alpha-end, "4", --n-stages, "2"]}
  - {label: s5_e3_blk, args: [--alpha-start, "5", --alpha-end, "3", --n-stages, "3"]}
  - {label: s5_e2_blk, args: [--alpha-start, "5", --alpha-end, "2", --n-stages, "4"]}
  - {label: s5_e1_blk, args: [--alpha-start, "5", --alpha-end, "1", --n-stages, "5"]}
  - {label: s5_e0_blk, args: [--alpha-start, "5", --alpha-end, "0", --n-stages, "6"]}
  - {label: s4_e3_blk, args: [--alpha-start, "4", --alpha-end, "3", --n-stages, "2"]}
  - {label: s4_e2_blk, args: [--alpha-start, "4", --alpha-end, "2", --n-stages, "3"]}
  - {label: s4_e1_blk, args: [--alpha-start, "4", --alpha-end, "1", --n-stages, "4"]}
  - {label: s4_e0_blk, args: [--alpha-start, "4", --alpha-end, "0", --n-stages, "5"]}
  - {label: s3_e2_blk, args: [--alpha-start, "3", --alpha-end, "2", --n-stages, "2"]}
  - {label: s3_e1_blk, args: [--alpha-start, "3", --alpha-end, "1", --n-stages, "3"]}
  - {label: s3_e0_blk, args: [--alpha-start, "3", --alpha-end, "0", --n-stages, "4"]}
  - {label: s2_e1_blk, args: [--alpha-start, "2", --alpha-end, "1", --n-stages, "2"]}
  - {label: s2_e0_blk, args: [--alpha-start, "2", --alpha-end, "0", --n-stages, "3"]}
  - {label: s1_e0_blk, args: [--alpha-start, "1", --alpha-end, "0", --n-stages, "2"]}
  - {label: s0_e1_blk, args: [--alpha-start, "0", --alpha-end, "1", --n-stages, "2"]}
  - {label: s0_e2_blk, args: [--alpha-start, "0", --alpha-end, "2", --n-stages, "3"]}
  - {label: s0_e3_blk, args: [--alpha-start, "0", --alpha-end, "3", --n-stages, "4"]}
  - {label: s0_e4_blk, args: [--alpha-start, "0", --alpha-end, "4", --n-stages, "5"]}
  - {label: s0_e5_blk, args: [--alpha-start, "0", --alpha-end, "5", --n-stages, "6"]}
  - {label: s1_e2_blk, args: [--alpha-start, "1", --alpha-end, "2", --n-stages, "2"]}
  - {label: s1_e3_blk, args: [--alpha-start, "1", --alpha-end, "3", --n-stages, "3"]}
  - {label: s1_e4_blk, args: [--alpha-start, "1", --alpha-end, "4", --n-stages, "4"]}
  - {label: s1_e5_blk, args: [--alpha-start, "1", --alpha-end, "5", --n-stages, "5"]}
  - {label: s2_e3_blk, args: [--alpha-start, "2", --alpha-end, "3", --n-stages, "2"]}
  - {label: s2_e4_blk, args: [--alpha-start, "2", --alpha-end, "4", --n-stages, "3"]}
  - {label: s2_e5_blk, args: [--alpha-start, "2", --alpha-end, "5", --n-stages, "4"]}
  - {label: s3_e4_blk, args: [--alpha-start, "3", --alpha-end, "4", --n-stages, "2"]}
  - {label: s3_e5_blk, args: [--alpha-start, "3", --alpha-end, "5", --n-stages, "3"]}
  - {label: s4_e5_blk, args: [--alpha-start, "4", --alpha-end, "5", --n-stages, "2"]}
claims:
  - {id: lin_1to0_mean_final, expect: {arm: s1_e0, rel: '>', ref: s0_e1}, at: final, adjudicate: ci95}
  - {id: lin_1to0_mean_peak, expect: {arm: s1_e0, rel: '>', ref: s0_e1}, at: peak, adjudicate: ci95}
  - {id: lin_1to0_sd_peak, expect: {arm: s1_e0, rel: '<=', ref: s0_e1}, at: peak, measure: sd}
  - {id: lin_2to0_mean_final, expect: {arm: s2_e0, rel: '>', ref: s0_e2}, at: final, adjudicate: ci95}
  - {id: lin_2to0_mean_peak, expect: {arm: s2_e0, rel: '>', ref: s0_e2}, at: peak, adjudicate: ci95}
  - {id: lin_2to0_sd_peak, expect: {arm: s2_e0, rel: '<=', ref: s0_e2}, at: peak, measure: sd}
  - {id: lin_2to1_mean_final, expect: {arm: s2_e1, rel: '>', ref: s1_e2}, at: final, adjudicate: ci95}
  - {id: lin_2to1_mean_peak, expect: {arm: s2_e1, rel: '>', ref: s1_e2}, at: peak, adjudicate: ci95}
  - {id: lin_2to1_sd_peak, expect: {arm: s2_e1, rel: '<=', ref: s1_e2}, at: peak, measure: sd}
  - {id: lin_3to0_mean_final, expect: {arm: s3_e0, rel: '>', ref: s0_e3}, at: final, adjudicate: ci95}
  - {id: lin_3to0_mean_peak, expect: {arm: s3_e0, rel: '>', ref: s0_e3}, at: peak, adjudicate: ci95}
  - {id: lin_3to0_sd_peak, expect: {arm: s3_e0, rel: '<=', ref: s0_e3}, at: peak, measure: sd}
  - {id: lin_3to1_mean_final, expect: {arm: s3_e1, rel: '>', ref: s1_e3}, at: final, adjudicate: ci95}
  - {id: lin_3to1_mean_peak, expect: {arm: s3_e1, rel: '>', ref: s1_e3}, at: peak, adjudicate: ci95}
  - {id: lin_3to1_sd_peak, expect: {arm: s3_e1, rel: '<=', ref: s1_e3}, at: peak, measure: sd}
  - {id: lin_3to2_mean_final, expect: {arm: s3_e2, rel: '>', ref: s2_e3}, at: final, adjudicate: ci95}
  - {id: lin_3to2_mean_peak, expect: {arm: s3_e2, rel: '>', ref: s2_e3}, at: peak, adjudicate: ci95}
  - {id: lin_3to2_sd_peak, expect: {arm: s3_e2, rel: '<=', ref: s2_e3}, at: peak, measure: sd}
  - {id: lin_4to0_mean_final, expect: {arm: s4_e0, rel: '>', ref: s0_e4}, at: final, adjudicate: ci95}
  - {id: lin_4to0_mean_peak, expect: {arm: s4_e0, rel: '>', ref: s0_e4}, at: peak, adjudicate: ci95}
  - {id: lin_4to0_sd_peak, expect: {arm: s4_e0, rel: '<=', ref: s0_e4}, at: peak, measure: sd}
  - {id: lin_4to1_mean_final, expect: {arm: s4_e1, rel: '>', ref: s1_e4}, at: final, adjudicate: ci95}
  - {id: lin_4to1_mean_peak, expect: {arm: s4_e1, rel: '>', ref: s1_e4}, at: peak, adjudicate: ci95}
  - {id: lin_4to1_sd_peak, expect: {arm: s4_e1, rel: '<=', ref: s1_e4}, at: peak, measure: sd}
  - {id: lin_4to2_mean_final, expect: {arm: s4_e2, rel: '>', ref: s2_e4}, at: final, adjudicate: ci95}
  - {id: lin_4to2_mean_peak, expect: {arm: s4_e2, rel: '>', ref: s2_e4}, at: peak, adjudicate: ci95}
  - {id: lin_4to2_sd_peak, expect: {arm: s4_e2, rel: '<=', ref: s2_e4}, at: peak, measure: sd}
  - {id: lin_4to3_mean_final, expect: {arm: s4_e3, rel: '>', ref: s3_e4}, at: final, adjudicate: ci95}
  - {id: lin_4to3_mean_peak, expect: {arm: s4_e3, rel: '>', ref: s3_e4}, at: peak, adjudicate: ci95}
  - {id: lin_4to3_sd_peak, expect: {arm: s4_e3, rel: '<=', ref: s3_e4}, at: peak, measure: sd}
  - {id: lin_5to0_mean_final, expect: {arm: s5_e0, rel: '>', ref: s0_e5}, at: final, adjudicate: ci95}
  - {id: lin_5to0_mean_peak, expect: {arm: s5_e0, rel: '>', ref: s0_e5}, at: peak, adjudicate: ci95}
  - {id: lin_5to0_sd_peak, expect: {arm: s5_e0, rel: '<=', ref: s0_e5}, at: peak, measure: sd}
  - {id: lin_5to1_mean_final, expect: {arm: s5_e1, rel: '>', ref: s1_e5}, at: final, adjudicate: ci95}
  - {id: lin_5to1_mean_peak, expect: {arm: s5_e1, rel: '>', ref: s1_e5}, at: peak, adjudicate: ci95}
  - {id: lin_5to1_sd_peak, expect: {arm: s5_e1, rel: '<=', ref: s1_e5}, at: peak, measure: sd}
  - {id: lin_5to2_mean_final, expect: {arm: s5_e2, rel: '>', ref: s2_e5}, at: final, adjudicate: ci95}
  - {id: lin_5to2_mean_peak, expect: {arm: s5_e2, rel: '>', ref: s2_e5}, at: peak, adjudicate: ci95}
  - {id: lin_5to2_sd_peak, expect: {arm: s5_e2, rel: '<=', ref: s2_e5}, at: peak, measure: sd}
  - {id: lin_5to3_mean_final, expect: {arm: s5_e3, rel: '>', ref: s3_e5}, at: final, adjudicate: ci95}
  - {id: lin_5to3_mean_peak, expect: {arm: s5_e3, rel: '>', ref: s3_e5}, at: peak, adjudicate: ci95}
  - {id: lin_5to3_sd_peak, expect: {arm: s5_e3, rel: '<=', ref: s3_e5}, at: peak, measure: sd}
  - {id: lin_5to4_mean_final, expect: {arm: s5_e4, rel: '>', ref: s4_e5}, at: final, adjudicate: ci95}
  - {id: lin_5to4_mean_peak, expect: {arm: s5_e4, rel: '>', ref: s4_e5}, at: peak, adjudicate: ci95}
  - {id: lin_5to4_sd_peak, expect: {arm: s5_e4, rel: '<=', ref: s4_e5}, at: peak, measure: sd}
  - {id: blk_1to0_mean_final, expect: {arm: s1_e0_blk, rel: '>', ref: s0_e1_blk}, at: final, adjudicate: ci95}
  - {id: blk_1to0_mean_peak, expect: {arm: s1_e0_blk, rel: '>', ref: s0_e1_blk}, at: peak, adjudicate: ci95}
  - {id: blk_1to0_sd_peak, expect: {arm: s1_e0_blk, rel: '<=', ref: s0_e1_blk}, at: peak, measure: sd}
  - {id: blk_2to0_mean_final, expect: {arm: s2_e0_blk, rel: '>', ref: s0_e2_blk}, at: final, adjudicate: ci95}
  - {id: blk_2to0_mean_peak, expect: {arm: s2_e0_blk, rel: '>', ref: s0_e2_blk}, at: peak, adjudicate: ci95}
  - {id: blk_2to0_sd_peak, expect: {arm: s2_e0_blk, rel: '<=', ref: s0_e2_blk}, at: peak, measure: sd}
  - {id: blk_2to1_mean_final, expect: {arm: s2_e1_blk, rel: '>', ref: s1_e2_blk}, at: final, adjudicate: ci95}
  - {id: blk_2to1_mean_peak, expect: {arm: s2_e1_blk, rel: '>', ref: s1_e2_blk}, at: peak, adjudicate: ci95}
  - {id: blk_2to1_sd_peak, expect: {arm: s2_e1_blk, rel: '<=', ref: s1_e2_blk}, at: peak, measure: sd}
  - {id: blk_3to0_mean_final, expect: {arm: s3_e0_blk, rel: '>', ref: s0_e3_blk}, at: final, adjudicate: ci95}
  - {id: blk_3to0_mean_peak, expect: {arm: s3_e0_blk, rel: '>', ref: s0_e3_blk}, at: peak, adjudicate: ci95}
  - {id: blk_3to0_sd_peak, expect: {arm: s3_e0_blk, rel: '<=', ref: s0_e3_blk}, at: peak, measure: sd}
  - {id: blk_3to1_mean_final, expect: {arm: s3_e1_blk, rel: '>', ref: s1_e3_blk}, at: final, adjudicate: ci95}
  - {id: blk_3to1_mean_peak, expect: {arm: s3_e1_blk, rel: '>', ref: s1_e3_blk}, at: peak, adjudicate: ci95}
  - {id: blk_3to1_sd_peak, expect: {arm: s3_e1_blk, rel: '<=', ref: s1_e3_blk}, at: peak, measure: sd}
  - {id: blk_3to2_mean_final, expect: {arm: s3_e2_blk, rel: '>', ref: s2_e3_blk}, at: final, adjudicate: ci95}
  - {id: blk_3to2_mean_peak, expect: {arm: s3_e2_blk, rel: '>', ref: s2_e3_blk}, at: peak, adjudicate: ci95}
  - {id: blk_3to2_sd_peak, expect: {arm: s3_e2_blk, rel: '<=', ref: s2_e3_blk}, at: peak, measure: sd}
  - {id: blk_4to0_mean_final, expect: {arm: s4_e0_blk, rel: '>', ref: s0_e4_blk}, at: final, adjudicate: ci95}
  - {id: blk_4to0_mean_peak, expect: {arm: s4_e0_blk, rel: '>', ref: s0_e4_blk}, at: peak, adjudicate: ci95}
  - {id: blk_4to0_sd_peak, expect: {arm: s4_e0_blk, rel: '<=', ref: s0_e4_blk}, at: peak, measure: sd}
  - {id: blk_4to1_mean_final, expect: {arm: s4_e1_blk, rel: '>', ref: s1_e4_blk}, at: final, adjudicate: ci95}
  - {id: blk_4to1_mean_peak, expect: {arm: s4_e1_blk, rel: '>', ref: s1_e4_blk}, at: peak, adjudicate: ci95}
  - {id: blk_4to1_sd_peak, expect: {arm: s4_e1_blk, rel: '<=', ref: s1_e4_blk}, at: peak, measure: sd}
  - {id: blk_4to2_mean_final, expect: {arm: s4_e2_blk, rel: '>', ref: s2_e4_blk}, at: final, adjudicate: ci95}
  - {id: blk_4to2_mean_peak, expect: {arm: s4_e2_blk, rel: '>', ref: s2_e4_blk}, at: peak, adjudicate: ci95}
  - {id: blk_4to2_sd_peak, expect: {arm: s4_e2_blk, rel: '<=', ref: s2_e4_blk}, at: peak, measure: sd}
  - {id: blk_4to3_mean_final, expect: {arm: s4_e3_blk, rel: '>', ref: s3_e4_blk}, at: final, adjudicate: ci95}
  - {id: blk_4to3_mean_peak, expect: {arm: s4_e3_blk, rel: '>', ref: s3_e4_blk}, at: peak, adjudicate: ci95}
  - {id: blk_4to3_sd_peak, expect: {arm: s4_e3_blk, rel: '<=', ref: s3_e4_blk}, at: peak, measure: sd}
  - {id: blk_5to0_mean_final, expect: {arm: s5_e0_blk, rel: '>', ref: s0_e5_blk}, at: final, adjudicate: ci95}
  - {id: blk_5to0_mean_peak, expect: {arm: s5_e0_blk, rel: '>', ref: s0_e5_blk}, at: peak, adjudicate: ci95}
  - {id: blk_5to0_sd_peak, expect: {arm: s5_e0_blk, rel: '<=', ref: s0_e5_blk}, at: peak, measure: sd}
  - {id: blk_5to1_mean_final, expect: {arm: s5_e1_blk, rel: '>', ref: s1_e5_blk}, at: final, adjudicate: ci95}
  - {id: blk_5to1_mean_peak, expect: {arm: s5_e1_blk, rel: '>', ref: s1_e5_blk}, at: peak, adjudicate: ci95}
  - {id: blk_5to1_sd_peak, expect: {arm: s5_e1_blk, rel: '<=', ref: s1_e5_blk}, at: peak, measure: sd}
  - {id: blk_5to2_mean_final, expect: {arm: s5_e2_blk, rel: '>', ref: s2_e5_blk}, at: final, adjudicate: ci95}
  - {id: blk_5to2_mean_peak, expect: {arm: s5_e2_blk, rel: '>', ref: s2_e5_blk}, at: peak, adjudicate: ci95}
  - {id: blk_5to2_sd_peak, expect: {arm: s5_e2_blk, rel: '<=', ref: s2_e5_blk}, at: peak, measure: sd}
  - {id: blk_5to3_mean_final, expect: {arm: s5_e3_blk, rel: '>', ref: s3_e5_blk}, at: final, adjudicate: ci95}
  - {id: blk_5to3_mean_peak, expect: {arm: s5_e3_blk, rel: '>', ref: s3_e5_blk}, at: peak, adjudicate: ci95}
  - {id: blk_5to3_sd_peak, expect: {arm: s5_e3_blk, rel: '<=', ref: s3_e5_blk}, at: peak, measure: sd}
  - {id: blk_5to4_mean_final, expect: {arm: s5_e4_blk, rel: '>', ref: s4_e5_blk}, at: final, adjudicate: ci95}
  - {id: blk_5to4_mean_peak, expect: {arm: s5_e4_blk, rel: '>', ref: s4_e5_blk}, at: peak, adjudicate: ci95}
  - {id: blk_5to4_sd_peak, expect: {arm: s5_e4_blk, rel: '<=', ref: s4_e5_blk}, at: peak, measure: sd}
