Local-stress observable v1 — Horsea review and single-run handoff
2026-10-13, Asia/Shanghai. Observation-only; reference unchanged.

Actual result
Exactly one execution of the delivered script: 7 runs x 32 coarse steps, exit 0.
Original 22 Boolean hard checks plus 7 stress-finite checks: all 29 pass.
Both ALL_HARD_CHECKS_PASS_V02 and ALL_HARD_CHECKS_PASS_WITH_STRESS are True.
No retries, added cases, modified formulas, relaxed tolerances or new R thresholds.

Review status (separate from numerical results)
Grok authored the implementation and ran it in an independent environment.
The coordinating root reported an independent static review with no substantive
issue. Claude's implementation-code review is paused due to an API error and
has NOT completed. Claude's earlier specification discussion and the table's
"implicit-definition checks" do not constitute a completed code review.
Horsea read all 902 script lines, original stdout, table and manifest, reviewed
the related reference paths and local reference sources below, and found no
substantive numerical objection blocking this bounded diagnostic rerun.

Scope and static review
Applied .github/skills/lbm-ref-architecture-guard/SKILL.md and its reference/
architecture checklists. No applicable ancestor AGENTS.md was found.
The incoming script is standalone NumPy+stdlib, with no runtime dependency on
the previous shear script. Its original bytes are preserved. Architecture:
main -> run_uniform(B/C) / run_composite(A/A_T) -> arrival populations ->
sigma_xy_cell -> level-specific sigma restriction -> Fourier R and profiles.
The composite advance uses the existing CPUREF-0.3 API without wrapping or
changing its algorithm. The external recorder pins the reference before import;
the diagnostic's printed REF_SHA_MATCH alone would not enforce that pin.

Reference findings (read-only, no imported reference packages)
1. ref/lbmpy/src/lbmpy/macroscopic_value_kernels.py, strain_rate_tensor_getter:
   the second moment is formed from f minus equilibrium; S=-3*omega*Pi/(2*rho).
2. ref/OpenLB/src/functors/lattice/latticePhysStrainRate2D.hh independently uses
   the negative nonequilibrium-moment sign and omega/(2*rho*cs^2*dt) conversion.
3. ref/lbmpy/src/lbmpy/relaxationrates.py gives nu=(tau-.5)/3. Combining
   sigma=2*rho*nu*S yields -(1-1/(2*tau))*Pi_neq in lattice units.
4. ref/OpenLB/src/core/unitConverter.h converts viscosity by dx^2/dt and
   pressure/stress by density*(dx/dt)^2. Here dx/dt=1 on both levels and density
   units match, so no additional scale factor belongs in this observation.
5. Existing cpu_reference.py: paired D2Q9 ordering, physical patch offset,
   acoustic tau scaling, arrival_f input/output, tick increment 2, and owned
   leaf-cell masks. The pinned full reference was reviewed in the prior round;
   this review reread its maps, collision/explosion, leaf totals and advance path.

Verified definitions
Initialization remains equilibrium of the exact cell-average sine velocity,
not exact cell averages of nonlinear f_eq. Fine coordinates include patch offset.
All final observations use coarse step 32: composite arrival_f tick=64,
uniform B after 64 collide-stream substeps and C after 32. No extra collision.
Pi_xy^neq=sum(cx*cy*f)-rho*ux*uy is evaluated per owned cell. Each level applies
its own tau to obtain sigma BEFORE 2x2 volume averaging. Covered coarse values
and fine ghosts are excluded. Velocity restriction averages rho/j before u=j/rho.
R uses a_u=(2/256)*sum(u*sin) from the same run and final arrival state, not an
analytic decay amplitude. This raw Fourier coefficient includes the cell-average
sinc factor; the old decay fit amplitude uses its sinc-normalized template.
The cosine stress projection and velocity projection use a common 16x16 grid.
Signed horizontal profiles average columns 4:12 and retain all 16 rows; rows
3,4,11,12 flank the patch faces. The transposed case reports R only, no profile.

