Add Azure DevOps work-item safe outputs #12044
cjs.yml
on: pull_request
checkout-cache
21s
Matrix: js-tests
js-typecheck
39s
impacted-js-tests
42s
lint-js
1m 16s
Artifact API Integration
24s
Cleanup checkout cache
2s
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 }`
|