Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"name": "stardust",
"source": "./plugins/stardust",
"description": "Redesign an existing website to make it better. Higher-level guided flow on top of impeccable.",
"version": "0.13.0",
"version": "0.13.2",
"category": "design",
"keywords": [
"design",
Expand Down
2 changes: 1 addition & 1 deletion plugins/stardust/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "stardust",
"description": "Redesign an existing website to make it better. Higher-level guided flow on top of impeccable.",
"version": "0.13.1",
"version": "0.13.2",
"author": {
"name": "Adobe"
},
Expand Down
21 changes: 20 additions & 1 deletion plugins/stardust/skills/deploy/IMPROVEMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,19 @@ to the `samples/**` claude-design prototypes in this repo. Each test converts
Status legend: 🔴 blocker / bug · 🟠 missing guidance · 🟡 nice-to-have ·
✅ implemented in skill.

> **⚠️ AuthorKit-legacy findings.** `stardust:deploy` now targets the **vanilla
> `aem-boilerplate`** runtime; the AuthorKit runtime (and its bootstrap-onto-vanilla
> port) has been removed from the skill. The findings below that are specific to the
> AuthorKit runtime — **#4** (lazy.js footer double-load), **#21/#26** (`postlcp.js`
> fragment className), **#40** (`body.appear` blank-render — *inverted* under vanilla:
> the gate is now KEPT), **#81** (late static-fragment header CLS — under vanilla the
> cause is the late header-*block* decoration, same reservation fix), **#84** (manual
> AuthorKit bootstrap / version drift — the `bootstrap-authorkit.mjs` script and the
> Runtime-bootstrap section are deleted), plus the `.btn`/`body.session`/static-fragment
> guidance — are retained **only** as history for anyone maintaining an existing
> AuthorKit site. They do NOT describe the current vanilla path. See SKILL.md's
> "Runtime" section for the supported contract.

---

## Findings (wasatch-back deploy — `stardust:deploy`)
Expand Down Expand Up @@ -690,7 +703,13 @@ persistent ledger that skips already-live pages, retry/backoff on 000/429/5xx,
append-only log, delivered-`.plain.html` verify before flip; idempotent re-run
re-drives only FAILs). Wired into extract/SKILL.md, deploy/SKILL.md, rollout/SKILL.md.

### #84 🟠 AuthorKit bootstrap is manual + version-drifted ✅
### #84 🟠 AuthorKit bootstrap is manual + version-drifted → ⛔️ SUPERSEDED (AuthorKit removed)
**Update:** This finding (and its `bootstrap-authorkit.mjs` fix) is **obsolete**. The
deploy skill no longer ports the AuthorKit runtime at all — vanilla `aem-boilerplate`
is the target, so there is nothing to bootstrap. `bootstrap-authorkit.mjs` has been
deleted and the Runtime-bootstrap section removed. The original finding is kept below
for history only.

**Where:** 5 sites. ~15 manual file ops with two silent-failing mandatory edits;
"port from the latest test branch" is an unpinned moving target, and author-kit's
runtime has drifted (static-fragment → block-based) so the documented edits can
Expand Down
227 changes: 83 additions & 144 deletions plugins/stardust/skills/deploy/SKILL.md

Large diffs are not rendered by default.

192 changes: 0 additions & 192 deletions plugins/stardust/skills/deploy/scripts/bootstrap-authorkit.mjs

This file was deleted.

