All AEM 6.5 LTS skills: Workflow model design, development, triggering, launchers, debugging, and triaging; Dispatcher config authoring, advisory, incident response, performance tuning, and security hardening; Replication agent configuration, content activation, API usage, and troubleshooting for AEM 6.5 LTS and AMS environments; Jackrabbit Oak query/index tuning (property, Lucene index definitions); and extracting/inventorying JCR queries (XPath, SQL2, QueryBuilder) across a codebase.
79%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
| Location | Use Case | Notes |
|---|---|---|
/conf/global/settings/workflow/models/ | All new models | Requires explicit Sync to /var |
/etc/workflow/models/ | Legacy models only | Auto-deployed without Sync |
/libs/settings/workflow/models/ | OOTB models | Overlay at /conf or /apps to survive upgrades |
mvn install -P autoInstallPackage) for developmentui.content) for production deploymentfilter.xml: always use mode="merge" for model paths to avoid overwriting sibling nodes<filter root="/conf/global/settings/workflow/models/my-workflow" mode="merge"/>
<filter root="/conf/global/settings/workflow/launcher/config/my-launcher" mode="merge"/>Both Felix SCR and DS R6 work on 6.5 LTS. Prefer DS R6 for new code:
// DS R6 (preferred)
@Component(service=WorkflowProcess.class, property={"process.label=My Step"})
// Felix SCR (still valid)
@Component(metatype=false)
@Service(value=WorkflowProcess.class)
@Property(name="process.label", value="My Step")Never mix Felix SCR and DS R6 annotations in the same class.
Create in CRXDE Lite or via repoinit. Always use loginService() with the sub-service name — never loginAdministrative().
// Correct on 6.5 LTS
Map<String, Object> auth = Collections.singletonMap(
ResourceResolverFactory.SUBSERVICE, "workflow-process");
ResourceResolver resolver = factory.getServiceResourceResolver(auth);When Manage Publication sends multiple pages, the payload is a cq:WorkflowContentPackage node under /etc/workflow/packages/.
In process steps, check:
if ("cq:WorkflowContentPackage".equals(
resource.getValueMap().get("jcr:primaryType", ""))) {
// iterate members via ResourceCollectionManager
}Purge workflow packages along with instances using scheduledpurge.purgePackagePayload=true.
To disable an OOTB launcher, create a node with the same name under /conf/global/settings/workflow/launcher/config/<name> with enabled={Boolean}false. Do not delete or modify the /libs or /etc node directly.
/var/audit, /var/eventing, /var/taskmanagement, /tmp, /var/workflow/instancesConfigure via Adobe Granite Workflow Purge Configuration OSGi factory.
Manual trigger: curl -u admin:admin -X POST http://localhost:4502/libs/granite/operations/content/maintenance/granite_weekly/granite_workflowpurgetask.run.html
.tessl-plugin
skills
aem-replication
aem-workflow
dispatcher
ensure-agents-md
references
tuning-oak-query-indexes