asw/openspec/specs/repo-structure/spec.md
Ludo 5bf233348d
feat: add OpenSpec specs and changes for ASW restructure
Specs: repo-structure, 10 framework layer specs, packs, site.
Changes: repo-restructure (10 tasks), css-refactor (12 tasks),
legacy-import (proposal + triage categories).

Supersede docs/css-refactor-plan.md in favor of OpenSpec change.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 14:58:39 +02:00

96 lines
3.9 KiB
Markdown

# Spec: Repository Structure
The directory layout contract for ASW. Defines what lives where and the boundary rules.
## Directory Map
```
asw/
src/ Framework CSS source
layers/ Numbered CSS layer files (00-reset through 12-landing)
main.css Entry point — @import chain for all layers
lab/ Experiments and test pages (not published)
dist/ Built output (committed to repo)
asw.css Single concatenated file
asw.min.css Minified
vendor/ Explicit external dependencies
open-props/ Open Props CSS (with VERSION file)
README.md What's vendored, why, how to update
packs/ Engine integration bundles
hugo/ Hugo theme/partial integration
apache/ Apache autoindex + error pages
caddy/ Caddy browse + error pages
flask/ Flask error handlers
nginx/ Nginx autoindex + error pages
pandoc/ Pandoc HTML5 template + Lua filter
python/ Python HTTP server with ASW styling
docs/ Framework documentation (markdown only)
examples/ Static HTML showcases (no build step needed)
site/ The ASW website (currently uses Hugo pack)
content/ Site-specific content (articles, essays, notes)
layouts/ Hugo templates
hugo.toml Hugo config (mounts docs/ as content/docs/)
static/ Site static assets
openspec/ Specs and changes
```
## Boundary Rules
### src/ — framework only
- Contains only CSS source files and lab experiments
- No Hugo-specific files, no content, no templates
- `main.css` imports from `layers/` using relative paths
- `lab/` contains HTML files that reference layers directly — never published
### dist/ — build artifacts, committed
- Built by PostCSS from `src/main.css`
- Committed to repo so consumers can grab without a build step
- Regenerated on deploy, not manually edited
### vendor/ — visible dependencies
- Open Props source files copied from npm, with version tracking
- `VERSION` file records package version and date of last update
- Updated manually when bumping Open Props
### packs/ — engine-agnostic integrations
- Each subdirectory is a self-contained integration for one engine
- A pack may reference `dist/asw.css` or `src/layers/` depending on its needs
- Packs ship their own README
### docs/ — markdown only
- No HTML, no engine-specific markup
- The site consumes these as content source (Hugo module mount)
- GitHub/Forgejo renders these directly — no build step to read docs
### examples/ — static HTML
- Each file is a standalone demo that loads ASW
- Can be opened in a browser by cloning the repo — no build step
- The site may link to these but they exist independently
### site/ — website concerns
- All Hugo-specific files live here
- `content/docs/` is mounted from `../docs/`, not duplicated
- Site-specific content (articles, essays, notes) lives in `content/`
- Changes to the site do not affect the framework; changes to the framework may affect the site
## Scenarios
### Given a new CSS layer
- **When** an agent creates it
- **Then** it goes in `src/layers/` with the next number
- **And** `src/main.css` gets an @import line
### Given a new framework doc
- **When** an agent writes documentation
- **Then** it goes in `docs/` as a .md file
- **And** the site picks it up automatically via Hugo mount
### Given a new engine integration
- **When** someone adds support for a new engine (e.g., Eleventy)
- **Then** it goes in `packs/<engine>/` with its own README
### Given a lab experiment
- **When** an agent wants to test a CSS pattern
- **Then** it creates a file in `src/lab/`
- **And** it references layers via relative paths
- **And** it is never published to the site