diff --git a/src/dotnet/QuantEngine.Application/Services/PipelineOrchestrator.cs b/src/dotnet/QuantEngine.Application/Services/PipelineOrchestrator.cs
index 0a31b641..85d3cd15 100644
--- a/src/dotnet/QuantEngine.Application/Services/PipelineOrchestrator.cs
+++ b/src/dotnet/QuantEngine.Application/Services/PipelineOrchestrator.cs
@@ -46,7 +46,8 @@ namespace QuantEngine.Application.Services
result.TotalElapsedMilliseconds = totalSw.Elapsed.TotalMilliseconds;
// Output JSON file for integration validation
- var tempDir = @"C:\Temp\data_feed\Temp";
+ var tempDir = Environment.GetEnvironmentVariable("QE_TEMP_ROOT")
+ ?? Path.Combine(Directory.GetCurrentDirectory(), "Temp");
if (!Directory.Exists(tempDir))
{
Directory.CreateDirectory(tempDir);
diff --git a/src/dotnet/QuantEngine.Core.Tests/Fixtures/operational_report.json b/src/dotnet/QuantEngine.Core.Tests/Fixtures/operational_report.json
new file mode 100644
index 00000000..bef73e17
--- /dev/null
+++ b/src/dotnet/QuantEngine.Core.Tests/Fixtures/operational_report.json
@@ -0,0 +1,12 @@
+{
+ "schema_version": "2026-05-24-operational-report-v1",
+ "source_json": "GatherTradingData.json",
+ "generated_at": "2026-07-12T00:00:00+00:00",
+ "section_count": 38,
+ "sections": [
+ { "name": "exec_safety_declaration", "title": "Execution Safety", "markdown": "source: .NET operational report builder" },
+ { "name": "portfolio_health", "title": "Portfolio Health", "markdown": "fixture" },
+ { "name": "factor_evidence", "title": "Factor Evidence", "markdown": "fixture" },
+ { "name": "decision_ledger", "title": "Decision Ledger", "markdown": "fixture" }
+ ]
+}
diff --git a/src/dotnet/QuantEngine.Core.Tests/PipelineOrchestratorTests.cs b/src/dotnet/QuantEngine.Core.Tests/PipelineOrchestratorTests.cs
index 577d667d..d7819eec 100644
--- a/src/dotnet/QuantEngine.Core.Tests/PipelineOrchestratorTests.cs
+++ b/src/dotnet/QuantEngine.Core.Tests/PipelineOrchestratorTests.cs
@@ -25,7 +25,9 @@ namespace QuantEngine.Core.Tests
Assert.True(step.ElapsedMilliseconds > 0);
}
- var expectedJsonPath = @"C:\Temp\data_feed\Temp\dotnet_pipeline_e2e_v1.json";
+ var tempRoot = Environment.GetEnvironmentVariable("QE_TEMP_ROOT")
+ ?? Path.Combine(Directory.GetCurrentDirectory(), "Temp");
+ var expectedJsonPath = Path.Combine(tempRoot, "dotnet_pipeline_e2e_v1.json");
Assert.True(File.Exists(expectedJsonPath));
var jsonContent = File.ReadAllText(expectedJsonPath);
diff --git a/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj b/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj
index b3c8a557..a7efe672 100644
--- a/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj
+++ b/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj
@@ -23,5 +23,8 @@
+
+
+
diff --git a/src/dotnet/QuantEngine.Core.Tests/UnitTest1.cs b/src/dotnet/QuantEngine.Core.Tests/UnitTest1.cs
index ce510e0c..79e75a46 100644
--- a/src/dotnet/QuantEngine.Core.Tests/UnitTest1.cs
+++ b/src/dotnet/QuantEngine.Core.Tests/UnitTest1.cs
@@ -5,7 +5,7 @@ public class UnitTest1
[Fact]
public void OperationalReportLoader_ParsesCanonicalTempReport()
{
- var path = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", "..", "..", "Temp", "operational_report.json"));
+ var path = Path.Combine(AppContext.BaseDirectory, "Fixtures", "operational_report.json");
var report = QuantEngine.Core.Infrastructure.OperationalReportLoader.Load(path);
Assert.Equal("2026-05-24-operational-report-v1", report.SchemaVersion);