Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756
, '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" + '
fix(tests): stop install-script E2E tests from killing live conductor processes by jrob5756 · Pull Request #333 · microsoft/conductor · GitHub
Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756
, '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('^' + ".*" + ' fix(tests): stop install-script E2E tests from killing live conductor processes by jrob5756 · Pull Request #333 · microsoft/conductor · GitHub
Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756
, '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('^' + ".*" + ' fix(tests): stop install-script E2E tests from killing live conductor processes by jrob5756 · Pull Request #333 · microsoft/conductor · GitHub
Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756
, '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" + ' fix(tests): stop install-script E2E tests from killing live conductor processes by jrob5756 · Pull Request #333 · microsoft/conductor · GitHub
Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756
, '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('^' + ".*" + ' fix(tests): stop install-script E2E tests from killing live conductor processes by jrob5756 · Pull Request #333 · microsoft/conductor · GitHub
Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756
, '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('^' + ".*" + ' fix(tests): stop install-script E2E tests from killing live conductor processes by jrob5756 · Pull Request #333 · microsoft/conductor · GitHub
Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756
, '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); } })(); })(); fix(tests): stop install-script E2E tests from killing live conductor processes by jrob5756 · Pull Request #333 · microsoft/conductor · GitHub
Skip to content

fix(tests): stop install-script E2E tests from killing live conductor processes - #333

Merged
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill
Jul 21, 2026
Merged

fix(tests): stop install-script E2E tests from killing live conductor processes#333
Jason Robert (jrob5756) merged 2 commits into
mainfrom
fix/331-install-script-kill

Conversation

@jrob5756

Copy link
Copy Markdown
Collaborator

Summary

Fixes#331 — the install-script E2E suite (@pytest.mark.install_scripts) drives install.sh/install.ps1's --auto-stop flag, whose find_running_conductor() scans the whole host process table and SIGTERM-kills every live conductor process it finds. Nothing deselected these tests by default, so a plain pytest, pytest -m "not performance", or even CI's main test job (-m "not real_api and not performance", which never mentions install_scripts) would run them and could silently kill an unrelated live conductor run --web-bg workflow.

Changes

  • tests/conftest.py: generalized the existing real_api auto-skip hook (issue real_api tests are not deselected by default; running the suite spawns real copilot subprocesses (can silently kill a live --web-bg workflow) #326) into a loop over ("real_api", "install_scripts"), using the same word-boundary -m opt-in detection. Both markers now auto-skip unless the caller's -m expression explicitly references them.
  • tests/test_integration/install_scripts_helpers.py: run_install_script(..., auto_stop=True) → default False (defense-in-depth). Only test_running_process_auto_stop_kills_and_continues needs the kill behavior and already passes auto_stop=True explicitly, so no other call sites changed.
  • tests/test_config/test_install_scripts_marker.py (new): regression suite mirroring test_real_api_marker.py's pytester-based approach — covers default skip, -m "not performance", CI's exact main-job expression, explicit -m install_scripts opt-in, -m "not install_scripts" (current make test filter), regex word-boundary robustness, and a "test-the-test" case proving a reverted hook would be caught.
  • Doc touch-ups in test_install_scripts.py / install_scripts_helpers.py docstrings reflecting the new safe-by-default behavior.

Out of scope

  • Changing install.sh/install.ps1's find_running_conductor host-wide scan breadth — explicitly called out as optional in the issue.
  • Makefile's existing -m "not install_scripts" filters — redundant with the new hook now but harmless, kept for explicitness.

Verification

  • New test_install_scripts_marker.py suite: 7/7 passed.
  • Existing test_real_api_marker.py: 6/6 passed (no regression from generalizing the hook).
  • uv run pytest -m "not performance" -q: all install_scripts-marked tests now show SKIPPED ... install_scripts test: opt in with -m install_scripts (previously they ran).
  • uv run pytest -m "not install_scripts and not performance": 4184 passed, 0 failed.
  • make lint, make typecheck: clean (one pre-existing, unrelated ty warning in dialog_evaluator.py confirmed present on main too).
  • Confirmed tests/test_performance.py::TestForEachPerformance::test_batching_scalability fails identically on unmodified main — pre-existing timing flake, unrelated to this change.

Jason Robertand others added 2 commits July 21, 2026 17:20
… processes
The install_scripts-marked E2E suite runs install.sh/install.ps1's
--auto-stop flag, whose find_running_conductor() scans the whole host
process table and SIGTERM-kills every live conductor process it finds.
Nothing deselected these tests by default, so a plain `pytest`,
`pytest -m "not performance"`, or even CI's main test job
(-m "not real_api and not performance", which never mentions
install_scripts) would run them and could kill an unrelated live
`conductor run --web-bg` workflow.
- Generalize tests/conftest.py's real_api auto-skip hook (issue #326) to
also cover the install_scripts marker, using the same word-boundary
-m opt-in detection.
- Default run_install_script(..., auto_stop=False) in
install_scripts_helpers.py as defense-in-depth, so no call site
triggers the host-wide kill unless a test explicitly opts in (only
test_running_process_auto_stop_kills_and_continues does, and already
passed auto_stop=True explicitly).
- Add tests/test_config/test_install_scripts_marker.py, mirroring the
existing real_api marker regression suite, to lock in the new
auto-skip behavior (including a "test-the-test" case proving a
reverted hook would be caught).
Fixes#331
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Follow-up from code review of the #331 fix:
- Add tests/test_integration/test_run_install_script_command.py: a fast,
unmarked (non-install_scripts) test that mocks subprocess.run to verify
run_install_script()'s auto_stop/force -> --auto-stop/--force command
construction. This closes a gap where a future change to the auto_stop
default wouldn't be caught by anything in the default (skipped
install_scripts) test run - only by the E2E suite itself. Verified it
fails when auto_stop's default is flipped back to True.
- tests/conftest.py: trim duplicated rationale between the
_OPT_IN_MARKER_NAMES comment and the pytest_collection_modifyitems
docstring (defer to the docstring), and correct an imprecise claim that
make test relies on this hook for install_scripts - it doesn't, since
Makefile's own -m "not install_scripts" already deselects it natively;
the hook is only load-bearing there for real_api.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jrob5756
Jason Robert (jrob5756) merged commit 4ac8f03 into mainJul 21, 2026
10 checks passed
@jrob5756
Jason Robert (jrob5756) deleted the fix/331-install-script-kill branch July 21, 2026 22:02
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

install-script E2E tests SIGTERM-kill all live conductor processes (running the suite silently kills any active --web-bg workflow)

1 participant

@jrob5756