Files
adobe__skills/plugins/stardust
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
..

stardust

Redesign an existing website to make it better.

Stardust is a Claude Code plugin that drives a guided redesign of an existing website. It is a higher-level skill built on top of impeccable: impeccable owns how to design well; stardust owns the specific job of taking a site that exists and turning it into a site that is better.

Stardust is opinionated about what "better" means but the user has the final say. The default definition of better is rooted in impeccable's critique and audit, the absence of AI-slop patterns, and a user-selected expressive direction. Every redesign decision is reasoned in the open before code runs.

Pipeline

extract  →  direct  →  prototype  →  migrate
  1. extract — crawl the existing site (capped, multi-page) and seed a description of its current state in impeccable's own format (stardust/current/PRODUCT.md + DESIGN.md).
  2. direct — capture the user's intent ("make it better", "make it more expressive for a young audience") as an open phrase, reason about what it means in stardust's dimensional vocabulary, ask up to two clarifying questions, and write a target PRODUCT.md + DESIGN.md at the project root plus a stardust/direction.md with the full reasoning trace.
  3. prototype — render before/after static-HTML prototypes per page and iterate via $impeccable craft and $impeccable live.
  4. migrate — apply the approved target DESIGN.md to every page in the inventory. Per-page state means migration is incremental and resumable.

Surface

$stardust                  # state report + freeform intent reasoning
$stardust extract [url]    # ingest existing site
$stardust direct           # resolve intent → target PRODUCT.md / DESIGN.md
$stardust prototype [page] # before/after prototype, delegates to impeccable
$stardust migrate [page]   # render redesigned static HTML (incremental)

$stardust with no argument runs a read-only state report and shows the recommended next step. $stardust with a freeform phrase runs the intent reasoning procedure (reference/intent-reasoning.md) and proposes a plan before executing anything.

Hard dependency

Stardust requires impeccable to be installed. There are no fallbacks. On every invocation stardust verifies the impeccable skill is reachable and aborts otherwise with a clear install hint.

What stardust does NOT ship

  • No design language of its own. All design opinions are impeccable's. Stardust adds redesign-specific opinions (the divergence toolkit, the palette library, the before/after model, the migration target).
  • No production CMS output. The migration target is platform-agnostic static HTML. Conversion to AEM EDS, another CMS, or a framework is a separate downstream effort and out of scope for this plugin.
  • No closed intent vocabulary. The user phrase is open. The agent reasons about it in public.

Status

v0.3.0 — complete refactor. v1 (the four-stage greenfield design tool) is preserved at the stardust--v0.1.0 tag and is unrelated to this version's surface.

License

Apache-2.0