fix(chargen): Campaign CC gate round 1 closeout — Group 3: round review fixes (F4-F11, F14, F16)
The remaining code-bearing findings from the round review, F4-F16 minus the doc-only items (batched separately): - F4: three client-wide UiButton corpus sweeps (LabelBox path — exactly the 4 Town buttons, confined to chargen; conflicting custom-selection- pair + standard Normal/Highlight media — zero found, no gate tightening needed; per-state label-color map — 209 matches beyond chargen, confirming AP-222's mechanism has always been broadly active since it shipped generically in DatWidgetFactory). - F5/F6: LayoutImporter's Batch C un-consumed-children carve-out now honors a child's own AuthoredInvisible flag (a narrow honor scoped to exactly that carve-out, not the general #408 client-wide one) — the chat transcript's new-text indicator (0x1000048C) was building as a visible phantom element retail never shows; verified both directions against the gold-frame pieces, which do not author Invisible. - F7: BoundedProcessOutputCapture.AppendLine combines the line text and its trailing newline into one buffer and one file open/write/close instead of two. - F9: corrected a stale comment in RuntimeSettingsTargets — #407 split DisplayModeCatalog's Resolutions/WindowedResolutions in two, so the fullscreen validator's own narrower list is now DELIBERATELY different from the Config dropdown's fuller offering, not the "must match" bug the comment described. - F10: documented (not changed) why the LabelBox path's default 3px inset and the face-relative +4px gap in DatWidgetFactory.BuildButton are deliberately different numbers — neither carries a retail citation, and moving either to match the other would be an unfounded guess on a button that currently works correctly. - F11: Heritage/Profession/Summary/Town description pages now compose DatRichText.Compose's result ONCE inside their already revision-gated Refresh, caching the built line list instead of re-wrapping on every draw call. - F14: documented (not changed) why PrivateEntityViewportRenderer's _animatedIds set carrying a reserved-but-never-drawn backdrop id is harmless — BuildDrawEntities already excludes a null/empty backdrop from the actual draw list, so the id is never looked up. - F16: the Summary preview now uses its own render-id pair (SummaryPreviewRenderId/SummaryPreviewBackdropRenderId, 0xDA11D035/ 0xDA11D036) instead of sharing the Appearance page's (0xDA11D032/0xDA11D034) — confirmed by tracing FixedEntityTextureOwnerLease through TextureCache to CompositeTextureArrayCache's shared owner tracker that both pages' previews share ONE process-wide TextureCache, so sharing render ids was a real cross-page texture-release collision (either page's own re-dress or disposal could release the OTHER page's still-active textures), not a theoretical one. F3's own register bookkeeping (AP-229 addendum) and F12's register/AD header-count corrections land in the docs-only commit alongside F15. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
0fed5fdd91
commit
bd359d5181
17 changed files with 636 additions and 37 deletions
|
|
@ -99,7 +99,18 @@ public sealed class BoundedProcessOutputCapture : IDisposable
|
|||
/// <c>Process.ErrorDataReceived</c> line) followed by a newline. Never
|
||||
/// throws. A <see langword="null"/> line (the sentinel .NET's
|
||||
/// <c>ErrorDataReceived</c> raises once when the stream closes) is a
|
||||
/// silent no-op.</summary>
|
||||
/// silent no-op.
|
||||
///
|
||||
/// <para>
|
||||
/// F7 (Campaign CC gate round 1 closeout): the text and its trailing
|
||||
/// newline are combined into ONE buffer and written through ONE
|
||||
/// <see cref="AppendLocked"/> call. The class doc's own "every write
|
||||
/// opens the file fresh" contract means two separate calls (text, then
|
||||
/// newline) used to open/write/flush/close the file TWICE per logical
|
||||
/// line — needless I/O for a sink that already fires once per received
|
||||
/// output line.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public void AppendLine(string? line)
|
||||
{
|
||||
if (line is null)
|
||||
|
|
@ -107,10 +118,14 @@ public sealed class BoundedProcessOutputCapture : IDisposable
|
|||
return;
|
||||
}
|
||||
|
||||
byte[] textBytes = Encoding.UTF8.GetBytes(line);
|
||||
var buffer = new byte[textBytes.Length + Newline.Length];
|
||||
textBytes.CopyTo(buffer, 0);
|
||||
Newline.CopyTo(buffer, textBytes.Length);
|
||||
|
||||
lock (_gate)
|
||||
{
|
||||
AppendLocked(Encoding.UTF8.GetBytes(line));
|
||||
AppendLocked(Newline);
|
||||
AppendLocked(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue