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>
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.
This pull request extends the Slack Lists and Files remote-API tests so column/share sub-properties that were never being recorded get exercised, letting the automatic property-detection mechanism pick them up.
Context
Two response shapes were losing detail because the remote-API tests never produced the state that makes Slack return the fields:
fullSlackListsWorkflowonly createdtext/date/select/usercolumns with no option variants, so the recordedslackLists.*samples never containedoptions.precision(number),options.date_format(date), oroptions.emoji/options.max(rating).files.infocoverage uploaded/shared a file but never replied in its thread, so the recordedshares.publicentry lacked the reply-dependent fieldslatest_reply,reply_count,reply_users,reply_users_count.Downstream, the node-slack-sdk response-type generator infers types from these samples, so it produced thinner types that dropped those documented fields.
Changes
slacklists_Testdue_datecolumn adateFormatoption -> recordsdate_format.numbercolumn (estimate) withprecision-> recordsprecision.ratingcolumn (priority) withemojiandmax-> recordsemojiandmax.files_Testts, posts a threaded reply, then readsfiles.infountil the share detail reflects the reply and assertslatest_reply/reply_count/reply_users/reply_users_countare present.The
ListColumnOptionsandFile.ShareDetailmodels already support all of these fields; this only exercises them.date_last_sharedis intentionally not asserted — it is a nullable, conditionally-set field the API does not reliably return.Category
Testing
Testsworkflow against a test workspace, then confirm the regenerated samples now contain the new properties:json-logs/samples/api/slackLists.create.json->options.precision,options.date_format,options.emoji,options.maxjson-logs/samples/api/files.info.json->shares.public[].latest_reply,reply_count,reply_users,reply_users_countRequirements
Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you agree to those rules.