Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ body:
id: version
attributes:
label: Version / commit
description: The release tag (e.g. `v1.0.1`) or commit SHA you're running.
placeholder: "v1.0.1"
description: The release tag (e.g. `v1.0.2`) or commit SHA you're running.
placeholder: "v1.0.2"
validations:
required: true

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ infra/azure-functions/dist/
# Playwright
/playwright-report/
/test-results/
/.playwright-mcp/

# Local AI tooling
/.claude/
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,16 @@ All notable changes to **Artifact Explorer** are documented in this file.
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.2] - 2026-06-30

### Fixed

- **Search reset when paginating the repository catalog** — on registries large enough to span multiple pages (e.g. `mcr.microsoft.com`), searching the catalog and then moving to the next page reverted the results to the full, unfiltered list. The displayed list was stored as state and kept in sync by competing effects, one of which recomputed it on every page change filtered only by registry — ignoring the active search query — and, by effect-ordering, overwrote the search-filtered page. The displayed list is now derived purely from the catalog, the active filters, and the current page (a single `useMemo` over a new `selectRepositories` helper), so the search is retained across pagination. A Playwright regression test (`e2e/search-pagination.spec.ts`) covers the search-then-paginate flow.

### Changed

- The catalog now sorts repositories by name in single-registry ("current") view for consistency with combined ("all") view, applies the same name-and-registry match for "All" search across every code path, and shows an empty state (rather than the full unfiltered list) for a registry with no matching repositories.

## [1.0.1] - 2026-06-30

### Fixed
Expand Down
8 changes: 0 additions & 8 deletions app/contexts/RepositoryContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { devLog } from '../utils/devLog';

interface RepositoryContextType {
repositories: Repository[];
filteredRepositories: Repository[];
registries: Registry[];
isLoading: boolean;
searchQuery: string;
Expand All @@ -16,7 +15,6 @@ interface RepositoryContextType {
registryRepoCounts: Record<string, number>;
currentPage: number;
setRepositories: (repos: Repository[]) => void;
setFilteredRepositories: (repos: Repository[]) => void;
setRegistries: (registries: Registry[]) => void;
setIsLoading: (loading: boolean) => void;
setSearchQuery: (query: string) => void;
Expand All @@ -37,7 +35,6 @@ interface RepositoryContextType {

const defaultState: RepositoryContextType = {
repositories: [],
filteredRepositories: [],
registries: [],
isLoading: true,
searchQuery: '',
Expand All @@ -46,7 +43,6 @@ const defaultState: RepositoryContextType = {
registryRepoCounts: {},
currentPage: 1,
setRepositories: () => {},
setFilteredRepositories: () => {},
setRegistries: () => {},
setIsLoading: () => {},
setSearchQuery: () => {},
Expand All @@ -70,7 +66,6 @@ export function useRepositoryContext() {

export const RepositoryProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [repositories, setRepositories] = useState<Repository[]>([]);
const [filteredRepositories, setFilteredRepositories] = useState<Repository[]>([]);
const [registries, setRegistries] = useState<Registry[]>([]);
const [isLoading, setIsLoading] = useState(true);
const [searchQuery, setSearchQuery] = useState('');
Expand Down Expand Up @@ -107,7 +102,6 @@ export const RepositoryProvider: React.FC<{ children: React.ReactNode }> = ({ ch
}

setRepositories([]);
setFilteredRepositories([]);
setRegistries([]);
setIsLoading(true);
setSearchQuery('');
Expand Down Expand Up @@ -187,7 +181,6 @@ export const RepositoryProvider: React.FC<{ children: React.ReactNode }> = ({ ch

const value = {
repositories,
filteredRepositories,
registries,
isLoading,
searchQuery,
Expand All @@ -196,7 +189,6 @@ export const RepositoryProvider: React.FC<{ children: React.ReactNode }> = ({ ch
registryRepoCounts,
currentPage,
setRepositories,
setFilteredRepositories,
setRegistries,
setIsLoading,
setSearchQuery,
Expand Down
Loading
Loading