Skip to content

Experimentation & Rollout #16731

Description

@premun

Summary

Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

Motivation

This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

  • Validate correctness (all test results still appear, pass/fail semantics are preserved).
  • Measure cost savings (agent time freed up).
  • Identify edge cases (retry behavior, timing issues, pool capacity).
  • Build confidence before broad adoption.

Rollout Phases

Phase 1: Internal Prototype

Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

Steps:

  1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
  2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
  3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
    • Keep the existing wait-for-results behavior active.
    • Add the HRJ as an additional job in each stage that also uploads results.
    • Compare results from both paths — they should match exactly.
  4. Validate retry scenarios manually.
  5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

Phase 2: Dual-Mode on Key Pipelines

Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

Steps:

  1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
  2. Automated comparison job that flags any discrepancies.
  3. Monitor for 2–4 weeks.
  4. Test retry scenarios (manual and automated).

Phase 3: Switch Over (Agent Upload Disabled)

Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

Steps:

  1. Disable agent-based test result upload (but keep the code — just skip the upload step).
  2. HRJ is now the sole source of test results in each stage.
  3. Monitor for 2–4 weeks.

Phase 4: Broad Rollout

Scope: All .NET pipelines using Helix + Arcade SDK.

Steps:

  1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
  2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
  3. Provide documentation on:
    • How the HRJ works (one per stage that submits Helix work).
    • How retries work (must re-run the HRJ or the stage).
    • How to opt out if issues arise.
  4. Monitor for issues across the ecosystem for 4+ weeks.

Phase 5: Cleanup

Transition to Issue 5 — remove the agent-based test result upload code path entirely.

Rollback Plan

At any phase, rollback is straightforward:

  • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
  • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
  • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      Experimentation & Rollout · Issue #16731 · dotnet/arcade · GitHub
      Skip to content

      Experimentation & Rollout #16731

      Description

      @premun

      Summary

      Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

      Motivation

      This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

      • Validate correctness (all test results still appear, pass/fail semantics are preserved).
      • Measure cost savings (agent time freed up).
      • Identify edge cases (retry behavior, timing issues, pool capacity).
      • Build confidence before broad adoption.

      Rollout Phases

      Phase 1: Internal Prototype

      Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

      Steps:

      1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
      2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
      3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
        • Keep the existing wait-for-results behavior active.
        • Add the HRJ as an additional job in each stage that also uploads results.
        • Compare results from both paths — they should match exactly.
      4. Validate retry scenarios manually.
      5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

      Phase 2: Dual-Mode on Key Pipelines

      Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

      Steps:

      1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
      2. Automated comparison job that flags any discrepancies.
      3. Monitor for 2–4 weeks.
      4. Test retry scenarios (manual and automated).

      Phase 3: Switch Over (Agent Upload Disabled)

      Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

      Steps:

      1. Disable agent-based test result upload (but keep the code — just skip the upload step).
      2. HRJ is now the sole source of test results in each stage.
      3. Monitor for 2–4 weeks.

      Phase 4: Broad Rollout

      Scope: All .NET pipelines using Helix + Arcade SDK.

      Steps:

      1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
      2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
      3. Provide documentation on:
        • How the HRJ works (one per stage that submits Helix work).
        • How retries work (must re-run the HRJ or the stage).
        • How to opt out if issues arise.
      4. Monitor for issues across the ecosystem for 4+ weeks.

      Phase 5: Cleanup

      Transition to Issue 5 — remove the agent-based test result upload code path entirely.

      Rollback Plan

      At any phase, rollback is straightforward:

      • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
      • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
      • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        No labels
        No labels

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Experimentation & Rollout · Issue #16731 · dotnet/arcade · GitHub
          Skip to content

          Experimentation & Rollout #16731

          Description

          @premun

          Summary

          Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

          Motivation

          This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

          • Validate correctness (all test results still appear, pass/fail semantics are preserved).
          • Measure cost savings (agent time freed up).
          • Identify edge cases (retry behavior, timing issues, pool capacity).
          • Build confidence before broad adoption.

          Rollout Phases

          Phase 1: Internal Prototype

          Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

          Steps:

          1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
          2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
          3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
            • Keep the existing wait-for-results behavior active.
            • Add the HRJ as an additional job in each stage that also uploads results.
            • Compare results from both paths — they should match exactly.
          4. Validate retry scenarios manually.
          5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

          Phase 2: Dual-Mode on Key Pipelines

          Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

          Steps:

          1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
          2. Automated comparison job that flags any discrepancies.
          3. Monitor for 2–4 weeks.
          4. Test retry scenarios (manual and automated).

          Phase 3: Switch Over (Agent Upload Disabled)

          Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

          Steps:

          1. Disable agent-based test result upload (but keep the code — just skip the upload step).
          2. HRJ is now the sole source of test results in each stage.
          3. Monitor for 2–4 weeks.

          Phase 4: Broad Rollout

          Scope: All .NET pipelines using Helix + Arcade SDK.

          Steps:

          1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
          2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
          3. Provide documentation on:
            • How the HRJ works (one per stage that submits Helix work).
            • How retries work (must re-run the HRJ or the stage).
            • How to opt out if issues arise.
          4. Monitor for issues across the ecosystem for 4+ weeks.

          Phase 5: Cleanup

          Transition to Issue 5 — remove the agent-based test result upload code path entirely.

          Rollback Plan

          At any phase, rollback is straightforward:

          • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
          • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
          • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            No labels
            No labels

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Experimentation & Rollout · Issue #16731 · dotnet/arcade · GitHub
              Skip to content

              Experimentation & Rollout #16731

              Description

              @premun

              Summary

              Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

              Motivation

              This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

              • Validate correctness (all test results still appear, pass/fail semantics are preserved).
              • Measure cost savings (agent time freed up).
              • Identify edge cases (retry behavior, timing issues, pool capacity).
              • Build confidence before broad adoption.

              Rollout Phases

              Phase 1: Internal Prototype

              Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

              Steps:

              1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
              2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
              3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
                • Keep the existing wait-for-results behavior active.
                • Add the HRJ as an additional job in each stage that also uploads results.
                • Compare results from both paths — they should match exactly.
              4. Validate retry scenarios manually.
              5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

              Phase 2: Dual-Mode on Key Pipelines

              Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

              Steps:

              1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
              2. Automated comparison job that flags any discrepancies.
              3. Monitor for 2–4 weeks.
              4. Test retry scenarios (manual and automated).

              Phase 3: Switch Over (Agent Upload Disabled)

              Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

              Steps:

              1. Disable agent-based test result upload (but keep the code — just skip the upload step).
              2. HRJ is now the sole source of test results in each stage.
              3. Monitor for 2–4 weeks.

              Phase 4: Broad Rollout

              Scope: All .NET pipelines using Helix + Arcade SDK.

              Steps:

              1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
              2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
              3. Provide documentation on:
                • How the HRJ works (one per stage that submits Helix work).
                • How retries work (must re-run the HRJ or the stage).
                • How to opt out if issues arise.
              4. Monitor for issues across the ecosystem for 4+ weeks.

              Phase 5: Cleanup

              Transition to Issue 5 — remove the agent-based test result upload code path entirely.

              Rollback Plan

              At any phase, rollback is straightforward:

              • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
              • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
              • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                No labels
                No labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Experimentation & Rollout · Issue #16731 · dotnet/arcade · GitHub
                  Skip to content

                  Experimentation & Rollout #16731

                  Description

                  @premun

                  Summary

                  Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

                  Motivation

                  This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

                  • Validate correctness (all test results still appear, pass/fail semantics are preserved).
                  • Measure cost savings (agent time freed up).
                  • Identify edge cases (retry behavior, timing issues, pool capacity).
                  • Build confidence before broad adoption.

                  Rollout Phases

                  Phase 1: Internal Prototype

                  Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

                  Steps:

                  1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
                  2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
                  3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
                    • Keep the existing wait-for-results behavior active.
                    • Add the HRJ as an additional job in each stage that also uploads results.
                    • Compare results from both paths — they should match exactly.
                  4. Validate retry scenarios manually.
                  5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

                  Phase 2: Dual-Mode on Key Pipelines

                  Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

                  Steps:

                  1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
                  2. Automated comparison job that flags any discrepancies.
                  3. Monitor for 2–4 weeks.
                  4. Test retry scenarios (manual and automated).

                  Phase 3: Switch Over (Agent Upload Disabled)

                  Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

                  Steps:

                  1. Disable agent-based test result upload (but keep the code — just skip the upload step).
                  2. HRJ is now the sole source of test results in each stage.
                  3. Monitor for 2–4 weeks.

                  Phase 4: Broad Rollout

                  Scope: All .NET pipelines using Helix + Arcade SDK.

                  Steps:

                  1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
                  2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
                  3. Provide documentation on:
                    • How the HRJ works (one per stage that submits Helix work).
                    • How retries work (must re-run the HRJ or the stage).
                    • How to opt out if issues arise.
                  4. Monitor for issues across the ecosystem for 4+ weeks.

                  Phase 5: Cleanup

                  Transition to Issue 5 — remove the agent-based test result upload code path entirely.

                  Rollback Plan

                  At any phase, rollback is straightforward:

                  • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
                  • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
                  • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    No labels
                    No labels

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Experimentation & Rollout · Issue #16731 · dotnet/arcade · GitHub
                      Skip to content

                      Experimentation & Rollout #16731

                      Description

                      @premun

                      Summary

                      Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

                      Motivation

                      This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

                      • Validate correctness (all test results still appear, pass/fail semantics are preserved).
                      • Measure cost savings (agent time freed up).
                      • Identify edge cases (retry behavior, timing issues, pool capacity).
                      • Build confidence before broad adoption.

                      Rollout Phases

                      Phase 1: Internal Prototype

                      Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

                      Steps:

                      1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
                      2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
                      3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
                        • Keep the existing wait-for-results behavior active.
                        • Add the HRJ as an additional job in each stage that also uploads results.
                        • Compare results from both paths — they should match exactly.
                      4. Validate retry scenarios manually.
                      5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

                      Phase 2: Dual-Mode on Key Pipelines

                      Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

                      Steps:

                      1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
                      2. Automated comparison job that flags any discrepancies.
                      3. Monitor for 2–4 weeks.
                      4. Test retry scenarios (manual and automated).

                      Phase 3: Switch Over (Agent Upload Disabled)

                      Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

                      Steps:

                      1. Disable agent-based test result upload (but keep the code — just skip the upload step).
                      2. HRJ is now the sole source of test results in each stage.
                      3. Monitor for 2–4 weeks.

                      Phase 4: Broad Rollout

                      Scope: All .NET pipelines using Helix + Arcade SDK.

                      Steps:

                      1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
                      2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
                      3. Provide documentation on:
                        • How the HRJ works (one per stage that submits Helix work).
                        • How retries work (must re-run the HRJ or the stage).
                        • How to opt out if issues arise.
                      4. Monitor for issues across the ecosystem for 4+ weeks.

                      Phase 5: Cleanup

                      Transition to Issue 5 — remove the agent-based test result upload code path entirely.

                      Rollback Plan

                      At any phase, rollback is straightforward:

                      • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
                      • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
                      • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        No labels
                        No labels

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Experimentation & Rollout · Issue #16731 · dotnet/arcade · GitHub
                          Skip to content

                          Experimentation & Rollout #16731

                          Description

                          @premun

                          Summary

                          Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

                          Motivation

                          This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

                          • Validate correctness (all test results still appear, pass/fail semantics are preserved).
                          • Measure cost savings (agent time freed up).
                          • Identify edge cases (retry behavior, timing issues, pool capacity).
                          • Build confidence before broad adoption.

                          Rollout Phases

                          Phase 1: Internal Prototype

                          Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

                          Steps:

                          1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
                          2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
                          3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
                            • Keep the existing wait-for-results behavior active.
                            • Add the HRJ as an additional job in each stage that also uploads results.
                            • Compare results from both paths — they should match exactly.
                          4. Validate retry scenarios manually.
                          5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

                          Phase 2: Dual-Mode on Key Pipelines

                          Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

                          Steps:

                          1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
                          2. Automated comparison job that flags any discrepancies.
                          3. Monitor for 2–4 weeks.
                          4. Test retry scenarios (manual and automated).

                          Phase 3: Switch Over (Agent Upload Disabled)

                          Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

                          Steps:

                          1. Disable agent-based test result upload (but keep the code — just skip the upload step).
                          2. HRJ is now the sole source of test results in each stage.
                          3. Monitor for 2–4 weeks.

                          Phase 4: Broad Rollout

                          Scope: All .NET pipelines using Helix + Arcade SDK.

                          Steps:

                          1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
                          2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
                          3. Provide documentation on:
                            • How the HRJ works (one per stage that submits Helix work).
                            • How retries work (must re-run the HRJ or the stage).
                            • How to opt out if issues arise.
                          4. Monitor for issues across the ecosystem for 4+ weeks.

                          Phase 5: Cleanup

                          Transition to Issue 5 — remove the agent-based test result upload code path entirely.

                          Rollback Plan

                          At any phase, rollback is straightforward:

                          • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
                          • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
                          • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            No labels
                            No labels

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Experimentation & Rollout · Issue #16731 · dotnet/arcade · GitHub
                              Skip to content

                              Experimentation & Rollout #16731

                              Description

                              @premun

                              Summary

                              Define the experimentation strategy and phased rollout plan for the Helix Reporter Job (HRJ). The goal is to validate the design in a controlled environment, measure impact on pipeline reliability and cost, and progressively roll out to all .NET pipelines that use Helix.

                              Motivation

                              This change fundamentally alters how test results flow through the CI/CD system for 100+ .NET repositories. A careful, phased rollout is essential to avoid disrupting the ecosystem. We need to:

                              • Validate correctness (all test results still appear, pass/fail semantics are preserved).
                              • Measure cost savings (agent time freed up).
                              • Identify edge cases (retry behavior, timing issues, pool capacity).
                              • Build confidence before broad adoption.

                              Rollout Phases

                              Phase 1: Internal Prototype

                              Scope: A single low-risk internal pipeline (e.g., Arcade's own CI or a small dotnet repo).

                              Steps:

                              1. Deploy the Helix endpoint (Issue 1) to a staging/test environment.
                              2. Add the HRJ to one or more stages in the target pipeline with HelixReporterJobEnabled: true.
                              3. Run both old (wait-for-results) and new (HRJ) paths in parallel:
                                • Keep the existing wait-for-results behavior active.
                                • Add the HRJ as an additional job in each stage that also uploads results.
                                • Compare results from both paths — they should match exactly.
                              4. Validate retry scenarios manually.
                              5. Verify that multiple HRJ instances (one per stage) can run concurrently without interference.

                              Phase 2: Dual-Mode on Key Pipelines

                              Scope: 2–3 high-volume pipelines (e.g., dotnet/runtime, dotnet/sdk) in dual-mode.

                              Steps:

                              1. Enable dual-mode: existing agent-based upload + HRJ upload running side by side across all stages with Helix work.
                              2. Automated comparison job that flags any discrepancies.
                              3. Monitor for 2–4 weeks.
                              4. Test retry scenarios (manual and automated).

                              Phase 3: Switch Over (Agent Upload Disabled)

                              Scope: Same 2–3 pipelines from Phase 2, now running HRJ-only.

                              Steps:

                              1. Disable agent-based test result upload (but keep the code — just skip the upload step).
                              2. HRJ is now the sole source of test results in each stage.
                              3. Monitor for 2–4 weeks.

                              Phase 4: Broad Rollout

                              Scope: All .NET pipelines using Helix + Arcade SDK.

                              Steps:

                              1. Enable HelixReporterJobEnabled as the default in the Arcade SDK templates (opt-out available).
                              2. Communicate the change via the usual channels (dotnet/arcade announcements, engineering updates).
                              3. Provide documentation on:
                                • How the HRJ works (one per stage that submits Helix work).
                                • How retries work (must re-run the HRJ or the stage).
                                • How to opt out if issues arise.
                              4. Monitor for issues across the ecosystem for 4+ weeks.

                              Phase 5: Cleanup

                              Transition to Issue 5 — remove the agent-based test result upload code path entirely.

                              Rollback Plan

                              At any phase, rollback is straightforward:

                              • Set HelixReporterJobEnabled: false (or remove the variable) to revert to the old wait-for-results behavior.
                              • The Helix SDK's default behavior (wait + upload from agents) remains unchanged until explicitly switched off.
                              • The HRJ YAML template can be removed from pipeline stages without affecting other jobs.

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                No labels
                                No labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions