From an AEM site to Adobe Experience Platform
with the Platform Web SDK

A step-by-step build of the collection path: an AEM as a Cloud Service site emitting an Adobe Client Data Layer, a Tags property carrying the Web SDK, a datastream routing events into a dataset, and pageview data landing in Experience Platform. Every screen below is a real Adobe UI capture, not a mock-up.

Sample site: WKND (AEM) / Luma (tutorial) 29 real UI captures Built from ZeroBag corpus + live Experience League 2026-10-19

Read this first — what is sourced from where

You asked me to build this from the ZeroBag Adobe documentation dump. I need to be straight with you about what that dump could and could not give me, because it changes how much weight to put on each part.

ElementTierWhere it came from
Web SDK definition, Edge Network roleT1Your corpus: AEP-10-platform-14…web-sdk-tutorial, AEP-02-sdk-01…datastreams
Datastream / dataset conceptsT1Your corpus: AEP-02-sdk-01-01-AEP-datastreams.md, AEP-05-datasets
The AEM → Web SDK integration itselfLIVENot in your dump. Zero AEM documentation was collected. Sourced live from Experience League and the AdobeDocs GitHub repo on 2026-10-19
All 29 screenshotsLIVE16 published PNGs from AdobeDocs/experience-manager-learn.en; 13 frames I extracted from Adobe's own tutorial screen recordings
Identity contract commentaryT3Your design, from 02-MY-PROFILE.md — not an Adobe requirement
Your corpus has zero screenshots — and that is measurable, not an opinion. Across all 147 documents the only image references left are https://example.com/jacket.jpg and https://example.com/shoes.jpg, which are placeholders inside sample payloads. Every real image was dropped by the HTML→Markdown conversion. So "use as many actual UI screenshots as possible" could not be satisfied from the dump at all — it required live sourcing. Flagging that because it tells you something about the corpus: any tutorial page in it is missing its visual half.
Freshness. The AEM Web SDK tutorial's last-substantial-update metadata is 2023-04-26, and the tutorial screenshots show April 2023 timestamps in the AEP UI. The concepts and sequence are current; specific screen layouts, the "Offer Decisioning" service option, and navigation labels will have moved. Treat the screenshots as teaching the shape of each screen, not the exact pixels you will see today.

The mental model: what actually moves

Before the clicks. This is the thing most people get wrong when they describe Web SDK as "the analytics tag."

AEM siteCore Components
emit data layer
→
Adobe Client
Data Layer
window.adobeDataLayer
components + events
→
Tags propertydata elements
+ rules
→
Web SDK
("alloy")
builds an XDM
event, calls Edge
→
Edge Networkdatastream
tells it where
to send
→
Datasetin the data lake,
schema-bound
→
Profile →
Segments → AJO
the reason
any of it exists

Why each hop exists — the problem it solves

AEM → Client Data Layer. AEM renders components. Without a standard contract, every tag would need to know AEM's DOM, which changes with templates and component versions. The Adobe Client Data Layer is a JS object AEM Core Components populate automatically — window.adobeDataLayer — carrying component state and firing events like cmp:show. It decouples what the page knows from what the tag reads. That decoupling is the whole reason an implementation survives a redesign.

Client Data Layer → Web SDK. Web SDK does not scrape the DOM. It sends a structured XDM payload. Data elements are the bridge: small functions that pull a value out of the data layer and expose it to a rule. This is where you decide your event's shape, and it is the step that most directly determines whether your profile data is trustworthy.

Web SDK → Edge → datastream. The critical architectural point, and the one your corpus (AEP-02-sdk-01-01-AEP-datastreams.md) supports: the website does not know about Adobe destinations. Web SDK sends one XDM event to the Edge Network. The datastream — configured server-side, not in the page — decides which sandbox it lands in and which datasets or applications receive it. Adding Adobe Analytics, or Journey Optimizer, or a warehouse export later is a datastream change, not a re-tag of the site. One collection, many consumers, no redeploy.

The sentence to be able to say out loud. "Web SDK is a client-side JavaScript library that allows customers of Adobe Experience Cloud to interact with both Adobe applications and third-party services through the Adobe Experience Platform Edge Network." — T1AEP-10-platform-14…web-sdk-tutorial.md

Prerequisites and permissions

Both sides need access, and this is where implementations stall more often than in any technical step. LIVE AEM Web SDK tutorial, Prerequisites

In AEM as a Cloud Service

  • AEM Administrator access to the AEMaaCS environment
  • Deployment Manager access to Cloud Manager
  • WKND sample project cloned and deployed to your environment

In Experience Platform

  • Access to the Prod sandbox
  • Schemas and Datasets under Data Management
  • Datastreams and Tags under Data Collection

Missing permissions are granted through the Adobe Admin Console. Your corpus also lists the finer-grained tag rights needed for a full implementation — T1 AEP-10-platform-14…web-sdk-tutorial.md:

SurfacePermission
Data CollectionPlatforms — Web, and Edge if licensed
Property RightsApprove, Develop, Edit Property, Manage Environments, Manage Extensions, Publish
Company RightsManage Properties
Data ModelingManage Schemas, View Schemas
Identity ManagementManage Identity Namespaces, View Identity Namespaces
Data Collection (AEP)Manage Datastreams, View Datastreams
Worth noting for your interview positioning. Web SDK is not gated on a Platform licence. Per your corpus: "All Experience Cloud customers can use Platform Web SDK. It is not a requirement to license a Platform-based application like Real-Time Customer Data Platform or Journey Optimizer to use Web SDK." T1 Same file, Prerequisites.

1Deploy the AEM site

Outcome. You can open a page and type window.adobeDataLayer in the console and get an object back — and you know whether you are on AEMaaCS or AEM 6.5, because Step 6 will fork on it.

Everything downstream is demonstrated against WKND, Adobe's sample AEM Sites project. In your own estate this step is simply "the site exists" — but the two properties that matter are that it runs AEM as a Cloud Service and uses Core Components, because those are what make the data layer appear without custom code.

WKND Climbing New Zealand page in a browser
The WKND "Climbing New Zealand" article page — the kind of content page whose view becomes an XDM event. Frame extracted from Adobe tutorial video 3418899 · 854×480 source, upscaled

What to check before going on

2Understand the data layer you are about to read

Outcome. You can state what a data element reads (dc:/repo:/xdm: keys) and what event wakes the rule (cmp:show) — before touching Tags.

You cannot configure data elements in Step 5 without knowing what the layer exposes. This is the step people skip and then guess at.

Console output of a cmp:show event payload
The cmp:show event as it appears in the browser console when a component enters view — the trigger the rule in Step 5 listens for. AdobeDocs/experience-manager-learn.en · adobe-client-data-layer
adobeDataLayer.getState() response object
adobeDataLayer.getState() returns the component's state object — the keys (dc:title, repo:path) your data elements will read. AdobeDocs/experience-manager-learn.en · adobe-client-data-layer
WKND page with devtools showing adobeDataLayer state
The same idea on a live page: WKND with devtools open, showing the data layer state for page-home — repo:type: "wknd/components/page", dc:title, xdm:dictURL and friends. These are the exact keys a data element addresses. Frame from Adobe tutorial video 3418896
The naming convention is the contract. dc: is Dublin Core (title, description), repo: is JCR/repository metadata (path, primary type), xdm: is already Experience Platform vocabulary. When a component property is prefixed xdm:, it maps almost directly onto your schema field — which is why AEM is unusually good to integrate with compared to a CMS with an ad-hoc data layer.

3Create the XDM schema in Experience Platform

Outcome. A saved schema bound to the AEP Web SDK ExperienceEvent field group, with identityMap present as a Map. You know why it is a Map.

Switch to AEP. You are creating the shape your web events will take. The tutorial's instruction is to build a schema and add Adobe's own field group AEP Web SDK ExperienceEvent rather than inventing fields — LIVE Integrate AEM Sites and Experience Platform Web SDK, "Create XDM Schema".

AEP Schemas landing page
Schemas landing in the AEP left rail under Schemas, with "Getting started with schemas" and Create your first schema. Frame from Adobe tutorial video 3418894
Add field groups modal with existing field groups
Add field groups modal, "Use existing field groups" selected, industry filter on the left (All, Retail, Financial Services, Travel and hospitality, B2B, Healthcare). The list is Adobe- and customer-authored field groups — Luma demo groups are visible because this is Adobe's tutorial tenant. Frame from Adobe tutorial video 3418894

Select AEP Web SDK ExperienceEvent and preview it before committing:

