fix(central-ui): Log on the inbound editor diagnostics host; sandbox Log delegates to Instance (Task 7 review)
This commit is contained in:
@@ -28,6 +28,14 @@ public class InboundScriptHost
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DatabaseAccessor Database { get; } = new();
|
public DatabaseAccessor Database { get; } = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Leveled per-run logging. Editor mirror of
|
||||||
|
/// ZB.MOM.WW.ScadaBridge.InboundAPI.InboundScriptLogger (step logs design 2026-09-09 D4);
|
||||||
|
/// shares <see cref="SandboxLog"/> with the Test Run sandbox because only the signatures
|
||||||
|
/// matter here — analysis never invokes it.
|
||||||
|
/// </summary>
|
||||||
|
public SandboxLog Log { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The cancellation token for the operation.
|
/// The cancellation token for the operation.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -91,9 +91,11 @@ public class SandboxScriptHost
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sandbox mirror of the site runtime's <c>Log</c> global (step logs design 2026-09-09 D4).
|
/// Sandbox mirror of the site runtime's <c>Log</c> global (step logs design 2026-09-09 D4).
|
||||||
/// Present so a script that logs BINDS in the Test Run editor; lines go to the Test Run
|
/// Present so a script that logs BINDS in the Test Run editor; lines go to the Test Run
|
||||||
/// console pane and are never audited.
|
/// console pane and are never audited. Delegates to <see cref="SandboxInstanceContext.Log"/>
|
||||||
|
/// exactly as the runtime's <c>ScriptGlobals.Log => Instance.Log</c> does, so
|
||||||
|
/// <c>Log</c> and <c>Instance.Log</c> are the same object here too.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public SandboxLog Log { get; } = new();
|
public SandboxLog Log => Instance.Log;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
+34
@@ -695,6 +695,40 @@ public class ScriptAnalysisServiceTests
|
|||||||
Assert.DoesNotContain(resp.Markers, m => m.Code.StartsWith("SCADA"));
|
Assert.DoesNotContain(resp.Markers, m => m.Code.StartsWith("SCADA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void InboundScript_Log_DiagnosesClean()
|
||||||
|
{
|
||||||
|
// Flow Debugger step logs (design 2026-09-09 D4): `Log` is a shipped inbound-script
|
||||||
|
// global (InboundScriptContext.Log). The EDITOR host is a third mirror alongside the
|
||||||
|
// compile surface and the Test Run sandbox — without `Log` on InboundScriptHost a
|
||||||
|
// logging method script shows a spurious CS0103 while deploying and running fine.
|
||||||
|
var resp = _svc.Diagnose(new DiagnoseRequest(
|
||||||
|
Code: "Log.Info(\"x\");\n"
|
||||||
|
+ "Log.Debug(\"d\");\n"
|
||||||
|
+ "Log.Warn(\"w\", new System.Exception(\"boom\"));\n"
|
||||||
|
+ "Log.Error(\"e\");",
|
||||||
|
Kind: ScriptKind.InboundApi));
|
||||||
|
|
||||||
|
Assert.DoesNotContain(resp.Markers, m => m.Code.StartsWith("CS"));
|
||||||
|
Assert.DoesNotContain(resp.Markers, m => m.Code.StartsWith("SCADA"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void SiteScript_Log_DiagnosesClean()
|
||||||
|
{
|
||||||
|
// The other half of GlobalsTypeFor: every non-inbound kind analyses against
|
||||||
|
// SandboxScriptHost, so the same `Log` global must resolve there too — both at
|
||||||
|
// the top level and via `Instance.Log`.
|
||||||
|
var resp = _svc.Diagnose(new DiagnoseRequest(
|
||||||
|
Code: "Log.Info(\"x\");\n"
|
||||||
|
+ "Log.Warn(\"w\", new System.Exception(\"boom\"));\n"
|
||||||
|
+ "Instance.Log.Info(\"via instance\");",
|
||||||
|
Kind: ScriptKind.Template));
|
||||||
|
|
||||||
|
Assert.DoesNotContain(resp.Markers, m => m.Code.StartsWith("CS"));
|
||||||
|
Assert.DoesNotContain(resp.Markers, m => m.Code.StartsWith("SCADA"));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void InboundScript_Database_DiagnosesClean()
|
public void InboundScript_Database_DiagnosesClean()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ public class RoslynScriptCompilerTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Compile_Empty_ForTheLogGlobal()
|
public void CompilesCleanly_ForTheLogGlobal()
|
||||||
{
|
{
|
||||||
// Flow Debugger step logs (design 2026-09-09 D4): `Log` is a script-reachable
|
// Flow Debugger step logs (design 2026-09-09 D4): `Log` is a script-reachable
|
||||||
// global on the runtime ScriptGlobals AND on ScriptRuntimeContext, so both the
|
// global on the runtime ScriptGlobals AND on ScriptRuntimeContext, so both the
|
||||||
|
|||||||
Reference in New Issue
Block a user