CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

adobe/aem-cloud-service

All AEM as a Cloud Service skills: component development, Workflow model design, development, triggering, launchers, debugging, and triaging, Dispatcher config authoring, advisory, incident response, performance tuning, and security hardening, Rapid Development Environment (RDE) deployment, log inspection, snapshots, and troubleshooting via `aio aem rde`, Jackrabbit Oak query/index tuning (property, Lucene index definitions), and extracting/inventorying JCR queries (XPath, SQL2, QueryBuilder) across a codebase.

Quality

85%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

patterns.mdskills/code-assessment/references/

Pattern catalog

The full set of code-quality patterns this skill handles — one row per pattern. This table is the single source of truth for per-pattern metadata; it is not duplicated into the expert skills (which hold the how-to).

Adding a pattern: add a row here, then build the expert skill from _template.md. Routing of a user request to a pattern lives in ../SKILL.md (Manual Pattern Hints).

Fields

  • pattern — slug; matches the expert-skill directory name.
  • description — one line.
  • severity — high | medium | low. The report orders findings by this (highest first).
  • status — ready (expert skill built) | planned (catalogued placeholder, not built yet).
  • detection — how instances are found: analyzer (the deterministic local analyzer parses the workspace and emits findings — see ../scripts/README.md). Every ready pattern uses analyzer; there is no LLM-scan code path in this version. planned rows leave it - — the detector is built (and this set to analyzer) when the pattern reaches ready. When the user names targets directly, that's the with_findings invocation mode (see ../SKILL.md), not a per-pattern detection method.
  • fix — mechanical (deterministic edit) | guided (LLM-judgment remediation). Set only when a pattern reaches ready and has a recipe to prove it; planned rows leave it - (the fix approach is decided when the pattern is built).

planned patterns are ordered by remediation value — they are the roadmap, our prioritization.

Catalog

patterndescriptionseveritystatusdetectionfix
inject-in-sling-modelmigrate @Inject fields in @Model classes to injector-specific annotationshighreadyanalyzermechanical
outdated-dependenciesupgrade stale Maven dependency versionsmediumreadyanalyzermechanical
schedulermigrate org.apache.sling.commons.scheduler.Scheduler / implements Job to Cloud Service-compatible OSGi properties or Sling Jobs via JobManagerhighreadyanalyzerguided
resource-change-listenermigrate JCR EventListener / resource-topic EventHandler to lightweight ResourceChangeListener + JobConsumerhighreadyanalyzerguided
replicationmigrate CQ Replicator / Sling Replication Agent to the Sling Distribution API (Distributor + SimpleDistributionRequest)highreadyanalyzerguided
event-migrationmigrate OSGi EventHandler with inline business logic (replication / workflow / custom topics) to lightweight EventHandler + JobConsumer split, with TopologyEventListener for leader-only executionhighreadyanalyzerguided
asset-managermigrate DAM AssetManager create/upload via Direct Binary Access (@adobe/aem-upload) and delete via in-JVM resolver.delete() + commit() or HTTP Assets API; removes createAssetForBinary / getAssetForBinary / removeAssetForBinary (not available on CS)highreadyanalyzerguided
outbound-call-timeoutsadd connect/read/socket timeouts to outbound HTTP client construction (Apache HttpClient, OkHttp, JDK HttpClient)highreadyanalyzermechanical
unbounded-querybound or escalate an explicitly-unbounded query (p.limit=-1 predicate / setLimit(-1)) — safe-cap where provable, else flag for paginationhighreadyanalyzerguided
tuning-oak-query-indexescheck a JCR/Oak query is served by an index and propose the property/Lucene index-definition change when it is not (requires the index definition; deferred if not supplied)highreadyanalyzerguided
unclosed-resourcesclose ResourceResolver / Session / streams via try-with-resourceshighplanned--
thread-lock-contentionreplace coarse synchronized / synchronized collections on shared state with concurrent typeshighplanned--
heavy-model-initmove heavy work (I/O, queries) out of @PostConstruct / Sling Model initmediumplanned--
in-process-image-processingmove in-request BufferedImage / ImageIO work to renditions / asyncmediumplanned--
unbounded-recursionadd a depth guard to self-recursive / tree-traversal methods (incl. navigation & breadcrumb)mediumplanned--
unbounded-graphqladd pagination (first / limit) to GraphQL queriesmediumplanned--
logging-in-loopsmove logging out of hot loops / add level guardslowplanned--
remove-deprecated-apimigrate deprecated and removed Java APIs to comply with AEM as a Cloud Service enforcementhighreadyanalyzerguided

Out-of-memory / leak incidents — a frequent symptom — are usually caused by the patterns above (unbounded queries, unclosed resources, in-process image work, heavy init). They are addressed indirectly by fixing those, so there is no standalone oom row.

Adding a pattern: append a row with status: planned and fix: -; when you build its expert skill, flip to status: ready and set the real fix. Fields are defined above.

skills

README.md

tile.json