You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore: make PR validation evidence reliable - #2775
Green PR checks can hide stale revisions, missing regression tests, or incomplete CI. External-contributor validation must also distinguish evidence from permission to edit, trigger CI, approve, or merge. This change makes those boundaries explicit, adds reusable validation helpers, and isolates credential-fetching CLI children from contributor-controlled Python configuration.
Related Issues/PRs
Follow-up to lessons from #2774 and recent external-contributor validation.
What changes are proposed in this pull request?
Pin readiness to the expected PR head and live target. Report exact required checks, workflow approvals, evidence completeness and human approval separately.
Collect build, ordered merge-parent, current job-attempt and named-test evidence. Bound Azure monitoring and response reads by the original deadline, with sanitized failures and explicit Azure/GitHub disagreement.
Verify an already trusted guidance checkout, including ignored files and symlinks. Keep contributor permissions in the contributor skill and shared validation in the PR-loop skill.
Remove Python-specific environment variables from native and Windows batch CLI children. An isolated parent alone does not prevent an inherited PYTHONPATH from loading contributor-controlled modules in a credential-fetching child.
For jobs that intentionally publish no individual test results, require named local regression proof plus separate API-verified current-merge aggregate corroboration. Do not represent aggregate counts as named hosted outcomes or waive unexplained skips, expected publication, or CI-only hardware requirements.
Require every changed file to serve the request. Keep the current lightweight review in the diff and preserve superseded feedback in verified hosted history.
Exempt only complete diffs confined to .github/skills/ and reviews/ from the workflow's default Azure requirement; actual enforced GitHub policy remains separate. This PR changes tools/ci/tests/, so it is not exempt.
No product implementation, pipeline definition, release tooling, or dependency pin changes.
How is this patch tested?
I have written tests (not required for typo or doc fix) and confirmed the proposed feature/bug-fix/change works.
Published head: 57f22136d7eacfc2e0d20d6722e3aae35938b87f, based on d34f762a785ee8a7c7c624806f8c112256168833. The current evidence index records the full 17-path source manifest, SHA-256 11aaf1ffda6ce9e088caeae3e7dc608dcd78e36f297997c04c296cc7db7a3ee5, and full diff, SHA-256 6214a751f6335039ffc0d85048dc978c6aa1d5d025c5666b1ce1a3a175aed944. The final diff has 17 source/test/documentation files and three review-evidence files. Superseded findings and dispositions remain in verified hosted history.
Passed on the current source: Windows Python 3.14.6: 88 tests and 285 subtests, zero skips, 20.34 seconds. Linux Python 3.10.20: 86 tests and 280 subtests, with two Windows-only batch-test skips, 21.12 seconds. The new native child-launcher case executed on both platforms; Windows also executed its batch variant.
The new regression invokes a real isolated parent and real Python CLI children with an untrusted shadow module on PYTHONPATH. Before the fix, both launcher cases failed; the shadow module's sentinel proved that contributor-controlled code executed. Afterward, the children return valid JSON without importing the shadow module, omit Python configuration variables, and preserve ordinary environment values. Tests use no real credentials or cloud operations.
Passed before the later child-environment fix: Windows Python 3.14.6: 3 tests and 10 subtests, zero skips, 9.61 seconds. Linux Python 3.10.20: the streaming test and its 3 subtests passed; the two readiness tests skipped because that local PATH lacked PowerShell. Windows executed those tests, and no readiness implementation changed afterward. The current full collector run above also covers the streaming case. CI fails rather than skips if PowerShell is missing under TF_BUILD.
The real socket-pair/urllib test checks completion, expiry between reads, and a stalled response with 0.2 seconds remaining against a two-second socket timeout; it requires timeout before 1.5 seconds and resource cleanup. Readiness tests execute the actual PowerShell entrypoint and cover ruleset/classic policy origins and missing/success/skipped/neutral classic checks-only outcomes. Four isolated mutations failed the intended behavioral assertions, rather than test setup. Runtime source was not modified for these regressions.
Historical validation before the later follow-ups: Windows: 145 tests and 432 subtests, with two POSIX-only skips covered separately on Linux. This is not claimed as a full run of the current patch; the current collector/watcher run is reported above. Earlier cross-platform and before-fix results remain in the archived evidence.
black --check --required-version 22.3.0 .github/skills/synapseml-pr-loop/scripts/collect_ci_evidence.py tools/ci/tests/test_collect_ci_evidence.py
git diff --cached --check
Both passed. The complete changed-path set and every normalized source mode/blob were verified against the frozen manifest before publication. No local Spark build or Fabric E2E run was run for these tooling-only changes.
Review: at the maintainer's request, attempt 78 used one Low harness review (gpt-6-astra, high reasoning), not further six-lens passes. It passed with zero findings, valid transport, exact full input, matching runtime identity and persisted evidence. Earlier malformed-transport attempts remain failed and are preserved. No accepted unresolved finding remains in the local review.
The current-head Copilot review reports no open issues. CodeQL alert 86 was confirmed as a false positive: its SARIF classified a TemporaryDirectory() fixture path as a secret written into the synthetic batch launcher; no credential is involved. The original thread records the data-flow evidence and disposition. Python and JavaScript analysis jobs succeeded. The optional CodeQL aggregate remains neutral because a default API-upload configuration on master is missing from the PR; the identical warning exists on predecessor 0487209b131885d5b06b7036300acdc4ce37b09d. No security rule or workflow was disabled, and this warning is not represented as a fully green scan.
CI status:Azure build 241748094 is running for head 57f22136d7eacfc2e0d20d6722e3aae35938b87f. Its merge 5cbf7445453c3f2c0c42a7660bd33ef95d9de514 has ordered parents d34f762a785ee8a7c7c624806f8c112256168833 and that head; definition 17563, repository, PR merge ref and pullRequest reason were verified. This is not yet a passing result. The final CI-qualified lightweight review and human approval remain outstanding. Prior build 241745526 belongs to predecessor bb032091980d44fb7042f84571af5ebf40907b92 and cannot qualify the child-environment fix.
Build 241706733succeeded for predecessor 0487209b131885d5b06b7036300acdc4ce37b09d, with 65 successful jobs. It does not qualify this follow-up.
Does this PR change any dependencies?
No. You can skip this section.
Yes. Make sure the dependencies are resolved correctly, and list changes here.
Does this PR add a new feature? If so, have you added samples on website?
No. You can skip this section.
Yes. Make sure you have added samples following below steps.
Find the corresponding markdown file for your new feature in website/docs/documentation folder.
Make sure you choose the correct class estimators/transformers and namespace.
Follow the pattern in markdown file and add another section for your new API, including pyspark, scala (and .NET potentially) samples.
Make sure the DocTable points to correct API link.
Navigate to website folder, and run npm start to make sure the website renders correctly.
Don't forget to add <!--pytest-codeblocks:cont--> before each python code blocks to enable auto-tests for python samples.
Make sure the WebsiteSamplesTests job pass in the pipeline.
Hey Rana Singh (@ranadeepsingh) 👋!
Thank you so much for contributing to our repository 🙌.
Someone from SynapseML Team will be reviewing this pull request soon.
We use semantic commit messages to streamline the release process.
Before your pull request can be merged, you should make sure your first commit and PR title start with a semantic prefix.
This helps us to create release messages and credit you for your hard work!
Examples of commit messages with semantic prefixes:
fix: Fix LightGBM crashes with empty partitions
feat: Make HTTP on Spark back-offs configurable
docs: Update Spark Serving usage
build: Add codecov support
perf: improve LightGBM memory usage
refactor: make python code generation rely on classes
style: Remove nulls from CNTKModel
test: Add test coverage for CNTKModel
To test your commit locally, please follow our guild on building from source.
Check out the developer guide for additional guidance on testing your change.
## Summary
Publish the final six clean pre-commit reviews, superseded public-safe review
history, driver resolutions, and input/provenance hashes for PR 2775.
Keep drafts with local workstation paths private and publish exclusion notes.
No reviewed source, test, skill, or dependency content changes in this commit.
## Prompting Intent
The engineer asked to complete the agreed PR-validation skill improvements and
create a pull request. The repository requires pre-PR review drafts to be
published under the actual PR number, while preserving feedback and privacy.
## Linked Sources
- PR: microsoft#2775
- Source publication commit: 66d08e2
- Artifact publication policy:
.github/skills/synapseml-pr-loop/references/loop-control.md
- Review provenance: reviews/pr-2775/review-provenance.json
- Final source manifest:
reviews/pr-2775/pr-validation-skills-attempt-12-manifest.json
## Rationale
Use the explicit artifact-only fingerprint exception so review text does not
recursively require another source review. Preserve original feedback and
record only line-ending and blank-line whitespace normalization. Keep unsafe
historical drafts private rather than rewrite them into purported originals.
Record all intermediate input hashes without duplicating large diff snapshots.
This non-feature chore carries documentation/build PR labels and does not
claim current-head CI, human approval, or permission to merge.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Strengthen external-contributor and PR-loop guidance with revision-pinned
readiness, Azure job-attempt and named-test evidence, trusted-guidance
verification, and explicit validation-only success without maintainer edits.
Keep evidence collection separate from authorization and merge approval.
## Prompting Intent
The engineer asked to implement the agreed lessons from recent external PR
validation work and open a pull request. Preserve contributor ownership, reuse
the existing workflow and watcher, and avoid product, dependency, release, or
CI-definition changes. Continue the required reviews and publish their history.
## Linked Sources
- Recent external PR validation: microsoft#2774
- External-contributor guidance: .github/skills/synapseml-external-contributor-review/
- PR-loop guidance and review policy: .github/skills/synapseml-pr-loop/
- Existing CI discovery: pipeline.yaml, CIHelpers
- Regression evidence: tools/ci/tests/test_get_pr_readiness.py,
test_collect_ci_evidence.py, test_trusted_guidance.py,
test_watch_azure_pipeline.py
- Pre-commit review: six independent clean lenses on the frozen pass-12 patch;
original review drafts will be published under the assigned PR number.
## Rationale
Extend the existing watcher and share its read-only Azure collector rather
than add another polling framework. Fail closed on stale or incomplete evidence
without equating technical validation with human approval. Keep secret-bearing
CI authorization in the external-contributor contract. Verify a previously
trusted snapshot rather than let candidate guidance authenticate itself.
Extract the review gauntlet without changing its policy. Use offline regressions
for destructive trigger guards and live read-only checks for API provenance.
This is a non-feature tooling chore; the PR carries documentation/build labels.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Publish the final six clean pre-commit reviews, superseded public-safe review
history, driver resolutions, and input/provenance hashes for PR 2775.
Keep drafts with local workstation paths private and publish exclusion notes.
No reviewed source, test, skill, or dependency content changes in this commit.
## Prompting Intent
The engineer asked to complete the agreed PR-validation skill improvements and
create a pull request. The repository requires pre-PR review drafts to be
published under the actual PR number, while preserving feedback and privacy.
## Linked Sources
- PR: microsoft#2775
- Source publication commit: 66d08e2
- Artifact publication policy:
.github/skills/synapseml-pr-loop/references/loop-control.md
- Review provenance: reviews/pr-2775/review-provenance.json
- Final source manifest:
reviews/pr-2775/pr-validation-skills-attempt-12-manifest.json
## Rationale
Use the explicit artifact-only fingerprint exception so review text does not
recursively require another source review. Preserve original feedback and
record only line-ending and blank-line whitespace normalization. Keep unsafe
historical drafts private rather than rewrite them into purported originals.
Record all intermediate input hashes without duplicating large diff snapshots.
This non-feature chore carries documentation/build PR labels and does not
claim current-head CI, human approval, or permission to merge.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Harden PR readiness, Azure build and named-test collection, bounded polling,
and trusted-guidance verification. Add regression coverage and make the
no-bloat gate and permission boundaries explicit.
## Prompting Intent
The engineer requested merge-ready validation except human review, removal
of useless changes and files, and publication of the updates. No merge or
secret-bearing CI trigger is included in this commit.
## Linked Sources
- Pull request: microsoft#2775
- Related validation lessons: microsoft#2774
- Review and finding dispositions: reviews/pr-2775/
- Repository guidance: AGENTS.md
- Validation contracts: .github/skills/synapseml-pr-loop/
## Rationale
Extend existing helpers rather than introduce a parallel validation system.
Separate collected evidence, engineering readiness and human approval;
reject stale, incomplete or mismatched evidence. Preserve superseded safe
review feedback in a published archival commit before pruning it from the
final diff. All six pre-commit lenses passed the same source patch; current-head
Azure validation and final CI-qualified review remain outstanding.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Remove 158 superseded review artifacts from the final diff, retaining immutable
links to their published feedback and dispositions. Keep only the six qualifying
pre-commit reviews, their source manifest and a concise evidence index.
## Prompting Intent
The engineer requested publication of the fixes without useless files, bloat
or filler. Preserve review provenance without making reviewers read obsolete
artifacts in the final change set.
## Linked Sources
- Pull request: microsoft#2775
- Attempts 1-12: https://github.com/microsoft/SynapseML/tree/38685fad3d2e3ec93e6757adf36aa270cc3a24d1/reviews/pr-2775
- Attempts 13-66: https://github.com/microsoft/SynapseML/tree/0f8d7d011838c86a2a80b6392a9aab8880676119/reviews/pr-2775
- Artifact retention: .github/skills/synapseml-pr-loop/references/loop-control.md
## Rationale
Prune only after verifying the archive is reachable through the hosted PR head
and its files match the Git blobs. This artifact-only commit leaves the reviewed
source, tests and documentation unchanged. It does not claim CI or human approval.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Reject non-regular guidance files before reading them and reject collected
evidence at or after the original deadline. Add focused public-CLI regressions,
clarify the two contracts, and retain the six clean pre-commit review lenses.
## Prompting Intent
Finish and publish the PR's correctness fixes without useless changes, files,
slop, or unnecessary mechanisms. Do not merge or claim full CI clearance.
## Linked Sources
- PR: microsoft#2775
- FIFO finding: microsoft#2775 (comment)
- Deadline finding: microsoft#2775 (comment)
- Review policy: https://github.com/microsoft/SynapseML/blob/d34f762a785ee8a7c7c624806f8c112256168833/.github/skills/synapseml-pr-loop/SKILL.md
- Evidence: reviews/pr-2775/README.md
## Rationale
Reuse Path.is_file and the client's existing remaining_timeout rather than
adding timeout settings, workers, or duplicate error handling. Both regressions
fail before the fix and pass in the affected Windows and Linux suites.
Keep the format-invalid review distinct from its successful same-source retry.
This tooling chore retains the PR's area/build and area/documentation labels;
there is no verified ADO task ID.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
The urllib timeout limits socket inactivity, not total response time. If bytes keep arriving within that timeout, response.read() can continue past the original deadline. The final deadline check prevents a late success but cannot interrupt this read, so both the collector and timeline watcher can exceed their waiting limits. A standard-library socket-pair check reproduced this: a 150 ms timeout allowed a trickling response to finish after 481 ms. Enforce the absolute deadline during response consumption, with cleanup on expiry, and add a slow-stream regression.
## Summary
Interrupt streaming Azure responses at the original deadline, close their raw
socket streams, and distinguish deadline expiry from request timeouts without
revealing private response details. Document the requested skills/reviews-only
Azure exception consistently, including tools-path exclusions and the helper's
built-in versus enforced check requirements.
## Prompting Intent
The maintainer requested that skill and review changes, including executable
skill helpers, not require Azure validation unless tools/ files also change.
They then requested completing microsoft#2775, resolving addressed
review threads, and running authorized current-head Azure validation. Preserve
focused tests and useful evidence without unrelated changes or review-file bloat.
## Linked Sources
- Pull request and current-head automated feedback: microsoft#2775
- Prior published source/evidence: microsoft@9da8529
- Trusted workflow: .github/skills/synapseml-pr-loop/SKILL.md at d34f762
- Original attempt-69 findings and resolutions: reviews/pr-2775/task-unknown-attempt-69-stage-attempt-1-review-6-claude-opus-5.5.md
- Frozen source manifest and all six attempt-70 reviews: reviews/pr-2775/README.md
## Rationale
Wrap the existing raw response reader instead of adding timers, workers,
dependencies or public options. Focus regressions on the public streaming path,
cleanup and sanitized timeout classification. Keep the Azure exception in
existing guidance rather than introduce a new classifier or change repository
protection. Preserve original review verdicts and evidence-based dispositions;
optional coverage does not justify an unrelated implementation cycle.
Windows and Linux collector/watcher checks and pinned Black passed. Hosted
current-head CI and final CI-qualified review remain separate, outstanding gates.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Replace the superseded attempt-69 files with immutable links to their verified
published archive. Keep all six current review artifacts, their source manifest
and the evidence index in the final diff.
## Prompting Intent
Complete microsoft#2775 without unnecessary files or repetitive review
archives, while preserving original feedback, findings, resolutions and proof.
## Linked Sources
- Pull request: microsoft#2775
- Verified source and original review archive: microsoft@2d4bf69
- Artifact retention and invalidation rules: .github/skills/synapseml-pr-loop/references/loop-control.md
## Rationale
All three archived blobs match their hosted contents and remain reachable.
Only allocated review outputs change, so the reviewed 17-path source manifest
and local validation remain valid. Final-head hosted checks are still required;
this cleanup is not CI or merge clearance.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
Addressed the suppressed streaming-response deadline finding in 2d4bf69.
Each raw response receive now uses the original remaining budget, and cleanup
closes the underlying socket reader. Deadline expiry and shorter query timeouts
also have distinct sanitized diagnostics.
The streaming regression fails before the fix and covers normal completion,
interruption before body completion, socket closure and sender cleanup. The
current collector/watcher suites pass on Windows (87 tests, 282 subtests) and
Linux Python 3.10 (85 tests, 278 subtests; two Windows-only skips). A verified
real-TLS probe independently confirms interruption and cleanup.
Build 241706733
is now validating the published head 0487209b131885d5b06b7036300acdc4ce37b09d;
its ordered merge parents match that head and the current target. The latest
snapshot has zero unresolved inline threads. Original review findings,
dispositions and the exact source manifest are retained in the review index.
CI is still running; this is not a merge-readiness or approval claim.
## Summary
Document named local regression proof plus separate aggregate corroboration
for CI jobs that intentionally do not publish individual test results.
Add real streaming-stall and classic-policy entrypoint regressions, without
changing runtime behavior. Preserve original review feedback and dispositions.
## Prompting Intent
Finish microsoft#2775 with lightweight reviews and current-head CI,
without expanding scope, bypassing evidence gates, or merging the PR.
## Linked Sources
- PR: microsoft#2775
- Review findings and resolutions: reviews/pr-2775/task-unknown-attempt-71-stage-attempt-1-review-5-claude-opus-5.5.md
- Regression findings: reviews/pr-2775/task-unknown-attempt-73-stage-attempt-1-review-5-claude-opus-5.5.md
- Current lightweight review: reviews/pr-2775/task-unknown-attempt-77-review-0-harness.md
- Validation contract: .github/skills/synapseml-pr-loop/references/ci-evidence.md
## Rationale
Keep named local outcomes distinct from hosted aggregate counts rather than
weakening publication or skip requirements. Exercise the real response and
PowerShell entrypoints; isolated mutations prove the new assertions detect
the missing timeout and policy behavior. The current Low review passed with
strict evidence validation on the full frozen patch. Earlier transport
failures remain failures, and predecessor CI does not qualify this commit.
This infrastructure/test follow-up has no associated ADO feature Task.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Keep the current Low review, complete source manifest and concise evidence
index in the PR diff. Preserve superseded feedback in verified hosted history.
## Prompting Intent
Get microsoft#2775 ready with lightweight reviews, a focused diff,
and honest current-head CI evidence without deleting review history.
## Linked Sources
- PR: microsoft#2775
- Verified archive: https://github.com/microsoft/SynapseML/tree/2025a2155137a9a03d302abc788b02bf1a5ed305/reviews/pr-2775
- Current review: reviews/pr-2775/task-unknown-attempt-77-review-0-harness.md
- Source manifest: reviews/pr-2775/attempt-77-source-manifest.json
## Rationale
Verify every archived review file mode and blob against the published PR head
before pruning. This avoids copying superseded findings into the final diff
while preserving their original outcomes and resolutions. No source, test or
workflow behavior changes; the full 17-path source manifest stays identical.
Final-SHA CI and remote review still apply. This labeled chore has no ADO Task.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
## Summary
Strip Python-specific environment variables before native and Windows batch
CLI execution, including timeout cleanup. Document the parent/child isolation
boundary and add a regression through real isolated Python parent and CLI shims.
## Prompting Intent
Get microsoft#2775 ready with lightweight reviews and current-head CI.
Resolve concrete new review findings without unrelated changes or weakening
the trusted-guidance, authorization or evidence gates.
## Linked Sources
- PR: microsoft#2775
- Reproduced finding: microsoft#2775 (comment)
- Current lightweight review: reviews/pr-2775/task-unknown-attempt-78-review-0-harness.md
- Verified prior archive: https://github.com/microsoft/SynapseML/tree/2025a2155137a9a03d302abc788b02bf1a5ed305/reviews/pr-2775
## Rationale
Parent -E/-s flags do not remove inherited Python configuration from child
processes. Sanitize the existing shared collector/watcher launch path rather
than changing global environment or relying on each host launcher to isolate
itself. Preserve ordinary environment values needed by the existing CLI login.
Before the fix, the native and Windows-batch regression cases failed; afterward
the collector/watcher suites passed 88 tests/285 subtests on Windows and
86 tests/280 subtests on Linux with two Windows-only skips. Pinned Black and
the complete source-manifest roundtrip passed. The Low review is clean.
No real credentials or cloud operations are used by the regression.
This labeled infrastructure fix has no associated ADO feature Task.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0bb95beb-b5fd-44e0-9fc0-9d036d4c74c7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Green PR checks can hide stale revisions, missing regression tests, or incomplete CI. External-contributor validation must also distinguish evidence from permission to edit, trigger CI, approve, or merge. This change makes those boundaries explicit, adds reusable validation helpers, and isolates credential-fetching CLI children from contributor-controlled Python configuration.
Related Issues/PRs
Follow-up to lessons from #2774 and recent external-contributor validation.
What changes are proposed in this pull request?
PYTHONPATHfrom loading contributor-controlled modules in a credential-fetching child..github/skills/andreviews/from the workflow's default Azure requirement; actual enforced GitHub policy remains separate. This PR changestools/ci/tests/, so it is not exempt.No product implementation, pipeline definition, release tooling, or dependency pin changes.
How is this patch tested?
Published head:
57f22136d7eacfc2e0d20d6722e3aae35938b87f, based ond34f762a785ee8a7c7c624806f8c112256168833. The current evidence index records the full 17-path source manifest, SHA-25611aaf1ffda6ce9e088caeae3e7dc608dcd78e36f297997c04c296cc7db7a3ee5, and full diff, SHA-2566214a751f6335039ffc0d85048dc978c6aa1d5d025c5666b1ce1a3a175aed944. The final diff has 17 source/test/documentation files and three review-evidence files. Superseded findings and dispositions remain in verified hosted history.Passed on the current source: Windows Python 3.14.6: 88 tests and 285 subtests, zero skips, 20.34 seconds. Linux Python 3.10.20: 86 tests and 280 subtests, with two Windows-only batch-test skips, 21.12 seconds. The new native child-launcher case executed on both platforms; Windows also executed its batch variant.
The new regression invokes a real isolated parent and real Python CLI children with an untrusted shadow module on
PYTHONPATH. Before the fix, both launcher cases failed; the shadow module's sentinel proved that contributor-controlled code executed. Afterward, the children return valid JSON without importing the shadow module, omit Python configuration variables, and preserve ordinary environment values. Tests use no real credentials or cloud operations.Passed before the later child-environment fix: Windows Python 3.14.6: 3 tests and 10 subtests, zero skips, 9.61 seconds. Linux Python 3.10.20: the streaming test and its 3 subtests passed; the two readiness tests skipped because that local PATH lacked PowerShell. Windows executed those tests, and no readiness implementation changed afterward. The current full collector run above also covers the streaming case. CI fails rather than skips if PowerShell is missing under
TF_BUILD.The real socket-pair/urllib test checks completion, expiry between reads, and a stalled response with 0.2 seconds remaining against a two-second socket timeout; it requires timeout before 1.5 seconds and resource cleanup. Readiness tests execute the actual PowerShell entrypoint and cover ruleset/classic policy origins and missing/success/skipped/neutral classic checks-only outcomes. Four isolated mutations failed the intended behavioral assertions, rather than test setup. Runtime source was not modified for these regressions.
Historical validation before the later follow-ups: Windows: 145 tests and 432 subtests, with two POSIX-only skips covered separately on Linux. This is not claimed as a full run of the current patch; the current collector/watcher run is reported above. Earlier cross-platform and before-fix results remain in the archived evidence.
Both passed. The complete changed-path set and every normalized source mode/blob were verified against the frozen manifest before publication. No local Spark build or Fabric E2E run was run for these tooling-only changes.
Review: at the maintainer's request, attempt 78 used one Low harness review (
gpt-6-astra, high reasoning), not further six-lens passes. It passed with zero findings, valid transport, exact full input, matching runtime identity and persisted evidence. Earlier malformed-transport attempts remain failed and are preserved. No accepted unresolved finding remains in the local review.The current-head Copilot review reports no open issues. CodeQL alert 86 was confirmed as a false positive: its SARIF classified a
TemporaryDirectory()fixture path as a secret written into the synthetic batch launcher; no credential is involved. The original thread records the data-flow evidence and disposition. Python and JavaScript analysis jobs succeeded. The optional CodeQL aggregate remains neutral because a default API-upload configuration onmasteris missing from the PR; the identical warning exists on predecessor0487209b131885d5b06b7036300acdc4ce37b09d. No security rule or workflow was disabled, and this warning is not represented as a fully green scan.CI status: Azure build 241748094 is running for head
57f22136d7eacfc2e0d20d6722e3aae35938b87f. Its merge5cbf7445453c3f2c0c42a7660bd33ef95d9de514has ordered parentsd34f762a785ee8a7c7c624806f8c112256168833and that head; definition17563, repository, PR merge ref andpullRequestreason were verified. This is not yet a passing result. The final CI-qualified lightweight review and human approval remain outstanding. Prior build 241745526 belongs to predecessorbb032091980d44fb7042f84571af5ebf40907b92and cannot qualify the child-environment fix.Build 241706733 succeeded for predecessor
0487209b131885d5b06b7036300acdc4ce37b09d, with 65 successful jobs. It does not qualify this follow-up.Does this PR change any dependencies?
Does this PR add a new feature? If so, have you added samples on website?
website/docs/documentationfolder.Make sure you choose the correct class
estimators/transformersand namespace.DocTablepoints to correct API link.npm startto make sure the website renders correctly.<!--pytest-codeblocks:cont-->before each python code blocks to enable auto-tests for python samples.WebsiteSamplesTestsjob pass in the pipeline.