Claude Sonnet 5.5
Site and docs for 0.9.0; drop template leftovers; scripts without hard-coded paths
794b22f |
Download AGENTS.md from EHS-Studio/dssl: direct link, hf CLI and curl.
- Browser
- Download file 4.61 kB
-
https://huggingface.co/EHS-Studio/dssl/resolve/main/AGENTS.md
- Command line
-
hf download hf://EHS-Studio/dssl/AGENTS.md
-
curl -L -o AGENTS.md https://huggingface.co/EHS-Studio/dssl/resolve/main/AGENTS.md
4.61 kB
AGENTS.md: for AI agents (and humans) working on this repo
DSSL is a style language. The engine lives in public/dssl/, the site in src/, the styles that
drive the site in public/styles/, the tests in scripts/, the editor extension in dssl-vscode/.
The Hugging Face repo (EHS-Studio/dssl) is this repo; its README is the full docs.
Commands
npm install # three runtime packages and a few dev ones; nothing else
npm run dev # Next dev server for the site
npm run typecheck # tsc, must be clean (builds fail on type errors)
npm test # EVERY suite in one report (needs Chrome or Chromium)
npm run test:fast # the same without the browser suites
node scripts/sync-extension-engine.mjs # REQUIRED after touching public/dssl/*.js
bash scripts/build-engine-package.sh # rebuild public/dssl-engine.zip and .tar.gz
cd dssl-vscode && npx @vscode/vsce package --no-dependencies # rebuild the .vsix
Browser tests use playwright-core with a Chrome already on the machine. Set DSSL_CHROME if
yours is somewhere unusual. scripts/lib/browser-harness.mjs is the one place that launches it.
Rules of the house
- The engine stays the engine. Inline styles applied live are the architecture, and pseudo-elements
compile to one shadow stylesheet.
dssl buildis a second lane for the static subset, not a replacement: anything that needs the runtime (@signal,animate, aura, texture, deform, overlap) stays in the engine, and the build report must say so. If you add an engine-native feature, the report has to count it (it prefixes its declaration with@, which is howstatic.jsknows). - New language surface needs tests in a
scripts/test-vNNN.mjsand, if it draws, a real-browser test. A string comparison of generated CSS is not a test of rendering: look at pixels (scripts/lib/pixels.mjs). Add a changelog entry insrc/components/dssl/views/ChangelogView.tsx. - Every error is loud, with a did-you-mean, and a leftover or unknown word is an error, never noise.
Warnings compile fine;
okstaystrue. A lint or checker must never be able to break a compile. - The site dogfoods the engine: its styling lives in
public/styles/*.dssl, anddssl check --strictover those files must print nothing. A new page needs a route undersrc/app/, an entry inNAVandVIEW_PATHinSiteRoot.tsx, its own.dssllisted inDSSL_SHEETSinsrc/app/layout.tsx, and a line insrc/app/sitemap.ts. - After ANY change to
public/dssl/*.js, runscripts/sync-extension-engine.mjs, then the extension tests. The package script and the sync script copy the WHOLE engine folder (the resolver importscolor,texture,aura,sliderandlint); never go back to a hardcoded file list. A test (test-v081.mjs,test-designer-host.mjs) fails if you do. - Cascade order is one global sequence in load order (
assignGlobalOrderinengine.js). Do not compare a rule's ownorderacross stylesheets. - Never commit tokens or credentials, not here, not in
public/, not in a commit message. - Deploys. Site:
vercel deploy --prod --yes --token "$VERCEL_TOKEN"from the repo root (the project isdssl; runvercel link --project dsslonce, and delete the.env.localit writes). Hugging Face: pushmainwith the token in a request header, not in the URL, so nothing lands in.git/config:git -c http.extraHeader="Authorization: Basic $(printf 'EHS-Studio:%s' "$HF_TOKEN" | base64 -w0)" push origin main. - Verify a ship with raw
curland a cache-busting query string, not only a fetcher: CDNs have served stale content minutes after a good deploy. - Docs are written for people. Plain sentences, no em dashes, say what it is and what it costs. Tables of settings are generated from the vocabulary modules, so they cannot drift.
Conventions
- Numbers are bare and mean pixels. No semicolons are required (except inside
raw { }, which is real CSS). Comments are//and/* */. - The token registry folds across files in load order;
tokens*.dsslsorts first. - Aura has no presets, on purpose. If you want fire, write a
behavior. Textures have presets because they are stored combinations of generators and settings; every preset must be reproducible by hand. - The site is the test suite: when the site needs something the language cannot express, the language grows. That loop found the cascade bug in 0.8.2 and the contrast failures in 0.9.0.