Skip to content

refactor(assetregistry): isolate skill artifact lifecycle - #282

Merged
kl3inIT merged 4 commits into
mainfrom
refactor/modulith-assetregistry-skill
Aug 3, 2026
Merged

refactor(assetregistry): isolate skill artifact lifecycle#282
kl3inIT merged 4 commits into
mainfrom
refactor/modulith-assetregistry-skill

Conversation

@kl3inIT

@kl3inIT kl3inIT commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Summary

  • establish four exact parent-owned Skill artifact capabilities
  • move storage, compensation, release delivery, and cleanup visibility behind capability-specific contracts
  • keep the supersession retry aggregate parent-owned and prevent storage locator exposure
  • add exact Modulith/Core/API/Worker/MinIO consumer guards

Verification

  • full Core/API/Worker/connectors/MinIO suite: 7m49s
  • terminating clean test --max-workers=1: 108 tasks in 7m15s
  • 485 Core, 186 API, 67 Worker, 120 connector, and 6 MinIO tests; zero failures/errors/skips
  • OpenAPI and PostgreSQL Asset Registry integration gates
  • docs operating-model: 531 Markdown files, 8 mirrored pairs
  • release policy: Node 24.15.0, 18 product tests + 23 policy/workflow tests

skip-release: intermediate modular refactor; release follows completion of the full refactor goal

Summary by CodeRabbit

  • New Features

    • Added validated skill package uploads and replacements, including artifact metadata and payload integrity checks.
    • Added release lookup and package delivery by asset/release identifiers or namespace, slug, and version.
    • Added structured cleanup summaries for superseded packages, including deleted, retained, retried, and resolved outcomes.
  • Bug Fixes

    • Improved handling of failed uploads, unavailable packages, invalid metadata, and storage inconsistencies.
    • Added safeguards to prevent package content and artifact metadata mismatches.
  • Tests

    • Expanded architectural, integration, storage, delivery, upload, replacement, and cleanup coverage.

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kl3inIT, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 28 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 97132ea2-772d-4713-9bff-ec7d9039a46a

📥 Commits

Reviewing files that changed from the base of the PR and between 5eb8c2a and 0dd5897.

⛔ Files ignored due to path filters (3)
  • docs/increments/active/2026-07-31-spring-modulith-package-refactor/plan.md is excluded by !docs/**
  • docs/specs/domains/asset-registry.md is excluded by !docs/**
  • docs/tests/domains/asset-registry.md is excluded by !docs/**
📒 Files selected for processing (4)
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageAssetService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillPackageAssetServiceTests.java
📝 Walkthrough

Walkthrough

The PR reorganizes Skill package lifecycle ownership around parent capabilities for uploads, release delivery, cleanup, and storage. It adds public contracts, package validation, authorized delivery, cleanup summaries, module-boundary tests, and updated storage integration.

Changes

Skill lifecycle ownership

Layer / File(s) Summary
Capability contracts and module interfaces
core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/*, core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/*, core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/*, core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/*, core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java, ARCHITECTURE.md
Adds contracts for package commands, artifacts, uploads, release delivery, cleanup summaries, and storage. Registers named interfaces and verifies their exposed types, consumers, and implementation visibility.
Package import and replacement orchestration
core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageAssetService.java, core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java, core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageProfile.java, core/src/main/java/com/orgmemory/core/assetregistry/Asset*.java, core/src/test/java/com/orgmemory/core/assetregistry/SkillRegistryServiceTests.java
Moves authorization, storage writes, metadata validation, persistence, failure compensation, and supersession cleanup into SkillPackageAssetService. SkillRegistryService delegates import and replacement through the package command.
Release delivery and distribution integration
core/src/main/java/com/orgmemory/core/assetregistry/SkillReleaseDeliveryService.java, core/src/main/java/com/orgmemory/core/assetregistry/SkillDistributionService.java, core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java
Adds authorized release description and package opening. SkillDistributionService consumes release descriptors and content instead of resolving storage references directly.
Cleanup scheduling and storage adapters
core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupService.java, apps/worker/src/main/java/com/orgmemory/worker/assetregistry/SkillPackageSupersessionCleanupScheduler.java, apps/api/src/test/java/com/orgmemory/api/*, apps/worker/src/test/java/com/orgmemory/worker/*, integrations/object-storage-minio/src/**
Returns categorized cleanup summaries to the Worker, restricts direct capability dependencies, and moves SkillPackageStoragePort to the skillstorage package. Minio integration and related tests use the new package.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SkillRegistryService
  participant SkillPackageAssetService
  participant SkillPackageStoragePort
  participant AssetRegistryService
  participant SkillReleaseDeliveryService
  SkillRegistryService->>SkillPackageAssetService: import or replace package
  SkillPackageAssetService->>SkillPackageStoragePort: store and validate content
  SkillPackageAssetService->>AssetRegistryService: persist asset and reference
  SkillReleaseDeliveryService->>SkillPackageStoragePort: open authorized release content
  SkillReleaseDeliveryService-->>SkillRegistryService: return release descriptor and content
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: isolating the Skill artifact lifecycle within the Asset Registry.
Description check ✅ Passed The description explains the refactor and provides detailed verification evidence, but it omits the template's Documentation impact section.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/modulith-assetregistry-skill

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Tegami

This repository uses Tegami to manage releases. When your changes affect published packages, add a changelog file under .tegami/ before merging.

Create a changelog → · Changelog format

Release preview

Package Bump Version
orgmemory minor 0.1.10.2.0

This PR does not add changelog files. Pending changelogs from other branches are included in the preview above.

Run pnpm run tegami locally to create a changelog interactively.

Managed by Tegami.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java (1)

82-103: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Catch Jackson 3 write failures in the staging handlers.

upload() calls json.writeValueAsString(spec) with Jackson 3 (tools.jackson.databind). Serialization failures are unchecked (JacksonException/RuntimeException), so the catch (IOException failure) blocks in importPackage and replacePackage do not wrap the failure as BusinessUnavailableException("skill.package-staging-unavailable", ...).

Catch tools.jackson.core.exception.JacksonException here, or match the broader handling pattern used by nearby profile code. Apply the same change to both importPackage and replacePackage.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java`
around lines 82 - 103, Update the exception handling in both importPackage and
replacePackage to catch Jackson 3 serialization failures from upload(),
including JacksonException (or the broader established profile-handling type),
and wrap them as BusinessUnavailableException with the existing
"skill.package-staging-unavailable" code and context. Preserve the existing
IOException handling and staging behavior.
core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java (1)

63-81: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add tests for the remaining failure branches introduced by this split.

The current tests do not cover:

  • SkillDistributionService.open()'s own catch-and-close block, which runs when manifest(content.descriptor()) fails (for example, a spec.artifact() vs descriptor.artifact() mismatch in verifyReference, or specs.read() throwing) after deliveries.open() already returned content. In the fixture, spec().artifact().sha256() and reference.getDigest() always agree, so verifyReference never fails in any test.
  • SkillReleaseDeliveryService's !reference.isBlobReference() branch and its "reference not found" branch.

Add tests for these branches to confirm the content stream is closed and the correct exception type is thrown in each case.

Also applies to: 171-183

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java`
around lines 63 - 81, Extend the tests around SkillDistributionService.open() to
force manifest(content.descriptor()) to fail after delivery succeeds, covering
both an artifact-versus-descriptor mismatch in verifyReference and a
specs.read() exception; assert the stream closes and the expected exception is
thrown. Add SkillReleaseDeliveryService tests for a non-blob reference and a
missing reference, verifying each branch’s expected exception type and
stream-closure behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageArtifact.java`:
- Line 18: Update the mediaType validation in SkillPackageArtifact so it accepts
only ZIP_MEDIA_TYPE (application/zip), rejecting text/plain and all other values
while preserving the existing required-text and length validation.

In
`@core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageAssetService.java`:
- Around line 57-90: In importPackage and replacePackage, validate the
payload/artifact pairing with payloadPolicy.validate using upload.payload() and
upload.artifact() before calling store(actor, upload). Remove the later
duplicate validation after artifact retrieval, while preserving the existing
stored-artifact consistency checks and cleanup behavior for subsequent failures.

In
`@core/src/main/java/com/orgmemory/core/assetregistry/SkillReleaseDeliveryService.java`:
- Around line 139-149: Apply the same normalizeCoordinate validation used by
resolution to the write path in SkillPackageAssetService.importPackage before
registering the asset, covering both namespace and upload.slug(). Ensure
SkillPackageAssetService or the registration flow rejects null, blank, overlong,
or invalid-character coordinates before persistence, while preserving the
normalized values for registration.

---

Outside diff comments:
In
`@core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java`:
- Around line 82-103: Update the exception handling in both importPackage and
replacePackage to catch Jackson 3 serialization failures from upload(),
including JacksonException (or the broader established profile-handling type),
and wrap them as BusinessUnavailableException with the existing
"skill.package-staging-unavailable" code and context. Preserve the existing
IOException handling and staging behavior.

In
`@core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java`:
- Around line 63-81: Extend the tests around SkillDistributionService.open() to
force manifest(content.descriptor()) to fail after delivery succeeds, covering
both an artifact-versus-descriptor mismatch in verifyReference and a
specs.read() exception; assert the stream closes and the expected exception is
thrown. Add SkillReleaseDeliveryService tests for a non-blob reference and a
missing reference, verifying each branch’s expected exception type and
stream-closure behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8fef9ec0-c1c7-402c-acbd-046c41954e30

📥 Commits

Reviewing files that changed from the base of the PR and between f8444d6 and 5eb8c2a.

⛔ Files ignored due to path filters (6)
  • docs/increments/active/2026-07-31-spring-modulith-package-refactor/assetregistry-skill-challenge-brief.md is excluded by !docs/**
  • docs/increments/active/2026-07-31-spring-modulith-package-refactor/assetregistry-skill-challenge-verdict.md is excluded by !docs/**
  • docs/increments/active/2026-07-31-spring-modulith-package-refactor/design.md is excluded by !docs/**
  • docs/increments/active/2026-07-31-spring-modulith-package-refactor/plan.md is excluded by !docs/**
  • docs/specs/domains/asset-registry.md is excluded by !docs/**
  • docs/tests/domains/asset-registry.md is excluded by !docs/**
📒 Files selected for processing (37)
  • ARCHITECTURE.md
  • apps/api/src/test/java/com/orgmemory/api/SkillCapabilityBoundaryTests.java
  • apps/api/src/test/java/com/orgmemory/api/assetregistry/AssetRegistryIntegrationTests.java
  • apps/worker/src/main/java/com/orgmemory/worker/assetregistry/SkillPackageSupersessionCleanupScheduler.java
  • apps/worker/src/test/java/com/orgmemory/worker/SkillCapabilityBoundaryTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetPayloadReference.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryCoordinator.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillDistributionService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageAssetService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageCleanupOutcome.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageProfile.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinator.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillReleaseDeliveryService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupOperations.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupSummary.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/package-info.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseContent.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDeliveryQuery.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDescriptor.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/package-info.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageArtifact.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageAssetCommand.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackagePayloadPolicy.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageUpload.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/package-info.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/SkillPackageStoragePort.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/package-info.java
  • core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinatorTests.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillRegistryServiceTests.java
  • integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioObjectStorageAutoConfiguration.java
  • integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapter.java
  • integrations/object-storage-minio/src/test/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapterTests.java
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Backend · Java 25
🧰 Additional context used
📓 Path-based instructions (2)
**/*

📄 CodeRabbit inference engine (AGENTS.md)

**/*: Treat the repository and runtime evidence as the engineering system of record; do not treat chat or Northstar as authoritative.
Before changing a domain, read its specification, test-coverage document, and applicable decision filenames.
Material decisions about domain boundaries, authorization, persistence, publication, concurrency, cache isolation, parity scope, or deployment require an independent architecture challenge and documented alternatives before implementation.
Do not use completed increment documents as the source for current behavior; use them only for history or archaeology.
Before using unfamiliar Spring Boot, Spring Modulith, Spring AI, Gradle, React, Vite, Tailwind, TypeScript, Next.js, or Fumadocs APIs, consult current official documentation, Context7, and the relevant verification skill.
Read docs/guidelines/agent-safety.md before retrieval, AI, MCP, permission, upload, graph, or export work; never commit secrets or customer data.
Keep ddl-auto=validate and pair every persisted-model change with a Flyway migration.
Use the testing harness; a terminating clean test is the JVM context gate, and bootRun is not verification.

Files:

  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/package-info.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/package-info.java
  • integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapter.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/package-info.java
  • apps/worker/src/test/java/com/orgmemory/worker/SkillCapabilityBoundaryTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackagePayloadPolicy.java
  • apps/api/src/test/java/com/orgmemory/api/SkillCapabilityBoundaryTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupSummary.java
  • apps/api/src/test/java/com/orgmemory/api/assetregistry/AssetRegistryIntegrationTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDescriptor.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDeliveryQuery.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageAssetCommand.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageArtifact.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageCleanupOutcome.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupOperations.java
  • integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioObjectStorageAutoConfiguration.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinator.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageUpload.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryCoordinator.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinatorTests.java
  • integrations/object-storage-minio/src/test/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapterTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/package-info.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryService.java
  • apps/worker/src/main/java/com/orgmemory/worker/assetregistry/SkillPackageSupersessionCleanupScheduler.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseContent.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetPayloadReference.java
  • ARCHITECTURE.md
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageProfile.java
  • core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageAssetService.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillRegistryServiceTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillReleaseDeliveryService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/SkillPackageStoragePort.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillDistributionService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java
**/*.java

📄 CodeRabbit inference engine (AGENTS.md)

Apply IDE inspection only to edited backend Java files.

Files:

  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/package-info.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/package-info.java
  • integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapter.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/package-info.java
  • apps/worker/src/test/java/com/orgmemory/worker/SkillCapabilityBoundaryTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackagePayloadPolicy.java
  • apps/api/src/test/java/com/orgmemory/api/SkillCapabilityBoundaryTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupSummary.java
  • apps/api/src/test/java/com/orgmemory/api/assetregistry/AssetRegistryIntegrationTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDescriptor.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDeliveryQuery.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageAssetCommand.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageArtifact.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageCleanupOutcome.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupOperations.java
  • integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioObjectStorageAutoConfiguration.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinator.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageUpload.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryCoordinator.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinatorTests.java
  • integrations/object-storage-minio/src/test/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapterTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/package-info.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryService.java
  • apps/worker/src/main/java/com/orgmemory/worker/assetregistry/SkillPackageSupersessionCleanupScheduler.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseContent.java
  • core/src/main/java/com/orgmemory/core/assetregistry/AssetPayloadReference.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageProfile.java
  • core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageAssetService.java
  • core/src/test/java/com/orgmemory/core/assetregistry/SkillRegistryServiceTests.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillReleaseDeliveryService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/SkillPackageStoragePort.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillDistributionService.java
  • core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java
🪛 ast-grep (0.45.0)
core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java

[warning] 1290-1290: Avoid user-generated class names for reflection
Context: Class.forName(name)
Note: [CWE-470] Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection').

(unsafe-reflection-java)

🔇 Additional comments (41)
core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupService.java (1)

3-4: LGTM!

Also applies to: 13-14, 26-31, 40-48

core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageCleanupOutcome.java (1)

3-3: LGTM!

apps/worker/src/main/java/com/orgmemory/worker/assetregistry/SkillPackageSupersessionCleanupScheduler.java (1)

3-4: LGTM!

Also applies to: 16-29

core/src/test/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinatorTests.java (1)

4-58: LGTM!

apps/api/src/test/java/com/orgmemory/api/SkillCapabilityBoundaryTests.java (1)

1-33: LGTM!

apps/worker/src/test/java/com/orgmemory/worker/SkillCapabilityBoundaryTests.java (1)

1-31: LGTM!

apps/api/src/test/java/com/orgmemory/api/assetregistry/AssetRegistryIntegrationTests.java (1)

43-43: LGTM!

integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioObjectStorageAutoConfiguration.java (1)

3-3: LGTM!

integrations/object-storage-minio/src/main/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapter.java (1)

3-3: LGTM!

integrations/object-storage-minio/src/test/java/com/orgmemory/integrations/storage/minio/MinioSkillPackageStorageAdapterTests.java (1)

3-11: LGTM!

Also applies to: 23-29

ARCHITECTURE.md (1)

207-216: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageArtifact.java (1)

5-17: LGTM!

Also applies to: 21-38

core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageAssetCommand.java (1)

7-25: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackagePayloadPolicy.java (1)

3-6: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/SkillPackageUpload.java (1)

8-31: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillpackage/package-info.java (1)

1-2: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDeliveryQuery.java (1)

6-19: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseDescriptor.java (1)

7-14: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/SkillReleaseContent.java (1)

7-19: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skilldelivery/package-info.java (1)

1-2: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupOperations.java (1)

3-5: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/SkillPackageCleanupSummary.java (1)

3-24: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillcleanup/package-info.java (1)

1-2: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/SkillPackageStoragePort.java (1)

1-4: LGTM!

Also applies to: 28-29, 45-46, 72-83

core/src/main/java/com/orgmemory/core/assetregistry/skillstorage/package-info.java (1)

1-2: LGTM!

core/src/test/java/com/orgmemory/core/ModulithVerificationTests.java (1)

1193-1308: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageAssetService.java (1)

1-56: LGTM!

Also applies to: 125-185

core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageProfile.java (1)

3-16: LGTM!

Also applies to: 37-48

core/src/main/java/com/orgmemory/core/assetregistry/SkillRegistryService.java (1)

1-81: LGTM!

Also applies to: 105-113, 136-154

core/src/main/java/com/orgmemory/core/assetregistry/AssetPayloadReference.java (1)

3-3: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryCoordinator.java (1)

3-3: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/AssetRegistryService.java (1)

3-3: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/SkillPackageSupersessionCleanupCoordinator.java (1)

3-3: LGTM!

core/src/test/java/com/orgmemory/core/assetregistry/SkillRegistryServiceTests.java (1)

11-20: LGTM!

Also applies to: 45-236

core/src/main/java/com/orgmemory/core/assetregistry/SkillReleaseDeliveryService.java (4)

21-77: LGTM!


79-102: 🔒 Security & Privacy

Verify that storage exception details do not surface to API clients.

open() wraps the raw storage RuntimeException as the cause of AssetUnavailableException at Line 87-88. If the API layer serializes exception causes (directly or via a generic error handler that includes getCause() details) rather than only the top-level message, a MinIO/storage-layer message containing the object key could leak to the client. This would undercut the stated goal of preventing storage locator exposure.

Confirm that the global exception handler for AssetUnavailableException only returns the top-level message to clients, and that causes are used for server-side logging only.


104-137: LGTM!


151-155: LGTM!

core/src/main/java/com/orgmemory/core/assetregistry/SkillDistributionService.java (1)

3-139: LGTM!

core/src/test/java/com/orgmemory/core/assetregistry/SkillDistributionServiceTests.java (2)

19-19: LGTM!


83-144: LGTM!

@kl3inIT

kl3inIT commented Aug 3, 2026

Copy link
Copy Markdown
Owner Author

CodeRabbit follow-up for the outside-diff findings:

  • Fixed Jackson 3 serialization handling in 518e0277: canonical payload serialization now maps to the existing skill.package-staging-unavailable contract.
  • Added failure-branch coverage in SkillDistributionServiceTests: mismatched/unreadable manifests close the already-open content stream; missing and non-blob release references fail before storage access.
  • Confirmed storage exception causes are not serialized by the API: ApiExceptionHandler.business(...) builds the RFC 9457 response only from the stable top-level business category/code/message. Causes remain server-side.
  • Focused tests and the full Core suite pass: 491 tests, zero failures/errors/skips.

@kl3inIT

kl3inIT commented Aug 3, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@kl3inIT
kl3inIT merged commit d3509d6 into main Aug 3, 2026
18 checks passed
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