7 changes: 3 additions & 4 deletions plugins/stardust/skills/deploy/scripts/build-harness.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
* Usage: node skills/deploy/scripts/build-harness.mjs <contentFile> <outHarness>
* e.g. node skills/deploy/scripts/build-harness.mjs content/snowflake-blocks/test-12.html qa/test-12.html
*
* Output: a full HTML doc loading /styles/styles.css + /scripts/ak.js +
* /scripts/scripts.js, body = <main> with metadata removed and every absolute
* .../img/ (or http://localhost:PORT/img/) <img src> rewritten root-relative.
* Output: a full HTML doc loading /styles/styles.css + /scripts/scripts.js
* (vanilla aem-boilerplate boot), body = <main> with metadata removed and every
* absolute .../img/ (or http://localhost:PORT/img/) <img src> rewritten root-relative.
*/
import { readFileSync, writeFileSync } from 'fs';

Expand Down Expand Up @@ -65,7 +65,6 @@ if (lead.startsWith('</div>')) {
const doc = `<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>QA harness</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/styles/styles.css">
<script src="/scripts/ak.js" type="module"></script>
<script src="/scripts/scripts.js" type="module"></script>
<link rel="icon" href="data:,"></head>
<body>
Expand Down
2 changes: 1 addition & 1 deletion plugins/stardust/skills/diff/scripts/diff-profiles.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export const profiles = {
EXTRA: 'Unexpected node with no proto source.',
FONT_FORK: 'A "→sys" on the proto side means it named a font it never loaded and fell back — EDS self-hosting the intended fallback is then CORRECT (#77); confirm the fork is intended, else ship the missing @font-face.',
// visual-diff
BLANK_RENDER: 'Likely a foundation body{display:none}/body.appear gate the runtime never satisfies (use the body.session font gate, no display gate), or the harness failed to load. Fix before trusting any other result.',
BLANK_RENDER: 'The page rendered zero-height/empty. On vanilla aem-boilerplate the body{display:none}/body.appear gate IS driven by scripts.js loadEager — so a blank render usually means the harness failed to load scripts.js (no `appear` added) or a block threw during decorate; check the harness loads /scripts/scripts.js and the console is clean. Fix before trusting any other result.',
IMAGERY_GAP: 'Likely image-less content using CSS fallbacks (#2) — EYEBALL the screenshots to confirm the fallbacks render intentionally (not a missing-asset regression). Not a defect by itself.',
CONTENT_GAP: 'The EDS likely DROPPED or duplicated authored content (a missing section, a dropped CTA) — eyeball the section pair; metrics-only checks (stretch/flush/blank) cannot see this.',
SURFACE_GROUND: 'A band likely rendered on the wrong ground (dark vs light). Check the owning block section background (#58/#59).',
Expand Down
21 changes: 11 additions & 10 deletions plugins/stardust/skills/rollout/reference/multilingual.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,20 @@ a ~90-pages-per-language add (≥5 per template).
agents grouped by template-type, each given the default-language reference file to
mirror — *no new blocks*.

- **Language-route the static header/footer.** A single `loadStaticFragment`
(`postlcp.js`) serves one fragment for all pages; make it pick by path prefix and
fall back to the default:
- **Language-route the header/footer blocks.** The `header`/`footer` blocks render
one chrome for the whole repo; make them resolve the chrome per language by path
prefix, with a fallback to the default. In the block `decorate()`:
```js
const seg = window.location.pathname.split('/')[1];
const lang = (seg === 'fr' || seg === 'en') ? `${seg}/` : '';
let resp = await fetch(`${codeBase}/fragments/${lang}${name}.html`);
if (!resp.ok && lang) resp = await fetch(`${codeBase}/fragments/${name}.html`);
const lang = (seg === 'fr' || seg === 'en') ? seg : '';
// self-contained block: branch the lifted DOM/strings by `lang`.
// fragment-content block: loadFragment(`/${lang}/nav`) → fall back to `/nav`.
```
Add `fragments/fr/{header,footer}.html` + `fragments/en/…`: translated labels,
links localized to *live* same-language pages (else a source bounce), and a
**language switcher that targets each language's home** — don't try to compute
per-page cross-language equivalents.
Provide per-language chrome (self-contained: a translated-strings map keyed by
`lang`; fragment-content: `content/fr/{nav,footer}` + `content/en/…`) with:
translated labels, links localized to *live* same-language pages (else a source
bounce), and a **language switcher that targets each language's home** — don't try
to compute per-page cross-language equivalents.

- **Per-language indexes** in `helix-query.yaml`: clone each index with a
language-scoped `include` glob + a language-prefixed `target`, and **fix the
Expand Down
Loading