Preview of the AEP Web SDK ExperienceEvent field group
Preview field group: AEP Web SDK ExperienceEvent — structure tree on the left (device, environment, placeContext, userActivity.region, web, experience, identityMap) and its properties on the right. This is the standard web-event skeleton Web SDK will populate. Frame from Adobe tutorial video 3418894
Saved WKND-Demo-Website-Data schema with green success toast
The finished WKND-Demo-Website-Data schema with "Schema saved successfully". Read the structure pane carefully — this is the payload shape your site will emit: environment, device, placeContext, userActivity.region, web.webInteraction, experience._id, timestamp, experienceLanding, and identityMap as a Map. Frame from Adobe tutorial video 3418894
Why identityMap being a Map matters. It is not a field you set — it is where the namespaces you configure in Step 5 land. One event can carry several identities at once (ECID plus your CRM key), and the Map is the structure that allows it. This is the seam between "collection" and "identity resolution," and it is the part of the chain your own design has opinions about (see the contract section).
Correction your instructions asked me to enforce. A common misstatement is that ExperienceEvent schemas are identity-free. They are not — identityMap is right there in the field group you just added. T1 Confirmed in your own corpus at AEP-04-xdm and visible in the screenshots above.

4Create the datastream

Outcome. A datastream with the right schema and sandbox, services deliberately empty — and you can say why that separation exists.

The datastream is the routing contract. Your corpus states its purpose plainly: T1 AEP-02-sdk-01-01-AEP-datastreams.md — a datastream configures the connection between the Edge Network and Experience Platform, and tells the Edge where to send collected data and which sandbox it belongs to.

WKND-Demo-Website-Datastream detail panel
Datastreams → WKND-Demo-Website-Datastream. Left: the empty state "No services have been added yet" with Add Service. Right: the detail pane showing Datastream ID, Edge Configuration ID, Endpoint, Event Schema, Created and Last Modified fields. Frame from Adobe tutorial video 3418896

What you are deciding here

Event schema
The schema from Step 3. This binds the datastream to a payload shape.
Sandbox
Which AEP sandbox the data lands in. Wrong sandbox = data nobody can see.
Domain
Which site origins the Edge should accept events for.
Services
Empty at this point — you bind the dataset in Step 7. Deliberately split.
The design consequence worth internalising. Note the ordering: the schema and datastream exist before anything touches the website, and the datastream starts with no services attached. Collection and consumption are separated on purpose. That is what lets you add Journey Optimizer or a warehouse export later without re-tagging a single page — and it is exactly the property your Marketo↔AEP coexistence design depends on.

5Create the Tags property and install Web SDK

Outcome. A published tag property with the alloy SDK instance pointing at your datastream, one working rule, and Dev/Stage libraries promoted in order.

Now the tag container. Per the tutorial LIVE, the property needs two extensions — Core and Adobe Experience Platform Web SDK — plus custom-code data elements for page-name, site-section and host-name, an XDM Object data element bound to the Step 3 schema, and one rule firing on the data layer's cmp:show event.

Tags property list
Tags → Property List. One property per site or brand grouping; each has Platform (Web / Mobile) and Lifecycle (Development / Production) attributes. AdobeDocs/experience-manager-learn.en · data-collection/tags
Installing the Web SDK extension
Adding the Adobe Experience Platform Web SDK extension to the property. AdobeDocs · cloud-service/personalization
Web SDK extension installed
Extension present in the property's Extensions list. AdobeDocs · cloud-service/personalization
Web SDK configuration form with alloy instance and datastream
The configuration screen that matters most in this whole build. SDK instances: instance name alloy, Edge base URL for event sending, Report collection endpoint, Personalization decisions endpoint, Pageviews dataset. Datastreams: a Select datastream control per environment — PROD and STAGE — here pointing at WKND-Demo-Website-Datastream. Frame from Adobe tutorial video 3418896
This screen is the boundary of your responsibility as an architect. The datastream binding is what makes the site's events land in the right sandbox against the right schema. If you define an identity contract with the web team, this is the form it gets implemented in — and it is a property-level setting, so a wrong choice here silently mis-routes every event from every page. It is also why "I define the contract, the web team ships it" is a defable position and "I configured this in production" is not.

Data elements — the code that reads the data layer

Verbatim from the tutorial's accordion LIVE. These are custom-code data elements:

Page Name

if (event && event.component && event.component.hasOwnProperty('dc:title')) {
    return event.component['dc:title'];
}

Site Section

let pagePath = event.component['repo:path'];
let siteSection = '';

// check for .html in the URL
if (pagePath.indexOf('.html') > -1) {
    siteSection = pagePath.substring(0, pagePath.lastIndexOf('.html'));
    siteSection = siteSection.replaceAll('/', ':');   // slash to colon
    siteSection = siteSection.replaceAll(':content:', '');
}
return siteSection;

Host Name

if (window && window.location && window.location.hostname) {
    return window.location.hostname;
}

Notice what is happening: event.component is not a browser event — it is the data layer component state, handed to the rule by the code in the next section. The rule's event, not the DOM, is the data source.

The rule — listening for cmp:show

Rule event code

The rule's custom event code is the bridge between AEM's data layer and the Tags rule engine. LIVE verbatim:

var pageShownEventHandler = function (evt) {
    // defensive coding to avoid a null pointer exception
    if (evt.hasOwnProperty("eventInfo") && evt.eventInfo.hasOwnProperty("path")) {
        console.debug("cmp:show event: " + evt.eventInfo.path);
        var event = {
            // path of the component that triggered the event
            path: evt.eventInfo.path,
            // state of the component that triggered the event
            component: window.adobeDataLayer.getState(evt.eventInfo.path)
        };
        // Trigger the Tags Rule, passing in the new 'event' object.
        // It is then referenced as 'event' by the data elements:
        //   e.g. event.component['dc:title']
        trigger(event);
    }
}

// set the namespace to avoid a potential race condition
window.adobeDataLayer = window.adobeDataLayer || [];
window.adobeDataLayer.push(function (dl) {
    dl.addEventListener("cmp:show", pageShownEventHandler);
});
Three details in that snippet that are worth being able to explain. ① getState(path) rather than reading a pushed payload. The event carries only a path; the handler looks the state up. That keeps events small and means late-arriving component data is still correct at read time. ② The namespace guard window.adobeDataLayer = window.adobeDataLayer || [] exists to avoid a race condition — the tag can load before the page has established the layer. ③ trigger(event) is the seam: it hands the object to Tags, where the reserved name event makes it reachable from every data element.
Creating a new rule in Tags
Creating the rule that will carry that event code. AdobeDocs · data-collection/tags
Selecting the datastream in the extension configuration
Choosing which datastream the Web SDK instance sends to — the moment the tag and the Platform configuration are joined. AdobeDocs · cloud-service/personalization
Checkpoint — the Step 5 config names the SDK instance alloy and binds it to a datastream per environment (PROD / STAGE). If a colleague binds PROD to the wrong datastream, what breaks — and where does the error surface?
Answer. Every event from every page lands in the wrong sandbox, against the wrong schema. It surfaces nowhere loud — collection succeeds, requests return 200, and the data simply appears where nobody looks (or fails validation in a dataset bound to the correct schema). That is why the datastream binding is called the boundary of your responsibility in this document: it is a property-level setting that mis-routes silently.

Publish

Published library in the publishing flow
Publishing through the Publishing Flow. The tutorial's practical tip: use Add All Changed Resources rather than hand-picking data elements and rules, and during development publish only to the Development environment before promoting to Stage or Production. AdobeDocs · data-collection/tags

6Connect the Tags property to AEM

Outcome. A healthy IMS config and the cloud services configuration applied at the site root — and a rendered _satellite object on the page.

This is the AEM-specific hop, and the one your corpus cannot help you with at all. The mechanism is an Adobe IMS service credential plus a Tags in Adobe Experience Platform cloud services configuration in AEM. LIVE

Version fork — do not blur these. On AEM as a Cloud Service, several Adobe IMS technical account configurations are created automatically when the environment is established, including one for Tags. On AEM 6.5 you must configure that credential manually. The tutorial calls this out explicitly; mixing the two up is a common and very visible interview error.
AEM Cloud Services showing a healthy IMS configuration
Tools → Security → Adobe IMS Configurations (or Cloud Services): the Tags configuration reporting healthy. This health check is where you confirm AEM can actually talk to the tag container. AdobeDocs · data-collection/tags
AEM Cloud Services configuration for Tags
The Tags in Adobe Experience Platform cloud services configuration in AEM, where the property is selected. AdobeDocs · data-collection/tags
Applying the cloud services configuration to the WKND site
Applying the configuration to the site — done at the site root so it inherits down. Until you do this, the configuration exists but the pages never load it. AdobeDocs · data-collection/tags
Tag property detail showing environments
Back in AEP: the property detail with its environments and the embed code path. The Development / Stage / Production environment entries are what AEM resolves against. AdobeDocs · data-collection/tags

