Commit Graph

95 Commits

Author SHA1 Message Date
semantic-release-bot 541fb8fb96 chore(release): content-driven-development-v2.0.1 [skip ci] 2026-05-29 09:29:35 +00:00
Lars Trieloff 1377965723 Merge pull request #146 from focusgts/fix/update-skill-intro-style
fix: Update EDS skill intros to follow current best practices
2026-05-29 11:28:25 +02:00
semantic-release-bot 0a015c0689 chore(release): snowflake-v1.0.0 [skip ci] 2026-05-29 06:51:32 +00:00
semantic-release-bot b87ca810ba chore(release): page-import-v1.1.0 [skip ci] 2026-05-29 06:48:30 +00:00
semantic-release-bot 63bf095cf7 chore(release): da-content-v1.0.0 [skip ci] 2026-05-29 06:42:50 +00:00
semantic-release-bot c96a19af14 chore(release): da-auth-v1.1.0 [skip ci] 2026-05-29 06:40:15 +00:00
David Catalan 2dae80cbf1 Merge pull request #154 from adobe/feat/eds-snowflake-da-content
feat(aem-eds): add snowflake and da-content skills
2026-05-29 08:39:52 +02:00
Akanksha Jain b9172cd9a9 feat(aem-workflow): rewrite workflow-debugging skill for AEM Cloud Se… (#141)
* feat(aem-workflow): rewrite workflow-debugging skill for AEM Cloud Service

- Add Audience, Variant Scope, and Dependencies sections
- Correct cq.workflow.job.max.procs myth: property does not exist on
  WorkflowSessionFactory; real parallelism knob is queue.maxparallel
  on the Granite Workflow Queue (org.apache.sling.event.jobs.QueueConfiguration)
- Fix lock contention guidance: reduce (not raise) queue.maxparallel
- Replace vague stale handling with StaleWorkflowServlet pattern
- Add concrete OSGi config file names and Git-based remediation paths
- Add AEMaaCS platform caveats: DefaultThreadPool may be reserved,
  pod-restart requires Support ticket, IMS identity gotchas
- Add Routing back to dev skills table
- Update reference.md with JMX to CS translation table and diagnostic tools

* Feat/skill workflow debugging cs review fixes (#150)

* fix(aem-workflow): address review feedback and correct console URLs in workflow-debugging (Cloud Service)

reference.md
- Remove JMX to Cloud Service translation table; the skill should teach
  CS-correct instructions directly rather than reference and translate
  incorrect JMX-era content (review feedback)
- Remove Bundled runbooks and Bundled supplementary docs sections; those
  references/* paths are not present in this skill folder
- Drop Cloud Service note preamble describing on-the-fly JMX translation
- Expand diagnostic tools table with Sling Thread Pools, Threads,
  jstack thread dump, Sling Scheduler, and OSGi Configuration entries
- Replace broken overview-repoinit URL with overview#repoinit anchor
- Switch javadoc link from 6.5 reference to AEMaaCS cloud-service javadoc
- Add RejectedExecutionException and retrys-exceeded log patterns

SKILL.md
- Fix Sling Jobs page path: /system/console/slingjobs returns 404 on
  AEMaaCS; the actual page is /system/console/slingevent (page title
  is still "Jobs")
- Fix Threads status path: /system/console/status-Threads is case
  sensitive; the lowercase variant returns 404

All console paths re-verified against the local AEMaaCS SDK.

* fix(aem-workflow): expert audit pass against live AEM 6.5 LTS for workflow-debugging (#148)

All claims re-validated against an OOTB AEM 6.5 LTS instance, Adobe's
official Workflows Best Practices documentation, and Granite Workflow
source on release/660 and prod/cq660.

SKILL.md
- Step 1: drop the dead 'Runbook' column; the runbook-*.md filenames it
  pointed at do not exist in the repo (the 'First action' column already
  carries the actionable command for each symptom)
- Step 3a: the default Sling thread pool runs Quartz schedulers; it does
  not itself 'fire' com/adobe/granite/workflow/timeout/job — that is a
  Sling Job topic dispatched by a JobConsumer. Reword to reflect the
  scheduler -> Sling Job hand-off. Drop the bogus 'max pool size >= 20'
  healthy threshold: OOTB on AEM 6.5 LTS the default pool is 5/5
  (Apache Sling default), with a note that hardened environments
  typically bump it to 20+
- Step 3d: the workflow timeout job is a Sling Job topic, not visible on
  /system/console/status-slingscheduler. Reword to point at
  /system/console/slingevent for the topic itself; only the periodic
  WorkflowStatsMBean Quartz job is visible on the scheduler page on
  OOTB 6.5 LTS
- Step 5: drop the duplicated queue.maxparallel row that also wrongly
  said 'Default 1' (OOTB is 0.5). Correct the DefaultThreadPool max
  pool size default from 20 to 5. Add four useful WorkflowSessionFactory
  properties verified live and against source: inboxQuerySize,
  maxPurgeSaveThreshold, maxPurgeQueryCount, and the OOTB superuser
  group list. Add a Purge Scheduler row for the array-typed
  scheduledpurge.workflowStatus. Reframe cq.workflow.job.max.procs as
  an orphaned metatype label with no Java code path that reads it
  (verified against release/660 and prod/cq660 source — the property
  exists only in metatype.properties as an i18n UI label) and surface
  Adobe's documented recommended range of half-to-three-quarters of
  processor cores
- Step 7: complete the Maintenance MBean signatures to match the live
  MBean — restartStaleWorkflows(model [optional], dryRun);
  retryFailedWorkItems(dryRun, model [optional]);
  terminateFailedInstances(restart, dryRun, model [optional]). Add the
  three useful per-model ops present on the live MBean but not
  documented: listRunningWorkflowsPerModel, listCompletedWorkflowsPerModel,
  returnFailedWorkflowCountPerModel
- Step 8 Pattern A: replace 'All 20 threads consumed' with the accurate
  OOTB number (5), with the same hardening caveat. Clarify the block-
  policy behavior — OOTB is RUN, so the ABORT-driven silent drop only
  occurs in environments where the policy has been changed

reference.md
- Drop the 'Runbook locations (relative to repo root)' table; those
  aem-agent-marketplace-workflow-knowledge-base/runbooks/* paths are
  not bundled with this repo, so the table was a dead pointer
- Drop the 'see also docs/error-patterns.md' hint for the same reason
- Fix the broken /system/console/slingjobs entry (404 on AEM 6.5 LTS;
  the canonical Sling Jobs page is /system/console/slingevent)
- Add four diagnostic-tool rows that are referenced from the SKILL.md
  but were not in this index: Sling Thread Pools, Threads, jstack
  thread dump, Sling Scheduler

* fix(aem-workflow): expert audit pass and LTS parity for workflow-debugging (AEM Cloud Service)

All claims re-validated against the local AEMaaCS SDK on localhost:4517,
Adobe's Workflows Best Practices documentation, and Granite Workflow
source on the master branch. Also brings CS skill coverage in line with
the LTS audit landed in PR #148.

Accuracy fixes
- Step 3a: reword 'default pool fires com/adobe/granite/workflow/timeout/job'
  to reflect the actual hand-off — the default pool runs the periodic
  timeout-detection scheduler that emits the topic; the topic itself is
  consumed by a Sling JobConsumer. Replace the bogus 'max pool size >= 20'
  healthy threshold with the actual OOTB AEMaaCS SDK value of 10/10
  (production environments may differ)
- Step 3c: correct the Granite Workflow Queue Max Parallel default —
  on the AEMaaCS SDK the live OOTB value is queue.maxparallel = 0.5
  (not 1 as previously stated). Add Adobe's documented recommended
  range of half to three-quarters of processor cores. Name the
  /system/console/slingevent URL explicitly (parity with LTS)
- Step 3d: the workflow timeout job is a Sling Job topic, not visible on
  /system/console/status-slingscheduler. Reword to point at
  /system/console/slingevent for the topic itself; only the periodic
  WorkflowStatsMBean Quartz job is visible on the scheduler page
- Step 5: correct the DefaultThreadPool maxPoolSize OOTB from 20 to 10
  (verified live on the AEMaaCS SDK; production environments may differ).
  Reframe cq.workflow.job.max.procs as an orphaned metatype label with
  no Java code path that reads it (verified against AEM source on
  master — same orphan exists across release/660, prod/cq660 and master).
  Surface Adobe's recommended range of half to three-quarters of
  processor cores
- Step 6: same reframing for the increase-parallelism cell. Correct the
  verification fallback value from 'usually 1' to '0.5 on the AEMaaCS SDK'.
  Fix the Fix auto-advancement row to point at the Sling Jobs page (not
  Sling Scheduler) for the timeout job topic
- Step 7 Pattern A: replace 'All 20 threads consumed' with the accurate
  OOTB AEMaaCS SDK value (10). Clarify block-policy behavior — OOTB is
  RUN, so the ABORT-driven silent drop only occurs in environments where
  the policy has been changed

LTS parity (coverage gaps closed)
- Step 1: drop the dead 'Runbook' column; the runbook-*.md filenames
  point to files that do not exist in this skill folder (same fix as
  LTS PR #148). Rename heading to 'Map symptom to first action'
- Step 5: add three useful WorkflowSessionFactory properties documented
  in the LTS skill and verified live on the CS SDK with the same OOTB
  values — granite.workflow.inboxQuerySize (2000),
  granite.workflow.maxPurgeSaveThreshold (20), and
  granite.workflow.maxPurgeQueryCount (1000)
2026-05-29 08:29:23 +05:30
david catalan f8f37393e4 feat(aem-eds): snowflake — implement block-level Generate path
Replaces the "block-level is future work" placeholder added in the
previous commit with the real two-branch Phase 3 implementation.

phases/3-generate.md:
- Branch by decisions.json.conversionLevel at the top
  (page-level | block-level | hybrid).
- Page-level path: unchanged (preserves the existing overlay flow).
- Block-level path: 9 concrete steps (B.1-B.9) covering global
  styles extraction, fonts in head.html, asset vendoring, header/
  footer fragments, per-section content blocks (decorator pattern
  + section-scoped CSS), scripts.js modifications, drafts test
  page, DA-source body, self-checks.
- Each branch sets state.conversionLevel; block-level records
  blockCount + fragmentCount.

knowledge/block-level-conversion.md (new, 360 lines):
- Comparison table: page-level vs block-level (main content, header/
  footer, DA content, CSS, runtime, substrate).
- Output layout for block-level (standard EDS paths, no output/
  subfolder).
- Global styles two-bucket split (boilerplate skeleton + source
  tokens + base typography + shared components vs per-block).
- Header/footer fragment pattern, content model design, decorator
  pattern, hybrid conversion fallbacks.

SKILL.md:
- Reading order adds block-level-conversion.md after the
  feasibility reference.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 08:49:14 +02:00
david catalan 3c0d625466 feat(aem-eds): snowflake v1.1.0 — block-level conversion mode
Integrates upstream changes from the snowflake-demos test worktree.
Adds a second conversion level alongside the original page-level
(overlay) path.

SKILL.md:
- Two modes documented: page-level (overlay template + [data-slot]
  markers) and block-level (each section becomes an independent
  EDS block with its own decorate() + CSS).
- New `level` parameter: auto | check | block | page.
  - auto: feasibility runs, recommendation surfaced, user confirms
  - check: feasibility scan only, stops before Phase 3 (batch scan)
  - block / page: explicit override, analysis runs as validation
- Description updated to mention both modes; trigger terms expanded.
- Version bump 1.0.0 → 1.1.0.

phases/2-analyze.md:
- Adds block-level feasibility assessment (5 checks per section:
  structure, CSS scope, content model, JS independence, visual
  independence).
- decisions.json gains levelParam, conversionLevel, feasibility
  fields with per-section pass/fail tables.
- Level-driven transition rules at the end (auto/check/block/page).

knowledge/block-level-feasibility.md (new):
- 301-line reference: the 5 checks in detail, hybrid option, source
  signals (BEM/section-scoped → block; Tailwind/utility-first →
  page), worked Frescopa example showing all 9 sections passing.

phases/3-generate.md:
- Adds a "Note on conversionLevel" callout explaining that this
  phase currently implements only the page-level path. block-level
  and hybrid are documented in SKILL.md and block-level-feasibility.md
  but Phase 3 generation for them is a future enhancement. Until
  then, fall back to page-level and surface a note to the user
  rather than silently producing wrong output.

skills-ref validates clean. No XML tags in description.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:03:45 +02:00
david catalan 64116c63a2 refactor(aem-eds): inline end-to-end example in snowflake SKILL.md
Tessl review feedback after the trim: actionability stayed at 2/3
because the Quick start showed how to read phase files, not the
actual conversion shape. Replaces it with a single compressed
end-to-end example walking all seven phases with real bash commands
(playwright-cli, curl to admin.da.live, curl to admin.hlx.page, git
push to the snowflake-NNN branch). Also collapses "What this skill
does NOT do" from 8 lines to 1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:34:29 +02:00
david catalan fdb0f76b03 refactor(aem-eds): trim snowflake SKILL.md, add Quick start example
Addresses Tessl review feedback (Content score 55% → targeting 90%+):
- conciseness 1/3: SKILL.md was 333 lines of host adapter details,
  path resolution mechanics, config schemas, and directory conventions
  that belong in HOST-NOTES.md. Cut to 156 lines.
- actionability 2/3: entry point had no copy-paste-ready commands.
  Added a Quick start section with the Phase 0 substrate-install
  invocation and the phase walk-through pattern.

Moves to HOST-NOTES.md (in addition to what was already there):
- "Resolving paths inside this bundle" — per-host SKILL_DIR mapping

Removes from SKILL.md (was duplicative of HOST-NOTES.md or maintainer-
only):
- "How to invoke (host adapters)" section
- "Bundle assets" file tree (now just prose in Quick start)
- "The .snowflake/ directory convention" full section + JSON schema
- "Host-portable constraints (for skill maintainers)" — already in
  HOST-NOTES.md
- "Loading knowledge in each phase" — collapsed into a 3-line note
  on the seven-phases section

Preserves all 14 markdown links (orphan check stays green).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:30:54 +02:00
david catalan 297536f93b fix(aem-eds): drop XML tags from da-content description
Tessl deterministic validation rejects literal XML tags in the
description field. Reword `<div class="…">` and `<table>` as
"div-class" and "table" — the body of SKILL.md still uses the
literal tags in code-fenced examples, where they belong.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:24:14 +02:00
david catalan 55de609065 fix(aem-eds): correct relative path in da-content fixtures README
After moving fixtures/ → references/fixtures/, the link to
references/media.md needs to be ../media.md, not ../references/media.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:18:58 +02:00
david catalan c62b8e319c fix(aem-eds): close 3 Tessl lint warnings on snowflake + da-content
- Move snowflake/substrate/* → snowflake/assets/substrate/* and
  snowflake/install-substrate.mjs → snowflake/scripts/install-substrate.mjs
  so the bundle layout matches Tessl's expected spec dirs
  (references/, assets/, scripts/). Updates the installer's path
  resolution accordingly (SUBSTRATE_DIR derived via dirname(SCRIPT_DIR)).
- Move da-content/fixtures/* → da-content/references/fixtures/* for
  the same reason.
- Add explicit markdown links in snowflake/SKILL.md to phases/*.md,
  knowledge/*.md, HOST-NOTES.md, README.md, examples/README.md so
  Tessl's orphan check finds them all. da-content/SKILL.md links to
  references/fixtures/README.md.
- Rename plugin's .tileignore → .tesslignore (legacy filename
  deprecated).

Updates every path mention in SKILL.md, HOST-NOTES.md, README.md,
phases/0-prereq.md to reflect the new layout. Smoke-tested the
installer against a vanilla temp repo — substrate self-locates
correctly.

The remaining "code-review SKILL.md too large" warning is on a
pre-existing skill not touched by this branch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:17:39 +02:00
david catalan eae6a3872b feat(aem-eds): add snowflake and da-content skills
Imports two skills from aemcoder/skills and wires them into the
plugin's release machinery.

- da-content (renamed from source eds-da-content): reference for DA +
  EDS content rules — block HTML format, metadata, media handling, DA
  Source API contract, IMS auth, and the 11 silent-failure rules.
  Trimmed description from 922 → 709 chars and added a Related Skills
  section pointing at da-auth, generate-import-html, page-import,
  snowflake.

- snowflake: static-to-EDS overlay conversion that preserves the
  original DOM byte-for-byte while making text and image content
  authorable in DA. Description leads with the DOM-preservation
  property and explicitly defers canonical block-rewrite migrations
  to page-import. All internal references updated from eds-da-content
  to da-content. SKILL_DIR resolution table rewritten for Claude Code
  plugin distribution. DA token reads now consume $DA_TOKEN (set by
  da-auth) with ~/.aem/da-token.json fallback.

Cross-skill integration:
- da-auth Related Skills now lists snowflake + da-content
- page-import description disambiguates against snowflake; "Do NOT
  use" list points to snowflake for DOM-preservation use cases
- tile.json registers both new skills
- README.md adds a snowflake row to Migrating Content and a new
  Content & Platform Reference subsection for da-content
- Each new skill ships package.json + .releaserc.json for
  semantic-release

Evals:
- da-content-block-html-generation: 10-item weighted checklist on
  silent-failure rule compliance when generating block HTML
- snowflake-overlay-vs-page-import-selection: 7-item checklist on
  description-driven skill disambiguation given DOM-preservation
  vocabulary

skills-ref validates all 94 skills in the repo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:06:53 +02:00
semantic-release-bot 2833c9bd7c chore(release): slicc-handoff-v1.0.1 [skip ci] 2026-05-21 22:22:16 +00:00
Lars Trieloff baa8015867 fix(release): path-filter release-notes-generator + restore slicc-handoff CHANGELOG (#144)
PR #139 wrapped commit-analyzer with path filtering but tried to fix
release-notes-generator with gitRawCommitsOpts: { path: '.' } -- a
no-op because the plugin reads context.commits from semantic-release,
never gitRawCommitsOpts. Result: every skill release body and CHANGELOG
included commits from the entire repo (see slicc-handoff-v1.0.0).

- Add scripts/path-filtered-notes-generator.cjs mirroring the analyzer
  wrapper -- filters context.commits via git log -- . before delegating
  to the real plugin.
- Wire it into release.config.cjs in place of the bare plugin entry;
  drop the dead gitRawCommitsOpts config.
- Regenerate plugins/aem/edge-delivery-services/skills/slicc-handoff/
  CHANGELOG.md (skipped by PR #140 because the tag did not exist yet).
2026-05-21 15:21:52 -07:00
semantic-release-bot dee2d51e6b chore(release): slicc-handoff-v1.0.0 [skip ci] 2026-05-21 18:46:48 +00:00
Amol Anand 3a43a402fe Merge pull request #142 from adobe/feat/add-slicc-handoff-skill
feat(aem-eds): add slicc-handoff skill
2026-05-21 14:46:23 -04:00
Amol Anand 9e69cb9910 docs(aem-eds): point slicc-handoff at sliccy.ai/llms.txt
Per review feedback: defer SLICC protocol detail to the maintainer-curated
https://www.sliccy.ai/llms.txt index rather than restating it in the
skill. Adds a pointer near the top of SKILL.md and trims "How It Works"
to a one-paragraph summary that links to llms.txt for the full rel URIs,
payload shape, and public API catalog. Activation guidance, verb-prefix
rules, and example commands are kept inline so the skill stays useful
without a network fetch.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 14:43:37 -04:00
Amol Anand b25b4d324e revert: restore placeholder CHANGELOG for slicc-handoff
Per review feedback: let semantic-release manage the changelog content.
Reverts the descriptive notes added in 6c75163.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 14:38:27 -04:00
Lars Trieloff bca6437855 Merge pull request #140 from adobe/chore/clean-up-changelogs
chore: regenerate all skill CHANGELOGs with path-filtered history
2026-05-21 09:00:21 -07:00
Amol Anand 6c75163886 docs(aem-eds): describe slicc-handoff skill in CHANGELOG
Replaces the placeholder with an Initial Version entry that explains what
the skill is for, what's included (SKILL.md, the Node helper, package and
release config), the handoff/upskill verb prefixes, the SLICC_PORT env
var, and security notes about treating the instruction string as
untrusted input. Future semantic-release entries will be prepended above
this section.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 11:41:47 -04:00
Amol Anand d7e7c46cb8 feat(aem-eds): add slicc-handoff skill
Adds a new skill that lets an external coding agent hand off the current
task to the SLICC browser agent, or trigger installation of a skill into
SLICC from a GitHub repo. The skill ships a small Node helper that posts
to a local SLICC node-server on localhost and (optionally) opens the
sliccy.ai handoff URL so the SLICC extension can pick it up via its
RFC 8288 Link header observer. Either path results in a yes/no approval
card in the SLICC cone keyed by verb prefix (handoff: / upskill:).

Registers the skill in plugins/aem/edge-delivery-services/tile.json.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-21 11:38:47 -04:00
yogesh-tessl eb2d4f380d feat: improve replication skill score from 52% to 87% (#136)
Hey @trieloff 👋

I ran your skills through `tessl skill review` at work and found some targeted improvements for the Cloud Service replication skill. Here's the before/after:

| Skill | Before | After | Change |
|-------|--------|-------|--------|
| replication (cloud-service) | 52% | 87% | +35% |

I picked this skill because it had the most room to grow across the repo — the baseline was 52%, lowest alongside `replication-orchestrator` (6.5 LTS). Since Cloud Service is the forward-looking runtime, it felt like the highest-signal place to contribute.

<details>
<summary>Changes made</summary>

**Description improvements (biggest impact — 40% → 100%):**
- Rewrote frontmatter description from a generic 2-line summary to a specific, action-oriented description listing concrete capabilities (publish, deactivate, delete, bulk activation, preview-tier targeting, sync/async, status checks, permissions, workflow steps, event handling)
- Added explicit "Use when..." clause with seven trigger scenarios covering natural language terms users would say ("publish pages", "activate content", "check replication status")
- Switched description from YAML block scalar to quoted string format
- Added metadata.category field

**Content improvements (42% → 73%):**
- Removed "Architecture: How Replication Works in Cloud Service" section — Claude already understands AEM's Sling Content Distribution pipeline
- Removed ReplicationActionType values table — these are self-evident from the linked Javadoc and the code examples
- Moved Common Patterns (auto-publish on Content Fragment save, external cache purge after publication) to references/patterns.md for progressive disclosure, reducing the main SKILL.md by ~100 lines
- Added a Service User setup pattern to the reference file for completeness
- Condensed Best Practices section — removed verbose exception handling example, consolidated service user guidance into a concise paragraph with a link to the reference file
- Net result: SKILL.md dropped from 744 to 592 lines with better structure

**Unchanged skills:**
- All other 88 skills left untouched — many are already scoring well (replicate-content at 100%, workflow-development at 99%, best-practices at 94%)

</details>

I also stress-tested your replication skill against a few real-world task evals and it held up really well on bulk content activation with automatic transactional bucketing above the 100-path threshold. Kudos for that.

Honest disclosure — I work at @tesslio where we build tooling around skills like these. Not a pitch — just saw room for improvement and wanted to contribute.

Want to self-improve your skills? Just point your agent (Claude Code, Codex, etc.) at this Tessl guide (https://docs.tessl.io/evaluate/optimize-a-skill-using-best-practices) and ask it to optimize your skill. Ping me — @yogesh-tessl (https://github.com/yogesh-tessl) — if you hit any snags.

Thanks in advance 🙏

Co-authored-by: Yogesh Rao <yogesh-tessl@users.noreply.github.com>
2026-05-21 13:46:16 +02:00
Akanksha Jain f51cac86af fix(aem-workflow): correct workflow-debugging skill in workflow-debugging (#138)
* fix(aem-workflow): correct cq.workflow.job.max.procs parallelism myth in workflow-debugging (AEM 6.5 LTS)

The skill instructed customers to increase cq.workflow.job.max.procs
for workflow throughput. While that property is shown in Felix Console
(its display name and description are defined in the WorkflowSession
Factory metatype), it has no effect at runtime — no code path reads
the value. Real workflow parallelism is controlled by queue.maxparallel
on the "Granite Workflow Queue" (an Apache Sling Job Queue
Configuration instance). The skill's own thread-pool section at
SKILL.md:105 already mentions Max Parallel correctly; the four
cq.workflow.job.max.procs references contradicted that and were
misleading customers.

- SKILL.md: 4 references to cq.workflow.job.max.procs replaced with
  queue.maxparallel on the Granite Workflow Queue
- reference.md: parallelism row updated to point to the correct OSGi
  config (Apache Sling Job Queue Configuration)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(aem-workflow): correct JMX MBean ObjectName for retry/queue-info ops in workflow-debugging (AEM 6.5 LTS)

The skill cited com.adobe.granite.workflow:type=Repository as the
MBean hosting retryFailedWorkItems, returnSystemJobInfo, and
returnWorkflowQueueInfo. That ObjectName does not exist on AEM 6.5 LTS
— a JMX lookup returns 404. All three operations actually live on
com.adobe.granite.workflow:type=Maintenance, the same MBean the skill
already used correctly for purgeCompleted/countStaleWorkflows/
restartStaleWorkflows. The real second workflow MBean is
:type=Statistics, which exposes time-series execution metrics.

Updates Step 7 (Key JMX MBeans) to:
- Consolidate every workflow maintenance operation under the
  Maintenance MBean (matches what AEM actually exposes via JMX)
- Add Statistics MBean as a separate row with its read/write
  accessors for DataLifeTime / DataFidelityTime / DataProcessRate /
  DataRate plus getResults / clearRecords
- Add operation parameter signatures (model, days, dryRun) where
  applicable

Verified on AEM 6.5 LTS localhost:4505:
- :type=Maintenance → HTTP 200
- :type=Statistics  → HTTP 200
- :type=Repository  → HTTP 404 (does not exist)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(aem-workflow): replace stale Config Status ZIP file refs with live Felix Console URLs in workflow-debugging (AEM 6.5 LTS)

The skill instructed customers to "check in 039_Sling_Thread_Pools.txt"
and similar numbered files from the Configuration Status ZIP for
thread pools, threads, Sling Jobs, and Sling Scheduler data. The
Config Status ZIP produced by AEM 6.5 LTS (/system/console/
status-Configurations.zip) does not contain those numbered files —
only 000_Configurations.txt and index.json. A customer following the
skill would search for files that do not exist on their AEM.

Updates all 9 references to point to the live Felix Console pages
that are the actual sources of this data:

- 039_Sling_Thread_Pools.txt -> /system/console/status-slingthreadpools
- 042_Threads.txt            -> /system/console/status-Threads
- 043_Threads__via_JStack_.txt -> /system/console/status-jstack-threaddump
- 027_Sling_Jobs.txt         -> /system/console/slingevent
- 034_Sling_Scheduler.txt    -> /system/console/status-slingscheduler
- 003_Configurations.txt     -> /system/console/configMgr

Each URL verified to return HTTP 200 on AEM 6.5 LTS localhost:4505.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(aem-workflow): correct Granite Workflow Queue Max Parallel default value in workflow-debugging (AEM 6.5 LTS)

The skill stated that the Granite Workflow Queue ships with
queue.maxparallel = 1. The actual OOTB value on AEM 6.5 LTS is 0.5,
which the Sling Job Queue interprets as "50% of available CPU cores"
(fractional values in 0..1 are CPU-relative; integers >= 1 are
absolute worker counts). A customer following the previous skill
would plan throughput tuning against the wrong starting point.

Updated in two places:
- Step 3c Granite Workflow Queue config bullet list
- Step 5 Configuration checklist table row

Both now cite the OOTB 0.5 value with a pointer to verify the running
value via the OSGi config endpoint at
/system/console/configMgr/org.apache.sling.event.jobs.QueueConfiguration~workflow.

Verified on AEM 6.5 LTS localhost:4505: queue.maxparallel = 0.5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 14:55:50 +05:30
Lars Trieloff 118cb162c6 chore: regenerate all skill CHANGELOGs with path-filtered history
All existing CHANGELOG.md files contained commits from the entire repo
since the skill's last tag, making release notes meaningless. This
regenerates each one from scratch using git log filtered to the skill's
own directory, following up on #139 which fixed the root cause for
future releases.

Empty release sections (e.g. 1.0.0) indicate versions bumped solely by
docs/refactor commits, which is correct — the angular preset omits those
types from the CHANGELOG body.

Also adds scripts/regenerate-changelogs.cjs in case a manual re-run is
ever needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:41:38 -07:00
Akanksha Jain 3e71c25e36 Feat/skill workflow launchers 65 lts (#135)
* fix(aem-workflow): update workflow-launchers content for AEM 6.5 LTS

Updates the workflow-launchers skill for AEM 6.5 LTS with validated
content covering launcher configuration, condition patterns, and
JCR-event-driven workflow triggering. SKILL.md now references the
canonical foundation refs hosted under workflow-orchestrator instead
of local duplicates.

- SKILL.md: expanded launcher configuration guidance; loop-prevention
  guardrail clarified (WorkflowSession vs JCR Session disambiguation);
  IDE-LLM consumability improvements; foundation ref links re-pointed
  to workflow-orchestrator canonical copies
- condition-patterns.md: ECMAScript (Rhino) terminology corrected;
  pattern coverage tightened
- launcher-config-reference.md: cq:WorkflowLauncher property
  reference expanded; consumability improvements

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(aem-workflow): remove duplicated foundation refs from workflow-launchers (AEM 6.5 LTS)

The 6 foundation reference files under workflow-launchers/references/
workflow-foundation/ duplicated the canonical copies hosted in
workflow-orchestrator/references/workflow-foundation/. SKILL.md links
were re-pointed to the canonical copies in the previous commit, so
the local duplicates are now orphaned.

Deletes:
- 65-lts-guardrails.md
- README.md
- api-reference.md
- architecture-overview.md
- jcr-paths-reference.md
- quick-start-guide.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(aem-workflow): correct loop-prevention setUserData value in workflow-launchers (AEM 6.5 LTS)

The skill instructed setUserData("workflowmanager") for loop prevention.
AEM's WorkflowLauncherListener does not recognize that string. The
correct value is "changedByWorkflowProcess", which matches
HandlerBase.WORKFLOW_SESSION_USERDATA in
com.adobe.granite.workflow.core and is the default member of the OSGi
config property granite.workflow.launcher.globally.exluded.event.user.data
that the launcher reads at startup.

- SKILL.md: setUserData("workflowmanager") -> "changedByWorkflowProcess"
  in the loop-prevention guardrail (2 occurrences in same line)
- condition-patterns.md: setUserData("workflowmanager") ->
  "changedByWorkflowProcess" in the Java snippet; rewrote the comment
  to correctly distinguish the OSGi config-property name from the
  userData value

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(aem-workflow): correct OOTB launcher names, excludeList format, and condition shorthand in workflow-launchers (AEM 6.5 LTS)

Audit findings verified against AEM 6.5 LTS localhost:4505 OOTB
launchers under /libs/settings/workflow/launcher/config/:

- SKILL.md "Common OOTB Launchers" table: dam_update_asset_create
  does not exist (actual: update_asset_create); dam_update_asset_modify
  does not exist (actual: update_asset_mod); dam_xmp_writeback trigger
  description corrected to PROPERTY_CHANGED (eventType=16) on
  nt:unstructured at /jcr:content/metadata; update_page_version_*
  removed (not present in /libs, /conf, or /apps on a baseline 6.5 LTS
  install). Table expanded with eventType, nodetype, glob, and
  workflow columns
- SKILL.md and launcher-config-reference.md: excludeList type
  corrected from String[] to String (single comma-separated value);
  description expanded to document the two entry formats — bare JCR
  property names and the event-user-data:<value> prefix that excludes
  events tagged with a specific JCR observation userData
- launcher-config-reference.md: document the singular `condition`
  shorthand alongside the plural `conditions` array; both forms are
  accepted at startup
- condition-patterns.md: loop-prevention comment rewritten to explain
  the changedByWorkflowProcess value via the customer-visible OSGi
  config property granite.workflow.launcher.globally.exluded.event.
  user.data (visible in Felix Console)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 11:26:38 +05:30
Dave Fox c728efeba0 fix: Update EDS skill intros to follow current best practices
Replace "You are an orchestrator..." persona-style intros with direct
functional descriptions in content-driven-development and page-import
skills, consistent with the style used in newer EDS skills like
block-inventory, code-review, and create-site.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-17 11:54:41 -04:00
semantic-release-bot 9ca1da2628 chore(release): testing-blocks-v2.0.0 [skip ci] 2026-05-14 16:26:26 +00:00
semantic-release-bot ee6a5d7fd5 chore(release): scrape-webpage-v2.0.0 [skip ci] 2026-05-14 16:24:08 +00:00
semantic-release-bot 138e189fed chore(release): preview-import-v2.0.0 [skip ci] 2026-05-14 16:21:52 +00:00
semantic-release-bot f015564db8 chore(release): generate-import-html-v2.0.0 [skip ci] 2026-05-14 16:19:35 +00:00
semantic-release-bot 33b91af03b chore(release): content-modeling-v2.0.0 [skip ci] 2026-05-14 16:17:18 +00:00
semantic-release-bot 03fc683c74 chore(release): content-driven-development-v2.0.0 [skip ci] 2026-05-14 16:15:29 +00:00
semantic-release-bot 5a39da1cbf chore(release): code-review-v2.0.0 [skip ci] 2026-05-14 16:13:10 +00:00
semantic-release-bot 0ad01b5a1b chore(release): building-blocks-v2.0.0 [skip ci] 2026-05-14 16:11:21 +00:00
semantic-release-bot 8f80befe83 chore(release): analyze-and-plan-v2.0.0 [skip ci] 2026-05-14 16:09:04 +00:00
Sean Steimer fdc294a67c Merge pull request #104 from adobe/fix/eds-register-missing-skills
fix(aem-eds): clean up tile to clear all lint warnings
2026-05-14 09:08:40 -07:00
Himani Chauhan 52e83b770b feat(migration): align skill with updated MCP tool names and empty-pattern result handling
feat(migration): align skill with updated MCP tool names and empty-pattern result handling
2026-05-13 16:13:48 +05:30
Akanksha Jain 1c93e5418e fix(aem-workflow): correct workflow-model-design XML format and step resourceTypes (AEMaaCS) (#123)
* fix(aem-workflow): correct workflow-model-design XML format for /conf design-time (AEMaaCS)

The cloud-service workflow-model-design skill incorrectly showed
cq:WorkflowModel / cq:WorkflowNode / cq:WorkflowTransition (runtime
/var format) under the /conf design-time path. The Workflow Model
Editor expects cq:Page + jcr:content/flow/<step-component> with
nt:unstructured step nodes and sling:resourceType identifiers.
A developer following the previous content would deploy a model the
editor cannot open and Sync cannot process.

Verified against AEM Cloud Service SDK localhost:4517 OOTB models at
/libs/settings/workflow/models/ and source at com.adobe.granite.workflow
on master branch.

- model-xml-reference.md: full rewrite to cq:Page + flow/parsys
  format; design-time vs runtime table; cq:template fix to
  /libs/cq/workflow/templates/model; rewritten pitfalls section;
  runtime /var shape documented for reference
- step-types-catalog.md: every step snippet converted to
  nt:unstructured + sling:resourceType; sling:resourceType reference
  table added; initiatorparticipant documented; transition XML
  removed (Sync derives transitions from step order)
- model-design-patterns.md: Pattern 5 Task Manager XML corrected to
  flow-layer format; Pattern 6 variables annotated as runtime-only
- SKILL.md: Sync verification added to checklist; /conf-only on
  AEMaaCS distinction (no /etc legacy auto-deploy); filter.xml
  guidance updated

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(aem-workflow): correct AND_SPLIT/AND_JOIN/END resourceTypes in workflow-model-design (AEMaaCS)

The cloud-service step-types-catalog listed sling:resourceType values
for AND_SPLIT, AND_JOIN, and END that do not exist as design-time
components on AEM Cloud Service. Verified against
/libs/cq/workflow/components/model/ on localhost:4517.

- sling:resourceType table: AND_split -> and (actual OOTB component
  is named `and`, not `AND_split`); AND_join and end rows removed
  (no such components exist)
- AND_SPLIT example: corrected sling:resourceType to
  cq/workflow/components/model/and; AND_JOIN inline example removed
- AND_JOIN section: replaced manual <synchronize> example with note
  that AEM Sync derives AND_JOIN nodes automatically at /var
- END Node section: replaced manual <workflowend> example with note
  that Sync derives both START and END automatically

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 15:41:35 +05:30
Himani Chauhan 69e8446df3 feat(migration): rename MCP tool and add fetch-by-importance tool docs
Align with the updated MCP server which split fetch-cam-bpa-findings
into two purpose-specific tools:

- fetch-cam-bpa-findings-by-pattern: code-transformer pattern flows
  (scheduler, assetApi, eventListener, resourceChangeListener, eventHandler)
- fetch-cam-bpa-findings-by-importance: returns authoritative _COUNT_
  rollup rows at one importance level (CRITICAL/MAJOR/ADVISORY/INFO),
  sorted by descending count — for open-ended "what are the critical
  findings?" requests

Changes:
- cam-mcp.md: rename all references; add full Tool section for
  fetch-cam-bpa-findings-by-importance (request, response shape,
  backend endpoint, error response note)
- SKILL.md: update CAM via MCP summary and batching section to name
  both tools with their respective use cases

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:35:07 +05:30
Himani Chauhan bdc9706526 feat(migration): handle empty-pattern BPA results from updated MCP tool
The MCP cam-bpa-fetcher now returns success:true with an empty targets
array and a message field when a specific pattern has no findings in the
latest BPA report, instead of success:false with a misleading "upload
BPA report" suggestion.

Align the skills layer:
- BpaResult gains a message field (unified-collection-reader.js)
- bpa-findings-helper caches and propagates mcp.message so callers see
  "No 'scheduler' findings in the latest BPA report for project X"
  rather than the generic cache message when targets are empty
- cam-mcp.md documents the new message field on the success response
  and splits the empty-targets behavior table row into the two distinct
  cases (success:true specific-pattern vs success:false all-pattern)
- New test verifies message propagation, cache write, and no re-fetch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:35:07 +05:30
Akanksha Jain 15563e127a Feat/skill workflow model design 65 lts (#122)
* fix(aem-workflow): correct workflow-model-design XML format for /conf design-time (AEM 6.5 LTS)

The workflow-model-design skill incorrectly showed cq:WorkflowModel /
cq:WorkflowNode / cq:WorkflowTransition (runtime /var format) under the
/conf design-time path. The Workflow Model Editor expects cq:Page +
jcr:content/flow/<step-component> with nt:unstructured step nodes and
sling:resourceType identifiers. A developer following the previous
content would deploy a model the editor cannot open and Sync cannot
process.

Verified against AEM 6.5 LTS localhost:4505 OOTB models at
/libs/settings/workflow/models/ and source at
WorkflowSessionFactory.java:94 (MODELS_RUNTIME_LOCATION = "/var/workflow/models").

- model-xml-reference.md: full rewrite to cq:Page + flow/parsys
  format; design-time vs runtime table; cq:template fix to
  /libs/cq/workflow/templates/model; rewritten pitfalls section;
  runtime /var shape documented for reference
- step-types-catalog.md: every step snippet converted to
  nt:unstructured + sling:resourceType; sling:resourceType reference
  table added; initiatorparticipant documented; transition XML
  removed (Sync derives transitions from step order)
- model-design-patterns.md: Pattern 5 Task Manager XML corrected to
  flow-layer format; Pattern 6 variables annotated as runtime-only
- SKILL.md: Sync verification added to checklist; /conf vs /var
  distinction note; filter.xml guidance updated

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(aem-workflow): correct AND_SPLIT/AND_JOIN/END resourceTypes in workflow-model-design (AEM 6.5 LTS)

The step-types-catalog incorrectly listed sling:resourceType values for
AND_SPLIT, AND_JOIN, and END that do not exist as design-time
components on AEM 6.5 LTS. Verified against
/libs/cq/workflow/components/model/ on localhost:4505.

- sling:resourceType table: AND_split -> and (the actual OOTB
  component is named and, not AND_split); AND_join and end rows
  removed (no such components exist)
- AND_SPLIT example: corrected sling:resourceType to
  cq/workflow/components/model/and; AND_JOIN inline example removed
- AND_JOIN section: replaced manual <synchronize> example with a note
  that AEM Sync derives AND_JOIN nodes automatically at /var
- END Node section: replaced manual <workflowend> example with a note
  that Sync derives both START and END automatically

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 10:44:47 +02:00
Robert Munteanu df8be2cbdb Merge remote-tracking branch 'origin/main' into feat/aem-rde-skill 2026-05-11 10:26:50 +02:00
Abhishek Garg 962fd1dbee fix(replicate-content): condense SKILL.md to pass tessl-review (#119)
* fix(replicate-content): condense SKILL.md to pass tessl-review (#117)

Rewrites replicate-content/SKILL.md from 840 lines to ~150 lines and
adds three reference files so the skill passes the 50% tessl-review
threshold.

Changes:
- Description: add explicit "Use when..." clause and trigger terms
  (publish, unpublish, replicate, content activation, dispatcher flush,
  AEM publish instance) to improve specificity and completeness scores
- Body: condense all seven replication methods to 3-5 lines each with
  explicit ✓ Verify checkpoints; remove generic Best Practices,
  Security Considerations, and Success Criteria sections
- Split detailed walkthroughs into references/ bundle files:
  - references/TREE_ACTIVATION.md (dry-run steps, performance guidance)
  - references/PACKAGE_REPLICATION.md (full package build/replicate flow)
  - references/REPLICATION_API.md (Java API, ReplicationOptions,
    curl with error handling, service user setup)

Fixes #117

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(replicate-content): address quality review findings

- CRITICAL: replace invalid XML service-user mapping with correct OSGi
  JSON config format (.cfg.json) in REPLICATION_API.md
- HIGH: add REVERSE to ReplicationActionType table (was missing)
- HIGH: add replication-api to Related Skills in SKILL.md
- MEDIUM: add Only Activated option to Tree Activation summary to match
  TREE_ACTIVATION.md reference file
- MEDIUM: fix head -n1 → sed '$d' in production curl script to handle
  multiline JSON responses without truncation
- MEDIUM: add brief Asset Replication (DAM) section to SKILL.md
- LOW: add Additional Resources section with official Adobe docs links

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Abhishek Garg <abhigarg+adobe@adobe.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 10:20:39 +02:00
Burkhard Pauli 26c2c4164f fix: address rombert and abhishekgarg18 review feedback
- Tighten aem-rde activation: explicit RDE references only; add do-not-activate guard for generic AEMaaCS phrases (cloud sandbox, dispatcher-config/frontend/env-config, push my bundle, tail the publish log) that belong to Cloud Manager pipelines
- Mark skill as beta per project conventions: [BETA] prefix in description with caveat, metadata.status: beta in frontmatter, and a beta-skill blockquote in the body
- Reflect beta status in README entry
2026-05-07 16:22:10 +02:00
Burkhard Pauli 17a795cbc1 fix: address PR review feedback
- Update aem-cloud-service plugin.json description and keywords to mention RDE for discoverability
- Add aem-rde skill section to README.md for human and AI agent discovery
- Document single-user RDE constraint in references/configuration.md
2026-05-07 09:58:34 +02:00
Burkhard Pauli 01a3493b64 fix: remove unsupported user-invocable frontmatter field from aem-rde skill 2026-05-06 15:28:25 +02:00