Skip to content

feat(catalog): Add operations and mirrors#1369

Merged
leumor merged 13 commits into
developfrom
feature/catalog-operations-mirrors
Jun 27, 2026
Merged

feat(catalog): Add operations and mirrors#1369
leumor merged 13 commits into
developfrom
feature/catalog-operations-mirrors

Conversation

@leumor

@leumor leumor commented Jun 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add the PR-271 catalog operations model: primary plus mirror catalog endpoints, signed fallback refresh, stale/downgrade prevention, bounded verified revision history, explicit rollback, key-rotation status, and emergency advisory refresh support.
  • Extend host/operator Platform API routes, HTTP bridge protections, and Web Shell catalog UI for source/mirror health, fallback provenance, rollback candidates, key rotation, and emergency operations with redacted responses.
  • Add deterministic catalog.operations-and-mirrors release-certification evidence plus catalog operations docs/runbooks and updated agent guidance.

Test plan

  • ./gradlew spotlessApply
  • ./gradlew :platform-appcatalog:test
  • ./gradlew :platform-api:test --tests '*AppCatalogsApiHandlerTest'
  • ./gradlew :test --tests '*PlatformApiToadletTest'
  • ./gradlew :platform-appcatalog:test :platform-api:test :test --tests '*PlatformApiRouterTest'
  • python3 tools/release-certification/app_platform_smoke.py --self-test
  • python3 tools/release-certification/app_platform_docs_check.py --self-test
  • python3 tools/release-certification/release_certification.py --self-test
  • python3 tools/release-certification/app_platform_smoke.py --workspace-root . --out-dir build/app-platform-smoke-review --mode pr --skip-gradle completed with the expected overall warn due to --skip-gradle; catalog.operations-and-mirrors reported pass.
  • git diff --check
  • git diff --cached --check

Notes

  • Full ./gradlew test was not rerun for the final branch state; focused module/API/router tests and release-certification self-tests passed.
  • No live network access, production signing keys, or production secrets are required for the deterministic PR-271 evidence.

leumor added 3 commits June 27, 2026 09:49
Add primary and mirror catalog source operations with fallback refresh, verified revision history, explicit rollback, key-rotation status, emergency advisory refresh, operator API and Web Shell surfaces, docs, tests, and deterministic release-certification evidence.
Update AGENTS, project skills, and the release runbook to reflect catalog operations and mirrors, production beta go/no-go evidence, waiver handling, host-only catalog operation routes, and focused validation ownership added since 32b5145.
Update catalog.operations-and-mirrors evidence to inspect the refactored AppCatalogOperations and AppCatalogRefreshCoordinator sources so release-candidate certification sees fallback, stale-revision, rollback, and key-rotation support after the manager split.

@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: f34ab28efd

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

@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: e83d096c2e

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

@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: 1370d6bbd2

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

@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: ba05431353

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

@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: f7d273b0a3

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

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
74.5% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@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: 5dca67dc3a

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

@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: b6cddc3542

ℹ️ 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 thread tools/release-certification/app_platform_smoke.py Outdated

@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: 1d0e295b73

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

@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@crypta-network crypta-network deleted a comment from 007pig Jun 27, 2026
@leumor leumor merged commit cc8163d into develop Jun 27, 2026
19 of 20 checks passed
@leumor leumor deleted the feature/catalog-operations-mirrors branch June 27, 2026 17:00

@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: 21714b2085

ℹ️ 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 +57 to +58
sourceStore.writeMirrorHealth(normalizedCatalogId, context.health());
} catch (IOException metadataException) {

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 Preserve the selected refresh failure when health is oversized

When all endpoints fail and the accumulated health sidecar crosses the new size cap (for example, many mirrors with long resolved URIs/errors), writeMirrorHealth() throws AppCatalogException, not IOException, so this catch is skipped and the API returns invalid_catalog_source instead of the selected catalog_fetch_failed/stale refresh failure. Please catch/suppress catalog metadata failures here as well, or trim before writing, so oversized health metadata does not mask the actual refresh result.

Useful? React with 👍 / 👎.

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.

1 participant