Skip to content

Add Azure DevOps work-item safe outputs #12044

Add Azure DevOps work-item safe outputs

Add Azure DevOps work-item safe outputs #12044

Re-run triggered September 2, 2026 02:44
Status Failure
Total duration 2m 6s
Artifacts

cjs.yml

on: pull_request
checkout-cache
21s
checkout-cache
Matrix: js-tests
js-typecheck
39s
js-typecheck
impacted-js-tests
42s
impacted-js-tests
lint-js
1m 16s
lint-js
Artifact API Integration
24s
Artifact API Integration
Cleanup checkout cache
2s
Cleanup checkout cache
Fit to window
Zoom out
Zoom in

Annotations

14 errors and 10 warnings
JS Tests (shard 4/4)
Process completed with exit code 1.
safe_outputs_mcp_schema_validation.test.cjs > Safe Outputs MCP Schema Validation > Tool Description Quality > should have clear use cases in tool descriptions: actions/setup/js/safe_outputs_mcp_schema_validation.test.cjs#L290
Error: Tools missing clear use cases in descriptions: - Tool 'ado_update_work_item': "Experimental. Update explicitly enabled fields on an Azure DevOps work item...." - Tool 'ado_link_work_items': "Experimental. Create a relationship between two explicitly scoped Azure DevOps work items...." ❯ safe_outputs_mcp_schema_validation.test.cjs:290:15
safe_outputs_mcp_schema_validation.test.cjs > Safe Outputs MCP Schema Validation > Tool Description Quality > should have detailed tool descriptions (at least 100 characters): actions/setup/js/safe_outputs_mcp_schema_validation.test.cjs#L266
Error: Tools have too-short descriptions (< 100 chars): - Tool 'ado_update_work_item': 76 chars - "Experimental. Update explicitly enabled fields on an Azure DevOps work item...." - Tool 'ado_comment_on_work_item': 84 chars - "Experimental. Add a Markdown comment to an explicitly scoped Azure DevOps work item...." - Tool 'ado_assign_work_item': 69 chars - "Experimental. Assign an allowed Azure DevOps identity to a work item...." - Tool 'ado_link_work_items': 90 chars - "Experimental. Create a relationship between two explicitly scoped Azure DevOps work items...." - Tool 'ado_upload_workitem_attachment': 83 chars - "Experimental. Upload one workspace file and attach it to an Azure DevOps work item...." ❯ safe_outputs_mcp_schema_validation.test.cjs:266:15
safe_outputs_mcp_schema_validation.test.cjs > Safe Outputs MCP Schema Validation > Optional Parameter Descriptions > should have descriptions for all optional parameters: actions/setup/js/safe_outputs_mcp_schema_validation.test.cjs#L244
Error: Optional parameters missing descriptions: - Tool 'ado_update_work_item', field 'title' - Tool 'ado_update_work_item', field 'body' - Tool 'ado_update_work_item', field 'state' - Tool 'ado_update_work_item', field 'area_path' - Tool 'ado_update_work_item', field 'iteration_path' - Tool 'ado_update_work_item', field 'assignee' - Tool 'ado_update_work_item', field 'tags' - Tool 'ado_link_work_items', field 'comment' - Tool 'ado_upload_workitem_attachment', field 'comment' ❯ safe_outputs_mcp_schema_validation.test.cjs:244:15
safe_outputs_mcp_schema_validation.test.cjs > Safe Outputs MCP Schema Validation > Required Parameter Descriptions > should include examples or format guidance in required parameter descriptions: actions/setup/js/safe_outputs_mcp_schema_validation.test.cjs#L213
Error: Required parameters missing examples or format guidance: - Tool 'ado_upload_workitem_attachment', field 'file_path': "Workspace-relative file path. Absolute paths, traversal, colons, and symbolic links are rejected...." ❯ safe_outputs_mcp_schema_validation.test.cjs:213:15
safe_outputs_mcp_schema_validation.test.cjs > Safe Outputs MCP Schema Validation > Required Parameter Descriptions > should have detailed descriptions (at least 50 characters) for required parameters: actions/setup/js/safe_outputs_mcp_schema_validation.test.cjs#L151
Error: Required parameters have too-short descriptions (< 50 chars): - Tool 'ado_create_work_item', field 'title': 24 chars - "Concise work-item title...." - Tool 'ado_create_work_item', field 'description': 43 chars - "Detailed work-item description in Markdown...." - Tool 'ado_comment_on_work_item', field 'body': 25 chars - "Comment text in Markdown...." ❯ safe_outputs_mcp_schema_validation.test.cjs:151:15
safe_outputs_mcp_schema_validation.test.cjs > Safe Outputs MCP Schema Validation > Required Parameter Descriptions > should have non-empty descriptions for all required parameters: actions/setup/js/safe_outputs_mcp_schema_validation.test.cjs#L120
Error: Required parameters missing descriptions: - Tool 'ado_link_work_items', field 'link_type': missing or empty description ❯ safe_outputs_mcp_schema_validation.test.cjs:120:15
JS Tests (shard 3/4)
The strategy configuration was canceled because "js-tests._4" failed
JS Tests (shard 3/4)
Process completed with exit code 1.
mcp_server_core.test.cjs > mcp_server_core.cjs > registerTool > should normalize tool names with dashes to underscores: actions/setup/js/mcp_server_core.test.cjs#L66
AssertionError: expected 'test-tool' to be 'test_tool' // Object.is equality Expected: "test_tool" Received: "test-tool" ❯ mcp_server_core.test.cjs:66:46
JS Tests (shard 1/4)
The strategy configuration was canceled because "js-tests._4" failed
JS Tests (shard 1/4)
The operation was canceled.
safe_outputs_mcp_error_messages.test.cjs > Safe Outputs MCP Error Message Validation > Error Message Enhancement Opportunities > should verify schema descriptions are available for enhancement: actions/setup/js/safe_outputs_mcp_error_messages.test.cjs#L449
AssertionError: expected undefined to be defined ❯ safe_outputs_mcp_error_messages.test.cjs:449:40 ❯ safe_outputs_mcp_error_messages.test.cjs:444:35 ❯ safe_outputs_mcp_error_messages.test.cjs:443:31
Cleanup checkout cache
Process completed with exit code 1.
lint-js: actions/setup/js/create_files.cjs#L112
Wrap fs.realpathSync(directoryPath) in try/catch — realpathSync throws on missing paths, permission denied, or symlink cycles; without a call-site try/catch, you lose the original error context and get a generic engine-level stack instead of a specific message with `{ cause }`
lint-js: actions/setup/js/create_files.cjs#L104
Wrap fs.realpathSync(root) in try/catch — realpathSync throws on missing paths, permission denied, or symlink cycles; without a call-site try/catch, you lose the original error context and get a generic engine-level stack instead of a specific message with `{ cause }`
lint-js: actions/setup/js/check_workflow_recompile_needed.cjs#L69
getExecOutput() is called with ignoreReturnCode: true but its exitCode is never read. Without the default throw-on-failure behavior, a non-zero exit code is silently ignored. Destructure exitCode and check it (e.g. `const { stdout, exitCode } = await exec.getExecOutput(...); if (exitCode !== 0) { ... }`)
lint-js: actions/setup/js/check_stop_time.cjs#L38
This file imports error_codes.cjs but this thrown Error message does not reference a standardized error code (e.g. ERR_API, ERR_NOT_FOUND). Prefix the message with an imported ERR_* constant for consistency with other errors in this file
lint-js: actions/setup/js/check_stop_time.cjs#L31
This file imports error_codes.cjs but this thrown Error message does not reference a standardized error code (e.g. ERR_API, ERR_NOT_FOUND). Prefix the message with an imported ERR_* constant for consistency with other errors in this file
lint-js: actions/setup/js/check_stop_time.cjs#L26
This file imports error_codes.cjs but this thrown Error message does not reference a standardized error code (e.g. ERR_API, ERR_NOT_FOUND). Prefix the message with an imported ERR_* constant for consistency with other errors in this file
lint-js: actions/setup/js/check_stop_time.cjs#L21
This file imports error_codes.cjs but this thrown Error message does not reference a standardized error code (e.g. ERR_API, ERR_NOT_FOUND). Prefix the message with an imported ERR_* constant for consistency with other errors in this file
lint-js: actions/setup/js/build_checkout_manifest.cjs#L61
Prefer @actions/exec's exec()/getExecOutput() over child_process.execFileSync() to spawn processes in actions/github-script scripts. child_process.execFileSync() duplicates functionality already provided by the @actions/exec toolkit available in this context. @actions/exec's API is Promise-only, so migrating this call requires converting the enclosing (currently non-async) function — and every one of its callers up the chain — to async/await
lint-js: actions/setup/js/build_checkout_manifest.cjs#L52
Prefer @actions/exec's exec()/getExecOutput() over child_process.execFileSync() to spawn processes in actions/github-script scripts. child_process.execFileSync() duplicates functionality already provided by the @actions/exec toolkit available in this context. @actions/exec's API is Promise-only, so migrating this call requires converting the enclosing (currently non-async) function — and every one of its callers up the chain — to async/await
lint-js: actions/setup/js/artifact_client.cjs#L175
Wrap decodeURIComponent(raw.trim()) in try/catch — malformed percent-encoded input throws URIError; without a call-site try/catch, you lose the original error context and get a generic engine-level stack instead of a specific message with `{ cause }`