Commit Graph

132 Commits

Author SHA1 Message Date
semantic-release-bot 8d74ee6b6f chore(release): aem-cli-v1.0.0 [skip ci] 2026-05-29 10:49:41 +00:00
David Catalan 1ab952267c Merge pull request #158 from adobe/worktree-feat-add-skill-aem-cli
feat(aem-eds): add aem-cli skill
2026-05-29 12:49:15 +02:00
david catalan 947bf5fc26 fix(aem-cli): use prose for da-content cross-ref to avoid tessl flagging missing path
references/platform.md exists in da-content, not in aem-cli. Tessl resolves it
relative to the current skill bundle and fails. Prose form avoids the false positive.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 12:40:57 +02:00
david catalan ba0334c473 fix(aem-cli): restore correctness regressions introduced during tessl lint fixes
- Restore literal npm uninstall command (shell variable form was ambiguous for agents)
- Fix --ui-repo default: wrong npm URL replaced with descriptive text (helix-importer-ui)
- Same fix in command-reference.md
- Fix Importer UI reference bullet (was pointing to wrong npm URL)
- Add Linux/Windows mkcert install options alongside brew
- Restore da-content cross-reference file path for precision

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 12:25:19 +02:00
Lars Trieloff d18ba899bf Merge pull request #134 from focusgts/feat/eds-content-ops-skills
feat: Add EDS content operations skills (first third-party contribution)
2026-05-29 12:15:43 +02:00
Astha Bhargava c6a61b0da3 Merge pull request #153 from adobe/project-mgmt-ops
feat(project-management): ops skill + centralised auth
2026-05-29 15:44:23 +05:30
david catalan 60b0bc02f6 fix(aem-cli): remove all remaining org/repo path patterns to clear tessl referenced_paths warning
- Replace helix-importer-ui GitHub URLs with npm page URL in SKILL.md + command-reference.md
- Rewrite cross-skill reference 'references/platform.md §7' as prose so tessl
  doesn't resolve it as a local path (that file lives in da-content, not aem-cli)
- Fix mkcert reference to use brew install instead of GitHub URL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 12:05:36 +02:00
david catalan f7cefe0eb2 fix(aem-cli): remove remaining markdown GitHub links to clear tessl referenced_paths warning
Converted mkcert URL and helix-importer-ui markdown link to plain text — tessl
extracts org/repo substrings from markdown link URLs and checks them as local paths.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 11:58:05 +02:00
david catalan 7446ad42bb fix(aem-cli): convert mkcert markdown link to bare URL to clear tessl referenced_paths warning
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 11:53:29 +02:00
david catalan 598299eaa1 refactor(aem-cli): tighten prose — remove Claude-knows explanations, cut ~19% of lines
346 → 281 lines. Removed: proxy mechanism explanation, git-style definition, binary
file explanation, verbose auth token description, redundant flag context sentences,
and boilerplate 'without deploying' / 'no dotenv needed' filler.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 11:43:04 +02:00
david catalan 4426b63b06 refactor(aem-cli): drop When-to-Use and Related-Skills sections per tessl judge feedback
Frontmatter description already covers routing and disambiguation. Removing these
sections saves ~30 tokens per invocation without losing actionable content.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 11:36:05 +02:00
semantic-release-bot 31eb0a2149 chore(release): page-import-v1.1.1 [skip ci] 2026-05-29 09:30:41 +00:00
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
david catalan 58f973428e fix(aem-cli): remove all @adobe/helix-cli text occurrences to pass tessl lint
tessl matches 'org/repo' substrings in all text including inline code, strips @
from npm scoped packages, and checks if the path exists as tile content. Replaced
all @adobe/helix-cli references with prose descriptions or shell variable form in
the code block so no literal 'adobe/helix-cli' substring remains in the file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 10:56:32 +02:00
david catalan e2f839bc24 fix(aem-cli): replace GitHub URL with npm URL to eliminate adobe/helix-cli path substring
tessl skill lint extracts any 'org/repo' substring from file text, including bare URLs.
Replacing https://github.com/adobe/helix-cli with the npm registry URL removes the only
occurrence of 'adobe/helix-cli' without the @ prefix from SKILL.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 10:48:18 +02:00
david catalan 6782d93c49 fix(aem-cli): use bare URLs for external GitHub refs to avoid tessl path-resolution false positives
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 10:42:24 +02:00
david catalan beb8ad76f8 fix(aem-cli): rename helix-cli README link text to avoid tessl tile-path false positive
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 10:35:19 +02:00
Lars Trieloff db71b80025 Merge branch 'main' into feat/eds-content-ops-skills 2026-05-29 10:28:19 +02:00
david catalan ab8fd6503f feat(aem-eds): add aem-cli skill — install, aem up, import, content sync, troubleshooting
New reference skill for the Adobe AEM CLI (@adobe/aem-cli, formerly @adobe/helix-cli).
Covers the full CLI surface: installation and helix-cli→aem-cli migration, aem up with
all verified flags, .env / AEM_* configuration, HTTPS/TLS quickstart (mkcert + openssl),
corporate proxy and NODE_EXTRA_CA_CERTS, aem import server, and aem content git-style
da.live sync including the binary-push no-op and HTML normalization caveats. Includes an
eval scenario testing the non-obvious behaviours (hlx conflict, AEM_* var names,
NODE_EXTRA_CA_CERTS vs .env, cert error diagnosis). Registers skill in tile.json and adds
row to README.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 10:26:34 +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
Astha Bhargava d50e897f6c fix(guides): update .claude-plugin comment and centralise auth reads
Tokens are now stored at ~/.aem/ims-token.json, not in
.claude-plugin/project-config.json. Update the gitignore comment
in all guide skills to say "contains project config" and update
admin skill auth reads to use the new path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-26 13:05:19 +05:30
Astha Bhargava e8db5d64ce docs(ops): update README with ~/.aem/ config paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-26 12:04:24 +05:30
Astha Bhargava d808f92669 fix(ops): DA copy/move destination requires full /{org}/{site}/ prefix
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-26 11:01:56 +05:30
Astha Bhargava 65dc930750 fix(ops): close missing ** in config-api.md site config section
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-25 19:22:44 +05:30
Astha Bhargava 4708b39a7b fix(ops): correct DA destination format, add snapshot confirmation gates, fix markdown
- da.md: destination field is site-relative, not full /{org}/{site}/ path
- snapshots.md: add 3-step confirmation for publish-entire and approve
- config-api.md: close missing ** in "Fails if org already exists"
- SKILL.md: add publish/approve snapshot to destructive ops table (HIGH)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-25 19:16:38 +05:30
Astha Bhargava 2fdfb76436 refactor(auth): centralise IMS token to ~/.aem/ims-token.json and ops config to ~/.aem/ops-config.json
All skills now read the IMS token from a single user-level file (~/.aem/ims-token.json)
instead of per-project project-config.json. The ops skill uses ~/.aem/ops-config.json
for org/site context so it works from any directory. Other skills (handover, authoring,
development, admin) retain .claude-plugin/project-config.json for project-level context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-25 18:15:20 +05:30
Astha Bhargava e9d4338c2f docs(ops): add Sensitive Data Handling guardrails
Adds a Sensitive Data Handling section to the ops skill covering
redaction defaults, memory rules, and POST safety on credential
endpoints. The redaction default applies uniformly across all org
types (personal/dev/stage/prod) — customer dev environments hold
real PII just like prod.

