fix(atlassian): validate Jira, Confluence, JSM, Bitbucket, Trello against vendor docs
Merged
WA
2d ago+3178+3178+0123456789012345678901234567890123456789-424-424-012345678901234567890123456789
Summary
- JSM Assets search returned no objects for every valid AQL query.
/object/aqlsent paging in the body and read the legacyobjectEntries/totalFilterCountshape. It now sendsstartAt/maxResults/includeAttributesas query params with{qlQuery}as the body, and readsvalues/total/isLast, per the Assets OpenAPI spec.objectTypeId/objectSchemaIdare now applied: they are ANDed into the AQL (numeric only) and keep any trailingorder by. Before, they were sent in the body and silently ignored.- New
startAt,maxResultsandisLastoutputs.
- JSM List Object Types: an empty
/objectschema/{id}/objecttypesresponse now falls back to the documented/objecttypes/flat, withexcludeAbstractapplied client-side. Non-empty responses are untouched and make no extra request. - JSM requests:
- Get Requests accepts the documented
ORGANIZATION/ALL_ORGANIZATIONSownership values (they were rejected before), plus newapprovalStatusandorganizationId. - Get and Create Request return
webUrlandrequestFieldValues.renderedValue. - Get Request returns expanded
participants/slas. - Request type and comment visibility filters are reachable from the block.
- Get Requests accepts the documented
- Jira:
- Search and Read now return the fields they already request: custom fields, parent, fixVersions, subtasks, issue links, time tracking, creator, watchers, ADF description and
names. Search gainsexpand. - Write and Update accept typed
customFields; Update gainsparent; Transition gains screenfields. includeAttachmentsis reachable from the block.- Path IDs go through
safeUrlPathSegment, including the delete tools.
- Search and Read now return the fields they already request: custom fields, parent, fixVersions, subtasks, issue links, time tracking, creator, watchers, ADF description and
- Confluence:
- Fields that were always empty or null are now populated: List Comments
authorId/createdAt(read fromversion), Atlas Doc Format comment bodies, SearchspaceKey/space.id(viaexpand=content.space), and spacedescription(viadescription-format=plain). - New: CQL and cursor paging on search, inline comments with replies, page owner/parent/labels, attachment
createdAt/fileId, and space owner/webUrl.
- Fields that were always empty or null are now populated: List Comments
- Bitbucket:
- List Commits gains
include/exclude/path. - Trigger Pipeline can target tags. Its restricted ref target is unchanged: no selector, variables or runner.
- PR endpoints return the allowed and default merge strategies.
- Webhook provider log messages are static.
- List Commits gains
- Trello:
- Search failed whenever a board matched (
board_fieldslacked the requiredurl). - Get Card always returned
dueComplete: null(it now sendsfields=all). - Card outputs gain
start,pos,shortUrl,badges,idMembersand friends. - Create and Update gain
start; Update gainspos,idBoard,idLabelsandidMembers. - Search gains paging; List Cards gains
since/before. - All path IDs go through
safeUrlPathSegment.
- Search failed whenever a board matched (
- Backwards compatibility:
- No param, subBlock id, operation value, tool id or output was removed, renamed or retyped, and no default changed.
- New block fields are scoped to their own operations in
tools.config.params, so stale values can't leak between operations. - The only output values that change are ones that were previously empty, null or erroring.
Follow-ups (not in this PR)
- Bitbucket
trigger_pipelinedeclares scopepipeline, but the docs saypipeline:write. Left alone because credential resolution reads it. - Trello list-card
limit/checklists/attachments/membersare documented only in the nested-resources guide, not the OpenAPI spec, so they were left out. - Confluence trigger
confluenceEmail/confluenceApiToken/includeFileContentare never read.
Type of Change
- Bug fix
- New feature (additive params and outputs)
Testing
- New regression tests, each red on the pre-fix code:
- JSM: AQL request and response shape, scope injection guard,
order bypreservation, object-types/flatfallback,ORGANIZATIONownership. - Confluence: comment author/created time, search space key.
- JSM: AQL request and response shape, scope injection guard,
vitestovertools/{jira,jsm,bitbucket,trello,confluence},lib/internal/{jira,jsm,confluence,bitbucket}, the Jira/Bitbucket webhook providers, triggers and the block tests: 310 passed.check-block-registry.ts origin/staging,check:tool-metadata,check:docs,check:integration-catalogand biome pass.- An independent review of the full diff checked it against the Atlassian and Trello OpenAPI specs.
- Type-check and
check:auditsrun in CI.
Checklist
- Code follows project style guidelines
- Self-reviewed my changes
- Tests added/updated and passing (new tests pass the
test-auditauthoring gate) - No new warnings introduced
- I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)