Skip to content

Extend repo: namespace with AEM repository-api properties; clarify repo:id (#2213)#2217

Open
cgoudie wants to merge 1 commit into
adobe:masterfrom
TechBlueprints:feature-2213-repo-properties
Open

Extend repo: namespace with AEM repository-api properties; clarify repo:id (#2213)#2217
cgoudie wants to merge 1 commit into
adobe:masterfrom
TechBlueprints:feature-2213-repo-properties

Conversation

@cgoudie

@cgoudie cgoudie commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

What this change does

Closes #2213.

The repository (repo:) namespace at http://ns.adobe.com/adobecloud/core/1.0 previously defined only repo:name, repo:path, repo:createDate, and repo:modifyDate. Adobe Experience Manager's repository API emits and consumes a substantially larger set of repo: properties, which until now had no authoritative definition in XDM.

This PR extends the core/1.0 Common Properties datatype to define the full set of repo: properties used by the repository API, grouped into composable definition blocks:

  • Identity / descriptive: repo:id, repo:assetId, repo:assetClass, repo:repositoryId, repo:repositoryType, repo:etag, repo:size, repo:version, repo:state, repo:resource (plus existing repo:name, repo:path, dc:format)
  • Dates: repo:discardDate, repo:expires, repo:lastPublishedTime (plus existing repo:createDate, repo:modifyDate)
  • Actor: repo:createdBy, repo:modifiedBy, repo:discardedBy
  • Hierarchy: repo:ancestors
  • Access control: repo:owner, repo:acl (with nested repo:principal, repo:privileges, repo:relations, repo:modifier, repo:inheritance)
  • Transfer / discovery: repo:resource, repo:md5, repo:blocksize, repo:accelerated, repo:availableRegions, repo:environment
  • Dynamic Media (Scene7): repo:scene7Domain, repo:scene7File, repo:scene7FileStatus, repo:scene7Folder, repo:scene7FontStyle, repo:scene7FontType, repo:scene7LastModified, repo:scene7Name, repo:scene7RTFName, repo:scene7Type

Shape verification

Property shapes were verified two ways to avoid freezing an incorrect shape into the immutable core/1.0 namespace:

  1. Read against the repository-api Jackson serialization code.
  2. Confirmed against a live AEM as a Cloud Service instance.

Notable non-scalar shapes: repo:resource is an object ({repo:reltype, component_id, revision, etag}), repo:principal is a string or object ({@id, xdm:provider, @type}) depending on principal type, repo:owner is an object map, repo:modifier is the enum GRANT/DENY, repo:ancestors is a string array of asset ids, and repo:size/repo:blocksize are integers.

The conditional-request properties repo:if-match / repo:if-none-match are intentionally excluded: they are operation preconditions supplied on a request (an ETag the upload is made conditional on), not descriptive metadata of the stored resource.

repo:id clarification

repo:id was previously described only as an asset identifier, but it is used across Adobe products to identify different kinds of entities (assets, directories, and persons/principals). This PR redefines it as the generic identifier of an addressable repository entity and makes its relationship to the asset-scoped repo:assetId explicit, so that consumers and code-generation tooling stop conflating the two.

Breaking changes

None. All additions are optional properties; existing properties are unchanged. The only modifications to existing definitions are added titles/descriptions.

Checklist

  • node bin/validate-schemas.js introduces no new validation failures (failing-example set identical to master)
  • npm test passes (2406 passing)
  • prettier --check clean on changed source files
  • Documentation regenerated for the changed schema (docs/reference/datatypes/external/repo/common.schema.{json,md})
  • common.example.1.json updated to exercise the new properties
  • CHANGELOG.md updated

…po:id (adobe#2213)

The repository (repo:) namespace at http://ns.adobe.com/adobecloud/core/1.0
previously defined only repo:name, repo:path, repo:createDate and
repo:modifyDate, while AEM's repository API emits a much larger set. This
adds the missing properties (identity, audit, lifecycle, access control,
transfer, and Dynamic Media) to the core/1.0 Common Properties datatype.

The change is non-destructive: no existing property's type or contract is
changed and nothing is removed. Descriptive metadata (title/description) is
added to the existing repo:name and repo:path, and new optional properties
and definition groups are inserted.

Property shapes were verified against the repository-api serialization code
and confirmed against a live AEM as a Cloud Service instance: repo:resource
is an object (ResourceDesignator), repo:principal is a string or an object,
repo:modifier is GRANT/DENY, repo:ancestors is a string array of asset ids,
and repo:size is an integer. repo:id is clarified as the generic identifier
of an addressable repository entity (asset, directory, or person/principal),
distinct from the asset-scoped repo:assetId which AEM treats repo:id as a
deprecated alias of.

Includes regenerated documentation, an updated example, and a CHANGELOG entry.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

Repository (repo:) namespace under-specifies properties used by AEM repository-api; repo:id meaning is ambiguous

1 participant