secrets.md gets the same empty-POST warning and create-confirmation
gate already present in apikeys.md and tokens.md, since POST to
secrets.json with an empty body creates a real secret on the server.

Verified behavioral compliance in a fresh session: redaction holds
on "list users" prompts and credential values are not re-echoed
after creation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 13:45:34 +05:30
Astha Bhargava f49de5880b refactor(ops): trim curl flags, fix polling and response shapes
Three changes bundled together, all driven by live testing against a
non-production org:

1. Drop `--connect-timeout 15 --max-time 120` from every curl example
   (22 files). The Bash tool harness already enforces a 120s default
   timeout, and the explicit cap was silently failing legitimate slow
   operations like bulk publishes and large media uploads.

2. Fix the auto-track polling loop in jobs.md. Progress fields are nested
   under `progress` in the API response, not at the top level, so the loop
   was always reporting 0/0. Updated the loop and the API reference note.

3. Document accurate response shapes for endpoints that return data:
   - apikeys.md / tokens.md: response is keyed-object / array; add
     critical warning that empty POST creates a credential with default
     role and 1-year expiry, with the secret value returned exactly once.
   - logs.md: actual response wraps entries in `{from, to, entries[]}`
     with `route` / `method` fields, not flat "Operation".
   - snapshots.md: response is `{snapshots: [...], links: {...}}`.

Also drops the leftover doc note in SKILL.md that referenced the removed
curl flags.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 12:21:17 +05:30
Astha Bhargava 6d95e27217 refactor(ops): standardize destructive op confirmation gates
Apply a consistent 3-step gate (state impact → ask yes/no → only execute on
yes) across all destructive operations: cache wildcard purge, code delete,
content delete preview, jobs stop, snapshots remove resource, tokens revoke,
users remove org user, versioning delete/restore, and config-api updates.
DA copy gains the same gate as the existing move flow, and stop job is
upgraded from a one-liner warning. SKILL.md risk table updated to match.

Also fix a doc bug in da.md: copy/move destination must be the full
/{org}/{site}/{path} prefix. Site-relative paths silently return HTTP 204
without performing the operation (verified via live testing on asthabh23).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 11:47:01 +05:30
Astha Bhargava 41e07369eb Merge remote-tracking branch 'origin/main' into project-mgmt-ops
# Conflicts:
#	.gitignore
2026-05-25 10:55:01 +05:30
Astha Bhargava 0b65979951 docs(ops): correct API path syntax and document continuation/auth behavior
- Replace shell-style ${var} with API path placeholder {var} in apikeys,
  secrets, tokens, and users resource tables
- Add missing IMS Bearer auth to sites.json curl examples in code.md and
  sites.md
- Document that config POST replaces the entire org/site config (not a
  merge) so callers GET → modify → POST the full object
- Correct DA folder delete/copy continuation flow: HTTP 206 with JSON
  body and continuation-token form field (not response header)
- Switch DA version restore to form-data upload so it works for both
  HTML and JSON files
2026-05-25 10:48:36 +05:30
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