Skip to content

Feat/merge candidate pagination - #310

Draft
AlexAxthelm wants to merge 10 commits into
mainfrom
feat/merge-pagination
Draft

AlexAxthelm wants to merge 10 commits into
mainfrom
feat/merge-pagination

Conversation

@AlexAxthelm

@AlexAxthelm AlexAxthelm commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

paginate the merge candidate listing endpoint, reusing the same tools are resource list, and similarly adapt frontend to make use of it.

Note this adds some basic query params (sorting, filtering), and adjusts the frontend to make use of those (for not showing the approved/denied merges)

Refactor note: This adds a calculated name field to the candidate response model, and lets the frontend read from that, rather than fetching values for name in a separate query (fan-out).


Why

GET /oil-gas-fields/merge-candidates returned every candidate of every status as one bare array, and the Merge Review page rendered all of them. Each queue row also fetched the full detail of every resource in its candidate just to show a name. After one link-all pass on production data (~750 candidates), opening the page meant one large response plus ~1,500 detail requests.

Closes STIT-786. Partly covers [[STIT-795]] (date sorts; alphabetical sort is a follow-up) and STIT-745 (paging and status filter).

What changed

API: GET /oil-gas-fields/merge-candidates (breaking response shape)

The endpoint now returns a page (items, total_count, page, page_size, total_pages) instead of an array. It takes:

  • page / page_size, using the shared PaginationParams.
  • status, which can be repeated. With no status, every status is returned.
  • sort_by (created | reviewed_at) and sort_order, always with an id tiebreak so candidates sharing a timestamp (bulk creation) stay on one page. Unreviewed rows sort last.

The response also includes:

  • status_counts: per-status totals across the whole queue, regardless of the filter.
  • A server-computed name per candidate on list and detail responses. It's the merged resource's name once approved, otherwise the best-ranked source's name across the candidate's resources (the rule the frontend used to apply), and it respects the viewer's licensed sources. Create/approve/deny responses don't carry it.

Callers

  • stitch-client: list_merge_candidates() is replaced by list_merge_candidates_page() and iter_merge_candidates().
  • entity-linkage: still collects every candidate of every status, page by page, so de-duplication keeps seeing reviewed candidates.

Merge Review page

  • Status filter: a multi-select dropdown (default: Pending), matching the Resource List's filters. It replaces "Show approved". Clearing every status shows all of them.
  • Sort: a plain-language select (newest/oldest first, recently/earliest reviewed).
  • Paging: the shared Pagination control under the sticky queue, 25 per page by default.
  • URL state: page, page size, status and sort live in the URL, so links and Back/Forward restore the view. A bare /merge-candidate-review is the pending queue. The params are documented in the frontend README under "Merge review URLs".
  • Names: queue rows and the panel heading use the API's name, so the queue makes no per-resource requests.
  • Selection: the first pending candidate on the page is selected when the current one isn't on it. A page past the end (e.g. after reviewing the last candidate on it) steps back to the last page.
  • Cleanup: removes the browser-side naming code this left unused (useMergeCandidateName, useMergeSourceDetails, utils/mergeCandidateName, pickCompareName).

Behavior changes to be aware of

  • Denied candidates are hidden by default. The queue used to hide only approved candidates; it now shows only pending ones until you choose other statuses.
  • The panel heading's name now comes from the server. It used to come from the detail's comparison data. The two can differ when a resource has a per-field source-priority override; the heading now always matches the queue row.

How to review

  1. deployments/api/src/stitch/api/entities.py: the new contract.
  2. deployments/api/src/stitch/api/db/merge_candidate_actions.py: list_merge_candidates (query, ordering, counts) and _candidate_name.
  3. packages/stitch-client and deployments/entity-linkage/.../client.py: the callers.
  4. deployments/stitch-frontend/src/config/mergeReviewParams.js, then pages/MergeCandidateReviewPage.jsx.

Commits are split API-first, then frontend, so each can be reviewed separately.

Known gaps / follow-ups

  • Pagination in the narrow sidebar: Pagination keeps 7 page slots plus 2 arrows (~356px) even when few pages exist, wider than the queue column (~232–296px), so it likely wraps to two lines. I haven't verified it visually yet; a compact option may follow.
  • Alphabetical sort (STIT-795): needs a follow-up ticket. It requires ranking coalesced names in SQL across all candidates, per viewer's licensed sources.
  • API reference: API_REFERENCE.md was hand-patched for this endpoint only. The committed file was already out of date (missing NORSource), so regenerating it would have pulled unrelated changes into this PR.
  • No new index: none on merge_candidates(status, created, id); at ~750 rows it isn't needed. Revisit if the merge_candidates.list* query timings say otherwise.
  • Pre-existing dead code: compareEntry and valueEntryForResource in utils/candidateCompare.js are only used by their own tests. Left in place.

