diff --git a/SAM_Multitasker/SAM.Core.Multitasker/Classes/Multitasker.cs b/SAM_Multitasker/SAM.Core.Multitasker/Classes/Multitasker.cs index 619c35e..b1049dd 100644 --- a/SAM_Multitasker/SAM.Core.Multitasker/Classes/Multitasker.cs +++ b/SAM_Multitasker/SAM.Core.Multitasker/Classes/Multitasker.cs @@ -1,4 +1,7 @@ -using Microsoft.CodeAnalysis; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using RoslynDiagnostic = Microsoft.CodeAnalysis.Diagnostic; using Microsoft.CodeAnalysis.CSharp.Scripting; using Microsoft.CodeAnalysis.Scripting; using System; @@ -52,7 +55,7 @@ public async Task Run(IEnumerable multitas Script script = CSharpScript.Create(code, scriptOptions, typeof(MultitaskerInput)); - ImmutableArray immutableArray = script.Compile(); + ImmutableArray immutableArray = script.Compile(); if(immutableArray.Length != 0) { return new MultitaskerResults(immutableArray); diff --git a/SAM_Multitasker/SAM.Core.Multitasker/Classes/MultitaskerResults.cs b/SAM_Multitasker/SAM.Core.Multitasker/Classes/MultitaskerResults.cs index 53f438a..5c33f97 100644 --- a/SAM_Multitasker/SAM.Core.Multitasker/Classes/MultitaskerResults.cs +++ b/SAM_Multitasker/SAM.Core.Multitasker/Classes/MultitaskerResults.cs @@ -1,4 +1,7 @@ -using Microsoft.CodeAnalysis; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using RoslynDiagnostic = Microsoft.CodeAnalysis.Diagnostic; using System; using System.Collections.Generic; @@ -6,14 +9,14 @@ namespace SAM.Core.Multitasker { public class MultitaskerResults { - private List diagnostics; + private List diagnostics; private List multitaskerResults; - public MultitaskerResults(IEnumerable diagnostics) + public MultitaskerResults(IEnumerable diagnostics) { multitaskerResults = null; - this.diagnostics = diagnostics == null ? null : new List (diagnostics); + this.diagnostics = diagnostics == null ? null : new List (diagnostics); } public MultitaskerResults(IEnumerable multitaskerResults) @@ -29,7 +32,7 @@ public bool Succedded } } - public List Diagnostics + public List Diagnostics { get { diff --git a/design/grasshopper-icons/tests/GhIconTest/GhIconTest.csproj b/design/grasshopper-icons/tests/GhIconTest/GhIconTest.csproj index 4dbac6f..a5e912d 100644 --- a/design/grasshopper-icons/tests/GhIconTest/GhIconTest.csproj +++ b/design/grasshopper-icons/tests/GhIconTest/GhIconTest.csproj @@ -18,4 +18,7 @@ + + + diff --git a/design/grasshopper-icons/tests/GhIconTest/MultitaskerDiagnosticsTests.cs b/design/grasshopper-icons/tests/GhIconTest/MultitaskerDiagnosticsTests.cs new file mode 100644 index 0000000..b57ff54 --- /dev/null +++ b/design/grasshopper-icons/tests/GhIconTest/MultitaskerDiagnosticsTests.cs @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using NUnit.Framework; +using SAM.Core.Multitasker; +using RoslynDiagnostic = Microsoft.CodeAnalysis.Diagnostic; + +[TestFixture] +public class MultitaskerDiagnosticsTests +{ + [Test] + public void PublishedDiagnosticsApiStillUsesRoslynTypes() + { + Assert.That(typeof(MultitaskerResults).GetProperty(nameof(MultitaskerResults.Diagnostics)).PropertyType, + Is.EqualTo(typeof(List))); + Assert.That(typeof(MultitaskerResults).GetConstructor(new[] { typeof(IEnumerable) }), + Is.Not.Null); + } + + [Test] + public void CompilationDiagnosticIsRetainedWithoutConversion() + { + RoslynDiagnostic diagnostic = RoslynDiagnostic.Create( + new DiagnosticDescriptor("SAMREG001", "Compilation", "Invalid script", "Regression", + Microsoft.CodeAnalysis.DiagnosticSeverity.Error, true), Location.None); + var results = new MultitaskerResults(new[] { diagnostic }); + + Assert.That(results.Succedded, Is.False); + Assert.That(results.Diagnostics, Has.Count.EqualTo(1)); + Assert.That(results.Diagnostics[0], Is.SameAs(diagnostic)); + } + + [Test] + public async Task InvalidScriptReturnsRoslynCompilationErrors() + { + MultitaskerResults results = await new Multitasker("this is not valid C#;").Run(); + + Assert.That(results.Succedded, Is.False); + Assert.That(results.Diagnostics.Any(d => d.Severity == Microsoft.CodeAnalysis.DiagnosticSeverity.Error), Is.True); + } +} diff --git a/documentation/Diagnostic-Collision-Validation-2026-10-15.md b/documentation/Diagnostic-Collision-Validation-2026-10-15.md new file mode 100644 index 0000000..20cdd6b --- /dev/null +++ b/documentation/Diagnostic-Collision-Validation-2026-10-15.md @@ -0,0 +1,72 @@ +# Multitasker Roslyn Diagnostic collision — 2026-10-15 + +## Status and scope + +PR [SAM_Multitasker#12](https://github.com/SAM-BIM/SAM_Multitasker/pull/12), focused correction into `sow/2026-Q4`, based on Multitasker `aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b`. +Validated content SHA: `cfe9d116c1d9837e23ada308d535029eaf6de773`. +Affected-project build, all four NUnit tests, and full BuildAlls_v5 pass locally. Initial PR-head GitHub Build and SPDX pass; final record-only head checks are reported in the PR description. No merge authorized. +SAM#204 is unchanged and can proceed independently of this correction: the failure reproduces at its Q4 base, before its changes. + +## Proven cause and dependency boundary + +Within namespace `SAM.Core.Multitasker`, adding `SAM.Core.Diagnostic` changes resolution of the unqualified `Diagnostic` identifier from the imported Roslyn class to the enclosing SAM.Core class. `script.Compile()` still returns Roslyn diagnostics, producing CS0029. The same resolution affects the stored diagnostics and public result constructor/property, so both production files require explicit aliases. + +The first breaking SAM commit is `967a8639eb6f7f614ff4168d62ab3dfd979efbe4` (shared Diagnostics Phase 1, SAM#201, 2026-10-15 11:31 +02). Its immediate parent `a71435dd88d28c9b0da0bca43c21fbca5e1038b9` builds successfully with the identical Multitasker source. Multitasker was unchanged at `aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b`; the failing source originated in `4e7e01e61770b19f1647f387934c788e80b21c8c` (2024). + +Isolated `git archive` source builds, without switching the SAM checkout: + +| SAM SHA | Multitasker source | SAM.Core | Consumer | API/behavior probe | +|---|---|---|---|---| +| `0649e15ee9c1727af5834d9206017da9860917c5` | `aa126fa` | pass | pass | 4 assertions pass | +| `a71435dd88d28c9b0da0bca43c21fbca5e1038b9` | `aa126fa` | pass | pass | 4 assertions pass | +| `967a8639eb6f7f614ff4168d62ab3dfd979efbe4` | `aa126fa` | pass | CS0029 | not run | +| `6b12e2a65817556693ba408674211610f4a20dda` (Q4 before #204) | `aa126fa` | pass | CS0029 | not run | +| `967a8639eb6f7f614ff4168d62ab3dfd979efbe4` | `aa126fa` + alias fix | reused passing build | pass | 4 assertions pass | + +Only the SAM.Core reference varied in this boundary experiment; other SAM assembly references were held at the same local build. Each archive used the actual SAM.Core and consumer project/source, with scratch-only absolute HintPaths and `RunPostBuildEvent=Never`. The ordinary affected-project build independently reproduced the original CS0029 before the fix. + +## Last known good full configuration + +The latest preserved successful full run is the morning 2026-10-15 `BuildAlls_v5.bat nopause`, completed about 09:19:44 +02 in `00:09:32.0360117`: Restore/Clean/Rebuild across the 26 active repositories, Revit 2025/2026/2027, final native OCCT checks passed. +Machine-local evidence: parent `.buildall-v5-validation/json-fix-2026-10-15/BuildAlls-full-build.log`, `BuildAlls-working-trees.log` and `BuildAlls-JSON-report.md`. + +That log did not record SHAs. The exact SHA configuration in [initial-and-morning-configurations.json](evidence/diagnostic-collision-2026-10-15/initial-and-morning-configurations.json) is **reconstructed from local HEAD reflogs**, not a contemporaneous SHA manifest: equal heads at 09:10:12 and 09:19:44 +02, no entries during 09:10–09:20 in any of the 26 repos, and the contemporaneous working-tree log reports all clean. Relevant heads: SAM `0649e15ee9c1727af5834d9206017da9860917c5`, Multitasker `aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b`. + +The same JSON records the clean investigation-start heads/branches. Multitasker's recorded feature branch was created from the clean Q4 head before edits; initial checkout was `sow/2026-Q4`. [full-build-configurations.json](evidence/diagnostic-collision-2026-10-15/full-build-configurations.json) records the current full-run heads, with Multitasker at the tested content SHA and SAM#204 at `4a8afbebb186ace81eb5d49aed32deb502120781`. + +## Changes and safeguards + +- `SAM_Multitasker/SAM.Core.Multitasker/Classes/Multitasker.cs`: distinct `RoslynDiagnostic` alias for compilation results. +- `SAM_Multitasker/SAM.Core.Multitasker/Classes/MultitaskerResults.cs`: same alias for storage, constructor and public property. Historical CLR types remain `IEnumerable` / `List`. +- Both touched production files receive required SPDX headers. +- Existing `design/grasshopper-icons/tests/GhIconTest/GhIconTest.csproj`: reference the core project; new `MultitaskerDiagnosticsTests.cs` covers public types, object-preserving diagnostic transfer and invalid-script compilation errors. +- This record and four compact JSON evidence files preserve the boundary and repository configurations. +- No algorithm, component, shared SAM.Core type, workflow or PROJECT_PROGRESS change. No SAM#204 edits. + +## Reproduction and local validation + +Prerequisites: sibling SAM build first, .NET SDK, installed Rhino 8 for the existing NUnit host fixture. Builds emit existing System.Memory reference and nullable warnings; no new suppression added. + +From the Multitasker repository: + +```powershell +dotnet build SAM_Multitasker/SAM.Core.Multitasker/SAM.Core.Multitasker.csproj -c Debug --no-restore -p:RunPostBuildEvent=Never +$env:SAM_ICON_MANIFESTS = (Resolve-Path design/grasshopper-icons/manifest.json).Path +$env:SAM_ICON_ASSEMBLY_DIR = (Resolve-Path build).Path +dotnet test design/grasshopper-icons/tests/GhIconTest/GhIconTest.csproj -c Debug -p:RunPostBuildEvent=Never --logger 'trx;LogFileName=Multitasker-regression.trx' +& ..\BuildAlls_v5.bat nopause +``` + +- Affected project: pass, 0 errors (2 warnings). +- Existing NUnit project: **4 passed, 0 failed, 0 skipped** (three new regression tests plus existing icon test). +- Isolated boundary: exact outcomes above, raw summary in [boundary-results.json](evidence/diagnostic-collision-2026-10-15/boundary-results.json). +- Similar-collision audit: only other active Roslyn source is in SAM_Tas GenOpt test namespaces. It uses inferred diagnostic values and Roslyn DiagnosticSeverity without the affected SAM.Core namespace lookup; no equivalent collision found. No Tas changes. +- Full BuildAlls_v5: **PASS**, exit 0, `00:07:41.6286121`, 2026-10-15 21:07:51–21:15:36 +02. All 26 active repositories Restore/Clean/Rebuild, Revit 2025/2026/2027 and final OCCT ABI/dependency/hash checks passed. CS0029 is absent; no new build errors. Existing warnings remain (package compatibility/duplicate references, assembly-version/architecture conflicts and XML documentation). This is build validation, not general installed-host engineering acceptance. +- GitHub Build at record-only head `7f95bfb7d92006ae37324bf472717cc97929ba1a`: **PASS**, [run 38791612549](https://github.com/SAM-BIM/SAM_Multitasker/actions/runs/38791612549); SPDX also passed. Logs confirm `Cloning SAM-BIM/SAM @ sow/2026-Q4` and actual SAM.Core.Multitasker compilation with no CS0029. Final docs-only commit checks are tracked in the PR description. +- Post-build status: all 26 source trees clean; only Multitasker head advanced from tested content by its record-only commit. SAM#204 remains clean at `4a8afbebb186ace81eb5d49aed32deb502120781`. [validation-results.json](evidence/diagnostic-collision-2026-10-15/validation-results.json) records full-run timing, test totals and SHA256 hashes of the retained machine-local logs/TRX. + +Machine-local scratch evidence is under `C:\Users\michal\.codex\visualizations\2026\10\15\01a140c3-07d7-7db2-83db-a3f98397ac92\multitasker-regression`: `investigate.py` archive harness, core/consumer/probe logs, affected-project log, NUnit TRX, and full-run log. These raw logs/harness are not committed; copy/provision them if needed on another machine. The committed tests, JSON matrix and exact SHAs/commands above preserve the critical outcomes. Original pre-fix log: adjacent `pr204-review/Multitasker-before-fix.log`. + +## Remaining work + +Verify final record-only head GitHub checks, then request owner review and merge only with approval. The tested source remains `cfe9d116c1d9837e23ada308d535029eaf6de773`; subsequent commits change records only. After merge, add the known-merge-SHA docs-only Q4 closeout under repository policy. Keep SAM#204 independent. diff --git a/documentation/evidence/diagnostic-collision-2026-10-15/boundary-results.json b/documentation/evidence/diagnostic-collision-2026-10-15/boundary-results.json new file mode 100644 index 0000000..72a5026 --- /dev/null +++ b/documentation/evidence/diagnostic-collision-2026-10-15/boundary-results.json @@ -0,0 +1,38 @@ +[ + { + "label": "morning-good", + "sam": "0649e15ee9c1727af5834d9206017da9860917c5", + "multitasker": "aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b", + "core_build_exit": 0, + "consumer_exit": 0, + "probe_exit": 0 + }, + { + "label": "parent-good", + "sam": "a71435dd88d28c9b0da0bca43c21fbca5e1038b9", + "multitasker": "aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b", + "core_build_exit": 0, + "consumer_exit": 0, + "probe_exit": 0 + }, + { + "label": "first-diagnostic", + "sam": "967a8639eb6f7f614ff4168d62ab3dfd979efbe4", + "multitasker": "aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b", + "core_build_exit": 0, + "consumer_exit": 1 + }, + { + "label": "q4-before-204", + "sam": "6b12e2a65817556693ba408674211610f4a20dda", + "multitasker": "aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b", + "core_build_exit": 0, + "consumer_exit": 1 + }, + { + "label": "first-diagnostic-fixed", + "sam": "967a8639eb6f7f614ff4168d62ab3dfd979efbe4", + "consumer_exit": 0, + "probe_exit": 0 + } +] \ No newline at end of file diff --git a/documentation/evidence/diagnostic-collision-2026-10-15/full-build-configurations.json b/documentation/evidence/diagnostic-collision-2026-10-15/full-build-configurations.json new file mode 100644 index 0000000..c54b63e --- /dev/null +++ b/documentation/evidence/diagnostic-collision-2026-10-15/full-build-configurations.json @@ -0,0 +1,158 @@ +[ + { + "repository": "SAM", + "branch": "docs/gh-component-standards-q4", + "head": "4a8afbebb186ace81eb5d49aed32deb502120781", + "status": "" + }, + { + "repository": "SAM_Psychrometrics", + "branch": "sow/2026-Q4", + "head": "4db5756ed9957d625837014d6e8ce71e23df56b0", + "status": "" + }, + { + "repository": "SAM_Mollier", + "branch": "sow/2026-Q4", + "head": "7f61916adad9ad913904d18047ec6bfe835d1611", + "status": "" + }, + { + "repository": "SAM_Systems", + "branch": "sow/2026-Q4", + "head": "f0838ca3eba3e4b5f1cee008ba0831b6d7e95625", + "status": "" + }, + { + "repository": "SAM_Windows", + "branch": "sow/2026-Q4", + "head": "11bbecfa8aa854f4d9b2494c8bca737298982751", + "status": "" + }, + { + "repository": "SAM_IFC", + "branch": "sow/2026-Q4", + "head": "77046bef504474619cf39afbbc70ee7975aad50c", + "status": "" + }, + { + "repository": "SAM_Acoustic", + "branch": "sow/2026-Q4", + "head": "baed72cb439f6c23fdd16725f497be67938dc54a", + "status": "" + }, + { + "repository": "SAM_BHoM", + "branch": "sow/2026-Q4", + "head": "995caace61164bf281501613e8ec4f3008053f39", + "status": "" + }, + { + "repository": "SAM_gbXML", + "branch": "sow/2026-Q4", + "head": "43b5d018ac7a8a14f332e8bcde9cb0d613bf1efb", + "status": "" + }, + { + "repository": "SAM_GEM", + "branch": "sow/2026-Q4", + "head": "1bf41916fefa6dd5fe44a735c294619d3d8df8d9", + "status": "" + }, + { + "repository": "SAM_LadybugTools", + "branch": "sow/2026-Q4", + "head": "0ffbaecf1097a33de2044ee919c963eaeb0a0da2", + "status": "" + }, + { + "repository": "SAM_Solver", + "branch": "sow/2026-Q4", + "head": "fd63b4670cd4baeb20a74312aacc17eb177ecc18", + "status": "" + }, + { + "repository": "SAM_SolarCalculator", + "branch": "sow/2026-Q4", + "head": "277a3a4864f2bf900504a64a4830cb9438312d78", + "status": "" + }, + { + "repository": "SAM_Validation", + "branch": "sow/2026-Q4", + "head": "c9a7f193f46289f52eecdd4a7dc6179789f2c4e9", + "status": "" + }, + { + "repository": "SAM_Tas", + "branch": "sow/2026-Q4", + "head": "0589f0da7e2633478c26defdb237ceb0821ebdf9", + "status": "" + }, + { + "repository": "SAM_Tas_Grasshopper", + "branch": "sow/2026-Q4", + "head": "d827409a10e8911f9eb6b5e81d1cbb341c2fc0ce", + "status": "" + }, + { + "repository": "SAM_Excel", + "branch": "sow/2026-Q4", + "head": "6669977d07cc6488c0dd91fe0a48ccd2dc833627", + "status": "" + }, + { + "repository": "SAM_SQLite", + "branch": "sow/2026-Q4", + "head": "ec2eb86d00cac6e4cadf52b429f9d293eeabbd5e", + "status": "" + }, + { + "repository": "SAM_OpenStudio", + "branch": "feature/openstudio-diagnostics-phase4a-q4", + "head": "3746eed5a82281f22e94df76027a7f99cdbe68b8", + "status": "" + }, + { + "repository": "SAM_Origin", + "branch": "sow/2026-Q4", + "head": "74c19a1ebf3fc11a136cc9b055edf68b2b91a087", + "status": "" + }, + { + "repository": "SAM_Multitasker", + "branch": "codex/fix-roslyn-diagnostic-collision-q4", + "head": "cfe9d116c1d9837e23ada308d535029eaf6de773", + "status": "" + }, + { + "repository": "SAM_OCCT", + "branch": "sow/2026-Q4", + "head": "aad68123373e0dfe5841ec9670ec1b004960c73f", + "status": "" + }, + { + "repository": "SAM_UI", + "branch": "sow/2026-Q4", + "head": "ebe5e09b30b95e43e5d047b3aef2d8c5f01110e9", + "status": "" + }, + { + "repository": "SAM_Rhino_UI", + "branch": "sow/2026-Q4", + "head": "24fafda03cef5168abf1e43a1669a2fe42490f8d", + "status": "" + }, + { + "repository": "SAM_Revit", + "branch": "sow/2026-Q4", + "head": "431d34ef4bcff8f34e8caa32e893ebfc471cb678", + "status": "" + }, + { + "repository": "SAM_Revit_UI", + "branch": "sow/2026-Q4", + "head": "06cf245af93dfd29521bbf925a4b7f3cf934af18", + "status": "" + } +] diff --git a/documentation/evidence/diagnostic-collision-2026-10-15/initial-and-morning-configurations.json b/documentation/evidence/diagnostic-collision-2026-10-15/initial-and-morning-configurations.json new file mode 100644 index 0000000..96edee9 --- /dev/null +++ b/documentation/evidence/diagnostic-collision-2026-10-15/initial-and-morning-configurations.json @@ -0,0 +1,236 @@ +[ + { + "repository": "SAM", + "head": "4a8afbebb186ace81eb5d49aed32deb502120781", + "branch": "docs/gh-component-standards-q4", + "status": "", + "morning_start": "0649e15ee9c1727af5834d9206017da9860917c5", + "morning_end": "0649e15ee9c1727af5834d9206017da9860917c5", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Psychrometrics", + "head": "4db5756ed9957d625837014d6e8ce71e23df56b0", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "4c91e532409589b7125a9b3a42ad2551aac4c1c7", + "morning_end": "4c91e532409589b7125a9b3a42ad2551aac4c1c7", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Mollier", + "head": "7f61916adad9ad913904d18047ec6bfe835d1611", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "7f61916adad9ad913904d18047ec6bfe835d1611", + "morning_end": "7f61916adad9ad913904d18047ec6bfe835d1611", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Systems", + "head": "f0838ca3eba3e4b5f1cee008ba0831b6d7e95625", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "f0838ca3eba3e4b5f1cee008ba0831b6d7e95625", + "morning_end": "f0838ca3eba3e4b5f1cee008ba0831b6d7e95625", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Windows", + "head": "11bbecfa8aa854f4d9b2494c8bca737298982751", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "11bbecfa8aa854f4d9b2494c8bca737298982751", + "morning_end": "11bbecfa8aa854f4d9b2494c8bca737298982751", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_IFC", + "head": "77046bef504474619cf39afbbc70ee7975aad50c", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "77046bef504474619cf39afbbc70ee7975aad50c", + "morning_end": "77046bef504474619cf39afbbc70ee7975aad50c", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Acoustic", + "head": "baed72cb439f6c23fdd16725f497be67938dc54a", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "baed72cb439f6c23fdd16725f497be67938dc54a", + "morning_end": "baed72cb439f6c23fdd16725f497be67938dc54a", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_BHoM", + "head": "995caace61164bf281501613e8ec4f3008053f39", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "995caace61164bf281501613e8ec4f3008053f39", + "morning_end": "995caace61164bf281501613e8ec4f3008053f39", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_gbXML", + "head": "43b5d018ac7a8a14f332e8bcde9cb0d613bf1efb", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "43b5d018ac7a8a14f332e8bcde9cb0d613bf1efb", + "morning_end": "43b5d018ac7a8a14f332e8bcde9cb0d613bf1efb", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_GEM", + "head": "1bf41916fefa6dd5fe44a735c294619d3d8df8d9", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "1bf41916fefa6dd5fe44a735c294619d3d8df8d9", + "morning_end": "1bf41916fefa6dd5fe44a735c294619d3d8df8d9", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_LadybugTools", + "head": "0ffbaecf1097a33de2044ee919c963eaeb0a0da2", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "0ffbaecf1097a33de2044ee919c963eaeb0a0da2", + "morning_end": "0ffbaecf1097a33de2044ee919c963eaeb0a0da2", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Solver", + "head": "fd63b4670cd4baeb20a74312aacc17eb177ecc18", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "fd63b4670cd4baeb20a74312aacc17eb177ecc18", + "morning_end": "fd63b4670cd4baeb20a74312aacc17eb177ecc18", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_SolarCalculator", + "head": "277a3a4864f2bf900504a64a4830cb9438312d78", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "277a3a4864f2bf900504a64a4830cb9438312d78", + "morning_end": "277a3a4864f2bf900504a64a4830cb9438312d78", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Validation", + "head": "c9a7f193f46289f52eecdd4a7dc6179789f2c4e9", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "c9a7f193f46289f52eecdd4a7dc6179789f2c4e9", + "morning_end": "c9a7f193f46289f52eecdd4a7dc6179789f2c4e9", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Tas", + "head": "0589f0da7e2633478c26defdb237ceb0821ebdf9", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "0589f0da7e2633478c26defdb237ceb0821ebdf9", + "morning_end": "0589f0da7e2633478c26defdb237ceb0821ebdf9", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Tas_Grasshopper", + "head": "d827409a10e8911f9eb6b5e81d1cbb341c2fc0ce", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "d827409a10e8911f9eb6b5e81d1cbb341c2fc0ce", + "morning_end": "d827409a10e8911f9eb6b5e81d1cbb341c2fc0ce", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Excel", + "head": "6669977d07cc6488c0dd91fe0a48ccd2dc833627", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "6669977d07cc6488c0dd91fe0a48ccd2dc833627", + "morning_end": "6669977d07cc6488c0dd91fe0a48ccd2dc833627", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_SQLite", + "head": "ec2eb86d00cac6e4cadf52b429f9d293eeabbd5e", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "ec2eb86d00cac6e4cadf52b429f9d293eeabbd5e", + "morning_end": "ec2eb86d00cac6e4cadf52b429f9d293eeabbd5e", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_OpenStudio", + "head": "3746eed5a82281f22e94df76027a7f99cdbe68b8", + "branch": "feature/openstudio-diagnostics-phase4a-q4", + "status": "", + "morning_start": "fb21e03fee89d8c42758c1a84e23ed46e4e79fd9", + "morning_end": "fb21e03fee89d8c42758c1a84e23ed46e4e79fd9", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Origin", + "head": "74c19a1ebf3fc11a136cc9b055edf68b2b91a087", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "74c19a1ebf3fc11a136cc9b055edf68b2b91a087", + "morning_end": "74c19a1ebf3fc11a136cc9b055edf68b2b91a087", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Multitasker", + "head": "aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b", + "branch": "codex/fix-roslyn-diagnostic-collision-q4", + "status": "", + "morning_start": "aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b", + "morning_end": "aa126fa6eeb34cbffb72cbf5a5129aa17be1ec6b", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_OCCT", + "head": "aad68123373e0dfe5841ec9670ec1b004960c73f", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "46dac7ab915b11bc7f6d8f13b3ec7dc168c27248", + "morning_end": "46dac7ab915b11bc7f6d8f13b3ec7dc168c27248", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_UI", + "head": "ebe5e09b30b95e43e5d047b3aef2d8c5f01110e9", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "ebe5e09b30b95e43e5d047b3aef2d8c5f01110e9", + "morning_end": "ebe5e09b30b95e43e5d047b3aef2d8c5f01110e9", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Rhino_UI", + "head": "24fafda03cef5168abf1e43a1669a2fe42490f8d", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "24fafda03cef5168abf1e43a1669a2fe42490f8d", + "morning_end": "24fafda03cef5168abf1e43a1669a2fe42490f8d", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Revit", + "head": "431d34ef4bcff8f34e8caa32e893ebfc471cb678", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "431d34ef4bcff8f34e8caa32e893ebfc471cb678", + "morning_end": "431d34ef4bcff8f34e8caa32e893ebfc471cb678", + "morning_reflog_entries": "" + }, + { + "repository": "SAM_Revit_UI", + "head": "06cf245af93dfd29521bbf925a4b7f3cf934af18", + "branch": "sow/2026-Q4", + "status": "", + "morning_start": "06cf245af93dfd29521bbf925a4b7f3cf934af18", + "morning_end": "06cf245af93dfd29521bbf925a4b7f3cf934af18", + "morning_reflog_entries": "" + } +] \ No newline at end of file diff --git a/documentation/evidence/diagnostic-collision-2026-10-15/validation-results.json b/documentation/evidence/diagnostic-collision-2026-10-15/validation-results.json new file mode 100644 index 0000000..16af344 --- /dev/null +++ b/documentation/evidence/diagnostic-collision-2026-10-15/validation-results.json @@ -0,0 +1,48 @@ +{ + "content_sha": "cfe9d116c1d9837e23ada308d535029eaf6de773", + "full_build": { + "ExitCode": 0, + "Ended": "2026-10-15T21:15:36.0723581+02:00", + "Started": "2026-10-15T21:07:51.7173742+02:00" + }, + "duration": "00:07:41.6286121", + "repositories": 26, + "revit_years": [ + 2025, + 2026, + 2027 + ], + "tests": { + "passed": 4, + "skipped": 0, + "failed": 0 + }, + "github_initial_build": "https://github.com/SAM-BIM/SAM_Multitasker/actions/runs/38791612549", + "files": [ + { + "file": "BuildAlls_v5-after.log", + "bytes": 5894718, + "sha256": "889e6260a8b59bef0d24bc8506b8734beb06eab1e745fe601335d259ace536bc" + }, + { + "file": "affected-project-after.log", + "bytes": 9901, + "sha256": "cfaef568d0307e694235692d5b3ca71d4ed48aa482dca3db4dce3b0a390808c6" + }, + { + "file": "tests-after.log", + "bytes": 5481, + "sha256": "ec70780f6ea8bf63f1fdf6433eb2aa0029cc8e805c43bba9f3612aaad3b29e51" + }, + { + "file": "test-results\\Multitasker-regression.trx", + "bytes": 7170, + "sha256": "e21420fef6f415ebe69ac2d9ce86d2e06235b55a818a3fa75165699c5613e489" + }, + { + "file": "github-build-initial.log", + "bytes": 155033, + "sha256": "d3186f1c847e29ac4f3a660918ef07261d9e1195027a6f90369c3c23b7b43e9d" + } + ] +}