docs: name target in the list_artifacts description (T2.1.7 follow-up) - #42
Merged
Conversation
GET /api/artifacts has returned target for a redirect since PR #40, and list_artifacts hands back the same publicMeta output, so an agent already receives the field. The tool description enumerates the response fields by hand and never mentioned it, and docs/mcp.md said only "JSON list". The smoke suite now publishes a redirect before the list_artifacts call and checks both halves: the response carries target for that redirect, and the served description names it. The second half was proven red against this checkout before the description changed.
kuyazee
added a commit
that referenced
this pull request
Aug 12, 2026
PR #42 landed the list_artifacts field enumeration this branch also writes to. One conflict, in docs/mcp.md, where both sides added a paragraph after the type line. Both kept, and #42's field list gained description and ogImage; the served tool description in server.js gained them too, so the assertion #42 added (the description names what the response carries) still holds. smoke.sh and server.js merged on their own: #42's MCP block and this branch's link-preview block do not overlap, and neither do the two slug sets. After the merge: npm test 65, smoke 176 assertions, both green.
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.
What this was
The follow-up T2.1.7 left behind, listed under its own item in backlog 2: "The MCP
list_artifactsdescription still enumerates the response without
target." PR #37 rewrote that same string, soediting it then would have conflicted. #37 merged (6c1911a), so the line is unowned now.
What changed
GET /api/artifactshas returnedtargetfor a redirect since PR #40, andlist_artifactshandsback the same
publicMetaoutput, so an agent has been receiving the field for a day without beingtold. Three lines of the repo said otherwise:
targetjoined the list, plus onesentence saying what it is and that a redirect published before targets were stored on the
artifact has none.
docs/mcp.mdsaid only "JSON list" in the tool table. It now names every field the tool returns,in the same order, with the same caveat.
list_artifactscall, thenchecks two things on the one response: the entry carries
targetwith the URL that was published,and the served description names
target.No route, no handler, no storage change. The behavior was already right; the strings describing it
were not.
Tests
npm test49, unchanged.bash .github/workflows/smoke.sh154ok:lines, with the two newassertions folded into the
list_artifactsline rather than a new one.Both new assertions were checked against something that fails:
the whole served description, which is how the missing field is read off a CI log.
targetfromPUBLIC_META_FIELDStakes the field out of every list response. That rungoes red, though the REST assertion from feat: compose, show and repoint a redirect from the dashboard (T2.1.7, T2.1.10 to T2.1.12) #40 ("redirect row is missing its target") trips first,
40 lines earlier, so the MCP half is the second line to fail rather than the first.
target[^,]*<url>on one line, because the whole pretty-printed list arrivesescaped on a single SSE line. Checked that it matches
"target": "<url>", misses the same URLunder a renamed field, and misses a
targetholding a different value.The slug is
ci-redir-mcp, notci-mcp-redirect: two assertions in that block grep the list for thebare string
ci-mcp, and a slug carrying it as a prefix would satisfy them afterci-mcpitselfstopped being published. The block already carries that warning for
ci-mcp-default.No screenshot. Nothing in the dashboard changed; the visible surface is a string an MCP client reads.
Review
26 changed lines, so the four lenses were run here rather than by subagents, per the runner's own
table. Nothing reachable without a key changed, and
lib/auth.jsand the serve paths were nottouched.
ci-redir-mcpfrom an aborted run would 409 the publish, so thecleanup block at the top of the MCP section deletes it first, the way it already does for
ci-mcp,ci-mcp-deniedandci-vis-default. The publish usescurl -sfand fails loudlyrather than letting a later grep report the wrong cause.
example.com, and the suite deletes it in thesame block. No key, cookie or token enters the new lines.
adds is that the MCP transport carries the field, which nothing checked.
than appending a new clause at the end, and says plainly when the field is absent.
Nothing was filed. Nothing was fixed outside the item.