Testing

  • make check passes.
  • API unit: paging, status_counts with every status present, name selection (source rank, tie on position, merged resource, no licensed name).
  • API integration (SQLite):
    • stable paging with identical created timestamps
    • repeated status params versus unfiltered counts
    • names before and after approval
    • reviewed_at sort with unreviewed last
    • 422s for bad status / sort_by / sort_order / page / page_size
  • Client / entity-linkage: request params, page-size validation, the iterator following total_pages, the wrapper gathering every page with no status filter.
  • Frontend:
    • URL schema parse/serialize/round-trip
    • status filter, sort, paging, URL-driven views
    • clamping to the last page
    • selection on page change
    • header counts
    • no per-resource requests from the queue

Manual verification:

AI assistance

Claude Code was used to explore the codebase, draft the plan, and write the implementation, tests and docs. Design decisions were made by the author during planning: paging style, status filter semantics, server-side names, sort scope.

🤖 Generated with Claude Code


[STIT-795]: https://rmi1.atlassian.net/browse/STIT-795?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

AlexAxthelm and others added 3 commits October 2, 2026 12:36
GET /oil-gas-fields/merge-candidates returned every candidate of every
status as a bare array, so the Merge Review page loaded the whole queue
(~750 candidates after one link-all pass) and every row fetched each of
its resources' details just to show a name.

The endpoint now returns a page:
- page / page_size, using the shared PaginationParams
- a repeatable `status` filter; omitted, every status is returned
- sort_by (created | reviewed_at) and sort_order, always with an id
  tiebreak so rows stay on one page when candidates share a timestamp
- status_counts over the whole queue, ignoring the filter, so the
  header keeps reporting the full workload
- a server-computed `name` per candidate: the merged resource's name
  once approved, otherwise the best-ranked source's name across its
  resources (the rule the frontend applied). Only list and detail
  responses carry it.

Callers updated for the new shape:
- stitch-client: list_merge_candidates() is replaced by
  list_merge_candidates_page() and iter_merge_candidates(); the
  now-unused _expect_list helper is removed
- entity-linkage: still gathers every candidate of every status, page
  by page, so de-duplication keeps seeing reviewed candidates
- frontend: reads the paged response, applies the "Show approved"
  filter on the server, and takes header counts from status_counts.
  It fetches a single page of 200 until the queue gets paging controls.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The queue fetched a single 200-candidate page with a "Show approved"
checkbox, and every row fetched each of its resources' details to show
a name. It now uses the paged list endpoint end to end.

- Status filter: a multi-select dropdown (Pending / Approved / Denied)
  replaces the checkbox. It defaults to Pending and shows each status's
  queue-wide count. Clearing every status shows all of them.
- Sort: one plain-language select (newest/oldest first, recently/earliest
  reviewed), mapped to the API's sort_by + sort_order.
- Paging: the shared Pagination control sits under the sticky queue,
  25 per page by default; changing page scrolls the list to the top.
- URL state: page, page_size, status and sort are serialized in the
  query string (config/mergeReviewParams.js, useMergeReviewState), so
  links and Back/Forward restore the view. A bare
  /merge-candidate-review is the pending queue; selecting no statuses is
  written as status=all. Documented in the README.
- Names: queue rows and the panel heading use the API's `name`, so the
  queue makes no per-resource requests and the two always agree.
- Selection: the first pending candidate on the page is selected
  whenever the current one is not on it, but not while the next page is
  still loading. A page past the end steps back to the last page.

Removes the browser-side naming code this leaves unused:
useMergeCandidateName, useMergeSourceDetails, utils/mergeCandidateName
and pickCompareName.

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Empty queues retain hidden selections and fail to clamp out-of-range pages.

Review effort: Balanced
Findings: 1 Medium severity · 1 Low severity

Open (2)
What changed in this PR

Adds paginated, filterable, and sortable merge-candidate queues while eliminating per-row resource requests.

Changes:

  • Adds paginated API responses with status counts and licensed display names.
  • Updates clients and entity linkage for page-by-page iteration.
  • Adds URL-driven frontend filtering, sorting, pagination, and selection.
