Shear diagnostic v0.2 — Horsea review and single bounded run
2026-10-13 (Asia/Shanghai); completed 13:02:45 local time.

Result: exit 0; N_BOOLEAN_HARD_CHECKS=22; ALL_HARD_CHECKS_PASS=True.
The delivered script ran exactly once: 7 runs, 32 coarse steps each. No extra
cases, tests, retries, algorithm edits or tolerance changes were performed.
The original script, Grok output, joint report and source manifest are retained
byte-for-byte. The reference remains the pinned CPUREF-0.3 original.

Review before execution
Read the complete 790-line script, joint report, Grok output, input manifest
and existing reference. Followed .github/skills/lbm-ref-architecture-guard/
SKILL.md and its discovery/architecture checklists. No applicable AGENTS.md
was found on the workspace/test-directory ancestor chain. No numerical issue
blocks this fixed-scope rerun; this is Horsea's own review, not the Mac review.

Reference findings (local files read only; no external package execution):
1. ref/lbmpy/src/lbmpy/relaxationrates.py: lattice nu=(tau-1/2)/3.
2. ref/OpenLB/src/core/unitConverter.h: physical nu=lattice nu*dx^2/dt.
   With dx_f=dt_f=1/2, tau_c=.8 and tau_f=1.1 both give physical nu=.1;
   the lattice velocity conversion is unchanged and B needs two fine steps.
3. ref/lbmpy/tests/full_scenarios/shear_wave/scenario_shear_wave.py:
   periodic modes decay as exp(-nu*|k|^2*t); log-amplitude fits estimate
   decay. This supports the diagnostic, not an accuracy threshold here.
4. ref/lbmpy/tests/test_shear_flow.py: the second moment needs the convective
   contribution and relaxation correction considered before stress comparison.
   The supplied global Pi_xy mean is not used as stress evidence.
5. Existing cpu_reference.py: arrival_f input/output, tick advances by 2,
   two fine hops, one coarse ghost explosion, closed-corner coalescence.
   Reviewed full source and confirmed the unchanged hash before execution.

Architecture/scope: script main -> run_uniform(B/C), run_composite(A/A_T) ->
reference advance_coarse_once -> existing collision/hops/coalescence. Observation
restricts rho and j to the same 16x16 coarse cells before dividing to obtain u.
All observations are arrival_f. Exact cell-average sine velocity includes sinc
and the patch coordinate offset; equilibrium of that velocity is not the exact
cell average of nonlinear equilibrium populations. Fit 4..32 means coarse steps
(reference ticks 8..64), despite the legacy PER-TICK table heading.
Only the new script and this evidence directory are in scope. No src, existing
test, strategy document, old evidence, reference or DynamisLab changes.

Nonblocking limits: composite conservation uses the reference's _leaf_totals;
this diagnostic is not a fresh independent conservation implementation. The
uniform solver has an unused intermediate equilibrium calculation; it does not
change its returned values. Retained both without cleanup to preserve delivery
bytes. The explicit CPU_REFERENCE_PATH is required in this layout because the
script's default filename is cpu_reference_v0.3.py.

Execution evidence
results_horsea.json records the exact complete parent/child argv, cwd, process
environment, versions, timestamps, hard limits, exit code and measured memory.
run_once.py is the stdlib-only recorder, not another numerical test. It refuses
existing execution logs/results and checks the script/reference hashes and hard
limits before launching. Both it and the child ran through existing prlimit:
  address space 268435456 bytes (soft=hard)
  file size 2097152 bytes (soft=hard), core 0
OPENBLAS_NUM_THREADS=1, PYTHONDONTWRITEBYTECODE=1, PYTHONNOUSERSITE=1.
PYTHONPATH is this exact multigrid directory; CPU_REFERENCE_PATH is its exact
cpu_reference.py. PYTHONOPTIMIZE=0 keeps assertions enabled. No global changes.
Existing Python 3.10.13 / NumPy 1.26.4; no dependency installation.
Start/end UTC: 05:02:42.804589 / 05:02:45.056308 on 2026-10-13.
Child wall time 2.237032 s; peak child RSS 37.69140625 MiB, parent 18.75 MiB.
Combined stdout/stderr plus recorder metadata: 11421 bytes, below 2 MiB.
No CelerisLab, Simulation or pycuda imports; no production/GPU/SSH/system work.

Comparison with Grok
HARD CHECKS and SUMMARY_LINES blocks match exactly at printed precision.
All 22 individual Boolean values were parsed and matched, and checked against
the printed list of 22 names. All 33 summary values match; all printed numeric
differences in these two blocks are zero. See comparison.json for each value.
This is not a claim of full-precision field or whole-stdout byte equality;
reference path, runtime and recorder metadata are environment-specific.

lambda per coarse step:
  A phi0       0.0158522189
  A phi(pi/2)  0.0158419175
  B both       0.0153991657
  C both       0.0155497331
  analytic     0.0154212569
Conservation mass drift <=8.242e-13, momentum drift <=1.690e-13, versus
unchanged mass-scaled tolerance 2.560e-10. Transpose error 6.661338e-16
passes 1e-15. Initial matches and all finite-state checks pass unchanged.

Interpretation qualifications to the preserved joint report
The ~2.94% / ~2.88% excess decay relative to B is a diagnostic observation
over this fixed window, not a hard-threshold failure. A good exponential fit
over steps 4..32 does not establish longer-time persistence or exclude all
initialization effects. Symmetry cancels the global Pi mean; it is not stress
transfer evidence. Time-held ghost supply and unscaled nonequilibrium copying
are candidate explanations, not an exhaustive set or an identified mechanism.
In particular, a negative time-interpolation result would not establish the
other candidate by elimination. Original joint_report.md remains unchanged.

Next minimal verification — specification only, not implemented or run
First specify a phase- and unit-matched local shear observation on the same
7-run/32-step setup: arrival_f Pi_xy^neq=sum(cx*cy*f)-rho*ux*uy, restricted
with consistent volume weighting and the appropriate relaxation/unit conversion.
Measure a cosine shear-mode projection and signed profiles on both sides of
the patch faces, with B/C as controls; avoid cancellation by a domain mean.
Keep all 22 checks, initialization and fit window fixed. Report differences
without inventing a pass/fail stress threshold. This can test localization and
phase structure, but does not alone prove causation.
Before any later time-interpolated-ghost variant, jointly specify the available
donor time levels, arrival_f/postcollision_g phase, interpolation order and flux
accounting. Coarse g(t+1) is unavailable before the present fine hops; silently
reordering the step or using unspecified future data would confound that test.
No such variant, new observation code or reference continuation is part of this run.

Audit
baseline.json freezes HEAD, Git status and 281 existing file hashes before any
input extraction. Its scope includes tracked/nonignored project files and the
prior baseline's ignored records; excludes the read-only ref tree and bytecode.
manifest.json records final old-file/input/reference verification and every new
file's path, bytes and SHA256, except its own hash reported in the handoff.
No commit or push. Stopped for joint acceptance.
