Casca 1.5.6 (2026-06-05)Link to section
AddedLink to section
- Add SSG layout URL helpers
asset_url(path),page_url(path), andcanonical_url()for depth-aware output-tree URLs and absolute canonical URLs. Layouts may use the helper expression syntax{{ FN(ARG) }}so a single static build works from/,/casca/, or another URL root.
ToolingLink to section
- Workflow topology refactor.
release.ymlbecomes the sole owner of portal site-deploy.lint-plus-policy.ymlloses itssite-deployjob entirely (lint and policy remain).release.yml's trigger expands topush: branches: [main], tags: ['v*'], with all binary/release jobs gatedif: github.ref_type == 'tag'so they skip on non-tag pushes. A newportal-deployjob runs only on branch pushes to main, uses the Phase 096 cross-workflow cache, and skips when av*tag points at HEAD (the tag-ref workflow run owns the deploy in that case). The existing tag-pathsite-deployjob is preserved unchanged for tag pushes (still uses the artifact and manifest verification from Phase 095). Per-ref concurrency group onrelease.ymlprevents tag and main runs from the same coordinated push from cancelling each other. - Reorder
Restore cross-workflow bootstrap stateBEFOREInstall system dependenciesin lint and the new portal-deploy. GateInstall system dependencieson cache-miss (if: steps.casca-bootstrap-cache.outputs.cache-hit != 'true') so warm runs skip the apt step entirely. This eliminates the variance the user reported (apt-get updatecan take seconds or minutes depending on mirror response). The policy job keeps apt always-on because it runsnpm-pack-all-prebuilt, andnpmis not in the cachepath:. - Derive the previous monorepo tag's
VERSION-cssvalue from the git tag history intools/release-css-mirror.shinstead of looking it up in.casca-cache/release-coordinates.tsv. The TSV path was gitignored and never persisted between v1.5.5 release runs, so the v1.5.5 mirror push trippedrelease-css-mirror: no release-coordinates row for v1.5.0. The replacement walksgit tag --list 'v*' --sort=-v:refnamenewest-first and reads each candidate tag'sVERSION-cssviagit show ${tag}:VERSION-css; the first match wins. Therelease-coordinatespreflight job and the corresponding Makefile step (on-main-and-coordinate-match->on-main) are removed since the TSV is no longer load-bearing. - README rewrite for the v2-era surface: lead with the dual identity (CSS-only design system + Rust SSG), single Install section, and a shorter Highlights list. Removes the legacy "Why Casca" prose and reorders the badge strip so license and SSG badges follow the npm package badges.
CompatibilityLink to section
The SSG layout helpers asset_url(path), page_url(path), canonical_url(),
and the {{ FN(ARG) }} expression syntax are public Casca CLI API as of
0.2.0. Future releases must preserve them or make a semver-major SSG
compatibility change.