G1 card C01 - _player_effect_add_continuous_effect (effects/player_effects, 314 meaningful / 320 padded B)
Written 2026-09-26 01:49:26 -0700 (clock-read), BEFORE any compile of this card. Never edited.
Unit taken by G1 from this card on: source/effects/player_effects (not owned by any wave-3 worker; W4 wave-1 released).
Prior history read: parked.json (NOT parked); APPLICABILITY_MAP row (W4, 12/110, no park); W4 CARDS (listed, no
shape recorded for this function); grep of docs/object_matching_logs + research/ for the name: census rows only.

OBSERVED (J, measured at HEAD 09f5208f, alndiff + tools/moves.py): the ONLY real difference in the function is the
shake-magnitude statement (our lines 373-375). All other blocks are relocation-spelling artefacts.
  January  T+0xa2  call periodic_function_evaluate ; fld 1.0 ; fsub [esi+0x60] ; (cmp) ; fxch st(1) ; fmul [esi+0x60] ;
           faddp ; fmul [ebp+0x10](scale) ; fstp magnitude      -> (1 - w) evaluated FIRST, then P*w (one fxch)
  ours     call ; fmul [esi+0x60] ; fld 1.0 ; (cmp) ; fsub [esi+0x60] ; faddp ; fmul scale     -> P*w first, no fxch
  (J 110 insns / ours 111 incl. 2 nops; J-only: 1 fxch.)

SOURCE AT HEAD:   magnitude = ((1.0f - w) + periodic_function_evaluate(...) * w) * scale;   (w = periodic_weight)
  parscan: the inner '(1.0f - w)' is LEFTRED = DECORATIVE (tree-identical without it; C precedence already groups
  1.0f - w + P*w as (1.0f - w) + (P*w)). The outer group is required (NEEDED).

EVIDENCE, separated per the owner ruling of 2026-09-26:
  J (January bytes): the tree is ADD(SUB(1,w), MUL(P,w)) followed by ONE multiply by scale: J computes 1-w as a unit
    (fld 1; fsub w), P*w as a unit, adds, multiplies once by scale ([ebp+0x10] = the scale home). This rejects any
    spelling whose tree lacks the SUB(1,w) unit (e.g. P*w + 1.0f - w) and any distributed form. J does NOT
    discriminate between the decorated and the plain spelling of the same tree except through the evaluation order.
  J (same-TU contrast): _player_effect_get_camera_effect_matrix computes the SAME formula with P*w FIRST (T+0x410
    fmul w; fld 1; fsub w; faddp; fmul scale), and our spelling there, (P * w + (1.0f - w)) * scale, is byte-equal at
    that site. January therefore evaluates the two sites in different orders; our two different spellings both give
    P*w-first. So January's add_continuous_effect text is not our current text (fact); what it was is inference.
  D (/Od 0x57b490 +0x176): a LATER, DIFFERENT formula: (1.0f - w) * scale + scale * P * w, with a double argument to
    periodic_function_evaluate. It puts the (1-w) term first in source order (consistent with our operand order) but
    is not January's arithmetic; it cannot authenticate any parenthesisation here (ruling item 2).
  S (meaningful source): '(1.0f - w + P * w) * scale' is ordinary, natural C for "blend 1 toward P by weight w";
    it is the current expression minus a decorative parenthesis (ruling item 4: no decorative parentheses).

PROPOSED SHAPES (bounded; the ruling's standard applies to each):
  A  (strip)   magnitude = (1.0f - w + periodic_function_evaluate(...) * w) * scale;   tree unchanged; removes the
               decorative group. The only candidate shape I consider potentially admissible (owner question: it is a
               parenthesis-only change even though it REMOVES decoration).
  B  (control) the camera_effect_matrix spelling (P * w + (1.0f - w)) * scale.  Diagnostic only (operand-order
               change, J-order at the sibling site = P*w first); expected NOT January here.

COMPILER-STATE PREDICTION (diagnostic mechanism only, W6 H-PAREN): the decorative group makes C1 emit a 0x267 temp for
  (1.0f - w); the temp leaf sorts/links after the MUL node, so the SUB is materialised just before the add. Without it
  the SUB node is linearised as the left operand and computed first (needs the fxch January has).
  A: P(EXACT 320 padded, 110 insns incl. fxch) ~ 0.55; otherwise inert (same bytes as HEAD) ~ 0.4.
  B: same bytes as HEAD (P*w first) ~ 0.7.
COLLATERAL RISK: none expected outside this statement (no declaration/name change, no header change); the other 26
  exact rows of player_effects must stay byte-identical (keyed diff vs build/base).
DECISIVE TEST: gate --all on each copy; keyed_diff vs build/base (0 losses, only this function changed); alndiff.
Whatever the bytes, A is NOT landable without an owner ruling on parenthesis-only changes (Lane B ruling 4 class).
