The CSS, scripts and icons, from rastrillo at SEED
Task 2 of the Fiesta part-1 plan: the design system's files, byte for
byte, and the root package that embeds them.
css/tokens.css, css/shell.css and css/themes/{day,plain,signal}.css are
rastrillo's ui/tokens.css, ui/shell.css and ui/themes/*.css at SEED,
e14b745a7c08d0efa3bf221a8b6a5e75de15c46f, copied with git show and
checked with cmp. The brief's ui/css/ paths do not exist at SEED; the
real ones are ui/ and ui/themes/. check/testdata/seed/ holds the same
five files, flat, as the baseline TestTheSourceIsTheSyncedBaseline
holds css/ against; it names all five so an empty css/ fails by name.
The seven js/ files are ui/{busy,light,anchor,shell,select,datetime,
calendar}.js the same way. rastrillo.js is not carried: Task 4 writes
fiesta.js in its place.
The twelve icons are not files at SEED. rastrillo builds them in
icons.go from iconOpen plus each glyph's path data and renders them
with {{icon}}. icons/<slug>.svg is that exact output, written by a
scratch Go program that compiled SEED's icons.go and wrote Icon(slug)
for each slug: no xmlns, no trailing newline. kebab, chevron-down,
help-circle and menu were compared byte for byte against the inline
markup in ui/styleguide.go at SEED. icons/LICENSE-lucide.txt is the
ISC notice icons.go quotes.
fiesta.go embeds LICENSE, css, js and icons and answers them: Version,
FS, TokensCSS, ShellCSS, License, ThemeNames, ThemeCSS, ScriptNames,
Script, IconSlugs and Icon. ThemeNames keeps rastrillo's order, day
first, and ScriptNames keeps ui/vendored.go's load order minus
rastrillo.js. The name lists are copies. IconSlugs reads the embedded
directory, so an icon added under icons/ is listed with no change
here.
Tests first, red by name. With a stub fiesta.go that had no go:embed
and returned nil or false, `go test -count=1 . ./check/` failed
TestTheStylesheetsAreEmbedded, TestEveryThemeIsEmbedded,
TestEveryScriptIsEmbedded, TestEveryIconIsOneLucideSVG,
TestNamesAreCopies, TestTheLicenseIsMPL, TestTheVersionIsSemver and
TestTheSourceIsTheSyncedBaseline, each with its own message and no
build error. Negative control for the baseline: the last byte of
css/themes/day.css changed in a scratch copy turned
TestTheSourceIsTheSyncedBaseline red with "css/themes/day.css differs
from its baseline check/testdata/seed/day.css".
DESIGN.md and .impeccable/design.json are not in this commit. Six of
their lines name Rastrillo, ui.ThemeNames, `rastrillo new`, `rastrillo
doctor`, `rastrillo.js` and the ui/ paths, and the Fiesta wording waits
on copy review. hack/seed/README.md is the stub the brief allows until
Task 5: the SEED sha and the sha256 of every copied file.
Human
Prompt
Task 2 of the Fiesta part-1 plan: the design system's files, byte for byte, and the root package.
From this commit's own message. The prompt ledger has no entries for it — which is what a squashed, rebased or amended commit looks like, and what every commit looks like in a repo without a ledger.
Summary
Adds css/ (tokens, shell and the three themes), js/ (the seven opt-in scripts), icons/ (twelve SVGs and the Lucide ISC notice), check/testdata/seed/ (the baseline), fiesta.go with its accessors, fiesta_test.go, check/baseline_test.go and the hack/seed/README.md stub.
Agent notes
DESIGN.md and .impeccable/design.json are not here: their Fiesta wording waits on copy review, reported as NEEDS_CONTEXT in task-2-report.md. .claude/settings.json (amadan's hooks) is untracked on purpose and not this task's.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
34 files changed,
+14228
−0
check/baseline_test.go+52 −0check/testdata/seed/day.css+422 −0check/testdata/seed/plain.css+302 −0check/testdata/seed/shell.css+51 −0check/testdata/seed/signal.css+307 −0check/testdata/seed/tokens.css+3705 −0css/shell.css+51 −0css/themes/day.css+422 −0css/themes/plain.css+302 −0css/themes/signal.css+307 −0css/tokens.css+3705 −0fiesta.go+120 −0fiesta_test.go+232 −0hack/seed/README.md+34 −0icons/LICENSE-lucide.txt+16 −0icons/alert-triangle.svg+1 −0icons/check-circle.svg+1 −0icons/check.svg+1 −0icons/chevron-down.svg+1 −0icons/help-circle.svg+1 −0icons/info.svg+1 −0icons/kebab.svg+1 −0icons/menu.svg+1 −0icons/plus.svg+1 −0icons/search.svg+1 −0icons/x-circle.svg+1 −0icons/x.svg+1 −0js/anchor.js+68 −0js/busy.js+286 −0js/calendar.js+532 −0js/datetime.js+1727 −0js/light.js+275 −0js/select.js+1154 −0js/shell.js+146 −0
check/baseline_test.goLoading diff…
check/testdata/seed/day.cssLoading diff…
check/testdata/seed/plain.cssLoading diff…
check/testdata/seed/shell.cssLoading diff…
check/testdata/seed/signal.cssLoading diff…
check/testdata/seed/tokens.cssLoading diff…
css/shell.cssLoading diff…
css/themes/day.cssLoading diff…
css/themes/plain.cssLoading diff…
css/themes/signal.cssLoading diff…
css/tokens.cssLoading diff…
fiesta.goLoading diff…
fiesta_test.goLoading diff…
hack/seed/README.mdLoading diff…
icons/LICENSE-lucide.txtLoading diff…
icons/alert-triangle.svgLoading diff…
icons/check-circle.svgLoading diff…
icons/check.svgLoading diff…
icons/chevron-down.svgLoading diff…
icons/help-circle.svgLoading diff…
icons/info.svgLoading diff…
icons/kebab.svgLoading diff…
icons/menu.svgLoading diff…
icons/plus.svgLoading diff…
icons/search.svgLoading diff…
icons/x-circle.svgLoading diff…
icons/x.svgLoading diff…
js/anchor.jsLoading diff…
js/busy.jsLoading diff…
js/calendar.jsLoading diff…
js/datetime.jsLoading diff…
js/light.jsLoading diff…
js/select.jsLoading diff…
js/shell.jsLoading diff…