Repository navigation
Persist performance source directories and display preferred paths - #373
Merged
tomvothecoder merged 9 commits intoOct 7, 2026
Merged
tomvothecoder merged 9 commits into
tomvothecoder merged 9 commits into
Conversation
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The architecture documentation incorrectly states that the UI displays every retained mapping rather than only the preferred directory.
1 open finding
What changed in this PR
Adds persistent performance-source directory mappings across ingestion, catalog APIs, seed data, and detail views, while improving launcher portability.
Changes:
- Adds archive/staging mappings with idempotent persistence and preferred-path selection.
- Records mappings during ingestion and exposes them through detail APIs.
- Displays preferred paths with copy feedback and expands regression coverage.
| File | Description |
|---|---|
Makefile |
Makes site validation portable. |
frontend/src/types/catalog.ts |
Adds source-directory API types. |
frontend/src/features/catalog/components/PerformanceSourceDirectory.tsx |
Renders and copies preferred paths. |
frontend/src/features/catalog/components/ExecutionDetailsView.tsx |
Adds execution provenance path. |
frontend/src/features/catalog/CaseDetailsPage.tsx |
Adds case metadata path. |
docs/github-issues/362-persist-source-dirs/plan.md |
Documents implementation plan. |
docs/architecture/metadata-ingestion.md |
Documents mapping semantics. |
backend/tests/features/ingestion/test_source_directory_api.py |
Tests submission and ingestion APIs. |
backend/tests/features/ingestion/test_site_collection_launcher.py |
Tests launcher portability and logging. |
backend/tests/features/ingestion/test_nersc_archive_ingestor.py |
Stubs mapping persistence. |
backend/tests/features/ingestion/test_machine_ingestion.py |
Adds locking fixture support. |
backend/tests/features/ingestion/test_lcrc_v3_archive_ingestor.py |
Stubs targeted-run persistence. |
backend/tests/features/ingestion/test_hpc_upload_archive_ingestor.py |
Stubs upload-runner persistence. |
backend/tests/features/ingestion/test_diagnostics_make_targets.py |
Adds locking fixture support. |
backend/tests/features/ingestion/test_archive_source_directories.py |
Tests scanner mapping workflows. |
backend/tests/features/ingestion/source_directory_utils.py |
Provides mapping test stubs. |
backend/tests/features/catalog/test_source_directory_migration.py |
Tests migration reversibility. |
backend/tests/features/catalog/test_source_directories.py |
Tests persistence, selection, and concurrency. |
backend/tests/features/catalog/test_seed.py |
Tests seeded mappings and cleanup. |
backend/migrations/versions/20261006_000000_add_source_directories.py |
Creates mapping storage. |
backend/app/scripts/README.md |
Documents scanner behavior. |
backend/app/scripts/ingestion/sites/site_ingestion_launcher.sh |
Improves portable logging and locking. |
backend/app/scripts/ingestion/nersc_archive_ingestor.py |
Persists visited NERSC paths. |
backend/app/scripts/ingestion/hpc_upload_archive_ingestor.py |
Persists visited upload paths. |
backend/app/scripts/ingestion/archive_source_directories.py |
Implements scanner-side persistence. |
backend/app/scripts/ingestion/archive_discovery.py |
Collects visited execution paths. |
backend/app/scripts/db/seed.py |
Seeds source mappings. |
backend/app/scripts/db/catalog.json |
Adds illustrative paths. |
backend/app/main.py |
Registers the new router. |
backend/app/features/ingestion/source_directories.py |
Resolves observed owners. |
backend/app/features/ingestion/schemas.py |
Adds mapping payload schemas. |
backend/app/features/ingestion/api.py |
Persists explicit ingestion mappings. |
backend/app/features/catalog/source_directories.py |
Implements idempotent persistence and preference. |
backend/app/features/catalog/schemas.py |
Exposes mapping response fields. |
backend/app/features/catalog/models.py |
Adds mapping model and relationships. |
backend/app/features/catalog/enums.py |
Defines staging/archive kinds. |
backend/app/features/catalog/api.py |
Loads and serializes mappings. |
backend/app/api/source_directories.py |
Adds trusted metadata submission endpoint. |
🧠 Review effort: Balanced
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
Comment on lines
+81
to
+82
| different archive snapshots. Case and execution detail APIs return | ||
| `sourceDirectories`; both detail pages display these paths with copy actions. |
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.

Description
Closes #362.
Checklist
Validation performed
make backend-test: 1,394 passed, two SQLAlchemy warnings, on macOS with Bash 3.2. Includes migration upgrade/downgrade, concurrent persistence, ownership isolation, duplicate/skipped uploads, archive precedence, reseeding cleanup, and launcher regressions.make frontend-lintandmake frontend-build: passed (existing large-bundle warning).pnpm run type-checkand Prettier checks of changed frontend files, fromfrontend/: passed, including the latest copy-feedback change.backend/.venv/bin/pre-commit run --all-files, from repository root: passed.git diff --check: passed.Deployment Notes (if any)
make backend-upgradebefore deploying updated scanners/backend. Deploy the metadata-submission API before updated runners depend on it.make backend-seedreloads example directories for all seeded cases/executions and replaces existing seeded records and edits.flock; missing locking support fails explicitly rather than proceeding unlocked. Launcher timestamps now consistently use UTC.