[
 {
  "agreements": [
   "The governing fact is right and all three prove it three different ways: for a prismatic groove every facet normal satisfies n.t = 0, so r.t = i.t for any number of bounces off any facet, and the reflected set is the cone {d : d.t = i.t} of half-angle arccos(i.t) about the groove axis. Numerically checked to 1e-15/2e-16/2.8e-14 independently. This is the one result I would build a renderer on.",
   "The dimensional reduction that follows (solve the 2-D cross-section once, carry c = i.t along for free) is correct and is the reason shadowing and second bounces can be exact rather than statistical here. All three state it; d3 measures it (multi-bounce fraction identical at 15/30/45/60/75 deg for a groove in the plane of incidence).",
   "Wall geometry: normal exactly 30 deg from vertical, single-bounce deflection exactly 60 deg at normal incidence, reflected ray 30 deg above the horizon. All three agree; d3's 30.002/60.004 is only the rounded a_c = 30.9 leaking in.",
   "The 120-deg-V degeneracy is real and is a good self-test: at exactly normal incidence the once-reflected wall ray is exactly parallel to the opposite wall (r.n_far = 0 identically), so the groove neither double-bounces nor traps at alpha = 0. d1, d2 and d3 all hit it, from algebra, from a dot product, and from a traced exit at u = -9.24.",
   "Two-mirror composition: deviation = 360 - 2*Theta = 120 deg, independent of hit point and incidence; in 3-D arccos((3c^2-1)/2). Wedge unfolding caps flat-wall bounces at ceil(180/120) = 2. All three agree, two of them verified numerically at many angles.",
   "Bare-V wall-to-wall window |alpha| in (14.476, 45.524) deg, reached three independent ways (sine rule with s_rim/s_cross = 2.8545; tan(beta_max) = (rho-1)/(sqrt3(rho+1)) -> 15.5238 deg about beta = 0; brute-force tracing that finds first events at 14.6 and last at 45.4). I reproduce these and endorse them.",
   "Wall-pattern conic classification is correct in all three, including the degenerate cases: hyperbola whenever the groove axis lies in the wall plane (the familiar bowed brushed-metal streak), morphing to parabola then ellipse then circle as the groove azimuth swings to point at the wall, and to a straight line when i.t = 0.",
   "Projected-area fractions for the surface AS SPECIFIED (zero land, period 117.4) agree to 1e-6 across all three: sphere 0.18442, wall 0.34199, ridge 0.47359, summing to 1 exactly because the rim cliff has zero projected area. The arithmetic is right.",
   "All three independently identified the sin/cos swap in the sphere/cone crossover and correctly traced it to stylus.py lines 70-71 (H0 = R(1-cos a), A0 = R sin a with a = 60 deg). That is a genuine bug in the model, not a spec typo, and finding it is the most valuable thing in these three derivations.",
   "All three correctly rank the physics: the ridge microstructure, the land fraction and the Fresnel weighting matter far more to the rendered image than any refinement of the specular algebra. d2's point that Smith-type statistical shadowing G is invalid for a deterministic periodic surface, and that closed-form shadowing must be used instead, is exactly right.",
   "Whispering-gallery paths in the concave cylinder are real (d3 found 70-115 bounces) and energetically irrelevant (0.6^70), but a renderer must cap bounce depth. Correct call."
  ],
  "disagreements": [
   {
    "quantity": "Upper edge of the wall-to-wall double-bounce window once the ridge is included",
    "values_given": "d1: clipped to ~38.7 deg. d2: occurs to -38.940 deg but escapes only to -21.060 deg. d3: traced nonzero out to 45.4 deg, zero from 45.6 deg.",
    "which_is_right": "None of them describes the surface the simulation actually uses. With the implemented ridge the bare-V window (14.48-45.52 deg) survives essentially intact; d3 is closest, and its extra population is real but arrives by a different route.",
    "why": "d1 and d2 both clipped the window using a 7.9 um VERTICAL CLIFF at the rim. optics.py cross_section() has no cliff: the crest sits 8.344 um OUTBOARD of the rim (PILEUP_CREST = 0.30 of a 27.81 um ridge), with an inner face at 43.4 deg and an outer face at 22.1 deg, and the code comments say a rim step was rejected precisely because it would block everything leaving the groove. Moving the occluding crest 8.34 um outboard moves the sight-line limit for the deepest wall point from 44.14 deg of elevation to 34.44 deg, i.e. the whole-near-wall-dark limit goes from |alpha| = 45.86 deg to 55.56 deg, so the ridge no longer clips the window at all. d3's numbers are right for the geometry d3 traced, but its wall-wall count at 45 deg (0.475%) includes chains that START on the rim step (it reports rimstep-wall-wall at 3.88%), which is a different population from d1/d2's directly-illuminated first hit. Re-run the tracer on the implemented profile before quoting any of these three."
   },
   {
    "quantity": "Projected-area fractions in the tangency-corrected geometry",
    "values_given": "d1 and d2: sphere 0.1065 / wall 0.4199 / ridge 0.4736 (period 117.4). d3: arc 0.1007 / wall 0.4513 / ridge 0.4480 (period 124.10).",
    "which_is_right": "d1/d2's triple. Pin the width (a_c = 30.9) and let the depth fall to 15.906 um; do not pin the depth and let the width grow to 34.25.",
    "why": "Both are internally consistent, but they pin different quantities. In this model depth is not an input: depth_for_load_um solves F = H(pi/2)a^2 for the contact radius a and then inverts the tip geometry, so a_c is the load-determined observable and d is derived from it. a_c is also the thing you can measure under a microscope. Correcting the crossover to A0 = R cos60 = 6.25, h0 = R(1 - sin60) = 1.6747 and holding a_c = 30.9 gives d = 15.906 um, period unchanged at 117.4, hence 0.1065/0.4199/0.4736. d3's branch (d fixed, a_c = 34.25, period 124.1) describes a groove the load cannot cut."
   },
   {
    "quantity": "Whether the groove ever returns light toward the lamp",
    "values_given": "d1: 'the grooves never throw light back at the spotlight... near-black from the lamp direction'. d2: 'NO - a 120 deg V cannot retroreflect, in-plane or otherwise'. d3: 'at theta_u = 30 deg the light-facing wall is hit at exactly normal incidence and retroreflects in one bounce'.",
    "which_is_right": "d3, with one restriction the 2-D tracer cannot see. All three are right that the two-bounce dihedral cannot retroreflect; d1 and d2 then over-generalise that into a false claim about total light return.",
    "why": "A single bounce off one wall sends light exactly back to the source whenever n = -i. The wall normal is 30 deg from vertical with no t-component, so the condition is: source elevation exactly 60 deg AND source azimuth perpendicular to the groove (i.t = 0). That is a full-wall, single-bounce, normal-incidence return at R = 0.62/0.58/0.55 (RGB) - the brightest thing a groove can do - and it is unshadowed (I checked: the sight line from the deepest far-wall point clears the near crest by tens of microns at alpha = 30 deg). Acceptance is a few degrees wide (lamp ~1.2 deg + diffraction 1.6 deg + floor roughness ~3 deg). In a drawing where strokes take every azimuth, a lamp at 60 deg elevation therefore produces a bright retro LOCUS along every stroke running perpendicular to the lamp azimuth, and a camera beside the lamp will photograph it. The installation default in project.py sits at 37 deg incidence (53 deg elevation), only 7 deg off that condition - inside the wings. Corollary the sim should be checked against: those same strokes send nothing to the wall, so the retro-bright strokes must be the wall-dark ones."
   },
   {
    "quantity": "How the lamp's finite angular size maps into outgoing angular blur",
    "values_given": "d1: smears psi by +-sigma. d2: 'the finite spotlight subtends its own angle (~1 deg) and doubles into ~2 deg after reflection'. d3: 'convolves each delta to about 2*sigma wide'.",
    "which_is_right": "d1 (and d3 if 2*sigma is read as a full width). d2's doubling is wrong as stated.",
    "why": "Reflection off a facet of FIXED normal maps incident directions to outgoing directions one-to-one, so the outgoing spread equals the source's angular radius; a mirror image of a lamp has the lamp's angular size. The factor 2 belongs only to facet-normal spread -> direction spread (d(phi_out)/d(theta_facet) = 2, which d2 itself derived correctly for the arc), i.e. to roughness and curvature, not to source size. project.py gets this right (lamp blurred 1:1, roughness blurred with the 2x), so d2's caveat would push a correct implementation in the wrong direction."
   },
   {
    "quantity": "Multi-bounce population at normal incidence",
    "values_given": "d2: of flux entering the mouth, 64.9% single wall, 19.1% single arc, 8.0% arc->arc, ~5% ends on a ridge. d3: 8.34% of the whole period is multi-bounce, 15.84% of the mirror-finish area only.",
    "which_is_right": "They are not in conflict, but neither is quotable without its denominator, and both are for the cliff geometry.",
    "why": "d2 normalises to flux entering the groove mouth; d3 normalises to the full 117.4 um period (47.36% of which is ridge) and separately to the mirror-only footprint. Anyone lifting '8%' or '8.0%' out of these will mix them. Both also depend on the rim step, which the implemented profile does not have: d3's own variant runs show normal-incidence multi-bounce moving 8.34% -> 5.66% when the rim step is removed and 8.34% -> 1.08% under the tangency correction. Treat every multi-bounce percentage in all three derivations as good to no better than a factor of 1.5."
   }
  ],
  "errors_found": [
   "REAL CODE BUG, correctly located by all three: stylus.py lines 70-71 use H0 = R(1-cos a), A0 = R sin a with a = 60 deg (the half-angle from the AXIS) where the tangency condition needs the surface half-angle. For a tangent sphere on a 120 deg included cone, A0 = R cos60 = 6.2500 and h0 = R(1-sin60) = 1.6747. Fix is one line. Consequence beyond optics: contact_radius_um feeds depth_for_load_um, so at the same load-determined a_c = 30.9 the corrected depth is 15.906 um, not 17.841 um - a 12% overstatement that propagates into README's '1パスの深さ 17.8 µm' and into the 1657 mm^3 removed-volume figure (~11% less). Optically it also creates a 30 deg normal discontinuity 11.59 um down inside every groove and lets the arc bulge 1.67-1.93 um beyond the cone, i.e. the 'blunting' removes MORE metal than a rigid indenter could.",
   "THE RIDGE SPEC HANDED TO ALL THREE DERIVATIONS DOES NOT MATCH THE IMPLEMENTED SURFACE. The brief says 'peak height 7.9 AT the rim, falling linearly over 27.8, slope 15.9 deg', which forces a vertical cliff. optics.py cross_section() builds ridge width 0.45*2*a_c = 27.81 um with the crest at 30% of that OUTBOARD of the rim: crest offset 8.344 um, height 7.895, inner face 43.4 deg, outer face 22.1 deg, no cliff and no 15.9 deg facet anywhere. Every cliff-derived number in the three derivations is therefore about a surface nobody renders: the 38.7/38.94 deg two-bounce clip, the -21.06 deg escape edge, the 45.86 deg near-wall blackout (really 55.56 deg), the 3.57-25.1% rim-step hit fractions and the rimstep-wall-wall chains, and d1's 'clears the far crest by 4.6 um'. Also, the implemented ridge has TWO tilts, so if it were specular it would put spikes at +-87 deg and +-44 deg of azimuth, not the +-31.8 deg all three quote.",
   "THE ZERO-LAND 117.4 um PERIOD THAT UNDERLIES ALL THREE AREA CENSUSES EXISTS NOWHERE ON THIS DISC. The project's own 2 mm-window measurements (README): r=170 -> 100.0% cut / 0% ridge / 0% mirror / highest point -11.9 um / 85 passes; r=100 -> 30.9 / 18.5 / 50.6 with +7.9 um crests / 6 passes; r=25 -> 38.3 / 22.5 / 39.2 / 5 passes. So the real ridge share is 18-23% where grooves are sparse and 0% in the worked ring - not 47.36% - and the mean pitch at r=100 is 61.8/0.309 = 200 um, so ridge toes do not touch. The conclusion all three flag as the most important radiometric fact ('the ridges are 47% of the area and therefore dominate the pedestal') is overstated by ~2.5x outside the ring and void inside it.",
   "NOBODY MODELS THE THING THAT WILL DOMINATE THE PHOTOGRAPH. 69% of all cutting (4960 m of 7214 m) lies in a 10 mm-wide annulus at r = 166-176 mm with tangential order -0.918. There the surface is 100% cut, 0% ridge, and sunk 14.6 um to a flat matte plateau: the pile-up of each pass was ploughed off by the next. That is not a V-groove field, it is a re-cut, work-hardened, torn/burnished satin band, and the prismatic-cone model applies to it least of anywhere while contributing most of the light. Its BRDF has to be fitted or measured (a broad anisotropic lobe about the local tangential direction), not derived from the tip.",
   "PANEL FIGURE ERROR IS IGNORED BY ALL THREE AND IS PROBABLY THE LARGEST SINGLE DISCREPANCY WITH A PHOTOGRAPH. A 1.5 mm x 400 mm 304 sheet with 1657 mm^3 removed asymmetrically (69% of it into one annulus) will not stay flat. A 1 mm sag over r = 200 mm is R_curv ~ 20 m, i.e. +-10 mrad of surface slope across the disc, +-20 mrad = +-1.15 deg of ray deviation - equal to or larger than the lamp's own angular radius. At the 2.2 m wall throw that displaces features by ~44 mm and turns the lamp's specular image into an irregular astigmatic smear rather than a round blob. It barely perturbs the groove cones (tens of degrees wide), so the signature is specific: warped, smeared specular image, intact groove structure.",
   "d2's claim that source angular size doubles on reflection is wrong (see disagreements). It would make an implementer double-blur a term the code currently blurs correctly.",
   "project.py's lamp is too big and too Gaussian. Default lamp_half_angle_deg = 1.6 at 2.75 m implies a 154 mm luminous aperture - a softbox, not a gallery spot (a 40-90 mm spot aperture at 2-3 m is 0.4-0.95 deg half-angle). On top of that, blur() uses a Gaussian with sigma equal to the source's angular RADIUS, where a uniform disc of radius rho has sigma = rho/2. Together the specular lamp image is spread over roughly 4x too much area and its peak under-predicted by close to an order of magnitude - and the code itself notes that image is orders of magnitude above everything else. Net effect: the render systematically flatters the groove structure relative to the mirror.",
   "SLOPE_RIDGE = 6 deg (outgoing lobe sigma ~12 deg) is too shiny for torn, smeared metal. The derivations' own recommendation of GGX alpha 0.3-0.6 corresponds to slope sigma 12-24 deg, i.e. 2-4x wider. Where ridges exist they are 18-23% of the area, so this term sets the haze pedestal and the direction of the error is 'too crisp'.",
   "The diffraction dismissal in project.py's docstring ('a fraction of a degree, far below the lamp's own angular size') is too generous by about 4x for the wall facets: they are only 20.07 um wide, so lambda/w = 0.55/20.07 = 1.6 deg, comparable to the lamp, and grating order spacing is lambda/P = 0.55/117.4 = 0.27 deg. The conclusion (geometric optics for the pattern, no visible iridescence - colour spread inside the facet envelope is only ~1 deg because the period is 200x the wavelength) still holds, but the specular spikes are diffraction-limited at ~1.6 deg, not at a fraction of a degree. The current 1.6 deg lamp blur is doing this job by accident."
  ],
  "verdict": "SHORT ANSWER: the physics core is sound and I would ship it; the failure modes are all radiometric and all in the same direction - the render will be too clean. Three independent derivations agreeing on r.t = i.t, the 30/60 deg wall numbers, the 120 deg two-mirror deviation and the 14.48-45.52 deg window is real corroboration, not three copies of one mistake. But every one of them answers a question about an isolated groove of pitch 117.4 um with touching torn ridges, and the project's own measurements say that surface exists nowhere on this disc.\n\n(1) NEIGHBOUR SHADOWING/MASKING - ignore it, with numbers. For the as-specified touching-ridge pitch, crest-to-crest across the inter-ridge valley is 55.6 um at 7.9 um height, so neighbour occlusion begins only below 8.1 deg of cross-groove elevation. At the measured pitch (200 um at r=100) the crests are ~110 um apart and the limit falls to 4.1 deg. The escaping single-bounce ray leaves at 30 deg elevation, rising 7.9 um in 13.7 um horizontally - it clears every neighbour ridge. And because the reduction uses the CROSS-SECTION elevation, E_x = atan(tan E / |sin A|) >= E, a lamp raking along the strokes is LESS shadowed than intuition says, not more. The installation sits at 37 deg incidence (53 deg elevation), nowhere near the regime. Conclusion: inter-groove shadowing costs nothing above ~10 deg elevation and is total below ~5 deg; omitting it is correct here. What is NOT safely omitted is within-groove shadowing (included) and the fact that in the worked ring grooves have no individual identity at all.\n\n(2) SPOTLIGHT ANGULAR SIZE - real but not the washer-out. A gallery spot's effective source is its luminous exit aperture, not its beam angle and not the LED die: 40-90 mm at 2-3 m gives a half-angle of 0.4-0.95 deg (use 0.6 deg, full width 1.2 deg). The mapping to outgoing blur is 1:1, so the blur budget is source 0.6 deg (+) facet diffraction 1.6 deg (+) burnished-floor roughness 2x1.6 = 3.2 deg, total ~3.6 deg. The structure the derivations predict lives at +-60 deg of azimuth (wall spikes) across a 240 deg band (120 deg tangency-corrected): the blur is 1-2% of the pattern scale and does NOT wash it out. What it does erase is the delta-versus-lobe distinction, caustic fine structure, and the wall-wall spike (a few percent of flux, 1.6 deg wide) which sinks into the pedestal. The genuine washer-out is integration, not blur: t rotates 0.67 deg per mm along a stroke of radius 171 mm, and across the ring it sweeps all 360 deg, so the wall receives a two-parameter family of cones. The single-groove hyperbola is a per-point statement; the visible object is the family's envelope.\n\n(3) NO UN-CUT MIRROR LEFT - already measured, and it is the most interesting question here. Inside the ring there is not one mirror cell left, and the pile-up is gone too. Consequences: the lamp's specular image - the brightest feature by 8-14 stops - simply vanishes from that annulus, so the disc shows a band where the mirror image drops out and a satin, strongly view-dependent glow takes its place. Flux is nearly conserved (R falls only from ~0.58 to ~0.5 for a burnished floor), so the light is not lost, it is redistributed from a ~1 deg blob into a tens-of-degrees fan: the wall pattern gets much brighter and much softer, and peak wall luminance drops by the solid-angle ratio, 10^2-10^4. Because the ring's grooves are 92% tangentially ordered, that band behaves like a circular-brushed (turned) finish - expect the classic pair of bright radial spokes that rotate with the observer, and on the wall a broad ring or cross rather than arcs. Model it as a blend weighted by the measured land map, not with a global --no-mirror switch.\n\n(4) POLARISATION - do not track it for the image; do track it if a polariser is used. At the 60 deg local incidence a wall sees under normal illumination, 304 (n=2.45, k=3.35) gives Rs = 0.762, Rp = 0.354, so the once-reflected groove light is 37% polarised, against 13-19% for the land's specular image. But the INTENSITY error from scalar unpolarised Fresnel is zero on the first bounce and only +13% on the two-bounce term (0.311 scalar versus 0.353 correct, and for i.t = 0 both walls share the same plane of incidence so that is exact); two-bounce carries a few percent of the flux, so the whole-image error is ~1%. Not worth a Mueller calculus. Two things that DO matter more: the angular dependence of R, already implemented (0.58 at normal rising to 0.68-0.71 at 85 deg, and slightly cooler there, so grazing lobes are brighter and less warm than the specular image); and the fact that a polariser on the camera can swing the groove light ~1.4:1 against the mirror light - a free diagnostic for separating the two populations, and possibly a usable exhibition control.\n\n(5) INTER-REFLECTION BETWEEN DISTANT PARTS OF THE DISC - identically zero, but for a reason none of the three gives: a plane cannot see itself. A flat disc, tilted or not, has no self-view, and a 20 m radius of curvature from dishing is still far too flat to create one. So the omission is right. The terms hiding behind that phrase and worth budgeting are different: near-field neighbour interaction for grazing exits (small above 10 deg elevation, but note R rises to 0.7-0.9 at grazing so what does happen is not attenuated); and the room - the disc IS a mirror, so the wall image carries a faint mirror image of the lamp housing and the room, and the lit wall re-illuminates the disc and fills the grooves with an ambient that raises the black level by a few percent of direct irradiance. That ambient, plus lens veiling glare, is the real floor.\n\n(6) WHAT A PHOTOGRAPH LOOKS LIKE, AND THE ONE WAY THE SIM WILL LOOK WRONG-BUT-PLAUSIBLE. The photograph: a disc that is mostly near-black (a mirror shows you the dark room) with one blown-out blob where it images the lamp, warped and stretched by panel waviness rather than round; a matte annulus at r~171 mm that flips between darker-than-mirror and brilliant as the camera moves, carrying two bright radial spokes; individual strokes elsewhere reading as thin dark or bright lines depending on their azimuth relative to the lamp, with isotropic bright dots at stroke ends and crossings where the tip plunged or turned and the cone rule fails; on the wall, no curves - a broad, soft, structured glow with faint caustic edges, sitting on a veiling pedestal, all of it within about two stops while the lamp image is eight to fourteen stops above. Slightly warm neutral (R/B ratio 1.13 single bounce, 1.23 double).\n\nTHE SINGLE MOST LIKELY FAILURE is a render with the right geometry and the wrong dynamic range: elegant thin conic arcs on a black field, which reads instantly as CGI. Four errors already push that way - the lamp image over-blurred ~4x in area (so the hotspot is an order of magnitude too weak and the structure looks relatively strong), no lens veiling glare or room ambient (so the floor is too black), a perfectly flat panel (so the specular image is too tidy), and a ridge lobe 2-4x too narrow (so the haze is too crisp). The seductive part is that each is individually defensible and the result looks physical. The tell to check against a real photograph is the ratio between the lamp image peak and the groove structure, not the shape of the arcs. A close second failure: uniform grooves everywhere - one profile, one depth, no stroke-end bowls, no crossings, no 85-pass history - which produces an unnaturally combed surface. The pass-count and land maps are already on disk; use them, because the isotropic sparkle at stroke ends and the matte annulus are exactly the cues by which the eye reads that a machine drew this and then stopped.",
  "recommended_values": {
   "cone_half_angle_rule": "gamma = arccos(i.t), exactly, for any number of bounces off any facet of a prismatic groove - the outgoing set is the cone {d : d.t = i.t} about the groove axis, and only the azimuth about t is redistributed. Equivalent grazing form: cos gamma = cos E cos A for source elevation E and azimuth A relative to the groove. Populated azimuths (measured from the flat-mirror specular direction): 0 from the land, +-60 deg from the two walls, a continuous band +-120 deg from the cylindrical bottom (+-60 deg if the tangency bug is fixed), and phi_i -/+ 120 deg for the wall-wall path. MODELLING, not a number: apply it per POINT, not per groove. It fails wherever t is not constant - stroke ends and dwells (a plunged tip leaves a spherical bowl whose normals have n.t != 0, giving a 2-D spray and a bright isotropic dot), crossings, and any stroke curved over a spot larger than its radius of curvature. In the r=171 mm ring t sweeps all 360 deg of azimuth, so the union of cones is two-parameter: there is no single conic there and no envelope worth chasing - use a fitted anisotropic satin lobe about the local tangential direction instead.",
   "deflection_normal_incidence_deg": 60,
   "projected_area_fractions_note": "The triple sphere 0.1844 / wall 0.3420 / ridge 0.4736 is arithmetically right for the surface as specified (zero land, period 117.4 um, ridge crest at the rim) and all three derivations agree to 1e-6 - but that surface exists nowhere on this disc, so do NOT weight a render with it. Fixing the tangency bug at fixed load-determined width (a_c = 30.9, d -> 15.906) gives 0.1065 / 0.4199 / 0.4736. Use instead the measured maps already on disk (depth_disc.py output, README 2 mm windows): r=170 -> cut 100.0% / ridge 0% / mirror 0%, crest -11.9 um, 85 passes; r=100 -> 30.9 / 18.5 / 50.6, +7.9 um, 6 passes; r=25 -> 38.3 / 22.5 / 39.2, 5 passes. So the true ridge share is 18-23% where grooves are sparse (mean pitch ~200 um, ridge toes NOT touching) and 0% in the ring, against the assumed 47.36% - the 'ridges dominate the pedestal' conclusion is ~2.5x overstated outside the ring and void inside it, where the correct object is a matte plateau 14.6 um down with the pile-up ploughed off by later passes. Also raise SLOPE_RIDGE from 6 deg to 12-20 deg (GGX alpha 0.3-0.6) where ridges do exist.",
   "two_bounce_summary": "Bare V: wall-to-wall occurs for cross-section tilt |alpha| in (14.476, 45.524) deg, peaking near 29-30 deg, with a fixed 120 deg deviation (360 - 2*Theta) independent of hit point; in 3-D the deviation is arccos((3c^2-1)/2), c = i.t, and the ray stays on the same cone. Never more than 2 flat-wall bounces (ceil(180/120)). No retroreflection from the dihedral - that needs Theta = 90 deg - but note the single-bounce return the derivations miss: one wall sends light exactly back to the source when its normal is anti-parallel to i, i.e. source elevation 60 deg and azimuth perpendicular to the groove, a full-strength R = 0.58 glint a few degrees wide. MODELLING, not a number: every ridge-clipped two-bounce figure in the three derivations (38.7, 38.94, -21.06, 45.86 deg) assumes a 7.9 um vertical cliff at the rim that optics.py does not have. With the implemented ridge (crest 8.344 um outboard, inner face 43.4 deg, outer 22.1 deg) the near-wall blackout limit moves from 45.86 deg to 55.56 deg and the ridge stops clipping the window, so the bare-V edges are essentially restored - re-run the tracer on the implemented profile before quoting anything. Radiometrically the two-bounce lobe carries R^2 = 0.31-0.35 of a single bounce and only a few percent of the flux, is 1.6 deg wide from facet diffraction alone, and will sit inside the pedestal; getting it exactly right matters far less than the land fraction and the veiling floor.",
   "wall_normal_deg_from_vertical": 30
  }
 },
 {
  "agreements": [
   "Wall normal tilt = 30 deg from vertical is CORRECT (not 60). The wall line is 60 deg from the vertical cone axis = 30 deg from the horizontal surface, so its normal is 30 deg from vertical / 60 deg from horizontal. With the literal rounded inputs (junction (10.82532,-11.5910) to (30.9,0)) it is 30.0019 deg, as derivation 3 reports.",
   "Local incidence angle on the wall at normal illumination is 30 deg from the facet normal (not 60), so r = (0,-sin120,-cos120) = (0,-0.8660254,+0.5): 60 deg from vertical, 30 deg elevation above the surface. Verified exactly.",
   "The 'reflected ray is exactly parallel to the opposite wall at normal incidence' claim is right and is unique to a 120 deg included angle: r.n_opposite = 0 requires cos(2a) = -1/2, i.e. a = 60 deg. Verified to 1e-16.",
   "The conserved-component claim IS true for the 'spherical' part, and for the reason all three give: in a prismatic groove the swept tip sphere is a CIRCULAR CYLINDER, so its normal (0,-y,z_c-z)/R has zero t-component like every other facet. My independent check over 200000 random unit i and random 1-6 bounce chains mixing arc/wall/land/ridge facets gives max |r.t - i.t| = 0.0 exactly (t = x_hat makes the arithmetic exact). A genuine sphere-of-revolution facet (plunge, stroke end, crossing) does break it: i.t = 0.2000 -> r.t = 0.7207 in my test. All three flag this correctly.",
   "Cone rule psi = arccos(i.t), outgoing set = {r : r.t = i.t}, independent of facet tilt, depth, facet family and bounce count. Correct, and the degenerate limits (i.t = 0 -> flat fan; |i.t| -> 1 -> collapse to t) are right.",
   "Conic-section classification on a wall: all three forms are equivalent and correct (ellipse iff the angle between t and the wall PLANE exceeds psi, i.e. (i.t)^2 + (t.m)^2 > 1, i.e. psi + angle(t,normal) < 90; e = cos(delta)/cos(psi); grooves lying in the wall plane always give a hyperbola).",
   "No retroreflection. Two-bounce deviation = arccos(1.5c^2 - 0.5) with c = i.t (verified for c = 0,0.2,0.3,0.5,0.6,0.8,0.9 at eps = 0.001..59.999 deg to 1e-6); reversal needs 1.5c^2 - 0.5 = -1, i.e. c^2 = -1/3, impossible. In-plane deviation is exactly 360 - 2*Theta = 120 deg for Theta = 120 deg; the 90 deg V (walls 45 deg from vertical) gives 4a = 180 deg -> 180 deg, and even then only for i.t = 0. Correct in all three.",
   "Two flat-wall bounces maximum (ceil(180/120) = 2) - correct wedge-unfolding bound.",
   "Bare-V two-bounce window edges 14.476 deg and 45.524 deg are exactly right. My analytic solve of sin(60-eps)/sin(eps) = a_c/A0 = 2.85452 and its reciprocal gives (14.477, 45.523) deg, and the window is symmetric about eps = 30 deg because f(60-eps) = 1/f(eps). Derivation 2's tan(beta_max) = (rho-1)/(sqrt3 (rho+1)) -> beta_max = 15.5250 deg is algebraically correct.",
   "Ridge self-shadowing law y_sh = a_c - 7.9/(cot|eps| - tan30) is correct, as is the 'whole near wall dark for eps > 45.846 deg' limit.",
   "Projected-area arithmetic is right in all three: 2*A0 = 21.65064, 2*(a_c - A0) = 40.14936, 2*27.8 = 55.6 over 117.4 -> 0.184418 / 0.341988 / 0.473594, summing to exactly 1.",
   "Derivation 2's normal-incidence census is confirmed by my own tracer: single arc bounce 19.1% of the mouth (my 11.86 um of 61.8 = 19.2%, i.e. |th| <= 28.3 deg escapes), arc->arc 8.0% (my 4.94 um = 8.0%), ~5-6% terminating on ridge/cliff faces, 64.9% single wall bounce (all of which escape; the deepest one exits at u = -9.25 and clears the far crest by 4.6 um). The 7.9 cliffs being 10.8% of the true wetted length is also correct (my true-length census: arc 26.18, walls 46.36, ridges 57.80, cliffs 15.80 um).",
   "Derivation 3's all-facet multi-bounce numbers are reproduced exactly by my independent tracer with the literal cliff geometry: 8.340% at 0 deg (theirs 8.3398), 16.919 at 15 (16.93), 18.434 at 30 (18.43), 13.664 at 45 (13.66), 23.685 at 60 (23.68), 31.846 at 75 (31.84), 52.631 at 85 (52.64). Its 8.34% at normal incidence is set by the far ridge crest blocking every arc ray with |th| > 28.2 deg, not by |th| > 45 deg.",
   "Tangency algebra is right: a truly tangent sphere on a 60 deg-from-axis cone touches at A0 = R cos a = 6.25 with h0 = R(1 - sin a) = 1.6747, and the as-written A0 = R sin a / h0 = R(1 - cos a) are the 30 deg-from-axis (60 deg included) formulas.",
   "'Centre at depth R below rim' is genuinely impossible and the correct reading is centre at depth d - R = 5.341 (R above the nadir), h0 measured UP from the bottom. All three found this."
  ],
  "disagreements": [
   {
    "quantity": "Upper edge of the wall->wall two-bounce window with the ridge/rim cliff present (cross-section tilt eps)",
    "values_given": "D1: 'about 38.7 deg'. D2: 38.940006 deg. D3: ~45.5 deg (reports 11.40% at 30 deg, 0.475% at 45 deg, 0.0000% from 45.6 deg up, while claiming the 7.9 um rim step is in the traced profile).",
    "which_is_right": "38.940 deg (derivation 2). D3 is wrong; D1 is right in kind but numerically loose.",
    "why": "Analytic: a two-bounce needs first hit y0 with y2 = y0*sin(60-eps)/sin(eps) in [A0,a_c] AND y0 <= y_sh(eps) = a_c - 7.9/(cot eps - tan30). Sweeping eps in 0.001 deg steps the feasible interval closes at 38.940 deg (at eps = 40 deg the required y0 >= A0/f = 20.345 while y_sh = 18.042). My own 20001-ray/period tracer of the literal profile (arc + walls + 7.9 vertical rim cliffs + 15.8637 deg ridges, 9 periods) gives direct wall->wall = 7.515% at 30, 3.510% at 35, 0.870% at 38, 0.410% at 38.5, 0.000% at 39.0 and above - zero at 45. Crucially, D3's exact numbers are the NO-RIDGE numbers: my bare-V run gives 11.399% at 30 and 0.475% at 45 and 0.020% at 45.5, matching D3 digit for digit. Re-running with 'a wall->wall pair anywhere in the chain' instead of 'first two hits' reproduces D3 exactly (30 deg: 7.515 direct + 3.884 via cliff+ = 11.399; 45 deg: 0 direct + 0.475 via cliff+), and the extra family is the THREE-bounce cliff+ -> wall+ -> wall-: the vertical rim cliff is a mirror that re-injects the geometrically shadowed near-rim strip. So D3 has mislabelled a triple-bounce population as the double bounce, and its window edge is the bare-V edge (45.523) rather than the ridged one. This matters physically: those paths carry R^3 ~ 0.2, not R^2 ~ 0.36, and leave from a different facet."
   },
   {
    "quantity": "Does the whole two-bounce window escape to the far field?",
    "values_given": "D1: no escape restriction mentioned. D2: wall->wall occurs on (14.476, 38.940) but only (21.060, 38.940) escapes; below 21.06 deg the twice-reflected ray hits the far ridge's inner cliff. D3: not addressed.",
    "which_is_right": "D2 is right and the other two are incomplete.",
    "why": "The exit direction is 60 - eps deg from vertical toward -u, launched from y2 on the far wall; clearing the far crest (-a_c, 7.9) requires (a_c - y2)(cot(60-eps) - tan30) > 7.9, i.e. y2 < 18.95 at eps = 21.06 while the smallest attainable y2 is A0*f = 18.93 - a marginal edge exactly at 21.06 deg. My tracer: escaping wall->wall = 0.000% at 21.0, 0.350% at 21.5, 3.175% at 25, 7.515% at 30. Note the pleasing symmetry: 21.060 = 60 - 38.940, the time-reverse of the illumination-shadow edge."
   },
   {
    "quantity": "'Deflection at normal incidence' = 60 deg",
    "values_given": "All three: 60 deg (D3: 60.004). All three simultaneously give 'net deflection after two bounces = 120 deg'.",
    "which_is_right": "Both numbers are right but they are DIFFERENT quantities, and the table mixes conventions. 60 deg = offset from the flat-mirror specular direction = 2 x normal tilt = angle of r from the vertical (elevation 30 deg above the surface). The propagation DEVIATION at normal incidence is 180 - 2*30 = 120 deg (i.r = -0.5, verified).",
    "why": "For a single bounce the ray turn at normal incidence is 120 deg - numerically identical to the two-bounce deviation - so quoting '60' for one row and '120' for the other invites the reader to think the two-bounce deflects twice as much as the single bounce, which is false at normal incidence. Also '2 x normal tilt' is only the offset-from-specular; the general single-bounce law is theta_out = |2*theta_facet - theta_in| on the source-side wall and 2*theta_facet + theta_in on the other, as D3 correctly tabulates. The physically load-bearing statement for a 60-deg-from-vertical wall is neither 60 nor 120 but the 30 deg exit elevation, which is exactly parallel to the far face."
   },
   {
    "quantity": "Is the supplied tip geometry self-consistent?",
    "values_given": "D1: 'INPUT INCONSISTENCY 2 (not resolvable - two of your three numbers must move)'. D2: 'THE TIP MODEL IS NOT SELF-CONSISTENT AS A BLUNTED 120 DEG CONE, and this is not a rounding issue'. D3: 'The spec's blend point is NOT tangent'.",
    "which_is_right": "The 'not tangent' observation is right; the 'not self-consistent / two numbers must move' framing is wrong. R = 12.5, d = 17.841, A0 = R sin60, h0 = R(1-cos60), a_c = 30.9 are EXACTLY mutually consistent - as a sphere/cone SECANT blend rather than a tangent blend.",
    "why": "Put the sphere's nadir at the sharp-cone apex depth (centre at z = -(d-R) = -5.341, exactly the reading all three adopt). Then the sphere re-crosses the extrapolated cone line identically at |u| = R sin a: arc z = -(d-R) - R cos a = -d + R/2 and cone z = -d + (R sin a)/tan a = -d + R/2 for a = 60 deg. So the crossover is at A0 = R sin60 = 10.825318 with h0 = R(1-cos60) = R/2 = 6.25 above the nadir, and the 60 deg wall through it reaches z = 0 at exactly d tan60 = 30.9015 = the quoted 30.9. Every supplied number closes with nothing moved. What is wrong is physical, not arithmetic: the arc lies BELOW the cone between the crossings (max over-cut 1.9338 um at |u| = 6.25, confirming D3's 1.93), which a rigid convex indenter cannot do, and there is a 30.0 deg normal kink at the crossing. Only 'centre at depth R below rim' is a true error in the spec."
   },
   {
    "quantity": "Projected fractions in the tangency-corrected variant",
    "values_given": "D1 and D2: spherical 0.1065 / wall 0.4199 / ridge 0.4736. D3: arc 0.1007 / wall 0.4513 / ridge 0.4480.",
    "which_is_right": "Both are arithmetically correct - for two DIFFERENT geometries. Neither should be quoted as 'the' tangent answer.",
    "why": "D1/D2 pin a_c = 30.9 (so d falls to 15.906) and keep the period at 117.4: 12.5/117.4 = 0.10647, 49.30/117.4 = 0.41993, 55.6/117.4 = 0.47359. D3 pins d = 17.841 (so a_c rises to 34.2509) and correctly re-derives the period as 124.102: 12.5/124.10 = 0.10073, 56.0/124.10 = 0.45129, 55.6/124.10 = 0.44802. I reproduced both sets. D1/D2's presentation is the more misleading of the two because it silently keeps a period that no longer matches its own a_c only in the alternative branch where a_c is pinned - state which quantity is pinned or the numbers are meaningless."
   },
   {
    "quantity": "Ridge facet tilt and its normal-incidence deflection",
    "values_given": "D1: p = 15.8985 deg, ridge deflection 31.8 deg. D2: 15.8637 deg. D3: 15.864 deg, 31.727 deg.",
    "which_is_right": "15.86370 deg (atan(7.9/27.8) = 0.2841727 -> 15.8637), deflection 31.7274 deg. D1 is off by 0.035 deg.",
    "why": "Direct computation. Small, but D1 propagates it into its ridge specular direction and into the 'if it were mirror-finished' 31.8 deg figure."
   }
  ],
  "errors_found": [
   "Derivation 3, two_bounce and its window statement: the reported wall->wall percentages (11.40% at 30 deg, 0.475% at 45 deg, window 14.5-45.5 deg) are the no-ridge values. With the 7.9 um rim cliff it claims to have traced, the direct two-bounce is 7.515% at 30 deg and identically zero above 38.94 deg. The 45 deg population it counts is the three-bounce cliff -> wall -> wall family (its own 'rimstep-wall-wall 3.88% at 30 deg' plus its 7.5% direct is exactly its 11.40%). Mislabelled bounce count, and a window edge that contradicts the occluder it says is present.",
   "Derivation 3, retroreflection: 'at theta_u = 30 deg the light-facing wall is hit at exactly normal incidence (i = -n) and retroreflects in one bounce' is stated without the necessary condition i.t = 0. Because r.t = i.t is conserved, i = -n forces i.t = 0; for any groove-oblique illumination the single wall bounce returns the ray mirrored about t (on the cone), never antiparallel. The same paragraph then calls the OTHER wall 'the light-facing wall' ('the first reflection off the light-facing wall comes off exactly horizontal') - at theta_u = 30 deg both walls are lit; the retroreflecting one is the wall the beam is travelling toward, the horizontal-reflecting one is the source-side wall. As written the two sentences contradict each other.",
   "Derivation 1, STEP 5: 'angle(r, +z) = arccos(cos 2a)... = arccos(0.5) = 60 deg'. cos 2a = cos 120 = -0.5, so arccos(cos 2a) = 120 deg. The correct expression is arccos(-cos 2a); the quoted 60 deg is right, the formula is not.",
   "Derivation 1: ridge slope p = 15.8985 deg (should be 15.8637), and consequently 31.8 deg instead of 31.727 deg for the ridge deflection at normal incidence.",
   "Derivation 1: ridge-clipped two-bounce upper edge quoted as 'about 38.7 deg'; the exact value for the stated occluder is 38.940 deg. Derivation 1 also omits the escape restriction entirely - between 14.476 and 21.060 deg the double bounce happens but is absorbed by the far ridge's inner cliff, so it contributes nothing to the far field.",
   "Derivation 1 and Derivation 2: the claim that the tip numbers are irreconcilable ('two of your three numbers must move', 'not self-consistent... not a rounding issue') is false. R, d, a_c, A0 = R sin60 and h0 = R(1-cos60) are exactly consistent as a sphere/cone secant blend (identity: a sphere with its nadir at the sharp-cone apex depth meets the 60 deg cone line precisely at |u| = R sin 60, at R/2 above the nadir, and that wall reaches z = 0 at exactly d tan 60). The real defect is the 1.9338 um over-cut and the 30 deg normal kink, i.e. an unphysical but arithmetically closed profile.",
   "Derivation 2: the junction at (10.8253, -11.5910) is described as a 're-entrant (void-side) edge'. It is convex in the solid: the tangent directions there subtend 150 deg through the metal and 210 deg through the void (arc slope tan60 = 1.732 dropping to wall slope 0.5774), so it is a sharp protruding ridge into the groove, as derivation 3 says. Its later claim that this edge 'is the occluder that ends the double-bounce window' is also wrong - the window end at 38.94 deg is set by the ridge crest shadowing the near wall (7.9/(cot eps - tan30)); the junction only sets the y2 >= A0 condition.",
   "All three: 'deflection at normal incidence = 60 deg' and 'net deflection after two bounces = 120 deg' are quoted side by side in different conventions (offset-from-specular vs propagation deviation). A single bounce at normal incidence already deviates the ray by 120 deg. Fix the labels before anyone builds a BRDF from this table.",
   "Derivation 2: 'arc facets with |th| > 45 deg necessarily send their ray below the horizon and cannot escape without a second bounce' understates the loss - the operative limit is the far ridge crest, which blocks every arc ray with |th| > 28.2 deg at normal incidence (this is exactly what produces the 8.34% multi-bounce figure that derivations 2 and 3 both quote). D2's own census (19.1 / 8.0 / ~5%) already implies 28.2 deg, so the 45 deg sentence contradicts its own numbers.",
   "Derivation 2: 'the +u (near) wall is illuminated for |alpha| < 60 deg' - for |alpha| < 60 deg BOTH walls are illuminated (each normal is only 30 deg from vertical); at alpha = +60 deg it is the -u wall that is grazed, not the +u wall. Harmless to the result, wrong as stated.",
   "All three: the three projected fractions sum to exactly 1 only because the two 7.9 um vertical cliffs have zero projected area (they are 10.8% of the true wetted length) and because the pitch is assumed to be exactly 117.4 um with zero uncut mirror land. Stated as 'projected area fractions' with no denominator this reads as a surface census and is not one."
  ],
  "verdict": "The three agree on every headline number and I confirm the headline numbers: wall normal 30 deg from vertical (30.0019 with the literal inputs), single-bounce output 60 deg from the vertical / 30 deg elevation at normal incidence, r.t = i.t conserved through any number of bounces including the cylindrical 'spherical' bottom (max error 0.0 over 200k random chains), no retroreflection (needs c^2 = -1/3), two-bounce deviation arccos(1.5c^2 - 0.5) = 120 deg in-plane, and projected fractions 0.184418 / 0.341988 / 0.473594. The trap in the prompt about the wall normal is not a trap they fell into, and the 'spherical part' objection dissolves correctly because a dragged tip sweeps a circular cylinder. But they are NOT three independent confirmations. Derivation 3's two-bounce window (14.5-45.5 deg) is wrong for the geometry it claims to trace: I reproduce its numbers exactly (11.399% at 30 deg, 0.475% at 45 deg) only with the ridges deleted, and reproduce them again with ridges present only if three-bounce cliff->wall->wall paths are counted as the double bounce. The correct direct window for the literal profile is 14.477 to 38.940 deg, of which only 21.060 to 38.940 deg escapes - derivation 2 is the one to trust here, derivation 1 is loose (38.7) and silent on escape. Separately, all three overstate the spec's inconsistency: the supplied R, d, a_c, A0, h0 are exactly self-consistent as a sphere/cone secant blend; the defect is a 1.9338 um over-cut and a 30 deg normal kink, not contradictory numbers. Finally, every derivation quotes '60 deg' and '120 deg' in the same table under two different definitions of deflection.",
  "recommended_values": {
   "cone_half_angle_rule": "psi = arccos(i.t) about the groove axis t, exactly: the reflected set is {r : r.t = i.t}, independent of facet tilt, depth, which facet family is hit, and bounce count (n.t = 0 for every prismatic facet, including the cylindrical bottom, the ridges and the rim cliffs). Equivalently cos psi = cos E cos A for source elevation E and azimuth A relative to the groove. Populated azimuths on that cone, measured from the flat-mirror specular point: 0 (uncut land), +/-60 deg (the two walls, = 2 x 30 deg), a continuous band over +/-120 deg from the cylindrical bottom as specified (only +/-60 deg if the tangency-corrected profile is adopted), +/-31.73 deg if the ridges were specular, and phi_i -/+ 120 deg for the wall-wall double bounce. Exact only where t is constant: at plunges, stroke ends, corners and crossings the bowl is a true surface of revolution, n.t != 0, and the pattern becomes a 2-D spray (my check: i.t = 0.20 -> r.t = 0.72 on one such facet).",
   "deflection_normal_incidence_deg": 60,
   "projected_area_fractions_note": "As specified (pitch exactly 117.4 = 61.8 + 2x27.8, zero uncut land): cylindrical bottom 21.65064/117.4 = 0.184418, walls 40.14936/117.4 = 0.341988, ridges 55.6/117.4 = 0.473594; sum exactly 1. All three derivations are right here. Two qualifications: (a) the sum only closes because the two 7.9 um vertical rim cliffs project to zero area, though they are 15.8 of the 146.14 um true wetted length = 10.8%, and they are the dominant occluder inside the groove - true-length shares are arc 0.179, walls 0.317, ridges 0.396, cliffs 0.108; (b) for any real pitch P > 117.4 multiply all three by 117.4/P and add (P-117.4)/P of mirror land at tilt 0, which will dominate the rendered image. If the profile is made tangency-consistent, state which input is pinned: pinning a_c = 30.9 gives d = 15.906 and 0.1065 / 0.4199 / 0.4736 on the 117.4 pitch; pinning d = 17.841 gives a_c = 34.2509, pitch 124.102 and 0.1007 / 0.4513 / 0.4480. Since 47.4% of the projected area is torn, non-mirror ridge, this ratio dominates perceived brightness far more than any of the specular algebra.",
   "two_bounce_summary": "Wall-wall double bounce depends only on eps, the tilt of i projected into the cross-section (i.t rides along inert). Bare 120 deg V truncated at A0 = 10.825318 and a_c = 30.9015 (rho = 2.85452): possible for 14.477 < eps < 45.523 deg, from sin(60-eps)/sin(eps) in [1/rho, rho]; the window is symmetric about eps = 30 deg where the first-bounce ray is exactly horizontal and y2 = y0. With the ridge as literally specified (crest 7.9 at the rim, i.e. an opaque occluder plus a vertical inner cliff), the near wall is lit only below y_sh = a_c - 7.9/(cot eps - tan30), which cuts the window to 14.477 < eps < 38.940 deg, and only 21.060 < eps < 38.940 deg escapes to the far field (below 21.06 deg the twice-reflected ray is stopped by the far ridge's inner cliff). Yield peaks at eps = 29-30 deg with 7.5% of the period (11.4% if the ridges are removed). My tracer, literal geometry: 0.020% at 14.5, 3.780% at 20, 7.515% at 30, 0.870% at 38, 0.410% at 38.5, 0.000% at 39.0 and above; escaping subset 0.000% at 21.0, 0.350% at 21.5. Reports of wall-wall out to 45.5 deg with ridges present are counting the three-bounce family cliff -> wall -> wall, where the vertical rim cliff mirrors light back into the shadowed near-rim strip. At most two flat-wall bounces are possible (ceil(180/120) = 2); the concave cylindrical bottom is unbounded and gives arc->arc (4.2% of the period at normal incidence) and long whispering-gallery chains. Deviation of the true two-bounce ray is exactly 120 deg in-plane and arccos(1.5 (i.t)^2 - 0.5) in 3-D; it never retroreflects (that needs a 90 deg V, and even then only for i.t = 0).",
   "wall_normal_deg_from_vertical": 30
  }
 },
 {
  "agreements": [
   "GEOMETRY RECONCILIATION: all three derivations independently converge on the same fix, and my construction confirms it. The literal spec phrase 'sphere centre at depth R below rim' is impossible (it puts the trough bottom at z=-25 and the arc through (0,0)). The unique self-consistent reading is cylinder axis at z_c=-(d-R)=-5.341000, deepest point z=-17.841, junction at (|y|,z)=(10.825318, -11.591000), so h0=6.25 is measured UP FROM THE BOTTOM. Then a_c = R sin60 + (d-h0) tan60 = 30.901518, i.e. the quoted 30.9 to 0.005%. Verified to 1e-12.",
   "WALL NORMAL: exactly 30.000000 deg from vertical (n = (0, -0.5, 0.8660254)); wall line 60.000000 deg from vertical, 30 deg from the horizontal surface. Derivations 1 and 2 give 30 exactly; derivation 3's 30.002 is purely the artifact of substituting the rounded a_c=30.9 (I reproduce 30.001877 when I do the same).",
   "DEFLECTION AT NORMAL INCIDENCE off a straight wall: r = (0, -0.8660254, +0.5) exactly, |r|=1.000000000000. Angle from the flat-mirror specular direction (+z) = 60.000000 deg = 2 x 30; elevation above the surface = 30.000000 deg; angle between the incoming and outgoing propagation directions = 120.000000 deg. All three derivations agree (derivation 3's 60.004 is again the a_c=30.9 rounding).",
   "THE 120-DEG SPECIAL PROPERTY: at normal incidence the once-reflected wall ray is exactly parallel to the opposite wall. Measured r . n_opposite = -3.886e-16, i.e. identically zero. Launched from the deepest wall point (10.8253, -11.5910) it crosses z=0 at y = -9.2509 (derivation 1 said -9.24, derivation 3 said -9.25) and passes y=-a_c at z=12.5000, clearing the 7.9 crest by exactly 4.6000 um (derivation 1's 4.6). Confirmed.",
   "ALONG-GROOVE CONSERVATION, STRAIGHT WALLS: max |r.t - i.t| = 8.882e-16 and max ||r|-1| = 8.882e-16 over 50000 random unit i with random chains of 1..5 wall reflections. Exact.",
   "ALONG-GROOVE CONSERVATION, THE 'SPHERICAL' BOTTOM: because the tip is dragged, the bottom is a CIRCULAR CYLINDER of radius R with axis parallel to t, so its normal (0, -sin th, cos th) also has n.t = 0. Measured separately: max |r.t - i.t| = 1.221e-15 over 50000 random chains of 1..5 bounces on the cylinder. Exact, as all three derivations claim.",
   "CONE PROPERTY ON THE FULL TRACED PROFILE (walls + cylinder + rim cliffs + ridges, 17 replicated periods): over 700 random (i.t, cross-section angle, entry point) cases with 1 to 96 bounces, max |r.t - i.t| = 0.000e+00 and max drift of the cone half-angle = 0.000e+00 to 5.1e-13 deg. psi = arccos(i.t) confirmed exactly, independent of facet family and bounce count.",
   "GRAZING FORM cos psi = cos E cos A (E = source elevation, A = azimuth from the groove axis): verified to 1e-9 at (E,A) = (10,20), (30,45), (60,80), (75,10).",
   "CONIC-SECTION CLASSIFICATION ON A WALL: verified independently by fitting a general conic Ax^2+Bxy+Cy^2+Dx+Ey+F to the actual cone-plane intersection points and testing the discriminant B^2-4AC. 18/18 cases (psi = 20/45/70 x angle(t, wall normal) = 0/20/45/60/70/90) match BOTH derivation 3's rule (ellipse iff psi + angle(t,normal) < 90 deg, parabola at =90, hyperbola above) and derivation 2's equivalent dot form (ellipse iff (i.t)^2 + (t.m)^2 > 1). Discriminants come out at -4.0e0 for the circle and +5.3e-1 for the shallow hyperbola, with |disc| < 3.5e-15 at the three parabola cases.",
   "ECCENTRICITY: derivation 1's e = cos(beta)/cos(psi), with beta = angle between t and the wall PLANE, confirmed at all 27 test points (psi = 20/45/70 x angle(t,normal) = 0/10/20/30/45/60/70/80/90) to within 1e-15 (5e-8 at the degenerate circle). This includes e = 1/cos(psi) for a groove running parallel to the wall (beta=0), the studio case, and e=0 for a groove aimed at the wall.",
   "BARE-V TWO-BOUNCE WINDOW: analytic edges arctan(sin60/(a_c/A0 + cos60)) = 14.475618 deg and arctan(sin60/(A0/a_c + cos60)) = 45.524382 deg, reproduced by brute-force tracing of the truncated V+cylinder with no ridge: 0.0000% at 14.48, first events at 14.50 (0.0333%), 0.0167% at 45.52, 0.0000% at 45.53. Derivations 1 and 2 both had these exactly right.",
   "TWO-BOUNCE WINDOW WITH THE 7.9 um RIM CLIFF, wall->wall as the FIRST TWO hits: window (14.476, 38.940) deg. Measured 0.00000% at 14.48, 0.01667% at 14.50; 0.00333% at 38.94, 0.00000% at 38.95. This reproduces derivation 2's quoted (-14.476198, -38.940006) to the last digit it deserves.",
   "ESCAPE-TO-FAR-FIELD ONSET for the doubly-reflected ray: 0.00000% at alpha = 21.06, 0.00667% at 21.07. Derivation 2's -21.059994 confirmed. Below that edge every wall->wall ray runs into the far rim cliff (sequence wall|wall|cliff), exactly as derivation 2 states.",
   "NET DEFLECTION AFTER TWO WALL BOUNCES, in-plane: 120.000000000 deg, min = max = 120.000000000, std = 2.51e-14, over 5521 traced two-bounce rays spanning alpha = 15 to 38 deg. Independent of where and at what angle the ray strikes. All three derivations correct.",
   "NET DEFLECTION AFTER TWO BOUNCES IN 3D: Delta = arccos((3c^2-1)/2) with c = i.t. Traced-and-reconstructed vs closed form: c=0 -> 120.000000, 0.2 -> 116.103881, 0.3 -> 111.407583, 0.5 -> 97.180756, 0.6 -> 87.707557, 0.8 -> 62.612892, 0.9 -> 44.356801, all matching to <= 2.8e-14. This confirms every number quoted in derivations 1 and 2.",
   "NO RETROREFLECTION FROM TWO BOUNCES: scanning alpha from -59.9 to 59.9 in 0.1 deg steps x 801 entry points, the minimum angle between the twice-reflected ray and the reversed incident ray is 60.000000 deg exactly. Derivation 3's 59.9925 is the a_c=30.9 rounding artifact. Also confirmed algebraically: (3c^2-1)/2 = -1 has no real solution.",
   "SANITY: 90-DEG V RETROREFLECTS. With walls at 45 deg from vertical (90 deg included), every two-bounce ray satisfies |r + i| <= 3.9e-16 across alpha = -20..+20. Confirms derivations 1/2/3 that retroreflection needs 4a = 180 deg, i.e. a = 45 deg, included 90 deg -- not 120.",
   "SANITY: FLAT MIRROR. One bounce per ray, |r - specular| = 0.000e+00 exactly at 0/15/30/45/60/75 deg.",
   "SINGLE-BOUNCE RETROREFLECTION AT alpha = 30 deg: confirmed. The wall the ray is travelling toward is hit at exactly normal incidence (i.n = -1.0) and sends light straight back (measured out azimuth -30.000 for in +30.000). At alpha = 60 deg the single wall bounce goes exactly straight up (0.000 deg from vertical). Derivation 3's single-bounce law theta_out = |2*30 - theta_in| for one wall and 60 + theta_in for the other reproduced exactly at 0/10/15/20/30/45/60/75 deg.",
   "WEDGE BOUND: no ray anywhere in the traced profile ever achieves 3 consecutive wall bounces. Max consecutive wall count = 2 at every alpha from 0 to 75 (60001 rays each). ceil(180/120) = 2 confirmed empirically.",
   "PROJECTED AREA FRACTIONS on the 61.8 + 2 x 27.8 = 117.4 basis: arc/'sphere' 0.184418, wall 0.341988, ridge 0.473595, sum = 1.000000000000. With the exact a_c = 30.901518 (period 117.403037) they are 0.184413 / 0.342005 / 0.473582. Independent ray-count check (200001 vertical rays, first-hit facet tally): 0.184409 / 0.342008 / 0.473583. All three derivations agree to their last quoted digit. The sum is exactly 1 only because the two 7.9 um rim cliffs have zero projected area -- confirmed.",
   "TRUE (unprojected) ARCLENGTH fractions, for contrast: arc 0.179136, wall 0.317246, ridge slopes 0.395506, rim cliffs 0.108112. Confirms derivation 2's statement that the cliffs are 10.8% of the real surface while contributing nothing to projected area.",
   "ARC PROJECTED-WIDTH IDENTITY: integral of R cos(th) dth over th in [-60,+60] = 21.650635095, exactly 2*A0 = 21.650635095. Derivation 2's normalisation closes.",
   "ARC AZIMUTH FAN: outgoing azimuth = 2 x facet tilt, verified exactly (th = +20 -> -40, th = +40 -> -80, th = +60 -> -120). Fan width 4 x 60 = 240 deg as specified, and facets with |th| > 45 deg do send their ray below the horizon (th = +-60 -> azimuth +-120), so they cannot escape on one bounce. Derivations 1, 2 and 3 all correct; derivation 2's dphi/dth = 2 Jacobian confirmed.",
   "NORMAL-INCIDENCE SEQUENCE CENSUS INSIDE THE MOUTH (|y| < a_c, 60001 rays): wall 64.9689%, arc single 19.1913%, arc|arc 7.9799%, arc|cliff 3.2566%, arc|wall|cliff 2.4900%, arc|wall 1.0633%, arc|arc|cliff 1.0500%. This reproduces derivation 2's 64.9% / 19.1% / 8.0% / ~5% on the ridge almost exactly (my total terminating on a cliff is 6.8%).",
   "ALL-FACET MULTI-BOUNCE FRACTION vs cross-section angle (full period, 40001 rays): 8.3398% at 0, 16.9221% at 15, 18.4320% at 30, 13.6647% at 45, 23.6794% at 60, 31.8442% at 75, 52.6412% at 85. Every one of derivation 3's seven values (8.34/16.93/18.43/13.66/23.68/31.84/52.64) is confirmed to the digit quoted. And derivation 3's corollary is right: with the groove parallel to the plane of incidence the multi-bounce fraction is completely independent of the 3D incidence angle, because only the cross-section projection matters.",
   "WHISPERING-GALLERY PATHS IN THE CONCAVE CYLINDER ARE REAL: at alpha = 30 deg the longest traced chain is 96 bounces (derivation 3 reported 70 and 115 for nearby rays). With a cap of 400 every ray escaped upward at every angle tested -- 0 non-escaping out of 60001 per angle. Derivation 3's warning that a renderer must cap bounce depth is correct.",
   "TIP-MODEL INCONSISTENCY 2 (the sin/cos swap) is real and all three derivations flag it correctly. Tangential blunting of a 60-deg-from-axis cone touches at A0 = R cos60 = 6.2500 and h0 = R(1-sin60) = 1.6747, not R sin60 = 10.8253 and R(1-cos60) = 6.2500. As specified there is a 30.0000 deg normal-direction kink at the junction (arc normal 60 deg from vertical meeting a wall normal at 30 deg), so the profile is not C1 and the arc's reflected fan double-covers |beta| in 0..30 deg.",
   "RIDGE SHADOWING: derivation 2's closed form y_shadow(alpha) = a_c - 7.9/(cot|alpha| - tan30) is correct, and the deepest wall point goes fully dark for alpha > 45.8473 deg (derivation 1 said 45.85, derivation 2 said 45.8465; the difference is a_c rounding).",
   "DERIVATION 3's TANGENT-VARIANT geometry is the internally consistent one: A0 = 6.2500, junction z = -16.1663, a_c = 34.2509, period = 124.1018, projected fractions arc 0.100724 / wall 0.451257 / ridge 0.448019. I reproduce 0.1007 / 0.4513 / 0.4480 exactly."
  ],
  "disagreements": [
   {
    "quantity": "Upper edge of the wall->wall two-bounce window with the as-specified 7.9 um rim cliff",
    "values_given": "derivation 1: 'about 38.7 deg'; derivation 2: 38.940006 deg; derivation 3: 'the window is 14.5 deg <~ |theta_u| <~ 45.5 deg' (0.475% at 45 deg, 0 from 45.6 up)",
    "which_is_right": "Derivation 2 is right for the quantity derivations 1 and 2 are both describing: 38.94 deg (measured 0.00333% at 38.94, 0.00000% at 38.95). Derivation 1's 38.7 is low by about 0.24 deg. Derivation 3 is NOT wrong -- it is measuring a different quantity, and its numbers are exactly right for that one.",
    "why": "There are two distinct populations and the three derivations silently report different ones. (a) wall->wall as the FIRST TWO hits: window (14.476, 38.940) deg, upper edge set by the rim cliff shadowing the near-rim strip of the near wall. (b) a wall->wall ADJACENCY anywhere in the chain: window (14.476, 45.524) deg -- the bare-V window -- because a ray can first strike the rim cliff, be pre-deflected, and then execute the wall->wall pair that the bare V permits. I measured (b) at 11.3963% at alpha=30 and 0.4749% at alpha=45, dying between 45.52 and 45.55 -- which are derivation 3's 11.40%, 0.475% and 'zero from 45.6' to the digit. So all three are internally correct; the derivations are not comparable as written. A simulator needs both numbers stated separately."
   },
   {
    "quantity": "Alpha at which the two-bounce yield peaks",
    "values_given": "derivation 1: 'yield peaking at eps ~ 29-30 deg'; derivation 3: 'maximum of 11.40% at theta_u = 30 deg'",
    "which_is_right": "27.0 deg for the first-hit-pair population (8.6397%); 30.0 deg for the wall->wall-anywhere population (11.3963%). The bare V (no ridge) peaks at exactly 30 deg by symmetry of the (14.476, 45.524) window.",
    "why": "Ridge shadowing removes the near-rim strip of the wall, and the large-alpha two-bounce solutions are precisely the ones that need a first hit near the rim. That asymmetry pulls the first-hit-pair peak down from the window centre (30 deg) to about 27 deg. Measured first-hit-pair yields: 8.1997% at 26, 8.6397% at 27, 8.2697% at 28, 7.8997% at 29, 7.5131% at 30. Derivation 3's 30 deg is correct for its own (anywhere-adjacency) metric; derivation 1's 29-30 is correct for the bare V but off by ~3 deg for the ridged profile it was describing."
   },
   {
    "quantity": "Tangency-consistent projected area fractions",
    "values_given": "derivations 1 and 2: spherical 0.1065 / wall 0.4199 / ridge 0.4736; derivation 3: arc 0.1007 / wall 0.4513 / ridge 0.4480",
    "which_is_right": "Derivation 3. With a tangent blend at d = 17.841 the geometry is A0 = 6.2500, a_c = 34.2509, period = 124.1018, giving arc 0.100724 / wall 0.451257 / ridge 0.448019.",
    "why": "Derivations 1 and 2 substituted the tangent crossover A0 = 6.25 but kept a_c = 30.9 and period = 117.4, which is the very geometry they had just proved impossible. Their own text says the tangent version forces a_c = 34.25 at d = 17.841. Reverse-engineering their numbers confirms the mix-up: 2*6.25/117.4 = 0.10647 (their 0.1065) and 2*(30.9-6.25)/117.4 = 0.41993 (their 0.4199), i.e. tangent A0 with untangent a_c. Recomputing with the consistent a_c = 34.2509 and period = 124.1018 gives derivation 3's numbers."
   },
   {
    "quantity": "How far the as-specified arc dips below the sharp 120-deg cone surface",
    "values_given": "derivation 2: 'the arc dips R(1-cos30) = 1.6747 um BEYOND the cone surface'; derivation 3: 'the sphere bulges 1.93 um DEEPER than the sharp cone at u = 6.25'",
    "which_is_right": "Derivation 3. The maximum gap is exactly 1.9337 um and it occurs at exactly |y| = R/2 = 6.2500.",
    "why": "gap(y) = (-17.841 + y/tan60) - (z_c - sqrt(R^2 - y^2)) = -12.5 + 0.57735 y + sqrt(156.25 - y^2). It is zero at y=0 and at y=A0=10.8253 (both endpoints touch the cone) and stationary where y/sqrt(R^2-y^2) = tan30, i.e. y^2 = R^2/4, y = 6.25, gap = 1.93375. Derivation 2's 1.6747 is R(1-cos30), which is the tangent-case h0 -- a different quantity that happens to be numerically nearby."
   },
   {
    "quantity": "Multi-bounce fraction restricted to the mirror-finish facets",
    "values_given": "derivation 3: 15.84% / 32.16% / 35.01% / 22.97% / 22.14% / 60.49% / 100% at alpha = 0/15/30/45/60/75/85",
    "which_is_right": "Neither the label nor two of the values survive. Properly conditioned (multi-bounce fraction among rays whose FIRST hit is a mirror facet, i.e. wall or cylinder): 15.8427% / 29.7404% / 29.8364% / 11.6744% / 0.0000% / 24.4461% / undefined at 85 deg (no mirror facet is lit at all -- zero rays out of 40001 reach one).",
    "why": "Derivation 3's numbers are its all-facet fractions divided by the mirror projected fraction 0.526417, which is a rescaling, not a conditioning: 8.3398/0.526417 = 15.84, 16.9221/0.526417 = 32.14, 18.4320/0.526417 = 35.02, 31.8442/0.526417 = 60.49, 52.6412/0.526417 = 100.0 -- five of seven reproduce. But two do not reproduce even under that rescaling (45 deg gives 25.96, not their 22.97; 60 deg gives 44.98, not their 22.14), so those two are arithmetic slips inside derivation 3. More importantly the rescaled quantity coincides with the conditional one only at normal incidence, where the rim cliff catches nothing; at larger alpha the cliff intercepts a growing share (first-hit cliff share 0% / 1.80% / 3.88% / 6.73% / 11.66% / 25.11% / 52.64% at 0/15/30/45/60/75/85), so the two statistics diverge badly. The physically meaningful result is the conditional one, and it has a striking feature derivation 3's version hides: at alpha = 60 deg it is exactly 0.0000% (16395 mirror-first-hit rays, not one of them bounces twice), and at 85 deg the walls and cylinder are completely ridge-shadowed."
   },
   {
    "quantity": "Wall normal angle and normal-incidence deflection as reported by derivation 3",
    "values_given": "derivation 3: wall normal 30.002 deg from vertical, deflection 60.004 deg, two-bounce rotation -120.0075 deg, angle from reversal 59.9925 deg, dihedral 119.9962 deg",
    "which_is_right": "30.000000, 60.000000, -120.000000, 60.000000, 120.000000. Derivation 3's offsets are entirely an artifact of building the profile from the ROUNDED a_c = 30.9 instead of the exact 30.901518.",
    "why": "I reproduce derivation 3's numbers exactly when I force a_c = 30.9: the wall normal then comes out at 30.001877 deg from vertical. Using the exact construction (junction from the arc, wall at exactly 60 deg from vertical) gives a_c = 30.901518 and every angle lands on its ideal value to 1e-14. Derivation 3 does flag this in its numerical-precision caveat, but it then reports the drifted values as measurements throughout, which is misleading for anyone copying them into a mesh. Derivation 1's own numerical note makes the same point and is the correct guidance: use exact trig, not the rounded 30.9 / 17.841, inside the tracer."
   }
  ],
  "errors_found": [
   "Derivation 2 caveat (b): the as-specified arc dips 1.9337 um below the sharp cone (at y = R/2 = 6.25 exactly), not R(1-cos30) = 1.6747 um. 1.6747 is the tangent-case h0, a different quantity.",
   "Derivations 1 and 2 both quote tangency-consistent projected fractions (0.1065 / 0.4199 / 0.4736) computed with the tangent A0 = 6.25 but the UNtangent a_c = 30.9 and period 117.4 -- a geometry they themselves proved impossible. The consistent answer at d = 17.841 is a_c = 34.2509, period = 124.1018, fractions 0.1007 / 0.4513 / 0.4480 (derivation 3's values).",
   "Derivation 1 puts the ridge-clipped upper two-bounce cutoff at 'about 38.7 deg'. Measured: 38.940 deg (0.00333% at 38.94, 0.00000% at 38.95). Derivation 2's 38.940006 is right.",
   "Derivation 1 puts the two-bounce yield peak at 'eps ~ 29-30 deg'. For the first-hit-pair population on the ridged profile it peaks at 27.0 deg (8.6397%, vs 7.5131% at 30). 30 deg is correct only for the bare V or for derivation 3's anywhere-adjacency metric.",
   "Derivation 3 states the two-bounce window as '14.5 <~ |theta_u| <~ 45.5' without saying that it is counting wall->wall adjacencies anywhere in the chain (mostly cliff|wall|wall). As a statement about the wall->wall pair itself the upper edge is 38.94, and as written it flatly contradicts derivations 1 and 2 for no stated reason.",
   "Derivation 3's 'mirror-finish facets only' multi-bounce figures are the all-facet figures divided by the mirror area fraction 0.526417, not a conditional probability -- and two of the seven (22.97% at 45 deg, 22.14% at 60 deg) do not even follow from that rescaling of derivation 3's own all-facet numbers (which give 25.96% and 44.98%). The correctly conditioned values are 15.84 / 29.74 / 29.84 / 11.67 / 0.00 / 24.45 / undefined.",
   "Derivation 3 reports the wall normal as 30.002 deg and the normal-incidence deflection as 60.004 deg as measurements. These are rounding artifacts of a_c = 30.9; the exact construction gives 30.000000 and 60.000000. Same for its 59.9925 deg from retroreflection (exactly 60), -120.0075 deg rotation (exactly -120) and 119.9962 deg dihedral (exactly 120).",
   "Not an error in any derivation but worth fixing in the SPEC itself, since all three had to repair it: 'sphere centre at depth R below rim' is impossible with d = 17.841 and R = 12.5. Write it as 'centre at depth d - R = 5.341 below the rim, equivalently R above the deepest point, so h0 = 6.25 is measured up from the bottom'.",
   "Also a spec problem all three flagged: A0 = R sin(60) and h0 = R(1-cos60) use the axis half-angle where the surface half-angle belongs. Tangential blunting of this cone gives A0 = R cos60 = 6.25, h0 = R(1-sin60) = 1.6747. As specified the profile has a 30.0000 deg normal-direction kink at (10.8253, -11.5910) and is not C1; a tangent blend cannot hold R = 12.5, d = 17.841 and a_c = 30.9 simultaneously (either a_c = 34.2509 at d = 17.841, or d = 15.907 at a_c = 30.9)."
  ],
  "verdict": "All three derivations are substantially correct and mutually consistent on every load-bearing result, and my independent tracer reproduces the headline numbers to machine precision. Sanity gates passed first: a flat mirror gives exactly one bounce with zero error, and a 90-deg V retroreflects to |r+i| <= 3.9e-16 in 2D. Confirmed exactly: wall normal 30 deg from vertical; 60 deg deflection from the flat-mirror specular direction at normal incidence (120 deg turn of propagation, 30 deg elevation, ray exactly parallel to the far wall with r.n_opp = -3.9e-16, crossing z=0 at y=-9.2509 and clearing the far crest by 4.6000 um); the cone property r.t = i.t verified separately for the straight walls (8.9e-16) and for the swept-cylinder bottom (1.2e-15) and jointly on the full traced profile over chains up to 96 bounces (0.0e+00) -- while a true spherical plunge pit breaks it by up to 1.71, confirming the prismatic caveat; psi = arccos(i.t) and cos psi = cos E cos A; the conic rule on a wall (18/18 by discriminant fit) and derivation 1's eccentricity e = cos(beta)/cos(psi) (27/27 to 1e-15); the bare-V two-bounce window (14.4756, 45.5244); 120.000000000 deg net deflection after two wall bounces with std 2.5e-14 over 5521 rays, and arccos((3c^2-1)/2) in 3D to 2.8e-14; no retroreflection (minimum 60.000000 deg from reversal, exactly); the wedge bound of 2 consecutive wall bounces, never exceeded; and the projected fractions 0.184418 / 0.341988 / 0.473595, cross-checked three ways including a 200001-ray first-hit tally. The one genuine three-way conflict -- the upper edge of the two-bounce window, 38.7 vs 38.94 vs 45.5 -- dissolves into a definitional split rather than an arithmetic one: wall->wall as the FIRST TWO hits runs (14.476, 38.940), while a wall->wall adjacency anywhere in the chain runs (14.476, 45.524), i.e. back to the bare-V limit, because the rim cliff can pre-deflect a ray into a geometry the bare V allows. Derivation 2 is right about the first, derivation 3 about the second (its 11.40% at 30 deg and 0.475% at 45 deg are exact), and derivation 1's 38.7 is simply 0.24 deg low. Real errors are confined to secondary claims: derivations 1 and 2 computed their tangency-consistent area fractions by mixing a tangent A0 = 6.25 with the untangent a_c = 30.9 (derivation 3's 0.1007 / 0.4513 / 0.4480 is the consistent answer); derivation 2 mis-stated the arc's overcut as 1.6747 um when it is 1.9337 um at y = 6.25; derivation 1 mis-placed the two-bounce peak (27 deg, not 29-30, once ridge shadowing is included); and derivation 3's 'mirror-only' multi-bounce column is an area rescaling masquerading as a conditional probability, with two internal arithmetic slips on top, hiding the striking fact that at 60 deg cross-section incidence exactly zero mirror-first-hit rays bounce twice and at 85 deg no mirror facet is lit at all. Derivation 3's 30.002 / 60.004 / 59.9925 family are rounding artifacts of a_c = 30.9 and should not be propagated. For the simulator: use the exact 60-deg construction, state both two-bounce windows separately, adopt one of the two tangency fixes before locking the mesh, and treat the two enormous unmodelled terms -- the 47.36% torn-ridge area and the shape of the real rim lip -- as dominating perceived contrast far more than any refinement of the specular algebra, exactly as all three derivations warn.",
  "recommended_values": {
   "wall_normal_deg_from_vertical": 30,
   "deflection_normal_incidence_deg": 60,
   "cone_half_angle_rule": "psi = arccos(i.t), measured about the groove axis t. The reflected set is exactly {r : r.t = i.t}, a right circular cone of half-angle psi with apex at the illuminated point and axis t (which lies in the surface plane). Independent of facet tilt, facet family, groove depth and bounce count, because every facet of a prismatic groove has n.t = 0. Measured max |r.t - i.t| = 0.000e+00 and max half-angle drift 5.1e-13 deg over 700 random cases with 1 to 96 bounces on the full profile (walls + cylinder + rim cliffs + ridges). Verified separately per facet family: straight walls 8.9e-16, swept-cylinder bottom 1.2e-15. Grazing form: cos psi = cos E cos A for source elevation E and azimuth A from the groove axis (verified to 1e-9). Populated arc of the cone, in azimuth phi about t with phi = 0 at the flat-mirror specular direction: delta at 0 (uncut land), deltas at +-60 deg (the two walls, 2 x 30 deg tilt), a continuous band over [-120, +120] deg from the cylinder (azimuth = 2 x facet tilt, Jacobian exactly 2, verified: tilt +20 -> -40, +40 -> -80, +60 -> -120; facets beyond |tilt| = 45 deg aim below the horizon and cannot escape on one bounce), a delta at +-120 deg from the incident azimuth for the wall-wall pair, and +-31.8 deg from the ridges if they were specular (they are torn metal, so scatter off the cone). Degenerate: i.t = 0 flattens the cone to the plane perpendicular to t; |i.t| = 1 collapses it to t. On a flat wall the cone cuts a conic: ellipse iff psi + angle(t, wall normal) < 90 deg, parabola at equality, hyperbola above -- equivalently ellipse iff (i.t)^2 + (t.m)^2 > 1 -- with eccentricity e = cos(beta)/cos(psi), beta = angle between t and the wall plane. Both rules verified 18/18 by conic-discriminant fitting; the eccentricity formula 27/27 to 1e-15. A groove parallel to the wall (beta = 0) always paints a hyperbola of e = 1/cos psi. FAILS wherever t is not constant: a true spherical plunge/dwell/crossing pit has n.t != 0 and scattered up to |r.t - i.t| = 1.71 in my test, spraying into 2D instead of onto a cone.",
   "two_bounce_summary": "Two wall bounces exist; three or more are impossible (wedge bound ceil(180/120) = 2, and no traced ray anywhere ever achieved 3 consecutive wall bounces at any alpha from 0 to 75 deg, 60001 rays each). The condition depends ONLY on the cross-section projection alpha of i (the along-groove component rides along inert). TWO DISTINCT WINDOWS, which the three derivations conflated: (a) wall->wall as the FIRST TWO hits: |alpha| in (14.476, 38.940) deg -- measured 0.00000% at 14.48, 0.01667% at 14.50, 0.00333% at 38.94, 0.00000% at 38.95; the upper edge is set by the 7.9 um rim cliff shadowing the near-rim strip, not by the V. (b) wall->wall adjacency anywhere in the chain (typically cliff|wall|wall): |alpha| in (14.476, 45.524) deg, i.e. back to the bare-V analytic limit -- measured 11.3963% at 30 deg, 0.4749% at 45 deg, 0.00333% at 45.52, 0.00000% at 45.55. Bare V with no ridge at all: (14.475618, 45.524382) deg analytically, reproduced by trace to 0.01 deg. Peak yield: 8.6397% at alpha = 27.0 deg for population (a) on the ridged profile, 11.3963% at 30.0 deg for population (b), and exactly 30 deg for the bare V. Escape to the far field: a doubly-reflected ray only clears the far rim for |alpha| > 21.06 deg (0.00000% at 21.06, 0.00667% at 21.07); below that it terminates on the far rim cliff. At exactly normal incidence there is NO wall->wall bounce at all -- the once-reflected ray is exactly parallel to the far wall (r.n_opp = -3.9e-16) and clears the far crest by 4.6000 um. NET DEFLECTION: exactly 120.000000000 deg in the cross-section (min = max = 120.000000000, std 2.51e-14 over 5521 traced rays spanning alpha 15-38 deg), independent of where and at what angle the ray strikes -- the classical two-mirror rule 360 - 2 x 120. In full 3D with c = i.t: Delta = arccos((3c^2 - 1)/2), giving 120.000000 / 116.103881 / 111.407583 / 97.180756 / 87.707557 / 62.612892 / 44.356801 deg at c = 0 / 0.2 / 0.3 / 0.5 / 0.6 / 0.8 / 0.9, traced-vs-closed-form agreement <= 2.8e-14. The exit ray stays on the same cone r.t = i.t. NO RETROREFLECTION: minimum angle between the two-bounce output and the reversed input is 60.000000 deg exactly, scanned over alpha in [-59.9, 59.9] deg x 801 entry points; algebraically (3c^2-1)/2 = -1 has no real root. Retroreflection needs a 90 deg V (walls 45 deg from vertical), which my sanity check confirms to |r+i| <= 3.9e-16, and even then only for c = 0. What DOES return light in this groove is a SINGLE bounce: at alpha = 30 deg the far wall is struck at exactly normal incidence and sends light straight back (measured out azimuth -30.000 for in +30.000); at alpha = 60 deg the single wall bounce goes exactly straight up. Single-bounce law: theta_out = |2 x 30 - theta_in| for one wall and 60 + theta_in for the other, confirmed at 0/10/15/20/30/45/60/75 deg. Other two-bounce families are broader and real: at normal incidence, of the flux entering the mouth, 64.9689% is a single wall bounce, 19.1913% a single cylinder bounce, 7.9799% cylinder->cylinder, 3.2566% cylinder->cliff, 2.4900% cylinder->wall->cliff, 1.0633% cylinder->wall, 1.0500% cylinder->cylinder->cliff. All-facet multi-bounce over the full period: 8.3398% / 16.9221% / 18.4320% / 13.6647% / 23.6794% / 31.8442% / 52.6412% at alpha = 0/15/30/45/60/75/85 deg. Conditioned on the first hit being a mirror facet: 15.8427% / 29.7404% / 29.8364% / 11.6744% / 0.0000% / 24.4461% / undefined -- note it is exactly zero at 60 deg, and at 85 deg no mirror facet is lit at all. The concave cylinder supports long whispering-gallery chains (longest traced 96 bounces at alpha = 30 deg); with a cap of 400 every ray escaped upward, 0 stuck out of 60001 per angle, so a renderer must cap bounce depth.",
   "projected_area_fractions_note": "On the spec's 61.8 + 2 x 27.8 = 117.4 um basis (one groove plus both its ridges, zero uncut land): arc/'sphere' 0.184418, wall 0.341988, ridge 0.473595, sum = 1.000000000000. With the exact a_c = 30.901518 (period 117.403037) they are 0.184413 / 0.342005 / 0.473582. Cross-checked three independent ways -- closed form 2*A0/P, 2*(a_c-A0)/P, 2*27.8/P; the quadrature identity integral R cos(th) dth over [-60,+60] = 21.650635095 = 2*A0 exactly; and a brute-force tally of which facet 200001 vertical rays hit first, giving 0.184409 / 0.342008 / 0.473583. All three derivations are correct here to their last quoted digit. THREE CAVEATS THAT MATTER MORE THAN THE DIGITS. (1) The sum is exactly 1 only because the two 7.9 um rim cliffs, forced by the literal 'peak height 7.9 AT the rim', have zero projected area -- yet they are 10.8112% of the true surface, they are struck by 0% / 1.80% / 3.88% / 6.73% / 11.66% / 25.11% / 52.64% of rays as first hit at alpha = 0/15/30/45/60/75/85 deg, they set the 38.94 deg upper two-bounce edge, and they absorb the doubly-reflected ray below 21.06 deg. True unprojected arclength fractions: arc 0.179136, wall 0.317246, ridge slopes 0.395506, cliffs 0.108112. (2) These fractions assume pitch = exactly 117.4 um, i.e. ridge toes touching and NO uncut mirror land. Any real pitch P > 117.4 scales all three by 117.4/P and adds (P-117.4)/P of No. 8 mirror at tilt 0 -- which will dominate the rendered image wherever unshadowed. For reference: at P = 150 the split is 0.144338 / 0.267663 / 0.370667 / land 0.217333; at P = 200, 0.108253 / 0.200747 / 0.278000 / land 0.413000; at P = 300, 0.072169 / 0.133831 / 0.185334 / land 0.608667. (3) If the tip model is corrected to a tangent blend, the numbers move a lot and only derivation 3 got them right: A0 = 6.2500, junction z = -16.1663, a_c = 34.2509, period = 124.1018, fractions arc 0.100724 / wall 0.451257 / ridge 0.448019, with the cylinder's normal sweep halving from 0..60 deg to 0..30 deg (azimuth fan 240 -> 120 deg) and both re-entrant kink edges disappearing. Derivations 1 and 2 quote 0.1065 / 0.4199 / 0.4736 for this variant, which mixes the tangent A0 = 6.25 with the untangent a_c = 30.9 and period 117.4. Finally, the ridge's 47.36% is torn/smeared metal, not mirror, so it needs its own rough/diffuse BRDF; only 52.64% of the projected area feeds the sharp conical streak, and getting that ratio right matters far more to perceived contrast than any refinement of the specular algebra."
  }
 }
]