Checklist for cutting a new version of the @accesspath/* packages and updating the site.
Work top to bottom. Nothing here is automated end-to-end — that's deliberate; each step is
cheap and the failure modes are subtle.
If you change one of these, the docs that restate it (below) must change too. npm run check
catches most drift; the rest is on you.
| Fact | Defined in |
|---|---|
| Profile keys, labels, and what each bundle turns on | packages/core/src/profiles.ts (PROFILES, PROFILE_LABELS) |
Default storageKey |
packages/core/src/profiles.ts (DEFAULT_STORAGE_KEY) |
| Default section order, control categories | packages/core/src/panel-dom.ts (DEFAULT_SECTION_ORDER, DEFAULT_CONTROL_CATEGORIES) |
audit section is opt-in |
packages/core/src/panel-dom.ts (not in DEFAULT_SECTION_ORDER) |
| Valid trigger positions / shapes / icons, valid locales | packages/embed/src/index.ts (VALID_*) |
Every data-* attribute the embed reads |
packages/embed/src/index.ts (readConfig) |
| React props | packages/react/src/AccessPathPanel.tsx (AccessPathPanelProps) |
| Angular inputs | packages/angular/src/lib/accessibility-panel.component.ts (@Input()s) |
| CSS effect classes / what they do | packages/core/styles/a11y-effects.css |
Brand tokens (--ap-*) |
docs/brand.md + packages/core/styles/panel.css |
Docs that restate the above (keep in sync):
packages/site/integration-guide.html— the human-facing reference tablespackages/site/public/llms-full.txt— the AI-facing single-file referencepackages/site/index.html— the "Install & Customize" builder controls + the pasted snippetspackages/site/accessibility-guide.html— profile table + tool listREADME.mdand the fourpackages/*/README.mdaccessibility.md,docs/features-and-profiles.md— detailed feature docs
-
npm run checkpasses — docs config reference matches source (profile keys, storageKey default, section/category/position/shape/icon/locale value lists, everydata-*attr documented,auditdocumented as opt-in in both doc files). -
npm run build:allsucceeds from a clean tree (rm -rf packages/*/dist dist). - Counts are consistent everywhere a number appears:
- profile count (currently 9) — grep
grep -rn "profiles" packages/site --include=*.html | grep -iE "[0-9]+ (preset )?profiles"- tool count (currently 30+) - the homepage eyebrow badge (9 PROFILES · 30+ TOOLS) andmain.ts'sALL_PROFILE_KEYS - Browser-test the widget against the real built packages, all three wrappers:
-
packages/embed/demo/served overhttp://— open panel, every profile, every control (check computed styles, not just that it toggles), Tab cycle, Escape, focus return -npm run demo:angular(→ :4300) and the React demo (→ :5174) — same pass - the standalone demos in../accesspath-demos/if you keep them — they should use the published packages / the@0CDN, not local tarballs - Especially re-verify anything touched inpackages/core: font scaling (leaf-only rule), contrast/saturation filters, dyslexia font load, the focus trap's repeated-open case - Lighthouse on the built site, served with gzip (mimics Cloudflare Pages), mobile profile:
Performance ≥ 90, Accessibility / Best Practices / SEO = 100. Run on
/and one content page. - JSON-LD on every site page still parses (
for f in packages/site/*.html; do ... JSON.parse ...). - No stray
console.error/ pageerror in any demo. -
packages/sitebuilds andvite previewserves without errors;/llms.txt,/llms-full.txt,/sitemap.xml,/robots.txt,/404.htmlall resolve.
- Update the source (see the table in §0).
- Update
packages/site/integration-guide.html— the embed table, the React table, the Angular table, and the value-list section (#ref-*). - Update
packages/site/public/llms-full.txt— the config table, the value lists,CustomActionConfig, and any prose that names the option. - Update the homepage builder (
packages/site/index.htmlcontrol markup +packages/site/src/builder.ts—BuilderState,queryBuilderEls,generateBuilderCode,syncPreviewWidget, and the change listener) so the generated snippet and live preview cover it. - Update
accessibility-guide.htmlif it's a profile or a visible tool. - Update the relevant README(s).
-
npm run checkmust still pass (extendscripts/check-docs-sync.mjsif you added a new value list worth guarding).
- Decide the bump (patch / minor / major) per semver. A doc-only or metadata-only change is
still a patch if it ships in a package (
keywords,homepage, a README). - Bump all four
packages/{core,embed,react,angular}/package.jsonversionto the same number. - Update the cross-dep ranges:
embed/react/angulareach depend on@accesspath/core— bump theirdependencies/peerDependencies@accesspath/corerange to^<new version>. -
npm run check && npm run build:allonce more after the bump. - Commit:
Release X.Y.Z: <one line>.
Order matters — core first; the others build:core again but resolve the just-published core
for their own dep. Each prompts for your npm 2FA OTP.
npm run publish:core
npm run publish:embed
npm run publish:react
npm run publish:angular
-
npm view @accesspath/core version(and embed/react/angular) all print the new version. -
curl -sSI "https://cdn.jsdelivr.net/npm/@accesspath/embed@0/dist/embed.js"→ 200, and the served file's header comment names the new version (jsDelivr can lag a few minutes).
.github/workflows/release.yml creates the GitHub release automatically as soon as a
vX.Y.Z tag is pushed (auto-generated notes from commits since the last tag) — so
pushing the tag is the only manual step left here:
git tag vX.Y.Z
git push origin vX.Y.Z
- Check the Actions tab for the "GitHub release" run, then the release itself — auto-generated notes are a starting point; edit in the release's own page if the commit list needs more context (install snippet, migration notes, etc).
- "Set as latest release" (usually automatic for the newest semver tag, but verify).
- The push to
maintriggers Cloudflare Pages. Confirm the build went green in the Cloudflare dashboard (it can lag the push by a minute or two). - Spot-check live:
/,/integration-guide.html,/react.html,/wordpress.html,/vs-userway.html,/llms.txt,/llms-full.txt— all 200, no console errors, the site's own widget opens. -
packages/siteserves the real embed build (scripts/sync-embed.mjsruns in itsdev/build). If you changedpackages/embed, the site'spublic/embed.jscopy is regenerated on the next site build — don't ship a stale one.
- Google Search Console / Bing Webmaster — resubmit
sitemap.xmlif pages were added. - If a
data-*attribute or prop was added, thellms-full.txt"Configuration reference" table is the one an AI agent will paste from — double-check it one more time. - Update
todo.md/ close the issue.
@accesspath/coreresolves viadist/, not TS path-mapping, for the Angular library (ng-packagrenforces a self-containedrootDir). Build order is always core → {embed, react, angular, site}.- The demos are not in this repo's git (
../accesspath-demos/). If you keep using them as a publish smoke-test, remember torm -rf node_modules package-lock.json && npm installthere so they pull the newly published versions. - Custom domain: canonical/OG/sitemap/JSON-LD URLs are hardcoded to
https://accesspath-6ur.pages.dev. If you attachaccesspath.dev, rewrite them all (one sweep acrosspackages/site/*.html+public/sitemap.xml+public/robots.txt+ thepackages/*/package.jsonhomepagefields +llms*.txt) and set up a 301 from pages.dev. packages/coreships on arbitrary third-party pages. A fix tuned topackages/site's specific markup belongs inpackages/site, not core. SeeCLAUDE.md.