Skip to content

test(coderd/x/chatd/chatprompt): table the text and error tool result rows in memory - #30945

Draft
ibetitsmike wants to merge 3 commits into
mainfrom
mike/chatprompt-media-text-rows-in-memory
Draft

ibetitsmike wants to merge 3 commits into
mainfrom
mike/chatprompt-media-text-rows-in-memory

Conversation

@ibetitsmike

@ibetitsmike ibetitsmike commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

TestMediaToolResultRoundTrip wrote a chat and two messages to PostgreSQL for every tool result codec case, although the read policy under test (toolResultPartToMessagePart) is pure. This PR moves the eight text-fallback and error cases into TestMediaToolResultConversion, an in-memory table, and deletes their database subtests: TextResultStaysText, MissingMimeTypeStaysText, MissingDataStaysText, ErrorResultStaysError, NonMediaResultTypeStaysText and the three IsMediaTrueBut* cases. The table encodes the same assistant tool call and tool result with MarshalParts and CurrentContentVersion, then runs ConvertMessagesWithFiles. The layer above moves the media rows.

Why it is safe

  • Every row keeps its assertions. Each row also gains checks for role, part count, ToolCallID and ProviderExecuted=false, and text rows compare the output to a literal with JSONEq. ErrorResultStaysError compares the whole error message, and IsMediaTrueButMissingMimeType carries valid base64, so it fails on the mime_type check itself rather than in the base64 branch.
  • I ran 24 mutants of chatprompt.go with go test -overlay against the tests on main, on this PR and on test(coderd/x/chatd/chatprompt): table the media codec matrix in memory #30946 (list below). Every mutant that main catches, this PR catches too. Three that survive on main fail here, and one (IsMedia winning over IsError) survives everywhere.
Mutants (main / this PR / #30946)
  • Survive on main, caught here and in test(coderd/x/chatd/chatprompt): table the media codec matrix in memory #30946: no mime_type check; placeholder for every IsMedia text fallback; error-string extraction disabled.
  • Survives on all three: IsMedia wins over IsError.
  • Caught on all three: IsMedia gate always on; gate always off; no data check; unmarshal failure treated as media; error branch disabled; media Text, MediaType or Data dropped; ProviderExecuted forced true for media, text or error results; text or media ToolCallID dropped; base64 check skipped; first attachment chosen regardless of media type; attachment file ID not mirrored; write path drops the media flag, the error flag or the media text; error message replaced.
  • A garbage copy of chatprompt.go fails to build under each overlay, so the overlay applies.

Review focus

The shared assertions in the table loop. The rows also stop passing through PostgreSQL, whose jsonb normalizes key order, whitespace, number forms and escapes, so production decodes different bytes than these rows feed in, with the same meaning. The deleted subtests and the new rows both compare with JSONEq, and the round trip the stack keeps covers media results only.

Validation

  • go test ./coderd/x/chatd/chatprompt/ -count=1 -p 4 -parallel 4: ok on main and on this PR
  • go vet ./coderd/x/chatd/chatprompt/: ok
  • golangci-lint run --fix=false ./coderd/x/chatd/chatprompt/: 0 issues
  • pre-commit hook: passed

Stack

The stack moves the tool result codec matrix out of PostgreSQL and keeps one storage round trip.

  1. test(coderd/x/chatd/chatprompt): table the text and error tool result rows in memory #30945 table the text and error tool result rows in memory (this PR)
  2. test(coderd/x/chatd/chatprompt): table the media codec matrix in memory #30946 table the media codec matrix in memory

Xum, an AI agent, opened this PR for @ibetitsmike and wrote this description.

@ibetitsmike
ibetitsmike added this pull request to stack #30947 October 18, 2026 15:27
@ibetitsmike ibetitsmike changed the title mike/chatprompt media text rows in memory test(coderd/x/chatd/chatprompt): table the text and error tool result rows in memory Oct 18, 2026
@ibetitsmike

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-18T17:50:08.673236Z 5c376d2 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🚀

Reviewed commit: c3b899bf41

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…error and mime checks

ErrorResultStaysError now compares the whole error message, so it fails when error extraction returns the JSON wrapper. IsMediaTrueButMissingMimeType now carries valid base64, so it fails only when the mime check is missing.
@ibetitsmike

Copy link
Copy Markdown
Collaborator Author

@codex review

Xum, an AI agent, posted this comment for @ibetitsmike.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

Reviewed commit: 5c376d2f02

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant