Problem
GET /api/asset-delivery returns one AssetSummary per Asset carrying a single releaseId/versionLabel — the current usable release. An older release is still addressable (GET /api/asset-delivery/{assetId}/releases/{releaseId} works if you know the UUID) but not discoverable.
Consequences today:
Proposal
Add GET /api/asset-delivery/{assetId}/releases returning the releases of one Asset that the current actor may use.
Constraints that must hold:
- same authorization path as the rest of asset-delivery, no second ACL;
- released state only — no draft, no governance/portfolio internals, matching the delivery boundary the asset-registry spec already promises;
- per item:
releaseId, versionLabel, releaseDigest, releasedAt, availability;
- deterministic order (newest first).
Then in apps/mcp: extend AssetCompletionAdapter so release_id suggests the full authorized history, and consider a list_asset_releases read-only tool.
Acceptance
Notes
Do this before the prompt-coordinate change: that one needs exact version labels, which this endpoint supplies.
Problem
GET /api/asset-deliveryreturns oneAssetSummaryper Asset carrying a singlereleaseId/versionLabel— the current usable release. An older release is still addressable (GET /api/asset-delivery/{assetId}/releases/{releaseId}works if you know the UUID) but not discoverable.Consequences today:
release_id(added in feat(mcp): scope completion to authorized Assets and sanitize tool errors #121) can only ever suggest the current release.Proposal
Add
GET /api/asset-delivery/{assetId}/releasesreturning the releases of one Asset that the current actor may use.Constraints that must hold:
releaseId,versionLabel,releaseDigest,releasedAt,availability;Then in
apps/mcp: extendAssetCompletionAdaptersorelease_idsuggests the full authorized history, and consider alist_asset_releasesread-only tool.Acceptance
contracts/openapi.jsonregenerated viaOpenApiContractTestsNotes
Do this before the prompt-coordinate change: that one needs exact version labels, which this endpoint supplies.