Conversation
…etection The slackLists workflow test only created text/date/select/user columns without option variants, so the recorded slackLists.* samples never contained the options.precision (number), options.date_format (date), or options.emoji/options.max (rating) properties. Downstream, the node-slack-sdk generator therefore inferred a thinner SchemaOptions that dropped those fields. Add a number column (precision), give the date column a dateFormat, and add a rating column (emoji, max) to fullSlackListsWorkflow so the live response echoes these options back and the detection mechanism records them.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #1632 +/- ##
============================================
- Coverage 73.24% 72.99% -0.25%
- Complexity 4522 4523 +1
============================================
Files 478 479 +1
Lines 14314 14365 +51
Branches 1491 1503 +12
============================================
+ Hits 10484 10486 +2
- Misses 2940 2989 +49
Partials 890 890
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. |
…tail The existing files.info coverage uploads/shares a file but never replies in its thread, so the recorded shares.public entry lacked the reply-dependent fields (latest_reply, reply_count, reply_users, reply_users_count). Downstream, the node-slack-sdk generator therefore inferred a share shape missing those properties. Add a test that uploads a file to a channel, polls files.info for the share ts, posts a threaded reply, then polls files.info until the share detail reflects the reply and asserts latest_reply/reply_count/reply_users are present. date_last_shared is intentionally not asserted: it is a nullable, conditionally-set field the API does not reliably return.
…ist options Extend the SlackLists schema so every ListColumnOptions field the API returns is present in the recorded sample, giving the downstream node-slack-sdk types full parity with the hand-authored options shape: - rating column now sets emoji_team_id (resolved from auth.test team id) - user column now sets notify_users and default_value_typed (the user variant; the select variant is rejected by slackLists.create with internal_error) Resolves the user id and team id at runtime via auth.test so the typed default and emoji_team_id carry valid values the API will echo back.
is_connector_bot is returned only by bots.info (not users.list/users.info) and only for Slack-certified Workflow Builder connector apps. Add the field to BotsInfoResponse.Bot and a remote-API test that finds an installed connector bot and reads bots.info so the recorded sample carries the property; the test no-ops when no connector app is installed. Confirmed against live data: for a Google Sheets connector install, bots.info returns is_connector_bot=true while users.info/users.list omit it entirely.
…item assertion Detection run surfaced properties not yet modeled: - BotsInfoResponse.Bot: is_workflow_bot, is_legacy_workflow_bot (both present in the bots.info sample alongside is_connector_bot) - ListColumnOptions: emoji_url (rating/vote emoji URL) - Actions.App: mcp_slack_todos_list_tool_called audit action Also fix slacklists fullSlackListsWorkflow: the enriched schema (columns with typed defaults) makes item creation return more than one field, so locate the task_name field by column id instead of asserting an exact field count.
Diffing the live audit/v1/actions metadata against Actions.java surfaced two undeclared actions beyond mcp_slack_todos_list_tool_called: - salesforce_mcp_server_tool_default_updated - salesforce_mcp_server_tool_permissions_deleted With these, all 734 live audit actions are declared (verified: 0 missing).
Detection run surfaced an unknown `order` property on the list view grouping object (com.slack.api.model.list.ListView$Grouping) returned by files.info for a list-backed file. Add it so the grouping shape parses and is recorded.
…lculations, options)
Detection surfaced order (an array of {select:[...]}) on grouping, then sorts,
then info_column_filters on ListView. Rather than peel one field per run, typed
the complete view shape from the list_view.json output schema:
- Grouping.order -> List<GroupingOrder> ({select: List<String>})
- sorts -> List<Sort> ({key, ascending, column_id})
- info_column_filters -> List<InfoColumnFilter> (distinct from filters: no column_id)
- calculations -> List<Calculation> ({key, operator, column_id})
- options -> Options ({cover_field, cover_fit, calendar_field})
- is_template_initial_view, row_height
Verified locally: files_Test#describe parses clean against live list data.
The Slack API returns `grouping.order` as either an empty string (`""`) when no grouping is configured, or as a JSON array of objects when active. The previous model typed it as `List<GroupingOrder>` which choked on the string variant. Add a custom Gson deserializer that coerces string values to null and parses arrays normally. Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
Detection surfaced an unknown `agent_session` property on Message objects
returned by chat/conversations methods (agent DM / session channels work).
Add AgentSession ({status, agent_bot_user_ids, agent_statuses, title,
date_status_processing_expire}) and its nested AgentStatus
({agent_bot_user_id, status, is_stoppable, date_status_processing_expire})
so the message shape parses and is recorded.
Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
Detection surfaced an unknown audit action `slack_ai_mcp_model_context_updated` (the bot recorded it into json-logs/raw/audit/v1/actions.json in 2d2d9b0, but the Java Actions constant was missing). Add it to the slack_ai_mcp_* cluster so ApiTest.getActions_detectingNewOnes parses clean. Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
|
LGTM — suitable to merge. Reviewed the full
Verified: compiles clean across One follow-up thought (non-blocking): |
Periodic refresh of the Web API response models and recorded samples as of 2026-08-21, plus test changes that make the remote-API tests exercise state the API only returns under specific conditions (so the automatic property-detection mechanism records the fields, and the downstream node-slack-sdk type generator infers complete types from the samples).
Response model changes
bots.info— detectis_connector_boton the bot object (alongside the existing workflow-bot flags), with doc comments describing when each is returned.Message— add theagent_sessiondetail (status,agent_bot_user_ids) surfaced on messages in agent sessions.ListColumnOptionsgainsemoji_url(rating/vote columns);ListView.Groupingnow deserializes via a dedicated adapter (GsonListViewGroupingFactory, registered inGsonFactory) to tolerate the field being either a string or an array.Actions— add newly-observed action names (MCP-related:slack_ai_mcp_model_context_updated,mcp_slack_todos_list_tool_called,app_mcp_tool_default_acl_changed,salesforce_mcp_server_tool_default_updated,salesforce_mcp_server_tool_permissions_deleted).Test changes (so samples record conditional fields)
Two response shapes were losing detail because the remote-API tests never produced the state that makes Slack return the fields:
slacklists_Test— column option variants were never created, soslackLists.*samples never containedoptions.precision(number),options.date_format(date), oroptions.emoji/options.max(rating). Now gives thedue_datecolumn adateFormat, adds anumbercolumn (estimate) withprecision, and aratingcolumn (priority) withemoji+max. Also exercisesemoji_team_id,notify_users, anddefault_value_typed.files_Test— thefiles.infocoverage uploaded/shared a file but never replied in its thread, soshares.publiclacked the reply-dependent fields. Now uploads to a channel, waits for the sharets, posts a threaded reply, and readsfiles.infountil the share detail reflects it — assertinglatest_reply/reply_count/reply_users/reply_users_count. (date_last_sharedis intentionally not asserted — nullable, conditionally set, not reliably returned.)bots_Test— exercisesis_connector_botdetection.Sample regeneration
Recorded
json-logs/samples/api/*.jsonrefreshed acrossbots.info,chat.*(incl.chat.stopStream),conversations.*,files.*,pins.list,reactions.*,search.*, andslackLists.*, plus the auditactions.json.Category
Testing
Dispatch the java-slack-sdk-runner
Testsworkflow against a test workspace, then confirm the regenerated samples contain the new properties — e.g.slackLists.create.json->options.precision/options.date_format/options.emoji/options.max, andfiles.info.json->shares.public[].latest_reply/reply_count/reply_users/reply_users_count.Requirements
Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you agree to those rules.