File Description
PLAN.md Documents the implementation plan.
packages/​stitch-client/​tests/​test_async_client.py Tests paginated client behavior.
packages/​stitch-client/​src/​stitch/​client/​async_client.py Adds page and iterator APIs.
deployments/​stitch-frontend/​src/​utils/​mergeCandidateName.test.js Removes obsolete naming tests.
deployments/​stitch-frontend/​src/​utils/​mergeCandidateName.js Removes client-side naming logic.
deployments/​stitch-frontend/​src/​utils/​candidateCompare.test.js Removes obsolete name-selection tests.
deployments/​stitch-frontend/​src/​utils/​candidateCompare.js Removes comparison-based naming.
deployments/​stitch-frontend/​src/​queries/​resources.js Adds parameterized candidate query keys.
deployments/​stitch-frontend/​src/​queries/​api.test.js Tests candidate query serialization.
deployments/​stitch-frontend/​src/​queries/​api.js Sends paging, status, and sort parameters.
deployments/​stitch-frontend/​src/​pages/​MergeCandidateReviewPage.test.jsx Tests the paginated queue UI.
deployments/​stitch-frontend/​src/​pages/​MergeCandidateReviewPage.jsx Implements queue controls and pagination.
deployments/​stitch-frontend/​src/​hooks/​useResources.js Passes candidate query parameters.
deployments/​stitch-frontend/​src/​hooks/​useMergeSourceDetails.js Removes obsolete source-detail fetching.
deployments/​stitch-frontend/​src/​hooks/​useMergeReviewState.js Adds URL-backed review state.
deployments/​stitch-frontend/​src/​hooks/​useMergedResourceDetail.js Updates hook documentation.
deployments/​stitch-frontend/​src/​hooks/​useMergeCandidateName.js Removes obsolete naming hook.
deployments/​stitch-frontend/​src/​config/​mergeReviewParams.test.js Tests URL parsing and serialization.
deployments/​stitch-frontend/​src/​config/​mergeReviewParams.js Defines merge-review URL schema.
deployments/​stitch-frontend/​README.md Documents merge-review URLs.
deployments/​entity-linkage/​tests/​test_client.py Tests collection across pages.
deployments/​entity-linkage/​src/​stitch/​entity_linkage/​client.py Collects all candidate pages.
deployments/​api/​tests/​test_merge_candidate_actions.py Tests names, counts, and pages.
deployments/​api/​tests/​routers/​test_route_permissions.py Updates paginated route expectations.
deployments/​api/​tests/​routers/​test_merge_candidates_integration.py Adds integration coverage for listing.
deployments/​api/​tests/​observability/​test_query_name_actions.py Verifies new query labels.
deployments/​api/​src/​stitch/​api/​routers/​oil_gas_fields.py Exposes the paginated endpoint contract.
deployments/​api/​src/​stitch/​api/​entities.py Defines query and page models.
deployments/​api/​src/​stitch/​api/​db/​merge_candidate_actions.py Implements filtering, paging, counts, and names.
deployments/​api/​API_REFERENCE.md Updates the endpoint response shape.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread deployments/stitch-frontend/src/pages/MergeCandidateReviewPage.jsx Outdated
Comment thread PLAN.md Outdated
@AlexAxthelm
AlexAxthelm deployed to development October 2, 2026 12:44 — with GitHub Actions Active
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

CD summary 0b1e591

Frontend: https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net

Deployments (4)
service url fqdn
api open pr-0310-api.purplegrass-c07d0a94.westus2.azurecontainerapps.io
entity-linkage open pr-0310-el.purplegrass-c07d0a94.westus2.azurecontainerapps.io
frontend https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net
stitch-llm open pr-0310-llm.purplegrass-c07d0a94.westus2.azurecontainerapps.io
Database (1)
db_name postgres_host postgres_port postgres_db
pr_0310 stitch-dev.postgres.database.azure.com 5432 pr_0310
Jobs (2)
job image postgres_db api_url auth_mode
db-migrations ghcr.io/rmi/stitch-api:pr-0310@sha256:dff3e83689b9b1edc0be23a2d7c8770b84f02094546426a1f12785ae3e589757 pr_0310
seed ghcr.io/rmi/stitch-seed:pr-0310@sha256:d9d73bf4a8a24dbb749924103713d177bc39eee10478aec702b183cdd5d6c363 https://pr-0310-api.purplegrass-c07d0a94.westus2.azurecontainerapps.io/api/v1 stitch-client-bearer-token
Images (4)
build_time commit_time git_sha image image_digest
2026-10-02T12:40:43Z 2026-10-02T12:40:20Z 6652fbf ghcr.io/rmi/stitch-api:pr-0310 ghcr.io/rmi/stitch-api:pr-0310@sha256:dff3e83689b9b1edc0be23a2d7c8770b84f02094546426a1f12785ae3e589757
2026-10-02T12:40:40Z 2026-10-02T12:40:20Z 6652fbf ghcr.io/rmi/stitch-entity-linkage:pr-0310 ghcr.io/rmi/stitch-entity-linkage:pr-0310@sha256:2fe5182d9823214b11c0c9e1fbaf29b8ec85e54dfa0f648e2fc07b018ab386de
2026-10-02T12:40:41Z 2026-10-02T12:40:20Z 6652fbf ghcr.io/rmi/stitch-seed:pr-0310 ghcr.io/rmi/stitch-seed:pr-0310@sha256:d9d73bf4a8a24dbb749924103713d177bc39eee10478aec702b183cdd5d6c363
2026-10-02T12:40:45Z 2026-10-02T12:40:20Z 6652fbf ghcr.io/rmi/stitch-stitch-llm:pr-0310 ghcr.io/rmi/stitch-stitch-llm:pr-0310@sha256:f9ed27731eadfc821c40a76ec399bb6c93d2bbd33afe8381c49a87e5a41968da

The shared Pagination control always lays out seven page slots plus two
arrows (~356px), wider than the queue column (~230–295px), so its page
buttons wrapped onto a second row. Add a `compact` option that shows
"Page X of Y" between the arrows, and use it for the queue. The
Resource List keeps its page-number buttons.

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

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

CD summary 36206e9

Frontend: https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net

Deployments (4)
service url fqdn
api open pr-0310-api.purplegrass-c07d0a94.westus2.azurecontainerapps.io
entity-linkage open pr-0310-el.purplegrass-c07d0a94.westus2.azurecontainerapps.io
frontend https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net
stitch-llm open pr-0310-llm.purplegrass-c07d0a94.westus2.azurecontainerapps.io
Database (1)
db_name postgres_host postgres_port postgres_db
pr_0310 stitch-dev.postgres.database.azure.com 5432 pr_0310
Jobs (1)
job image postgres_db
db-migrations ghcr.io/rmi/stitch-api:pr-0310@sha256:eb861ef8cd40a23ef44da37c2dc68d8f5300873bf56cd72f7cd0f8e682410e0e pr_0310
Images (4)
build_time commit_time git_sha image image_digest
2026-10-02T13:24:49Z 2026-10-02T13:24:28Z 4181be6 ghcr.io/rmi/stitch-api:pr-0310 ghcr.io/rmi/stitch-api:pr-0310@sha256:eb861ef8cd40a23ef44da37c2dc68d8f5300873bf56cd72f7cd0f8e682410e0e
2026-10-02T13:24:44Z 2026-10-02T13:24:28Z 4181be6 ghcr.io/rmi/stitch-entity-linkage:pr-0310 ghcr.io/rmi/stitch-entity-linkage:pr-0310@sha256:21dfaa422c7c14fed183ef3cbdd57ba77a5451a5e6dd8c0998cff07933b060e2
2026-10-02T13:24:48Z 2026-10-02T13:24:28Z 4181be6 ghcr.io/rmi/stitch-seed:pr-0310 ghcr.io/rmi/stitch-seed:pr-0310@sha256:2c3714aa36d239b0836dd685cce3f4ec74a83e9f76f9983a1d205aab354d33ea
2026-10-02T13:24:45Z 2026-10-02T13:24:28Z 4181be6 ghcr.io/rmi/stitch-stitch-llm:pr-0310 ghcr.io/rmi/stitch-stitch-llm:pr-0310@sha256:265416af6b2f854d5bb409c16e96e9e42b199bc4b454a8fa6fdffc915dd9b605

AlexAxthelm and others added 3 commits October 2, 2026 15:33
No other dropdown in the app shows counts, so the Status filter
introduced a new UI pattern. The header's Pending / Reviewed / Total
counts still come from status_counts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An empty result reports total_pages 0, so a page past the end was only
corrected when there were results: a link to ?page=4 with no matches
stayed on page 4. Treat page 1 as the last page of an empty result.

An empty page also left the previous selection in the decision panel,
offering review actions for a candidate the queue was not showing.
Clear the selection when a loaded page is empty.

Addresses Copilot review feedback on #310.

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

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

CD summary 4d41100

Frontend: https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net

Deployments (4)
service url fqdn
api open pr-0310-api.purplegrass-c07d0a94.westus2.azurecontainerapps.io
entity-linkage open pr-0310-el.purplegrass-c07d0a94.westus2.azurecontainerapps.io
frontend https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net
stitch-llm open pr-0310-llm.purplegrass-c07d0a94.westus2.azurecontainerapps.io
Database (1)
db_name postgres_host postgres_port postgres_db
pr_0310 stitch-dev.postgres.database.azure.com 5432 pr_0310
Jobs (1)
job image postgres_db
db-migrations ghcr.io/rmi/stitch-api:pr-0310@sha256:eb49c697a092970a927dd8e4cadd03b3090c3144d269310a0674adcf4d852fc3 pr_0310
Images (4)
build_time commit_time git_sha image image_digest
2026-10-02T13:49:07Z 2026-10-02T13:48:41Z 50a7986 ghcr.io/rmi/stitch-api:pr-0310 ghcr.io/rmi/stitch-api:pr-0310@sha256:eb49c697a092970a927dd8e4cadd03b3090c3144d269310a0674adcf4d852fc3
2026-10-02T13:49:00Z 2026-10-02T13:48:41Z 50a7986 ghcr.io/rmi/stitch-entity-linkage:pr-0310 ghcr.io/rmi/stitch-entity-linkage:pr-0310@sha256:10e970eaeeb0f5467dd9f46114f7d04e0d7bb422f5aafa16dfe54befde97cfc2
2026-10-02T13:48:59Z 2026-10-02T13:48:41Z 50a7986 ghcr.io/rmi/stitch-seed:pr-0310 ghcr.io/rmi/stitch-seed:pr-0310@sha256:fbead57705c98f293e9219190f7c674ea9d6c1c207a3323391963974b4f466d8
2026-10-02T13:49:02Z 2026-10-02T13:48:41Z 50a7986 ghcr.io/rmi/stitch-stitch-llm:pr-0310 ghcr.io/rmi/stitch-stitch-llm:pr-0310@sha256:3ae9646ec818646aa71e635408ece57a62780be9ffa39ce660b9e28f876248f7

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The status dropdown omits the promised queue-wide counts, and one new test leaks its async client.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
Resolved since last review (2)
Previously missed (1)

In code that hasn't changed since last review

Medium severity Close the async HTTP client to prevent transport resource leaks

deployments/​entity-linkage/​tests/​test_client.py:107

This test leaves the newly created async HTTP client open, unlike the neighboring tests, so its transport resources can leak across the test suite. Close it after the assertions.

Comment thread deployments/stitch-frontend/src/pages/MergeCandidateReviewPage.jsx
@AlexAxthelm AlexAxthelm mentioned this pull request Oct 2, 2026
@AlexAxthelm
AlexAxthelm added this pull request to stack #314 October 2, 2026 14:46
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

CD summary b5c670d

Frontend: https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net

Deployments (4)
service url fqdn
api open pr-0310-api.purplegrass-c07d0a94.westus2.azurecontainerapps.io
entity-linkage open pr-0310-el.purplegrass-c07d0a94.westus2.azurecontainerapps.io
frontend https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net
stitch-llm open pr-0310-llm.purplegrass-c07d0a94.westus2.azurecontainerapps.io
Database (1)
db_name postgres_host postgres_port postgres_db
pr_0310 stitch-dev.postgres.database.azure.com 5432 pr_0310
Jobs (1)
job image postgres_db
db-migrations ghcr.io/rmi/stitch-api:pr-0310@sha256:ebf7f523e07859fbfe1e94503cbd80f70491cf6853c33b8293e61f9cde3046c6 pr_0310
Images (4)
build_time commit_time git_sha image image_digest
2026-10-02T14:56:46Z 2026-10-02T14:56:23Z 0a28ef2 ghcr.io/rmi/stitch-api:pr-0310 ghcr.io/rmi/stitch-api:pr-0310@sha256:ebf7f523e07859fbfe1e94503cbd80f70491cf6853c33b8293e61f9cde3046c6
2026-10-02T14:56:47Z 2026-10-02T14:56:23Z 0a28ef2 ghcr.io/rmi/stitch-entity-linkage:pr-0310 ghcr.io/rmi/stitch-entity-linkage:pr-0310@sha256:46a18304166ce0dfe75a1d7af9a770cacc2218291f416bd617194432ab35d0ea
2026-10-02T14:56:45Z 2026-10-02T14:56:23Z 0a28ef2 ghcr.io/rmi/stitch-seed:pr-0310 ghcr.io/rmi/stitch-seed:pr-0310@sha256:e33fc03c7d455a888265c0c98654dccd19e77e445ec145e2aa88874bf6dc7e51
2026-10-02T14:56:44Z 2026-10-02T14:56:23Z 0a28ef2 ghcr.io/rmi/stitch-stitch-llm:pr-0310 ghcr.io/rmi/stitch-stitch-llm:pr-0310@sha256:de1be4e091e9a638889e112f8b7fe6177d4e8ec3683be54bd7cef58b821e1e69

@AlexAxthelm
AlexAxthelm marked this pull request as ready for review October 2, 2026 15:01
AlexAxthelm and others added 2 commits October 2, 2026 18:35
The Merge Review sort select and the pager's per-page select were native
controls (browser chevron, regular weight, and a shorter per-page box)
next to the Status FilterDropdown button. Add a Select component that
keeps the native <select> but matches the FilterDropdown button: same
height, weight, border, hover and ▼ glyph. The shared Pagination uses
it, so the Resource List's per-page select changes too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ▼ glyph's 32px gutter made the sort select 169px, 1px more than the
room beside the Status filter in the 20rem queue column, so it wrapped.
Use 24px with the glyph 10px from the edge: 161px, and the same 6px
text-to-glyph gap as the FilterDropdown button.

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

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown

CD summary 10e634c

Frontend: https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net

Deployments (4)
service url fqdn
api open pr-0310-api.purplegrass-c07d0a94.westus2.azurecontainerapps.io
entity-linkage open pr-0310-el.purplegrass-c07d0a94.westus2.azurecontainerapps.io
frontend https://witty-mushroom-017a3dc1e-310.westus2.1.azurestaticapps.net
stitch-llm open pr-0310-llm.purplegrass-c07d0a94.westus2.azurecontainerapps.io
Database (1)
db_name postgres_host postgres_port postgres_db
pr_0310 stitch-dev.postgres.database.azure.com 5432 pr_0310
Jobs (1)
job image postgres_db
db-migrations ghcr.io/rmi/stitch-api:pr-0310@sha256:bbbaeffde45ffd7116d620cb4b1696bcbd8ad1d26e69a5df616de3f22b0907ec pr_0310
Images (4)
build_time commit_time git_sha image image_digest
2026-10-02T17:09:48Z 2026-10-02T17:09:29Z ffedabe ghcr.io/rmi/stitch-api:pr-0310 ghcr.io/rmi/stitch-api:pr-0310@sha256:bbbaeffde45ffd7116d620cb4b1696bcbd8ad1d26e69a5df616de3f22b0907ec
2026-10-02T17:09:49Z 2026-10-02T17:09:29Z ffedabe ghcr.io/rmi/stitch-entity-linkage:pr-0310 ghcr.io/rmi/stitch-entity-linkage:pr-0310@sha256:e24bcf7653a6c97d09dc5ea96754e21a97f5334d8299d2b8ffbe473f0c9bd74d
2026-10-02T17:09:52Z 2026-10-02T17:09:29Z ffedabe ghcr.io/rmi/stitch-seed:pr-0310 ghcr.io/rmi/stitch-seed:pr-0310@sha256:cf8f016b904458a472bedd9b5830dec7073bbafa9f633d8934a991f111628945
2026-10-02T17:09:53Z 2026-10-02T17:09:29Z ffedabe ghcr.io/rmi/stitch-stitch-llm:pr-0310 ghcr.io/rmi/stitch-stitch-llm:pr-0310@sha256:5134a72e31739bcb217fcf5f2c41f34c1f8a8bd761323f981c6d273ebd6f42da

@jdhoffa
jdhoffa marked this pull request as draft October 5, 2026 12:07
@jdhoffa

jdhoffa commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Hey @AlexAxthelm, I've taken the liberty of putting this PR in draft mode.
It's no longer necessary to get this in ahead of the Trace demo, and I want to consider this one and #313 a bit more carefully before merging.

Let's re-focus on #290 and #293 for now please

This branch was successfully deployed

1 active deployment
development — 10e634c3 Deployed Oct 2, 2026 by AlexAxthelm via Deploy frontend / Build and Deploy Job #1132
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.

3 participants