Commit Graph

347 Commits

Author SHA1 Message Date
Abhishek Garg 42bc5b0120 feat(aem-6.5-lts): add Java 21 migration skill
Add a new skill for migrating AEM 6.5 LTS Maven projects from
Java 8/11 to Java 21. The skill uses OpenRewrite recipes for
automated code transformation, Python POM manipulation scripts
for changes OpenRewrite cannot handle, and agent-assisted build
fixing with strict guardrails.

12-step migration workflow covering: project validation, Java
version detection, initial build, OpenRewrite Java migration,
POM manipulations, CloudManager config, pre-Mockito build,
Mockito migration, final build, jakarta/workaround cleanup,
migration reporting, and diff review with local commit.

Includes:
- OpenRewrite recipes for Java 8/11→21 and Mockito 1.x→5.x
- Python scripts for compiler config, SCR removal, classifier
  migration, and FileVault groupId fixes
- JSON configs for plugin, dependency, and classifier rules
- Maven settings.xml and toolchains.xml for multi-JDK builds
- Reference docs: prerequisites, build-fix constraints,
  OpenRewrite commands, POM manipulation rules, validation report
- tile.json for 6.5-lts plugin (enables tessl evals)

Guardrails: javax-not-jakarta enforcement, 8 unsupported package
hard stops, enforcer version monotonicity, POM indentation
preservation, temp workaround cleanup, change attribution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-28 13:53:01 +05:30
Lars Trieloff cdffbf0cad Merge pull request #137 from arjuncooliitr/main
Add app-builder cursor plugin metadata
2026-05-27 19:36:18 +02:00
David Bosschaert ecd1e2b2c4 fix(stardust): fix opening prototyped pages from SLICC browser plugin (#152)
* fix(stardust): fix opening prototyped pages from browser plugin

Use `open <vfs-path>`, not `playwright-cli open`, for prototype
previews.

VFS-backed prototype files must be opened with the `open` shell
command so the preview service worker resolves the path.
`playwright-cli open` bypasses the worker and yields FILE NOT
FOUND. Update prototype and uplift SKILL.md to spell this out.

* chore: remove multiple files detail
2026-05-26 08:36:54 +01:00
Paolo Mottadelli 07aa1f4211 fix(stardust): close 3 Tessl orphaned-reference warnings (#151)
Closes three low-risk Tessl skill-review orphan warnings.

- distill/SKILL.md: added a `## References` section listing the two
  reference files (samples-brief-format.md, trait-matrix-schema.md).
  distill was the only skill without a References section.
- prototype/SKILL.md References: added the four cinematic motion docs
  (motion-registers.md, motion-stack.md, motion-attributes.md,
  motion-runtime.md) alongside motion-validation.md.
- prototype/SKILL.md References: switched 7 cross-skill paths from
  `skills/stardust/reference/X.md` (absolute-style, unresolvable by
  Tessl) to `../stardust/reference/X.md` (the convention already
  used by stardust/SKILL.md and uplift/SKILL.md).

No behavior changes — additive + path-correctness fixes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-05-24 22:54:38 -07:00
Paolo Mottadelli 07fa21891a feat(stardust): 0.7.1 → 0.10.0 — distill, cinematic motion, uplift orchestrator (#149)
Stacks three minor versions on the `redesign-adobecom` branch.

## 0.8.0 — Original `redesign-adobecom` changes
- NEW skill: `distill` — analyze HTML mockups + website URLs and produce a structured style guide; anchors `direct` under Mode B.
- Motion validation gate (Phase 2.8 on `prototype`) — clipped-container reveal timing, animation-range vs reading position, anim-enter trigger reachability, reduced-motion override completeness, no-JS fallback, multi-viewport scroll-driven checks.
- Surface forks formalized as parent-direction tuning under reimagined mode.
- Journal rule + recursive validate-and-fix loop promoted to master skill.
- HTTP/2 / Akamai bypass: route-fulfiller pattern in playwright-recipe.

## 0.9.0 — Cinematic motion feature
- `prototype --cinematic` (and `--cinematic=<register>`) — layers a brand-faithful motion register on the static prototype. Output is `<slug>-cinematic.html` alongside the static `<slug>-proposed.html`.
- Five motion registers as a closed catalog (`arrival`, `kinetic-display`, `live-systems`, `editorial`, `kinetic-grid`).
- Lenis bundled at `skills/prototype/assets/motion/` (MIT, ~17 KB). No GSAP / Framer / Theatre.js.
- Motion `data-*` vocabulary: `[data-anim]`, `[data-tile-anim]`, `[data-countup]`, `[data-flip]`, `[data-fill]`, `[data-split]`, `[data-parallax]`.
- Canonical inline runtime at `prototype/reference/motion-runtime.md`.
- Six cinematic-mode validation gates (Pass 6): Lenis bootstrap, reduced-motion fallback, scroll-jack check, three-position screenshot pass, register-match audit, motion C-cliff detector.
- `direct` writes `extensions.motion.register` from PRODUCT.md Brand Personality. For multi-variant runs the register lives in per-variant `DESIGN-<id>.json`.

## 0.10.0 — `/stardust:uplift <URL>` one-shot presales orchestrator
- NEW skill: `uplift` — produces three differentiated variants (A faithful + improvements, B "what if we amplified `<captured trait>`?", C "what if motion was part of the identity?" — fully cinematic) without further user coordination.
- Closed catalog of 8 "what if…" captured-trait amplification candidates with disqualification clauses.
- Load-bearing artifacts: `uplift-improvements.md` (5 specific weaknesses) and `uplift-questions.md` (catalog walk + picks + disqualifications).
- Delegates to extract → direct → prototype with no new flags on the underlying skills.

## Plugin metadata
- `tile.json` bumped 0.8.0 → 0.10.0; registers `uplift` + `prepare-migration` (the latter a pre-existing gap closed).
- `.claude-plugin/plugin.json` bumped 0.9.0 → 0.10.0.

## Backward compatibility
All existing sub-commands unchanged. Motion is opt-in via `--cinematic`. `uplift` is a new entry point with no parallel render path — it delegates to existing skills. Existing project trees gain new artifacts only when the new flags / skills are engaged.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-05-24 22:25:46 -07:00
Lars Trieloff 706f94db8e fix(release): grant pull-requests: write to release workflow (#145)
The semantic-release/github success step posts a 'released in version'
comment on the merged PR. With only contents+issues write, GitHub denied
that write (see run 26256538929: 'Not allowed to add a comment to the
issue/PR #144'). Per @semantic-release/github docs, pull-requests: write
is required for the success comment.
2026-05-21 15:33:07 -07:00
semantic-release-bot 2833c9bd7c chore(release): slicc-handoff-v1.0.1 [skip ci] slicc-handoff-v1.0.1 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] slicc-handoff-v1.0.0 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 8f588387ae Merge pull request #143 from adobe/fix/tessl-lint-fork-pr-comment
fix(ci): make tessl-lint sticky comment non-fatal for fork PRs
2026-05-21 09:11:59 -07: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
Lars Trieloff dedb9597f8 Merge pull request #139 from adobe/fix/release-notes-path-filtering
fix(release): filter release notes and version bumps to skill directory
2026-05-20 10:58:56 -07:00
Lars Trieloff 031dfb5f96 fix(release): address PR review comments on path-filtered-analyzer
- Use execFileSync with argument array instead of execSync with
  interpolated string to avoid shell injection risk
- Log a warning via context.logger when the git fallback is triggered
  so failures are diagnosable rather than silently swallowed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 10:43:03 -07:00
Lars Trieloff 6a7a15583a fix(release): filter release notes and version bumps to skill directory
Each skill was including all repo commits in its CHANGELOG and GitHub
release body, and unrelated breaking changes were triggering spurious
major bumps. Fix by path-filtering at both the commit-analysis and
note-generation stages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 10:31:03 -07:00
Arjun Gupta f522a67a4c Add Cursor plugin marketplace and CODEOWNERS
Create .cursor-plugin/marketplace.json for an "adobe-skills" marketplace (version 1.0.0) that includes an "app-builder" plugin entry. Also update .github/CODEOWNERS to add ownership for /.cursor-plugin/ to @shsteimer and @trieloff so plugin config changes are properly reviewed.
2026-05-20 16:25:48 +05:30
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
Arjun Gupta f0cdfb7bd3 Add displayName/skills and update README install
Add a human-friendly displayName ("Adobe App Builder") and a local "skills" path to plugins/app-builder/.cursor-plugin/plugin.json. Update README install instructions to create the local plugin directory and copy the plugin contents (mkdir -p + cp -R), and add a note to verify the plugin loaded in Cursor settings. These changes clarify local installation and expose the plugin's skills directory for Cursor distribution.
2026-05-19 10:35:22 +05:30
Arjun Gupta 2411626455 feat(app-builder): add cursor plugin metadata
Add Cursor-native plugin manifest at plugins/app-builder/.cursor-plugin/plugin.json,
mirroring the existing .claude-plugin/plugin.json (name: app-builder, version: 1.0.0).

Documents the Cursor distribution channel in README under Installation, marking
app-builder as the pilot plugin. Other plugins will gain Cursor support once
the pattern is validated.
2026-05-18 14:54:04 +05:30
semantic-release-bot 9ca1da2628 chore(release): testing-blocks-v2.0.0 [skip ci] testing-blocks-v2.0.0 v1.0.0 2026-05-14 16:26:26 +00:00
semantic-release-bot ee6a5d7fd5 chore(release): scrape-webpage-v2.0.0 [skip ci] scrape-webpage-v2.0.0 2026-05-14 16:24:08 +00:00
semantic-release-bot 138e189fed chore(release): preview-import-v2.0.0 [skip ci] preview-import-v2.0.0 2026-05-14 16:21:52 +00:00
semantic-release-bot f015564db8 chore(release): generate-import-html-v2.0.0 [skip ci] generate-import-html-v2.0.0 2026-05-14 16:19:35 +00:00
semantic-release-bot 33b91af03b chore(release): content-modeling-v2.0.0 [skip ci] content-modeling-v2.0.0 2026-05-14 16:17:18 +00:00
semantic-release-bot 03fc683c74 chore(release): content-driven-development-v2.0.0 [skip ci] content-driven-development-v2.0.0 2026-05-14 16:15:29 +00:00
semantic-release-bot 5a39da1cbf chore(release): code-review-v2.0.0 [skip ci] code-review-v2.0.0 2026-05-14 16:13:10 +00:00
semantic-release-bot 0ad01b5a1b chore(release): building-blocks-v2.0.0 [skip ci] building-blocks-v2.0.0 2026-05-14 16:11:21 +00:00
semantic-release-bot 8f80befe83 chore(release): analyze-and-plan-v2.0.0 [skip ci] analyze-and-plan-v2.0.0 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
Paolo Mottadelli 1ab6833f1e fix(stardust): make migrate output genuinely zip-and-deploy portable (#133)
* fix(stardust): make migrate output genuinely zip-and-deploy portable

The 0.7.0 contract claimed "self-contained, zip-and-deploy" but
emitted root-absolute paths (/assets/..., /beers/) plus
directory-only nav links. Those work on a webserver at the host
root only — they 404 on file:// and at any subpath. This PR
delivers what the claim promised:

- Output path is URL-literal: /beers/ -> beers/index.html,
  /about-us/history.html -> about-us/history.html. No more
  synthesizing /about/index.html from a slug.
- Page map (state.json.migrate.pageMap[]) built once per run;
  per-page rendering and internal-link rewriting both consume it.
- Reference shape is depth-aware relative: prefix is ./ for
  depth-0 pages, ../ * depth otherwise. Works on file://, at
  host root, and at any subpath without rewriting.
- Phase 3 broadens the self-containment check into a full
  portability audit: refuses absolute internal refs, refuses
  directory-only nav, runs the new pageMap + file:// fixtures.
- New fixtures: file-protocol-audit.mjs (Playwright file://
  round-trip) and pagemap-audit.mjs (static pageMap consistency).
- asset-bundling.md and migrate-output-format.md aligned to the
  new depth-aware-relative shape; state.json contract gains
  pageMap[].

Plugin bumped 0.7.0 -> 0.7.1.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* review: fix four flagged correctness issues

- Directory-only-nav regex now catches `./beers/` (the cited example).
  Old pattern required a-z as first char; `./beers/` starts with `.`
  and would have slipped through. New pattern accepts ./, ../, /, or a
  bare segment, and excludes scheme-bearing URLs (no false positive
  on https://google.com/).
- Add a second grep for absolute url() references inside inline style
  attrs and <style> blocks (and CSS files); the original href/src grep
  missed these.
- SKILL.md Outputs row no longer claims the sidecar lives at
  <source-url-path>/_meta.json (nonsense for .html-leaf pages).
  Replaced with a row that points at the canonical sidecar rule.
- migration-procedure.md § Page map now explicitly says same-origin
  absolute URLs are stripped to their path portion before pageMap
  lookup (per content-preservation.md § Internal link rewriting),
  closing the loophole that would let <a href="https://origin/foo/">
  pass through verbatim.

Regex patterns verified against a test fixture before commit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* review: update migrate-self-contained-bundle eval to 0.7.1 contract

The eval was pinned to 0.7.0's root-relative /assets/<subpath>
shape. This PR's contract change to depth-aware relative paths
would have made the eval fail against correct 0.7.1 output.

- detection_src_href criterion now asserts <prefix>assets/<subpath>
  (not /assets/<subpath>).
- Renamed prefix_resolution_root_relative -> prefix_normalises_authoring;
  description flipped from "reference is left as-is" to "authoring
  is normalised to the depth-aware emit form".
- Added 4 new criteria: depth_aware_paths (6pts),
  pagemap_constructed (6pts), internal_links_via_pagemap (5pts),
  portability_audit_passes (13pts).
- Setup uses real source URLs that exercise the URL-literal rule:
  /, /beers/, /about/history.html (preserve .html leaf),
  /docs/api/ (depth-2 nested).
- Prototype HTML now carries internal nav in three authoring styles
  (root-absolute, same-origin absolute, directory-only) plus a
  broken-link case, exercising the page map rewrite.
- Run 1 expected behavior rewritten to expect depth-aware emission
  ('./assets/...'), pageMap built before render, broken-link
  flagging, and the 6-step portability audit passing.
- Run 4 (cross-page dedup) updated so the second page emits its
  shared asset with its own '../' prefix while the underlying file
  on disk is a single copy.
- Weights re-balanced to sum to 100; portability_audit_passes gets
  the largest weight (13pts) since it backs the contract claim.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 03:29:23 -07:00
Paolo Mottadelli 27dd06341c feat(stardust): migrate produces self-contained zip-and-deploy bundle (#132)
* feat(stardust): migrate produces self-contained zip-and-deploy bundle

Bundles every referenced asset into stardust/migrated/assets/ and
rewrites HTML/CSS references to root-relative /assets/<subpath> so
the migrated tree is fully self-contained. Adds asset-bundling
reference (six detection shapes, nine edge cases), output-format
contract with state.json.migrate block (selfContained: true),
--clean and --pin-timestamp flags, and an eval covering the six
acceptance criteria.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* review: fix count, --clean correctness, document asset-missing rename

- Bump totalAssetsBundled 6 → 7 in eval task.md (matched bundledAssets[] length).
- --clean now implies --force so the bundledAssets Set is the complete
  union across every page; idempotent-skipped pages' assets are no
  longer at risk of being deleted as stale. Updated SKILL.md flag
  description, asset-bundling.md § Stale asset cleanup, the
  Idempotent-skip interaction note, and the eval's run-3 expected
  behaviour + criterion.
- Document the contentDeviations / migrationDecisions kind rename
  from "media-missing" to "asset-missing" in
  migrate-output-format.md § Backwards compatibility — consumers
  should accept either string until they migrate.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(stardust): bump plugin version 0.6.0 → 0.7.0

Self-contained zip-and-deploy bundle is a minor-version addition:
new --clean and --pin-timestamp flags, new state.json migrate
block (forward-compat), new asset-bundling reference contract,
provenance kind rename (media-missing → asset-missing).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(stardust): bump palette library version v0.6.0 → v0.7.0

Keep the palette library version aligned with the plugin version.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 12:32:30 -07:00
Paolo Mottadelli bfe537dbdd feat(stardust): ia-fidelity axis + 10 non-slop disciplines + approval fold-back (#131)
Coordinated three-part change: Part I adds a strategic ia-fidelity
axis pinned at direct time (verbatim → A1/A2/A3 surface forks vs
reimagined → A+B+C role-differentiated). Part II adds 10 disciplines
at three phase boundaries (brief-time 1-5, craft-time 6-8, quality
gates 9 + convergence detector 10) with the four wasatch dry-run
friction carve-outs folded in. Part III lands Phase 5 approval
fold-back (site-wide / page-local / don't-fold) with verbatim no-op
gating. Also sweeps remaining Phase 5.5 → 2.7 references across the
plugin docs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 09:44:12 -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
Himani Chauhan ef38f747e0 fix(ci): make sticky PR comment non-fatal for fork PRs
Fork pull requests receive a read-only GITHUB_TOKEN regardless of the
permissions block, so the gh api POST/PATCH to create or update the
sticky tessl-lint comment always returns HTTP 403. This caused the job
to exit 1 even when all tiles passed lint.

Make both comment API calls non-fatal with || echo warning so the job
result reflects the actual lint outcome rather than a GitHub API
permission restriction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:31:38 +05:30
Paolo Mottadelli 5d47099881 feat(stardust)!: sweep — drop doctor, fossils, opt-out flags, live integration
* feat(stardust)!: sweep — drop doctor.md, F-NNN fossils, opt-out flags, live integration

Four related cleanups bundled. Each independently small; together
they shrink the docs by ~600 lines and remove three doc-rot
patterns at once.

1. Delete doctor.md (493-line spec for an unimplemented script).
   The Festool-incident concerns it was scoped to are now handled
   by concrete write-time contracts (validateProvenance, content-
   sourcing hierarchy, anti-toolbox audit). No external references.

2. Drop F-NNN feedback fossils + version-changelog paragraphs.
   STARDUST-FEEDBACK.md doesn't exist in the plugin; the F-001 /
   F-002 / F-009 / F-015 / F-016 / F-018 citations were opaque
   tribal vocabulary. Kept the rules they cited; dropped the
   IDs. divergence-toolkit.md changelog paragraphs (v0.1 → v0.2,
   v0.4 → v0.5, v0.5 → v0.5.1) collapsed.

3. Slim flag surfaces. Every --no-* / --skip-* / --allow-* /
   --refresh-stale flag dropped from prototype and migrate; the
   underlying quality gates are now mandatory. Manual chat
   overrides ("ship as-is", "accept the P1 findings") remain
   available and are recorded in _provenance verbatim.

   prototype flags: 10 → 5 (<slug>, --all, --prep, --canon-from,
   --publish-sample).
   migrate flags: 8 → 5 (<slug>, --all, --force, --require-approved,
   --strict-canon).

4. Drop the impeccable:live integration. Live was documented as
   the "default" iteration path but wasn't used — chat-driven
   command invocation is the actual default. Phase 4 collapses
   from 6 steps to 3 (open file → mark prototyped → report).
   Iteration paths drop from 3 to 2 (chat-driven, direct
   invocation). Live remains usable as an external tool the user
   invokes directly against the proposed file; stardust no
   longer pretends to drive its poll loop.

BREAKING CHANGE: prototype no longer accepts --no-iterate,
--no-critique, --skip-adapt-audit, --adapt-variant, --no-hamburger,
--refresh-stale, or --no-impeccable. migrate no longer accepts
--refresh-stale, --allow-placeholder, or --skip-adapt-audit.
The mobile-adapt audit, content-sourcing scan, placeholder gate,
and critique + audit pass are now mandatory; manual chat overrides
replace the flag-based bypasses.

The live driver loop (Phase 4 steps 4-6: config.json setup, event
streaming, carbonize cleanup, iteratedVia: impeccable:live
provenance) is gone. The proposed file's iteratedVia provenance
now records the named impeccable commands run against the file,
not a live sessionId.

stardust bumped to 0.6.0.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* chore(stardust): sync tile.json version to plugin.json (0.6.0)

The tile manifest's version was stuck at 0.1.0 while the plugin
moved to 0.6.0. Keep them in sync so tessl-side catalog metadata
matches the marketplace.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 02:31:08 -07:00
Paolo Mottadelli 33dd9037f3 stardust: mobile-nav collapse + drop before/after viewer (#127)
* stardust: mobile-nav collapse pattern + drop before/after viewer

Two related changes to stardust:prototype landing together.

Mobile-nav collapse (additive):
- New stock CSS-only hamburger pattern auto-applied by Phase 5.5
  when the Mobile-adapt audit refuses at 360px (overflow,
  sub-11px nav font, or sub-10px nav gap).
- New audit conditions documented in skills/prototype/SKILL.md
  § Mobile-adapt audit; checked at runtime via the Playwright
  snippet at skills/prototype/fixtures/mobile-nav-audit.mjs.
- Stock pattern doc at skills/prototype/reference/mobile-nav-collapse.md
  carries the copy-pasteable HTML+CSS+JS, the ARIA checklist,
  the post-injection source-order check, --no-hamburger opt-out,
  and the alternative-pattern vocabulary.
- New data-nav-collapse="hamburger" attribute (v2.2 additive) on
  <header> when the pattern is applied.
- Positive + negative fixtures verify the audit end-to-end.

Drop the per-page before/after viewer:
- Phase 3 (Compose the viewer) removed; the proposed file is
  opened directly in the browser.
- Approval is now chat-only: "approve <slug>" or "approve".
- skills/prototype/reference/before-after-shell.md renamed to
  proposed-file-shell.md and stripped to the proposed-file
  contract only (viewer half, iframe resolution chain, action
  buttons, and stash mechanic all dropped).
- state-machine.md prototypePath repointed at -proposed.html;
  doctor.md D-104 pairs -proposed.html with -shape.md;
  artifact-map.md drops the <slug>.html row; publish-sample.md
  simplifies variant discovery (no more "is not the viewer"
  disambiguation); evals/prototype-before-after rewritten to
  expect a single proposed file.

BREAKING CHANGE: stardust:prototype no longer composes the
before/after viewer at stardust/prototypes/<slug>.html.
Anyone scripting on top of that file existing on disk should
switch to stardust/prototypes/<slug>-proposed.html (the
prototypePath in state.json now points there directly). The
approval gesture moves from the viewer's Approve button to a
chat-only "approve <slug>" / "approve".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* stardust: bump version to 0.5.0

Minor bump for the breaking change in 370a208 (drop before/after
viewer; chat-only approval). Pre-1.0 semver: minor bump signals
a breaking change without claiming API stability.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 00:06:20 -07:00
Paolo Mottadelli 2da4f830ad stardust: fix dependencies schema to use name@marketplace string (#126)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 12:21:32 -07:00
Paolo Mottadelli 9af9da4866 Merge pull request #125 from adobe/stardust-fix-marketplace-dep
stardust: fix cross-marketplace dep reference (0.4.1)
2026-05-12 12:12:07 -07:00
Paolo Mottadelli 90be5b7bf2 stardust: fix cross-marketplace dep reference to impeccable
The `marketplace` field in plugin dependencies and the
`allowCrossMarketplaceDependenciesOn` allowlist must use the
marketplace's `name` (`impeccable`), not its GitHub repo path
(`pbakaus/impeccable`). The mismatch caused Claude Code to flag
the stardust plugin manifest as invalid on install.

Bumped to 0.4.1.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 21:11:48 +02:00
Paolo Mottadelli c2f73925c2 Merge pull request #124 from adobe/seed-brief
stardust: bump version to 0.4.0
2026-05-12 11:54:09 -07:00