Once bound, AEM injects the published tag library into the page — on both author and publish instances:

Tag property applied on author and publish pages
The same property resolving on author and publish. Author-side collection is useful for testing and dangerous in production — know which one you are looking at. AdobeDocs · data-collection/tags

7Create the dataset and bind it to the datastream

Outcome. The dataset bound under Add Service, and you can explain a greyed-out service toggle without calling it a bug.

Nothing collected so far has anywhere to be stored. Your corpus describes a dataset as "a storage and management construct for a collection of data like a database table that follows a schema" T1 AEP-05-datasets.

Create dataset from schema workspace
Workspaces → Create dataset from schema → Configure dataset: Name WKND-Demo-Dataset, plus Description. The schema is chosen in the step before this screen. Frame from Adobe tutorial video 3418898

Then go back to the datastream and attach it — this is the "Add Service" screen the Step 4 screenshot showed empty:

Datastream Add Service panel with a permission warning
Datastreams → Add Service. Service: Adobe Experience Platform. Enabled on. Select Dataset: WKND-Demo-Dataset. Batch Size. Then a set of optional services — Offer Decisioning (unchecked, with an amber warning), Edge Augmentation, Personalization Destinations, Adobe Journey Optimizer. Frame from Adobe tutorial video 3418898
Read that warning carefully — it is a real lesson. It says, in effect: you either do not have permission to access Offer Decisioning in this sandbox, or the sandbox is not fully provisioned yet. Optional Platform services are licence- and provisioning-gated independently of collection working at all. Web SDK can be successfully collecting events while an adjacent service toggle is unavailable. When something in this panel is greyed out, it is usually a provisioning gap, not a mistake in your implementation.
Tier 3 — your design, not an Adobe requirement. Your target architecture has AEP as an activation read model with Informatica mastering identity, and dimension entities holding no time-series data. This Add Service screen is where that design would physically land: the dataset you bind here is the Contact-keyed event stream, and the deliberate absence of an Operator dataset is your choice. Adobe offers the toggle; your architecture declines it. Say it that way and the distinction is unimpeachable.

8Generate traffic and verify ingestion

Outcome. Two numbers on the Dataset activity screen — batches ingested and failed batches = 0 — and you can explain a low batch count.

Browse the WKND site — the tutorial's point is that you must actually produce events, then confirm the platform received them. This is the step that turns a configuration exercise into evidence.

Dataset activity showing ingested records and batches
Datasets → WKND-Demo-Dataset → Dataset activity. The numbers that prove the chain works: total records in previous month 60, ingested records in the last 7 days 60, ingested batches today 2, failed batches today 0, ingested batches in the last 7 days 2, with total size 36.43 and two time-series charts (ingested records; ingested vs failed batches). Right pane: name, schema WKND-Demo-Website-Data, created and last-modified dates. Frame from Adobe tutorial video 3418899
The two numbers to look at first, and why. Failed batches = 0 tells you the payload validated against the schema. Ingested batches = 2 while browsing many pages tells you something subtler: Web SDK batches events before sending them. A low batch count is normal and expected — it is not missing data. People who do not know about batching misread this as "my events are being dropped."
Checkpoint — the Dataset activity reads: total records 60, ingested batches 2, failed batches 0. You browsed far more than 2 pages. Is data missing? Defend your answer with the two numbers.
Answer. No data is missing. Failed batches = 0 means every payload that arrived validated against the schema — that is the real health signal. The low batch count is expected: Web SDK batches events before sending, so many pageviews ride in few requests. The two numbers answer different questions: did anything fail to validate (no) vs how were requests grouped (batched). Conflating the two is the document's whole debugging lesson.

Validation, debugging, and the failure modes that actually happen

1 — Is the tag even loading?

Console showing the _satellite object
The classic check: type _satellite in the console. Its presence confirms the tag library loaded; _satellite.buildInfo tells you which library and environment. AdobeDocs · data-collection/tags

2 — Is the event firing and shaped correctly?

