fix #435 (part 2, closes it): attribute the unowned probes — delete 7, reclassify 8, restore 1
Part 1 deleted probes whose owning issues were closed. These 14 named no issue at all, so each was traced to its introducing commit (git log -S) instead of guessed at. Attribution split them three ways: DELETED (7, investigations closed): ACDREAM_A8_DUMP_PV and ACDREAM_DUMP_LIVE_SPAWNS (Phase A8), ACDREAM_DUMP_CLOTHING (#37), ACDREAM_DUMP_EDGE_SLIDE (#32), ACDREAM_DUMP_STEPUP (L.2.3d-f), ACDREAM_DUMP_VENDOR (the vendor campaign, 25 call sites across 8 files), ACDREAM_DUMP_VITALS (#5, four independent read sites). VendorDiagnostics.cs went entirely. RECLASSIFIED (8, tools misfiled as probes): the DUMP_CELLS/DUMP_GFXOBJS fixture-extraction family (replay-harness tooling with a roundtrip test), PROBE_CELL (standing cell-transit tracer, pair of the permanent PROBE_RESOLVE), DUMP_SKY and HIDE_PART (generic isolation tools), and DUMP_STEEP_ROOF — which looked like an L.4 relic but observes LIVE divergence-register row AD-56; deleting it would have removed the only runtime lens on an active divergence. All moved to Permanent diagnostics with their attribution recorded. RESTORED (1): ACDREAM_DUMP_MOVE_TRUTH was deleted and un-deleted the same day. It is not a probe — the canonical nine-stop soak (run-connected-r6-soak.ps1) hard-fails every destination without its 'move-truth OUT' records, with a message that would misdirect the next operator. Under the no-workarounds rule the gate's mechanism is restored, not left broken with an IOU (#437, closed). Process lesson recorded on both issues: a closed owning issue is NOT sufficient to delete a probe — grep tools/ and the contract tests for consumers first. Also lands the owner-requested default-off invariant: every diagnostic in the codebase is inert until its env var is explicitly set. Exactly four flags default ON and none is a diagnostic — RETAIL_CHASE, CAMERA_COLLIDE, CAMERA_ALIGN_SLOPE, RETAIL_CLOSE_DEGRADES are retail behaviors wearing an A/B off-switch. That set is now FROZEN by LaunchOptionsDocumentationTests.OnlyTheFourRetailBehaviorFlagsDefaultOn; docs/launch-options.md's Conventions and CLAUDE.md state the rule, and CLAUDE.md now binds future probes to a documented row in the same commit. The client reads 137 environment variables (161 at audit start); 40 temporary probes remain, every one attributed. Full hermetic suite 15,322 passed / 0 failed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
0c5057c9ff
commit
c1e6e3da44
26 changed files with 256 additions and 693 deletions
|
|
@ -47,17 +47,13 @@ public sealed class LaunchOptionsDocumentationTests
|
|||
["src/AcDream.App/Physics/RemoteServerControlledVelocityCycle.cs"] = 1,
|
||||
["src/AcDream.App/Platform/GraphicalWindowBackendSelection.cs"] = 1,
|
||||
["src/AcDream.App/Rendering/GameWindow.cs"] = 1,
|
||||
["src/AcDream.App/Rendering/PortalVisibilityBuilder.cs"] = 1,
|
||||
["src/AcDream.App/Rendering/Sky/SkyRenderer.cs"] = 1,
|
||||
["src/AcDream.App/Rendering/TextureCache.cs"] = 1,
|
||||
["src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs"] = 2,
|
||||
["src/AcDream.Core/Physics/TransitionTypes.cs"] = 2,
|
||||
["src/AcDream.Core/Vfx/PhysicsScriptRunner.cs"] = 1,
|
||||
["src/AcDream.Core/World/SkyDescLoader.cs"] = 2,
|
||||
["src/AcDream.Core.Net/GameEventWiring.cs"] = 1,
|
||||
["src/AcDream.Core.Net/Messages/PlayerDescriptionParser.cs"] = 1,
|
||||
["src/AcDream.Core.Net/Messages/UpdateMotion.cs"] = 1,
|
||||
["src/AcDream.Core.Net/WorldSession.cs"] = 3,
|
||||
["src/AcDream.Core.Net/WorldSession.cs"] = 2,
|
||||
["src/AcDream.Platform/ApplicationPathSet.cs"] = 3,
|
||||
["src/AcDream.Platform/BakePublicationGuardPaths.cs"] = 1,
|
||||
["src/AcDream.Runtime/Physics/RuntimeRemotePhysicsUpdater.cs"] = 1,
|
||||
|
|
@ -110,6 +106,65 @@ public sealed class LaunchOptionsDocumentationTests
|
|||
+ "removal commit) in the same commit that deletes the read site.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The four flags that default ON. All are retail behaviors wearing an
|
||||
/// A/B off-switch (<c>=0</c> disables) — none is a diagnostic. FROZEN:
|
||||
/// a diagnostic that activates without its env var set taxes every run
|
||||
/// and every measurement silently, so growing this set fails.
|
||||
/// </summary>
|
||||
private static readonly IReadOnlySet<string> DefaultOnBehaviorFlags =
|
||||
new HashSet<string>(StringComparer.Ordinal)
|
||||
{
|
||||
"ACDREAM_RETAIL_CHASE",
|
||||
"ACDREAM_CAMERA_COLLIDE",
|
||||
"ACDREAM_CAMERA_ALIGN_SLOPE",
|
||||
"ACDREAM_RETAIL_CLOSE_DEGRADES",
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// A read shaped "anything but the literal 0 enables" — the two
|
||||
/// default-on idioms in this codebase:
|
||||
/// <c>GetEnvironmentVariable("X") != "0"</c> and
|
||||
/// <c>!string.Equals(env("X"), "0", ...)</c>.
|
||||
/// </summary>
|
||||
private static readonly Regex DefaultOnRead = new(
|
||||
@"(?:GetEnvironmentVariable\(\s*""(ACDREAM_[A-Z0-9_]+)""\s*\)\s*!=\s*""0""" +
|
||||
@"|!string\.Equals\(\s*env\(\s*""(ACDREAM_[A-Z0-9_]+)""\s*\)\s*,\s*""0"")",
|
||||
RegexOptions.Compiled);
|
||||
|
||||
[Fact]
|
||||
public void OnlyTheFourRetailBehaviorFlagsDefaultOn()
|
||||
{
|
||||
var defaultOn = new HashSet<string>(StringComparer.Ordinal);
|
||||
foreach ((string path, _) in SourceFiles())
|
||||
{
|
||||
foreach (Match match in DefaultOnRead.Matches(File.ReadAllText(path)))
|
||||
{
|
||||
defaultOn.Add(match.Groups[1].Success
|
||||
? match.Groups[1].Value
|
||||
: match.Groups[2].Value);
|
||||
}
|
||||
}
|
||||
|
||||
List<string> added = defaultOn.Except(DefaultOnBehaviorFlags)
|
||||
.Order(StringComparer.Ordinal).ToList();
|
||||
Assert.True(
|
||||
added.Count == 0,
|
||||
"New default-ON flag(s): " + string.Join(", ", added)
|
||||
+ ". Every diagnostic must be OFF until its variable is "
|
||||
+ "explicitly set; only a retail behavior with an A/B off-switch "
|
||||
+ "may default on, and adding one means updating this frozen set "
|
||||
+ "AND the Conventions section of docs/launch-options.md.");
|
||||
|
||||
List<string> gone = DefaultOnBehaviorFlags.Except(defaultOn)
|
||||
.Order(StringComparer.Ordinal).ToList();
|
||||
Assert.True(
|
||||
gone.Count == 0,
|
||||
"Frozen default-ON flag(s) no longer read that way: "
|
||||
+ string.Join(", ", gone)
|
||||
+ ". Update this set and the docs in the same commit.");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DirectEnvironmentReadsOutsideOwnerClassesDoNotGrow()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -160,7 +160,6 @@ public sealed class RuntimeOptionsTests
|
|||
// Default-on: RetailCloseDegrades is true unless explicitly disabled.
|
||||
Assert.True(opts.RetailCloseDegrades);
|
||||
Assert.False(opts.DumpSceneryZ);
|
||||
Assert.False(opts.DumpClothing);
|
||||
Assert.Null(opts.LegacyStreamRadius);
|
||||
Assert.False(opts.UiProbeDump);
|
||||
Assert.Null(opts.UiProbeScript);
|
||||
|
|
@ -508,7 +507,6 @@ public sealed class RuntimeOptionsTests
|
|||
["ACDREAM_DUMP_SKY"] = "1",
|
||||
["ACDREAM_NO_AUDIO"] = "1",
|
||||
["ACDREAM_DUMP_SCENERY_Z"] = "1",
|
||||
["ACDREAM_DUMP_CLOTHING"] = "1",
|
||||
}));
|
||||
Assert.True(allOn.DevTools);
|
||||
Assert.True(allOn.UncappedRendering);
|
||||
|
|
@ -516,25 +514,22 @@ public sealed class RuntimeOptionsTests
|
|||
Assert.True(allOn.DumpSky);
|
||||
Assert.True(allOn.NoAudio);
|
||||
Assert.True(allOn.DumpSceneryZ);
|
||||
Assert.True(allOn.DumpClothing);
|
||||
|
||||
// Any non-"1" value leaves them off, matching the
|
||||
// string.Equals(env, "1", StringComparison.Ordinal) check.
|
||||
var anyOther = RuntimeOptions.Parse(AnyDatDir, Env(new()
|
||||
{
|
||||
["ACDREAM_DUMP_MOVE_TRUTH"] = "true",
|
||||
["ACDREAM_DEVTOOLS"] = "true",
|
||||
["ACDREAM_UNCAPPED_RENDER"] = "true",
|
||||
["ACDREAM_DUMP_MOVE_TRUTH"] = "yes",
|
||||
["ACDREAM_NO_AUDIO"] = "2",
|
||||
["ACDREAM_DUMP_SCENERY_Z"] = " 1",
|
||||
["ACDREAM_DUMP_CLOTHING"] = "true",
|
||||
}));
|
||||
Assert.False(anyOther.DevTools);
|
||||
Assert.False(anyOther.UncappedRendering);
|
||||
Assert.False(anyOther.DumpMoveTruth);
|
||||
Assert.False(anyOther.NoAudio);
|
||||
Assert.False(anyOther.DumpSceneryZ);
|
||||
Assert.False(anyOther.DumpClothing);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue