fix(render): S4 chunk 1 landing — the four comment sentences the round-2 gate-honesty lens flagged (lead correction; code unchanged)

Round 2 (9ba8f013e) passed the retail and production lenses and every gate
and mutation was reproduced by all three; the gate-honesty lens failed it
on comment truth only: the terrace-edge Fact repeated round 1's false
'PC already matched' sentence, the sixth Fact claimed a 12/4 guard split
and a preamble seed the gate does not evaluate, and WalkVisibilityMath's
scan note cited a pin that does not exist and a callers argument that
was not the real justification. A third implementer round is barred by
the campaign rule, so the lead corrected the sentences at landing.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-03 23:40:00 +02:00
parent 323f5a334d
commit 766f9e749d
2 changed files with 26 additions and 16 deletions

View file

@ -232,17 +232,18 @@ public static class WalkVisibilityMath
/// Id range: the full <c>0x0000</c>-<c>0xFFFF</c> landblock-prefix /// Id range: the full <c>0x0000</c>-<c>0xFFFF</c> landblock-prefix
/// space, each landblock's cells enumerated <c>0x0100</c> through /// space, each landblock's cells enumerated <c>0x0100</c> through
/// <c>0x0100 + LandBlockInfo.NumCells - 1</c> (the same range /// <c>0x0100 + LandBlockInfo.NumCells - 1</c> (the same range
/// <c>CellStructSurfaceConstructionInstalledDatTests</c>' own /// <c>CellStructSurfaceConstructionInstalledDatTests</c>' own OH2 walk
/// independent OH2 walk uses — its pinned /// enumerates; that test reports its landblock count as a diagnostic
/// <c>landblocksWithCells=3,405</c> diagnostic already agrees). What is /// and does not pin the value). What is
/// counted: one entry per <c>CellPortal</c> whose <c>PolygonId</c> /// counted: one entry per <c>CellPortal</c> whose <c>PolygonId</c>
/// resolves in its cell's <c>CellStruct.Polygons</c> AND has &gt;=3 /// resolves in its cell's <c>CellStruct.Polygons</c> AND has &gt;=3
/// vertex ids that all resolve in <c>CellStruct.VertexArray</c> — an /// vertex ids that all resolve in <c>CellStruct.VertexArray</c> — an
/// unresolvable <c>PolygonId</c>, a &lt;3-vertex polygon, or a cell /// unresolvable <c>PolygonId</c>, a &lt;3-vertex polygon, or a cell
/// whose own <c>EnvironmentId</c>/<c>CellStructure</c> does not resolve /// whose own <c>EnvironmentId</c>/<c>CellStructure</c> does not resolve
/// is skipped ENTIRELY (not counted toward the total or either plane /// is skipped ENTIRELY (not counted toward the total or either plane
/// tally, matching this method's own live callers, which never see such /// tally; no authored portal polygon has fewer than three vertices, so
/// a polygon in the first place). Under that rule: 3,405 landblocks with /// the rule excludes only unresolvable data, none of which reaches this
/// method's live callers). Under that rule: 3,405 landblocks with
/// cells, 1,854,237 portal polygons; 2,889 with at least one vertex on a /// cells, 1,854,237 portal polygons; 2,889 with at least one vertex on a
/// +/-12 plane, 2,163 with EVERY vertex on the SAME plane — all 2,163 /// +/-12 plane, 2,163 with EVERY vertex on the SAME plane — all 2,163
/// are EXIT portals (<c>OtherCellId == 0xFFFF</c>; 0 interior portals /// are EXIT portals (<c>OtherCellId == 0xFFFF</c>; 0 interior portals

View file

@ -341,10 +341,14 @@ public sealed partial class WalkTraceConformanceTests
/// from terrace-edge's own first observed sample (<c>counterBefore=2</c>, /// from terrace-edge's own first observed sample (<c>counterBefore=2</c>,
/// carried in the file's pre-"F 1" preamble text — see /// carried in the file's pre-"F 1" preamble text — see
/// <see cref="WalkAlphaDepthTrace.LoadInitialCounter"/>'s own doc /// <see cref="WalkAlphaDepthTrace.LoadInitialCounter"/>'s own doc
/// comment) closes fix round 1's KnownFailure: both of this fixture's /// comment) closes fix round 1's KnownFailure. Under a cold <c>0</c>
/// PM events now read the correct pre-capture value instead of a cold /// BOTH sequences diverged in the counter field — PM expected
/// <c>0</c>, and its PC sequence (<c>ov=0</c> throughout — this pose /// <c>(1,2),(1,2)</c> and PC expected <c>(0,2,0),(0,2,0)</c> against a
/// never runs a qualifying interior turn at all) already matched. /// cold <c>(1,0)</c>/<c>(0,0,0)</c> — round 1's write-up wrongly called
/// the PC side a match, and round 2's gate-honesty lens caught the same
/// sentence re-worded here (lead correction at landing). Seeded, both
/// sequences match exactly; this pose never runs a qualifying interior
/// turn, so PC stays <c>ov=0</c> with the seeded counter.
/// </summary> /// </summary>
[Fact] [Fact]
public void AlphaDepthTranscript_TerraceEdge_MatchesRetailFrame2() public void AlphaDepthTranscript_TerraceEdge_MatchesRetailFrame2()
@ -354,14 +358,19 @@ public sealed partial class WalkTraceConformanceTests
/// S4-c1 fix round 2, R2-4: the sixth pose (#464 artifact pose, root /// S4-c1 fix round 2, R2-4: the sixth pose (#464 artifact pose, root
/// <c>0xF4180114</c>, seven outside views). Sixteen building punches — /// <c>0xF4180114</c>, seven outside views). Sixteen building punches —
/// all <c>mode=1</c>, all <c>counterBefore=0008</c> (far-Z punches never /// all <c>mode=1</c>, all <c>counterBefore=0008</c> (far-Z punches never
/// touch the counter) — of which twelve are guard-rejected on local /// touch the counter) — then eight true-depth exit seals with
/// <c>y=12.000</c> (WalkVisibilityMath's ±12 boundary guard, S4-c1 F1),
/// leaving four admitted; then eight true-depth exit seals with
/// <c>counterBefore</c> running <c>0..7</c> against the root's own /// <c>counterBefore</c> running <c>0..7</c> against the root's own
/// <c>ov=7</c> read-then-zero, settling this fixture's own steady-state /// <c>ov=7</c> read-then-zero. This gate compares only the
/// counter at <c>8</c> — the same value <see cref="WalkAlphaDepthTrace.LoadInitialCounter"/> /// <c>(mode, counterBefore)</c> and <c>(ov, counter, forceClear)</c>
/// reads back out of this fixture's own preamble, confirming the seed /// tuples: it does NOT observe which of the sixteen punches the ±12
/// and the replay agree on the same persistent value. /// boundary guard rejects (the sink records every attempt before the
/// guard runs; the <c>pmverts</c> capture and the DAT, not this Fact,
/// show twelve of them lying on local <c>y=12.000</c> — S4 packet §9).
/// The seed <c>8</c> is the first PM/PC sample
/// <see cref="WalkAlphaDepthTrace.LoadInitialCounter"/> finds in the
/// file, which for this fixture lies inside frame 1 (this capture has no
/// pre-"F 1" preamble sample); with the priming pass gone, frame 2's PC
/// <c>counter</c> equals that seed by construction in steady state.
/// </summary> /// </summary>
[Fact] [Fact]
public void AlphaDepthTranscript_CathedralStairArch_MatchesRetailFrame2() public void AlphaDepthTranscript_CathedralStairArch_MatchesRetailFrame2()