CARD W1  written 2026-09-26 01:15:54 -0700  (before compile)
question: dynavobgeom reopen criterion (a): move global_window_parameters to its owner declaration and reconcile the
  partial consumer views, with a full regression sweep and zero exact losses.
evidence: X HCEX: global_window_parameters is a Global 'struct rasterizer_window_begin_parameters' (0x258 = 600 B =
  January's pooled COMMON record); HCEX type layout = our rasterizer.h/render_cameras.h layout at every offset the views
  use (camera +8, viewport_bounds +0x34, frustum +0x5C, world_to_view +0x6C, view_to_world +0xA0,
  projection_matrix +0x1A0, fog +0x1E8, fog.atmospheric_maximum_density +0x1F8); HCEX rectangle2d = {y0,x0,y1,x1}.
  The type is defined in rasterizer.h ('header included in hcex build'), whose globals block already declares the
  sibling pooled global 'extern struct rasterizer_frame_begin_parameters global_frame_parameters;' (January COMMON
  neighbour at +600). Platform-independent consumers (rasterizer.c, rasterizer_debug.c, rasterizer_lights.c,
  rasterizer_text.c, rasterizer_transparent_geometry.c) read it. NO first-party header text exists: placement is the
  closest genuinely associated header (rule 16), disclosed as inference.
correction (lead-owned, 24 files): rasterizer.h: add 'extern struct rasterizer_window_begin_parameters
  global_window_parameters;' after the global_frame_parameters extern. 23 consumers: drop the local extern; drop the 9
  TU-local view types (+ their layout typedef asserts) and rewrite accesses to genuine paths (camera.position,
  camera.forward, camera.viewport_bounds, frustum.world_to_view/view_to_world/projection_matrix,
  fog.atmospheric_maximum_density); the three left/top/right/bottom views become camera.viewport_bounds.{x0,y0,x1,y1}
  by offset, with the two misnamed locals swapped consistently (same declaration positions); add
  #include "rasterizer/rasterizer.h" to xbox_debug, xbox_lights, motion_sensor, shadows, text; shadows also drops its
  duplicate '_rasterizer_profile_environment_shadows = 4' enum and its renamed copy of rasterizer_frame_begin_parameters
  (+ its extern), both now supplied by rasterizer.h.
prediction: every consumer and every other rasterizer.h includer keeps its exact set (zero exact losses). Bytes
  identical in all TUs except possible declaration-count ties in fuzzy/residual bodies (models' parked
  __rasterizer_model_draw is the known sensitive body) and $L label ordinals. word->short on motion_sensor/shadows
  rasterizer_target: predicted byte-identical (compare/push of a 16-bit field) but flagged as the riskiest edit.
decisive: revgate root_base vs root_W over the 59 rasterizer.h includers + the 5 new includers; objeq --norm-labels;
  gate counts vs January.