Runtime evidence
Existing Python 3.10.13 / NumPy 1.26.4, CPU only. run_once.py is a standalone
stdlib recorder derived from the previous recorder; it does not execute or
import the prior diagnostic. It checks all four delivered file hashes, the tar
hash and reference hash before launch, and refuses existing logs/results.
Parent and child both used /usr/bin/prlimit with soft=hard bounds:
  --as=268435456 --fsize=2097152 --core=0
Process-only OPENBLAS_NUM_THREADS=1, PYTHONDONTWRITEBYTECODE=1,
PYTHONNOUSERSITE=1, PYTHONOPTIMIZE=0; PYTHONPATH is only the current multigrid
directory. CPU_REFERENCE_PATH explicitly selects its cpu_reference.py.
results_horsea.json and stdout_horsea.txt retain full argv, environment, cwd,
preflight SHA values, versions, times, exit status and measured RSS.
UTC start/end: 2026-10-13 06:01:08.222086 / 06:01:10.671541
Local start/end: 14:01:08 / 14:01:10 Asia/Shanghai.
Child elapsed 2.435032 s; peak RSS 38.41796875 MiB; parent peak 18.75 MiB.
Combined stdout/stderr with recorder metadata: 17091 bytes, below 2 MiB.

Grok and prior-result comparison
comparison.json parses each of the 29 Boolean checks, the original 22 names,
both all-pass markers, R values, ratios and every profile value. HARD CHECKS,
STRESS FINITE CHECKS, SUMMARY_LINES and DECAY FITS blocks all match Grok
exactly at printed precision. All recorded numeric differences are zero.
The ten profile rows in SUMMARY_LINES contain 160 scalar entries total.
Six current lambda values also match the prior local shear output at 8 decimal
places (the precision emitted by this script). Prior 10-decimal values are
retained in the comparison for provenance, not claimed freshly measured here.
Full stdout hashes need not match across machines; paths, runtime and recorder
metadata differ. Printed equality is not full-precision field equality.

R at coarse step 32 (diagnostic only):
  phi0:    A=1.011774619306 B=.998555854025 C=1.008383635570
  phiPi/2: A=1.011850480751 B=.998555854025 C=1.008383635570
  A_T:     1.011850480751

Interpretation limits (separate from pass/fail checks)
The retained transpose assertion covers u/rho, not stress. R_A_T agreeing with
R_A at phiPi/2 is a reported observation, NOT a new stress-transpose hard test.
Seven finite-stress checks do not establish local stress accuracy, convergence,
interface stress-transfer correctness or any causal mechanism. One resolution,
tau pair, patch and short window remain in scope. Composite conservation uses
the reference leaf-total helper; this is not a new independent conservation
oracle. Time-held ghosts and unscaled nonequilibrium transfer remain candidate,
non-exhaustive explanations. No time-interpolated ghosts were implemented.

Frozen state and handoff
baseline.json froze HEAD, Git status and 292 old-file hashes, including all
previous CPUREF/shear evidence. Its stated hash scope excludes the read-only
ref tree, symlinks and bytecode. Final manifest.json verifies the frozen files,
original inputs and reference, and lists new paths/bytes/SHA256; its own SHA is
reported in the handoff. Only this evidence directory and the delivered
local_stress_observable_v1.py were added. No production imports, GPU/solver
runs, installs, environment/SSH/system changes, DynamisLab access, commit or push.
Stopped here for joint acceptance; Claude code review remains outstanding.

User authorization evidence, verbatim as relayed by the coordinating thread
<transcript_evidence>
assistant（Sentinel_65ef50edab8c819194404548b6b8e469）: 新增的局部剪切应力观测已在 Grok 那边跑通，但同步到 Horsea 又被拦住：审查把上次许可限定为那一份文件。

你是否允许本轮 AMR 协作后续的代码、测试、日志和报告，经现有 SSH 同步到 Horsea，并只在 CelerisLab/tests/validation/multigrid 内审阅和运行小型 CPU 验证？包含这次新观测；每次仍限 256 MiB 内存、2 MiB 输出，不改环境或生产代码。
user（Sentinel_d0d3a42b2c088191aa8aebc105fb1b27）: 允许，你用GPU验证都行
</transcript_evidence>
The coordinating instruction narrows this run to CPU observation-only. Future
GPU work was not performed or specified here; this is not unrestricted remote
operation authorization. Input transfer was already complete when received.