Network request to the Edge Network with XDM payload
The Edge Network request in the Network tab — the XDM payload the SDK assembled. If a field is wrong here, the bug is in a data element, not in Platform. AdobeDocs · cloud-service/personalization
Edge Network response
The Edge response. For collection-only events this is often minimal; for decisions and personalization it carries the directives back. AdobeDocs · cloud-service/personalization

The tutorial lists exactly what to verify with the Experience Platform Debugger Chrome extension LIVE:

Failure modes, ordered by how often they bite

SymptomUsual causeWhere to look
No request to Edge at allCloud services configuration not applied to the site root, or library not published to that environmentStep 6 · _satellite.buildInfo
Request fires, fields emptyData element reading a key the component does not emit, or cmp:show not firing for that componentStep 5 · getState() in console
window.adobeDataLayer undefinedNot Core Components, or AEM version without the data layer, or a custom templateStep 2
Events accepted, nothing in datasetDatastream has no service bound, or bound to a different sandboxStep 7 Add Service · Step 4 sandbox
Failed batches > 0Payload does not validate against the schema — usually a type mismatch or a field outside the field groupDataset activity · schema structure
Service toggle greyed outLicensing or sandbox provisioning, not an implementation errorStep 7 warning
Wrong identity on the profileNamespace not configured, or authenticated ID not being sent on the eventidentityMap in the payload
Assurance — a boundary you must keep straight. The tutorial mentions validating with Debugger and Assurance, and your corpus has Assurance material in the Mobile SDK docs. But your profile is explicit: Assurance and event forwarding are not used on this account. So in an interview, describe Assurance as something you understand the role of in a Web SDK validation strategy — not something you have operated.

Where this meets your identity contract

Tier 3 throughout this section. Everything below is your design from 02-MY-PROFILE.md. It is defensible. It is not an Adobe requirement, and Adobe's default guidance does not necessarily agree with it.

Your stated contract for the production Web SDK layer: an authenticated event carries ECID plus Contact ID, Contact ID is primary, and consent is collected before activation. Map that onto what you have just seen:

Contract elementWhere it is physically implementedHonest status
ECID present on the eventWeb SDK does this automatically; lands in identityMapProduct behaviour T1
Contact ID on the same eventA data element reading the authenticated user's state, mapped into identityMap with your namespaceYour design T3
Contact ID as primaryIdentity namespace configuration in AEP, plus the primary flag on the identity in the payloadYour design T3
Consent before activationWeb SDK consent options / identity cookie behaviour, gated by the data layer's consent stateMechanism T1, policy T3
The gap this document exposes, stated plainly. Everything above the identity row — schema, datastream, tag property, data elements — is collection. Your contract is about identity, and identity namespace configuration is a separate step this tutorial does not cover. It lives in AEP under Identity Management → Namespaces, and it is in your corpus (AEP-06-identity) but not in this walkthrough. So if you are asked "how does Contact ID become primary?", the honest answer is: the namespace is configured in Platform and the event carries it in identityMap — I have designed that contract, the web team implements the SDK configuration. Do not let a smooth collection walkthrough imply you have done the identity part.

Gaps in this document

Stating these is more useful than pretending coverage.

Source table

TierSourceUsed for
LIVEIntegrate AEM Sites and Experience Platform Web SDK — Experience LeagueThe 8-step sequence, prerequisites, data element and rule code, IMS/Tags connection
LIVEAdobeDocs/experience-manager-learn.en — help/sites/integrations/…16 published UI screenshots; the tutorial markdown source
LIVEAdobe tutorial videos 3418856, 3418894, 3418895, 3418896, 3418897, 3418898, 341889913 frames extracted with ffmpeg and inspected individually
T1corpus/AEP-10-platform/AEP-10-platform-14…web-sdk-tutorial.mdWeb SDK definition, permissions list, tutorial scope
T1corpus/AEP-02-sdk/AEP-02-sdk-01-01-AEP-datastreams.mdDatastream purpose and routing role
T1corpus/AEP-05-datasets/Dataset definition
T1corpus/AEP-04-xdm/ExperienceEvent carrying identity — the correction in Step 3
T302-MY-PROFILE.mdThe identity contract and the Operator/dimension design commentary

Retrieval dates. Corpus documents 2026-10-18. Live sources retrieved 2026-10-19. AEM tutorial last substantial update 2023-04-26. Numeric limits and UI labels move between releases — verify anything load-bearing against the live page before repeating it.