Repository navigation
Clearer saved-result error messages and repaired workflow test harnesses - #1635
Merged
Paul Lizer (paullizer) merged 4 commits intoOct 5, 2026
Conversation
AnalysisResultUnavailable now picks its wording by message family: a source document that can't be read now (input reads only), the conversation, workflow or run that holds a result, or the saved result itself. The families are held in explicit frozensets in functions_analysis_access.py, with family= only at the three raise sites that share a code with another family. Bare raises now pass a code; the message and workflow binding mismatches use container codes that map to the same response codes. The workflow runner, loop item pause, saved analysis explanation, Analyze save and publication check, and workflow progress route show the family's message. Codes and HTTP statuses are unchanged. A new functional test scans every raise in application/single_app and fails for an unclassified code, a bare raise or an unresolved computed code. The stale workflow test harnesses are repaired without changing assertions: real generated_file_publication_allowed and schedule rules in the inventory harness, a signed-in owner context for the run entrypoint test, the model budget patch retargeted to resolve_model_token_budget, the chat delivery contract loaded by the round-trip harness, and the Phase 7 planner stubs scoped to their module. Version 0.261.233. Refs microsoft#1621. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The base now ships its own v0.261.233 release-notes section (microsoft#1626, microsoft#1633), so this branch's entry moves to a new v0.261.234 section above it. The base section is kept verbatim. config.py merged cleanly because both sides set 0.261.233; the renumbering follows in the next commit. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The base now ships 0.261.233, so VERSION moves to 0.261.234 and every version label this PR added follows: both fix docs, the Upload-Only Content Screening notes, and the functional test headers, including the new test's assert_app_version_at_least floor. The base's own 0.261.233 references are unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CodeQL (py/call/wrong-arguments) flagged test(*arguments) in the __main__ runner of test_analyze_artifact_phase7_rollout_rollback.py, because it can't pair each test with its own argument tuple through the loop. The runner now iterates over (name, call) pairs whose calls take no arguments, so every call site shows its own arity. Test-only; no version bump. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This was referenced Oct 4, 2026
Paul Lizer (paullizer)
merged commit Oct 5, 2026
efee707
into
microsoft:paullizer-react-v2-ui
11 checks passed
Paul Lizer (paullizer)
deleted the
paullizer-lineage-error-wording-and-test-harnesses
branch
October 5, 2026 16:30
16 of 24 tasks
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 5, 2026
paullizer-react-v2-ui merged #1635 and published v0.261.234, which this branch used for Phase 1. The integration branch's sections are kept exactly as published. This branch's nine sections shift up one, to v0.261.235 through v0.261.243, and config.py becomes 0.261.243. Every file only this branch changed is checked to equal its previous content with those versions shifted, every file only the integration branch changed is unchanged, and the release notes are the integration branch's file plus this branch's nine sections. test_workflow_task_result_handoff.py conflicted on its header only. It keeps #1635's "Harness dependencies restored in: 0.261.234" line with this branch's Version, now 0.261.238, and both harness changes: #1635's publication policy and schedule rules, and this branch's merge document action constant. It now passes. functions_workflow_runner.py merged cleanly: #1635 rewords saved-result failures in _execute_workflow_task_sequence, apart from this branch's merge task. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 5, 2026
microsoft#1635 took 0.261.234, so this PR's release notes section moves to v0.261.235, above microsoft#1635's section. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 5, 2026
microsoft#1635 merged into paullizer-react-v2-ui as 0.261.234 first. Moves VERSION, the feature and guide docs, and this PR's test headers and version floors to 0.261.235. Refs microsoft#1634 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
14 of 24 tasks
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 5, 2026
V2 moved to efee707 (VERSION 0.261.234) when #1635 merged: saved-result error messages by family and repaired workflow test harnesses. Conflicts: - config.py: keep this branch's 0.261.238, still above V2's 0.261.234 and the claimed 0.261.235 to 0.261.237. - release_notes.md: keep both sections, 0.261.238 above 0.261.234. test_workflow_draft_save_parity.py auto-merged: #1635 adds the chat delivery contract to REAL_MODULES, and this branch's _restored_modules still undoes every sys.modules change made while the harness loads. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 5, 2026
#1635 loads the chat delivery contract as a real module, so it no longer reaches the harness only as a transitive import. The comment now describes what _restored_modules undoes without naming that module. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 6, 2026
V2 is still at 0.261.233. microsoft#1635, microsoft#1636, microsoft#1637 and microsoft#1638 claim .234 to .236, so this branch takes .237. Every 0.261.234 reference moves to 0.261.237: config.py, the release notes header, the feature docs, the chat-controls reference and the test headers. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 6, 2026
Brings in microsoft#1635 (clearer saved-result error messages and repaired workflow test harnesses, released as 0.261.234). The only conflicts were VERSION in config.py, kept at 0.261.237 because that is still above V2's 0.261.234, and the top of release_notes.md, where both sides added a section; both are kept intact under their own headings, v0.261.237 above v0.261.234. Refs microsoft#1546 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer)
added a commit
to paullizer/simplechat
that referenced
this pull request
Oct 6, 2026
microsoft#1635 split _workflow_runtime_response's PermissionError branch: a saved record that fails its own check (AnalysisResultUnavailable) now answers its own 403 text before the access 403. The action-client suite pinned the old single-return shape, so it failed after the V2 merge. The pin now reads the outer branch and requires every return in it to be a 403, which V2 shows as its fixed no-access sentence whatever the server says. Refs microsoft#1546 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
AnalysisResultUnavailableused to have one message, "This analysis is unavailable because its source access could not be confirmed." That wording dates from when saved results re-checked their sources. It now picks its message by family:functions_analysis_access.py. Codes were classified by what each raise site checks, not by name.codevalues are unchanged. The one exception is two former bare raises, which now carry container codes that map to the same response codes.test_native_source_revocation_does_not_block_the_saved_report, the proof of Stop re-checking saved workflow results against their source documents (screening layer 3a) #1631's behavior.Linked issue
Refs #1621
Release Notes & Latest Features
Is this visible to end users?
Is this admin-facing (Admin Settings, governance, deployment, config)?
Should this become a Latest Feature card?
Screenshot needed for the card?
Version bump
application/single_app/config.pyVERSIONthird segment bumped (0.261.233 → 0.261.234; the base now ships 0.261.233), or not needed because this is docs-onlydeployers/version.txtbumped, or not needed becausedeployers/was not changedTesting / validation
Message families (task 1)
python -m pytest functional_tests/test_analysis_unavailable_message_families.py→ 39 passed. The file:AnalysisResultUnavailable(...)raise inapplication/single_appand fails on an unclassified code, a bare raise, an unknownfamily=value or an unresolved computed code. Theexc.coderaise in_authorize_frozen_documentis resolved by walking theWorkflowLoopInputErrorcodes thatreauthorize_workflow_loop_documentcan raise.python -m pytest functional_tests/test_workflow_durable_routes.py→ 13 passed. Workflow progress names a failed saved record, and a group membership refusal keeps its access message.Harness repair (task 2)
Per-file before/after: each file runs in its own pytest process, with
application/single_apponPYTHONPATH, over 468 related files. Before is an untouched worktree of e1e6949; after is this branch.test_tabular_row_orchestration_scale.pyhits the 25-minute timeout in both runs.test_workflow_task_result_handoff.pytest_workflow_data_flow_execution.pytest_workflow_m365_rebase_integration.pytest_workflow_runtime_integration.pytest_analyze_workflow_publication_integration.pyRound-trip harness, without
PYTHONPATH: the 13 files built on it went from 1,857 failing tests to 0. The failure wasNo module named 'functions_workflow_chat_delivery'. All 13 also pass withPYTHONPATHset.Isolation:
test_analyze_artifact_phase7_rollout_rollback.pyran in one pytest process with the 6 files it used to break. Before: 5 collection errors and an interrupted run. After: 101 passed.After merging the base (f1aeef1)
PYTHONPATHset, all pass: 868 passed, 0 failed. They are the new family test, the 5 repaired files above, every other test file this PR touches, the 7 other consumers of the inventory harness, and the 5 test files the base changed or added.PYTHONPATH: 1,871 passed, 0 failed.Checks
python scripts/check_xss_sinks.py --base-sha f1aeef13d --head-sha <head> <11 app files>→ passedpython scripts/check_broken_access_control.py --base-sha f1aeef13d --head-sha <head> <11 py files>→ passedpython scripts/check_swagger_routes.py <11 py files>→ passed (2 route files)python functional_tests/route_tests/test_route_blueprint_policy_inventory.py→ 11/11python functional_tests/route_tests/test_route_unauthenticated_policy_contract.py→ 6/6python functional_tests/route_tests/test_route_policy_test_coverage.py→ 2/2python scripts/build_docs_inventory.py→ no content change. It produced a line-ending-only diff, which was restored.python functional_tests/test_docs_app_surface_coverage.py→ 7/7python functional_tests/test_docs_site_quality.py→ 6/6git diff --check→ cleanDocumentation
v0.261.234section with a Bug Fixes entry, above the base'sv0.261.233section, which is unchanged. The harness repair is internal and not listed.UPLOAD_ONLY_CONTENT_SCREENING.md.ANALYSIS_RESULT_UNAVAILABLE_MESSAGES_FIX.mdandWORKFLOW_TEST_HARNESS_REPAIR_FIX.md.Security checklist
@swagger_route(security=get_auth_security())(no new routes)sanitize_settings_for_user()(not touched)Decisions and notes for review
Shared codes
family=:resolve_analysis_source_manifestraisesanalysis_source_manifest_invalid→ source. The current lookup failed during an input read.index_analysis_source_manifestraises the same code for an unauthorized assigned document → source.load_workflow_artifact_bindingraisesgenerated_artifact_source_unavailable→ saved result. The run records couldn't load; the scope checks keep container.authorize_analysis_sourcesandvalidate_sourcesnow passanalysis_source_unavailableexplicitly._load_authorized_message→analysis_message_unavailable, and_load_authorized_workflow→analysis_workflow_unavailable. Nothing branched on their old default.Wording
Left as is
workflow_result_access_denied, and generated fileoutput_access_denied. The native bridge's "ownership or source access changed" also stays, because it describes an active computation's input check.Harness repairs
test_workflow_runtime_integration.pyfailures came fromWORKFLOW_SCHEDULED_TRIGGER_TYPES, which_run_authorized_workflow_implnow reads. That fixture already replaces_ensure_execution_context. Thesession/read_user_settings_snapshotfix was needed for the data-flow entrypoint test.functions_workflow_chat_deliveryimport failure from Stop re-checking workflow run sources in run history and after a task saves #1628 is the group round-trip harness. That harness loads real modules by file and didn't list the chat delivery contract. WithPYTHONPATHset it didn't fail, but it left a stub-bound copy of the contract insys.modules. Both are fixed.Merge and renumbering
paullizer-react-v2-uiat f1aeef1 (Fix orchestration file generation when /app is root-owned (V2) #1626, Update roadmap status: Phase 7's 7a design, and container-only results and self-authored Run as #1633) was merged in with a merge commit, not a rebase. Onlyrelease_notes.mdconflicted.VERSIONto 0.261.234 and relabels only the 0.261.233 labels this PR added: both fix docs, the Upload-Only Content Screening notes and the test headers. The base's own 0.261.233 references are unchanged.Push
git push originreturned 403: the current token haspush: falseon microsoft/simplechat. This branch was pushed to thepaullizer/simplechatfork, as layers 2, 3a and 3b were.Still failing, out of scope and unchanged
test_content_screening_pipeline.pyandtest_content_screening_reviews.py.node_modulesor the dev server.