Skip to content

feat(mcp): verified shipment and container filtering - #408

Closed
dodeja wants to merge 3 commits into
mainfrom
mcp-preview
Closed

dodeja wants to merge 3 commits into
mainfrom
mcp-preview

Conversation

@dodeja

@dodeja dodeja commented Oct 7, 2026 •

Copy link
Copy Markdown
Member

Summary

Promotes mcp-preview to main. It carries #397 (verified shipment and container filtering), which merged into mcp-preview and was live-tested on mcp.t49.dev.

Live testing on mcp.t49.dev (prod backend)

  • Common and advanced filters, relative dates, date ranges, sort, and shipment pagination behaved as specified.
  • Invalid inputs (duplicate filter, impossible date, unknown status, tags_and without tags, relative created_at, one-sided last_free_day_on) were rejected before any API call.
  • Two backend bugs surfaced and are fixed in Terminal49/t49#4200: container lists omit next/last links, and LFD filters ignore terminal-reported LFDs.

Follow-up

#403 adds eval coverage for this surface and runs the eval against PR previews. It is retargeted to main and should merge after this.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

RetriggerConfidence Score: 4/5

The PR appears safe to merge, with two non-blocking fixes for public filter types and comma-separated text checks.

Fix All in CodexFindings

  1. P2 Supported status arrays fail compilation ▶
  2. P2 Invalid alternatives skip local checks ▶
Fix with agent prompt
### Issue 1
sdks/typescript-sdk/scripts/generate-filter-types.mjs:31
`ContainerStatusFilter` allows only bare status names inside arrays. TypeScript therefore rejects `current_status: ['@exists']`, `['=available']`, and `['available,on_ship']`, even though the runtime accepts them and the MCP tests explicitly cover them. SDK users must bypass the public types to send these supported filters. Generate an array member type that includes supported status expressions, then regenerate the public types.

### Issue 2
sdks/typescript-sdk/src/client/filter-validation.ts:197-209
`validateString` skips the text grammar whenever a value contains a comma. For example, `number: 'MSCU1234567,>2026-10-05'` passes because the operator check examines only the start of the whole string. The same comparison is rejected as a single value. This lets malformed alternatives reach the API instead of producing the promised pre-request error. Check each comma-separated term for unsupported operators and punctuation, and add tests for malformed later terms.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Summary

Adds verified shipment and container filters across OpenAPI, the SDK, and MCP.

  • Generates typed filter catalogs and rejects invalid inputs before requests.
  • Adds sorting and page metadata while keeping each MCP call bounded.
  • Also adds custom-field detail loading, documentation search, and credential scrubbing.
  • Two non-blocking fixes remain: status-array types and checks for comma-separated text.

Greptile automatically discovered a related ticket that helped explain the purpose of this PR: let MCP users narrow shipment and container lists with API filters and sorting.

Acknowledgments: dodeja explicitly identified missing container pagination links and terminal-reported LFD filtering as backend bugs fixed in Terminal49/t49#4200. These are not reported here. dodeja also stated that eval coverage follows in #403.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Spec["OpenAPI filter catalog"] --> SDKTypes["Generated SDK types"]
  Spec --> MCPSchemas["Generated MCP schemas"]
  Input["Common and advanced filters"] --> MCPSchemas
  MCPSchemas --> SDKCheck["SDK checks and query encoding"]
  SDKTypes --> SDKCheck
  SDKCheck --> API["Terminal49 API"]
  API --> Page["One mapped page"]
  Page --> Metadata["Applied filters and next-page metadata"]
Loading

Reviews (1) · Last reviewed commit: "feat(mcp): add verified shipment and con..." · Reviewed by Greptile

* chore: unify monorepo on Vite+ 0.3.3 (#381)

* chore: unify monorepo on Vite+ 0.3.2

Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* fix: preserve cold workspace build ordering

Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* ci: verify stacked agent trust PR

Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* docs: fix passive voice and phrasing in guide pages (#385)

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>

* docs: document line hold type (#314)

* feat(mcp): expose custom fields in get_container and get_shipment_details (#386)

* feat(mcp): expose custom fields in get_container and get_shipment_details

Account-defined custom fields (PO number, project manager, ...) were not
reachable through the MCP server, so assistants answered that the connector
had no such data. The API already serves them from the custom_fields
sub-resource, which only accepts a signed-in user.

SDK: containers.customFields and shipments.customFields now request the
definition sideload and map each value to { slug, name, value, displayValue,
dataType }.

MCP: get_container accepts include ['custom_fields'] and get_shipment_details
accepts include_custom_fields; both return custom_fields: [{ name, slug,
value, display_value, data_type }] and report an API-key credential as a note
instead of failing the call.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(sdk): regenerate reference for CustomField

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(mcp): report custom field access and load state accurately

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* docs: update migration guides for self-serve API trial (#380)

* docs: explain self-serve API trial in migration guides

* docs: align API access instructions with self-serve trial

* fix(ci): stop outsider content from steering the @claude agent (#390)

The @claude workflow only checked who wrote the triggering comment. On
this public repo anyone can open an issue or fork PR, and its body,
diff, and comments reach the prompt of an agent holding a write-scoped
GitHub App token. In git CLI mode the pinned action also writes that
token into the origin remote URL in .git/config, readable by the
agent's Read tool, and the explicit Write/Edit grant allowed edits
outside the workspace.

- Require the issue/PR author to be OWNER, MEMBER, or COLLABORATOR too.
- Feed the agent only comments and reviews from trusted authors (plus
  named review bots) via include_comments_by_actor; refuse fork PRs.
  The pre-step fails closed on API errors.
- Commit through the GitHub API (use_commit_signing) so no token is
  written to the workspace; checkout without persisted credentials.
- Drop blanket Write/Edit; deny Bash, reads of .git, /proc and git
  credential files, and edits to .git and .github/workflows.
- Correct the system prompt's shell claim and mark non-request content
  as untrusted data.
- Pin actions/checkout by SHA.

Refs DEV-13107

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mcp): strip credential headers from Sentry events (#389)

Sentry's default RequestData integration copies every incoming request
header and cookie into event.request on each error and transaction
event, regardless of sendDefaultPii. On the gateway that is the caller's
Authorization header, i.e. a customer's Terminal49 API key in
pass-through mode. Its built-in deny list only covers span attributes
and misses names such as x-vercel-protection-bypass,
x-vercel-proxy-signature, and arbitrary cookie names.

Scrub request headers, request cookies, and header span attributes in
beforeSend and beforeSendTransaction with one policy, and cover it with
a test that runs the real SDK pipeline against a loopback server and
fails without the hooks.

Refs DEV-13105

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* docs: improve SEO metadata on recently changed pages (#391)

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>

* chore(deps): bump the npm-security group across 1 directory with 9 updates (#373)

* chore(deps): bump the npm-security group across 1 directory with 9 updates

Bumps the npm-security group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [axios](https://github.com/axios/axios) | `1.16.1` | `1.20.0` |
| [fast-uri](https://github.com/fastify/fast-uri) | `3.1.2` | `3.1.8` |
| [hono](https://github.com/honojs/hono) | `4.12.26` | `4.13.9` |
| [ip-address](https://github.com/beaugunderson/ip-address) | `10.2.0` | `10.7.2` |
| [linkify-it](https://github.com/markdown-it/linkify-it) | `5.0.1` | `5.0.2` |
| [nanoid](https://github.com/ai/nanoid) | `3.3.11` | `3.3.19` |
| [postcss](https://github.com/postcss/postcss) | `8.5.14` | `8.5.28` |
| [socket.io-parser](https://github.com/socketio/socket.io) | `4.2.6` | `4.2.7` |
| [tar](https://github.com/isaacs/node-tar) | `7.5.15` | `7.5.21` |



Updates `axios` from 1.16.1 to 1.20.0
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](axios/axios@v1.16.1...v1.20.0)

Updates `fast-uri` from 3.1.2 to 3.1.8
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](fastify/fast-uri@v3.1.2...v3.1.8)

Updates `hono` from 4.12.26 to 4.13.9
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.12.26...v4.13.9)

Updates `ip-address` from 10.2.0 to 10.7.2
- [Release notes](https://github.com/beaugunderson/ip-address/releases)
- [Commits](beaugunderson/ip-address@v10.2.0...v10.7.2)

Updates `linkify-it` from 5.0.1 to 5.0.2
- [Changelog](https://github.com/markdown-it/linkify-it/blob/master/CHANGELOG.md)
- [Commits](markdown-it/linkify-it@5.0.1...5.0.2)

Updates `nanoid` from 3.3.11 to 3.3.19
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](ai/nanoid@3.3.11...3.3.19)

Updates `postcss` from 8.5.14 to 8.5.28
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](postcss/postcss@8.5.14...8.5.28)

Updates `socket.io-parser` from 4.2.6 to 4.2.7
- [Release notes](https://github.com/socketio/socket.io/releases)
- [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io/compare/socket.io-parser@4.2.6...socket.io-parser@4.2.7)

Updates `tar` from 7.5.15 to 7.5.21
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](isaacs/node-tar@v7.5.15...v7.5.21)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.20.0
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: fast-uri
  dependency-version: 3.1.8
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: hono
  dependency-version: 4.13.8
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: ip-address
  dependency-version: 10.7.2
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: linkify-it
  dependency-version: 5.0.2
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: nanoid
  dependency-version: 3.3.19
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: postcss
  dependency-version: 8.5.28
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: socket.io-parser
  dependency-version: 4.2.7
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: tar
  dependency-version: 7.5.21
  dependency-type: indirect
  dependency-group: npm-security
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* fix(deps): repair Node 24 frozen installs and drop generated churn

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* chore(deps): apply js-yaml security update to root workspace lock (#318)

* chore(deps): bump js-yaml

Bumps the npm_and_yarn group with 1 update in the /sdks/typescript-sdk directory: [js-yaml](https://github.com/nodeca/js-yaml).


Updates `js-yaml` from 4.2.0 to 4.3.1
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.1/CHANGELOG.md)
- [Commits](nodeca/js-yaml@4.2.0...4.3.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* chore(deps): keep generated collection unchanged in security update

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* chore: release main (#343)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* chore(deps): bump the npm-security group across 1 directory with 2 updates (#395)

Bumps the npm-security group with 2 updates in the / directory: [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) and [markdown-it](https://github.com/markdown-it/markdown-it).


Updates `http-cache-semantics` from 4.2.0 to 4.3.0
- [Commits](https://github.com/kornelski/http-cache-semantics/commits)

Updates `markdown-it` from 14.2.0 to 14.3.2
- [Changelog](https://github.com/markdown-it/markdown-it/blob/14.3.2/CHANGELOG.md)
- [Commits](markdown-it/markdown-it@14.2.0...14.3.2)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-version: 4.3.0
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: markdown-it
  dependency-version: 14.3.2
  dependency-type: indirect
  dependency-group: npm-security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump the npm-security group across 1 directory with 3 updates (#394)

Bumps the npm-security group with 3 updates in the / directory: [http-cache-semantics](https://github.com/kornelski/http-cache-semantics), [markdown-it](https://github.com/markdown-it/markdown-it) and [source-map-js](https://github.com/7rulnik/source-map-js).


Updates `http-cache-semantics` from 4.2.0 to 4.3.0
- [Commits](https://github.com/kornelski/http-cache-semantics/commits)

Updates `markdown-it` from 14.2.0 to 14.3.2
- [Changelog](https://github.com/markdown-it/markdown-it/blob/14.3.2/CHANGELOG.md)
- [Commits](markdown-it/markdown-it@14.2.0...14.3.2)

Updates `source-map-js` from 1.2.1 to 1.2.2
- [Release notes](https://github.com/7rulnik/source-map-js/releases)
- [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md)
- [Commits](7rulnik/source-map-js@v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-version: 4.3.0
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: markdown-it
  dependency-version: 14.3.2
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: source-map-js
  dependency-version: 1.2.2
  dependency-type: indirect
  dependency-group: npm-security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates (#393)

Bumps the npm_and_yarn group with 3 updates in the /sdks/typescript-sdk directory: [js-yaml](https://github.com/nodeca/js-yaml), [markdown-it](https://github.com/markdown-it/markdown-it) and [source-map-js](https://github.com/7rulnik/source-map-js).


Updates `js-yaml` from 4.2.0 to 4.3.2
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.2/CHANGELOG.md)
- [Commits](nodeca/js-yaml@4.2.0...4.3.2)

Updates `markdown-it` from 14.2.0 to 14.3.2
- [Changelog](https://github.com/markdown-it/markdown-it/blob/14.3.2/CHANGELOG.md)
- [Commits](markdown-it/markdown-it@14.2.0...14.3.2)

Updates `source-map-js` from 1.2.1 to 1.2.2
- [Release notes](https://github.com/7rulnik/source-map-js/releases)
- [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md)
- [Commits](7rulnik/source-map-js@v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: markdown-it
  dependency-version: 14.3.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: source-map-js
  dependency-version: 1.2.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(mcp): search public docs through Mintlify REST and MCP (#387)

* feat(mcp): add search_docs tool backed by the Mintlify docs MCP

Forwards the query to the MCP server Mintlify hosts for terminal49.com/docs
(search_terminal49), so results always match the live public docs. Adds the
tool to the ChatGPT submission listing, which the annotations test locks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(mcp): include search_docs in protocol smoke checks

* feat(mcp): search_docs uses Mintlify's REST search API when a key is set (#388)

With MINTLIFY_ASSISTANT_API_KEY, search_docs calls the documented
POST /discovery/v1/search/terminal49 endpoint. Without it, the tool keeps
forwarding to Mintlify's hosted docs MCP.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mcp): validate docs links and preserve SSE response boundaries

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* feat(sdk): complete verified shipment and container filters (#396)

* chore(sdk): generate filter contracts and preserve docs metadata

* docs: document verified shipment and container filters

* feat(sdk): support validated shipment and container filters

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* fix(tooling): disable optional Postman parameters by default

* fix(docs): restore shipment party flag and container schema

* fix(sdk): reject malformed list filter expressions before requests

* chore: Auto-generate Postman collection from openapi.json [skip ci]

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* chore(mcp): generate filter schemas from the public API contract

* feat(mcp): add verified shipment and container filters

* docs(mcp): document filtered worklists and pagination

* fix(tooling): preserve SDK status expressions and identifier trimming

* fix(mcp): reject competing tag aliases and preserve valid inputs

* docs(mcp): clarify shipment tag aliases

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
Co-authored-by: Matt Turner <matt@terminal49.com>
Co-authored-by: Maurycy Pawłowski-Wieroński <maurycy@maurycy.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: alosec <alex.garcia@terminal49.com>
@mintlify

mintlify Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
terminal49 🟢 Ready View Preview Oct 8, 2026, 6:23 PM

@vercel

vercel Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
api Ready Ready Preview Oct 8, 2026 6:58pm UTC

Request Review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 7, 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-08T19:01:17.110443Z 9df8c29 New commits
ℹ️ 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 chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a79f34c56a

ℹ️ 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".

output += `/** Comparison expressions are validated at runtime; arrays combine bounds with AND. */\nexport type DateFilter = string | readonly string[];\n`;
output += `/** Generic string arrays use AND. Use comma-separated literals for OR unless specified otherwise. */\nexport type StringFilter = string | readonly string[];\n`;
output += `export type PartyFilter = StringFilter | { value: StringFilter; operator?: 'any' | 'all' };\n`;
output += `export type ContainerStatusFilter = ContainerStatus | \`=\${ContainerStatus}\` | \`\${ContainerStatus},\${string}\` | '@exists' | '@not_exists' | readonly ContainerStatus[];\n`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Allow status expressions inside status arrays

When a TypeScript consumer uses a documented and runtime-supported array such as { current_status: ['@exists'] } or { current_status: ['=available'] }, this declaration rejects it because the array branch permits only bare ContainerStatus values, even though buildFilterQuery and the MCP schema accept these expressions in arrays. Define a reusable status-expression type and use it for both scalar and array forms so valid filters do not require a cast, then regenerate the generated declaration.

AGENTS.md reference: AGENTS.md:L51-L54

Useful? React with 👍 / 👎.

output += `/** Comparison expressions are validated at runtime; arrays combine bounds with AND. */\nexport type DateFilter = string | readonly string[];\n`;
output += `/** Generic string arrays use AND. Use comma-separated literals for OR unless specified otherwise. */\nexport type StringFilter = string | readonly string[];\n`;
output += `export type PartyFilter = StringFilter | { value: StringFilter; operator?: 'any' | 'all' };\n`;
output += `export type ContainerStatusFilter = ContainerStatus | \`=\${ContainerStatus}\` | \`\${ContainerStatus},\${string}\` | '@exists' | '@not_exists' | readonly ContainerStatus[];\n`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Supported status arrays fail compilation

ContainerStatusFilter allows only bare status names inside arrays. TypeScript therefore rejects current_status: ['@exists'], ['=available'], and ['available,on_ship'], even though the runtime accepts them and the MCP tests explicitly cover them. SDK users must bypass the public types to send these supported filters. Generate an array member type that includes supported status expressions, then regenerate the public types.

Prompt To Fix With AI
This is a comment left during a code review.
Path: sdks/typescript-sdk/scripts/generate-filter-types.mjs
Line: 31

Comment:
**Supported status arrays fail compilation**

`ContainerStatusFilter` allows only bare status names inside arrays. TypeScript therefore rejects `current_status: ['@exists']`, `['=available']`, and `['available,on_ship']`, even though the runtime accepts them and the MCP tests explicitly cover them. SDK users must bypass the public types to send these supported filters. Generate an array member type that includes supported status expressions, then regenerate the public types.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Codex Fix in Claude Code

Comment on lines +197 to +209
if (expression.includes(',')) {
if (
/^[=<>]/.test(expression) ||
expression.includes('~') ||
expression.split(',').some((v) => v.startsWith('@') && !PRESENCE.has(v))
)
invalid(
key,
'use comma-separated literals or supported presence markers without a comparison operator for OR',
);
if (expression.split(',').some((v) => !v.trim()))
invalid(key, 'empty alternatives are not allowed');
continue;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Invalid alternatives skip local checks

validateString skips the text grammar whenever a value contains a comma. For example, number: 'MSCU1234567,>2026-10-05' passes because the operator check examines only the start of the whole string. The same comparison is rejected as a single value. This lets malformed alternatives reach the API instead of producing the promised pre-request error. Check each comma-separated term for unsupported operators and punctuation, and add tests for malformed later terms.

Prompt To Fix With AI
This is a comment left during a code review.
Path: sdks/typescript-sdk/src/client/filter-validation.ts
Line: 197-209

Comment:
**Invalid alternatives skip local checks**

`validateString` skips the text grammar whenever a value contains a comma. For example, `number: 'MSCU1234567,>2026-10-05'` passes because the operator check examines only the start of the whole string. The same comparison is rejected as a single value. This lets malformed alternatives reach the API instead of producing the promised pre-request error. Check each comma-separated term for unsupported operators and punctuation, and add tests for malformed later terms.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Codex Fix in Claude Code

… summarize_containers (#398)

* feat(mcp): list tools default to actively tracked records, like the dashboard

Containers and shipments lists now add actively_tracked=true unless the caller
sets actively_tracked or tracking_stopped, or passes include_stopped_tracking
for history. Tool descriptions carry the dashboard definitions for ready for
pickup, at risk and discharged-not-picked-up, and ask for the set's total
before any narrowing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(mcp): compact container rows and a summarize_containers tool

- list_containers returns compact rows by default (number, status,
  availability, POD terminal, key dates, LFD, active holds, fees, and the
  shipment's BL, carrier and POD ETA); view: full keeps every attribute.
- summarize_containers counts the filtered set by POD terminal, status,
  shipping line, hold type, LFD date or arrival date. The API has no
  aggregation endpoint, so the MCP pages the list (up to max_rows) and counts.
- The SDK's mapped container includes the shipment's POD, vessel and ETA.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(mcp): list_parties resolves company names to party IDs

The container party filter takes IDs, so "containers for customer Acme"
or "what is Ray Drayage picking up" had no path from a name to a
filter. list_parties loads the account's parties (the API has no name
search and ignores unknown params), ranks exact, prefix, then contains
matches ignoring case and punctuation, and returns id and name with the
roles to use in advanced_filters.parties.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: Auto-generate Postman collection from openapi.json [skip ci]

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3422779c25

ℹ️ 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".

Comment on lines +71 to +72
tools.length !== 11 ||
!tools.some((tool) => tool.name === 'search_docs')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Update protocol smoke checks for all 13 tools

The mcp-protocol-compat workflow runs this script after server.ts now registers 13 tools, a count also asserted by protocol-compat.test.ts, so client.listTools() returns 13 and this condition throws for every protocol-version matrix entry. http-protocol-smoke.mjs contains the same stale count and will likewise reject a valid preview; update both smoke checks to expect the complete tool set.

Useful? React with 👍 / 👎.

Comment on lines +197 to +201
if (expression.includes(',')) {
if (
/^[=<>]/.test(expression) ||
expression.includes('~') ||
expression.split(',').some((v) => v.startsWith('@') && !PRESENCE.has(v))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Validate each comma-separated exact-filter term

For exact string filters containing commas, this branch checks comparison operators only at the beginning of the entire expression and then skips STRING_EXPRESSION validation. Consequently an input such as number: 'MSCU1234567,>2026-10-05' or number: 'MSCU1234567,A/B' reaches the API even though the same malformed term is rejected alone and the SDK promises pre-request validation; split the expression and validate every alternative before continuing.

Useful? React with 👍 / 👎.

* chore: unify monorepo on Vite+ 0.3.3 (#381)

* chore: unify monorepo on Vite+ 0.3.2

Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* fix: preserve cold workspace build ordering

Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* ci: verify stacked agent trust PR

Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* docs: fix passive voice and phrasing in guide pages (#385)

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>

* docs: document line hold type (#314)

* feat(mcp): expose custom fields in get_container and get_shipment_details (#386)

* feat(mcp): expose custom fields in get_container and get_shipment_details

Account-defined custom fields (PO number, project manager, ...) were not
reachable through the MCP server, so assistants answered that the connector
had no such data. The API already serves them from the custom_fields
sub-resource, which only accepts a signed-in user.

SDK: containers.customFields and shipments.customFields now request the
definition sideload and map each value to { slug, name, value, displayValue,
dataType }.

MCP: get_container accepts include ['custom_fields'] and get_shipment_details
accepts include_custom_fields; both return custom_fields: [{ name, slug,
value, display_value, data_type }] and report an API-key credential as a note
instead of failing the call.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(sdk): regenerate reference for CustomField

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* fix(mcp): report custom field access and load state accurately

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* docs: update migration guides for self-serve API trial (#380)

* docs: explain self-serve API trial in migration guides

* docs: align API access instructions with self-serve trial

* fix(ci): stop outsider content from steering the @claude agent (#390)

The @claude workflow only checked who wrote the triggering comment. On
this public repo anyone can open an issue or fork PR, and its body,
diff, and comments reach the prompt of an agent holding a write-scoped
GitHub App token. In git CLI mode the pinned action also writes that
token into the origin remote URL in .git/config, readable by the
agent's Read tool, and the explicit Write/Edit grant allowed edits
outside the workspace.

- Require the issue/PR author to be OWNER, MEMBER, or COLLABORATOR too.
- Feed the agent only comments and reviews from trusted authors (plus
  named review bots) via include_comments_by_actor; refuse fork PRs.
  The pre-step fails closed on API errors.
- Commit through the GitHub API (use_commit_signing) so no token is
  written to the workspace; checkout without persisted credentials.
- Drop blanket Write/Edit; deny Bash, reads of .git, /proc and git
  credential files, and edits to .git and .github/workflows.
- Correct the system prompt's shell claim and mark non-request content
  as untrusted data.
- Pin actions/checkout by SHA.

Refs DEV-13107

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mcp): strip credential headers from Sentry events (#389)

Sentry's default RequestData integration copies every incoming request
header and cookie into event.request on each error and transaction
event, regardless of sendDefaultPii. On the gateway that is the caller's
Authorization header, i.e. a customer's Terminal49 API key in
pass-through mode. Its built-in deny list only covers span attributes
and misses names such as x-vercel-protection-bypass,
x-vercel-proxy-signature, and arbitrary cookie names.

Scrub request headers, request cookies, and header span attributes in
beforeSend and beforeSendTransaction with one policy, and cover it with
a test that runs the real SDK pipeline against a loopback server and
fails without the hooks.

Refs DEV-13105

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* docs: improve SEO metadata on recently changed pages (#391)

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>

* chore(deps): bump the npm-security group across 1 directory with 9 updates (#373)

* chore(deps): bump the npm-security group across 1 directory with 9 updates

Bumps the npm-security group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [axios](https://github.com/axios/axios) | `1.16.1` | `1.20.0` |
| [fast-uri](https://github.com/fastify/fast-uri) | `3.1.2` | `3.1.8` |
| [hono](https://github.com/honojs/hono) | `4.12.26` | `4.13.9` |
| [ip-address](https://github.com/beaugunderson/ip-address) | `10.2.0` | `10.7.2` |
| [linkify-it](https://github.com/markdown-it/linkify-it) | `5.0.1` | `5.0.2` |
| [nanoid](https://github.com/ai/nanoid) | `3.3.11` | `3.3.19` |
| [postcss](https://github.com/postcss/postcss) | `8.5.14` | `8.5.28` |
| [socket.io-parser](https://github.com/socketio/socket.io) | `4.2.6` | `4.2.7` |
| [tar](https://github.com/isaacs/node-tar) | `7.5.15` | `7.5.21` |



Updates `axios` from 1.16.1 to 1.20.0
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](axios/axios@v1.16.1...v1.20.0)

Updates `fast-uri` from 3.1.2 to 3.1.8
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](fastify/fast-uri@v3.1.2...v3.1.8)

Updates `hono` from 4.12.26 to 4.13.9
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](honojs/hono@v4.12.26...v4.13.9)

Updates `ip-address` from 10.2.0 to 10.7.2
- [Release notes](https://github.com/beaugunderson/ip-address/releases)
- [Commits](beaugunderson/ip-address@v10.2.0...v10.7.2)

Updates `linkify-it` from 5.0.1 to 5.0.2
- [Changelog](https://github.com/markdown-it/linkify-it/blob/master/CHANGELOG.md)
- [Commits](markdown-it/linkify-it@5.0.1...5.0.2)

Updates `nanoid` from 3.3.11 to 3.3.19
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](ai/nanoid@3.3.11...3.3.19)

Updates `postcss` from 8.5.14 to 8.5.28
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](postcss/postcss@8.5.14...8.5.28)

Updates `socket.io-parser` from 4.2.6 to 4.2.7
- [Release notes](https://github.com/socketio/socket.io/releases)
- [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io/compare/socket.io-parser@4.2.6...socket.io-parser@4.2.7)

Updates `tar` from 7.5.15 to 7.5.21
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](isaacs/node-tar@v7.5.15...v7.5.21)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.20.0
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: fast-uri
  dependency-version: 3.1.8
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: hono
  dependency-version: 4.13.8
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: ip-address
  dependency-version: 10.7.2
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: linkify-it
  dependency-version: 5.0.2
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: nanoid
  dependency-version: 3.3.19
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: postcss
  dependency-version: 8.5.28
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: socket.io-parser
  dependency-version: 4.2.7
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: tar
  dependency-version: 7.5.21
  dependency-type: indirect
  dependency-group: npm-security
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* fix(deps): repair Node 24 frozen installs and drop generated churn

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* chore(deps): apply js-yaml security update to root workspace lock (#318)

* chore(deps): bump js-yaml

Bumps the npm_and_yarn group with 1 update in the /sdks/typescript-sdk directory: [js-yaml](https://github.com/nodeca/js-yaml).


Updates `js-yaml` from 4.2.0 to 4.3.1
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.1/CHANGELOG.md)
- [Commits](nodeca/js-yaml@4.2.0...4.3.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* chore(deps): keep generated collection unchanged in security update

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* chore: release main (#343)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* chore(deps): bump the npm-security group across 1 directory with 2 updates (#395)

Bumps the npm-security group with 2 updates in the / directory: [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) and [markdown-it](https://github.com/markdown-it/markdown-it).


Updates `http-cache-semantics` from 4.2.0 to 4.3.0
- [Commits](https://github.com/kornelski/http-cache-semantics/commits)

Updates `markdown-it` from 14.2.0 to 14.3.2
- [Changelog](https://github.com/markdown-it/markdown-it/blob/14.3.2/CHANGELOG.md)
- [Commits](markdown-it/markdown-it@14.2.0...14.3.2)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-version: 4.3.0
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: markdown-it
  dependency-version: 14.3.2
  dependency-type: indirect
  dependency-group: npm-security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump the npm-security group across 1 directory with 3 updates (#394)

Bumps the npm-security group with 3 updates in the / directory: [http-cache-semantics](https://github.com/kornelski/http-cache-semantics), [markdown-it](https://github.com/markdown-it/markdown-it) and [source-map-js](https://github.com/7rulnik/source-map-js).


Updates `http-cache-semantics` from 4.2.0 to 4.3.0
- [Commits](https://github.com/kornelski/http-cache-semantics/commits)

Updates `markdown-it` from 14.2.0 to 14.3.2
- [Changelog](https://github.com/markdown-it/markdown-it/blob/14.3.2/CHANGELOG.md)
- [Commits](markdown-it/markdown-it@14.2.0...14.3.2)

Updates `source-map-js` from 1.2.1 to 1.2.2
- [Release notes](https://github.com/7rulnik/source-map-js/releases)
- [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md)
- [Commits](7rulnik/source-map-js@v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-version: 4.3.0
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: markdown-it
  dependency-version: 14.3.2
  dependency-type: indirect
  dependency-group: npm-security
- dependency-name: source-map-js
  dependency-version: 1.2.2
  dependency-type: indirect
  dependency-group: npm-security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates (#393)

Bumps the npm_and_yarn group with 3 updates in the /sdks/typescript-sdk directory: [js-yaml](https://github.com/nodeca/js-yaml), [markdown-it](https://github.com/markdown-it/markdown-it) and [source-map-js](https://github.com/7rulnik/source-map-js).


Updates `js-yaml` from 4.2.0 to 4.3.2
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.2/CHANGELOG.md)
- [Commits](nodeca/js-yaml@4.2.0...4.3.2)

Updates `markdown-it` from 14.2.0 to 14.3.2
- [Changelog](https://github.com/markdown-it/markdown-it/blob/14.3.2/CHANGELOG.md)
- [Commits](markdown-it/markdown-it@14.2.0...14.3.2)

Updates `source-map-js` from 1.2.1 to 1.2.2
- [Release notes](https://github.com/7rulnik/source-map-js/releases)
- [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md)
- [Commits](7rulnik/source-map-js@v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: markdown-it
  dependency-version: 14.3.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: source-map-js
  dependency-version: 1.2.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(mcp): search public docs through Mintlify REST and MCP (#387)

* feat(mcp): add search_docs tool backed by the Mintlify docs MCP

Forwards the query to the MCP server Mintlify hosts for terminal49.com/docs
(search_terminal49), so results always match the live public docs. Adds the
tool to the ChatGPT submission listing, which the annotations test locks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(mcp): include search_docs in protocol smoke checks

* feat(mcp): search_docs uses Mintlify's REST search API when a key is set (#388)

With MINTLIFY_ASSISTANT_API_KEY, search_docs calls the documented
POST /discovery/v1/search/terminal49 endpoint. Without it, the tool keeps
forwarding to Mintlify's hosted docs MCP.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mcp): validate docs links and preserve SSE response boundaries

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Akshay Dodeja <dodeja@gmail.com>

* feat(sdk): complete verified shipment and container filters (#396)

* chore(sdk): generate filter contracts and preserve docs metadata

* docs: document verified shipment and container filters

* feat(sdk): support validated shipment and container filters

* chore: Auto-generate Postman collection from openapi.json [skip ci]

* fix(tooling): disable optional Postman parameters by default

* fix(docs): restore shipment party flag and container schema

* fix(sdk): reject malformed list filter expressions before requests

* chore: Auto-generate Postman collection from openapi.json [skip ci]

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* fix(mcp): import test helpers from vite-plus/test in summarize_containers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
Co-authored-by: Matt Turner <matt@terminal49.com>
Co-authored-by: Maurycy Pawłowski-Wieroński <maurycy@maurycy.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: alosec <alex.garcia@terminal49.com>
@dodeja

dodeja commented Oct 8, 2026

Copy link
Copy Markdown
Member Author

Superseded by #411, which carries this change rebased onto main.

@dodeja dodeja closed this Oct 8, 2026

This branch was successfully deployed

2 active (1 outdated) deployments
Preview — 9df8c297 Deployed Oct 8, 2026 by vercel[bot]
staging - docs — 3422779c Deployed Oct 8, 2026 by mintlify[bot]
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.

2 participants