You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
document the effective remote catalog contracts across extensions, presets, integrations, workflows, workflow steps, and bundles
distinguish remote source catalogs from ArtifactCatalog and the MCP command catalog
add cross-primitive characterization coverage for source precedence, install policy, empty and malformed configuration behavior, and bundle scope merging
preserve all production catalog behavior; this PR does not refactor catalog implementations or change trust/security defaults
Contract decisions captured
Extensions, presets, integrations, workflows, and workflow steps select one source layer in environment > project > user > built-in order.
Bundles merge sources by ID across project > user > built-in scopes and order the result by (priority, id).
The highest-precedence well-formed content entry controls lookup, search, provenance, installation policy, and exact historical release selection; malformed-entry exceptions are documented separately.
Payload validation remains primitive-owned. The existing narrow specify_cli.catalogs base is used by extensions and integrations; a broader shared layer may own additional typed sources, source resolution, fetching, caching, failure strategies, shadowing, and provenance.
Existing differences in empty configuration handling, redirect validation, cache fallback, and source failure behavior are documented rather than normalized.
Later behavior-changing PRs should decide separately whether to normalize empty configuration semantics, add catalog-specific per-hop validation for integrations beyond the shared strict redirect policy, unify stale-cache/offline fallback policy, unify source failure reporting, or change bundle fail-fast loading.
AI assistance disclosure
Implemented on behalf of Manfred Riem with GitHub Copilot using GPT-5.6 Sol in autonomous mode. GitHub Copilot inspected the catalog implementations and tests, authored the design document and characterization tests, ran validation, created and pushed commits, addressed review feedback, and drafted this pull request description.
Posted on behalf of Manfred Riem by GitHub Copilot using GPT-5.6 Sol in autonomous mode. GitHub Copilot analyzed the review, updated the design and characterization tests, ran validation, committed and pushed the changes, and drafted this review-round summary and inline replies.
Clarify per-hop versus terminal redirect validation
design/catalogs.md:172
This omits the per-hop redirect checks integrations already receive from open_url. Its _StripAuthOnRedirect handler always calls _validate_strict_redirect, including on the unauthenticated path (authentication/http.py:99-111,213-226). Integrations add their catalog-specific validator only when the terminal URL changes. Clarify that distinction so the contract does not imply that intermediate redirects are unchecked; the PR description's integration redirect follow-up should use the same distinction.
AI-generated for the requesting reviewer by GitHub Copilot (model unavailable, autonomous); source verification and review drafting.
The stale-cache fallback is broader than network failures. Both fetchers catch errors from opening, redirect validation, bounded reads, UTF-8 decoding, and JSON parsing (workflows/catalog/_domain.py:588-619 and workflows/step/catalog/_domain.py:549-584). A rejected redirect or malformed JSON can therefore also return cached data. Document that scope, while preserving the exceptions for non-object payloads and step duplicate JSON fields, so a future shared fetcher does not narrow the fallback unintentionally.
AI-generated for the requesting reviewer by GitHub Copilot (model unavailable, autonomous); source verification and review drafting.
Addressed the new finding and both previously missed documentation refinements in commit 412dbaf1.
Changes:
documented that bundle catalog remove deliberately bypasses source-field materialization so invalid hand-edited entries remain removable
distinguished the shared HTTP client's strict per-hop redirect policy from integrations' terminal catalog-specific validation
documented that workflow and step stale-cache fallback covers redirect, bounded-read, decoding, and JSON parsing failures, while fresh non-object payloads and step duplicate fields remain fatal
updated the PR description's follow-up decision to use the same redirect distinction
Posted on behalf of Manfred Riem by GitHub Copilot using GPT-5.6 Sol in autonomous mode. GitHub Copilot analyzed the review, updated the design, tests, and PR description, ran validation, committed and pushed the changes, and drafted this review-round summary and inline reply.
Clarify existing catalog primitives and migration constraints
design/catalogs.md:305
Please distinguish the proposed broader domain from the shared module that already exists. src/specify_cli/catalogs.py defines CatalogEntry and CatalogStackBase; extensions and integrations already share its config loading and URL validation. Mentioning that starting point would clarify which primitives a base-class change affects and which import paths migration constraint 3 must preserve.
AI-generated for the requesting reviewer by GitHub Copilot (model unknown, autonomous); source verification and review drafting.
Clarify that specify_cli.catalogs already provides shared source-entry, URL-validation, and config-loading primitives for extensions and integrations, and name the import and subclass patch points a broader migration must preserve.
Assisted-by: GitHub Copilot (model: GPT-5.6 Sol, autonomous)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: af29eafb-3a48-4e47-99af-6af5ee947d32
Addressed the previously missed architectural clarification in commit 74ac68c5.
Changes:
identified src/specify_cli/catalogs.py as the existing shared starting point
documented that CatalogEntry and CatalogStackBase already centralize source fields, URL validation, and YAML config loading for extensions and integrations
distinguished presets, workflows, workflow steps, and bundles as retaining independent source/load behavior
named the existing specify_cli.catalogs imports, extension/integration exports, and subclass patch points that a broader migration must preserve
updated the PR description to distinguish the existing narrow base from a broader future shared layer
Validation:
documentation-only change
git diff --check — passed
Posted on behalf of Manfred Riem by GitHub Copilot using GPT-5.6 Sol in autonomous mode. GitHub Copilot analyzed the review, updated the design and PR description, checked the diff, committed and pushed the change, and drafted this review-round summary.
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
triage-nice-to-haveVerdict: evidence-backed fix or greenlit feature — land after review
2 participants
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.
Summary
ArtifactCatalogand the MCP command catalogContract decisions captured
(priority, id).specify_cli.catalogsbase is used by extensions and integrations; a broader shared layer may own additional typed sources, source resolution, fetching, caching, failure strategies, shadowing, and provenance.Validation
uv sync --extra test— passed.venv/bin/python -m pytest -q tests/specify_cli/test_catalog_contracts.py— 38 passed.venv/bin/python -m pytest -q tests/specify_cli/test_catalog_contracts.py tests/specify_cli/bundles/test_catalog_config.py tests/test_workflows.py::TestWorkflowCatalog tests/test_workflows.py::TestStepCatalog— 203 passed.venv/bin/python -m pytest -q tests/specify_cli/test_catalog_contracts.py tests/specify_cli/presets/test_catalog_versions.py tests/specify_cli/integrations/test_catalog_versions.py tests/specify_cli/integrations/test_catalog.py tests/test_extensions.py::TestCatalogStack tests/test_workflows.py::TestWorkflowCatalog tests/test_workflows.py::TestStepCatalog tests/specify_cli/bundles/test_catalog_config.py tests/specify_cli/bundles/test_catalog_stack.py— 457 passed.venv/bin/python -m pytest -q tests/specify_cli/test_catalog_contracts.py tests/specify_cli/presets/test_catalog.py tests/specify_cli/integrations/test_catalog.py tests/specify_cli/bundles/test_catalog_config.py tests/specify_cli/bundles/test_catalog_stack.py tests/specify_cli/bundles/test_catalog_versions.py tests/test_extensions.py::TestExtensionCatalog tests/test_extensions.py::TestCatalogEntry tests/test_extensions.py::TestCatalogStack tests/test_workflows.py::TestWorkflowCatalog tests/test_workflows.py::TestStepCatalog— 633 passed.venv/bin/python -m pytest -q tests/specify_cli/extensions/test_catalog_versions.py tests/specify_cli/presets/test_catalog_versions.py tests/specify_cli/integrations/test_catalog_versions.py tests/specify_cli/workflows/test_catalog_versions.py tests/specify_cli/workflows/step/test_catalog_versions.py tests/specify_cli/bundles/test_catalog_versions.py tests/contract/test_catalog_schema.py— 356 passed.venv/bin/python -m pytest tests -q— 12,222 passed, 71 skippeduvx ruff check tests/specify_cli/test_catalog_contracts.py— passedFollow-up decisions
Later behavior-changing PRs should decide separately whether to normalize empty configuration semantics, add catalog-specific per-hop validation for integrations beyond the shared strict redirect policy, unify stale-cache/offline fallback policy, unify source failure reporting, or change bundle fail-fast loading.
AI assistance disclosure
Implemented on behalf of Manfred Riem with GitHub Copilot using GPT-5.6 Sol in autonomous mode. GitHub Copilot inspected the catalog implementations and tests, authored the design document and characterization tests, ran validation, created and pushed commits, addressed review feedback, and drafted this pull request description.